diff --git a/.gitattributes b/.gitattributes new file mode 100644 index 000000000..dd04b7024 --- /dev/null +++ b/.gitattributes @@ -0,0 +1,3 @@ +*.py linguist-language=python + +*.ipynb linguist-documentation diff --git a/.github/ISSUE_TEMPLATE.md b/.github/ISSUE_TEMPLATE.md new file mode 100644 index 000000000..7c1c5b5bf --- /dev/null +++ b/.github/ISSUE_TEMPLATE.md @@ -0,0 +1,25 @@ +# Description + + + +## Type of issue + +- [ ] Feature (New Script) +- [ ] Bug +- [ ] Documentation + +## Checklist: + +- [ ] I have read the project guidelines. +- [ ] I have checked all the existing projects, before submitting a new project issue. +- [ ] I have checked previous issues to avoid duplicates. +- [ ] This issue will be meaningful for the project. + + + + + diff --git a/.github/PULL_REQUEST_TEMPLATE.md b/.github/PULL_REQUEST_TEMPLATE.md new file mode 100644 index 000000000..e40ea3125 --- /dev/null +++ b/.github/PULL_REQUEST_TEMPLATE.md @@ -0,0 +1,27 @@ +# Description + +A short summary of what is included in your Pull Request. + +Fixes #(issue_no) + +Replace `issue_no` in the above line, with the issue related to this PR. + +## Type of change + +Choosing one or more options from the following as per the nature of your Pull request. + +- [ ] Bug fix (non-breaking change which fixes an issue) +- [ ] New feature (non-breaking change which adds functionality) +- [ ] Documentation Update + +# Checklist: +Please tick all the boxes that are fulfilled by your Pull Request. + +- [ ] I have named my files and folder, according to this project's guidelines. +- [ ] My code follows the style guidelines of this project. +- [ ] My Pull Request has a descriptive title. (not a vague title like `Update index.md`) +- [ ] I have commented on my code, particularly in hard-to-understand areas. +- [ ] I have created a helpful and easy to understand `README.md`, according to the given [`README_TEMPLATE.`](https://github.com/chavarera/python-mini-projects/blob/master/README_TEMPLATE.md) +- [ ] I have included a requirements.txt file (if external libraries are required.) +- [ ] My changes do not produce any warnings. +- [ ] I have added a working sample/screenshot of the script. diff --git a/.github/workflows/blank.yml b/.github/workflows/blank.yml new file mode 100644 index 000000000..f63e1cf1f --- /dev/null +++ b/.github/workflows/blank.yml @@ -0,0 +1,34 @@ +# This is a basic workflow to help you get started with Actions + +name: CI + +# Controls when the action will run. Triggers the workflow on push or pull request +# events but only for the master branch +on: + push: + branches: [ master ] + pull_request: + branches: [ master ] + +# A workflow run is made up of one or more jobs that can run sequentially or in parallel +jobs: + # This workflow contains a single job called "build" + build: + # The type of runner that the job will run on + runs-on: ubuntu-latest + + # Steps represent a sequence of tasks that will be executed as part of the job + steps: + # Checks-out your repository under $GITHUB_WORKSPACE, so your job can access it + - uses: actions/checkout@v2 + + # Runs a single command using the runners shell + - name: Run a one-line script + run: echo Hello, world! + + # Runs a set of commands using the runners shell + - name: Run a multi-line script + run: | + echo Add other actions to build, + echo test, and deploy your project. + diff --git a/.github/workflows/python-app.yml b/.github/workflows/python-app.yml new file mode 100644 index 000000000..ce3cf01d6 --- /dev/null +++ b/.github/workflows/python-app.yml @@ -0,0 +1,34 @@ +# This workflow will install Python dependencies, run tests and lint with a single version of Python +# For more information see: https://help.github.com/actions/language-and-framework-guides/using-python-with-github-actions + +name: Python application + +on: + push: + branches: [ master ] + pull_request: + branches: [ master ] + +jobs: + build: + + runs-on: ubuntu-latest + + steps: + - uses: actions/checkout@v2 + - name: Set up Python 3.8 + uses: actions/setup-python@v2 + with: + python-version: 3.8 + - name: Install dependencies + run: | + python -m pip install --upgrade pip + pip install flake8 + if [ -f requirements.txt ]; then pip install -r requirements.txt; fi + - name: Lint with flake8 + run: | + # stop the build if there are Python syntax errors or undefined names + flake8 . --count --select=E9,F63,F7,F82 --show-source --statistics + # exit-zero treats all errors as warnings. The GitHub editor is 127 chars wide + flake8 . --count --exit-zero --max-complexity=10 --max-line-length=127 --statistics + diff --git a/Notebooks/Customer_loan_repayment_problem/datasets_137197_325031_test_Y3wMUE5_7gLdaTN.csv b/Notebooks/Customer_loan_repayment_problem/datasets_137197_325031_test_Y3wMUE5_7gLdaTN.csv new file mode 100644 index 000000000..a987cb2ce --- /dev/null +++ b/Notebooks/Customer_loan_repayment_problem/datasets_137197_325031_test_Y3wMUE5_7gLdaTN.csv @@ -0,0 +1,368 @@ +Loan_ID,Gender,Married,Dependents,Education,Self_Employed,ApplicantIncome,CoapplicantIncome,LoanAmount,Loan_Amount_Term,Credit_History,Property_Area +LP001015,Male,Yes,0,Graduate,No,5720,0,110,360,1,Urban +LP001022,Male,Yes,1,Graduate,No,3076,1500,126,360,1,Urban +LP001031,Male,Yes,2,Graduate,No,5000,1800,208,360,1,Urban +LP001035,Male,Yes,2,Graduate,No,2340,2546,100,360,,Urban +LP001051,Male,No,0,Not Graduate,No,3276,0,78,360,1,Urban +LP001054,Male,Yes,0,Not Graduate,Yes,2165,3422,152,360,1,Urban +LP001055,Female,No,1,Not Graduate,No,2226,0,59,360,1,Semiurban +LP001056,Male,Yes,2,Not Graduate,No,3881,0,147,360,0,Rural +LP001059,Male,Yes,2,Graduate,,13633,0,280,240,1,Urban +LP001067,Male,No,0,Not Graduate,No,2400,2400,123,360,1,Semiurban +LP001078,Male,No,0,Not Graduate,No,3091,0,90,360,1,Urban +LP001082,Male,Yes,1,Graduate,,2185,1516,162,360,1,Semiurban +LP001083,Male,No,3+,Graduate,No,4166,0,40,180,,Urban +LP001094,Male,Yes,2,Graduate,,12173,0,166,360,0,Semiurban +LP001096,Female,No,0,Graduate,No,4666,0,124,360,1,Semiurban +LP001099,Male,No,1,Graduate,No,5667,0,131,360,1,Urban +LP001105,Male,Yes,2,Graduate,No,4583,2916,200,360,1,Urban +LP001107,Male,Yes,3+,Graduate,No,3786,333,126,360,1,Semiurban +LP001108,Male,Yes,0,Graduate,No,9226,7916,300,360,1,Urban +LP001115,Male,No,0,Graduate,No,1300,3470,100,180,1,Semiurban +LP001121,Male,Yes,1,Not Graduate,No,1888,1620,48,360,1,Urban +LP001124,Female,No,3+,Not Graduate,No,2083,0,28,180,1,Urban +LP001128,,No,0,Graduate,No,3909,0,101,360,1,Urban +LP001135,Female,No,0,Not Graduate,No,3765,0,125,360,1,Urban +LP001149,Male,Yes,0,Graduate,No,5400,4380,290,360,1,Urban +LP001153,Male,No,0,Graduate,No,0,24000,148,360,0,Rural +LP001163,Male,Yes,2,Graduate,No,4363,1250,140,360,,Urban +LP001169,Male,Yes,0,Graduate,No,7500,3750,275,360,1,Urban +LP001174,Male,Yes,0,Graduate,No,3772,833,57,360,,Semiurban +LP001176,Male,No,0,Graduate,No,2942,2382,125,180,1,Urban +LP001177,Female,No,0,Not Graduate,No,2478,0,75,360,1,Semiurban +LP001183,Male,Yes,2,Graduate,No,6250,820,192,360,1,Urban +LP001185,Male,No,0,Graduate,No,3268,1683,152,360,1,Semiurban +LP001187,Male,Yes,0,Graduate,No,2783,2708,158,360,1,Urban +LP001190,Male,Yes,0,Graduate,No,2740,1541,101,360,1,Urban +LP001203,Male,No,0,Graduate,No,3150,0,176,360,0,Semiurban +LP001208,Male,Yes,2,Graduate,,7350,4029,185,180,1,Urban +LP001210,Male,Yes,0,Graduate,Yes,2267,2792,90,360,1,Urban +LP001211,Male,No,0,Graduate,Yes,5833,0,116,360,1,Urban +LP001219,Male,No,0,Graduate,No,3643,1963,138,360,1,Urban +LP001220,Male,Yes,0,Graduate,No,5629,818,100,360,1,Urban +LP001221,Female,No,0,Graduate,No,3644,0,110,360,1,Urban +LP001226,Male,Yes,0,Not Graduate,No,1750,2024,90,360,1,Semiurban +LP001230,Male,No,0,Graduate,No,6500,2600,200,360,1,Semiurban +LP001231,Female,No,0,Graduate,No,3666,0,84,360,1,Urban +LP001232,Male,Yes,0,Graduate,No,4260,3900,185,,,Urban +LP001237,Male,Yes,,Not Graduate,No,4163,1475,162,360,1,Urban +LP001242,Male,No,0,Not Graduate,No,2356,1902,108,360,1,Semiurban +LP001268,Male,No,0,Graduate,No,6792,3338,187,,1,Urban +LP001270,Male,Yes,3+,Not Graduate,Yes,8000,250,187,360,1,Semiurban +LP001284,Male,Yes,1,Graduate,No,2419,1707,124,360,1,Urban +LP001287,,Yes,3+,Not Graduate,No,3500,833,120,360,1,Semiurban +LP001291,Male,Yes,1,Graduate,No,3500,3077,160,360,1,Semiurban +LP001298,Male,Yes,2,Graduate,No,4116,1000,30,180,1,Urban +LP001312,Male,Yes,0,Not Graduate,Yes,5293,0,92,360,1,Urban +LP001313,Male,No,0,Graduate,No,2750,0,130,360,0,Urban +LP001317,Female,No,0,Not Graduate,No,4402,0,130,360,1,Rural +LP001321,Male,Yes,2,Graduate,No,3613,3539,134,180,1,Semiurban +LP001323,Female,Yes,2,Graduate,No,2779,3664,176,360,0,Semiurban +LP001324,Male,Yes,3+,Graduate,No,4720,0,90,180,1,Semiurban +LP001332,Male,Yes,0,Not Graduate,No,2415,1721,110,360,1,Semiurban +LP001335,Male,Yes,0,Graduate,Yes,7016,292,125,360,1,Urban +LP001338,Female,No,2,Graduate,No,4968,0,189,360,1,Semiurban +LP001347,Female,No,0,Graduate,No,2101,1500,108,360,0,Rural +LP001348,Male,Yes,3+,Not Graduate,No,4490,0,125,360,1,Urban +LP001351,Male,Yes,0,Graduate,No,2917,3583,138,360,1,Semiurban +LP001352,Male,Yes,0,Not Graduate,No,4700,0,135,360,0,Semiurban +LP001358,Male,Yes,0,Graduate,No,3445,0,130,360,0,Semiurban +LP001359,Male,Yes,0,Graduate,No,7666,0,187,360,1,Semiurban +LP001361,Male,Yes,0,Graduate,No,2458,5105,188,360,0,Rural +LP001366,Female,No,,Graduate,No,3250,0,95,360,1,Semiurban +LP001368,Male,No,0,Graduate,No,4463,0,65,360,1,Semiurban +LP001375,Male,Yes,1,Graduate,,4083,1775,139,60,1,Urban +LP001380,Male,Yes,0,Graduate,Yes,3900,2094,232,360,1,Rural +LP001386,Male,Yes,0,Not Graduate,No,4750,3583,144,360,1,Semiurban +LP001400,Male,No,0,Graduate,No,3583,3435,155,360,1,Urban +LP001407,Male,Yes,0,Graduate,No,3189,2367,186,360,1,Urban +LP001413,Male,No,0,Graduate,Yes,6356,0,50,360,1,Rural +LP001415,Male,Yes,1,Graduate,No,3413,4053,,360,1,Semiurban +LP001419,Female,Yes,0,Graduate,No,7950,0,185,360,1,Urban +LP001420,Male,Yes,3+,Graduate,No,3829,1103,163,360,0,Urban +LP001428,Male,Yes,3+,Graduate,No,72529,0,360,360,1,Urban +LP001445,Male,Yes,2,Not Graduate,No,4136,0,149,480,0,Rural +LP001446,Male,Yes,0,Graduate,No,8449,0,257,360,1,Rural +LP001450,Male,Yes,0,Graduate,No,4456,0,131,180,0,Semiurban +LP001452,Male,Yes,2,Graduate,No,4635,8000,102,180,1,Rural +LP001455,Male,Yes,0,Graduate,No,3571,1917,135,360,1,Urban +LP001466,Male,No,0,Graduate,No,3066,0,95,360,1,Semiurban +LP001471,Male,No,2,Not Graduate,No,3235,2015,77,360,1,Semiurban +LP001472,Female,No,0,Graduate,,5058,0,200,360,1,Rural +LP001475,Male,Yes,0,Graduate,Yes,3188,2286,130,360,,Rural +LP001483,Male,Yes,3+,Graduate,No,13518,0,390,360,1,Rural +LP001486,Male,Yes,1,Graduate,No,4364,2500,185,360,1,Semiurban +LP001490,Male,Yes,2,Not Graduate,No,4766,1646,100,360,1,Semiurban +LP001496,Male,Yes,1,Graduate,No,4609,2333,123,360,0,Semiurban +LP001499,Female,Yes,3+,Graduate,No,6260,0,110,360,1,Semiurban +LP001500,Male,Yes,1,Graduate,No,3333,4200,256,360,1,Urban +LP001501,Male,Yes,0,Graduate,No,3500,3250,140,360,1,Semiurban +LP001517,Male,Yes,3+,Graduate,No,9719,0,61,360,1,Urban +LP001527,Male,Yes,3+,Graduate,No,6835,0,188,360,,Semiurban +LP001534,Male,No,0,Graduate,No,4452,0,131,360,1,Rural +LP001542,Female,Yes,0,Graduate,No,2262,0,,480,0,Semiurban +LP001547,Male,Yes,1,Graduate,No,3901,0,116,360,1,Urban +LP001548,Male,Yes,2,Not Graduate,No,2687,0,50,180,1,Rural +LP001558,Male,No,0,Graduate,No,2243,2233,107,360,,Semiurban +LP001561,Female,Yes,0,Graduate,No,3417,1287,200,360,1,Semiurban +LP001563,,No,0,Graduate,No,1596,1760,119,360,0,Urban +LP001567,Male,Yes,3+,Graduate,No,4513,0,120,360,1,Rural +LP001568,Male,Yes,0,Graduate,No,4500,0,140,360,1,Semiurban +LP001573,Male,Yes,0,Not Graduate,No,4523,1350,165,360,1,Urban +LP001584,Female,No,0,Graduate,Yes,4742,0,108,360,1,Semiurban +LP001587,Male,Yes,,Graduate,No,4082,0,93,360,1,Semiurban +LP001589,Female,No,0,Graduate,No,3417,0,102,360,1,Urban +LP001591,Female,Yes,2,Graduate,No,2922,3396,122,360,1,Semiurban +LP001599,Male,Yes,0,Graduate,No,4167,4754,160,360,1,Rural +LP001601,Male,No,3+,Graduate,No,4243,4123,157,360,,Semiurban +LP001607,Female,No,0,Not Graduate,No,0,1760,180,360,1,Semiurban +LP001611,Male,Yes,1,Graduate,No,1516,2900,80,,0,Rural +LP001613,Female,No,0,Graduate,No,1762,2666,104,360,0,Urban +LP001622,Male,Yes,2,Graduate,No,724,3510,213,360,0,Rural +LP001627,Male,No,0,Graduate,No,3125,0,65,360,1,Urban +LP001650,Male,Yes,0,Graduate,No,2333,3803,146,360,1,Rural +LP001651,Male,Yes,3+,Graduate,No,3350,1560,135,360,1,Urban +LP001652,Male,No,0,Graduate,No,2500,6414,187,360,0,Rural +LP001655,Female,No,0,Graduate,No,12500,0,300,360,0,Urban +LP001660,Male,No,0,Graduate,No,4667,0,120,360,1,Semiurban +LP001662,Male,No,0,Graduate,No,6500,0,71,360,0,Urban +LP001663,Male,Yes,2,Graduate,No,7500,0,225,360,1,Urban +LP001667,Male,No,0,Graduate,No,3073,0,70,180,1,Urban +LP001695,Male,Yes,1,Not Graduate,No,3321,2088,70,,1,Semiurban +LP001703,Male,Yes,0,Graduate,No,3333,1270,124,360,1,Urban +LP001718,Male,No,0,Graduate,No,3391,0,132,360,1,Rural +LP001728,Male,Yes,1,Graduate,Yes,3343,1517,105,360,1,Rural +LP001735,Female,No,1,Graduate,No,3620,0,90,360,1,Urban +LP001737,Male,No,0,Graduate,No,4000,0,83,84,1,Urban +LP001739,Male,Yes,0,Graduate,No,4258,0,125,360,1,Urban +LP001742,Male,Yes,2,Graduate,No,4500,0,147,360,1,Rural +LP001757,Male,Yes,1,Graduate,No,2014,2925,120,360,1,Rural +LP001769,,No,,Graduate,No,3333,1250,110,360,1,Semiurban +LP001771,Female,No,3+,Graduate,No,4083,0,103,360,,Semiurban +LP001785,Male,No,0,Graduate,No,4727,0,150,360,0,Rural +LP001787,Male,Yes,3+,Graduate,No,3089,2999,100,240,1,Rural +LP001789,Male,Yes,3+,Not Graduate,,6794,528,139,360,0,Urban +LP001791,Male,Yes,0,Graduate,Yes,32000,0,550,360,,Semiurban +LP001794,Male,Yes,2,Graduate,Yes,10890,0,260,12,1,Rural +LP001797,Female,No,0,Graduate,No,12941,0,150,300,1,Urban +LP001815,Male,No,0,Not Graduate,No,3276,0,90,360,1,Semiurban +LP001817,Male,No,0,Not Graduate,Yes,8703,0,199,360,0,Rural +LP001818,Male,Yes,1,Graduate,No,4742,717,139,360,1,Semiurban +LP001822,Male,No,0,Graduate,No,5900,0,150,360,1,Urban +LP001827,Male,No,0,Graduate,No,3071,4309,180,360,1,Urban +LP001831,Male,Yes,0,Graduate,No,2783,1456,113,360,1,Urban +LP001842,Male,No,0,Graduate,No,5000,0,148,360,1,Rural +LP001853,Male,Yes,1,Not Graduate,No,2463,2360,117,360,0,Urban +LP001855,Male,Yes,2,Graduate,No,4855,0,72,360,1,Rural +LP001857,Male,No,0,Not Graduate,Yes,1599,2474,125,300,1,Semiurban +LP001862,Male,Yes,2,Graduate,Yes,4246,4246,214,360,1,Urban +LP001867,Male,Yes,0,Graduate,No,4333,2291,133,350,1,Rural +LP001878,Male,No,1,Graduate,No,5823,2529,187,360,1,Semiurban +LP001881,Male,Yes,0,Not Graduate,No,7895,0,143,360,1,Rural +LP001886,Male,No,0,Graduate,No,4150,4256,209,360,1,Rural +LP001906,Male,No,0,Graduate,,2964,0,84,360,0,Semiurban +LP001909,Male,No,0,Graduate,No,5583,0,116,360,1,Urban +LP001911,Female,No,0,Graduate,No,2708,0,65,360,1,Rural +LP001921,Male,No,1,Graduate,No,3180,2370,80,240,,Rural +LP001923,Male,No,0,Not Graduate,No,2268,0,170,360,0,Semiurban +LP001933,Male,No,2,Not Graduate,No,1141,2017,120,360,0,Urban +LP001943,Male,Yes,0,Graduate,No,3042,3167,135,360,1,Urban +LP001950,Female,Yes,3+,Graduate,,1750,2935,94,360,0,Semiurban +LP001959,Female,Yes,1,Graduate,No,3564,0,79,360,1,Rural +LP001961,Female,No,0,Graduate,No,3958,0,110,360,1,Rural +LP001973,Male,Yes,2,Not Graduate,No,4483,0,130,360,1,Rural +LP001975,Male,Yes,0,Graduate,No,5225,0,143,360,1,Rural +LP001979,Male,No,0,Graduate,No,3017,2845,159,180,0,Urban +LP001995,Male,Yes,0,Not Graduate,No,2431,1820,110,360,0,Rural +LP001999,Male,Yes,2,Graduate,,4912,4614,160,360,1,Rural +LP002007,Male,Yes,2,Not Graduate,No,2500,3333,131,360,1,Urban +LP002009,Female,No,0,Graduate,No,2918,0,65,360,,Rural +LP002016,Male,Yes,2,Graduate,No,5128,0,143,360,1,Rural +LP002017,Male,Yes,3+,Graduate,No,15312,0,187,360,,Urban +LP002018,Male,Yes,2,Graduate,No,3958,2632,160,360,1,Semiurban +LP002027,Male,Yes,0,Graduate,No,4334,2945,165,360,1,Semiurban +LP002028,Male,Yes,2,Graduate,No,4358,0,110,360,1,Urban +LP002042,Female,Yes,1,Graduate,No,4000,3917,173,360,1,Rural +LP002045,Male,Yes,3+,Graduate,No,10166,750,150,,1,Urban +LP002046,Male,Yes,0,Not Graduate,No,4483,0,135,360,,Semiurban +LP002047,Male,Yes,2,Not Graduate,No,4521,1184,150,360,1,Semiurban +LP002056,Male,Yes,2,Graduate,No,9167,0,235,360,1,Semiurban +LP002057,Male,Yes,0,Not Graduate,No,13083,0,,360,1,Rural +LP002059,Male,Yes,2,Graduate,No,7874,3967,336,360,1,Rural +LP002062,Female,Yes,1,Graduate,No,4333,0,132,84,1,Rural +LP002064,Male,No,0,Graduate,No,4083,0,96,360,1,Urban +LP002069,Male,Yes,2,Not Graduate,,3785,2912,180,360,0,Rural +LP002070,Male,Yes,3+,Not Graduate,No,2654,1998,128,360,0,Rural +LP002077,Male,Yes,1,Graduate,No,10000,2690,412,360,1,Semiurban +LP002083,Male,No,0,Graduate,Yes,5833,0,116,360,1,Urban +LP002090,Male,Yes,1,Graduate,No,4796,0,114,360,0,Semiurban +LP002096,Male,Yes,0,Not Graduate,No,2000,1600,115,360,1,Rural +LP002099,Male,Yes,2,Graduate,No,2540,700,104,360,0,Urban +LP002102,Male,Yes,0,Graduate,Yes,1900,1442,88,360,1,Rural +LP002105,Male,Yes,0,Graduate,Yes,8706,0,108,480,1,Rural +LP002107,Male,Yes,3+,Not Graduate,No,2855,542,90,360,1,Urban +LP002111,Male,Yes,,Graduate,No,3016,1300,100,360,,Urban +LP002117,Female,Yes,0,Graduate,No,3159,2374,108,360,1,Semiurban +LP002118,Female,No,0,Graduate,No,1937,1152,78,360,1,Semiurban +LP002123,Male,Yes,0,Graduate,No,2613,2417,123,360,1,Semiurban +LP002125,Male,Yes,1,Graduate,No,4960,2600,187,360,1,Semiurban +LP002148,Male,Yes,1,Graduate,No,3074,1083,146,360,1,Semiurban +LP002152,Female,No,0,Graduate,No,4213,0,80,360,1,Urban +LP002165,,No,1,Not Graduate,No,2038,4027,100,360,1,Rural +LP002167,Female,No,0,Graduate,No,2362,0,55,360,1,Urban +LP002168,Male,No,0,Graduate,No,5333,2400,200,360,0,Rural +LP002172,Male,Yes,3+,Graduate,Yes,5384,0,150,360,1,Semiurban +LP002176,Male,No,0,Graduate,No,5708,0,150,360,1,Rural +LP002183,Male,Yes,0,Not Graduate,No,3754,3719,118,,1,Rural +LP002184,Male,Yes,0,Not Graduate,No,2914,2130,150,300,1,Urban +LP002186,Male,Yes,0,Not Graduate,No,2747,2458,118,36,1,Semiurban +LP002192,Male,Yes,0,Graduate,No,7830,2183,212,360,1,Rural +LP002195,Male,Yes,1,Graduate,Yes,3507,3148,212,360,1,Rural +LP002208,Male,Yes,1,Graduate,No,3747,2139,125,360,1,Urban +LP002212,Male,Yes,0,Graduate,No,2166,2166,108,360,,Urban +LP002240,Male,Yes,0,Not Graduate,No,3500,2168,149,360,1,Rural +LP002245,Male,Yes,2,Not Graduate,No,2896,0,80,480,1,Urban +LP002253,Female,No,1,Graduate,No,5062,0,152,300,1,Rural +LP002256,Female,No,2,Graduate,Yes,5184,0,187,360,0,Semiurban +LP002257,Female,No,0,Graduate,No,2545,0,74,360,1,Urban +LP002264,Male,Yes,0,Graduate,No,2553,1768,102,360,1,Urban +LP002270,Male,Yes,1,Graduate,No,3436,3809,100,360,1,Rural +LP002279,Male,No,0,Graduate,No,2412,2755,130,360,1,Rural +LP002286,Male,Yes,3+,Not Graduate,No,5180,0,125,360,0,Urban +LP002294,Male,No,0,Graduate,No,14911,14507,130,360,1,Semiurban +LP002298,,No,0,Graduate,Yes,2860,2988,138,360,1,Urban +LP002306,Male,Yes,0,Graduate,No,1173,1594,28,180,1,Rural +LP002310,Female,No,1,Graduate,No,7600,0,92,360,1,Semiurban +LP002311,Female,Yes,0,Graduate,No,2157,1788,104,360,1,Urban +LP002316,Male,No,0,Graduate,No,2231,2774,176,360,0,Urban +LP002321,Female,No,0,Graduate,No,2274,5211,117,360,0,Semiurban +LP002325,Male,Yes,2,Not Graduate,No,6166,13983,102,360,1,Rural +LP002326,Male,Yes,2,Not Graduate,No,2513,1110,107,360,1,Semiurban +LP002329,Male,No,0,Graduate,No,4333,0,66,480,1,Urban +LP002333,Male,No,0,Not Graduate,No,3844,0,105,360,1,Urban +LP002339,Male,Yes,0,Graduate,No,3887,1517,105,360,0,Semiurban +LP002344,Male,Yes,0,Graduate,No,3510,828,105,360,1,Semiurban +LP002346,Male,Yes,0,Graduate,,2539,1704,125,360,0,Rural +LP002354,Female,No,0,Not Graduate,No,2107,0,64,360,1,Semiurban +LP002355,,Yes,0,Graduate,No,3186,3145,150,180,0,Semiurban +LP002358,Male,Yes,2,Graduate,Yes,5000,2166,150,360,1,Urban +LP002360,Male,Yes,,Graduate,No,10000,0,,360,1,Urban +LP002375,Male,Yes,0,Not Graduate,Yes,3943,0,64,360,1,Semiurban +LP002376,Male,No,0,Graduate,No,2925,0,40,180,1,Rural +LP002383,Male,Yes,3+,Graduate,No,3242,437,142,480,0,Urban +LP002385,Male,Yes,,Graduate,No,3863,0,70,300,1,Semiurban +LP002389,Female,No,1,Graduate,No,4028,0,131,360,1,Semiurban +LP002394,Male,Yes,2,Graduate,No,4010,1025,120,360,1,Urban +LP002397,Female,Yes,1,Graduate,No,3719,1585,114,360,1,Urban +LP002399,Male,No,0,Graduate,,2858,0,123,360,0,Rural +LP002400,Female,Yes,0,Graduate,No,3833,0,92,360,1,Rural +LP002402,Male,Yes,0,Graduate,No,3333,4288,160,360,1,Urban +LP002412,Male,Yes,0,Graduate,No,3007,3725,151,360,1,Rural +LP002415,Female,No,1,Graduate,,1850,4583,81,360,,Rural +LP002417,Male,Yes,3+,Not Graduate,No,2792,2619,171,360,1,Semiurban +LP002420,Male,Yes,0,Graduate,No,2982,1550,110,360,1,Semiurban +LP002425,Male,No,0,Graduate,No,3417,738,100,360,,Rural +LP002433,Male,Yes,1,Graduate,No,18840,0,234,360,1,Rural +LP002440,Male,Yes,2,Graduate,No,2995,1120,184,360,1,Rural +LP002441,Male,No,,Graduate,No,3579,3308,138,360,,Semiurban +LP002442,Female,Yes,1,Not Graduate,No,3835,1400,112,480,0,Urban +LP002445,Female,No,1,Not Graduate,No,3854,3575,117,360,1,Rural +LP002450,Male,Yes,2,Graduate,No,5833,750,49,360,0,Rural +LP002471,Male,No,0,Graduate,No,3508,0,99,360,1,Rural +LP002476,Female,Yes,3+,Not Graduate,No,1635,2444,99,360,1,Urban +LP002482,Female,No,0,Graduate,Yes,3333,3916,212,360,1,Rural +LP002485,Male,No,1,Graduate,No,24797,0,240,360,1,Semiurban +LP002495,Male,Yes,2,Graduate,No,5667,440,130,360,0,Semiurban +LP002496,Female,No,0,Graduate,No,3500,0,94,360,0,Semiurban +LP002523,Male,Yes,3+,Graduate,No,2773,1497,108,360,1,Semiurban +LP002542,Male,Yes,0,Graduate,,6500,0,144,360,1,Urban +LP002550,Female,No,0,Graduate,No,5769,0,110,180,1,Semiurban +LP002551,Male,Yes,3+,Not Graduate,,3634,910,176,360,0,Semiurban +LP002553,,No,0,Graduate,No,29167,0,185,360,1,Semiurban +LP002554,Male,No,0,Graduate,No,2166,2057,122,360,1,Semiurban +LP002561,Male,Yes,0,Graduate,No,5000,0,126,360,1,Rural +LP002566,Female,No,0,Graduate,No,5530,0,135,360,,Urban +LP002568,Male,No,0,Not Graduate,No,9000,0,122,360,1,Rural +LP002570,Female,Yes,2,Graduate,No,10000,11666,460,360,1,Urban +LP002572,Male,Yes,1,Graduate,,8750,0,297,360,1,Urban +LP002581,Male,Yes,0,Not Graduate,No,2157,2730,140,360,,Rural +LP002584,Male,No,0,Graduate,,1972,4347,106,360,1,Rural +LP002592,Male,No,0,Graduate,No,4983,0,141,360,1,Urban +LP002593,Male,Yes,1,Graduate,No,8333,4000,,360,1,Urban +LP002599,Male,Yes,0,Graduate,No,3667,2000,170,360,1,Semiurban +LP002604,Male,Yes,2,Graduate,No,3166,2833,145,360,1,Urban +LP002605,Male,No,0,Not Graduate,No,3271,0,90,360,1,Rural +LP002609,Female,Yes,0,Graduate,No,2241,2000,88,360,0,Urban +LP002610,Male,Yes,1,Not Graduate,,1792,2565,128,360,1,Urban +LP002612,Female,Yes,0,Graduate,No,2666,0,84,480,1,Semiurban +LP002614,,No,0,Graduate,No,6478,0,108,360,1,Semiurban +LP002630,Male,No,0,Not Graduate,,3808,0,83,360,1,Rural +LP002635,Female,Yes,2,Not Graduate,No,3729,0,117,360,1,Semiurban +LP002639,Male,Yes,2,Graduate,No,4120,0,128,360,1,Rural +LP002644,Male,Yes,1,Graduate,Yes,7500,0,75,360,1,Urban +LP002651,Male,Yes,1,Graduate,,6300,0,125,360,0,Urban +LP002654,Female,No,,Graduate,Yes,14987,0,177,360,1,Rural +LP002657,,Yes,1,Not Graduate,Yes,570,2125,68,360,1,Rural +LP002711,Male,Yes,0,Graduate,No,2600,700,96,360,1,Semiurban +LP002712,Male,No,2,Not Graduate,No,2733,1083,180,360,,Semiurban +LP002721,Male,Yes,2,Graduate,Yes,7500,0,183,360,1,Rural +LP002735,Male,Yes,2,Not Graduate,No,3859,0,121,360,1,Rural +LP002744,Male,Yes,1,Graduate,No,6825,0,162,360,1,Rural +LP002745,Male,Yes,0,Graduate,No,3708,4700,132,360,1,Semiurban +LP002746,Male,No,0,Graduate,No,5314,0,147,360,1,Urban +LP002747,Female,No,3+,Graduate,No,2366,5272,153,360,0,Rural +LP002754,Male,No,,Graduate,No,2066,2108,104,84,1,Urban +LP002759,Male,Yes,2,Graduate,No,5000,0,149,360,1,Rural +LP002760,Female,No,0,Graduate,No,3767,0,134,300,1,Urban +LP002766,Female,Yes,0,Graduate,No,7859,879,165,180,1,Semiurban +LP002769,Female,Yes,0,Graduate,No,4283,0,120,360,1,Rural +LP002774,Male,Yes,0,Not Graduate,No,1700,2900,67,360,0,Urban +LP002775,,No,0,Not Graduate,No,4768,0,125,360,1,Rural +LP002781,Male,No,0,Graduate,No,3083,2738,120,360,1,Urban +LP002782,Male,Yes,1,Graduate,No,2667,1542,148,360,1,Rural +LP002786,Female,Yes,0,Not Graduate,No,1647,1762,181,360,1,Urban +LP002790,Male,Yes,3+,Graduate,No,3400,0,80,120,1,Urban +LP002791,Male,No,1,Graduate,,16000,5000,40,360,1,Semiurban +LP002793,Male,Yes,0,Graduate,No,5333,0,90,360,1,Rural +LP002802,Male,No,0,Graduate,No,2875,2416,95,6,0,Semiurban +LP002803,Male,Yes,1,Not Graduate,,2600,618,122,360,1,Semiurban +LP002805,Male,Yes,2,Graduate,No,5041,700,150,360,1,Urban +LP002806,Male,Yes,3+,Graduate,Yes,6958,1411,150,360,1,Rural +LP002816,Male,Yes,1,Graduate,No,3500,1658,104,360,,Semiurban +LP002823,Male,Yes,0,Graduate,No,5509,0,143,360,1,Rural +LP002825,Male,Yes,3+,Graduate,No,9699,0,300,360,1,Urban +LP002826,Female,Yes,1,Not Graduate,No,3621,2717,171,360,1,Urban +LP002843,Female,Yes,0,Graduate,No,4709,0,113,360,1,Semiurban +LP002849,Male,Yes,0,Graduate,No,1516,1951,35,360,1,Semiurban +LP002850,Male,No,2,Graduate,No,2400,0,46,360,1,Urban +LP002853,Female,No,0,Not Graduate,No,3015,2000,145,360,,Urban +LP002856,Male,Yes,0,Graduate,No,2292,1558,119,360,1,Urban +LP002857,Male,Yes,1,Graduate,Yes,2360,3355,87,240,1,Rural +LP002858,Female,No,0,Graduate,No,4333,2333,162,360,0,Rural +LP002860,Male,Yes,0,Graduate,Yes,2623,4831,122,180,1,Semiurban +LP002867,Male,No,0,Graduate,Yes,3972,4275,187,360,1,Rural +LP002869,Male,Yes,3+,Not Graduate,No,3522,0,81,180,1,Rural +LP002870,Male,Yes,1,Graduate,No,4700,0,80,360,1,Urban +LP002876,Male,No,0,Graduate,No,6858,0,176,360,1,Rural +LP002878,Male,Yes,3+,Graduate,No,8334,0,260,360,1,Urban +LP002879,Male,Yes,0,Graduate,No,3391,1966,133,360,0,Rural +LP002885,Male,No,0,Not Graduate,No,2868,0,70,360,1,Urban +LP002890,Male,Yes,2,Not Graduate,No,3418,1380,135,360,1,Urban +LP002891,Male,Yes,0,Graduate,Yes,2500,296,137,300,1,Rural +LP002899,Male,Yes,2,Graduate,No,8667,0,254,360,1,Rural +LP002901,Male,No,0,Graduate,No,2283,15000,106,360,,Rural +LP002907,Male,Yes,0,Graduate,No,5817,910,109,360,1,Urban +LP002920,Male,Yes,0,Graduate,No,5119,3769,120,360,1,Rural +LP002921,Male,Yes,3+,Not Graduate,No,5316,187,158,180,0,Semiurban +LP002932,Male,Yes,3+,Graduate,No,7603,1213,197,360,1,Urban +LP002935,Male,Yes,1,Graduate,No,3791,1936,85,360,1,Urban +LP002952,Male,No,0,Graduate,No,2500,0,60,360,1,Urban +LP002954,Male,Yes,2,Not Graduate,No,3132,0,76,360,,Rural +LP002962,Male,No,0,Graduate,No,4000,2667,152,360,1,Semiurban +LP002965,Female,Yes,0,Graduate,No,8550,4255,96,360,,Urban +LP002969,Male,Yes,1,Graduate,No,2269,2167,99,360,1,Semiurban +LP002971,Male,Yes,3+,Not Graduate,Yes,4009,1777,113,360,1,Urban +LP002975,Male,Yes,0,Graduate,No,4158,709,115,360,1,Urban +LP002980,Male,No,0,Graduate,No,3250,1993,126,360,,Semiurban +LP002986,Male,Yes,0,Graduate,No,5000,2393,158,360,1,Rural +LP002989,Male,No,0,Graduate,Yes,9200,0,98,180,1,Rural diff --git a/Notebooks/Customer_loan_repayment_problem/loan-prediction-problem.ipynb b/Notebooks/Customer_loan_repayment_problem/loan-prediction-problem.ipynb new file mode 100644 index 000000000..e326e1914 --- /dev/null +++ b/Notebooks/Customer_loan_repayment_problem/loan-prediction-problem.ipynb @@ -0,0 +1,3632 @@ +{ + "cells": [ + { + "cell_type": "markdown", + "execution_count": null, + "metadata": { + "papermill": { + "duration": 0.021928, + "end_time": "2020-09-08T03:15:55.361283", + "exception": false, + "start_time": "2020-09-08T03:15:55.339355", + "status": "completed" + }, + "tags": [] + }, + "source": [ + "# Predicting Loan Repayment\n", + "\n", + "\n", + "The dataset for this project is retrieved from kaggle, the home of Data Science.\n", + "\n", + "The major aim of this project is to predict whether the customers will have their loan paid or not. Therefore, this is a supervised classification problem to be trained." + ] + }, + { + "cell_type": "markdown", + "execution_count": null, + "metadata": { + "papermill": { + "duration": 0.02001, + "end_time": "2020-09-08T03:15:55.401984", + "exception": false, + "start_time": "2020-09-08T03:15:55.381974", + "status": "completed" + }, + "tags": [] + }, + "source": [ + "### **1- Importing Libraries**" + ] + }, + { + "cell_type": "code", + "execution_count": 1, + "metadata": { + "execution": { + "iopub.execute_input": "2020-09-08T03:15:55.456123Z", + "iopub.status.busy": "2020-09-08T03:15:55.455295Z", + "iopub.status.idle": "2020-09-08T03:15:58.502367Z", + "shell.execute_reply": "2020-09-08T03:15:58.501676Z" + }, + "papermill": { + "duration": 3.080197, + "end_time": "2020-09-08T03:15:58.502515", + "exception": false, + "start_time": "2020-09-08T03:15:55.422318", + "status": "completed" + }, + "tags": [] + }, + "outputs": [], + "source": [ + "import numpy as np\n", + "import pandas as pd\n", + "import matplotlib.pyplot as plt\n", + "import seaborn as sns\n", + "%matplotlib inline\n", + "from sklearn.preprocessing import LabelEncoder\n", + "from sklearn.model_selection import train_test_split\n", + "from sklearn.linear_model import LogisticRegression\n", + "from sklearn.metrics import confusion_matrix, classification_report,accuracy_score\n", + "from sklearn.tree import DecisionTreeClassifier\n", + "from sklearn.ensemble import RandomForestClassifier\n", + "from sklearn.neighbors import KNeighborsClassifier\n", + "from sklearn.svm import SVC\n", + "from sklearn.model_selection import GridSearchCV\n", + "import plotly.express as px" + ] + }, + { + "cell_type": "markdown", + "execution_count": null, + "metadata": { + "papermill": { + "duration": 0.0203, + "end_time": "2020-09-08T03:15:58.543518", + "exception": false, + "start_time": "2020-09-08T03:15:58.523218", + "status": "completed" + }, + "tags": [] + }, + "source": [ + "### **2- Getting Data**" + ] + }, + { + "cell_type": "code", + "execution_count": 2, + "metadata": { + "execution": { + "iopub.execute_input": "2020-09-08T03:15:58.596255Z", + "iopub.status.busy": "2020-09-08T03:15:58.594912Z", + "iopub.status.idle": "2020-09-08T03:15:58.615955Z", + "shell.execute_reply": "2020-09-08T03:15:58.616654Z" + }, + "papermill": { + "duration": 0.052871, + "end_time": "2020-09-08T03:15:58.616870", + "exception": false, + "start_time": "2020-09-08T03:15:58.563999", + "status": "completed" + }, + "tags": [] + }, + "outputs": [], + "source": [ + "df=pd.read_csv('../input/loan-prediction-problem-dataset/train_u6lujuX_CVtuZ9i.csv')" + ] + }, + { + "cell_type": "code", + "execution_count": 3, + "metadata": { + "execution": { + "iopub.execute_input": "2020-09-08T03:15:58.702993Z", + "iopub.status.busy": "2020-09-08T03:15:58.701710Z", + "iopub.status.idle": "2020-09-08T03:15:58.726499Z", + "shell.execute_reply": "2020-09-08T03:15:58.727470Z" + }, + "papermill": { + "duration": 0.08401, + "end_time": "2020-09-08T03:15:58.727718", + "exception": false, + "start_time": "2020-09-08T03:15:58.643708", + "status": "completed" + }, + "tags": [] + }, + "outputs": [ + { + "data": { + "text/html": [ + "
\n", + "\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
Loan_IDGenderMarriedDependentsEducationSelf_EmployedApplicantIncomeCoapplicantIncomeLoanAmountLoan_Amount_TermCredit_HistoryProperty_AreaLoan_Status
0LP001002MaleNo0GraduateNo58490.0NaN360.01.0UrbanY
1LP001003MaleYes1GraduateNo45831508.0128.0360.01.0RuralN
2LP001005MaleYes0GraduateYes30000.066.0360.01.0UrbanY
3LP001006MaleYes0Not GraduateNo25832358.0120.0360.01.0UrbanY
4LP001008MaleNo0GraduateNo60000.0141.0360.01.0UrbanY
\n", + "
" + ], + "text/plain": [ + " Loan_ID Gender Married Dependents Education Self_Employed \\\n", + "0 LP001002 Male No 0 Graduate No \n", + "1 LP001003 Male Yes 1 Graduate No \n", + "2 LP001005 Male Yes 0 Graduate Yes \n", + "3 LP001006 Male Yes 0 Not Graduate No \n", + "4 LP001008 Male No 0 Graduate No \n", + "\n", + " ApplicantIncome CoapplicantIncome LoanAmount Loan_Amount_Term \\\n", + "0 5849 0.0 NaN 360.0 \n", + "1 4583 1508.0 128.0 360.0 \n", + "2 3000 0.0 66.0 360.0 \n", + "3 2583 2358.0 120.0 360.0 \n", + "4 6000 0.0 141.0 360.0 \n", + "\n", + " Credit_History Property_Area Loan_Status \n", + "0 1.0 Urban Y \n", + "1 1.0 Rural N \n", + "2 1.0 Urban Y \n", + "3 1.0 Urban Y \n", + "4 1.0 Urban Y " + ] + }, + "execution_count": 3, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "df.head()" + ] + }, + { + "cell_type": "code", + "execution_count": 4, + "metadata": { + "execution": { + "iopub.execute_input": "2020-09-08T03:15:58.790142Z", + "iopub.status.busy": "2020-09-08T03:15:58.789253Z", + "iopub.status.idle": "2020-09-08T03:15:58.794164Z", + "shell.execute_reply": "2020-09-08T03:15:58.793540Z" + }, + "papermill": { + "duration": 0.035154, + "end_time": "2020-09-08T03:15:58.794299", + "exception": false, + "start_time": "2020-09-08T03:15:58.759145", + "status": "completed" + }, + "tags": [] + }, + "outputs": [ + { + "data": { + "text/plain": [ + "(614, 13)" + ] + }, + "execution_count": 4, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "df.shape" + ] + }, + { + "cell_type": "markdown", + "execution_count": null, + "metadata": { + "papermill": { + "duration": 0.02076, + "end_time": "2020-09-08T03:15:58.836898", + "exception": false, + "start_time": "2020-09-08T03:15:58.816138", + "status": "completed" + }, + "tags": [] + }, + "source": [ + "##### 2-1-Renaming columns" + ] + }, + { + "cell_type": "code", + "execution_count": 5, + "metadata": { + "execution": { + "iopub.execute_input": "2020-09-08T03:15:58.887370Z", + "iopub.status.busy": "2020-09-08T03:15:58.886315Z", + "iopub.status.idle": "2020-09-08T03:15:58.889371Z", + "shell.execute_reply": "2020-09-08T03:15:58.889919Z" + }, + "papermill": { + "duration": 0.031593, + "end_time": "2020-09-08T03:15:58.890108", + "exception": false, + "start_time": "2020-09-08T03:15:58.858515", + "status": "completed" + }, + "tags": [] + }, + "outputs": [], + "source": [ + "df.columns=df.columns.str.lower()" + ] + }, + { + "cell_type": "code", + "execution_count": 6, + "metadata": { + "execution": { + "iopub.execute_input": "2020-09-08T03:15:58.941867Z", + "iopub.status.busy": "2020-09-08T03:15:58.941080Z", + "iopub.status.idle": "2020-09-08T03:15:58.944879Z", + "shell.execute_reply": "2020-09-08T03:15:58.944242Z" + }, + "papermill": { + "duration": 0.032546, + "end_time": "2020-09-08T03:15:58.945013", + "exception": false, + "start_time": "2020-09-08T03:15:58.912467", + "status": "completed" + }, + "tags": [] + }, + "outputs": [], + "source": [ + "df.columns=['loan_id', 'gender', 'married', 'dependents', 'education','self_employed', 'applicant_income', 'co-applicant_income', 'loan_amount', 'loan_amount_term', 'credit_history', 'property_area', 'loan_status']" + ] + }, + { + "cell_type": "markdown", + "execution_count": null, + "metadata": { + "papermill": { + "duration": 0.0218, + "end_time": "2020-09-08T03:15:58.989112", + "exception": false, + "start_time": "2020-09-08T03:15:58.967312", + "status": "completed" + }, + "tags": [] + }, + "source": [ + "##### 2-2-Checking null values" + ] + }, + { + "cell_type": "code", + "execution_count": 7, + "metadata": { + "execution": { + "iopub.execute_input": "2020-09-08T03:15:59.043901Z", + "iopub.status.busy": "2020-09-08T03:15:59.042741Z", + "iopub.status.idle": "2020-09-08T03:15:59.048249Z", + "shell.execute_reply": "2020-09-08T03:15:59.047450Z" + }, + "papermill": { + "duration": 0.036876, + "end_time": "2020-09-08T03:15:59.048378", + "exception": false, + "start_time": "2020-09-08T03:15:59.011502", + "status": "completed" + }, + "tags": [] + }, + "outputs": [ + { + "data": { + "text/plain": [ + "loan_id 0\n", + "gender 13\n", + "married 3\n", + "dependents 15\n", + "education 0\n", + "self_employed 32\n", + "applicant_income 0\n", + "co-applicant_income 0\n", + "loan_amount 22\n", + "loan_amount_term 14\n", + "credit_history 50\n", + "property_area 0\n", + "loan_status 0\n", + "dtype: int64" + ] + }, + "execution_count": 7, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "df.isnull().sum()" + ] + }, + { + "cell_type": "markdown", + "execution_count": null, + "metadata": { + "papermill": { + "duration": 0.021552, + "end_time": "2020-09-08T03:15:59.091701", + "exception": false, + "start_time": "2020-09-08T03:15:59.070149", + "status": "completed" + }, + "tags": [] + }, + "source": [ + "we take care of missing values in \"loan_amount\" and \"credit_history\".\n", + "For other null values, we either delete a particular row if it has a null value for a particular feature and a particular column if it has more than 70-75% of missing values. This method is advised only when there are enough samples in the data set. " + ] + }, + { + "cell_type": "code", + "execution_count": 8, + "metadata": { + "execution": { + "iopub.execute_input": "2020-09-08T03:15:59.142140Z", + "iopub.status.busy": "2020-09-08T03:15:59.141318Z", + "iopub.status.idle": "2020-09-08T03:15:59.144823Z", + "shell.execute_reply": "2020-09-08T03:15:59.144224Z" + }, + "papermill": { + "duration": 0.031739, + "end_time": "2020-09-08T03:15:59.144958", + "exception": false, + "start_time": "2020-09-08T03:15:59.113219", + "status": "completed" + }, + "tags": [] + }, + "outputs": [], + "source": [ + "df['loan_amount']=df['loan_amount'].fillna(df['loan_amount'].mean()) " + ] + }, + { + "cell_type": "code", + "execution_count": 9, + "metadata": { + "execution": { + "iopub.execute_input": "2020-09-08T03:15:59.195412Z", + "iopub.status.busy": "2020-09-08T03:15:59.194541Z", + "iopub.status.idle": "2020-09-08T03:15:59.198957Z", + "shell.execute_reply": "2020-09-08T03:15:59.198291Z" + }, + "papermill": { + "duration": 0.032463, + "end_time": "2020-09-08T03:15:59.199089", + "exception": false, + "start_time": "2020-09-08T03:15:59.166626", + "status": "completed" + }, + "tags": [] + }, + "outputs": [], + "source": [ + "df['credit_history']=df['credit_history'].fillna(df['credit_history'].median()) " + ] + }, + { + "cell_type": "code", + "execution_count": 10, + "metadata": { + "execution": { + "iopub.execute_input": "2020-09-08T03:15:59.253265Z", + "iopub.status.busy": "2020-09-08T03:15:59.252455Z", + "iopub.status.idle": "2020-09-08T03:15:59.289669Z", + "shell.execute_reply": "2020-09-08T03:15:59.288991Z" + }, + "papermill": { + "duration": 0.068028, + "end_time": "2020-09-08T03:15:59.289838", + "exception": false, + "start_time": "2020-09-08T03:15:59.221810", + "status": "completed" + }, + "tags": [] + }, + "outputs": [], + "source": [ + "df.dropna(axis=0, inplace=True)" + ] + }, + { + "cell_type": "code", + "execution_count": 11, + "metadata": { + "execution": { + "iopub.execute_input": "2020-09-08T03:15:59.344025Z", + "iopub.status.busy": "2020-09-08T03:15:59.342998Z", + "iopub.status.idle": "2020-09-08T03:15:59.347710Z", + "shell.execute_reply": "2020-09-08T03:15:59.347105Z" + }, + "papermill": { + "duration": 0.035464, + "end_time": "2020-09-08T03:15:59.347860", + "exception": false, + "start_time": "2020-09-08T03:15:59.312396", + "status": "completed" + }, + "tags": [] + }, + "outputs": [ + { + "data": { + "text/plain": [ + "loan_id 0\n", + "gender 0\n", + "married 0\n", + "dependents 0\n", + "education 0\n", + "self_employed 0\n", + "applicant_income 0\n", + "co-applicant_income 0\n", + "loan_amount 0\n", + "loan_amount_term 0\n", + "credit_history 0\n", + "property_area 0\n", + "loan_status 0\n", + "dtype: int64" + ] + }, + "execution_count": 11, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "df.isnull().sum()" + ] + }, + { + "cell_type": "code", + "execution_count": 12, + "metadata": { + "execution": { + "iopub.execute_input": "2020-09-08T03:15:59.416516Z", + "iopub.status.busy": "2020-09-08T03:15:59.415574Z", + "iopub.status.idle": "2020-09-08T03:15:59.419983Z", + "shell.execute_reply": "2020-09-08T03:15:59.420509Z" + }, + "papermill": { + "duration": 0.050696, + "end_time": "2020-09-08T03:15:59.420689", + "exception": false, + "start_time": "2020-09-08T03:15:59.369993", + "status": "completed" + }, + "tags": [] + }, + "outputs": [ + { + "data": { + "text/html": [ + "
\n", + "\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
loan_idgendermarrieddependentseducationself_employedapplicant_incomeco-applicant_incomeloan_amountloan_amount_termcredit_historyproperty_arealoan_status
0LP001002MaleNo0GraduateNo58490.0146.412162360.01.0UrbanY
1LP001003MaleYes1GraduateNo45831508.0128.000000360.01.0RuralN
2LP001005MaleYes0GraduateYes30000.066.000000360.01.0UrbanY
3LP001006MaleYes0Not GraduateNo25832358.0120.000000360.01.0UrbanY
4LP001008MaleNo0GraduateNo60000.0141.000000360.01.0UrbanY
\n", + "
" + ], + "text/plain": [ + " loan_id gender married dependents education self_employed \\\n", + "0 LP001002 Male No 0 Graduate No \n", + "1 LP001003 Male Yes 1 Graduate No \n", + "2 LP001005 Male Yes 0 Graduate Yes \n", + "3 LP001006 Male Yes 0 Not Graduate No \n", + "4 LP001008 Male No 0 Graduate No \n", + "\n", + " applicant_income co-applicant_income loan_amount loan_amount_term \\\n", + "0 5849 0.0 146.412162 360.0 \n", + "1 4583 1508.0 128.000000 360.0 \n", + "2 3000 0.0 66.000000 360.0 \n", + "3 2583 2358.0 120.000000 360.0 \n", + "4 6000 0.0 141.000000 360.0 \n", + "\n", + " credit_history property_area loan_status \n", + "0 1.0 Urban Y \n", + "1 1.0 Rural N \n", + "2 1.0 Urban Y \n", + "3 1.0 Urban Y \n", + "4 1.0 Urban Y " + ] + }, + "execution_count": 12, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "df.head()" + ] + }, + { + "cell_type": "code", + "execution_count": 13, + "metadata": { + "execution": { + "iopub.execute_input": "2020-09-08T03:15:59.472812Z", + "iopub.status.busy": "2020-09-08T03:15:59.471696Z", + "iopub.status.idle": "2020-09-08T03:15:59.479183Z", + "shell.execute_reply": "2020-09-08T03:15:59.478506Z" + }, + "papermill": { + "duration": 0.036258, + "end_time": "2020-09-08T03:15:59.479328", + "exception": false, + "start_time": "2020-09-08T03:15:59.443070", + "status": "completed" + }, + "tags": [] + }, + "outputs": [ + { + "data": { + "text/plain": [ + "(542, 13)" + ] + }, + "execution_count": 13, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "df.shape" + ] + }, + { + "cell_type": "code", + "execution_count": 14, + "metadata": { + "execution": { + "iopub.execute_input": "2020-09-08T03:15:59.549428Z", + "iopub.status.busy": "2020-09-08T03:15:59.548466Z", + "iopub.status.idle": "2020-09-08T03:15:59.553767Z", + "shell.execute_reply": "2020-09-08T03:15:59.552929Z" + }, + "papermill": { + "duration": 0.051843, + "end_time": "2020-09-08T03:15:59.553962", + "exception": false, + "start_time": "2020-09-08T03:15:59.502119", + "status": "completed" + }, + "tags": [] + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "\n", + "Int64Index: 542 entries, 0 to 613\n", + "Data columns (total 13 columns):\n", + " # Column Non-Null Count Dtype \n", + "--- ------ -------------- ----- \n", + " 0 loan_id 542 non-null object \n", + " 1 gender 542 non-null object \n", + " 2 married 542 non-null object \n", + " 3 dependents 542 non-null object \n", + " 4 education 542 non-null object \n", + " 5 self_employed 542 non-null object \n", + " 6 applicant_income 542 non-null int64 \n", + " 7 co-applicant_income 542 non-null float64\n", + " 8 loan_amount 542 non-null float64\n", + " 9 loan_amount_term 542 non-null float64\n", + " 10 credit_history 542 non-null float64\n", + " 11 property_area 542 non-null object \n", + " 12 loan_status 542 non-null object \n", + "dtypes: float64(4), int64(1), object(8)\n", + "memory usage: 59.3+ KB\n" + ] + } + ], + "source": [ + "df.info()" + ] + }, + { + "cell_type": "code", + "execution_count": 15, + "metadata": { + "execution": { + "iopub.execute_input": "2020-09-08T03:15:59.610508Z", + "iopub.status.busy": "2020-09-08T03:15:59.609688Z", + "iopub.status.idle": "2020-09-08T03:15:59.639407Z", + "shell.execute_reply": "2020-09-08T03:15:59.638581Z" + }, + "papermill": { + "duration": 0.061133, + "end_time": "2020-09-08T03:15:59.639535", + "exception": false, + "start_time": "2020-09-08T03:15:59.578402", + "status": "completed" + }, + "tags": [] + }, + "outputs": [ + { + "data": { + "text/html": [ + "
\n", + "\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
applicant_incomeco-applicant_incomeloan_amountloan_amount_termcredit_history
count542.000000542.000000542.000000542.000000542.000000
mean5291.9114391590.699114145.518139341.9557200.863469
std5506.4613712543.80162881.74938565.4415820.343669
min150.0000000.0000009.00000012.0000000.000000
25%2843.7500000.000000100.000000360.0000001.000000
50%3848.0000001149.000000129.500000360.0000001.000000
75%5820.5000002281.000000167.750000360.0000001.000000
max81000.00000033837.000000650.000000480.0000001.000000
\n", + "
" + ], + "text/plain": [ + " applicant_income co-applicant_income loan_amount loan_amount_term \\\n", + "count 542.000000 542.000000 542.000000 542.000000 \n", + "mean 5291.911439 1590.699114 145.518139 341.955720 \n", + "std 5506.461371 2543.801628 81.749385 65.441582 \n", + "min 150.000000 0.000000 9.000000 12.000000 \n", + "25% 2843.750000 0.000000 100.000000 360.000000 \n", + "50% 3848.000000 1149.000000 129.500000 360.000000 \n", + "75% 5820.500000 2281.000000 167.750000 360.000000 \n", + "max 81000.000000 33837.000000 650.000000 480.000000 \n", + "\n", + " credit_history \n", + "count 542.000000 \n", + "mean 0.863469 \n", + "std 0.343669 \n", + "min 0.000000 \n", + "25% 1.000000 \n", + "50% 1.000000 \n", + "75% 1.000000 \n", + "max 1.000000 " + ] + }, + "execution_count": 15, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "df.describe()" + ] + }, + { + "cell_type": "markdown", + "execution_count": null, + "metadata": { + "papermill": { + "duration": 0.024751, + "end_time": "2020-09-08T03:15:59.689267", + "exception": false, + "start_time": "2020-09-08T03:15:59.664516", + "status": "completed" + }, + "tags": [] + }, + "source": [ + "##### 2-3-Label Encoder for Dependents" + ] + }, + { + "cell_type": "code", + "execution_count": 16, + "metadata": { + "execution": { + "iopub.execute_input": "2020-09-08T03:15:59.742308Z", + "iopub.status.busy": "2020-09-08T03:15:59.741262Z", + "iopub.status.idle": "2020-09-08T03:15:59.746797Z", + "shell.execute_reply": "2020-09-08T03:15:59.746101Z" + }, + "papermill": { + "duration": 0.034653, + "end_time": "2020-09-08T03:15:59.746933", + "exception": false, + "start_time": "2020-09-08T03:15:59.712280", + "status": "completed" + }, + "tags": [] + }, + "outputs": [ + { + "data": { + "text/plain": [ + "str" + ] + }, + "execution_count": 16, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "type(df['dependents'].iloc[0])" + ] + }, + { + "cell_type": "code", + "execution_count": 17, + "metadata": { + "execution": { + "iopub.execute_input": "2020-09-08T03:15:59.801541Z", + "iopub.status.busy": "2020-09-08T03:15:59.800397Z", + "iopub.status.idle": "2020-09-08T03:15:59.804824Z", + "shell.execute_reply": "2020-09-08T03:15:59.805505Z" + }, + "papermill": { + "duration": 0.035452, + "end_time": "2020-09-08T03:15:59.805675", + "exception": false, + "start_time": "2020-09-08T03:15:59.770223", + "status": "completed" + }, + "tags": [] + }, + "outputs": [ + { + "data": { + "text/plain": [ + "array(['0', '1', '2', '3+'], dtype=object)" + ] + }, + "execution_count": 17, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "df['dependents'].unique()" + ] + }, + { + "cell_type": "code", + "execution_count": 18, + "metadata": { + "execution": { + "iopub.execute_input": "2020-09-08T03:15:59.859345Z", + "iopub.status.busy": "2020-09-08T03:15:59.858497Z", + "iopub.status.idle": "2020-09-08T03:15:59.862150Z", + "shell.execute_reply": "2020-09-08T03:15:59.861333Z" + }, + "papermill": { + "duration": 0.032559, + "end_time": "2020-09-08T03:15:59.862281", + "exception": false, + "start_time": "2020-09-08T03:15:59.829722", + "status": "completed" + }, + "tags": [] + }, + "outputs": [], + "source": [ + "model6=LabelEncoder()" + ] + }, + { + "cell_type": "code", + "execution_count": 19, + "metadata": { + "execution": { + "iopub.execute_input": "2020-09-08T03:15:59.915463Z", + "iopub.status.busy": "2020-09-08T03:15:59.914653Z", + "iopub.status.idle": "2020-09-08T03:15:59.921627Z", + "shell.execute_reply": "2020-09-08T03:15:59.922176Z" + }, + "papermill": { + "duration": 0.036395, + "end_time": "2020-09-08T03:15:59.922345", + "exception": false, + "start_time": "2020-09-08T03:15:59.885950", + "status": "completed" + }, + "tags": [] + }, + "outputs": [ + { + "data": { + "text/plain": [ + "LabelEncoder()" + ] + }, + "execution_count": 19, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "model6.fit(df['dependents'])" + ] + }, + { + "cell_type": "code", + "execution_count": 20, + "metadata": { + "execution": { + "iopub.execute_input": "2020-09-08T03:15:59.976684Z", + "iopub.status.busy": "2020-09-08T03:15:59.975944Z", + "iopub.status.idle": "2020-09-08T03:15:59.979542Z", + "shell.execute_reply": "2020-09-08T03:15:59.978814Z" + }, + "papermill": { + "duration": 0.033869, + "end_time": "2020-09-08T03:15:59.979667", + "exception": false, + "start_time": "2020-09-08T03:15:59.945798", + "status": "completed" + }, + "tags": [] + }, + "outputs": [], + "source": [ + "df['dependents']= model6.transform(df['dependents'])" + ] + }, + { + "cell_type": "markdown", + "execution_count": null, + "metadata": { + "papermill": { + "duration": 0.02391, + "end_time": "2020-09-08T03:16:00.027992", + "exception": false, + "start_time": "2020-09-08T03:16:00.004082", + "status": "completed" + }, + "tags": [] + }, + "source": [ + "### 3-Exploratory Data Analysis" + ] + }, + { + "cell_type": "markdown", + "execution_count": null, + "metadata": { + "papermill": { + "duration": 0.024019, + "end_time": "2020-09-08T03:16:00.076251", + "exception": false, + "start_time": "2020-09-08T03:16:00.052232", + "status": "completed" + }, + "tags": [] + }, + "source": [ + "##### 3-1- Visualization" + ] + }, + { + "cell_type": "code", + "execution_count": 21, + "metadata": { + "execution": { + "iopub.execute_input": "2020-09-08T03:16:00.133918Z", + "iopub.status.busy": "2020-09-08T03:16:00.131797Z", + "iopub.status.idle": "2020-09-08T03:16:00.138910Z", + "shell.execute_reply": "2020-09-08T03:16:00.138164Z" + }, + "papermill": { + "duration": 0.038611, + "end_time": "2020-09-08T03:16:00.139035", + "exception": false, + "start_time": "2020-09-08T03:16:00.100424", + "status": "completed" + }, + "tags": [] + }, + "outputs": [ + { + "data": { + "text/plain": [ + "376" + ] + }, + "execution_count": 21, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "df[df['loan_status']=='Y'].count()['loan_status']" + ] + }, + { + "cell_type": "code", + "execution_count": 22, + "metadata": { + "execution": { + "iopub.execute_input": "2020-09-08T03:16:00.197358Z", + "iopub.status.busy": "2020-09-08T03:16:00.196382Z", + "iopub.status.idle": "2020-09-08T03:16:00.201381Z", + "shell.execute_reply": "2020-09-08T03:16:00.201964Z" + }, + "papermill": { + "duration": 0.038971, + "end_time": "2020-09-08T03:16:00.202132", + "exception": false, + "start_time": "2020-09-08T03:16:00.163161", + "status": "completed" + }, + "tags": [] + }, + "outputs": [ + { + "data": { + "text/plain": [ + "166" + ] + }, + "execution_count": 22, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "df[df['loan_status']=='N'].count()['loan_status']" + ] + }, + { + "cell_type": "code", + "execution_count": 23, + "metadata": { + "execution": { + "iopub.execute_input": "2020-09-08T03:16:00.258249Z", + "iopub.status.busy": "2020-09-08T03:16:00.257475Z", + "iopub.status.idle": "2020-09-08T03:16:00.424512Z", + "shell.execute_reply": "2020-09-08T03:16:00.423608Z" + }, + "papermill": { + "duration": 0.198042, + "end_time": "2020-09-08T03:16:00.424659", + "exception": false, + "start_time": "2020-09-08T03:16:00.226617", + "status": "completed" + }, + "tags": [] + }, + "outputs": [ + { + "data": { + "text/plain": [ + "Text(0.5, 1.0, 'Distribution of Loan Status')" + ] + }, + "execution_count": 23, + "metadata": {}, + "output_type": "execute_result" + }, + { + "data": { + "image/png": "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\n", + "text/plain": [ + "
" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "plt.figure(figsize=(8,8))\n", + "plt.pie(x=[376,166], labels=['Yes','No'], autopct='%1.0f%%', pctdistance=0.5,labeldistance=0.7,colors=['g','r'])\n", + "plt.title('Distribution of Loan Status')" + ] + }, + { + "cell_type": "markdown", + "execution_count": null, + "metadata": { + "papermill": { + "duration": 0.027202, + "end_time": "2020-09-08T03:16:00.477382", + "exception": false, + "start_time": "2020-09-08T03:16:00.450180", + "status": "completed" + }, + "tags": [] + }, + "source": [ + "69% of applicants repay the loan and 39% do not repay the loan." + ] + }, + { + "cell_type": "code", + "execution_count": 24, + "metadata": { + "execution": { + "iopub.execute_input": "2020-09-08T03:16:00.551383Z", + "iopub.status.busy": "2020-09-08T03:16:00.547949Z", + "iopub.status.idle": "2020-09-08T03:16:01.327763Z", + "shell.execute_reply": "2020-09-08T03:16:01.328440Z" + }, + "papermill": { + "duration": 0.823691, + "end_time": "2020-09-08T03:16:01.328675", + "exception": false, + "start_time": "2020-09-08T03:16:00.504984", + "status": "completed" + }, + "tags": [] + }, + "outputs": [ + { + "data": { + "text/plain": [ + "([], )" + ] + }, + "execution_count": 24, + "metadata": {}, + "output_type": "execute_result" + }, + { + "data": { + "image/png": "iVBORw0KGgoAAAANSUhEUgAAA3sAAAJNCAYAAACImWznAAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAALEgAACxIB0t1+/AAAADh0RVh0U29mdHdhcmUAbWF0cGxvdGxpYiB2ZXJzaW9uMy4yLjEsIGh0dHA6Ly9tYXRwbG90bGliLm9yZy+j8jraAAAgAElEQVR4nOzde5xU9Z3n/9eHSyARjVGBGHAG1sEoIjaKxJiReBsvs2vEmai4XqOLZh7oeInZRNlMyGacKKNxYzTxEow4P6IyUUczyWiMI6IxURsHL2gc3YhjK4vARCMaLzSf3x91Gkvshqa7q6v71Ov5ePSjq751zqlP1bf7fOtd5xaZiSRJkiSpXAbUuwBJkiRJUs8z7EmSJElSCRn2JEmSJKmEDHuSJEmSVEKGPUmSJEkqoUH1LqA7tttuuxwzZky9y5DUwxYvXrwqM4fXu47ucP0klY/rJkl90cbWTf067I0ZM4bm5uZ6lyGph0XEC/WuobtcP0nl47pJUl+0sXWTu3FKkiRJUgkZ9iRJkiSphAx7kiRJklRC/fqYPak/e/fdd2lpaeGtt96qdyl1M3ToUEaPHs3gwYPrXUqvaPQ+b7T+liT1LMfRzR9HDXtSnbS0tLDlllsyZswYIqLe5fS6zGT16tW0tLQwduzYepfTKxq5zxuxvyVJPctxdPPHUXfjlOrkrbfeYtttt224lVWbiGDbbbdtqG/nGrnPG7G/JUk9y3F088dRw55UR424sqrWiK+/EV9zm0Z+7ZKkntHIY0lXXrthT5IkSZJKyLAnSZIkSSVk2JP6kGHDhtXtuRcuXMiDDz7YY9Opc+xzSZK6znF04xrubJyX7PLtepfQbec9fW69S1AJLVy4kGHDhrHPPvv0yHTq++zz+tj39G/Wu4Ruu//qr9W7BPWSU/5sz3qX0COuu3txvUtQCfWHcdQte1IflJl8+ctfZsKECey2227cfPPNAKxZs4YDDzyQPfbYg912243bb78dgGXLlrHLLrswY8YMdt11Vw4++GD+8Ic/dLj8yy+/nPHjxzNx4kSmT5/OsmXLuOqqq7jssstoamri/vvv5yc/+Qmf+tSnmDRpEgcddBArVqxod7qTTz6ZH//4x+uX3fYN2/Lly5k6dSpNTU1MmDCB+++/v4bvWP9nn0uS1HWOo+1ruC17Un9w6623smTJEh577DFWrVrFXnvtxdSpUxk+fDi33XYbW221FatWrWLvvffmc5/7HADPPvssN954I9deey1HH300t9xyC8cff3y7y7/ooot4/vnnGTJkCK+++ipbb701X/ziFxk2bBjnnXceAL/73e/49a9/TUTwgx/8gDlz5nDppZd+YLq5c+e2+xw/+tGPOOSQQ5g1axatra28+eabNXinysM+lySp6xxH22fYk/qgBx54gGOPPZaBAwcycuRIPvvZz/LII49w2GGHccEFF7Bo0SIGDBjASy+9xIoVKwAYO3YsTU1NAOy5554sW7asw+VPnDiR4447jmnTpjFt2rR2p2lpaeGYY45h+fLlvPPOO5t9Iey99tqLU045hXfffZdp06atr03ts88lSeo6x9H2uRun1AdlZrvt8+fPZ+XKlSxevJglS5YwcuTI9RfXHDJkyPrpBg4cyNq1aztc/k9/+lNmzpzJ4sWL2XPPPdud9swzz+SMM87giSee4Oqrr+7wIp6DBg1i3bp16+t+5513AJg6dSqLFi1i1KhRnHDCCdxwww2de/ENyj6XJKnrHEfbV7OwFxFDI+LhiHgsIpZGxDeK9m0i4u6IeLb4/bGqec6PiOci4pmIOKRWtUl93dSpU7n55ptpbW1l5cqVLFq0iClTpvDaa68xYsQIBg8ezL333ssLL7yw2ctet24dL774Ivvvvz9z5szh1VdfZc2aNWy55Za8/vrr66d77bXXGDVqFADz5s1b377hdGPGjGHx4sqB77fffjvvvvsuAC+88AIjRoxgxowZnHrqqTz66KNdei8ahX0uSVLXOY62r5Zb9t4GDsjM3YEm4NCI2Bv4KnBPZo4D7inuExHjgenArsChwPciYmAN65P6rCOPPJKJEyey++67c8ABBzBnzhw+/vGPc9xxx9Hc3MzkyZOZP38+O++882Yvu7W1leOPP57ddtuNSZMmcc4557D11ltz+OGHc9ttt60/eHj27NkcddRR7Lvvvmy33Xbr599wuhkzZnDfffcxZcoUHnroIbbYYgugcuappqYmJk2axC233MJZZ53VY+9PGdnnkiR1neNo+6KjTZ49KSI+AjwA/BVwA7BfZi6PiO2BhZn5yYg4HyAzv1XMcxcwOzN/1dFyJ0+enM3NzZtVi5deUF/x9NNPs8suu9S7jLpr732IiMWZOblOJfWI9tZP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u+02ttpqK1atWsXee+/N5z73OQCeffZZbrzxRq699lqOPvpobrnlFo4//vh2l3/RRRfx/PPPM2TIEF599VW23nprvvjFLzJs2DDOO+88AH73u9/x61//mojgBz/4AXPmzOHSSy/9wHRz585t9zl+9KMfccghhzBr1ixaW1t58803a/BOSZLUPsfSxmJ/S/1bQ4W9Bx54gGOPPZaBAwcycuRIPvvZz/LII49w2GGHccEFF7Bo0SIGDBjASy+9xIoVKwAYO3YsTU1NAOy5554sW7asw+VPnDiR4447jmnTpjFt2rR2p2lpaeGYY45h+fLlvPPOO5t9Ac+99tqLU045hXfffZdp06atr02SpN7gWNpY7G+pf2u43TjbM3/+fFauXMnixYtZsmQJI0eOXH9xzSFDhqyfbuDAgaxdu7bD5f/0pz9l5syZLF68mD333LPdac8880zOOOMMnnjiCa6++uoOL+I5aNAg1q1bt77ud955B4CpU6eyaNEiRo0axQknnMANN9zQuRcvSVIPcCxtLPa31L81VNibOnUqN998M62traxcuZJFixYxZcoUXnvtNUaMGMHgwYO59957eeGFFzZ72evWrePFF19k//33Z86cObz66qusWbOGLbfcktdff339dK+99hqjRo0CYN68eevbN5xuzJgxLF68GIDbb7+dd999F4AXXniBESNGMGPGDE499VQeffTRLr0XkiR1hWNpY7G/pf6tocLekUceycSJE9l999054IADmDNnDh//+Mc57rjjaG5uZvLkycyfP5+dd955s5fd2trK8ccfz2677cakSZM455xz2HrrrTn88MO57bbb1h88PHv2bI466ij23Xdftttuu/XzbzjdjBkzuO+++5gyZQoPPfQQW2yxBVA581RTUxOTJk3illtu4ayzzuqx90eSpE1xLG0s9rfUv0VHm+f7g8mTJ2dzc/P72p5++ml22WWXOlXUN/geVHjphf4rIhZn5uR619Ed7a2fNsZLL6gvcRxp/z0o67rJ/vY96Ku89ELnbGzd1FBb9iRJkiSpUdQs7EXE0Ih4OCIei4ilEfGNon12RLwUEUuKnz+vmuf8iHguIp6JiENqVVt3zZw5k6ampvf9/PCHP6x3WZIk9RuOpY3F/pbqo5aXXngbOCAz10TEYOCBiPiX4rHLMvOS6okjYjwwHdgV+ATwi4jYKTNba1hjl1x55ZX1LkGSpH7NsbSx2N9SfdRsy15WrCnuDi5+NnaA4BHATZn5dmY+DzwHTKlVfZIkSZJUZjU9Zi8iBkbEEuAV4O7MfKh46IyIeDwirouIjxVto4AXq2ZvKdo2XOZpEdEcEc0rV66sZfmSJEmS1G/VNOxlZmtmNgGjgSkRMQH4PrAj0AQsBy4tJo/2FtHOMq/JzMmZOXn48OE1qlySJEmS+rdaHrO3Xma+GhELgUOrj9WLiGuBfy7utgA7VM02Gni5N+pr09On6t/UafMzk3333ZdZs2Zx2GGHAbBgwQKuu+467rzzzh6tRZKk3tDTlxHZ1CU9HEvrq6dPjb+p09zb39LmqeXZOIdHxNbF7Q8DBwG/iYjtqyY7EniyuH0HMD0ihkTEWGAc8HCt6usLIoKrrrqKc889l7feeos33niDWbNmeRCzJEmd5FjaWOxvafPUcsve9sC8iBhIJVQuyMx/joh/iIgmKrtoLgNOB8jMpRGxAHgKWAvM7Itn4uxpEyZM4PDDD+fiiy/mjTfe4MQTT2THHXesd1mSJPUbjqWNxf6WOq9mYS8zHwcmtdN+wkbmuRC4sFY19VVf//rX2WOPPfjQhz5Ec3NzvcuRJKnfcSxtLPa31Dm9csyeNm6LLbbgmGOOYdiwYQwZMqTe5UiS1O84ljYW+1vqnJqejVOdN2DAAAYMsDskSeoqx9LGYn9Lm+Z/iCRJkiSVkLtxVtnUpRIkSdLGbepSCSqXTV0qQVJ9Gfb6iNmzZ9e7BEmS+jXH0sZif0ub5m6ckiRJklRChj1JkiRJKiHDniRJkiSVkGFPkiRJkkrIsCdJkiRJJWTYkyRJkqQS8tILVW769Zd7dHnT9/77TU4TEZx77rlceumlAFxyySWsWbPG0wlLkvqlZdeP7dHljTl509ftcyytn0/97XU9uryH/tcpm5zG/pY6zy17dTZkyBBuvfVWVq1aVe9SJEnqlxxLG4v9LXWeYa/OBg0axGmnncZll11W71IkSeqXHEsbi/0tdZ5hrw+YOXMm8+fP57XXXqt3KZIk9UuOpY3F/pY6x7DXB2y11VaceOKJXH755fUuRZKkfsmxtLHY31LnGPb6iLPPPpu5c+fyxhtv1LsUSZL6JcfSxmJ/S5tm2OsjttlmG44++mjmzp1b71IkSeqXHEsbi/0tbZqXXqjSmUsl1NKXvvQlrrjiirrWIElSd3TmUgm15FjauzpzqYRasr+ljTPs1dmaNWvW3x45ciRvvvlmHauRJKn/cSxtLPa31HnuxilJkiRJJWTYkyRJkqQSqlnYi4ihEfFwRDwWEUsj4htF+zYRcXdEPFv8/ljVPOdHxHMR8UxEHNLV587MnngJ/VIjv3ZJUs9p5PGkEV97I77mNo382lV+tdyy9zZwQGbuDjQBh0bE3sBXgXsycxxwT3GfiBgPTAd2BQ4FvhcRAzf3SYcOHcrq1asb8h83M1m9ejVDhw6tdymSpH7MsbSxxlL7u7H6W42lZidoycoao+0I2sHFTwJHAPsV7fOAhcBXivabMvNt4PmIeA6YAvxqc5539OjRtLS0sHLlyu6+hH5p6NChjB49ut5lSJL6McfSxhpL7e/G6m81lpqejbPYMrcY+BPgysx8KCJGZuZygMxcHhEjislHAb+umr2laNssgwcPZuzYsd2sXJKkxuVY2ljsb6m8anqClsxszcwmYDQwJSImbGTyaG8RH5go4rSIaI6I5kb9BkqSJEmSNqVXzsaZma9S2V3zUGBFRGwPUPx+pZisBdiharbRwMvtLOuazJycmZOHDx9e07olSZIkqb+q5dk4h0fE1sXtDwMHAb8B7gBOKiY7Cbi9uH0HMD0ihkTEWGAc8HCt6pMkSZKkMqvlMXvbA/OK4/YGAAsy858j4lfAgog4FfgP4CiAzFwaEQuAp4C1wMzMbK1hfZIkSZJUWrU8G+fjwKR22lcDB3Ywz4XAhbWqSZIkSZIaRa8csydJkiRJ6l2GPUmSJEkqIcOeJEmSJJWQYU+SJEmSSsiwJ0mSJEklZNiTJEmSpBIy7EmSJElSCRn2JEmSJKmEDHuSJEmSVEKGPUmSJEkqIcOeJEmSJJWQYU+SJEmSSsiwJ0mSJEklZNiTJEmSpBIy7EmSJElSCRn2JEmSJKmEDHuSJEmSVEKD6l2AJEmS+oafP/jv9S6Bg/fZqd4lSKXhlj1JkiRJKiHDniRJkiSVkGFPkiRJkkrIsCdJkiRJJWTYkyRJkqQSqlnYi4gdIuLeiHg6IpZGxFlF++yIeCkilhQ/f141z/kR8VxEPBMRh9SqNkmSJEkqu1peemEt8KXMfDQitgQWR8TdxWOXZeYl1RNHxHhgOrAr8AngFxGxU2a21rBGSZIkSSqlmm3Zy8zlmflocft14Glg1EZmOQK4KTPfzszngeeAKbWqT5IkSZLKrFeO2YuIMcAk4KGi6YyIeDwirouIjxVto4AXq2ZroZ1wGBGnRURzRDSvXLmyhlVLkiRJUv9V87AXEcOAW4CzM/P3wPeBHYEmYDlwaduk7cyeH2jIvCYzJ2fm5OHDh9eoakmSJEnq32oa9iJiMJWgNz8zbwXIzBWZ2ZqZ64BreW9XzRZgh6rZRwMv17I+SZIkSSqrWp6NM4C5wNOZ+e2q9u2rJjsSeLK4fQcwPSKGRMRYYBzwcK3qkyRJkqQyq+XZOD8DnAA8ERFLirYLgGMjoonKLprLgNMBMnNpRCwAnqJyJs+ZnolTkiRJkrqmZmEvMx+g/ePwfraReS4ELqxVTZIkSZLUKHrlbJySJEmSpN5l2JMkSZKkEjLsSZIkSVIJGfYkSZIkqYQMe5IkSZJUQoY9SZIkSSohw54kSZIklZBhT5IkSZJKyLAnSZIkSSVk2JMkSZKkEjLsSZIkSVIJGfYkSZIkqYQG1bsASZIkqUx+/uC/17sEDt5np3qXoD7ALXuSJEmSVEKGPUmSJEkqIcOeJEmSJJWQYU+SJEmSSsiwJ0mSJEklZNiTJEmSpBLqVNiLiHs60yZJkiRJ6hs2ep29iBgKfATYLiI+BkTx0FbAJ2pcmyRJkiSpizZ1UfXTgbOpBLvFvBf2fg9cWcO6JEmSJEndsNGwl5nfAb4TEWdm5nd7qSZJkiRJUjdtasseAJn53YjYBxhTPU9m3tDRPBGxA3AD8HFgHXBNZn4nIrYBbi6WtQw4OjN/V8xzPnAq0Ar8dWbetfkvSZIkSZLUqbAXEf8A7AgsoRLEAJJKmOvIWuBLmfloRGwJLI6Iu4GTgXsy86KI+CrwVeArETEemA7sSmW30V9ExE6Z2drB8iVJkiRJHehU2AMmA+MzMzu74MxcDiwvbr8eEU8Do4AjgP2KyeYBC4GvFO03ZebbwPMR8RwwBfhVZ59TkiRJklTR2evsPUlld8wuiYgxwP/f3p2HS1KVeR7//gQUd2VAHwS0aBu1QbCQElxQER3FrXFDQFTAhWYUl3a0R9sNRVxaxXYDh1YoFxRwG1B7RBpkc2GHggIRRkotoaVQWwUVBd75I86V5HJv1a2qmzfzRn0/z5NPZpw4EfHezKxT+Z5zImJ74Gzg/i0RnEgI79eqbQb8fGCz5a1s8r4OSHJekvNWrFixpiFJkiRJUq/NdGRvY+CyJOcAN00UVtXfr2rDJPcAvgq8vqp+l2TaqlOU3WEksaqOBI4EWLRo0YxHGiVJkiRpXTLTZO/gNdl5kg3oEr1jquprrfiXSTatqmuTbApc18qXA1sMbL45cM2aHFeSJEmS1nUzvRrn6au743RDeJ8BLq+qwwZWnQjsC7y/PZ8wUP7FJIfRXaBlK+Cc1T2uJEmSJGnmV+P8PbdNqbwzsAFwY1XdayWbPQ54CXBJkota2T/TJXnHJ3k58DNgD4CqWprkeOAyuit5vtorcUqSJEnSmpnpyN49B5eTPIfuSpkr2+Yspj4PD+DJ02xzKHDoTGKSJEmSJE1vplfjvJ2q+j/ArrMciyRJkiRplsx0GufzBhbvRHffPa+EKUmSJEljaqZX43z2wOubgWV0N0GXJEmSJI2hmZ6zt/+wA5EkSZIkzZ4ZnbOXZPMkX09yXZJfJvlqks2HHZwkSZIkac3M9AItR9PdB+8BwGbAN1qZJEmSJGkMzTTZ26Sqjq6qm9tjMbDJEOOSJEmSJK2FmSZ71yd5cZL12uPFwK+GGZgkSZIkac3NNNl7GfBC4D+Ba4EXAF60RZIkSZLG1ExvvXAIsG9V/QYgyUbAh+iSQEmSJEnSmJnpyN52E4keQFX9Gth+OCFJkiRJktbWTJO9OyW578RCG9mb6aigJEmSJGmOzTRh+zDw/SRfAYru/L1DhxaVJEmSJGmtzCjZq6rPJTkP2BUI8LyqumyokUmSJEmS1tiMp2K25M4ET5IkSZLmgZmesydJkiRJmkdM9iRJkiSph0z2JEmSJKmHTPYkSZIkqYdM9iRJkiSph7wxuiRpVixbvOWoQ5gVC/a7etQhSJI0KxzZkyRJkqQeMtmTJEmSpB4aWrKX5Kgk1yW5dKDs4CS/SHJRezxjYN1bklyV5IokTxtWXJIkSZK0LhjmyN5iYLcpyj9SVQvb498BkmwN7AVs07Y5PMl6Q4xNkiRJknptaMleVZ0B/HqG1XcHjq2qm6rqauAqYMdhxSZJkiRJfTeKc/YOSrKkTfO8byvbDPj5QJ3lrewOkhyQ5Lwk561YsWLYsUqSJEnSvDTXyd4RwIOBhcC1wIdbeaaoW1PtoKqOrKpFVbVok002GU6UkiRJkjTPzWmyV1W/rKpbqupW4N+4barmcmCLgaqbA9fMZWySJEmS1Cdzmuwl2XRg8bnAxJU6TwT2SnKXJFsCWwHnzGVskiRJktQn6w9rx0m+BOwCbJxkOfBOYJckC+mmaC4D/gGgqpYmOR64DLgZeHVV3TKs2CRJkiSp74aW7FXV3lMUf2Yl9Q8FDh1WPJIkSZK0LhnF1TglSZIkSUM2tJE9SZIkSaOx03uOGnUInP22l406hHWeI3uSJEmS1EMme5IkSZLUQyZ7kiRJktRDJnuSJEmS1ENeoEWSJEljwwuLSLPHkT1JkiRJ6iGTPUmSJEnqIZM9SZIkSeohkz1JkiRJ6iGTPUmSJEnqIZM9SZIkSeohkz1JkiRJ6iGTPUmSJEnqIZM9SZIkSeohkz1JkiRJ6iGTPUmSJEnqIZM9SZIkSeohkz1JkiRJ6iGTPUmSJEnqIZM9SZIkSeqh9UcdgCRJkiSNo53ec9SoQ+Dst71sjbcd2shekqOSXJfk0oGyjZKcnOTK9nzfgXVvSXJVkiuSPG1YcUmSJEnSumCY0zgXA7tNKnszcEpVbQWc0pZJsjWwF7BN2+bwJOsNMTZJkiRJ6rWhJXtVdQbw60nFuwOfba8/CzxnoPzYqrqpqq4GrgJ2HFZskiRJktR3c32BlvtX1bUA7fl+rXwz4OcD9Za3sjtIckCS85Kct2LFiqEGK0mSJEnz1bhcoCVTlNVUFavqSOBIgEWLFk1ZR+qLY3/4plGHsNb2evQHRx2CJEnSOmmuR/Z+mWRTgPZ8XStfDmwxUG9z4Jo5jk2SJEmSemOuk70TgX3b632BEwbK90pylyRbAlsB58xxbJIkSZLUG0ObxpnkS8AuwMZJlgPvBN4PHJ/k5cDPgD0AqmppkuOBy4CbgVdX1S3Dik2SJEmS+m5oyV5V7T3NqidPU/9Q4NBhxSNJkiRJ65K5nsYpSZIkSZoDJnuSJEmS1EMme5IkSZLUQyZ7kiRJktRDJnuSJEmS1EMme5IkSZLUQyZ7kiRJktRDJnuSJEmS1EMme5IkSZLUQyZ7kiRJktRDJnuSJEmS1EMme5IkSZLUQyZ7kiRJktRDJnuSJEmS1EMme5IkSZLUQ+uPOgCtvmN/+KZRh7DW9nr0B0cdgiRJktRrjuxJkiRJUg+Z7EmSJElSD5nsSZIkSVIPmexJkiRJUg+Z7EmSJElSD5nsSZIkSVIPeesFSZLm0LL9txx1CGttwdFXjzoESdIMjCTZS7IM+D1wC3BzVS1KshFwHLAAWAa8sKp+M4r4JEmSJGm+G+U0zidV1cKqWtSW3wycUlVbAae0ZUmSJEnSGhinc/Z2Bz7bXn8WeM4IY5EkSZKkeW1UyV4B30lyfpIDWtn9q+pagPZ8v6k2THJAkvOSnLdixYo5CleSJEmS5pdRXaDlcVV1TZL7AScn+dFMN6yqI4EjARYtWlTDClCSJEmS5rORjOxV1TXt+Trg68COwC+TbArQnq8bRWySJEmS1AdznuwluXuSe068Bp4KXAqcCOzbqu0LnDDXsUmSJElSX4xiGuf9ga8nmTj+F6vq20nOBY5P8nLgZ8AeI4hNkiRJknphzpO9qvoJ8Igpyn8FPHmu45EkSZKkPhqnWy9IkiRJkmaJyZ4kSZIk9ZDJniRJkiT1kMmeJEmSJPWQyZ4kSZIk9ZDJniRJkiT1kMmeJEmSJPWQyZ4kjep1vwAAEWBJREFUSZIk9dCc31RdkiTNb8sWbznqEGbFgv2uHnUIkjRUjuxJkiRJUg+Z7EmSJElSD5nsSZIkSVIPmexJkiRJUg+Z7EmSJElSD5nsSZIkSVIPmexJkiRJUg+Z7EmSJElSD5nsSZIkSVIPmexJkiRJUg+Z7EmSJElSD5nsSZIkSVIPrT/qAOba/otfM+oQ1trTHrbhqEOQJEmSNOYc2ZMkSZKkHhq7ZC/JbkmuSHJVkjePOh5JkiRJmo/GKtlLsh7wSeDpwNbA3km2Hm1UkiRJkjT/jFWyB+wIXFVVP6mqPwPHAruPOCZJkiRJmndSVaOO4a+SvADYrape0ZZfAuxUVQcN1DkAOKAtPhS4Ys4DHb2NgetHHYTmxLr6WT+oqjYZdRBrI8kK4KejjmOOravf13XRuvpZ2zbNjXX1+zXbfB9nx3x4H6dtm8btapyZoux22WhVHQkcOTfhjKck51XVolHHoeHzs56/5vsPwjXh93Xd4Wc9f82Htsnv1+zwfZwd8/19HLdpnMuBLQaWNweuGVEskiRJkjRvjVuydy6wVZItk9wZ2As4ccQxSZIkSdK8M1bTOKvq5iQHAScB6wFHVdXSEYc1jtbpaazrGD9rzSd+X9cdftYaJr9fs8P3cXbM6/dxrC7QIkmSJEmaHeM2jVOSJEmSNAtM9iRJkiSph0z2xlSS3ZJckeSqJG+eYn2SfKytX5LkkaOIU2svyVFJrkty6TTr/aw1dpJUkg8PLL8xycEjDEmzqLU7ZyV5+kDZC5N8e5RxaX5JsmDy/21JDk7yxinqLm73W9Y0ktyS5KIklyb5RpL7zOK+b5itfc2lJG9NsrT9ProoyU6zsM/vr8E2pyUZy9szmOyNoSTrAZ8Eng5sDeydZOtJ1Z4ObNUeBwBHzGmQmk2Lgd1Wst7PWuPoJuB5STYedSCafdWd0H8gcFiSDZPcHTgUePVoI1MfJRmrCwaOsT9W1cKqejjwa1bj32Mf3+MkjwGeBTyyqrYDngL8fG33W1WPXc041lvbYw6Tyd542hG4qqp+UlV/Bo4Fdp9UZ3fgc9X5IXCfJJvOdaBae1V1Bl2jPR0/a42jm+muUPaPk1ckeVCSU1pP6ylJHjj34WltVdWlwDeA/wW8E/gC8NYk5ya5MMnuAEm2SXJO61VfkmSrEYateaKNhLw3yenA61rxU5KcmeTHSZ7V6i1oZRe0x2Nb+S5tH19J8qMkxyTJqP6eEfgBsBncflQpycZJlrXX+yX5cpJvAN9Jco/WJl+Q5JKJf8Pz2KbA9VV1E0BVXV9V1yTZIcnpSc5PctLEb6b2Pn0kyRlJLk/yqCRfS3JlkvdM7HRilLN9x745UP6JJPu118uSvCPJWcAercqLk3y/jbzu2Ort2MoubM8PbeX7tWN/ux3/X4b1JpnsjafNuH3PxPJWtrp11A9+1hpXnwT2SXLvSeWfoOug2A44BvjYnEem2fIu4EV0Mww2BE6tqkcBTwI+2Eb8DgQ+WlULgUV0bZQ0E/epqidW1cSU8AXAE4FnAp9KsiFwHfDfq+qRwJ7cvj3ZHng93SyovwEeN1eBj1IbSXoyM7sX9WOAfatqV+BPwHPbe/kk4MPzPEH+DrBF6xw4PMkTk2wAfBx4QVXtABxFNythwp+r6gnAp4AT6EZHHw7sl+S/rebx/1RVO1fVsW357m1U8FXtuAA/Ap5QVdsD7wDeO7D9Qrrv9LbAnkm2WM3jz0jvhnR7Yqp/eJPvkTGTOuoHP2uNpar6XZLPAa8F/jiw6jHA89rrzwND67HUcFXVjUmOA24AXgg8e+B8qw2BB9KNMLw1yebA16rqytFEqzE03f9VE+XHTSo/vqpuBa5M8hPgYcDVwCeSLARuAR4yUP+cqloOkOQiumTxrFmKfRzddeDvPB84eQbbnFxVE7OHArw3yROAW+k6ju8P/OcQYh26qrohyQ7A4+mS1+OA99Albye3PHY94NqBzSYS5EuApVV1LUD7vm0B/Go1Qpj8/f1Si+uMJPdq51TeE/hsm/FQwAYD9U+pqt+2418GPIhZmIY6mcneeFpO94WbsDlwzRrUUT/4WWuc/StwAXD0SurYOTG/3doeAZ5fVVdMWn95krPpRmNOSvKKqjp1roPUWPoVcN9JZRvRJXAAN05aN7mtKLqp4r8EHkE3I+1PA+tvGnh9C/3/XfvHqlrYZlN8k25U6mN00+onZuttOGmbwfd4H2ATYIeq+kub7jm5/rxSVbcApwGnJbmE7j1ZWlWPmWaTie/Mrdz++3Mrd/z+DL6vsPL3Fqb+/h4CfLeqnptkQYt1ciwwxO+v0zjH07nAVkm2THJnYC/uOFR/IvDSdB4N/Haid0K942etsdV6jI8HXj5Q/H26dgu6Hxd97mlfl5wEvGZi2leS7dvz3wA/qaqP0bVX240uRI2TqroBuDbJkwGSbER3QbLp2oQ9ktwpyYPppmVeAdwbuLaN+L2EbqRmndZGg14LvLFNW1wG7NBWr+yKpvcGrmuJ3pPoRpLmrSQPnXSO8ELgcmCTdBdvIckGSbZZw0P8FNg6yV1agv3kVdTfsx1zZ7rfar+le89/0dbvt4ZxrJW+94DMS1V1c5KD6P5jXQ84qqqWJjmwrf8U8O/AM4CrgD8A+48qXq2dJF8CdgE2TrKc7kIIG4CfteaNDwMHDSy/FjgqyZuAFfid7YtD6EZyl7SEbxndlfD2pLswwV/opoO9e2QRahy9FPhkbrtVy7uq6v9Nc6rYFcDpdFMLD6yqPyU5HPhqkj2A73LH0ZR1UlVdmORiuo61DwHHJ3kJsLJR9WOAbyQ5D7iI7nyy+ewewMfbdMmb6X4nHUB38bCPtQRtfbp2a+nq7ryqfp7keGAJcCVw4So2+U262zbcC3hZK/sXummcb2Dln83QpLu6siRJkiSpT5zGKUmSJEk9ZLInSZIkST1ksidJkiRJPWSyJ0mSJEk9ZLInSZIk9USSXZI8dtRxaDyY7EmSJElzKMlQ7heYZH262zkNLdlrx9A8YbKnOZXkhvb8gCRfaa8XJnnGKrY7OMkbp1n3/VVs+89rGq+k+S3J4iQvaK8fn2RpkouS3HUOY1iQ5NIhH+O0JIuGeQxJM9P+zf8oyWeTLEnylSR3S7IsyTuSnEV3A/m9k1yS5NIkHxjY/oYkH05yQZJTkmzSyh+c5NtJzk9yZpKHtfLFSQ5L8l3gOOBA4B9bW/f4JFe3m6+T5F4tjg2mif2VSc5NcnGSrya52xTH+MBKYnl2krOTXJjkP5Lcf4hvtWbAZE9rbU16eKrqmqp6QVtcSHfT8DVSVavqvVqtZC8d/21I/bMP8KGqWlhVfxx1MJJ67aHAkVW1HfA74FWt/E9VtTNwBvABYFe630GPSvKcVufuwAVV9Ui6m8y/s5UfCbymqnYA3ggcPnC8hwBPqarnA58CPtLaujOB04Bntnp7AV+tqr9ME/fXqupRVfUI4HLg5VMc43+uJJazgEdX1fbAscA/zeC90hD5g1YzkuSlrXfq4iSfX40eni2T/KD1Eh0ysL8FrSfrzsC7gT1bD9SeKwlj69Z7/ZMkrx3Y18Ro4aZJzmj7ubT1Zr0fuGsrO6bVe0Nbf2mS1w/Ec3mSw4ELgLcn+cjAMV6Z5LBZe0MlrbEkd0/yrdYeXZpkzyQ7JDm9tUEnJdl00javAF4IvGOiLZhm329q7dWSJO9qZRO99J9uxzsmyVOSfC/JlUl2bPUObu3jqa38lVPsf8MkR7fe/AuTPKmVn5lk4UC97yXZrv2tR7WYLkyye1t/1yTHtjiPA+ZspFLSjPy8qr7XXn8B2Lm9Pq49Pwo4rapWVNXNwDHAE9q6WwfqfQHYOck96KZmfjnJRcD/BgbbuS9X1S3TxPJpYP/2en/g6JXE/fDWHl1C10G2zeRjrCKWzYGT2vZvmrS9RsA5t1qlJNsAbwUeV1XXJ9kIOIzbenhuSXIKcGBVXZlkJ7oenl2BjwJHVNXnkrx68r6r6s9J3gEsqqqDVhHKw4AnAfcErkhyxKSeqRcBJ1XVoenmwt+tqs5MclBVLWx/yw50Dd1OQICzk5wO/IauF27/qnpVkrsDS5L8UzvG/sA/rP67J2kIdgOuqapnAiS5N/B/gd2rakXrNDoUeNnEBlX16SQ7A9+sqq9MtdMkTwW2Anakax9OTPIE4GfA3wJ7AAcA59K1NzsDf083e2CiR3474NF0PfMXJvnWpMO8usWzbesU+06Sh9D9GNsPeH1bvktVLUnyXuDUqnpZkvsA5yT5D7r26A9VtV2S7eg6qSSNj5pm+cb2nNXc152A/5r4PTOFG6cpp6q+1zqtngisV1Urm1a+GHhOVV2cZD+68/8mH2NlsXwcOKyqTkyyC3DwSo6lOeDInmZiV+ArVXU9QFX9upXPpIfnccCX2uvPr2Uc36qqm1oc1wGT54GfC+yf5GBg26r6/RT72Bn4elXdWFU3AF8DHt/W/bSqftj+xhuBU4FntR9kG1TVJWsZv6TZcQnwlCQfSPJ4YAvg4cDJrQ16G13v8up6antcSJc8PYwu+QO4uqouqapbgaXAKVVVLZYFA/s4oar+2Nqp79IljoN2prWFVfUj4Kd0HWdfpmtvNqBLUhcPxPTm9nedBmwIPJBuBOALbT9LgCVr8PdKGp4HJnlMe7033fTGQWcDT0yyceug3ptuyiZ0v88nTnV5EXBWVf0OuDrJHvDXU04eMc2xf0/XMT7oc3S/x1Y2qkfb7trWFu0zVYVVxHJv4Bft9b6rOJbmgMmeZiLcsYcKpujhGXj83UC9qbZdEzcNvL6FSSPTVXUG3Q+gXwCfT/LSKfaxsp60yb1iEz3tq5ryIGkOVdWPgR3oEq33Ac8Hlg60P9tW1VPXYNcB3jewn7+tqs+0dYPtz60Dy7dy+7Zout78wWPcQVX9ATgZ2J1uuukXB+o/fyCmB1bV5dPsW9L4uBzYN8kSYCPgiMGVVXUt8Ba6TqGL6c7RO6GtvhHYJsn5dB3u727l+wAvT3IxXafT7tMc+xvAc9spLBMd2scA9+W2DvjpvJ0uET0Z+NFK6k0Xy8F0nf9nAtev4liaA07j1EycAnw9yUeq6ldtGudfVdXv0l3paY+q+nKSANtV1cXA9+hOBv4C0/QQMXUP1GpL8iDgF1X1b20a5iPperL+kmSDNh3zDGBxunP5AjwXeMlU+6uqs5Ns0faz3drGJ2l2JHkA8Ouq+kK6c3YPADZJ8piq+kHrkX5IVS1dzV2fBByS5JiquiHJZsB0FzGYzu5J3kc3jXMX4M3AnQfWn0HXFp7apms+ELiirfs03Y+0MwdmUJwEvCbJa6qqkmxfVRcO7Oe7SR6ObZQ0bm6tqgMnlS0YXKiqL3Jbxw6T1r2dLvEaLLuabhr75Lr7TVr+MXdsE3amm6X1XysLuqqOYFJiOs0xpovlBOCEyeUaHZM9rVJVLU1yKHB6klvopjhNtg9wRJK3ARvQXYHpYuB1wBeTvA746jSH+C63TVN6X1UdN029VdkFeFOSvwA3ABMje0fSnX93QVXtk2QxcE5b9+mqujDJgmn2eTywsKp+s4YxSZp92wIfTHIrXTL2P4CbgY+18/fWB/6Vrrd5xqrqO0n+DvhB12fFDcCL6WYSzNQ5wLfokrhDquqaSe3L4cCn2sULbgb2q6qb2vHPT/I7bj+T4JD2tyxpHWnLgGfR/Rg7uo0aXMRtbZok3U6SjwNPZy2ufK75K90pB5KmkuSbdJcvPmXUsUgab+184Ruq6kNruP0D6M7Le1g7N1CShiLJJ+muqzDoo1XlaSs948ieNIWJq94BF5voSRq2do7xocAbTPQkDVtV3eEK6eonR/Y0VpLsTzf1c9D3bJQkzZYk23LHqwPfVFU7jSIeSZKGxWRPkiRJknrIWy9IkiRJUg+Z7EmSJElSD5nsSZIkSVIPmexJkiRJUg/9f+TTbXoz3/D4AAAAAElFTkSuQmCC\n", + "text/plain": [ + "
" + ] + }, + "metadata": { + "needs_background": "light" + }, + "output_type": "display_data" + } + ], + "source": [ + "plt.figure(figsize=(15,10))\n", + "\n", + "plt.subplot(2,3,1)\n", + "sns.countplot(x='gender' ,hue='loan_status', data=df,palette='plasma')\n", + "\n", + "plt.subplot(2,3,2)\n", + "sns.countplot(x='married',hue='loan_status',data=df,palette='viridis')\n", + "plt.ylabel(' ')\n", + "plt.yticks([ ])\n", + "\n", + "plt.subplot(2,3,3)\n", + "sns.countplot(x='education',hue='loan_status',data=df,palette='copper')\n", + "plt.ylabel(' ')\n", + "plt.yticks([ ])\n", + "\n", + "plt.subplot(2,3,4)\n", + "sns.countplot(x='credit_history', data=df,hue='loan_status',palette='summer')\n", + "\n", + "plt.subplot(2,3,5)\n", + "sns.countplot(x='self_employed',hue='loan_status',data=df,palette='autumn')\n", + "plt.ylabel(' ')\n", + "plt.yticks([ ])\n", + "\n", + "plt.subplot(2,3,6)\n", + "sns.countplot(x='property_area',data=df,hue='loan_status',palette='PuBuGn')\n", + "plt.ylabel(' ')\n", + "plt.yticks([ ])" + ] + }, + { + "cell_type": "markdown", + "execution_count": null, + "metadata": { + "papermill": { + "duration": 0.025504, + "end_time": "2020-09-08T03:16:01.381656", + "exception": false, + "start_time": "2020-09-08T03:16:01.356152", + "status": "completed" + }, + "tags": [] + }, + "source": [ + "Comparison between Genders in getting the Loan shows that a Male Individual has more chance of repaying the Loan.\n", + "\n", + "Comparison between Married Status in getting the Loan shows that a Married Individual has more chance of repaying the Loan.\n", + " \n", + "Comparison between Education Status of an Individual in getting the Loan shows that a Graduate Individual has more chance of repaying the Loan.\n", + " \n", + "Comparison between Self-Employed or Not in getting the Loan shows that Not Self-Employed has more chance of repaying the Loan.\n", + "\n", + "Comparison between Credit History for getting the Loan shows that an individual with a credit history has more chance of repaying the Loan.\n", + " \n", + "Comparison between Property Area for getting the Loan shows that People living in Semi-Urban Area have more chance to repay the Loan." + ] + }, + { + "cell_type": "code", + "execution_count": 25, + "metadata": { + "execution": { + "iopub.execute_input": "2020-09-08T03:16:01.441150Z", + "iopub.status.busy": "2020-09-08T03:16:01.440328Z", + "iopub.status.idle": "2020-09-08T03:16:03.154754Z", + "shell.execute_reply": "2020-09-08T03:16:03.153921Z" + }, + "papermill": { + "duration": 1.7457, + "end_time": "2020-09-08T03:16:03.154913", + "exception": false, + "start_time": "2020-09-08T03:16:01.409213", + "status": "completed" + }, + "tags": [] + }, + "outputs": [ + { + "data": { + "text/html": [ + " \n", + " " + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "data": { + "text/html": [ + "
\n", + " \n", + " \n", + "
\n", + " \n", + "
" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "px.sunburst( data_frame=df,path=['gender','loan_status'], color='loan_amount')" + ] + }, + { + "cell_type": "code", + "execution_count": 26, + "metadata": { + "execution": { + "iopub.execute_input": "2020-09-08T03:16:03.284219Z", + "iopub.status.busy": "2020-09-08T03:16:03.282805Z", + "iopub.status.idle": "2020-09-08T03:16:04.624134Z", + "shell.execute_reply": "2020-09-08T03:16:04.623223Z" + }, + "papermill": { + "duration": 1.392117, + "end_time": "2020-09-08T03:16:04.624290", + "exception": false, + "start_time": "2020-09-08T03:16:03.232173", + "status": "completed" + }, + "tags": [] + }, + "outputs": [ + { + "data": { + "text/plain": [ + "([],
)" + ] + }, + "execution_count": 26, + "metadata": {}, + "output_type": "execute_result" + }, + { + "data": { + "image/png": "iVBORw0KGgoAAAANSUhEUgAAA3wAAAJNCAYAAABqRXeeAAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAALEgAACxIB0t1+/AAAADh0RVh0U29mdHdhcmUAbWF0cGxvdGxpYiB2ZXJzaW9uMy4yLjEsIGh0dHA6Ly9tYXRwbG90bGliLm9yZy+j8jraAAAgAElEQVR4nOzdd5Rb133o++/vHLTpwykcUiwiJdHqnVZcYjkusa3cOFbynhwlTlyX/da7sq5iJ3m24uTaWddykaXIRVZs2Va1JKv3LlpUoSTKJEU1UpYo1mGZ3juA/f4ADgZDDmYAagCcfeb3WWsWygCYPcDBPvu3f7uIMQallFJKKaWUUsHjlLsASimllFJKKaWKQwM+pZRSSimllAooDfiUUkoppZRSKqA04FNKKaWUUkqpgNKATymllFJKKaUCKlTuArxTTU1NZsWKFeUuhlJqDm3cuLHTGNNc7nK8U1o/KRU8QaiftG5SKnhmqpusD/hWrFjBhg0byl0MpdQcEpFd5S7DXND6SangCUL9pHWTUsEzU92kQzqVUkoppZRSKqA04FNKKaWUUkqpgNKATymllFJKKaUCyvo5fErZbGJigtbWVkZHR8tdlLKIxWIsXbqUcDhc7qIopQ6i9ZPWT0r5kdZNhddNGvApVUatra3U1NSwYsUKRKTcxSkpYwxdXV20traycuXKchdHKXUQrZ+0flLKj7RuKrxu0iGdSpXR6OgojY2N867CAhARGhsb520PnVJ+p/WT1k9K+ZHWTYXXTUUN+ETkWBHZnPXTLyL/JCINIvK4iLyVvlyQ9ZyLRWSbiPxRRD5ezPIp5QfzscLyzOf/XSkbzOfv6Hz+35Xyu/n8/Tyc/72oAZ8x5o/GmNOMMacBZwLDwN3AN4E1xphVwJr0bUTkBOB84ETgE8BVIuIWs4xKKaWUUkopFVSlHNL5EeBtY8wu4FPA9en7rwfOTV//FPA7Y8yYMWYHsA04q4RlVEoppZRSSqnAKGXAdz5wS/p6izFmP0D6cmH6/iXAnqzntKbvm0JEviIiG0RkQ0dHRxGLXLh4PM53v/tdtm/fXu6iKEtVV1eX7W+vXbuW5557bs4ep/zloYce4oYbbih3MZTFtH5SxdDZ2cnFF19MX19fuYuiLKV108xKEvCJSAT4K+D22R46zX3mkDuMudoYs9oYs7q5uXkuijhntm/fzv33388VV1xR7qIoVTAbKi11+L773e/yi1/8otzFUOqwaP0UXLfeeisPPPAA999/f7mLolTBbKibSpXhOwfYZIxpS99uE5HFAOnL9vT9rcCyrOctBfaVqIxzwphUfNrb21vmkijbGWP413/9V0466SROPvlkbr31VgAGBwf5yEc+whlnnMHJJ5/MvffeC8DOnTs5/vjj+fKXv8yJJ57Ixz72MUZGRnK+/k9/+lNOOOEETjnlFM4//3x27tzJL37xC6644gpOO+00nnnmGe6//37+5E/+hNNPP52PfvSjtLW1Tfu4z3/+89xxxx2Z1/Z62vbv38/ZZ5/NaaedxkknncQzzzxTxHdMKVUqWj+pueStODgxMVHmkijbad00wxtT7B/gd8AXsm7/CPhm+vo3gUvT108EXgaiwEpgO+DO9Npnnnmm8ZM33njDnHXWWeYzn/lMuYuiLLBly5ZD7quqqjLGGHPHHXeYj370oyYej5sDBw6YZcuWmX379pmJiQnT19dnjDGmo6PDHH300SaZTJodO3YY13XNSy+9ZIwx5rzzzjM33nhjzr+9ePFiMzo6aowxpqenxxhjzLe//W3zox/9KPOY7u5uk0wmjTHG/OpXvzJf//rXp33c5z73OXP77bcf8j9cdtll5rvf/a4xxph4PG76+/vzeg+ADaYEdVOxf/xWP733ve81733ve8tdDGUJrZ+CWz/5rW667LLLzEknnWR+85vflLsoygJaNxVeNxV943URqQT+HPh/su7+AXCbiHwJ2A2cB2CMeV1EbgO2AHHgAmNMothlVMqPnn32Wf7u7/4O13VpaWnhgx/8IH/4wx8455xz+Ld/+zeefvppHMdh7969tLWlkucrV67ktNNOA+DMM89k586dOV//lFNO4TOf+Qznnnsu55577rSPaW1t5W//9m/Zv38/4+PjBW9A/O53v5svfvGLTExMcO6552bKppSym9ZPSik/0rppekUf0mmMGTbGNBpj+rLu6zLGfMQYsyp92Z31u0uMMUcbY441xjxc7PLNNW9vjFSgrdThy3UM3XTTTXR0dLBx40Y2b95MS0tLZjhMNBrNPM51XeLxeM7Xf/DBB7ngggvYuHEjZ5555rSPvfDCC/nqV7/Kq6++yi9/+cucG32GQiGSyWSm3OPj4wCcffbZPP300yxZsoR/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\n", + "text/plain": [ + "
" + ] + }, + "metadata": { + "needs_background": "light" + }, + "output_type": "display_data" + } + ], + "source": [ + "plt.figure(figsize=(15,10))\n", + "\n", + "plt.subplot(2,3,1)\n", + "sns.violinplot(x='gender', y='loan_amount',hue='loan_status', data=df,palette='plasma')\n", + "\n", + "plt.subplot(2,3,2)\n", + "sns.violinplot(x='married',y='loan_amount',hue='loan_status',data=df,palette='viridis')\n", + "plt.ylabel(' ')\n", + "plt.yticks([ ])\n", + "\n", + "plt.subplot(2,3,3)\n", + "sns.violinplot(x='education',y='loan_amount',hue='loan_status',data=df,palette='copper')\n", + "plt.ylabel(' ')\n", + "plt.yticks([ ])\n", + "\n", + "plt.subplot(2,3,4)\n", + "sns.violinplot(x='credit_history',y='loan_amount', data=df,hue='loan_status',palette='summer')\n", + "\n", + "plt.subplot(2,3,5)\n", + "sns.violinplot(x='self_employed',y='loan_amount',hue='loan_status',data=df,palette='autumn')\n", + "plt.ylabel(' ')\n", + "plt.yticks([ ])\n", + "\n", + "plt.subplot(2,3,6)\n", + "sns.violinplot(x='property_area', y='loan_amount',data=df,hue='loan_status',palette='PuBuGn')\n", + "plt.ylabel(' ')\n", + "plt.yticks([ ])" + ] + }, + { + "cell_type": "code", + "execution_count": 27, + "metadata": { + "execution": { + "iopub.execute_input": "2020-09-08T03:16:04.708238Z", + "iopub.status.busy": "2020-09-08T03:16:04.703360Z", + "iopub.status.idle": "2020-09-08T03:16:05.525060Z", + "shell.execute_reply": "2020-09-08T03:16:05.525759Z" + }, + "papermill": { + "duration": 0.869293, + "end_time": "2020-09-08T03:16:05.525969", + "exception": false, + "start_time": "2020-09-08T03:16:04.656676", + "status": "completed" + }, + "tags": [] + }, + "outputs": [ + { + "data": { + "text/plain": [ + "" + ] + }, + "execution_count": 27, + "metadata": {}, + "output_type": "execute_result" + }, + { + "data": { + "image/png": "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\n", + "text/plain": [ + "
" + ] + }, + "metadata": { + "needs_background": "light" + }, + "output_type": "display_data" + } + ], + "source": [ + "plt.figure(figsize=(18,5))\n", + "\n", + "\n", + "plt.subplot(1,3,1)\n", + "sns.distplot(df['applicant_income'],bins=30,color='r',hist_kws=dict(edgecolor='white'))\n", + "plt.ylabel('frequency')\n", + "\n", + "plt.subplot(1,3,2)\n", + "sns.distplot(df['co-applicant_income'],bins=30,color='blue',hist_kws=dict(edgecolor='white'))\n", + "\n", + "plt.subplot(1,3,3)\n", + "sns.distplot(df['loan_amount'],bins=30,color='black',hist_kws=dict(edgecolor='white'))" + ] + }, + { + "cell_type": "code", + "execution_count": 28, + "metadata": { + "execution": { + "iopub.execute_input": "2020-09-08T03:16:05.598242Z", + "iopub.status.busy": "2020-09-08T03:16:05.597077Z", + "iopub.status.idle": "2020-09-08T03:16:05.764662Z", + "shell.execute_reply": "2020-09-08T03:16:05.763869Z" + }, + "papermill": { + "duration": 0.206593, + "end_time": "2020-09-08T03:16:05.764820", + "exception": false, + "start_time": "2020-09-08T03:16:05.558227", + "status": "completed" + }, + "tags": [] + }, + "outputs": [ + { + "data": { + "text/html": [ + "
\n", + " \n", + " \n", + "
\n", + " \n", + "
" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "px.scatter_3d(data_frame=df,x='applicant_income',y='co-applicant_income',z='loan_amount',color='loan_status')" + ] + }, + { + "cell_type": "markdown", + "execution_count": null, + "metadata": { + "papermill": { + "duration": 0.02967, + "end_time": "2020-09-08T03:16:05.823612", + "exception": false, + "start_time": "2020-09-08T03:16:05.793942", + "status": "completed" + }, + "tags": [] + }, + "source": [ + "##### 3-2-Encoding" + ] + }, + { + "cell_type": "markdown", + "execution_count": null, + "metadata": { + "papermill": { + "duration": 0.032563, + "end_time": "2020-09-08T03:16:05.885144", + "exception": false, + "start_time": "2020-09-08T03:16:05.852581", + "status": "completed" + }, + "tags": [] + }, + "source": [ + "###### 3-2-1-gender" + ] + }, + { + "cell_type": "code", + "execution_count": 29, + "metadata": { + "execution": { + "iopub.execute_input": "2020-09-08T03:16:05.949285Z", + "iopub.status.busy": "2020-09-08T03:16:05.948498Z", + "iopub.status.idle": "2020-09-08T03:16:05.952191Z", + "shell.execute_reply": "2020-09-08T03:16:05.951396Z" + }, + "papermill": { + "duration": 0.03787, + "end_time": "2020-09-08T03:16:05.952327", + "exception": false, + "start_time": "2020-09-08T03:16:05.914457", + "status": "completed" + }, + "tags": [] + }, + "outputs": [], + "source": [ + "model1=LabelEncoder()" + ] + }, + { + "cell_type": "code", + "execution_count": 30, + "metadata": { + "execution": { + "iopub.execute_input": "2020-09-08T03:16:06.019197Z", + "iopub.status.busy": "2020-09-08T03:16:06.018016Z", + "iopub.status.idle": "2020-09-08T03:16:06.023852Z", + "shell.execute_reply": "2020-09-08T03:16:06.023070Z" + }, + "papermill": { + "duration": 0.042876, + "end_time": "2020-09-08T03:16:06.023983", + "exception": false, + "start_time": "2020-09-08T03:16:05.981107", + "status": "completed" + }, + "tags": [] + }, + "outputs": [ + { + "data": { + "text/plain": [ + "LabelEncoder()" + ] + }, + "execution_count": 30, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "model1.fit(df['gender'])" + ] + }, + { + "cell_type": "code", + "execution_count": 31, + "metadata": { + "execution": { + "iopub.execute_input": "2020-09-08T03:16:06.094072Z", + "iopub.status.busy": "2020-09-08T03:16:06.093112Z", + "iopub.status.idle": "2020-09-08T03:16:06.096744Z", + "shell.execute_reply": "2020-09-08T03:16:06.096070Z" + }, + "papermill": { + "duration": 0.043284, + "end_time": "2020-09-08T03:16:06.096910", + "exception": false, + "start_time": "2020-09-08T03:16:06.053626", + "status": "completed" + }, + "tags": [] + }, + "outputs": [], + "source": [ + "df['gender']= model1.transform(df['gender'])" + ] + }, + { + "cell_type": "markdown", + "execution_count": null, + "metadata": { + "papermill": { + "duration": 0.029729, + "end_time": "2020-09-08T03:16:06.155847", + "exception": false, + "start_time": "2020-09-08T03:16:06.126118", + "status": "completed" + }, + "tags": [] + }, + "source": [ + "###### 3-2-2-married" + ] + }, + { + "cell_type": "code", + "execution_count": 32, + "metadata": { + "execution": { + "iopub.execute_input": "2020-09-08T03:16:06.222196Z", + "iopub.status.busy": "2020-09-08T03:16:06.221004Z", + "iopub.status.idle": "2020-09-08T03:16:06.224732Z", + "shell.execute_reply": "2020-09-08T03:16:06.223978Z" + }, + "papermill": { + "duration": 0.04018, + "end_time": "2020-09-08T03:16:06.224884", + "exception": false, + "start_time": "2020-09-08T03:16:06.184704", + "status": "completed" + }, + "tags": [] + }, + "outputs": [], + "source": [ + "model2=LabelEncoder()" + ] + }, + { + "cell_type": "code", + "execution_count": 33, + "metadata": { + "execution": { + "iopub.execute_input": "2020-09-08T03:16:06.295821Z", + "iopub.status.busy": "2020-09-08T03:16:06.294988Z", + "iopub.status.idle": "2020-09-08T03:16:06.299327Z", + "shell.execute_reply": "2020-09-08T03:16:06.298561Z" + }, + "papermill": { + "duration": 0.044075, + "end_time": "2020-09-08T03:16:06.299454", + "exception": false, + "start_time": "2020-09-08T03:16:06.255379", + "status": "completed" + }, + "tags": [] + }, + "outputs": [ + { + "data": { + "text/plain": [ + "LabelEncoder()" + ] + }, + "execution_count": 33, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "model2.fit(df['married'])" + ] + }, + { + "cell_type": "code", + "execution_count": 34, + "metadata": { + "execution": { + "iopub.execute_input": "2020-09-08T03:16:06.367967Z", + "iopub.status.busy": "2020-09-08T03:16:06.366916Z", + "iopub.status.idle": "2020-09-08T03:16:06.370583Z", + "shell.execute_reply": "2020-09-08T03:16:06.369948Z" + }, + "papermill": { + "duration": 0.040351, + "end_time": "2020-09-08T03:16:06.370713", + "exception": false, + "start_time": "2020-09-08T03:16:06.330362", + "status": "completed" + }, + "tags": [] + }, + "outputs": [], + "source": [ + "df['married']= model2.transform(df['married'])" + ] + }, + { + "cell_type": "markdown", + "execution_count": null, + "metadata": { + "papermill": { + "duration": 0.031241, + "end_time": "2020-09-08T03:16:06.432897", + "exception": false, + "start_time": "2020-09-08T03:16:06.401656", + "status": "completed" + }, + "tags": [] + }, + "source": [ + "###### 3-2-3-education" + ] + }, + { + "cell_type": "code", + "execution_count": 35, + "metadata": { + "execution": { + "iopub.execute_input": "2020-09-08T03:16:06.504427Z", + "iopub.status.busy": "2020-09-08T03:16:06.503566Z", + "iopub.status.idle": "2020-09-08T03:16:06.507525Z", + "shell.execute_reply": "2020-09-08T03:16:06.506682Z" + }, + "papermill": { + "duration": 0.041005, + "end_time": "2020-09-08T03:16:06.507659", + "exception": false, + "start_time": "2020-09-08T03:16:06.466654", + "status": "completed" + }, + "tags": [] + }, + "outputs": [], + "source": [ + "model3=LabelEncoder()" + ] + }, + { + "cell_type": "code", + "execution_count": 36, + "metadata": { + "execution": { + "iopub.execute_input": "2020-09-08T03:16:06.574611Z", + "iopub.status.busy": "2020-09-08T03:16:06.573448Z", + "iopub.status.idle": "2020-09-08T03:16:06.578526Z", + "shell.execute_reply": "2020-09-08T03:16:06.577945Z" + }, + "papermill": { + "duration": 0.041678, + "end_time": "2020-09-08T03:16:06.578667", + "exception": false, + "start_time": "2020-09-08T03:16:06.536989", + "status": "completed" + }, + "tags": [] + }, + "outputs": [ + { + "data": { + "text/plain": [ + "LabelEncoder()" + ] + }, + "execution_count": 36, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "model3.fit(df['education'])" + ] + }, + { + "cell_type": "code", + "execution_count": 37, + "metadata": { + "execution": { + "iopub.execute_input": "2020-09-08T03:16:06.647661Z", + "iopub.status.busy": "2020-09-08T03:16:06.646476Z", + "iopub.status.idle": "2020-09-08T03:16:06.649387Z", + "shell.execute_reply": "2020-09-08T03:16:06.649995Z" + }, + "papermill": { + "duration": 0.041559, + "end_time": "2020-09-08T03:16:06.650166", + "exception": false, + "start_time": "2020-09-08T03:16:06.608607", + "status": "completed" + }, + "tags": [] + }, + "outputs": [], + "source": [ + "df['education']= model3.transform(df['education'])" + ] + }, + { + "cell_type": "markdown", + "execution_count": null, + "metadata": { + "papermill": { + "duration": 0.029583, + "end_time": "2020-09-08T03:16:06.709183", + "exception": false, + "start_time": "2020-09-08T03:16:06.679600", + "status": "completed" + }, + "tags": [] + }, + "source": [ + "###### 3-2-4-self_employed" + ] + }, + { + "cell_type": "code", + "execution_count": 38, + "metadata": { + "execution": { + "iopub.execute_input": "2020-09-08T03:16:06.775569Z", + "iopub.status.busy": "2020-09-08T03:16:06.774514Z", + "iopub.status.idle": "2020-09-08T03:16:06.777409Z", + "shell.execute_reply": "2020-09-08T03:16:06.777964Z" + }, + "papermill": { + "duration": 0.039598, + "end_time": "2020-09-08T03:16:06.778140", + "exception": false, + "start_time": "2020-09-08T03:16:06.738542", + "status": "completed" + }, + "tags": [] + }, + "outputs": [], + "source": [ + "model4=LabelEncoder()" + ] + }, + { + "cell_type": "code", + "execution_count": 39, + "metadata": { + "execution": { + "iopub.execute_input": "2020-09-08T03:16:06.846303Z", + "iopub.status.busy": "2020-09-08T03:16:06.845098Z", + "iopub.status.idle": "2020-09-08T03:16:06.850215Z", + "shell.execute_reply": "2020-09-08T03:16:06.849498Z" + }, + "papermill": { + "duration": 0.042008, + "end_time": "2020-09-08T03:16:06.850339", + "exception": false, + "start_time": "2020-09-08T03:16:06.808331", + "status": "completed" + }, + "tags": [] + }, + "outputs": [ + { + "data": { + "text/plain": [ + "LabelEncoder()" + ] + }, + "execution_count": 39, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "model4.fit(df['self_employed'])" + ] + }, + { + "cell_type": "code", + "execution_count": 40, + "metadata": { + "execution": { + "iopub.execute_input": "2020-09-08T03:16:06.917673Z", + "iopub.status.busy": "2020-09-08T03:16:06.916924Z", + "iopub.status.idle": "2020-09-08T03:16:06.920588Z", + "shell.execute_reply": "2020-09-08T03:16:06.919849Z" + }, + "papermill": { + "duration": 0.040144, + "end_time": "2020-09-08T03:16:06.920711", + "exception": false, + "start_time": "2020-09-08T03:16:06.880567", + "status": "completed" + }, + "tags": [] + }, + "outputs": [], + "source": [ + "df['self_employed']= model4.transform(df['self_employed'])" + ] + }, + { + "cell_type": "markdown", + "execution_count": null, + "metadata": { + "papermill": { + "duration": 0.029232, + "end_time": "2020-09-08T03:16:06.979610", + "exception": false, + "start_time": "2020-09-08T03:16:06.950378", + "status": "completed" + }, + "tags": [] + }, + "source": [ + "###### 3-2-5-property_area" + ] + }, + { + "cell_type": "code", + "execution_count": 41, + "metadata": { + "execution": { + "iopub.execute_input": "2020-09-08T03:16:07.049537Z", + "iopub.status.busy": "2020-09-08T03:16:07.048731Z", + "iopub.status.idle": "2020-09-08T03:16:07.052665Z", + "shell.execute_reply": "2020-09-08T03:16:07.051866Z" + }, + "papermill": { + "duration": 0.040401, + "end_time": "2020-09-08T03:16:07.052818", + "exception": false, + "start_time": "2020-09-08T03:16:07.012417", + "status": "completed" + }, + "tags": [] + }, + "outputs": [], + "source": [ + "model5=LabelEncoder()" + ] + }, + { + "cell_type": "code", + "execution_count": 42, + "metadata": { + "execution": { + "iopub.execute_input": "2020-09-08T03:16:07.122699Z", + "iopub.status.busy": "2020-09-08T03:16:07.121879Z", + "iopub.status.idle": "2020-09-08T03:16:07.126525Z", + "shell.execute_reply": "2020-09-08T03:16:07.125827Z" + }, + "papermill": { + "duration": 0.042427, + "end_time": "2020-09-08T03:16:07.126658", + "exception": false, + "start_time": "2020-09-08T03:16:07.084231", + "status": "completed" + }, + "tags": [] + }, + "outputs": [ + { + "data": { + "text/plain": [ + "LabelEncoder()" + ] + }, + "execution_count": 42, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "model5.fit(df['property_area'])" + ] + }, + { + "cell_type": "code", + "execution_count": 43, + "metadata": { + "execution": { + "iopub.execute_input": "2020-09-08T03:16:07.194181Z", + "iopub.status.busy": "2020-09-08T03:16:07.193280Z", + "iopub.status.idle": "2020-09-08T03:16:07.196891Z", + "shell.execute_reply": "2020-09-08T03:16:07.196151Z" + }, + "papermill": { + "duration": 0.040125, + "end_time": "2020-09-08T03:16:07.197050", + "exception": false, + "start_time": "2020-09-08T03:16:07.156925", + "status": "completed" + }, + "tags": [] + }, + "outputs": [], + "source": [ + "df['property_area']= model5.transform(df['property_area'])" + ] + }, + { + "cell_type": "markdown", + "execution_count": null, + "metadata": { + "papermill": { + "duration": 0.030197, + "end_time": "2020-09-08T03:16:07.259319", + "exception": false, + "start_time": "2020-09-08T03:16:07.229122", + "status": "completed" + }, + "tags": [] + }, + "source": [ + "###### 3-2-6-loan status" + ] + }, + { + "cell_type": "code", + "execution_count": 44, + "metadata": { + "execution": { + "iopub.execute_input": "2020-09-08T03:16:07.328214Z", + "iopub.status.busy": "2020-09-08T03:16:07.327234Z", + "iopub.status.idle": "2020-09-08T03:16:07.330547Z", + "shell.execute_reply": "2020-09-08T03:16:07.329812Z" + }, + "papermill": { + "duration": 0.039562, + "end_time": "2020-09-08T03:16:07.330672", + "exception": false, + "start_time": "2020-09-08T03:16:07.291110", + "status": "completed" + }, + "tags": [] + }, + "outputs": [], + "source": [ + "model6=LabelEncoder()" + ] + }, + { + "cell_type": "code", + "execution_count": 45, + "metadata": { + "execution": { + "iopub.execute_input": "2020-09-08T03:16:07.399955Z", + "iopub.status.busy": "2020-09-08T03:16:07.398962Z", + "iopub.status.idle": "2020-09-08T03:16:07.403168Z", + "shell.execute_reply": "2020-09-08T03:16:07.403831Z" + }, + "papermill": { + "duration": 0.043225, + "end_time": "2020-09-08T03:16:07.403994", + "exception": false, + "start_time": "2020-09-08T03:16:07.360769", + "status": "completed" + }, + "tags": [] + }, + "outputs": [ + { + "data": { + "text/plain": [ + "LabelEncoder()" + ] + }, + "execution_count": 45, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "model6.fit(df['loan_status'])" + ] + }, + { + "cell_type": "code", + "execution_count": 46, + "metadata": { + "execution": { + "iopub.execute_input": "2020-09-08T03:16:07.474101Z", + "iopub.status.busy": "2020-09-08T03:16:07.472978Z", + "iopub.status.idle": "2020-09-08T03:16:07.476673Z", + "shell.execute_reply": "2020-09-08T03:16:07.475890Z" + }, + "papermill": { + "duration": 0.042488, + "end_time": "2020-09-08T03:16:07.476824", + "exception": false, + "start_time": "2020-09-08T03:16:07.434336", + "status": "completed" + }, + "tags": [] + }, + "outputs": [], + "source": [ + "df['loan_status']= model6.transform(df['loan_status'])" + ] + }, + { + "cell_type": "code", + "execution_count": 47, + "metadata": { + "execution": { + "iopub.execute_input": "2020-09-08T03:16:07.562874Z", + "iopub.status.busy": "2020-09-08T03:16:07.561806Z", + "iopub.status.idle": "2020-09-08T03:16:07.568836Z", + "shell.execute_reply": "2020-09-08T03:16:07.568038Z" + }, + "papermill": { + "duration": 0.059515, + "end_time": "2020-09-08T03:16:07.568966", + "exception": false, + "start_time": "2020-09-08T03:16:07.509451", + "status": "completed" + }, + "scrolled": true, + "tags": [] + }, + "outputs": [ + { + "data": { + "text/html": [ + "
\n", + "\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
loan_idgendermarrieddependentseducationself_employedapplicant_incomeco-applicant_incomeloan_amountloan_amount_termcredit_historyproperty_arealoan_status
0LP0010021000058490.0146.412162360.01.021
1LP0010031110045831508.0128.000000360.01.000
2LP0010051100130000.066.000000360.01.021
3LP0010061101025832358.0120.000000360.01.021
4LP0010081000060000.0141.000000360.01.021
\n", + "
" + ], + "text/plain": [ + " loan_id gender married dependents education self_employed \\\n", + "0 LP001002 1 0 0 0 0 \n", + "1 LP001003 1 1 1 0 0 \n", + "2 LP001005 1 1 0 0 1 \n", + "3 LP001006 1 1 0 1 0 \n", + "4 LP001008 1 0 0 0 0 \n", + "\n", + " applicant_income co-applicant_income loan_amount loan_amount_term \\\n", + "0 5849 0.0 146.412162 360.0 \n", + "1 4583 1508.0 128.000000 360.0 \n", + "2 3000 0.0 66.000000 360.0 \n", + "3 2583 2358.0 120.000000 360.0 \n", + "4 6000 0.0 141.000000 360.0 \n", + "\n", + " credit_history property_area loan_status \n", + "0 1.0 2 1 \n", + "1 1.0 0 0 \n", + "2 1.0 2 1 \n", + "3 1.0 2 1 \n", + "4 1.0 2 1 " + ] + }, + "execution_count": 47, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "df.head()" + ] + }, + { + "cell_type": "code", + "execution_count": 48, + "metadata": { + "execution": { + "iopub.execute_input": "2020-09-08T03:16:07.647936Z", + "iopub.status.busy": "2020-09-08T03:16:07.646703Z", + "iopub.status.idle": "2020-09-08T03:16:08.549734Z", + "shell.execute_reply": "2020-09-08T03:16:08.548510Z" + }, + "papermill": { + "duration": 0.949081, + "end_time": "2020-09-08T03:16:08.549911", + "exception": false, + "start_time": "2020-09-08T03:16:07.600830", + "status": "completed" + }, + "tags": [] + }, + "outputs": [ + { + "data": { + "text/plain": [ + "Text(0.5, 1.0, 'Correlation Matrix for Loan Status')" + ] + }, + "execution_count": 48, + "metadata": {}, + "output_type": "execute_result" + }, + { + "data": { + "image/png": "iVBORw0KGgoAAAANSUhEUgAAAn0AAAI/CAYAAAAC42+qAAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAALEgAACxIB0t1+/AAAADh0RVh0U29mdHdhcmUAbWF0cGxvdGxpYiB2ZXJzaW9uMy4yLjEsIGh0dHA6Ly9tYXRwbG90bGliLm9yZy+j8jraAAAgAElEQVR4nOzdd3gV1dbH8W8SmkBAOgIiiLAAERtFEAsIgr1de8OGSLG/Vuxee+NybdhAuXZFBUFEULGgYqFIWRQF6STUUIIkOe8fMwkn5YQEggnJ7/M853HOzJ49a+ZwL4u1Z8/ERSIRRERERKR0iy/uAERERERk91PSJyIiIlIGKOkTERERKQOU9ImIiIiUAUr6RERERMoAJX0iIiIiZYCSPhHZITPrbWbf7sL+Y83s0qKM6Z9mZo3NbKOZJezEvvXMbJKZpZjZk7sjPhGRHSlX3AGISMGY2QXAjUBLIAWYCvzb3Xc6GdsdzOxe4AB3vyhznbufsJuONQy4FDjN3T+JWv8McB1wmbsPK0A/C4Er3f2LWG3c/S+g6k6G2gdIBqq5+y4/HNXMehPE22VX+9qFGA4EngbaA3HAAuAudx9jZscCI9y9USH6iwDN3X3+7ohXRFTpE9kjmNmNwDPAQ0A9oDHwHHDaTvSV6x97ea3bg8wlSPyArHM5myAJKRJFcH32A2btTMJXgn+bUcB4gj+PdYFrgQ3FGpGI5Kuk/p+JiITMrDpwP0HV6sOoTaPCD2ZWEXgUOCfc9i5wq7tvzay6AEOAG4DxZrYAaAOkAqcCN5rZe8BTwIlABvAacI+7p+cR02DgTKA6MA+43t2/MbNewB1AnJmdDixw94PN7CuCys/LZhYftrkK2Av4DBjo7uvNrAnwJ9AbeACoDDzt7v/O5xKNAi4ysxruvhboBUwHEqPibQa8BBwMRIBxQH93X2dmbxAk0aPMLD281u+GcVwJ3AMsNLNLwnXlgWrhMa5x91FmVpWg8nq/u7+e41oNAy4EImZ2PXA68E1hfi/g4nzOPxsz6wwMBloQJMTXufv34bbLgFuARkAS8Ki7vxhuyzzu08CtQDpwh7u/lscxagNNgZfc/e9w9XfhtirAWKCimW0Mt7UIjzkYaAVsAT4AbnT3v81sUthuWljxu4Lgz0a2amZ0NdDMTgSeAPYlSDafdvcnCnqdRMoiVfpESr5OQCVgZD5t7gSOAA4hSGw6AIOittcHahJUnPqE604D3gf2Bv4HDAfSgAOAQ4HjCZKevEwJj1UTeBN4z8wquftnBNXId9y9qrsfnMe+vcNPV2B/giHT/+Zo0wUw4DjgbjNrlc+5pwKfAOeF3y8BXs/RJg54GGhAkHTsC9wL4O4XA38Bp4QxPxa13zFh+57Rnbn7GuBy4CUzq0uQKE3NmfCFbXsTXN/Hwv6/YOd+rx0ys5rAp8B/gFoESfynZlYrbLIKOJkgab0MeNrMDstx3OpAQ4LE61kzq5HHoVYD84ERZna6mdWLOt9NwAnAsvB8q7r7MoIk8gagNsGf6eOAfuE+R4e7Hxy2f6cAp/sKcLW7JxL8A2ZiAfYRKdNU6RMp+WoBye6elk+bCwmqZasAzOw+4EXgrnB7BkHVbmu4HWCyu38Ufq9G8Bf13u6+BdhkZk8TJBwv5jyYu4+I+vqkmQ0iSNKmFeB8LgSecvc/wmPfDvweVqEy3RfGMc3MphEkRrPz6fN14HEze5MgUbsU6B8V73yCJAUgycyeIqjg7ci9YRKTec2yuPvnYXV0AsFvdFAB+stUqN+rEE4C5rn7G+H3t8zsWuAUYJi7fxrV9msz+xw4Cvg1XLeNoFqZBowJK3UG/BB9EHePmFlX4DbgSaBpONHnCnefl1dg7v5L1NeFZvYiwW/1TCHPMdM2oLWZTQsrvGt3sh+RMkNJn0jJtxqobWbl8kn8GgCLor4vCtdlSnL31Bz7LI5a3o9g2HJ5VHITn6NNFjO7iaAK2IBguLQaQQWnIPKKtRzBvWGZVkQtb2YHEyjc/Vszq0NQLRvt7luik7SwGvcfggQnkeDcCpIk5Hn+UYYCA4CH3H11AfrLtDO/1870m9l3QwAzO4Eg2W1BcA0qAzOi2q7O8Wcs5rV39yUE546Z7UtwLV4nqOLlYmYtCCqP7cLjlgN+yattAZ1F8Hs/YmbTgdvcffIu9CdS6ml4V6Tkm0wwhHl6Pm2WESRumRqH6zLlNYEget1iYCtQ2933Dj/V3P3AnDuZ2VEE93ydA9Rw972B9QRDqLGOtaNY04CVO9hvR0YAN5F7aBeCod0I0NbdqwEXsT1eiB1zzHMJH93yYni8a8zsgELEujO/1870m9n30vC+zw8I7oOrF/5uY8h+HXaKuy8GniUYZoW8438emENwT141wns/8+l2E0FyCICZ1c9xzCnufhrBJJKPCO6LFJF8qNInUsKFExzuJri/Kg34nGBoqzvQ1d1vAd4CBpnZFIK/cO8mSIIKeozl4VDfk2Z2F7CR4Eb9Ru7+dY7miQRJWhJQzsxuI6j0ZVoJ9DCzeHfPyONwbwG3mtnYsI/MewDTcg6hFtJ/CCZITMpjWyJBYrrOzBoC/5dj+0qC+wsL447wv5cTJMGvm9lReU18ycMu/V6hODOrlGPdGGBI+HifdwmqYa2B0UAFoCLBNU8Lq37HA78X8riE9/ldD7wB/EFw/+HlbB8GXgnUMrPq7r4+XJdIMOFio5m1BK4JYyFqn/3ZPgw/DTjQzA4hSBbvjTp+BYIZ2qPD/31sILhnUETyoUqfyB7A3Z8ieEbfIIK/KBcTDK19FDZ5EPiZYEbpDIJ7tB4s5GEuIUgMZhEMfb4P7JNHu3EEszPnEgwdppJ9GPS98L+rzexXcnuVIFmYRDAbNhUYWMhYc3H3Ne4+IcZjUe4DDiNI/D4FPsyx/WGCJGydmd28o2OZ2eEEv8clYZL3KEHydlsBwy2K36szwSzY6M96gokaNxHcFnALcLK7J7t7CsFjVd4l+H0vIJgAszP+BpoAXxAkcr8TVIp7A7j7HILE9o/wmjYAbg6PmUIwkzrnZI17geFh+3PcfS7BTOovCGaI53we5cUE9wZuAPoSVG9FJB9xkcguPydUREREREo4VfpEREREygDd0yciIiJSgpjZqwS3aqxy9zZ5bI8jeNj5iQSz7Hu7e16302SjSp+IiIhIyTKM4O1CsZwANA8/fQhmx++Qkj4RERGREsTdJwFr8mlyGvC6u0fc/QdgbzPLa+JdNkr6RERERPYsDcn+1IQl4bp86Z6+0klTskVEZE+3yw8OLwoZK1oU+d+prY6Ju5rs79Ue6u5DC9FFXtdmh3Eq6RMRERH5B4UJXmGSvJyWAPtGfW9E9rf65ElJn4iIiEgMGeT1YqFdUwT31n0CDDCzt4GOwHp3X76jnZT0iYiIiJQgZvYWcCxQ28yWAPcA5QHc/QWCVy6eSPDaws3AZQXpV2/kKJ30o4qIyJ6uRNzTt3X5/kX+d2rFff4olnPT7F0RERGRMkDDuyIiIiIxZJSiwTMlfSIiIiIx7I6JHMVFw7siIiIiZYAqfSIiIiIxpJeiCa+q9ImIiIiUAar0iYiIiMSgiRwiIiIiZUB6KUr6NLwrIiIiUgYo6SsBzGyYmf2ruOMQERGR7DKIFPmnuCjp2wOZmYblRUREpFCUPBSSmd0FXAgsBpKBX4CRwLNAHYIXH1/l7nPMbBiwAWgH1Aducff3zSwOGAJ0A/4k6v2CZnY48BRQNey/t7svN7OvgO+BI4FPgCd3+8mKiIiUcaXpkS1K+grBzNoBZwGHEly7XwmSvqFAX3efZ2YdgecIEjqAfYAuQEuCZO194AzAgIOAesAs4FUzK0+QDJ7m7klmdi7wb+DysK+93f2Y3X6iIiIiAlCK3sehpK+wugAfu/sWADMbBVQCOgPvmVlmu4pR+3zk7hnALDOrF647GnjL3dOBZWY2MVxvQBtgfNhXArA8qq93iv6UREREpCxQ0lc4cXmsiwfWufshMfbZGmP/vOrFccBMd+8Uo69NOw5RREREiooe2VJ2fQucYmaVzKwqcBLBPXx/mtnZAGYWZ2YH76CfScB5ZpZgZvsAXcP1DtQxs05hX+XN7MDdciYiIiJSpijpKwR3n0JwX9404EPgZ2A9wcSOK8xsGjATOG0HXY0E5gEzgOeBr8P+/wb+BTwa9jWVYOhYREREikF6pOg/xSUuUopmpfwTzKyqu280s8oEFbs+7v5rcceVg35UERHZ0+V1S9U/buGSfYr879QmjZYXy7npnr7CG2pmrQkmcAwvgQmfiIiIFJHSNHtXlb7SST+qiIjs6UpEpW/ekgZF/ndq80bLiuXcdE+fiIiISBmg4V0RERGRGDJK0diZKn0iIiIiZYAqfSIiIiIxpJeMWwuLhJI+ERERkRhKU9Kn4V0RERGRMkCVPhEREZEYMiKq9ImIiIjIHkSVPhEREZEYStM9fUr6RERERGJIL0WDoqXnTEREREQkJlX6RERERGLQRA4RERER2aOo0leKtXjw6eIOgbmDbijuEERERHaaJnKIiIiIlAHpkdIzKFp6zkREREREYlKlT0RERCSGjFJUHys9ZyIiIiIiManSJyIiIhJDaZrIoUqfiIiISBmgSp+IiIhIDKVp9q6SPhEREZEYMjS8KyIiIiJ7ElX6RERERGJIL0X1sdJzJiIiIiISkyp9ZdRR++/HnT2PJSEunvem/s7Q76dk235ci/257pjORCIR0jIiPDT+K35ZvAyAiQMuZ9Pf28jIyCAtI8JZr75ZHKcgIiKy22kihxQJM2sA/Mfd/1WIfYYBo939/Z09bnxcHPec0I3L/vchKzak8MEVFzBh7gIWJK/JajP5z8VMmDsiOGbd2gw+8yR6vTA8a/slb7zH2i2pOxuCiIjIHkFv5JBCM7NyOb+7+7LCJHxFpW2D+ixas47F69azLSODT2c63Vs0y9Zm87ZtWct7lS9PhMg/HaaIiIgUIVX6dsDMmgCfAd8CRwDTgNeA+4C6wIVh02eAvYAtwGXu7mbWGzgJqARUMbPXc3y/nKBq18bMEoBHgGOBisCz7v6imcUBQ4BuwJ+w63PH6yVWZcWGlKzvK1I2cnCD+rna9bBm3NS1CzWrVKbP2x9lrY8Ar15wJhHgnV9n8M5vM3Y1JBERkRIpPaJHtpQ1BwCDgbZAS+ACoAtwM3AHMAc42t0PBe4GHoratxNwqbt3i/E90xXAendvD7QHrjKzpsAZgAEHAVcBnXf1ZOLy+PObVyVvvC+g1wvD6ffeJ1x/7PbDnj/sHc545U2ufGskF7Y7mHaNG+5qSCIiIrKbqdJXMH+6+wwAM5sJTHD3iJnNAJoA1YHhZtacoBBWPmrf8e6+Jp/vmY4H2ppZ5nBvdaA5cDTwlrunA8vMbOKunsyKDRupXy0x63v9xKqsStkUs/3Pfy1l3xrVqbFXJdZuSWXVxqDtms1bGO/zadugPj//tXRXwxIRESlx9MiWsmdr1HJG1PcMgsT5AeBLd28DnEIwfJspZzYVK7uKAwa6+yHhp6m7fx5uK9Ib6mYsW0GTmjVotHc1ysfHc9KBxoS5f2Rr07hG9azl1vXrUiE+gbVbUtmrfDmqVAhy2r3Kl+PIpvsxb1VyUYYnIiJSYmRE4ov8U1xU6Ssa1YHMUlfvnexjHHCNmU10921m1iLscxJwdXg/YF2gK7BLz0hJj0S4/7OJvHL+mSTEx/H+1JnMT17NeYe1BeDtX6fTs2VzTm/bmrT0dFLT0rh+5KcA1K5ShWfPPgWAhPh4Rv0+h2/+WLQr4YiIiMg/QElf0XiMYHj3RmBnh19fJhgq/jWcvJEEnA6MJJjEMQOYC3y9y9ECXy9YyNfPD8u27u1fp2ctvzT5Z16a/HOu/RavW8+pL40oihBERERKvNI0vBsXiehRHKVQBKDFg08XdxzMHXRDcYcgIiJ7phIxbfbN+R2LPFG64IAfi+XcVOkTERERiUGPbBERERGRPYoqfSIiIiIxlKbXsCnpExEREYkhvRgfsVLUSs+ZiIiIiEhMqvSJiIiIxJBRMiYRFwlV+kRERETKAFX6RERERGIoTff0KekTERERiaE0vZGj9JyJiIiIiMSkSp+IiIhIDBml6I0cSvpKMb33VkREZM9kZr2AwUAC8LK7P5Jje3VgBNCYIJ97wt1fy69PDe+KiIiIxJBOfJF/dsTMEoBngROA1sD5ZtY6R7P+wCx3Pxg4FnjSzCrk168qfSIiIiIxZBTP7N0OwHx3/wPAzN4GTgNmRbWJAIlmFgdUBdYAafl1qqSvFGt35VPFHQI/v3xj1nKLh54uxkgCc+/QkLeIiJR4DYHFUd+XAB1ztPkv8AmwDEgEznX3jPw6VdInIiIiEkP6bngjh5n1AfpErRrq7kOjvud10EiO7z2BqUA3oBkw3sy+cfcNsY6rpE9ERETkHxQmeEPzabIE2DfqeyOCil60y4BH3D0CzDezP4GWwE+xOlXSJyIiIhJDMd3TNwVobmZNgaXAecAFOdr8BRwHfGNm9QAD/sivU83eFRERESlB3D0NGACMA2YD77r7TDPra2Z9w2YPAJ3NbAYwAbjV3ZPz61eVPhEREZEYdsc9fQXh7mOAMTnWvRC1vAw4vjB9KukTERERiaGYhnd3i9JzJiIiIiISkyp9IiIiIjGkq9InIiIiInsSVfpEREREYsgopokcu4OSPhEREZEYStPwrpI+odOBTbj5/GOJj4/no29mMHzslGzbe3VsyaUntAdgc+o2HhnxBfOW5PsooEI7av/9uLPHsSTExfPetN8ZOjl7DMc135/rjulMJBIhLSPCQ+O/4pclwcPJEytW5N8n9aBFnVpEIhFu/3Q8U5cuL9L4RERE9nSlOukzs3uBje7+xD983GOBm9395J3c/w53f6hoo8pbfFwct17Yjf5PfcDKtSm8PuhCJk1dwJ/L12S1WZa8nj6PvUvK5q10btOEOy/pQe+H3irSGO7p2Y3L3vqQFRtS+OCyC5gwbwELkrfHMHnhYibMGwGA1anN4DNPoteLwwEY1ONYvlmwkGs/HE35+HgqlS9fZLGJiEjZlhEpPcO7padmWbrc8U8d6MCm9Vm8ah1Lk9eTlp7B5z/N4ZhDmmVrM33BclI2bwVgxh/LqVsjsUhjaNugPovWrmPxuvVsy8jg01lO9+bZY9i8bVvW8l4VyhOJBO+drlKhAu0aN+S9ab8DsC0jg5StW4s0PhERkdKg1FX6zOxO4BJgMZAE/GJmzYBngTrAZuAqd59jZsOAVOBAoB5wo7uPNrME4BHgWKAi8Ky7vxhW8O4FkoE2wC/ARe4eMbNewDPhtl+j4qkCDAEOIrje97r7x2bWGzgVqAw0A0a6+y1m9giwl5lNBWYCfYB3CV62nAA84O7vFNX1qlujKivXpmR9X7V2I2323ydm+9O6tOH73/8sqsMDUC+xKis2bI9hRcpGDm5QP1e7Hi2acVPXLtSsXJk+734EQOO9q7N28xYeOfl4Wtatw8wVK3lw/Fds2ZZWpDGKiEjZlF6K6mOl50wAMzuc4KXEhwJnAu3DTUOBge5+OHAz8FzUbk2AY4CTgBfMrBJwBbDe3duHfVwVvvSYsO/rgdbA/sCR4T4vAacARwHRGcudwMSwr67A42EiCHAIcC5BQniume3r7rcBW9z9EHe/EOgFLHP3g929DfDZrl6nHcmsouV0uO3LaUe1Ycj73xTp8fIqnEfIHcP4uQvo9eJw+r3/Cdcf3RmAhPh4Wtevy5u/Tuf0V//H5m1p9OnUPte+IiIiOyMjElfkn+JS2ip9RxFUzDYDmNknQCWgM/CemWW2qxi1z7vungHMM7M/gJYE77Jra2b/CttUB5oDfwM/ufuSsP+pBEnjRuBPd58Xrh9BUKEj7OtUM7s5/F4JaBwuT3D39eE+s4D9CCqU0WYAT5jZo8Body/SjGvV2o3UixqurVujKknrNuZqd0Cj2tx1aQ+uHfwh6zelFmUIrEjZSP1q22Oon1iVVSmbYrb/efFS9q1RnRp7VWJFSgorNqQwfdkKAMbNmUefTu2KND4REZHSoLQlfUCuElE8sM7dDylg+whB8Wmgu4+L3hAO70bfMJbO9muYd3ks6Ossd/ccfXXMp68s7j43rGCeCDxsZp+7+/0xjlVosxauYN96e9OgdjVWrd3I8R1aMuilbO93pl7NRB7vdyp3vzKWv1auK6pDZ5mxbAVNatSgUfVqrEzZyEmtjRs/HputTeMa1flr7XoAWterS4WEBNZuCZLPFSkbaVqzBn+uWUunJvsyP2oCiIiIyK7IKEWDoqUt6ZsEDAvviytHMNz6IvCnmZ3t7u+ZWRzQ1t2nhfucbWbDgaYEw7UOjAOuMbOJ7r7NzFoAS/M57hygqZk1c/cFwPlR28YBA81sYHjv36Hu/tsOzmObmZUPj90AWOPuI8xsI9C7MBdkR9IzIjz+5pcMuf4sEuLj+OS73/lj2WrOOqYtAB98PZ2rTjmC6lUqceuFx4X7ZHDJg28WXQyRCPd/PpFXzjuThPg43p82k/nJqznv0CCGt3+bTk9rzukHtSYtI53UbWlcP/LTrP0fGPclT5x2AuUT4lmydj23ffp5kcUmIiJSWpSqpM/dfzWzd4CpwCIgcyj0QuB5MxsElAfeBjKTPge+JpjI0dfdU83sZYJh21/DJDEJOD2f46aaWR/gUzNLBr4lmOgB8ADBBI/pYV8LgR09ymVo2P5X4HWC+wAzgG3ANQW5FoXx3Yw/+W5G9skZH3w9PWv5weHjeXD4+KI+bDZfL1jI1wuGZVv39m/bY3jph5956Yef89x39qokznqt6JJQERGRTOml6JEtcbFu2i8Lwtm7o939/eKOpYhFANpd+VRxx8HPL9+YtdzioaeLMZLA3DtuKO4QRESkYEpEtnXD1POKPFF6+pC3i+XcSlWlT0RERKQolaaHM5fppM/dexd3DCIiIlJyZZSid++WnjMRERERkZjKdKVPREREJD/pJePWwiKhSp+IiIhIGaBKn4iIiEgMmsghIiIiUgZoIoeIiIiI7FFU6RMRERGJIUMTOURERERkT6JKn4iIiEgMeveulHT6UUVEZE9XIrKtS3+6osj/Th3e4ZViOTcN74qIiIiUARreFREREYlBz+mTPcJx3R4u7hCYMPH2rOWe7e8rxkgC46bck7XcrccjxRhJYOL424o7BBERKSOU9ImIiIjEoEe2iIiIiMgeRZU+ERERkRh0T5+IiIhIGaB374qIiIjIHkWVPhEREZEYStPwrip9IiIiImWAKn0iIiIiMZSmR7Yo6RMRERGJQcO7IiIiIrJHUaVPREREJIbSVOlT0ldGtW+/P/0HdCc+Pp4xY6by9ls/5GrTf0APOnZsxtbUbTz22GjmzVsJQJUqFbn55hNp0rQOkUiEJx4fw6xZSwsdQ7tOzeh7Uy8S4uMZ+/GvvDv8u1xtrrmpFx2ObE5q6jaevO8j5vsKAG6861Q6dmnBurWbuPq857PaX9K3K52ONiKRCOvWbOKJ+z5iTfLGgl2Tdk0Z0C+8JmOn8dY7ua/JgH7d6dihGalbt/HY458yb/5K9m1Uk7sGnZbVZp/6ezNs+Dd8MPJnjjnauPTiLjRuXJt+A4czd+6Kwl4mERGRIqHh3RjMrLeZ/beI+zzdzFpHfb/fzLoX5TEKIj4+jmuvO57bb3uXyy8bSrdurdlvv1rZ2nTo2IxGDWtwycUv8NRTY7nu+l5Z2wYM6MGUKX9wWe+h9LnqFRYtSt6pGPrfciKDrvsfV53zLF2Pb0PjprWztWnf+QAaNq7JZWcOYfBDoxh420lZ2z4fPZU7rx2Rq9/33/iOay54gX4XvsiP387loiuPKXA81w08ntvueJfLrnyJbl1bs1/j7NekY4f9adiwBhf3fpGnnvmM66/tCcDiJWvo0/c1+vR9jb79hrF16za+/W4uAH8uTOae+0YyfcbiQl0fEREpGTIicUX+KS5K+v5ZpwNZSZ+73+3uX/zTQbRs2YClS9eyfPk60tIy+HLibDp3bpGtzZGdm/P5+N8BmD17GVWrVqRmzSpUrlyBg9ruy5gx0wBIS8tg06athY7BDmzIssVrWLE0iOGr8TPpdEzLbG06HdOSLz6dDsCc35dSJbESNWtVBeD33/4iZcOWXP1u3vR31nKlvSoQiRQsnpa2D0uXrWX5ivWkpWUw8atZdO7cPFubzp2aM/6L3Nck2mGH7sey5etYuWoDAH/9tZrFS9YULAgRESlxSlPSV2aHd83sIuBaoALwI9APuAS4HVgOzAW2hm2HAaPd/f3w+0Z3rxou3wJcDGQAY939NjO7CugT9j0/3H4IcCpwjJkNAs4C7srs18yOA54g+E2mANe4+1YzWwgMB04BygNnu/ucXTn32rWrkhQmJQBJySm0atUgR5vE7G2SUqhdO5H09AzWr9/MLbecxP7N6jJv7gqeffYLUlO3FSqGWnUSSVq5vf/klRto2aZh9hjqJJK0cv32Nqs2UKtuImtW5z9c2/uabnQ/qS2bNm7llr7DCxRP7dqJrEpK2X6s5BRatcx9TVat2t4mKTm4JmvWbMpa1/XY1kz8claBjikiIvJPKpOVPjNrBZwLHOnuhwDpwEXAfcCRQA+iKnL59HMCQfWuo7sfDDwWbvrQ3duH62YDV7j798AnwP+5+yHuviCqn0rAMOBcdz+IIPG7JupQye5+GPA8cPPOn3koLve/MiI5S2J5/EMkEoGEhHiaN6/PJ5/8Rt+rXyM1dRvnnd9pJ0LIK4acjfKOYUeGPT+Ri05+homfzeDUczoUMJ4dHyvvNtsblSsXT+dOB/D117uUk4uISAmSQVyRf4pLmUz6gOOAw4EpZjY1/H4D8JW7J7n738A7BeinO/Cau28GcPfMcbw2ZvaNmc0ALgQO3EE/Bvzp7nPD78OBo6O2fxj+9xegSQHiyldyUgp16lbL+l6ndiKrc0x2yNWmTiKrV6eQlJRCUtIG5sxZBsCkSXNo3rxe4WNYtYE69bb3X7teNVYnp+Rok0KdetW3t6lbjTVJ2dvk58vPZtClW6sCtU1KSqFuncTtx6qdSPLqlNxt6m5vU6d2Iqujqo4d2jdj3vyVrF23udtgdQ8AACAASURBVMAxioiI/FPKatIXBwwPK26HuLsB9wKx6khphNfKzOIIhm0z+8lrn2HAgLBqdx9QqQDx5Cfzprl0imBIfs6cZTRsWIP69atTrlw8Xbu14vvJ87K1+f77eRzfow0ArVo1YNOmraxZs4m1azeRtCqFRvvWBODQw5rs1EQOn7WUho1rUa/B3pQrF8+xPQ7kh0merc0Pk5zuJ7UFoGWbhmzeuHWHQ7sNwrgAjjjaWLywYLHN8eU0bFgz65p0O7Y1kyfPz9bm+8nz6dE99zXJ1K1rKw3tioiUMrqnb883AfjYzJ5291VmVhP4DRhsZrWADcDZwLSw/UKCyuC7wGkE99YBfA7cbWZvuvtmM6sZVvsSgeVmVp6g0pf5PJOUcFtOc4AmZnaAu2feA/h10Z7ydhkZEYYMGc+jj55HfEIcY8dOZ9HCZE4+5VAARo/6jR9/XEDHjs14Y0RfUlO38fhjn2btP2TI59xxx6mUL5fA8uXreCxqW4FjSI/w7GNjeOg/FxGfEMfnn0xl0R9JnHTm4QB8+uEv/PTdPNof2ZzXRg5ka+o2nrz/46z9b3vwTNoe3oTqe1dmxOgbeGPoV4z75DeuGHAcjfarTUZGhFUr1vGfhwsWW0ZGhCH//ZxHHz6XhPg4xo6bzsJFyZxy8iEAjBo9lR9/WkDHjvszYvjVwSNbnhiTtX/FiuU4/PCmPP3MuGz9djmyBQP7d6d69co89ODZLFiwkltvf7fQ10tERGRXxeW6l6uMMLNzCSZtxAPbgP5AK7ZP5JgKJLj7ADOrB3wctp0ADIyayHEbwQSQv4Ex7n6HmV0D3AIsAmYAie7e28yOBF4iqNz9i4JP5Gjn7slm1g54wt2P3cHpRQCO6/bwLl6lXTdh4u1Zyz3b31eMkQTGTbkna7lbj0eKMZLAxPG3FXcIIiIlVYl4KnKPr24o8kRp/LFPF8u5ldmkr5RT0heDkj4RkT1GiUj6jvvyxiJPlCZ0fapYzq2s3tMnIiIiUqaU1Xv6RERERHaoNL17V5U+ERERkTJAlT4RERGRGCKlqNKnpE9EREQkhuJ8g0ZR0/CuiIiISBmgSp+IiIhIDJrIISIiIiJ7FFX6RERERGLQRA4RERGRMkDDuyIiIiKyR9G7d0sn/agiIrKnKxEltiPG3V7kf6f+0PNhvXtXRERERHYP3dMnIiIiEkNpuqdPSV8p1uugO4s7BD6b8e+s5V4H31WMkQQ+m/ZA1vJx3R4uxkgCEybenrXcq+2gYoxku8+mP1jcIYiIlHlm1gsYDCQAL7v7I3m0ORZ4BigPJLv7Mfn1qeFdERERkRgikaL/7IiZJQDPAicArYHzzax1jjZ7A88Bp7r7gcDZO+pXlT4RERGRGIrp3bsdgPnu/geAmb0NnAbMimpzAfChu/8F4O6rdtSpkj4RERGRf5CZ9QH6RK0a6u5Do743BBZHfV8CdMzRTQugvJl9BSQCg9399fyOq6RPREREJIbd8UaOMMEbmk+TvA6ac2C4HHA4cBywFzDZzH5w97mxOlXSJyIiIlKyLAH2jfreCFiWR5tkd98EbDKzScDBgJI+ERERkcIqpke2TAGam1lTYClwHsE9fNE+Bv5rZuWACgTDv0/n16lm74qIiIjEUByzd909DRgAjANmA++6+0wz62tmfcM2s4HPgOnATwSPdfk9v35V6RMREREpYdx9DDAmx7oXcnx/HHi8oH0q6RMRERGJYXdM5CguGt4VERERKQNU6RMRERGJoTRV+pT0lWHX3HYS7Y8ytqZu48lBHzB/ds7Z4FCvYQ1uf+xcEqvvxfzZy3j89vdJS0un60kHc87lRwOwZfNWhjzwCX/OXVH4GG49kfZdWgQx3PUh8+cszyOGvbn90XNIrFaZ+XOW8fgdH5CWlk6jJrW56f4zaNaqAcOHfMEHr38HQPkK5XjitSsoX74cCeXi+Wb8TEY8P7FQcbVvvz/9B3QnPj6eMWOm8vZbP+Rq039ADzp2bMbW1G089tho5s1bCUCVKhW5+eYTadK0DpFIhCceH8OsWUsLfW0Arrn1JNoflXl9PmD+7LyuTw1uf+wcEqvtxfzZy3n8jve3X58Hzgyvz3g+GP5d1j7Dx97E5s1byUiPkJ6ewbXnP79T8YmIlHbFNHt3t9DwbhnV/qgWNNivNpef9BSD7/uIAYNOzbPdFTf0ZOQb33HFyU+zcUMqPc88HIAVS9byf5e9xDVnDeHNF7/iuntOL3wMXZrToHEtLj/lGQbf/zEDBp2SdwzX9WTkiMlcceozbNywhZ5nHAZAyoYtPP/omGzJDMC2v9O49crX6HfOs/Q751naHXkALQ9qVOC44uPjuPa647n9tne5/LKhdOvWmv32q5WtTYeOzWjUsAaXXPwCTz01luuu75W1bcCAHkyZ8geX9R5Kn6teYdGi5AIfO1r7Li1osF8tLj/5aQbfn89vdP3xjHzje644Jbw+4W+UsmELzz/yKR8M/zbP/W694lX6n/OsEj4RkTKi1CR9ZjbMzP4VLh9lZjPNbKqZ7fUPxtDEzPKdLl0Ex/jKzNrtaj+durZiwie/ATBn+mKqJlaiZu3EXO0O7rA/34yfCcAXn/xK527B+55nT/uLjRtSw/3/ona96jsXw6ipQR8zllA1cS9q1q6aRwxNo2KYSudurQBYv2YTc2cuJT0tPdc+qVv+BqBcuQTKlUvI9Rjz/LRs2YClS9eyfPk60tIy+HLibDp3bpGtzZGdm/P5+OCnnj17GVWrVqRmzSpUrlyBg9ruy5gx0wBIS8tg06athTj6dtmuz/Ql4W+U1/WJ/o1+o3PXnNcnY6eOLyIixfPIlt2ltA7vXgg84e6vFXcgJVWtutVIWrE+63vSyg3UqluNNckpWeuq7V2ZTSmpZKQHSUPSiqBNTj3PaMfP38Z8AHj+MayMjmF9GMPG2DGEbXYkPj6OIW9dQ4PGNRn1zk/4jCUFjqt27aokrdqwPa7kFFq1apCjTWL2Nkkp1K6dSHp6BuvXb+aWW05i/2Z1mTd3Bc8++wWpqdsKfPxMteomxviN8rs+G6hVb8fXJwI89GJvIpEIY96bwtgPfi50fCIismcp0UmfmVUB3iV4/UgC8AAwH3gKqAokA73dfXnUPlcC5wA9zay7u18Yo+//C9tVBEa6+z1m1oTgQYffAkcA04DXgPuAusCF7v6Tmd0LNCN4IfK+wGPu/lKO/isBzwPtgDTgRnf/0sy+AQa6+9Sw3XfANcACYAhwEMHvcq+7fxxWKl8DWhM8oLFIKpdxcbnvUYjkqIfl0SRXm7btm9LzzMO56ZL8XiEYI4Y81uX8F1CeMRTgX0kZGRH6n/scVRIrcffT57PfAXVZNH9VAQPL49rkCizvuBIS4mnevD5D/jOeOXOW0b9/d847vxPDXptUsGNnCyOvOHYYau5Y83DjJUNZk5RC9ZpVePjF3ixemMzvvywsdIwiIqWdJnL8c3oBy9z9JAAzqw6MBU5z9yQzOxf4N3B55g7u/rKZdQFGu/v7eXVqZscDzYEOBH99f2JmRwN/AQcAZwN9CF6DcgHQBTgVuAPIvHmtLUFiWAX4zcw+zXGY/mE8B5lZS+BzM2sBvAz0Bq4Pv1d09+lm9hAw0d0vN7O9gZ/M7AvgamCzu7c1s7bAr4W/jIFTzutIr7PaAzD39yXUqb99SLZOvWqsWZWSrf36tZupkliJ+IR4MtIzqFM/e5umLepx/X1ncNc1w0lZv6VgMZzbgV5nBqPTc2cupU696BiqsyZpQ7b2uWLIo01+NqWkMn3KQtp1bl7gpC85KYU6UdXEOrUTWR1VXcuzTZ1EVq9OIRKBpKQNzJkTTIqZNGkO553fqcDxnnJuR3qdFXV9cv5GO7w+uX/HvKxJCtqsX7OJ7yfOxto0VNInIpKH0pT0lfR7+mYA3c3sUTM7iqCq1gYYb2ZTgUEEVcDCOj78/EaQRLUkSAIB/nT3Ge6eAcwEJrh7JIylSVQfH7v7FndPBr4kSCCjdQHeAHD3OcAioAXwHnCymZUnSFaHRcV0W3heXwGVgMbA0cCIsJ/pBK9b2Smj3v6R/mf/l/5n/5fJE2dz3KmHAtCy7b5s2rg129BupulT/uCoHgcC0P3Uw5j85WwA6tSvzl1PX8jjt7/P0kWrCx7DOz/R/9zn6H/uc0z+cjbHnXJIEMNBjdi0MTXb0OX2GP6MiuEQJn85J99jVK9RmSqJlQCoULEchx6xP4sXJhU4xjlzltGwYQ3q169OuXLxdO3Wiu8nz8vW5vvv53F8jzYAtGrVgE2btrJmzSbWrt1E0qoUGu1bE4BDD2tSqIkco975kf7nPEv/c55l8sRZ269P20ZsStlagOtzKJO/mp3vMSruVZ69KlfIWj6s0wEsLGgVVERE9lglutLn7nPN7HDgROBhYDww090LXjrJWxzwsLu/GL0yHN6Nvus+I+p7BtmvV84xtJzf8/yngbtvNrPxwGkEw8vtotqf5e6eI6a8+t5lP33jtD+6Ba+OuZGtqdt4atCHWdvuf+4SnrlnJGuSUnjl6XHc/th5XDqwBwvmLGPch8G9Xxf27Ubi3pWzZpSmp2dw7XnPFTKGubTv0oJXR98QxHB3VAz/vZhn7vsoiOGZz7n9sXO4tP9xLJiznHEjfwGgRq2q/OetvlSuUpFIRoTTL+rE1WcMoWbtRG568CwS4uOIi49j0ue/89Okgt9zmJERYciQ8Tz66HnEJ8Qxdux0Fi1M5uRTgiR59Kjf+PHHBXTs2Iw3RvQlNXUbjz+2vdA7ZMjn3HHHqZQvl8Dy5et47LGcReBCXJ+jWvDqpzeyNfVvnror6vo8ezHP3PtR1G90LpcO6B5cnw+jrs/b10Rdn85cffp/qLZ3Ze5+Jnhvd0JCPF+Onc4v383LMwYRkbKuGOddFLm4gtz/U1zMrAGwxt1Tzex0giHXFsDF7j45rJa1CF9CPIxwSDd6OUa/xxPcH3icu280s4bANqByuF+bsF10n00yt4X39J1O1PBuuFwhqs2NwIHufkU4jDs+jHVrmMiOAr5x93PDYz0EVCO43y9iZoe6+29hP63d/UozawNMBY5w9/zuvI8A9DrozkJd793hsxn/zlrudfBdxRhJ4LNpD2QtH9ft4WKMJDBh4u1Zy73aDirGSLb7bPqDxR2CiAjEKJ780+zD+4s8UfIz7y6Wcyvpw7sHEdzbNhW4E7gb+BfwqJlNI0iAOhe2U3f/HHgTmGxmM4D3gdzPK8nfT8CnwA/AA+6e88nGzwEJYf/vEEw42Roe/xdgA8EEjUwPAOWB6eFjXzKzk+eBqmY2HbglPK6IiIj8AyKRuCL/FJeSPrw7DhiXx6aj82jbO6/lfPoeDAzOY1ObGH0ujN4GzHX3Pjn6zGrj7qkEEzZyCSuY8cDnUftuIZi0kTPOLcB5+Z+NiIiISP5KeqWv1DGzS4AfgTvDySIiIiJSUkV2w6eYlOhK364ys4MIZ9BG2eruHXelX3e/dxf2fR14fVeOLyIiIv+M0vTIllKd9Ln7DOCQ4o5DREREpLiV6qRPREREZFeU4IecFJru6RMREREpA1TpExEREYlB9/SJiIiIlAWlKOnT8K6IiIhIGaBKn4iIiEgMmsghIiIiInsUVfpEREREYilFlb64SGmqW0om/agiIrKnKxEzKJr+7+Ei/zv1zwtvL5Zz0/CuiIiISBmg4V0RERGRWErR2JmSvlKs+9H/Lu4Q+GLSnVnLPTo/WIyRBMZ/Pyhr+ajTHy/GSALffPR/Wcs997q4GCPZbtyWN7KWj7joqWKMJPDDiBuLOwQRkVJBSZ+IiIhIDKXpjRy6p09ERESkDFClT0RERCQW3dMnIiIiUhZoeFdERERE9iCq9ImIiIjEUoqGd1XpExERESkDVOkTERERiaUUVfqU9ImIiIjEouf0iYiIiMieRJU+ERERkRgiGt6VPVH7DvvT79rjiY+PY+ynU3n7f5Nztel/7fF0OKIZW7du47GHRzN/7oqsbfHxcTw39HKSk1MYdNu7APS5phtHdG5OWlo6y5au4/FHRrFp49YCxdOu4/70u74n8QlxjB01lXfe+D5Xm343HE+HTgewNXUbjz84ivlzV1C+QgJPPXcJ5cuXIyEhnm++nM3rr0wC4Oiurbj4iqNp3KQ2A698lblzlu/MpaLDoU247srjiI+PY/T46fzvw5+ybW/csCa3DzyBFs3q8tKIb3n74ylZ224b0IvO7fZn7frNXHrdsJ06fizXPHkxHXoeTOrmrTzZZyjzpy7K1ebUvt05Y0AvGjSrx9mNrmHD6o3Ztrc4vCnPfH0vD138X74dOSXX/gV1RNsm3HDxscTHx/PJVzN4Y1T2vvbbpwaD+vTEmtTlhfe+480xvwDQeJ8aPDjgpKx2DetWZ+j73/POuN92OhYREdmxPWJ418x6m9l/w+W+ZnbJbui/wQ7avGxmrYvyuP+k+Pg4Bt7Qizv+722uuORFuh53II33q52tTYcjmtGwUU0uveB5nn58DNfd2Cvb9jP+1Z6/FiVnW/fLz39yZe+h9LnsZZYsWc35F3UueDw3n8AdN73FlRe8QNfuB9K4SY54OgXx9D7nOZ55dAzX/t8JAGz7O53/GziCvpe+RN9LX6LdEc1odWBDABb+sYr77niPGVP/KtT1yRnbjVf34Ob73+figa/S/ahWNGlUK1ubDRtTGfzyBN7+KHfSNHbi79x8//s7ffxY2vc8mIbN6nFZm5sZPOBVBv7nsjzbzZw8j9tOfIQVi5JybYuPj+OKB8/jl/EzdimW+Lg4br60Gzc8NpLzbxnG8Ue0pEmDmtnabNiUylNvfJmV7GX6a/laLrlzBJfcOYLeg/5H6tY0vv55/i7FIyKy20R2w6eY7BFJXzR3f8HdXy/ibnsD+SZ97n6lu88q4uP+Y6xVA5YtXcPy5etIS8vgqwmzOLJLi2xtOndpwfhx0wGYPWsZVatWomatqgDUrpNIx04HMObTqdn2+WXKn2SkB3+CZ89cRp061QoWT+sGLFuyhhXLwni+mEnno7LH0+ko44vPZoR9L80WT+qWbQCUKxdPuXLxRML6+1+LVrPkrzUFvi55adV8H5YuX8vyletJS8tgwrdz6NLxgGxt1q3fzJz5K0hLz8i1/7RZS9iwMXWXYshLp5MP44s3vwVgzk8LqFK9MjXrV8/VbsG0Raz8KznXeoDT+h3Ptx9NYV3Shl2KpXWz+ixZuY5lSetJS89g/A9zOPrwZtnarN2whdl/rMzzGmVqd2Bjlq5ax4rVKbsUj4jIbhOJK/pPMdntw7tm9hGwL1AJGOzuQ81sI/Ai0BVYC5zn7klm9hUwFegAVAMud/efcvR3L7DR3Z8wswOAF4A6QDpwNrAS+BioAZQHBrn7x2bWBBgLfAt0BpYCpwEnAe2A/5nZFqCTu2/J4zy+Am5295/D+AcDJwNbgNPcfaWZ1Qvj2T/c7Rp3/97MbgQuD9e97O7PhPF8FsZzBDANeA24D6gLXOjuP5lZFWAIcBDB73Wvu39c4B8gVLt2IqtWbf+LNSlpAy1bN8zVJmnVhmxtatdOZM3qjfQb2IOXnp9I5coVYh6j14kH89XEguXFteskkrRy+7GSk1Jo2bpBrjarsrXZQO06QTzx8XE89+oVNGhUk08+/Jk5s5YV6LgFUadmVVYlR12r1Sm0ar5PkfW/s2o3qEHSku0JbfLSNdRqUJM1K9YXaP9aDWrQ+dR23NrrIVocvv+Od8hHnRpVWbVm+zVatWYjBzYr/DXq0cn4fLLvUiwiIlIw/0Sl73J3P5wgsbrWzGoBVYBf3f0w4Gvgnqj2Vdy9M9APeHUHff8PeNbdDyZI5JYDqcAZYd9dgSfNLDOtbh62PxBYB5zl7u8DPxMkWYfklfDloQrwQ3jcScBV4fr/AF+H6w8DZprZ4cBlQEeC5O4qMzs0bH8AQfLYFmgJXAB0AW4G7gjb3AlMdPf24fk8HiaChRKX1z8sctydGpdHo0gkQsdOB7Bu7WbmRd3fl9MFFx9JenoGE8b/XrB48niXYc6bZfOKObOil5ERoW/vlzn/9MFYqwY02b9OgY5bwOBKphi/T0H1ffwiXhn0NhkZuz62kOefp0KOWZRLiOeow5ox8ce5uxyPiMjuEhcp+k9x+ScmclxrZmeEy/sSJF4ZwDvhuhHAh1Ht3wJw90lmVs3M9s6rUzNLBBq6+8iwfWq4vjzwkJkdHR6nIVAv3O1Pd88cn/wFaLKT5/Q3MDqqnx7hcjfgkjCedGC9mXUBRrr7pjC+D4GjgE/CeGaE62cCE9w9YmYzomI7HjjVzG4Ov1cCGgOzCxNwUlIKdesmZn2vU6caq5M35mizgTp1q2Vvs3ojRx/bkk5HNqfDEc2oUKEclatU5LZBp/LIg58A0KPXQRzR6QD+74b/FSKeDdSpt/1Ytesksjo5+xBf0qoU6tarxsysNrlj3rRxK9N+W0S7js1Y+Efue9h2RtLqjdStHXWtaiWSvGZjPnvsPqdc3Z0TLjsWgLm//EGdRtvvm6vdsCZrlq8tcF8tDmvK7a/3B6B6rUQ69DyY9LQMJo/6ZQd75rZqzUbq1tx+jerWrErS2sJdo04HN8UXrmTNhs2FPr6IiBTebq30mdmxQHeCIdODgd8IkpacIjGW8/qeKVY95kKC4d7D3f0QguHezGNGTytNZ+eT3m3unhnXjvrJr24UHU9G1PeMqD7jCCqSh4Sfxu5eqIQPwOcso2GjmtTfpzrlysVz7HGt+f677BWWyd/Oo0fPtgC0at2ATZu2smb1Rl4Z+hXn/2sIF537LP++byRTf12YlfC177A/513Qibtuf4+tW9MKHs/szHj2DuLpfiCTv80Zz1y69zooiOfAhmzalMqa1RupvndlqlStCECFCuU4rF1TFi/K+x62nTFn3nIa7VODfeoG1+q4Li359qfimWgw6sUv6HfEIPodMYjvR/1C9wu6ANCyQzM2b9hc4KFdgEtb3cilLYPPNyOnMOT6YTuV8AHM/mMF+9bfm33qVKNcQjw9jmjJN7/+Uag+jtfQrojsCUrRRI7dXemrDqx1981m1pJgeBOCZPNfwNsEQ5rfRu1zLvBlWCFb7+7rzSxXx+6+wcyWmNnp7v6RmVUEEsJjrnL3bWbWFdivAHGmAIk7bLVjE4BrgGfMLIFgGHgSMMzMHiFI4M4ALi5En+OAgWY2MKwCHuruhX62RUZ6hCHPjOORJ84nPj6ez8ZMY9HCZE4+9TAARn/yKz/+MJ8OnZrx+lv92Lp1G48/PHoHvcKA63tSvkI5Hn3qAgBmz1rK4CfHFiie/z71GQ8/fT7xCfGMGz2VRX8mc/LpYTwf/cpP38+nY6cDGP5ef7ambuOJf48CoGatqtxy16nEx8cRFx/HpAmz+fH7ICk78mij/409qb53ZR584lwWzFvJ7Te8VahrlZ4R4emXvuDJe/5FfEI8n34xg4WLV3Naz4MB+HjcNGruXYWXnriYKpUrkBGJcPYph3PxwFfZvOVv7rnxZA5tsy/Vq+3FBy/35dW3v+PTL3ZttizAT59No33PQ3ht5hNs3fw3T179Uta2B0bezNP9XmbN8nWc1u94zr7xJGrWq84LUx7ip8+m8Uy/V3b5+NHSMyI8MfxLBt9yVvBYm69/58+lqzmjW/CPhpETp/P/7N13eBTFH8fxdy6hppBOb1KG3kMTQTooUkQQRZAiChJBBBRQEFGx0JsoIoIg/lSQLr1JlSYllMFEkJoOKYQAKb8/9rj05AjBg/B9PQ8Pe7uzu5+b21wmM1vcCxVk4cc9cSyQl4SERHq0q0OP9xYRc/M2+fI6UL9aaT5fsCVHcwkhhMjYg270bQAGKqWOAxrYb55/A6iqlDoMRGA09O66ppTai/lCjiy23wv4Rik1AbiDcSHHj8AapdQhjItCzliRcyHwdWYXclhpKDBPKdUfowdwkNZ6n1JqIXD3gpT5Wuu/zBdyWONjYDpw3Hxu4nmMC0ju2YH9ARzYH5Bi3trVR1K8njVtY6bbOHb0AseS3Q7l1ZfnZieKkWdfAAf2pVx/7cpUeaZsSLPeuYBgBvWZn+429/yh2fPH/fce7T98jv2HUzaUVm08ZpkOv36Drq99ne66H03NurGcXXOGLUp3/tguky3Tq77axKqvNmW6nSmvz7vvLPuOnWPfsXMp5q3YdtwyHR4RQ8ch36ZeDYBbt+NoOyj7x44QQvxnctFj2Ozu5UTwnKKUitZaO6UzfwfmK2T/81C5SyJAq6af2joHW/543zLduvEnNkxi2Lz3A8v0U50n2TCJYdfKkZbptgXupQP4wdl4c7FluuErU22YxLB/yTu2jiCEsI2HorVV5uvJOd5QOj9whE3e2yN3nz4hhBBCCHHvbPIYtvR6+czzn/6Po6ShlFoBlE01+z2tdebjnkIIIYTIfeTZu7mX1rpL1qWEEEIIIR4t0ugTQgghhMiI9PQJIYQQQjwGctHVu3IhhxBCCCHEY0B6+oQQQgghMmDLZ+XmNOnpE0IIIYR4DEhPnxBCCCFERqSnTwghhBBCPEqk0SeEEEII8RiwybN3xQMnH6oQQohH3UNxr5QnZk7J8d+p/wwZLs/eFUIIIYQQD4ZcyCGEEEIIkZFcdHNmafTlYg17TrF1BPb/ONwy3bTTJBsmMfyxaqRlul3V922YxLDh5KeW6fYlh9owSZL1F2dYph+6OvIaaMMkhvUhX9s6ghBCZIs0+oQQQgghMmKjs+SVUu2AGYA9MF9r/XkG5XyA/cCLWutlmW1TzukTQgghhMhI4gP4lwWllD0wB2gPVAFeUkpVyaDcF8BGa96KNPqEEEIIIR4u9QF/rfU/WuvbwP+ATumUewtYDgRbs1Fp9AkhhBBCZMAuMef/WaE4cDHZ60vmeRZKqeJAF8DqE43lnD4hhBBCiP+QUup14PVks+Zprecle53eJcOpm4vTeNSgMAAAIABJREFUgfe01vFKKav2K40+IYQQQoiMPIALOcwNvHmZFLkElEz2ugRwJVWZesD/zA0+T+AZpVSc1nplRhuVRp8QQgghREZsc/XuQaCCUqoscBnoAbycvIDWuuzdaaXUQmBtZg0+kHP6hBBCCCEeKlrrOMAX46rc08AvWuuTSqmBSqls37BUevqEEEIIITJg5YUXOU5r/Tvwe6p56V60obXuY802padPCCGEEOIxID19QgghhBAZkWfvikddwxplGNarOSaTHat3+LF4zYEUy0sXdeeDN9qiynjz9S97WPr7Icsyp4L5GDOgDU+U8ITERD6ZtxE//6v3lad+7TIMGdASk8mOdZuP8+PylHlKFXdn1JD2VCznzfwlu/nfyoOWZe+91Y7G9Z7gWkQMfYYsvK8cg0Y/i09Txa2bd5jy/nL8T6e+WAoKF3dj9OQXcS5UAP9TV5g0ehlxd+Jp/mxNuvdvCsDNmFvM+ng153QgefI6MPmHAeTJa4+9vYldm06yZM5Wq/IM/Oh5fFpUMfK88yMBfpfS5inpzqg5r+Ls6oi/30UmD11C3J14ur7RguZd6gJg72BPyfKF6VHrfaKvx7Bw7zhibtwiIT6B+PgEhj5r/XOaH0QdASzaNMLIlJBIfFwCQ178yupM6Rk4sTs+rapxK+Y2U4YsIuD4xTRlnuv/NJ3faEGxst68qIYTGX7jvvYphMiFbDS8+yBIo+8xZLKzY0Sflgz5bBnB4VF8/3FPdh3x5/zlcEuZyBs3mfrDNprVLZ9m/WG9mrP/2HnGzFiDg72J/Pny3F8ekx3D3mjNOx/+QkhYFPMm92L3gQD+vRiWlCc6lpnfbqVJw7R5Nmz1Y8W6I4x5+5n7yuHzVEWKlfakX/upVKpREt9xHXn7pbSnT/R/py0rftjDzvUneGtcJ9o+X5d1Px8g8PI1Rvb5lujIWOo1qcjQ8Z15+6WvuXM7jvf6fUdszG3sHUxMWfw6h3ad5Uw6jZAUeZpXoVhZL/o/9QmVapfGd2I3hnWclqZcv9EdWTl/BztX/4XvxO607dGQdYv3sPybbSz/ZhsADVpVpfNrTxN9Pcay3qjus4m8dm+NnAdVR3e91/c7IpNlzC6fVtUo9oQ3/euPo1Ldsvh++TLD2n2RptypAwH8uekEX6585773KYQQD7tH4pw+pVQZpZSfebqeUmpmDm//aaVU4yzKDFRK9c7J/dpKlXJFuBR0nSshEcTFJ7B5v6ZpqsbdtcibnP4niLj4hBTzCxbIS+1KJVi94wQAcfEJRMfcuq88lSsU5XLgNa4GRRAXl8DWXWdoUj9lnusRMZzxDyQ+LiHN+sdOXSIyOva+MgA0alGZrav/AuDM8Ys4OefH3dM5TbmaDZ5g16aTAGxZdYTGLY3HIZ4+eoHoyFjz+hfwLFzIsk5szG0AHBzscXCwJzEx6z8dG7apxtblRo/mmb/+xcmlAG7eLmnzPFmBXeuOGXmWHaBR2+ppyjTrVJedq45kuc+sPMg6ykkN29Vg68/7jf0cPodToQK4FU5bdwEnLhKc7I8LIYRIzUZP5HggHrmePq31IeBQlgXvzdNANLA3k/1a/ZiTh52XuxPBYVGW18HhUVQtV9SqdYt7F+JaVAxj32hL+VLe6HNBTF28jdhbcdnO4+nhRHBoUp6QsCiqVLQuT07y8HYhJDAiKUdQJB6FXQhPls3FtSA3omJJMDeGQ4Ii8UinIdb2+Xoc2nXW8tpksmPWr4MpVsqdNT/9iT6Rdpg2TZ4iroReuW55HXo1As8ihbgWHJmUx82RG5E3LXlCr17Ho4hriu3ky5+Hek9X4quxyyzzEhPh0x8HkZgI63/cw/ql+7LMAw+2jhITE5n4bV8SExP5/deDrP/1YJp1rOVR1JXQK9csr0OvXMeziCvXgiIzWUsIIXI3qxp95h6uERgj28eBD4AFgBcQAvTVWl9IZ71xwHNAAYwG1Rta60Sl1A7gKMYDhV2AflrrA0qp8UA5jOfLlQS+1Fp/m2qbTwMjtNYdlFJOwCyMu1InAh9prZcrpeYCPub9LtNaf2he9zywyJwpD9ANiAUGAvFKqVeAt7TWu9J5L+OBaK31ZHP+P4HmgCvQX2u9SyllD3wBtDXn+VZrPUsp1RKYbK7vg8AgrfUtc56l5u3kwXgky2dAeWDS3YamUmok0B3IB6y4+36yyy69p7tY+ZeHvcmEKlOYqYu2cTIgkGG9mtP7ufrMW5Zhe9mKPOnEscFfQnZ2aZOk7pFLp0iaMjXql6Xt83UZ3ivpZusJCYkM7jobR+f8jJvZk9LlvfnXP/PnY1uzL2vKNGhdjVMHz6UY2h3+/HTCgyIp5OHExKVvcjEgGL8/AzLNY+zvwdXRO6/MIzwkikLujnw2vy8X/wnB7/D5LDNZnzNbmxJCPO5y0XdHlsO7SqmqwPtAC611TWAoMBv4QWtdA/gRyGi4dbbW2kdrXQ2jAdYh2TJHrXVj4E2MBuRdNYBngUbAOKVUsUzijQUitNbVzVm2mee/r7WuZ95WM6VUjWTrhGqt6wBzMRqP5zEeVjxNa10rvQZfBhy01vWBt4G7jbDXgbJA7bt1o5TKDywEXtRaV8do+A1Ktp2LWutGwC5zuReAhsAEAKVUG6ACRgO5FlBXKdXUyozpCg6PwtsjaUjO292ZkOvRVq8bEh7FyQDj5PttB86iyhS+nziEhEXjnWyI0MvDmdBw6/Lcr+deasCc5b7MWe5LWEgkXkWShhu9CrsQHhyVonzEtRgcnfNjsjcllQlJKlO2YmHe/qgLH721hKiIm2n2dyMqluMHzlGvScV083R4tQmzN4xk9oaRhAVF4FksqdfOs2ghwlL1VEWE38DRpYAlj2dRV8KDIlKUadaxDjtWpxzaDTdvJyIsmr0bjqNqlUq/gvjv6uhumYjwG+zdcgpVvUSGmdLToV8zZm9/n9nb3ycsMALPYm6WZZ7FXAkLup7J2kIIkftZc05fC4zeslAArXU4RoNsqXn5YqBJBus2V0r9qZQ6Yd5O1WTLfjJv7w/ARSl197fbKq31TfP+tmM0djLSCphz94XW+u54Tnel1BHgL/M+qyRb5zfz/4eBMplsOyvpbacV8LX5Ttp360oB57TWd8exFgHJG22rzf+fAP7UWkdprUOAWHOdtDH/+ws4AlTCaARm2+l/AilZxJWiXi442Jto3VCx63DWvTwA4RExBIVFUaqo8QvVp2opzl2+v3Oizvx9lRJF3SjqXQgHBxMtn6rEngP+97VNa6356U8Gd53N4K6z2bf1NC071gagUo2S3Ii+lWLY8q7jB/7hqTbGodyqUx32bTsNgFfRQoyd0ZNJo5dx+d+kOinkVhBH5/wA5M3nQO1G5bh4LiTdPGsX7ca33SR8201i38YTtOzqY+SpXZobUbEphnYtefb+zVPP1jTyvFCffZv8LMsKOuenesNy7Nt4wjIvX4G8FHDMZ5mu07QS53XGV1//F3WUr0AeChTMa5mu07g85/2DMsyUnrULduLb/FN8m3/KvvVHafliQyNn3bLciIyVoV0hRLY8buf02ZF152YigFJqI1AY45w7X+AroJ7W+qJ5eDR/6nXSeZ3RfKuymZ9TNwLw0VpfMz+PLvl+7151EM/9ndOY3nbSq6usbvBzdzsJyabvvnYwr/+Z1vqb7EdNKT4hkckLtzHjva6YTCbW7vTj3OUwurQ0OkRXbD2Oe6GCLPzkFRwL5CUhIZEe7evQ492FxNy8zZQftvHRm8+Qx8Gey8ERfPLNhvvOM33eFiaPfwGTycTvW09w/mIYHdsZDZnVG47h7urIvCm9cCxo5Hnhubr09l1AzM3bjBvegdrVSlLIpQDLvhvI9z/tYd2WE1nsNa0Df2h8mlZkwfp3uBV7h6kf/GZZNmFub6aPW0F4SBTfTd3I6Mk9eHVIawJOX2HjcuMU054DW+BcqCC+Yzsa78t82xF3L2eGT3wBe5MJO5Mdf2w8wYGdOss8B7edwqdFFRbsHkvszdtMG77UsmzCojeY/u5PhAdFsuCzNYya8yq9Rz5LgN8lNv0v6fy8xu1qcOQPza2bty3z3LycGfttfwDs7U3sWHWYwzvO2LSO3DycGDezpyXT9nXHObz7b6sypefgZj98WlVjwYGPjbobsigp50++TH97MeFBEXQc0Jxuvm1w83bhq51jObjFjxnDlmR7v0KIXCgXDe/aZXUVoXl4dwXQSGsdppRyxxiG/FVrvVgp1QfopLXukmo9V0Bj9ILZA/sxegzHm8+JO6O1HqiUagLM1VpXNzcMO2MMbzpi9G41BPJiPEi4Wqpz+j4H8mut3zbv0w0oBfwA1MY45/A48J7WeqH5HLp6WutQpVQ9YLLW+mml1HDAJbNz5dI5p2+E1vqQUsoTOKS1LmN+Hl4roIfWOs5cVzHAWYzhcX9zI/QvrfWMVHn6mKd9zfs7j3GuYh3gY6Cl1jpaKVUcuKO1zuyEsESAhj2tv/fag7L/x+GW6aadJtkwieGPVSMt0+2qvm/DJIYNJz+1TLcvOdSGSZKsvzjDMv3Q1ZFXth85mWPWh+Saa7qEeNg9FHdFrvjptBxv9p19f5hN3luWw7ta65PAp8BOpdQxYCowBOirlDoO9MI4zy/1eteBbzGGLVdiXMCQ3DWl1F6M8+n6J5t/AFiH0Uj8WGud9s6vST4B3JRSfuZszbXWxzAaiycxzhXck9V7BNYAXZRSR5VST1lRPiPzgQvAcXOel7XWsUBf4FfzMHcCxnu2itZ6E8ZQ+j7z+suAtPfIEEIIIUTOS3wA/2wky56+ByF5T1mq+eMx96b956FyF+npy4D09GVNevoyJz19QvxnHo6evk8eQE/fB7bp6Xvk7tMnhBBCCPFfseWFFznNJo0+rfXTGcwf/98mSUsp9T7G/fuS+1Vr/Wl65YUQQgghHgXS05eKuXEnDTwhhBBC5CrS6BNCCCGEyEguGt615ubMQgghhBDiESc9fUIIIYQQGZALOYQQQgghHge5qNEnw7tCCCGEEI8B6ekTQgghhMiI9PQJIYQQQohHiU0ewyYeOPlQhRBCPOoeisewVR6X849hOz3BNo9hk54+IYQQQojHgJzTJ4QQQgiRkVw0diaNvlysaadJto7AH6tGWqYbvTzFhkkM+5YOt0w/2c32efb8mpSntSn1I59tY3PCr5bpJl0n2zCJYffyEZbpsks+s2ESw7lXRlumffpNtWESw8EF79g6ghC5Wm66T58M7wohhBBCPAakp08IIYQQIiPS0yeEEEIIIR4l0tMnhBBCCJGRXNTTJ40+IYQQQogMyIUcQgghhBDikSI9fUIIIYQQGZGePiGEEEII8SiRnj4hhBBCiIzkop4+afQJIYQQQmRALuQQQgghhBCPFOnpe0zVr12GIQNaYjLZsW7zcX5cfiDF8lLF3Rk1pD0Vy3kzf8lu/rfyoGXZe2+1o3G9J7gWEUOfIQtzJE/DGmV4u3dz7E12rN7ux+I1KfOULubO+2+0RZXx5ptf9rB03SHLMqeC+Rg9oA3lSnqSmJjIp/M24vf31fvK06BWGd7u2xyTyY41W/1YsjJV/RRz5/3BbalY1pt5P+3hpzWHUiw3mez47vNXCAmP4t3PV95XluTenNGX+u3rcCvmFpP6zsH/r3NpynQa3I4uQ5+lePkidPXqR2RYlGVZjWZVeHNaX+zz2BMZGsXw5h9mO0uDWmUY2q8FJpMda7eeYMmKtMfQmMHtqPiEN98u3c1Pq406ypvHntkf9yBvHnvs7U1s33eWBT/vzXaOu5oWfYIPfVphsjPxs/9Rvj65P2XewqWY16wrl6IjANhwUTPrxB4Avmj4DC1KlCcsNoZ2a+ffdxaARtXKMPzlpzHZmVi16wSLfj+YYnnpIm6M69eWSqW9mfvbHpZsPGxZ1qNVbTo3rY6dHaz84wQ/bf4rRzIJIbIhF/X0SaPvMWQy2THsjda88+EvhIRFMW9yL3YfCODfi2GWMpHRscz8ditNGpZPs/6GrX6sWHeEMW8/kzN57OwY3rclQz9bRnBYFAs+6cmuI/6cvxyeLM9Npi3aRtN6afMM692c/cfO8/6MNTjYm8ifL8/95THZMbx/S97+eBnB4VHM/6wnuw/5c/5SqjwLttG0fto8AN2eqcP5y2E4Fsh7X1mSq9++NsXLF6VPxbeo3KACQ74awJBGY9KU89tzhv1rDzN5+/gU8x0LFWTInAGMbv8pIRdDcfVyyXYWk8mOdwa0YtiEXwkOi2L+F6+w+2AA5y8lO4aiYpn+3TaaNkhZR7fvxDN0/C/cjL2Dvb2JuZ+8xJ9HznHyPhrqJjs7JtRvQ6+t/yMwJpJV7fuw5dLf+EeEpSh3MPgSr+34Nc36y/85wQ9nDzOl8XPZzpA6z7uvtMB3ynKCwqNYNK4nfxwN4NyVZMfQjVimLN1Oszop66dccQ86N63Oq58sJS4unpnvPM/uY+e4GHw9R7IJIR5fj+zwrlIq2tYZ/ktKqTJKqZdzYluVKxTlcuA1rgZFEBeXwNZdZ2iSqvFyPSKGM/6BxMclpFn/2KlLREbH5kQUAKqUL8KloOtcCY4gLj6BLfs0TeumzHMt8ian/wkiLj5lnoIF8lKrUgnW7DgBQFx8AtExt+4rT+XyRbgUaM4Tl8DWPZqnUjU2r0fe5ExAEHHp1I+XuxON65RlzdYT95UjtUadfNiyeCcAp//8GydXR9yLuKYpF3D0PEH/hqSZ3+LlJuxe8SchF0ON9xASme0sRh1d44r5GNqy+wxNfMqlKHM9MoYzAYHp1tHN2DsAONibsHcwkXiff0rX9CjGv1HXuBh9nTsJCaw5f5rWJSpavf6B4Itcv5Vzx3TVJ4pwMfg6l0OMY3rzn2doVitl/VyLusmp82mP6TJF3Tnxz1Vu3Y4jPiGRI/oST9dJ/48LIcSDZ5eY8/9s5ZFt9D2GygA50ujz9HAiODRpyC8kLAovD6ec2HS2eLk5EZxsCDI4PAovd+vyFPcuxPWoGD54oy2LJvZi9IA25M93fx3YXu7p5LmH+hnatzlfLfmDxISc/cn2LOZOcLLe2NBLYXgWd7d6/RIVi+Hs5sjkbeOZc/ALWvVqmu0sXu7OKY+h8Gi8PJytXt9ksuP7yb1Zs+BNDh37l1N/B2Y7C0CRgk5cjUlqxAbGRFGkYNo8dbyK8/uz/fi+eXcqFPK8r31mxsvViaDwpPoJuhaNl5t19RNwOYzaFUtQyDE/+fI60Lh6WQq7W1+3QgiRkUd+eFcpZQd8CbTHGHn/RGv9s1LKCVgFuAF5gA+01quUUmWA9cBuoDFwGeiktb6ZwfYHAK8DeQF/oJfWOkYptRC4CVQCSgN9gVeBRsCfWus+5vVfAsYAdsA6rfV75vnRWmsn8/QLQAetdR/zdiOBekAR4F2t9TLgc6CyUuoosEhrPS27dWaXzrxEG/7lYWeXNpG1eexNJiqWKcyUhds4FRDI272b07tjfeb9mv1zxOzSqSFr8zSuY5zrqP8JpnaVEtnOkG6u+6gnAHsHeyrUeYJ3W00gb4G8zNz7Kaf3/83lbAyrphOFxHsIk5CQSN8RP+BUMB8T3+tE2ZKenDP3QGZH+p9ZyjwnwwNpsmIOMXF3eLpYOb5p1pUWq7/J9j4zzXMf9XP+ajg/rD/I7BFdiYm9w98XQ4hPSNtbKoT4j+Sic/pyQ0/f80AtoCbQCpiklCoKxAJdtNZ1gObAFHMDEaACMEdrXRW4DnTNZPu/aa19tNY1gdNA/2TL3IAWwDBgDTANqApUV0rVUkoVA74wl6kF+CilOlvxnooCTYAOGI09gFHALq11rftp8AGEhEXj7ZnUc+Dl4UxouO1Gy4PDo/BO1kvk7e5M6DXr8gSHRxESHsWpAKOnaPufZ6lYpnDO57GyfmpUKkaTeuVYNuc1PhrWgbrVSjHurfbZztLxzbZ8fWQSXx+ZRNjVcLxLeliWeZbwICzZOWJZCbkUxsGNR4mNuUVkWBTHd52mXM3S2coVHBaV8hhyd8rWMRQdc4u//C7SsHaZbOW462pMFEULJp2jWKSgM0E3U+aJvnObmDhjWHnHlQDymEy45StwX/vNSPC16BS9c4XdnAi9bn39rN7lR6+PfuSNL34h8kYsF4PkfD4hbCbxAfyzkdzQ6GsC/KS1jtdaBwE7AR+MDq2JSqnjwBagOHC3NXBOa33UPH0YY+g0I9WUUruUUieAnhiNurvWaK0TgRNAkNb6hNY6AThp3qYPsENrHaK1jgN+BKwZU1uptU7QWp9KljnHnPn7KiWKulHUuxAODiZaPlWJPQf8c3o3VjsdEEjJIq4U9XLBwd5Eq0aKXYcDrFo3PCKGoLAoShV1A6BetVKcvxyWxVqZO+MfSImirhT1djHq50nF7kPW5fl66W66DJzHC4Pn8+G0tRz2u8CEWeuznWX1VxsZWGckA+uMZM/Kg7Tq1QyAyg0qcCMihvBA6xsD+1YdpHqTypjsTeQrkJdK9ctz4fTlbOU64x9IyWTHUKsmldhjZR25uhTAqWA+APLmdaBejdL8e9n6xmt6joddoYyzGyUcC5HHZOK5MpXZcunvFGU88ztapmt6FMXOzo5rt9Lt4L9vp84FUqqwK8U8jWO6dYNK/HH0H6vXd3M2GqOF3Z1pXrcCG/8880ByCiEeL4/88C7pj1aC0UDzAupqre8opc4D+c3Lkp/pHw9k9uf+QqCz1vqYUqoP8HSyZXe3k5BqmwkYdRuXyXaTt/Xzp1qWfFsZvb9si09IZPq8LUwe/wImk4nft57g/MUwOrarCcDqDcdwd3Vk3pReOBbMS0JCIi88V5fevguIuXmbccM7ULtaSQq5FGDZdwP5/qc9rNuS/YsW4hMSmbJwG9NHdcVkMrF2hx/nLofRpWUNAFZsPY57oYJ8/8krOBbIS0JiIi+2q8NL7y4k5uZtpi7axvjBz5DHwZ7LwRF8+s2G+66fad9tY+r7XbE3mVi73Y9zl8Lo3NrIs3LzcdxdC/Ld50l5uj9bh57DjDwPyoHfj9Dgmdos+nsWt2JuM7nfHMuyT9eOZuqArwm7eo3Ob7Wn+8hOuBdxZd6xyRxY/xdTB3zNhTOXObjxKPOOTSEhIYH1323l/MmL2coSn5DI1PlbmTrW+MzWbTvBuYthdGpjHEOrNh3D3bUg87/sZamjbh3q8srQ7/Fwc+R93/aY7E2Y7OzYtlez97D1DaJ08yQm8uHBzfzQsgcmOzt+DTjO3xGhvFyhNgBL//6LZ0pVomfF2sQnJhAbF8eQXass689o0omGhUvhlq8Ae7sMZvrxXfwScDz7eRIS+XLJdma+09W4DdFuP/65EsbzTxvH0G87juPhUpBF43riWCAviYmJ9Ghdhxc/WMSN2Nt8Mfg5CjkVIC4+gS+XbCXqPi9OEkJkX47/ErYhu3s5D+dhcvecOKXU88AbwDOAO3AIaAC8CJTXWr+llGoObAPKmldfq7WuZt7OCMBJaz0+g/2EAlWAa8DvwOVk596t1VovM58nmHybC4G1wB5gP1DXvP5GYJb53EJ/4DlAA78CUam3m+p91gWmaq2bWVE9iQBNO02youiD9ceqkZbpRi9PsWESw76lwy3TT3azfZ49vyblaW3qZsMkSTYnJN3SpEnXyTZMYti9fIRluuySz2yYxHDuldGWaZ9+U22YxHBwwTu2jiDEg/JQtLdqvDMtxxtKx6cOs8l7yw3DuyuA48AxjIbdu1rrQIyh1HpKqUMYvX7ZHR8ZC/wJbL7XbWitrwKjge3mfEe01ne7F0ZhNAy3AdacSX8ciFNKHVNKDbuXHEIIIYTIplx0Tt8jO7x798pX8zl1I83/ki8PxbiSNj3VkpXLtCtDaz0XmJvO/D7Jps+n2mbyZUuBpemsvwxYltl2za/vvs87QMvMsgohhBAiZ8mzd4UQQgghxCPlke3py2lKqTnAk6lmz9Baf2+LPEIIIYR4COSinj5p9JlprQfbOoMQQgghxIMijT4hhBBCiIxIT58QQgghRO4nF3IIIYQQQohHivT0CSGEEEJkRHr6hBBCCCHEo0R6+oQQQgghMiDn9AkhhBBCiEeKXWJiLmrCirvkQxVCCPGos7N1AIDab07L8d+pf301zCbvTYZ3hRBCCCEyIMO7QgghhBDikSI9fblY+yJv2joC6wO/sky3c3vNhkkMG67Nt0y3LzzIhkkM64PmWqYfhjyQKlOVMTZMYlh/aqJlum3dD22YxLDx8EeW6XY1x9owiWHDsY8t083bfGHDJEm2b3rP1hGEyDnS0yeEEEIIIR4l0tMnhBBCCJGRXNTTJ40+IYQQQogM5KYLOaTRJ4QQQgjxkFFKtQNmAPbAfK3156mW9wTunkAbDQzSWh/LbJtyTp8QQgghREYSH8C/LCil7IE5QHugCvCSUqpKqmLngGZa6xrAx8C8rLYrPX1CCCGEEA+X+oC/1vofAKXU/4BOwKm7BbTWe5OV3w+UyGqj0ugTQgghhMiAnW2eXFYcuJjs9SWgQSbl+wPrs9qoNPqEEEIIITLyANp8SqnXgdeTzZqntU4+PJveY9rSTaKUao7R6GuS1X6l0SeEEEII8R8yN/AyOwfvElAy2esSwJXUhZRSNYD5QHutdVhW+5VGnxBCCCFEBmx0y5aDQAWlVFngMtADeDl5AaVUKeA3oJfW+qw1G5Wrd4UQQgghHiJa6zjAF9gInAZ+0VqfVEoNVEoNNBcbB3gAXymljiqlDmW1Xenpe8wM/KQbPi2rcuvmHaYM/YGAExfTlClcyoNRX/fD2dUR/xMXmey7kLg78TgVKsCwab0oWsaL27fuMG3YYv49c9Wynslkx8yNowgNvM74XnPTbDcrgz5/CZ/W1bl18zZT3lyA//ELaco8N6A5XQa2ptgT3nQv9zaR4dEANO/WgO5D2wNw80Yss4Yv4ZzfpXvOkJGBn3Y319ttpgxJv96e69fzWToYAAAgAElEQVSMzq+3oFhZb16sPILI8Bs5tv+HNdPAMR3waaqMDGOWE3A6zegDhYu7MWpKD5wLFcD/1BUmj/qVuDvxNGxRmd5vtSIhMZH4uATmfb6Ok0f+zXKf9RqVZ+CI9tjb27F+5RF+Wbg7TZlBI9tT/8kKxMbeYcr4lfibj9OM1n1taBsaNq3InTvxXL10jSnjV3IjOpbm7avTrdeTlu2WrVA4y3yD3nsGnyYVuRV7hyljf7PsO2WduDL6i+44uxTE/8wVJo1ZTlxcPCXKeDJ8QhfKVS7GollbWP7DHss6wz7qTIOmiuvhNxjYdXaWOQB86pXFd1BL7E0m1m04xk8//5mmzFtvtqSBTzlib93hi8m/87d/ECVLuDPu/Y6WMkWLuPL9D7tZvsL4ndKlUx06d6xDQnwi+w8E8M38HVblEeKRZKObM2utfwd+TzXv62TTrwH39FB76el7jPi0rEqxJ7zp32g8M0f8iO8XPdIt1++Dzqz8ZhuvNR5P9PUY2r7cGIAXh7Yj4OQl3mzxKZPfWsTAj7ulWK/TgOZc+Dswe9laV6dYOW/61R3DjLd/wHfKK+mWO7Xfn9GdpxB0ITTF/MB/Qxn57JcMajKepZPWMnRa72zlSDdby6oUK+tN/4YfMnPEUny/fCn9bAcCGN1tBkEXsjytIldk8mlakWKlPejfbgozP1yJ74ed0i3Xb3g7Vi7aw2vtpxIdeZO2z9cD4Oj+AN7sMgvf52cz7YPfGDrh+Sz3aTLZMXjUs3wwZAkDXphD87bVKVXWK2WuJytQvKQHfTvPZMYna3hrdIcs1z3yZwCvd/+KQT3mcvnfMHr0fQqA7etP8ObLX/Pmy1/z5bjfCLpyPfM6aVKBYqU86PfcdGZMWIXvB8+lW67/0LasWLKP/h2nG3XSpQ4AUZE3mfvF7yxftCfNOptX/cUHg37Iso6S19VQ39aMev9X+gyYT8unq1C6lEeKMg18nqB4cXde6TuPKdM3MmxIGwAuXgpnwKCFDBi0kDcGL+LWrTvs3mOMHtWqWYonG1XgtYHf0/f17/h52QGrMwnxKLJLzPl/tpJjjT6lVHRObetRoJQqo5R6OYsytZRSz/xXmbLSsG0Ntv5i/KV/5sh5nFwK4ubtkqZczScVu9b+BcCWX/bTqF1NAEpVLMqxXRqAS/5BFC7pgaunMwCeRV2p36oaG39M+8vKGo2eqcXW/+0zsh36B6dCBXEvXChNuYATFwm6mLYBc/pAANERMcb6B//Bs5hbtnKkp2G7mmz9db+x7cPnMqy3AL9LBF8Mz7H9PuyZGraowtZVxnFy5vhFnJzz42Y+HpKr2eAJdm3yA2DLyiM0alkZgNiY25Yy+QvkIdGK2yKoqsW5cjGcwMvXiIuLZ8cmPxo9XSlFmUbNKrFl3VEjl98lHJ3y4+7plOm6R/YHkBCfAMBpv4t4Fk5bl83bVmfHRr9M8zVqXpmta8z7PnEJJ+cCuHs6pa2T+mXZtfmkUSerj9K4hVEnEeE3OHvyMvFx8WnW8TvyL1GRNzPdf3KVVFGuXLnO1cAI4uIS2LbzNE82rpCizJONK7Bps/GeTp+5gqNjPtzdHVOUqVO7NFeuXicoOBKATh1qs/Tn/dy5Y2S8fj3G6kxCCNuSnr7sK0OqkyrTUQu4p0afUuqBDbl7FHUl9Mo1y+vQq9fwLOqaooyLuyM3ImMsvwBDr17Hw1zmn5OXaPxMLQAq1i6Ndwl3PIsZy974+AW++3gFCdm8n5FHUVdCLic1TkKuXLPs91617dWEQ1sy/+V8LzyKuhJ6OfN6+689DJk8vF0IDYxIyhAUmaax5OJakBtRsUnHU1AkHska841bVmHe2mFM+PpVpn2w3Kp9hgQl32cEnl4pG5qe3s6EBEUmlQmOxMPLxap1Adp2rMPBPX+nmd+0TTW2bzxxT/lCgiLw8M68TtIrkxM8PZ0JDkmqh5CQKDw9UjZAPT2cUpQJDY3C0yNlnbRoVpmt209bXpco4UaNaiX5amYvpk9+CVWxSI5nF+KhYoMncjwoOd7AUErZAV9iPDokEfhEa/2zUsoJWAW4AXmAD7TWq5RSZTBuKLgbaIxxlUonrXW6f9IqpQZg3NsmL+CPcdVKjFJqIXATqASUBvoCrwKNgD+11n3M678EjMG4B846rfV75vnRWmsn8/QLQAetdR/zdiOBekAR4F2t9TLgc6CyUuoosEhrPS1VzrzABKCAUqoJ8BmwFpgFVMeo+/HmOugDPAvkBxyVUj8AnTGet1cNmGJ+v72AW8AzWut77r6xs0t725/UvSuZlfl11ibe+KQbs7eM5vzpKwT4XSI+LoH6ratxPTQa/+MXqZ6qJ+H+st37dmo0UbR95SmGt/8868JWSvdmSTZ+APfDkCmdj+yejieAvVtPsXfrKarVLUPvIa0Z039BNvaZdaHExESr1n2pX1Pi4xPYtv54ivmqWnFuxd7h34DgzPOlMy/1Pqx6DznAuiyZ3wrMwcFE40bl+XbBTss8e3sTzs75eHPIYiqponz4QSde7v1NzoQWQjxQD6JX6XmMHq6agCdwUCn1BxACdNFaRyqlPIH9SqnV5nUqAC9prQcopX4BugJLMtj+b1rrbwGUUp9g3JBwlnmZG9AC6AisAZ7EOMnxoFKqFhAMfAHUBa4Bm5RSnbXWK7N4T0UxbnpYCVgNLANGASO01h3SW0FrfVspNQ6op7X2NeedCGzTWvdTSrkCB5RSW8yrNAJqaK3DzY3AakBtjIagP/Ce1rq2Umoa0BuYnkVmADr0bUq7nsaJ6GeP/pti2NOzqBthyXpqACLConF0KYjJ3kRCfAKeRV0JN5eJiY5l2tuLLWUXHvyYoAthNOtcj4ZtquPTsip58jlQ0KkAI2f3YZLvwkyzPfdac9r1Ns6dOnvkPF7F3S3LvIq5ER6Y+flTqZWtWoK3Z77K2G4ziLp2fxcsdOjbjHavJKu34qnr7d6y5YSHIVOHlxrSrptxTt7ZE5fxLJLUa+dZ2IWw4KgU5SOu3cDROX/S8VTYhfDgSFLzO3yeoiXdcXEtSGQmw4WhQZF4FU6+z0KEhUalUyap58zT24Xw0Cjy5LHPdN1WHWpS/6mKjBq0KM1+n25TnR0b0u/le+7F+rQzn6d49uTlFPvwKlyI8JCU7zfiWkyKOkmvTE4ICY3C2yupHry8nAkLj86gzGXA6B0MDUsq08DnCc76B3Et2WcSEhLFH7uN8/vO6KskJCRSqFABIiKsH3oW4lFiy3PwctqDGN5tAvyktY7XWgcBOwEfjD88JyqljgNbMB4xcvdSuHNa66Pm6cMYQ6cZqaaU2qWUOgH0BKomW7ZGa50InACCtNYntNYJwEnzNn2AHVrrEPPl0D8CTa14Tyu11gla61PJMmdHG2CUuXdwB0aDrpR52eZUvXfbtdZRWusQIAKjEYv5vZWxdodrv/8D31af4dvqM/ZtOE7L7sZTXCrVKcONqJtcS+cX8PG9Z3mqQ20AWnVvyL6NRq+Ho0sBHPLYA9Cu55Oc2O9PTHQsCyeuoled9+njM5bPBy7g2B6dZYMPYM387QxuOoHBTSew7/e/aNmjkZGt3hPciLxJeFBEFltI4lXCnbE/vMmkgd9xOSDI6vUysvb7nfi2nIhvy4nsW3+Mlt0aGtnqls2w3h60hyHT2p/24/v8bHyfn82+rado2ck4TirVKMmNqFiupWqAARw/8A9PtakGQKvOddi3zRgqLFoqqZFfrnIxHPLYZ9rgA9CnrlC8pDuFi7ni4GDP022qsX/nmRRl9v9xhlbPGqchVKpWgpjoWMJDozNdt16j8nR/tQnjhy3lVuydFNuzs7PjqVZV2LEp/VMG1vx8gMEvfsXgF79i3/bTtHzOvO/qJbhh3neaOjl4jqdaG19drTrWYt/2M2nK3K8z+irFi7tRpEghHBxMtGhWmb37/FOU2bvvb9q0Nj6bypWKcePGLcKTXeHdonkVtiUb2gXYvfdv6tQqDUCJ4m7kyWMvDT4hHhEPoqcvvfECMBpoXkBdrfUdpdR5jEYPGEOWd8UDBTLZ/kKgs9b6mLlH7Olky+5uJyHVNhMw3mtcJttN3pbPn2pZ8m1l9P6sYQd01Vrr5DOVUg2A1F1TqfMnf2/Z+twObvHDp2VVFuz/iNibt1P02k348U2mv/Mj4UERLPh4BaO+6U/vUc8R4HeJTUuNZzqXrFCEEbNeJSE+gQtnA5n+zuKMdnXPDmw6gU/r6iw4MpFbN28zdfD3Sdl+Gcr0IQsJD4yg0+steWFIW9wLF2Lu7vEc3HyC6UMX0XPkczi7O+I7uScA8XEJDGnxSY5kM+qtGgv+nGDU29CkKygn/DiY6e8sITwogo6vNafb4Na4ebvw1fYPOLj1JDPeyajD+tHPdPAPjU9TxYINw4mNvcO095POyZvw9atMH/sb4SFRLJiygVGTe9B7aGsCTl9h03Ljth9NWlejZafaxMXFczs2js+H/y/LfSbEJzDny9+ZOLsXJnsTm1b9xb//hPBsV6Onbd3yQxzY/Tc+T1bk+1VDjdumjF+Z6boAg997hjx5HPjsK+Oq7zMnLjHzs7UAVK9TmtDgSAKTnUOZkQO7zuLTpCIL1g7jVuwdpo77LalOZvdi+kcrCQ+J4rvpmxj9ZXdeHdySgDNX2bjiMABuHk7M/GkgBR3zkZiQSOdXGvFGl1nE3LjFqM+7UaNeWVxcC7J40wiWzN3GxhVHMq6rhERmzt7MlxO7YzLZsX7jCc7/G8pz5gbxmnVH2X/gHxrUL8eSha9z61YcX0xOujtEvnwO1K1ThqnTN6TY7vqNx3l3+DMsmNePO3fi+XzSuizrRYhHWi7q6bOz5oo5a9w9J04p9TzwBsYFDO7AIYyHBL8IlNdav2V+Ttw2oKx59bVa62rm7YwAnLTW4zPYTyhQBWN49nfgcrJz79ZqrZeZzxNMvs2FGOfT7QH2kzS8uxGYZT6vzh94DtDAr0BU6u2mep91gala62aZ1ElXoKPW+lXz64mAC/CW1jpRKVVba/2XufGafBg49evz5tehqZdlIBGgfZE3Myny31gf+JVlup3bPd1O6IHYcG2+Zbp94UE2TGJYH5R0P8OHIQ+kylRljA2TGNafmmiZblv3QxsmMWw8/JFlul3NsTZMYthw7GPLdPM2X9gwSZLtm96zdQSRO9xPJ0uOafjK1Bxv9u1f8o5N3tuDGN5dARwHjmE07N7VWgdiDKXWM98xuieQ3fGMscCfwOZ73YbW+iowGthuzndEa73KvHgURsNwG5D2bqppHQfilFLHlFLDMiizHahivlP2i8DHGBexHFdK+ZlfCyGEEEI8cDnW0yceKtLTlwHp6cua9PRlTnr6siY9fSKHPBw9fT2n5HxP34/Dc01PnxBCCCGEeMg8tM/eVUrNwbjlSnIztNbfp1felpRSbTFuBZPcOa11F1vkEUIIIUTOyE23bHloG31a68G2zmAtrfVGjItChBBCCJGb5KJGnwzvCiGEEEI8Bh7anj4hhBBCCFuzS7B1gpwjPX1CCCGEEI8B6ekTQgghhMhILjqnTxp9QgghhBAZyE1X78rwrhBCCCHEY0B6+oQQQgghMpKLnlwmPX1CCCGEEI8BefZu7iQfqhBCiEfdQ/Hs3SZdJ+f479Tdy0fIs3eFEEIIIcSDIef0CSGEEEJkJBeNnUmjLxdr03CCrSOwaf84y3Trxp/YMIlh894PLNPtK75nwySG9We/sEy3Lz/ShkmSrPefZJluX2WMDZMY1p+aaJl+GOooef20rfuhDZMYNh7+yDLdvvJoGyZJsv70Z5bpNo0+tmESw6Z9Y20dQTzC5JYtQgghhBDikSI9fUIIIYQQGclFF7xKT58QQgghxGNAevqEEEIIITKQm87pk0afEEIIIURGclGjT4Z3hRBCCCEeA9LTJ4QQQgiRgdw0vCs9fUIIIYQQjwHp6RNCCCGEyEhC7unqk0afEEIIIURGck+bTxp9j5N6DcsxaFhbTCYTG1b/xc+L96Qp8+Y7bfFpVIFbt+4w+eNV+OtAvLxdGPlhZ9w9HElISOT3lUdY+csBAF59/WkaNVUkJiRy/doNJn28ivDQaOvyNHiCN99ui8nejvVrjvLz4r1p8wxrQ/1G5bkVe4dJn6zB/6yR592xHXH3cDLyrD7Cil8OAlCuQmGGjmxP3rwOxMcnMHPyBvTpK1bX0cAPOuLTTHHr5h2mjPqFgFNp1y1cwo1R017GuVBB/E9dZvLIn4m7E29ZXrF6Cab+MpjP317K7o0nyJPXgUlLB5Inrz329vbs3niCJTM3W5dnbCd8nq5k5HnvZwJOXk4/z/RXcHYtgP/Jy0we8T/i7sRTvcETfPh1HwIvXgNg76YTLJ29xcjz0yDy5HXA3sHE7g0nWDJjk/V1NKYDPk0Vt27eZsqY5QSkU7+Fi7sxakoPnAsVwP/UFSaP+pW4O/E071CTbv2bAnAz5jazJ6zinA6keBlPRk/tYVm/aAl3Fs/awsp0jomHrY7qNSrPwBHtsbe3Y/3KI/yycHeaMoNGtqf+kxWIjb3DlPEr8T9zNdN1nV0KMOazbhQu5krQlet8OuoXoqNicS5UgLFfvkjFKsXYvOYoc778Pev6GfOc8XnF3mbKmGXpH9PF3Rg15SWjfk5dYfJ7vxB3J56GLSrTe0hrEhISiY9PYN5nazl55F+jfha/nlQ/G/1YMntLllnqNSzHIPPPvPEdlN7PfFt8Ghs/85M/Xm35mR85rlPSz/yqVN9BT1VM+g76ZLXV30FCPG6k0feYMJns8B3RnlFDlhAaHMms719j3y7NhfOhljI+jcpTvKQHfbvNplLV4gx591mG9P/O+LKfuQl/HUiBgnmZs3AARw78w4Xzofy6ZC+L5u0AoHP3+rzSrykzrfhFZDLZ8daI9rw39EdCgyOZ/V1/9u06myJP/UblKF7CnT7dv6Jy1eIMGdmeIQO+Jz4+gW9mbcH/rJHnqwX9OXzgHBfOhzJgcEsWL9jFwf0B1G9UjgGDWzLCd7FVdeTTTFGsjCf9W0+iUs1S+H7UhWHd5qQp12/EM6xcuJud647h+1EX2r7gw7qf9lveV98R7Tmy+6yl/J3bcYzqPY/YmNvYO5iY/NMgDu3UnDl2IYs8lYw8Lb+gUq1S+H70PMNemJU2z7vPsvL7P4w8E56nbbf6rFu6DwC/g+cY//r3KcrfuR3HqF7fJOX532AO7TzDmaOZ5wHwaVqRYqU96N9uCpVqlMT3w04M6zE3babh7Vi5aA871x/H98NOtH2+Hut+/pPAS9d499VviY6Mpd5TFRnyUReG9ZjL5fOh+D4/21KHi3eMYu/WU1nnsXEdmUx2DB71LKPf/IHQoEhmLX6d/Ts1F86FJGV8soLxc9V5JpWqleCt0R0Y+uq3ma7bvU8T/jr4D78s3E33Pk14sc9TfDdrM7dvxbFo7jbKlPOmTDlvKz4vZf68JlOpZkl8x3VmWI+v0v+8ftjNzt+P4/thZ9p2rce6//3J0f0B7N92GoAyFYswZtpLvP7sNKN++s5Pqp8lAzm0S3Pm2MUMs5hMdvgOb8co88/8rAWvpfmZN76D3OnbbY75O+gZhry2wPwdtNnyMz/n+9fS/w7q5mP1d5AQ1pILOXIBpVS0+f9iSqll5ulaSqlnslhvvFJqRAbLMu2WUErZ7On1qkpxrly6RuCV68TFJbBz80kaN1UpyjRuqtj8+zEAzpy8jKNTPtw9nAgPi8ZfBwJG78yF86F4ersAEBNz27J+/vx5rO4FV1WKceVSuCXPji0nafxUxRRlGj2l2LLhBACnT17GySl/Up6zyfL8G4qnlzMAiYmJFHTMB4CjU37CQqOsrqOGLauydcVh4/0fu4CTcwHczNtNrmajcuwy59qy4jCNWlW1LOvY60n2bPLjeljKnoZYcz05ONjj4GBPohWP9WnYKlmeoxdwcsmffp6G5VPmaV01TZnUUuTJY7IqD0DDFlXYuuovI9Pxizg558fNM51MDZ5g1yY/I9PKIzRqWRmA00cvEB0Za6x/7AKehV3SrFurYTmuXggn+Mr1rPPYuI5U1eJcuRhO4OVrxMXFs2OTH42erpSiTKNmldiy7qiR0e8Sjk75cfd0ynTdRs0qsWWtsc6WtUct82/F3uHk0Qvcvh2XZX6Ahi0qJ31exy5mUj/l2LXR/HmtOkKjllVS1AFA/oJ5UzyNKm39ZJ7F+JlP9h20Jb3voIpsXn/cyHvyslFX6f3Mn0/6mU/xHVQgr9XHshCPo1zV06eUctBaW/dtaKa1vgK8YH5ZC6gHZOvPRK114yyKjAEmWrs9pZQdYKe1TshOnuQ8vZwJCY6wvA4JjqRS1eIpynh4ORMSHGl5HRochYeXM+HJGjCFixaifMUinPG7ZJnXZ2BzWrevwY3oW4wc/IP1eYKS7SskikpViqUpE5yiTCSeqfMUKUT5CkU4Yx7Smzt9E59Ne5nXfVthMsHQNxZZlQfAo7ALoYFJdRQaFIFnYReuhSQ1HF3cCnIj8iYJ8cZHEhoYgYe54eJR2IXGrasyqvc8KlZ/IcW2TSY7Zq4YQrFSHqz9cR/6eMY9IinyXE1q+IQGRuBZuFDaPFHJ81zHo3Ahy/LKtUszZ80wwoIjmf/5Wi78HZSUZ+XbFCvtwdole9GZ9NCkyOSduo4ijTpK1rh2cS3IjajYpExBkSky3dW2az0O7TqbZn6zZ2qw0/zHR5Z5bFxHHt4uhASlPGYqVSuRooynd6pjPTgSDy+XTNd183C0DFGGh0bj6u5oVX2kyVe4EKGBqerHO9Ux7VqQG5Gx6R7TAI1bVaHPsLa4ujsxblDSz5PJZMfMZb7GMf3T/iyPaU8vlxTfLxl+B6X6mU/zHVTE/B2UbBi/zxvNad2+uvEdZGXPvhBWy0V/SDxyjT6lVG9gBMaplceBeCAcqA0cUUp9BcwBvIAYYIDW+oxSqiywFOM9b0i2vTLAWqAOMAEooJRqAnymtf45gxhVlFI7gFLAdK31TPO2orXWTkqposDPgIt5f4OAZ83bPgqc1Fr3VEq9A/Qzb3O+1nq6Oc96YDvQCFiplHLVWg8z72MAUFlr/c49VZxd2lmpD2M7u8wL5S+Qh3GfdWPu9I0p/rpe+PV2Fn69nR69n6TjCz4snr/Tijhp95X65yrdOMkK5S+Qh3ETX2DujE2WPB2er8vcmZvZveMMTVtUZvjoDrw39Mcs82S8P2tyG4XeGPMcCyatJyGdK70SEhLx7TQDR+f8jJ3Tm9IVCvOvuXGRcZ6M92VNmYCTl3m12URiY27j06wS4+a+ymutvkzK03GakWfuq1blMfaXdt69ZLqrRv0naPN8PUa88k2K+Q557GnQvDLfT7PuHENb15E1x0x6hRITE61b9z5l//NKmt675RR7t5yiWr0y9B7SmjH9vgPM9fP8LKN+Zr2S9TFkTZb0C1kmk76DNqX8DvpmOwu/ubfvICEeR4/U8K5SqirwPtBCa10TGGpeVBFopbUeDswD3tJa18VoHN49gWUGMFdr7QMEpt621vo2MA74WWtdK5MGH0AloC1QH/hQKZUn1fKXgY1a61pATeCo1noUcNO87Z5KqbpAX6AB0BAYoJSqffetAj9orWsDk4GOyfbRF0h5ApIVQoOj8PJO6t3w8nYhPCQqVZlIvLyT/sL39Ha2DI/a25sY91l3tm30Y8+OM+nuY9smP55qXtmqPCEhkXgl603w9HJOMxQbEhyFd4oyLoSZez/s7U18OPEFtm3yY/dObSnTpn0Ndpvz/bHtNCpV72FqHXo2YvaqocxeNZSw4Cg8iyTVkWfhQoQl65kAiLh2A0eXApjsjR8dzyKFCA82cleoVoJR015i4bb3aNK2OoPHd6ZRqyop1r8RFcvxA/9Q76mUw1qWPK80ZvbqYcxebfQ8eRZ1TcpTJJ084TdwdE6ex5Vwc5mY6FuWIbiDO8/g4GCPi1vBtHn+/Id6TVMOSabI9FJDZv/my+zffNOpIxfCglN+bv9n77zDoyjeOP7JhQ5JKAm9Shk6iEQIXXqkWZEiTVEpURRBA1iwIQjSRMEGKirSFCnSpRMEpbdBqnQSAoQEAqT8/tjN5e5yKfCD7AHv53nyZG53Zvd7s7Nz777zzuylCzHk9smRrKmQr10TGLFhr77/OO+HTOfypatOZWs3rMChvadSDI97ah1FnI0ioJBLm3Fpx0Yex/vKl8iIy2mWvXA+hvz+eQDI75+Hi5ExqdaHK2271GXSry8z6deXjfop7FI/4W6ul28OlzbtXIcAu/8+SpES+fHN66Z+Nh+hdoMKKco44tq/BBT0TTHhIiJFv+B8z78z4mn+XLqLDWvS6IOapN6WBeFW8Eq8/X9WcVcZfUBTYI7WOgJAax1pbp+ttY5XSuUB6gGzTY/al0ARM099YIaZ/n/9/4u01tdMHeeAQi77twC9lFLDgWpaa3eBZQ2A37TWMVrraOBXoKG575jWepP5HWOAP4G2SqmKQFat9a6bFaz3naRYifwULpKXLFlsNG5RhTCXobWwdQdo8WgNACpWKUZM9DX7sMrAYe3472g4c80JC0kULZHfng5qWIHjxyLICHrfKYoVT9bTpHkVwta76Fl/gOatqwFQqUoxYmJi7XpeH9qW/45GMPeXv5zKnI+IpvqDpQB48KHSnDweSVos/CmMkA4TCOkwgbAVe2j2+EPG969RkpjoWKdhsCR2bjpEQ1NX88cfImzlHgB6NRtFz6bG3/qlu/h8+DzCVuzFL19ucvvkACBb9iw8WK8cxw+fc6/nx42EtB9HSPtxhC3fnaynZkliLqei56+DznpWGHocY+0qVC+Bl82LqAtX8MufcT0AC2dsIuSJSYQ8MYmwlXtp1sF4NqlYvYShyU3c5M7Nh2nYsqqh6bFahJmTAQKK+PH2xK6MDp3NyWPnU5Rr8mgNVqcztOtJdaT3nkxZWx0AACAASURBVKJYifwUKpqXLFm8adKyKptcDJJNa/fTvE1NQ2PV4lyJjiUyIjrNspvWapq3Nco0b1uTsFSMHLf18/MmQp74jJAnPnO+XjVKpFE/h2nYyrxeHZKvV5GSBex5ylYuSpas3kRdvJKyTQeV5bjD5BV36H2nnPug5qn0QcHVDb0u9/zAYe3471jKe75ocYc+qEEFjrtpV4Lwf5F4B/4s4m4b3vXCfXUlPQbbgIumh80dt6uqrzmk43GpR631WqVUI4wh3elKqdFaa9dgNzfjGHZcH+u/wYgH3M8tePkAEuITmTRmMSMmdMVm82Lpwu0cOxJOG/MHc9Fv/7B54788XK8c380JMZZL+HA+AFVqlKDFozU4fPAsk394EYCpk/9kS9hBnu/XjBIlC5CQmMi5M5eYMGpRxvWMXcLH4zpj87aZeiJo+1gtABbO28rmjQepE1SO72f3N/R8tMDQU70ELYKrc/jgWaZ819vQ8+UqNocdYuzIRfR7tSXe3jauX49jfAb1AGxZvZ/AxoqpK94g9up1xg2Zbd/3/te9GD9sDpHnLjN1zGJCx3Wh+6stObT3FMtmb0nzuPkK+jBoVEdsNhteNi/WLd7J5lS8pSn0NKnE1D9DDT1vzkrW881zjB86h8hzUUz95A9Cx3el+8DWHNp7kmWzjaUsGgRXo02XIOLjErh+7QYjzWHufAG+DBr9TLKeP3awedW+jNXRWk1gI8XUJa8TG3uDccPmJmua0oPxb/9KZPhlpn66hNAxneg+oAWH9p1i2dy/AejStyk+frno/057AOLjEhjQ0XDGZ8+RlQfrlWPi8N8ypMUT6ighPoHPP/mDEZO6YfO2sez3bRw7HE6bJ2sDsGju32xe/y+B9Ssw7fcBXDOXbEmrLMDM79YxbGRHWneoxbkzl/jI4Xt9v+BVcufOTpas3ikmjaSonzXm9Vo6yLheQ+ck18+XPRn/1lzzei0m9NPOdH+lpXG95hhtukHLKjTrUIu4G/FcvxbHyIEzzPrxYdDHT2Pz9jLqZ8mudNt0Qnwikz5dwojxXcw+aIfZBxn3/KLfjHv+4Xrl+G52f65di0vugxzu+cnfvwDA1CmrzD6oqXMfJDN3BSFVvO6mmU7m8O5vQJDW+rxSKj8wFliotU6agbsRGKe1nm1OhKiutd6hlJoPzNJa/6iU6guMNuPvSpvlqyqlngTaa617pKFhOBCttR5jft4NtNVaH3WI6SsFnNRaxymlXgVKa61fVUpdAApqrW8opWoB32EM7XoBfwHdgAtJelzOuxUjTrG61vpCOlWVCNCy7vsZqdY7yrJN79jTLep9aKESg+Ub37Kngyu8aaESg8UHRtnTweUGW6gkmcUHR9vTwZUtm3BuZ/He5LlPnlBHjvXT6qF3LVRisPSf9+zp4EpDLFSSzOJ9H9vTLYM+sFCJwbKwt62WINwaaTlHMo2mLUbedkPpz+Whlny3u2p4V2u9B/gIWKOU2oFh8LnSFXje3L8H6GBuHwD0V0ptAVJOJTRYhTFJY7tS6pn/Q2oTYLtSahvwJEY8IRjxhjuVUj9prbdiGH2bMQy+b7TW29I45ixgQwYMPkEQBEEQhBTcbcO7aK2/B1Jdh0NrfQRoncr2IIdNI83tR4GqZjoSCEzn/MNdPld1SOdJS6PW+k3gTYfPY3ExXB31uNAAGJeWNkEQBEEQbjP/96JpnsNdZ/Tdbyil8mJ4A3dorVdarUcQBEEQ7ie87qIwuPQQoy8VlFK9SF4SJokNWuv+malDa30RY0kaQRAEQRCEW0aMvlTQWk/jFmfKCoIgCIJwj3DvOPrurokcgiAIgiAIwq0hnj5BEARBEITUkJg+QRAEQRCEex8rX5t2u5HhXUEQBEEQhPsA8fQJgiAIgiCkxj00vCuePkEQBEEQhPsA8fQJgiAIgiCkgtc99EYO8fQJgiAIgiDcB3gl3kNj1YIduaiCIAjC3Y6X1QIAWtT/8Lb/pi7f8JYl302GdwVBEARBEFLjHnKjyPCuIAiCIAjCfYB4+u5hWj34rtUSWLrtPXu6Zd33LVRisGzTO/a0p9VPcIU3LVSSzOIDo+xpT9DkpKfcYAuVGCw+ONqebvWQB7ShfxzaUIkBFipJZvHxCfZ0cOnXLFRisPjoOHva066Z4Pl43UNhcOLpEwRBEARBuA8QT58gCIIgCEJq3EOePjH6BEEQBEEQUkPW6RMEQRAEQRDuJsTTJwiCIAiCkAr30kQOMfoEQRAEQRA8DKVUa2AC4A18o7Ue6bLfy9z/KHAF6Km13prWMWV4VxAEQRAEITUSE2//XzoopbyBz4FgoDLQWSlV2SVbMFDe/HsRmJzeccXoEwRBEARBSA0LjD7gYeCg1vqw1vo68AvQwSVPB+AHrXWi1noTkFcpVSStg4rRJwiCIAiC4FkUA447fD5hbrvZPE5ITJ8gCIIgCEJq3IElW5RSL2IMySbxldb6K4fPXm6KuboIM5LHCTH6BEEQBEEQMhHTwPsqjSwngBIOn4sDp24hjxNi9GUApVQT4LrWeqPVWm6Wvm8E83D98sTG3uDTd+dxcP/pFHkKFc3L0JFP4+OXk4P7TvPJW78SFxefZvmB73agTqMKXIyM4aWnv7Af64EKhXllWFuyZc9CfHzaj0e165al72utsNlsLJm/jZnTN6TI029gKwKDynPt2g3GfPA7B/UZAgr6Mvjdx8hfIDcJCYn8MW8r82ZtBqBh00p0692YkqUDePm5b/jXzffNjDrKmi0Ln37bi6zZsuDtbWPdir1Mn7LKfrz2nerQ/pmH09XW5632BDZWXLt6g09DZ3Fob8r7uVDxfISO64KPXy4O7j3JmMEzibsRb99foVpxxs7qz8hXf2b90l0AvDbiKR5+pBIXz0fTt+24FMe8mzT1ebsDgU0qGnrenMmhPSfd6xn/LD55c3Jwz0nGDPqFuBvxVKvzAO9O6cmZ4xcA2LhsFz9PWkHWbFkYPaOvcf2y2Fi/ZBc/TliW4rjT5r3C4nlbmfXd+hT7+g52aBfDk9tV7aBy9BkUjLe3l1NZH9+cDP34aQoVzcvZUxf5KHQW0ZdjeSS4Gk93q28/bpnyhejf9UsOHziTsfp57wkCm1Y26mfgTxzafSJl/ZTIT+jnPfDJm5uDu48zZsCPxN2I58mXmvLI4w8B4J3FmxLlCtGp5jCiL17hu43vcCXmGgnxCcTHJzCgzacZ0gPQ593HCXykkqFp0AwO7XGjqXh+Qid1N9rQnhOMee0nexuqVrcsL73zOFmyeBN1IZo3nvkcgNy+OXh1ZCdKqcIkJsK4N2awf+sxp+N27Nngjl4vVaUYA4a1A8DLy4vpX61i46r9AHz02bPk9/fJcD0JnoFFS7ZsAcorpcoAJ4FOQBeXPPOBEKXUL0Ad4JLWOs0fvXsmps+c6XInjpsFaALUuxPHdzjHbSewQXmKlSxArw4TmfDhAl4e2tZtvt4DWvDrT2E812Ei0Zev0vrxWumWX7ZgO8P6/5jyWK+24MevVtOv0xR+mLwqxf4kbDYvQgYFM+y1n3mh8xc0aVmFkqX9nfUHlaNYiQL0enoS4z9eyCtvtAEgPj6BryYuo3enyQzoPZX2TwXayx49HM77obPZtf1YinNmZh3duB7HGy9+T99nJtO302Rq1ytHxWrFAahRuzT1mij6dvzC7bns2horipb25/kWo5n49q+EvPe423zPDXqUed+tp3fL0URfukqrpwLt+2w2L3oNCmbr+gNOZZb/+g9vPf9thurIkzUFNq5o6Gk2iolvzSHkvSfc63mjDfOmraV3808MPU8nG9y7txwhpP04QtqP4+dJKwDj+oV2+5L+7cbRv904HmqoqFizZIrjvvDU5zzSqholywQ466pf3mi7j5ntYkhb+3fvH9qGt175MUXZjj0bsG3LYZ57fCLbthzmmZ4NAVi1eBf9ukyhX5cpfPLOr5w9dTHDBl/gI5UpWiaA5xt+yMQ3fyFkxNPu62dIe+Z9s5rejT4k+uJVWnWqC8DcL/8kpPVoQlqP5ruRC9i16SDRF6/Yy4V2nERI69E3ZfAFNqlkaGoygolDZxHy0VPuNYW2Y963a+j9yAjjmj1TBzAMu5APnuK93t/Qp+UoPur3vb1Mn3ef4O81+3ix2Uj6B4/m+MGz2GzOI2B3+nodPXSOkG5f0a/LFIa9PJ0BQ9th8zZ+aj8KnU3fzulOsBQEtNZxQAiwFNgHzNJa71FK9VFK9TGz/QEcBg4CXwP90jvuXWH0KaVKK6X2K6W+V0rtVErNUUrlUkodVUq9o5RaDzytlOqslNqllNqtlBrlUD5aKfWpUmqrUmqlUirA3F5WKbVEKfWPUmqdUqqiuf07pdRYpdQqYCbQB3hNKbVdKdVQKXVEKZXVzOtr6siaivYXlFJblFI7lFJzlVK53JxjVBpa2iml/lJKbVNKrVBKFcpovQU1rsiKhdsB2L/rBLl9cpDfP0+KfDUCy7BuxV4Ali/YTlCTiumW3731GJcvXU1xrMREyJ07OwC582RPVZuqXIxTJy5w5tRF4uISWLN8D/UaKac89Roplv+xwzj/npPkzpOd/AXyEHk+moPa+NG7euU6/x2NwL+gLwDHj0Zw4r/zGayhO1tHsVevA5AlizfeWWwkmk+LbZ8OZOa09dxw8Hy5o26zKqz87R/j2Dv+I49PTvIFpPQS1Agqy7olhrdsxW//ENS8in1f+2712bBsNxfPRzuV2f33EbfXLz08TVPd5g56tv9HHt8c7vXULeesp0WVFHlcib2SfP2yZE2+fo7ExcWzetlue3tIIqhxRVYsMtvF7hPkzmO0C1WlGKeOR3Lm5IUUZR3b0oqF21McEwyDZfXS3fbPOXJmS/M71G1ZlZVztxg6th0jj29O8pn3iiM16pdn3SLjXlsxZzNBraqlyNO4w0Os+T3NJcAyRN2WVVn5q4Mmn5zkC3CjqV451pn3/4q5mwlqaWhq0v4hNizZSfipiwBcMttRrjzZqfrwAyyd+RcAcTfiiYmKpYKLsX6nr9e12BskmKMcWbNlcZqoeSXm2q1UmWA11szeRWv9h9a6gta6rNb6I3PbFK31FDOdqLXub+6vprX+O71j3hVGn4nCCHSsDkSRbNHGaq0bAGuBUUBToCYQqJR6zMyTG9iqta4FrAHeNbd/BbystX4IGAQ4ul4qAM211k8CU4BxWuuaWut1wGqgjZmvEzBXa30jFd2/aq0DtdY1MKz1592c4/U0tKwH6mqtH8SYsv1GBuoKAP+CPoSfibJ/jjgbRQGXDt83by5iLsfaO6mIs1H4F/TJcHlXpoxZTO9XW/Lj4oG88Fqr1LUF+BB+7pL9c/i5KAq4/FgXCPAh/JzD+c9dTpGnUBE/ylUozH43Q1YZ4U7Wkc3mxRe/9GHmysFs23QYvdsYdixWqgBVHyzFhB9eSFNbgUK+RJxJrqOIs5fwL+SiLV8uYqKuJms7c4kCZp4ChXyp16IKf8zYlPEKSQdP01SgkC8Rpy8m6zlzCf9Cfin1XHbUc5ECDnkqPViKzxe8xvvfPk/J8snPVDabF5Pmv8aMv95l2/p/0TuO446Is5fwd2mX/gV9CD/r2HajKBDgS4GCvoSfveS2bL4CuYmMMAyYyIho8ubPneJcjVpWZZU5HA7Qo2/TVGrGoEDhvESccqif05fwL+xaP7mdr9fpixQonNcpT/YcWandpCLrF++wb0tMhI9+6svERYMI7hKUpg4nTYX8nDWduZgBTZfs16z4AwHk8cvFqF/6M3HBQJo9URuAwiULcOl8NAPHdGbSotcZMPIZsufMhn8h5++SGddLVS3GV7P68+XMfkz8eIH9ewB8NKlbhutK8BAsMvruBHeT0Xdca50U9PUj0MBMzzT/BwKrtdbhplv0J6CRuS/BId+PQAOlVB6MIdvZSqntwJeA4/o2s7XWqblivgF6melewLQ0dFc1PXe7gK6Ao4thttY6Ph0txYGlZvnBLuXTxivlxB5Xb4WbLMntMQPlXWn7dCBffrqEZ4PH8uWYJWloc3Ne1yxuxSUnc+TMyjsfP83k8Uu5Ynplbpo7WEcJCYn06zSFrq3GoqoWo1TZggB4e9vI45uDAd2/vllpKfoKLzcVmXT+l4a2Y+roxSQk3L4OxtM0uWsjKa9f6nkO7TlJj8Yj6N9uHAt+2MA7k3vY8yQkJBLSfhzdGnxIhRolKFU+dSd7itsilXNmpP5SQ1UtxrXYGxw7dA4w4meLlsifZhn358tI+3bOU6dFVfZuOeI0tPv6E+N5+dExvN19Cm17NKRqnbIZ+h4Zu2apa7J52yhfrTjv9Pqat7p/SeeXW1KsTADe3t6Uq1qcRT9uIKTNp8RevU7Hvs3c9zV3+Hrp3Sd5sePnvNztKzr1bEjWbMkRPMNCpqd/AEG4Q9xNEzlcb7WkzzHmf3dTl9M6lg24qLWumUqemFS2o7XeYA45Nwa8tda7U8sLfAc8prXeoZTqiREf6HqOtLR8BozVWs83J5QMT+NcAP2TEpHhlwkonOyF8S/kS2T4ZafMly5cIbdPDmzeNhLiE/Av5Mt5M0/E2ah0y7vSom1NJn+yGIC1y/cwLJV8EecuE1Aw+ek+oGDKY0eciyLAwevmX9CH8xFGHm9vG+983JE/l+5mw+r9aWpKjS9+6cOBPafueB3FRMey4++jBNYrx7FD54g4G8WGlfvcamrbNYjWHY14swO7Tjh5QPwL+XHewfNpaIsht2/OZG2F/Yg8Z5y/fNXihI7rDBiek8DGFYmPjyfMHKbOKJ6mqe2z9WjdsY6p5zj+RZI9Of6F3eiJjCG3j6OevESaea5EJw+3bVmzn/7vPY5vvlxEXUg2bmIux7Lzr8PUblSRY/+eTaHHv5CfvV0mEXE2ioBCjm3Xl8iIy2TN6k1AIT+3ZS+cjyG/fx4iI6LJ75+Hi5HOXVCTltVYvSTZy1e5egnKV3Jeh3XUrBDWLdpO686G5+3Ajv/wL+pQP0X8OH/WTf04Xq8ieYl08G4BNG5fi9XznYd2I83jXDofzcYlO1E1S7L7r0Mp6gegbbf6qWsqnDcDmvzs1yzizCWiLsRw7ep1rl29zu7NhyhTqSh7thwm4swl9Pb/AFj/xw469m3GltXObSuzrhcY4SaxsTcoXbYg/+5Lc1Kl4MncQ+/evZs8fSWVUkljCJ0xhj0d+QtorJTyNyd1dMYYygXjeyZFC3cB1muto4AjSqmnwXiHnVKqRirnvgy4Bgr9AMwgbS8fZrnTZsxfV3cZ0tHihzFzB6CHu/IufJ6U2LhqH83bGnZkxWrFuRIdax+OcGTH30dp2Nx4u0uLdjUJM42oTWv2Z6i8I+fDL1P9odIA1Hy4TKr59L6TFCuRn8JF8pIli43GLaoQts45sD9s3QFaPGpUQ8UqxYiJvkakGb8zcFg7/jsaztz/Y5iwX6cpd6yO/PLlIneeHABky56FWnUe4PjRCAA2rt6fat0s/CmMkA4TCOkwgbAVe2hmzpysWKMkMdGxXHBjdO/cdIiGrY14p+aPP0TYyj0A9Go2ip5Njb/1S3fx+fB5N23weaKmhT9utE+8CFu+O1lPzZLEXE5Fz18HnfWsMPTkc5hJWaF6CbxsXkRduIJf/tzk9km+fg/WK8fxw+dSHDdLFm+atKzKpjXODx6b1u6neRuzXVRNbhd67ymKlchPoaJ5U5TdtFbb21LztjUJcziml5cXDZtXZvWy5OfLhXO20KW18wSKNztOYuH36+2TL8KW7qLZk8YkmooPljLqx8UoBti58V8atjHuteZPPUyYw3ly+eSgWt2yhDkMK2fPmY2cZuxu9pzZqNWoIkfTmDS4cPoGQh4dQ8ijYwhbtptmTzhqusqFcDeawg7S0Lz/mz+ZrGnTsl1UDXwAm7eN7DmyomqW4vjBs1wIv0z4qYsUe8CYaFGzfnn++/cMB1yG5e/09SpUNK994kbBwn4UL1WAs6cvkiNnNrfxwoKQmdxNnr59QA+l1JfAvxjvmHs5aafW+rRSagiwCsPr94fW+ndzdwxQRSn1D3AJeMbc3hWYrJR6C8iKETOXHLSSzAJgjlKqA0bc3TqM4eMPMQy/tHgbwyA9BuwipfGYRGpahmMM+54ENgGpW1IubF7/L4ENKjBt/gCumcsQJPHBZ10Z9/58IsMv8+2E5Qwd+RQ9+zXloD7D0nlb0y0f+vFTVH+oNH55c/HjkoFMn7KapfO2Mv6D+fQdHIx3FhvXr8Wlqi0hPpFJYxYzYkJXbDYvli7czrEj4bQxf8AX/fYPmzf+y8P1yvHdnBCuxd5gzIfzAahSowQtHq3B4YNnmfyDsbbl1Ml/siXsIPUbK/q9Hoxf3lx8OLYzhw6cZeirP2V6HeX392HQ+49js3lhs3mxdvke/jKN2qXztjFweAe+nJ32RKstq/cT2FgxdcUbxF69zrghs+373v+6F+OHzSHy3GWmjllM6LgudH+1JYf2nmLZ7C1pHhfgzbGdqf7wA/jmy830tUOZPnE5y+akX87TNG1ZvZ/AJpWY+meooefNWcl6vnmO8UPnEHkuiqmf/EHo+K50H9iaQ3tPsmy2scRPg+BqtOkSRHxcAtev3WDkAKOt5AvwZdDoZ7DZbHjZvFj3xw42r0rpnf16bgjLft/GscPhtHnSiC1bNPdvo13Ur8C0353bRUJ8Ap9/8gcjJnXD5m2zlwWY+d06ho3sSOsOtTh35hIfOXyXarVKEXEuijMnL6Rbj0718+deAptWZur6t436ef3n5Pr5/iXGvzGDyLNRTP14AaGf96D74DYc2n2CZb+E2fPVa12drWs1164mh1DkC/Dh7a+N8GRvbxurf/+HfzLocd+yai+Bj1Ri6pphhqbBvyRrmvYC49+caVyzkQsJ/awb3V8P5tCekyybZTzgHT90jr/X7GfyksEkJCSydOYmjpmzmScPn8sb47uRNas3p4+fZ9ygGU7xdGCMQNzJ61W1Zkme6dmQuLh4EhIT+WzkIqIuXiFv/twMH9uFrNnuyEITwp3kDizObBVe6cVoeQJKqdLAQq111VssH621vq2PWEqpp4AOWmtPjMpNBGj14Lvp5bvjLN32nj3dsu77FioxWLbpHXva0+onuMKbFipJZvEB+8R3j9DkpKfcYAuVGCw+ONqebvWQB7ShfxzaUIkBFipJZvHxCfZ0cOnXLFRisPho8rqPnnbNhDS5mbCtO0Zw5aG33VBavHeEJd/tbvL0eQxKqc+AYOBRq7UIgiAIgiBkhLvC6NNaHwVuyctnlr+tXj6t9cuu25RSnwP1XTZP0FqnF/MnCIIgCIKncheMiGaUu8LouxvQWvdPP5cgCIIgCII1iNEnCIIgCIKQGrdxrVOrEaNPEARBEAQhNe6h4d27aZ0+QRAEQRAE4RYRT58gCIIgCEJqiKdPEARBEARBuJsQT58gCIIgCEJqiKdPEARBEARBuJsQT58gCIIgCEJqyJItgiAIgiAI9wGJCVYruG14Jd5DY9WCHbmogiAIwt2Ol9UCAILLDLztv6mLj4y15LuJp08QBEEQBCE17iHnmEzkEARBEARBuA8QT989TIt6H1otgeUb37KnG7UfbaESg7XzB9vTrQLfs1CJwdIt79rTwcVfsVBJMotPTLSnW1cZZqESgyV7PrKngyu8aaESg8UHRtnTwSrUQiUGi/VIezq4zEALlSSz+MhYe7p1zXcsVGKwZPv79nSZnz62UInBka5D7OkWDT5KI2fmsHy99fe5RyMTOQRBEARBEO4DZHhXEARBEARBuJsQT58gCIIgCEJqiKdPEARBEARBuJsQT58gCIIgCEJq3EOePjH6BEEQBEEQUiPh3nkjhwzvCoIgCIIg3AeIp08QBEEQBCE17qHhXfH0CYIgCIIg3AeIp08QBEEQBCE1xNMnCIIgCIIg3E2Ip+8+onadB+j3aits3l4sXrCdmdM3psjT77WWPBxUjmuxNxj94QIOHjhD1mzejP2iO1mzZsHb28a6Vfv44du1ADR6pBLdnm9EydL+vNx7Kgf2n74lbQ/XKs0rvZth8/Zi0bKd/DR3s9P+ksXyEzogmAplC/LN9PX8Mm+Lfd+br7SmXu0HuHDpCj1f/u6Wzg9QO6gsfV5vjbfNxuLftzLr+w0p8vR9vTUP1y9PbOwNPn1vHgf1GQAGvt2eOg0qcPFCDC91mmzP37BZZbq92JgSpQN4pefX/Lvv5uqnz/tPEti0MteuXufT137i0O4TKfIUKpGf0C964pM3Fwd3nWDMgOnE3YjnyT5NeeTx2gB4e9soUb4wnWoMJfriFTo835jWnYPw8vJiyc9hzPt2dYY19R3ShsBGimtXb/DpsLkc3HcqpaZi+Rgy5hl8/HJycO8pRg+ZQ9yNeB5pU4OOzzcC4OqVa3z2wXyOmHUIYLN5MXFWP86fjeLd/tMzVkdvtSewsakndBaH9rrRUzwfoeO64OOXi4N7TzJm8EzibsTb91eoVpyxs/oz8tWfWb90FwDf/fkmV2KukZCQSHxcAgOe/CzDdWTXNqydoS32Bp+Gzk5d29jOydremJVS28x+jHztZ9Yv3X3zGt59nMAmlbgWe51PB83g0J6TbjTkJ/SzboaGPScYM/Bnu4Zqdcry0juPkSWLN1EXYnij0+cAvDbqGR5uWpmL56Pp2zrt92r3feNRAhuUN+rhnd846KafKFQ0L0NGdTTazL5TjB72K3Fx8WmW//6P17gSc52EhATi4xJ4peuX9uO171SH9p3qEB+f8ZmXjYo8wLu1m2PzsjHz4Ham7N3ktL9OwZJ81fhJTkRfAmDJcc1nuzdQJJcPnwa1IyBnbhISE5lxcDvf6b8zfF5Hatd5gH4DWmKzebF44XZm/hiWIk+/AS15OKis0U+PWJjcT0/qTtZs3mY/vZ8fphr99APlCjJgUDA5c2bjzJlLjHxvHleuXL8lffcl99C7d8XTsIi4ngAAIABJREFUd59gs3nx8qBghr4+g95dpvBI8yqULO3vlOfhoLIUK56fnh2/YPyoP3hlcDAAN67HM/jlH+nT42v69Pia2nXLUqlKMQCOHj7He0Nns2v7f/+XttdeasHg9+bQvf9UmjWqRKkSBZzyREXHMvGrlfzy25YU5Zes3M3g4XNu+fxJGvq/8ShvDfiJFzp+ziMtq1KyjHP9BNYrR7GS+en1xGdMGLGAl0Pb2PctW7idYa/8mOK4Rw+d4/03ZrFr27Gb1hTYtDJFywTwfIMPmPjmTEI+7ug233NDOzDv69X0bvgh0Zeu0KpTEABzp/xJSKtPCGn1Cd+NXMiuTQeJvniFUqoIrTsH8WrbT+nXchQPN69C0TIBGdPUsAJFS/nzXPBYJgyfR8g77d3me35gK377YQPPPzqO6KhYWj3xEABnTl5gcM+v6fvEZ/w8ZTUDhj/mVO6xbvU4fjg8o1VEYGNF0dL+PN9iNBPf/pWQ9x53m++5QY8y77v19G45muhLV2n1VKB9n83mRa9BwWxdfyBFudDuXxHSYcItGXyBjUxtLccY2ly+a7K2YENbqzFER12l1VO1M6QtQxqaVDI0PDKCiUNmE/LhU+41hLZl3rdr6N30Y6N+OtYBILdPDkI+eJL3XviWPq0+4aP+39vLLJ+7hbd6fpW+hgblKVqyAM+1n8CED+YTMqyd23zPv9qS337cyPPtJxht5vFaGSr/5gvT6P/MZCeDr3rtMgQ1qUjfpz/npScnpasRwOblxfuBLem5ahYtF35F+9KVKedbIEW+LeEnaLN4Km0WT+Wz3caDYVxCAh9tXUmLhV/zxNIf6F7hIbdl09Vg8+Llga0ZOugXej/7pft+um5ZipXIT89Okxk/+g9eGdQaMPvpAT/Sp+c39On5DbXrPkClKkUBGPhmG76dsooXe3zNhrWap7sE3bS2+5nExITb/mcV96zRp5SKtvDcTZRS9W5XvtuiqXJRTp2I5Mypi8TFJbB6xR7qNazglCeooWLFEsPLsW/PSfLkyUH+AnkAiL16A4AsWWxkyWIj0Yxx+O/YeU78F/l/aatUvggnT1/g9NlLxMUlsHLdfhrUKeeU5+KlK+w/eMbtU/uOPSeIio79vzSoKsU4dTySMyfN+lm+h6DGFZ3yBDWuyIpFOwHYv/skuX2S62f3tv+4HHU1xXGPH43gxLHzt6SpbstqrJxjeDz3bz1KHt+c5CvomyJfjfrlWbdoOwArZm8mqFW1FHkaP1aLNb//A0CJcoXYv+0Y12JvkBCfwK5NB6nXunqGNAU1rcTK+dsMTTuPk8cnB/n9fVJqqvMA65btMTT9vpV6zSoDsG/7f0RHxZrl/8O/kJ+9jH8hXwIbKZbMzbiHpG6zKqz8zfhe+3f8Rx6fnOQLcKMnqCzrzLa94rd/CGpexb6vfbf6bFi2m4vnb2+XUbdZZVbO22pqO25cP3fa6pZlnenBW/HbVoKaOWqrx4alu7h4PubWNLSoyspfjfrcv/1Y6hqCyrFusdG2V8zdQlDLqgA06VCLDUt3EX7qIgCXHOpo9+bDXL54JV0NQU0qsnKh0T737zphtpk8KTUElmHdir2GhgXbqfdIpZsq70jbjoHMmraOGw4e0/SoUaAoxy5f4Hj0RW4kJLDg2D5alKiQfkEgPDaGPRfOAhATd52DlyIonCtlPaeHquTaT++lXgPXfroCK5YY12rfnlOp99Pe3vZQtOIlC7DTfDDfuuUwDRurm9Ym3Bvcs0afxTQBMmLMZTTf/41/gA/hZ6PsnyPCL+Pv0vn7B/hwzilPlD2PzebFlO96M3vRQLZuOcJ+N8NUt6ytQB7ORVy2fw6PuExAgbQ79dtNAdf6ORvltn7Cz15KznMuigIFb75jz7Cmwn5EmD+2ABGnL+Jf2M8pj2++3MREXSXBNIYjTl+kgEue7DmyUrtJJdb/sQOAY/o0VeuUxSdvLrLnyEpg08oEFM2bMU0FfQk/k1wH4WejKFDI2RD1zZuLmMuxdk3hZ6Mo4MZYbfVEbf5el+zBeim0Dd9+uoTEmxhKKVDIlwgHPRFnL+HvqidfLuc6OnPJrrlAIV/qtajCHzOch/HAiN3+aGpvJv76MsHPPJxhTc7aHK7fmZvUVtCXes2r8Mcvf930uZ00nM5IG4p10WDkKV6mIHn8cjJqRj8mzn+NZk/U5mZx22YKptdmLtnvrbTKJybCiMnd+eznPgQ/+ZA9T7FSBahSqxTjp7/IJ988lyGdhXPm4fSV5D7gzJXLFM6Z8v6u5V+MPx59jmmPdKS8n3+K/cVy+1E5fyG2R9x8H+kf4EP4ueS+0LEPtufx9+HcOYe+6lwU/v4O/fS03sxe8Bpb/z5s76ePHg4nyDQeGz1SiYBCKe9HIQ0SEm//n0Xc8zF9Sikv4BMgGEgEPtRaz1RK5QF+B/IBWYG3tNa/K6VKA4uB9RgG2Umgg9Y6pRvHOP4rQB8gDtgLhJqf45VSzwIvA3mBt4BswHmgK5DTTb7ngYVa6znmsaO11nmUUkWAmYAvxjXrq7VedzP14IVXim2uE5K8Umaxe/QSEhLp0/MbcufJzvCPn6b0AwEcvYlhuDS1uT3vbTn0TWhIv37cVOEd1ZkRTW7zuHyu06Iqe7ccIdr0yhw/eJbZX6xgxIz+XI25xuG9J4mPy9hwg3tNiS55UpZzzVP94TK0euIhXu9mDA8+3FhxMTKGg3tPUT2wTIa0pH4ulzxu276R6aWh7Zg6ejEJbjrh1zt/QeS5y/jlz82I73pz/FA4u/8+chPaMnD90rgvXxrWlqlj3Gu7rRrSqENbFhvlq5YgtOtksufIyti5r7B/2zFOHsn4vX/rbSb98gN7fkNk+GX88uXm4yk9OH4kgt1bj+HtbcPHJyevdvuKClWLMfHHl25Np8vdtCfyDA3mfc6VuBs0KVqWLxs9SdMFycPKubJkZXLDx/ngnxVEx918zFxG7p20dCYkJNKnl9lPj3iK0mUCOHoknE8/Xkj/V1vybK8GhK3/1ylmVLi/uOeNPuAJoCZQA/AHtiil1gLhwONa6yillD+wSSk13yxTHuistX5BKTULeBJIGbBlEAqU0VpfU0rl1VpfVEpNAaK11mMAlFL5gLpa60SlVG/gDa31627yPZ/KOboAS7XWHymlvIFcN1sJ4eFRTk93/gE+nHfwrgGEn7tMwUK+7LHn8eV8hPOQV0z0NXZsO0btOmVvm9EXHhFNQYchwgB/HyIiM3d0PuKcS/0U8k1RPxHnLhNQyA84buQp6EtkuHOe/5e2PRrS2oy3ObDjP/wdPHD+RfJy3sHTCHApMprcvjmxedtIiE/Av0heIs8452ncoRarzaHdJJb9sollvxjerR5vtnXyBrnSrnMdWpsxcAd2nyDAwVMUUMiXyHPOdXDpwhVy++Swawoo5FxPZSoU4tX3HuftPt9z+ZLxLFXlwVLUbVKRhxtWIGv2LOTKnZ03Rj7NJ6GzU9ZR1yBadzQ8bwd2nXDyXPkX8uO8gxfE0BPjXEeF/eyay1ctTui4zoDh8QpsXJH4+HjCVuy157kUGcPG5XtQ1Uuka/S17VLXRVtewIjn9C+cUW1RydrGdjG15SKwsSI+LoGwlXvT1tCtPq071TU07DyOf5H02lAMuX1zuGgw8kScvkhUZAzXrl7n2tXr7N58mDKVit6U0Xc+PCplmwlPr8342fNEnL2Uavmk/5cuxLBx1T5U1eLs3nqMiLNRbPjTqKcDu1NOXHHH6SuXKZIruQ8onMuHs1ed+yFHQ271qUN8ENiSfNlzcuHaVbJ42Zjc8Al+P7qHpcdvLQYz/NxlAhxGD9z1weHhURQs6NBPF0ytn/6P2nUf4OiRcI7/d57QgTMAKFYiP3WCnMNnhHSQJVvuKhoAM7TW8Vrrs8AaIBDDbzNCKbUTWAEUAwqZZY5orbeb6X+A0mkcfyfwk+mti0slT3FgqVJqFzAYqJJKvtTYAvRSSg0Hqmmtb9rS0PtOUax4fgoXyUuWLDaaNK9CmEtweNj6AzRvbcSDVapSjJiYWCLPR+OXNxe582QHIFu2LNSqXYbjxyJuVkKq7P/3NMWL5qNIIT+yZLHRrGFFNvx18LYdPyPovScpVrIAhYqa9dOiCpvWaqc8m9ZqmrcxYt8qVi3GlehrRN7mOLCF36+zT74IW7KTZk8ZBkTFWqWJuRzLBRejAWDnxn9p2KYmAM2ffpiwZbvs+3L55KBa3XKELd3lVMbPHD4PKJqP+sE17PF+7lgw4y/6PzmJ/k9OImzlPpq1f9DQVL0EMdHXiIxI2Rx3bj5Mw5ZGM2/eoRZhf+4zzlfEj7cndGX0kDmcdIh1nDZ+Gd2afUKPlmMYOWgmO/467NbgA1j4UxghHSYQ0mECYSv20OxxY1ivYo2SxETHcsGNIb5z0yEamm27+eMPEbbS+Mns1WwUPZsaf+uX7uLz4fMIW7GX7DmzkjN3NgCy58xKrfoVOPrvmRTHTaHt502EPDaRkMcmGtoeq2VqK2FcP3fa/jpEw1ZVTW21CDONlV7NPqFns1H0bDaK9Ut38/l789I1+AAWTt9ASJtPCWnzKWHLdtmHZCvWLJW6hk0HaRhstO3mTwYSttyIMdy0fDdVA8tg87aRPUdWVM2SHD94Nl0NjoSt2k+ztkb7rFitODHRsURGpLxvdv59hIbNjdjP5u1qErbaaDOb1mi35bPnyErOXOY1ypGVWkFlOWpq27hqHzUCHwCgWMmMTajYef4UpX3yUTy3H1ltNtqVqsSKE/865fHPkduerlGgCF5eXly4Zjy4jKr7KAejzvPt/pSTzTKK3n+KYiXyU7iIn9lPVyZsg2s//S/NzRjcSlWKGveg2366NMfNeyxvXsNP4OUFXXvUZ+HvW29Z431JQsLt/7OI+8HT58ZhDhhDrAHAQ1rrG0qpo0AOc981h3zxGEOxqdEGaAS0B95WSrkz6D4Dxmqt5yulmgDDUzlWHKYhbg5LZwPQWq9VSjUyzzVdKTVaa/1DGppSkBCfyKSxS/h4XGds3jaWLtzOsSMRtDV/lBbO28rmjQepE1SO72f351rsDcZ8tACA/AXy8Mbb7bHZvPCyebF25T7+2mgYZfUbKfoPbIVf3lx8OOYZDv17liGvzbgZacQnJDL+yxWMGf4UNpuNP1bs4ujx87RvXQOA+Ut2kD9vbr4a243cubKRkJDIU+0fonv/qVy5ep13BrXlwaol8PPNyZypfZg2YwOLlu9K56wp6+fzT/5gxMRnsXl7sWz+do4dDqeNOet00a//sHnDvwTWL8+03142lo54/3d7+dAPn6D6Q6Xxy5uLHxe+xvSvVrN0/jbqNalIv0HB+OXLxQfjunDowBmGvfJThjRt+XMvgU2rMHX9O8TGXmfcwORy7//wEuMHzyDybBRTR8wn9IuedH+jDYd2n7B78ADqta7O1jX7uXbVeajpra+exzdfbuLi4vli2GyiL7mNXkjB5rWawEYVmLp4INdibzD2rV+TNU3uzvh3fiMy/DLfjl3KkDGd6PFKCw7tO8VSc3JG1z5N8fHLRcjbxqzf+LgEXnnmiwyd220drd5PYGPF1BVvEHv1OuOGJBuK73/di/HD5hB57jJTxywmdFwXur/akkN7T7Fsdto/zPn8fXj7824AeHt7s3rBNv5Zd3Pemy1rNIGNKzJ1+WBir95g3FAHbV/1ZPxbcw1to5cQOq6zoW1f+tpuSsOqfQQ+Uompq4caGt5Ivjffn/oC40NnEnkuiqkjFxL6WXe6v/4oh/aeYNksI47w+KFz/L1WM3nxIBISElk68y+OHTCM3zcnPEv1uuXwzZeb6RvfYfr4pfZyjmxed4DABuWZuuBVo828+1uyhknPMv693402M345Q0Y9TY/+zTikT7P0t61pls9XIA/vjDW8tN5ZbKxavJN/zH5p2bxtDHzvMabM6Z/hocz4xETe/Xs5PzTthM3Li9mHdvLvpQi6lDcecn7+dxuPlqxI1/IPEp+YQGx8HK+sN/qA2gHFeeKBauy/cI5FwUYM4egda1h96lAGr5SB0U8v5eOxnbHZbCxdtMPopzuY/fTvW9kcdpA6QWX5fmY/o58esRAw++lh7ZL76T+T++lHWlShvdmXrV+jWbpox03pEu4dvFzjBe4VHOLhngBeAh4F8gN/A3WAZ4ByWuuXlVKPAH8CScFEC7XWVc3jDALyaK2HuzmHDSiptT6qlMoKnAAURmyer9b6XTPfNqC31vofpdQ0jOHgJkqp113yvQX4aK3fVEo9BvymtfZSSpUCTmqt45RSrwKltdavpvH1EwFa1PvwFmvv9rF841v2dKP2aa/llRmsnT/Ynm4V+J6FSgyWbnnXng4u/oqFSpJZfGKiPd26yjALlRgs2fORPR1c4U0LlRgsPjDKng5WoRYqMVisR9rTwWUGWqgkmcVHxtrTrWu+Y6ESgyXb37eny/z0sYVKDI50HWJPt2jwURo5M4fl662/z1MhNadNptLat9dtN5SWRE2z5LvdD8O7v2EMwe7AMOze0FqfAX4Caiul/sbw+u2/hWN7Az+aw7bbgHFa64vAAuBxpdR2pVRDDM/ebKXUOsBxXNQ139dAY6XUZgzDNGmdhibAdtN4fBKYcAtaBUEQBEG4j7lnh3e11nnM/4kYcXSDXfZHAKmtUFnVId+YNM5xAyNm0HX7AcB14bPfM5ivrkN6iJnve+B7BEEQBEHIVBItjMG73dyzRp8gCIIgCML/zT0UBidGXwZRSn0O1HfZPEFrPc0KPYIgCIIgCDeDGH0ZRGvd32oNgiAIgiBkMha+QeN2cz9M5BAEQRAEQbjvEU+fIAiCIAhCaiTeOxM5xNMnCIIgCIJwHyCePkEQBEEQhFRIvIdi+sToEwRBEARBSA0Z3hUEQRAEQRDuJsTTJwiCIAiCkAr30vCuV+I9tNK0YEcuqiAIgnC342W1AIAW3s/c9t/U5fEzLflu4ukTBEEQBEFIjXsopk88fYIgCIIgCPcBMpFDEARBEAThPkCMPkEQBEEQhPsAMfoEQRAEQRDuA8ToEwRBEARBuA8Qo08QBEEQBOE+QIw+QRAEQRCE+wAx+gRBEARBEO4DxOgTBEEQBEG4D5A3cgh2lFLewCta63EeoOWJtPZrrX/NLC2OKKWeBpZorS8rpd4CagEfaq23WqHHk1BK1Uprv9V1pJTKCZTUWmsrdSShlGoAlNdaT1NKBQB5tNZHLNIyQGs9Ib1tmawpL9AdKI3Db5XW+hULtIwBpmmt92T2ue8WlFL1ge1a6xil1LMYfeMErfUxi6UJDojRJ9jRWscrpToAlht9QDvzf0GgHvCn+fkRYDVgidEHvK21nm3+YLcCxgCTgToW6UEpVQEYDJTC+cexaSZL+dT8nwOoDezAeHdmdeAvoEEm67GjlGqHca2yAWWUUjWB97XW7S3S8y5GHSlgGpAV+BGob4UeoAfgauD1dLMtM/kD2ATsAqx+D9Z+4CulVBaM6zVDa33JKjHmQ8KbQGWM+w2w5J53ZDJQQylVA3gD+Bb4AWhsoSbBBTH6BFc2KKUmATOBmKSNme2l0Vr3AlBKLQQqa61Pm5+LAJ9nphYX4s3/bYDJWuvflVLDLdQDMBuYAnxNsr5MR2v9CIBS6hfgRa31LvNzVWCQVbpMhgMPYzwwoLXerpQqbaGex4EHga2mnlNKKZ/MFqGU6gx0wTCE5zvs8gHOZ7YeF3JorQdarAEArfU3wDdKKQX0AnYqpTYAX2utV1kg6SeMProN0AfDaA+3QIcjcVrrRNNxMEFr/a1SqofFmgQXxOgTXKln/n/fYVsiYNUTZOkkg8/kLFDBIi0AJ5VSXwLNgVFKqexYHxsbp7WebLEGRyomGXwAWuvdpmfNSuK01peM32yP4Lr5A5kIoJTKbZGOjcBpwJ9kTy3AZWCnJYqSma6UegFYCFxL2qi1jrRCjBn+UtH8i8DwZA9USr2kte6UyXIKmEbVAK31GmCNUmpNJmtw5bJSagjwLNDIrK+sFmsSXBCjT3AiyVvjQaxWSi0FZmAYn50AK56sk+gItAbGaK0vmp7HwRbqAViglOoH/IYH/DgC+5RS32AMVyZi/Ajss0hLEruVUl0Ab6VUeeAVDIPHKmaZDw95TcPmOQxPbaZixlsdA4Iy+9wZ4DowGhiG0Y4w/z+Q2UKUUmMxQk7+BEZorTebu0YppayIEb1h/j+tlGoDnAKKW6DDkWcwvMbPa63PKKVKYlw/wYPwSkxMTD+XcN+glCoEjACKaq2DlVKVgSCt9bcWanocaGR+XKu1/s1CLdO11t3S25bJmtwF/ydqrTP9xxFAKZUD6IvDNcMYCo+1Qo+pKReG8dASI85wKfCBxZpaOOrRWi+3UMsTwCiMGFov8y9Ra+1roaZDQB2tdYRVGkwdXsBbwKda6ytu9vtldnyfUqotsA4oAXwG+ALvaa3np1lQuO8Ro09wQim1GCNQeZjWuoYZuLxNa13NQk2lMGY5rjB/vL211pct0rJVa13L4bM3sEtrXdkKPZ6Kp82U9VSUUr44T76xaujyINBOa221R9aOGWPYyZ2hZYGWf7TWD1mtw5NRSl0m2SObDWNoN1pr7WedKsEVGd4VXPHXWs8yYzPQWscppSybHGAOfb0I5AfKAsUwJi00y2QdQ4ChQE6lVJS52QtjCOqrzNTiilIqK86etdXAl1rrG6kWurN62mMM63jETFlTU22M61caZyOrukV6XsKIm72KMTPVC4uGLk3OepLBZxIPbFdKrcI5bCHTl2wBNimlArXWWyw4dwrMGfuTgUJa66pKqepAe631h1Zp0lo7TURSSj2GMXlK8CDE6BNciVFKFcB8YlNK1QUsW5oA6I/RcfwFoLX+VylVMLNFaK0/Bj5WSn2stR6S2edPh8kYT9VfmJ+7mdt6W6TnXTxrpiwYsx0H4xnLf4Axm7mK1UOXDvytlJoJzMPZwLJqaSRMLfMsPL8jjwAvKaWOYaxqkDT8bclDA0b852DgSwCt9U6l1M+AZUafK1rreUqpUKt1CM6I0Se4MhCYD5Q1lyQIAJ6yUM81rfX1pFmX5nCzZTEJWushSqlipFwTb61VmoBArXUNh89/KqV2WKbG82bKAoR7WLzTIcDyYUsHfDH0tHTYlohF62GaYRPdtNbNrTi/G4KtFuBCLq31Zpd7LM4qMZBiQX0bxjqUEj/mYYjRJzihtd6qlGqMsWisl7HJmmFCkzVKqaRh1RZAP2CBVWKUUiMxZhDvJXlNvESMyQpWEa+UKqu1PgSglHoAC9frw/NmygK8a84oXolneLKGABuVUn9h/dClfV1MT8FcKP6KFZMkUtFzzFx0uKG5aZ3W2soHqwilVFmSR2Sewlh6x0raOaTjgKNAB2ukCKkhRp8ApPnaswpKKSt/HEOB5zGG5V7CWKX/G4u0gLGortJaX0s3Z+YxGFillDqMYaiXwlhA1ipexpgpew34GWOmrNXDTr0w1lfLSvLwrmWeLIxhuT/xkOFmpdQ03HhltNbPWSAniVhgl1JqOc4LxVvxGrYBwAskt5cflVJfaa0/y2wtJv0xYokrKqVOAkeArhZpSeIbrfUGxw3KeDXbOYv0CG4Qo09IwiNfe6a1TsCIX8n0NcxS4TCG4eAxRp/WeqXpUUvyzu632Ch9QGs9DMPw8xRqWDkD3Q1xnvK2CZOFDukcGA83pyzSksQi888TeB5j+ZgYAKXUKCAMY7mUTMUc+u6rtW5uLupts2o1Axc+w3jfbnrbBAsRo08APO+1Z0qpWVrrjkqpXbj3QFgVQH0FY0ah6zChFd6HplrrP914acta7J2dopTKBnwH/Ky1vmiRDkc2KaUqa633Wi3EZJVS6kWMUAXLF9TWWs91/KyUmgGssEJLElrr7z1o6R8vnEMm4s1tmY459P2QmY5JL/+dRikVhOEoCFBKOT7I+ALe1qgSUkOMPsEVT3nt2QDzf1sLzp0W880/T6Axhke2nZt9lg1daq0bmEtK9MKYFboZmGbl4sNAA6CHuZD1NayffdnF/O84E9zKJVtcKQ+UtFKAUqodMAbPWPpnGvCXUippYfjHgKkW6Ehim7mO4Wych76tuOezAXkw7AnHZVuisHYSoOAGWZxZcEIpNQmjw3d87dlBrfXLFmjxxnhTgafM4AM8b+FhpVQZrfWR9LZlNub1ewyYiPED4AUMteKHyVzgOwXma8juexwW1k1aL/AMMMTVA5jJmv7BeOf3aq31g+a2XVYN0yulamE8PHhhvBlomxU6TC3T3GxOtDIGUylVSu4nz0c8fYITWusQc7gwaZbaV1a99szTZvCBx3kfkphLyriZOYAlbxAwF4rtBbQBlmO86WGrUqooRhxUpht9njb70tMW1HZdWNdDcLf0jyVeCpX8qsWtbrZlOp4229rkilJqNFAFIy4UAK11U+skCa6I0SekwPTEWLkoqyMeM4PPZDgpFx4uY4UQpVRFjA7WzyWuzxeHTtcCJmFMvBmqtb6atFFrfUop9ZYVgjxw9qWnLaid9CYVuxGqtV6YVv5MwJOW/qni+MH0Ylv2WjZlvN/6eVIaWFbOtv4JmIkRktMH6AGEW6hHcIMYfYITyvNevO5JM/jAg7wPGLN12wJ5cY7ru4xh4FiC1rqROZGjgllP9rUetdbTLZLlMbMvTTxqQW1z/clAjB9ugAFKqfoWv33G3dI/H2SmAOW5r1+cDuwHWmG8zq8rYPVr9Aporb9VSg3QWq/BWGN1jcWaBBfE6BNc+QQPefG6B67KDx7kfdBa/w78rpQK0lqHWaHBHebi3j9gLM7qBZRQSvWw+K0lHjP7Mun8Hrag9qNATXOJJJRS3wPbcJ5oktm0cV36Ryn1NMbkhUzBg1+/WE5r/bRSqoM5yznJKLaSpNCE00qpNhhL/hS3UI/gBjH6BFc85sXrnhjTh7P3YQYWeB/csE0p1R/PGep0S5keAAAZjUlEQVQZC7RMmuhizuSdgYXDYbifffmthXo8bUFtMDzGSUvG+FkpxGQIKQ08d9syg4VKqdxa6xil1LMYMbQTLJy4kGRgXVRKVcWYeFPaIi1JfKiU8gNex/Cg+wKvWitJcEWMPsEVT3vxukfF9Gmtr2AYfZ608LCnDfVkdZzZrLU+YE5csAyt9Vil1GqSZ1/2snL2pQcuqP0xxsPDKlPP/9q79yi7y+r+4+8Ey70RgqkWqUDVflxRoaFQEJFf8VJFC+FuKVYEWqUoBv2VooiCxCsIrdAKBuRSSEEuSwNIUdEgNzUSEFDK56eiUpEYQcAUQW75/fE8J3NyMplkbPLdz8zs11pZJ9/vZNbZa2ZyZp/nefbeuxK0yidpd8rK4/Mlndb3oSnEzZc9A9i2FgP9E+UNw79T2iZFmCNpU+A4SgupjYEPBsXS81B9c/4Ipal/byJHakgmfWlQU4PXaeRMn6QrGeHsXnD1bmtbPbdI+hwlGYWShC4MjAdJOwHft31rvf59STva/nZQPO8E5tq+o15vKukw259ZxaeuFbYvqknxDpSk7xjbiyJioWwL3gLsyfI/N0uA94REVM7yLpU0k7LC9zlJBwfFgu3eKMrrGaa3Yz1OcX63UeVEjrEgk760nNZaAQS8cK3Mp+rjPsDzgAvr9YGUs2uRWtvq+QfKbNB3U3uaMVSlGuUMlv/l8+gw97r097aXTbqx/ZCkvyf26zStPq4D7Bw11aW20rld0n+M1MJG0uW29+0orCW1qOMtwK71vHHo6vUqzAI6ee3MiRxjSyZ9aTn1/NUZwHNtv6z2XNvT9keC4nkxZetpOsufV+t0ckGtRkPSbNu79n3oSkmRBQow/FbPh6KCqduUp9Y/rZhke9lKre1nJEW+/k2WtCymmkSsGxWMpHOAbYDvA8/U25Er/KxGz8IuXwPeTJmicpjtRZJeAJzc4fOPVpdFSjmRYwzJpC8NOotyyPyzALbvqNuFIUkf5QD+8cA/U86JHEJs1eU0SX9s+x4oky8YWiEJsaqtnq5oJXOSewJHngHcI+ndlDc0AEcA9wTG82XgEklnUr5mhwPXBMazk+3pgc//u+isVVLd6j617/peypm+VnX5tem1ZzmvV9giaTKwse1fj/zZqWuZ9KVBG9peMNCHLurwNMAG9dD7pPqCcoKkGyiJYIT3ANfVqkso26jvCIoFAEkfA06y/XC93hT4v7a7boTc2pzkfodTxsEdR/mF+DXg7YHxHEP5ufkHypuYrwBnj/gZa9c3JU23fVdgDM2RdKPLLOnemLqe6P6lqxLxxvjjkg6ntB5aSGkaf6rtlldEJ5xM+tKgByS9kPoCJ2k/4P7AeB6v7xp/IOldwH2UxtEhbF9Tt5xfUm9FV10C7G772N5FPR/2RkqC05n+9hWSnkeZXLIU+E5gUQAAthdT5kg3ofbDO4Ohlcdo51MSv0WUqv1eUhO5Orsqaz2xsb1LfWxqTJ2kdWyP1Nfxps6CGTLd9q8lHQRcTXljs5C2t8EnnEz60qB3UjrNv0TSfcCPKdWXUY4CNqQUBcymbPG+NTAeKP3mtqL8/9m2HniP3OpZR9J6veRT0gbAelHBSPo7ypnCr1N+MZ8u6UTb5wTGNI0ypWQr+l73onoZ1lYWJ1D68z2LoSQranv+HMoouDsZOtMXqk52+PQI947pOJ51gOey/M/PvV3G0OeHki4Dzh1uddb2uwJi+r3ammkv4F9tPykpalpRWolM+tKgvSjv0uYDkylVjq+VtND2dwPiWUpp/bElQ9VyZ1EOnXdO0gXAC4HvMjRBYSmx53suBL4m6dway6F0VLm3EkcDM2w/CCBpM8rUkrCkD5gH3ABcS+zki57PUY4KLKSNeO61fUV0EAMOBj49cO9tvXu2v9JVIJKOpBwp+QXLF7pErYRuQ1m5PrvuhJwDXBx8hu6zlE4GtwPXS9qSUsyRGpJJXxq0ff1zBWX14SDgO8Dhki61fVLH8cylJBGtrEBsT9nGaOYdrO2TahHFayjfs9m2I/v0/YzSU61nCfDfQbH0bGi705WhVXjE9n9GB9Hn7lqwdSXBTdklHUiplN1aUn8i+vvAg13HU80C1HsjE832Esqb37Mk7UqZePPPdfVvtu0fBsR0GuXcLACS7qU2aa7XEb0D04BM+tKgzYDtbP8PgKTjgcsoHfoXUmbzdumXja1AfI/Spy/ynOMKagLRShJxH2Xk2TzKashMYEGvh5ftiFYuV0l6o+2rA557OPMlnUxpidKfZN0aFM8GNY4WmrLfTPn/9RzglL77S4A7AuKB8qallVGQva3mN1G6GWxF+TrNBV5F2an5k7DgqvrGuL8IsLPegWnlMulLg14APNF3/SSwpe3HJEUULBwv6WxKtWULY+GeA9wlacFAPGETOQYqC9elbIM/GlhZ+KP6p2defYw8DD8LOLb+DD9JfPXljvVx+757S4FXB8TSVFP2WhD0U+AV0bH0NRu+h1K1/yWW/38f1YvyB5QjOCfbvrnv/mV15a9Fka22UpVJXxr0H8C36ioNwB7ARZI2AiLaORxCqZT9PdpoGntC0POu1GBloaS9KJWzIWx/OOq5V6a16kvbu636X3VH0vrAYcBLWb4JekihS41pH+CTlGr9ScQk6r2fm3vrn3UJbKLd5622b+y/IemVtm+Kmku+Gpo5EjORZdKXlmN7tqSrGRpMf7jtW+qHI6p4t7X98oDnHZbtb9QDyi+2fa2kDWls1JDtL0p6X9TzS9oe+ABDlam9uDo/9C7pJbbvljTsuLWut1MlvcX2hQPjqvrjiVo5ugC4G3g9cCLl//p/BcXScxKwh+2wOFb3DYyk020fubbj6XMaY2/Oba70NSCTvrQC2wtZftB5pG+11DS2zkd9OzCVUsX7fOBMShFFVEz79F1OpmwZRr6rbqn45r2U79cpw3wsYjt1o/rY1Moj8CLb+0uaafv8WtQRWQwE8IvIhG+UXtnFk4zxObcRvQPTgEz6Uut2AQ6W9GPaaBr7TsrW6bcBbP9AUliz6GqPvr8/RWmbMDMmFKCh4hvbb6+PI26nSnqd7a92EE9vvOGIK0iS3m/742s7nj69ObcPS3oZsIhSIBDpFkmfB75IG+d5W9DsnFtJ6wH7smIvzBPrY0TvwDQgk77UujdEBzDgt7af6I2pk/Qsgs+qtHQIv2qt+GZ1fBJY60nfKOwPdJn0zanj+46jtGvaGPhgh88/nCnAb2ijorgJ9XjJjcDLGzw7O49S4byQvv/3qS2Z9KWm9Y/2asQ3JB0LbCDpdcARlN5mnZN0OiMknIEHulsrvlkdrZ036jQe2725v9cDK0wFieix1uCbmZF09v2y/bSkqV093yhsYbu1N+lpQCZ9KY3O+yhVjncC76D0xDp7xM9Ye3oFNq8EpgOfr9f7E3sms6nim9XUWmVha/F03mOtb8LMciIqiiXtb/vSEe4NTg5Z226rjasvpUxNAsJX02+W9HLbdwbGkFYhk76URsH2M5LOp5zpW1puxUzn6K28SHobsJvtJ+v1mUBnI6qG0VTxzRg1oVceq6v6/r4+sDfw84A4AN5PSbCGvWf7vI7jmUqZTtJfiBS9mr4L8LaGzl+nYWTSl9IoSHoTpVr3R5QXta0lvSN4pNbmlEPdv6rXG9d7UVorvkHSerZ/O8K9n3Qczytt3zTCvcEEI1rnb2xsX95/LekiyuzkzkjaHXgj8HxJp/V9aArLT5voVKNb37tHB5BWLZO+lEbnFMqq2g8BJL0Q+BKxI9A+Adwq6bp6/X+IbSLd4rmeb7JiD7Nl92zvs8JnrF3D9VRbds/2xzqOZ1VaWHl8MWViUJd+TjlGsSfLH5lYAryn41iWkfQnwBnAc22/TNI2wJ62PxIVU+/8de1msP4q/nkKkklfSqOzeGCY+T3A4qhgqvOAp4GjKMnehyjzgUPY/qmkXSgNrM+VNI2y+tg5Sc+j9FLcQNIMhpKXKcCGAfGM1T5rnfdY6xsvOKk+LgKO6TIG27cDt0uaaztsZW8YZ1F6YfZaAN1ReyuGJX2S9qS8Kd6c8pq4JaXB90ujYkoryqQvpdH5fp1YcgnlF9H+wHd6DZKDDlJ/hlIlu4HtK2rrjcuBHQJiQdLxlAbRAs6lVPFeSEcNbAe8HngbsAXQP+1iCXBsQDxN9llrscdaC6PzJF1i+wBK4cRwRSVRRxY2tL2g1zqqik5KZwM7AdfaniFpN+DA4JjSgEz6Uhqd9YFfULZQAX5JOVS9B3EHqXe0vZ2k2wBsPyQpcj7o3sAM4NYaz88lhfwCr8Uu50vad/CMWFA836C0/TmvsXZETfZYq6tHu9bL62xfNdK/Xwtm1ce/6vh5V+WBerRkKYCk/YD7Y0PiSdsPSposabLt+ZI+GRxTGpBJX0qj0OgB6iclrcPQL4BpxI4/e8L20t7KiKSNVvUJHbhK0t+wkpWsAOtJmjNMPF2PhetprseapE9QVqvn1luzarHL+7uKwfb99bGlBB3KZKA5wEsk3Qf8mJjZ6P0elrQxcAMwV9Ji4lcf04BM+lIahRYPUFOGr38B+ANJH6VsEx4XGM8lkj4LbFJnFR9KOYMUqbWVrEspVeBnU85jRmuxx9obgT+1/QxAbZV0G6VVSif6zhUOy/aUrmIZeN57gNfWN1STbS+JiGPATOBxytnig4BnA1FvqtJKZNKX0ug0d4Da9lxJC4HXUA697xU5qN72p+q0kl9TzvV9qIu5tqvQ2krWU7bPiA6iT6s91jZhqBXRs7t+8t65QkknUgpJLqB8bQ5i+TOZnZK0GXA85fu2tI5mO9H2g1Ex2X5U0nMpq7MPAv8ZGU8aXiZ9KY1OiweosX03cHd0HD01yRs20ZP0Tduv6Dik1layrpR0BGWFtn8+8a9W/ilrVYs91j5OKaCYT0m0dqXDVb4Br7e9Y9/1GZK+DZwUFM/FlJF5+9brgygTeV4bFA+SDgBOBq6jfL9Ol3S07cuiYkoryqQvpdFp8QD1WBPRw6u1layD6+PRffeWMszc2y602GPN9kW19+QOlO/XMbYXBYXztKSDKMnWUkpVauS2/FTbs/uuPyJpr7Boig8AO9heDMvOFl8LZNLXkEz6UhqdFg9QjzURY+uaWsmyvXV0DP0a7rE2rT6uA+wsKaot0t9Q5ut+mvLze1O9F2W+pL+mtI6Cco73S4HxQDlb2N+z9EFgclQwaXiZ9KW0GgYa6V4NzKe8oD1K2WI5dbjPS21ocSVL0suA6fTFY/vfg8JprseapHOAbYDvM1SNHtIWyfZPKIUKrXgH8F5K/0uor0X1dWppUIHJNZK+DFxUr99Mea1MDcmkL6XV0zu0Lcp20zzKltPfUs7WTHjDzbddic5HerW2klUbWP8FJem7mrISeSMQlfS12GNtJ9vTg2MA2qvab6Fx9SDbR0val9KEfRIwx/YXgsNKAzLpS2k12P4wgKSvANv1WiRIOoHSfiPVWbaSLrD9tyP8u5E+tra0tpK1H7AtcJvtQ2rV49mB8bTYY+2bkqbbvis4Dmiwar+BxtUrqA3Qw5ugp5XLpC+l0XkB8ETf9ROUBrsJ1pV0MOXs1T6DH+ydxbL9vc4ja28l6zHbz0h6StIUyupjSBFH1WKPtfMpid8i4otvmqraX0nj6l1svy8glpX1Mux9v0J6GabhZdKX0uhcACyQ9AXKC93elF9OCQ6nJAybUMbS9YsaUdfTW8m6njZWsm6RtAllBWkh8D/AgqhgGu2xdg5lVfhOYifMQHtV+ytrXN150tfiVnNauUlLl0YU0qU0dknaDnhVvbze9m2R8bRG0mG2PxcdR786ueAxyoH33krW3AYSGyRtBUyxfUdgDIM91l4FhPZYk/T1wLF0y5H0x5Sq/Z2Bh6hV+1Hj2STdAfxFr6+jpKmULd7oZtqpcZn0pZTWiOG2dPsFtdoAQNLWwP22H6/XG1AO5f8kKJ69ga/bfqReb0L5Jf7FoHhuB1432GPN9rYR8dQYPkNZNb6S5RtYd/pzVOdaf6IWKjQx9qy2a/kkpYvAssbVti+OjCu1L7d3U0pryuCWbr/o7d1LKas0PU/XezvEhMPx/ZWNth+uFb0hSR9t9ljbgJLs/WXfvc5/jmw/LenP6t8f7fK5hyNpMmW7eyfaaFydxpBM+lJKa4TtQ6JjGMGzbC8rwLH9hKR1A+MZLqGKfD1ursdaYz9Pt0m6gvJGYVniF7F6XQuA3mX7EuCKrp8/jW2Z9KWU1qhaEPAxYHPbu0uaDrwi+JzfLyXtafuKGuNM4IHAeG6RdCrwb5TVqyMpBR0hWuyxJml94DBKL8X+BtaHBoQzlbL62X/GMHL1+quS/pEyb7c/CY2a3ZzGiEz6Ukpr2nnAuZRZnAD/j/LLKTLpO5xStfuvlKTmv4G3BsZzJPBBytdlEvAVyoi/MA32WLsAuBt4PaV9zEGUhtoRJgOzbD8MIGlTSrPvKIdSks4jBu5Htv1JY0AmfSmlNe05ti+R9H4A209JihxOj+0fATvVti2Tog/i17NhnbfXGNR4j7UX2d5f0kzb59dmyF8OimWbXsIHYPshSTOCYoEyyeUIYBfK9+8G4MzAeNIYkUlfSmlNe1TSZgz1NNsJeCQiEElvsX3hwOxkek12bXc6M1nSv9g+StKVDJNs2d6zy3ga77H2ZH18uM4pXkRcI/TJkja1/RAsa5ES+fvzfODXwGn1+sB674CwiNKYkElfSmlNey/lgPkLJd0ETKOMHYuwUX1sJbm5oD5+KjSKsWFO3UY9jvLztDFlSzzCKcDNki6jJOsHAB8NigVAA+105te2OymNKPv0pZTWKEn7U7bh/gjYF9gR+KDtW0MDS+OKpINtdzYNpxYkvZqy9f21yJnAks4DzrT9rXq9I3Cw7cEzfiktJ5O+lNIaJekO29tI2oVSxXsKcKztHQNiOW2kj9t+d1exAEi6k5HP0OVEhdUk6Vbb20XHEUHSfwEC7q23XkApcnmG/DlKI8jt3ZTSmtYr2ngTZTVinqQTgmIJa4OyEn8VHcA4Mik6gEBviA4gjU250pdSWqMkXQXcB7wW+DPKzNsFkSO9eiRNoayEhFbv1lieB/w5ZeXvOzlRYXQm8kpfSr+r6DE7KaXx5wDKmb431DYXU4GjIwOStH3dWr0D+J6k23ujtYLi+TtgAbAPpcjlW5Iimg6PZRN5pS+l30lu76aU1ijbv6FvUoHt+4H74yIC4BzgCNs3ANTzhucCUWefjgZm2H6wxrMZcHONM62em6IDSGmsyaQvpTQRLOklfAC2b6yNiaP8DOh//iWUKSGpkrQepfp7K/p+V9k+sT6+KyaylMauTPpSShPBAkmfBS6inKF7M3CdpO0AAtrJ3Ad8W9K8Gs/MGuN7azydNo1u1DxKU++FwG+DY0lpXMikL6U0EfxpfTx+4P7OlKTr1d2Gw4/qn5559bGVJtIt2MJ2VqmmtAZl9W5KKQVpqZq4NZLmAKfbvjM6lpTGi0z6UkrjXi2UOJ6hAfU3Aif2CikC4tmeUkjSW9l7BDjUdmt9BcNIugt4EfBjyvZuNrBO6X8pt3dTShPBxcD1lMIAgIOAz1N6CUZorZq4RbtHB5DSeJNJX0ppIphqe3bf9Uck7RUWTXvVxM2x/VMASX8ArB8cTkrjQiZ9KaWJYL6kvwYuqdf7AV8KjKe1auLmSNqTMrd5c2AxsCVlvuxLI+NKaSzLM30ppXGvrqJtxNBc4HWAR+vfl9qe0nE880f48FLbXVcTN0fS7ZSq6mttz5C0G3Cg7bcHh5bSmJVJX0ppQpA0FXgxfVuFtr8RF1EaiaRbbG9fk78Ztp+RtMD2n0fHltJYldu7KaVxr866nQVsAXwX2Iky9uw1gTG9ibJV2Z+EnhgVT4MelrQxcAMwV9Ji4KngmFIa0yZHB5BSSh2YBewA/NT2bsAM4IGoYCSdSTnHdySlFcn+lDNrachM4DHgKOAaSjPrPUIjSmmMy6QvpTQRPG77cSgzXW3fDSgwnp1tvxV4yPaHgVcAfxQYT3NsPwo8B3gD8CBwcVRfxZTGi0z6UkoTwc8kbQJ8EfhqnXn788B4HquPv5G0OfAksHVgPM2RdACwgLIKegBlVvF+sVGlNLblmb6U0rhne+/61xNq5eyzKVuGUa6qSejJwK2Uti1nBcbTog8AO9heDCBpGnAtcFloVCmNYVm9m1JKgSStB6xv+5HoWFoi6U7bL++7ngzc3n8vpTQ6udKXUkqxTs/ec8O6RtKXKQ2soRS+XB0YT0pjXp7pSymlWNtHB9Ai20cDcyjziLcF5tg+JjaqlMa2XOlLKaVYi6MDaJXty4HLo+NIabzIM30ppZSaUUfmDfeLaRIBI/NSGk8y6UsppY5J2gI4HdgFeAa4EZhl+2ehgaWUxrU805dSSt07F7gC+EPg+cCV9V5KKa01eaYvpZS6N812f5J3nqSjwqJJKU0ImfSllFL3HpD0FobakRxIGTWWUkprTW7vppRS9w6ljBZbBNwP7AccEhpRSmncy5W+lFLq3mzgYNsPAUiaCnyKkgymlNJakSt9KaXUvW16CR+A7V8BMwLjSSlNAJn0pZRS9yZL2rR3UVf6cuclpbRW5YtMSil17xTgZkmXURoRHwB8NDaklNJ4l82ZU0opgKTpwKspkya+Zvuu4JBSSuNcJn0ppZRSShNAnulLKaWUUpoAMulLKaWUUpoAMulLKaWUUpoAMulLKaWUUpoAMulLKaWUUpoA/j+gD453arl7mwAAAABJRU5ErkJggg==\n", + "text/plain": [ + "
" + ] + }, + "metadata": { + "needs_background": "light" + }, + "output_type": "display_data" + } + ], + "source": [ + "plt.figure(figsize=(12,8))\n", + "\n", + "corr = df.corr()\n", + "mask = np.zeros_like(corr)\n", + "mask[np.triu_indices_from(mask)] = True\n", + "with sns.axes_style(\"white\"):\n", + " ax = sns.heatmap(corr, mask=mask, square=True,annot=True,linewidths=2, cmap='viridis')\n", + "plt.title('Correlation Matrix for Loan Status')" + ] + }, + { + "cell_type": "markdown", + "execution_count": null, + "metadata": { + "papermill": { + "duration": 0.03998, + "end_time": "2020-09-08T03:16:08.627145", + "exception": false, + "start_time": "2020-09-08T03:16:08.587165", + "status": "completed" + }, + "tags": [] + }, + "source": [ + "From the above figure, we can see that Credit_History (Independent Variable) has the maximum correlation with Loan_Status (Dependent Variable). Which denotes that the Loan_Status is heavily dependent on the Credit_History." + ] + }, + { + "cell_type": "markdown", + "execution_count": null, + "metadata": { + "papermill": { + "duration": 0.033935, + "end_time": "2020-09-08T03:16:08.695352", + "exception": false, + "start_time": "2020-09-08T03:16:08.661417", + "status": "completed" + }, + "tags": [] + }, + "source": [ + "### 4-Prediction" + ] + }, + { + "cell_type": "markdown", + "execution_count": null, + "metadata": { + "papermill": { + "duration": 0.032031, + "end_time": "2020-09-08T03:16:08.760801", + "exception": false, + "start_time": "2020-09-08T03:16:08.728770", + "status": "completed" + }, + "tags": [] + }, + "source": [ + "##### 4-1-LogisticRegression" + ] + }, + { + "cell_type": "code", + "execution_count": 49, + "metadata": { + "execution": { + "iopub.execute_input": "2020-09-08T03:16:08.836085Z", + "iopub.status.busy": "2020-09-08T03:16:08.834968Z", + "iopub.status.idle": "2020-09-08T03:16:08.838649Z", + "shell.execute_reply": "2020-09-08T03:16:08.837901Z" + }, + "papermill": { + "duration": 0.046169, + "end_time": "2020-09-08T03:16:08.838802", + "exception": false, + "start_time": "2020-09-08T03:16:08.792633", + "status": "completed" + }, + "tags": [] + }, + "outputs": [], + "source": [ + "X=df.drop(['loan_id','loan_status'],axis=1)\n", + "y=df['loan_status']" + ] + }, + { + "cell_type": "code", + "execution_count": 50, + "metadata": { + "execution": { + "iopub.execute_input": "2020-09-08T03:16:08.914572Z", + "iopub.status.busy": "2020-09-08T03:16:08.912890Z", + "iopub.status.idle": "2020-09-08T03:16:08.916930Z", + "shell.execute_reply": "2020-09-08T03:16:08.916185Z" + }, + "papermill": { + "duration": 0.045963, + "end_time": "2020-09-08T03:16:08.917063", + "exception": false, + "start_time": "2020-09-08T03:16:08.871100", + "status": "completed" + }, + "tags": [] + }, + "outputs": [], + "source": [ + "X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2,random_state=0)" + ] + }, + { + "cell_type": "code", + "execution_count": 51, + "metadata": { + "execution": { + "iopub.execute_input": "2020-09-08T03:16:08.999826Z", + "iopub.status.busy": "2020-09-08T03:16:08.998594Z", + "iopub.status.idle": "2020-09-08T03:16:09.004496Z", + "shell.execute_reply": "2020-09-08T03:16:09.003657Z" + }, + "papermill": { + "duration": 0.050464, + "end_time": "2020-09-08T03:16:09.004682", + "exception": false, + "start_time": "2020-09-08T03:16:08.954218", + "status": "completed" + }, + "tags": [] + }, + "outputs": [], + "source": [ + "lr=LogisticRegression()" + ] + }, + { + "cell_type": "code", + "execution_count": 52, + "metadata": { + "execution": { + "iopub.execute_input": "2020-09-08T03:16:09.083738Z", + "iopub.status.busy": "2020-09-08T03:16:09.082561Z", + "iopub.status.idle": "2020-09-08T03:16:09.138437Z", + "shell.execute_reply": "2020-09-08T03:16:09.139113Z" + }, + "papermill": { + "duration": 0.101714, + "end_time": "2020-09-08T03:16:09.139285", + "exception": false, + "start_time": "2020-09-08T03:16:09.037571", + "status": "completed" + }, + "tags": [] + }, + "outputs": [ + { + "name": "stderr", + "output_type": "stream", + "text": [ + "/opt/conda/lib/python3.7/site-packages/sklearn/linear_model/_logistic.py:764: ConvergenceWarning:\n", + "\n", + "lbfgs failed to converge (status=1):\n", + "STOP: TOTAL NO. of ITERATIONS REACHED LIMIT.\n", + "\n", + "Increase the number of iterations (max_iter) or scale the data as shown in:\n", + " https://scikit-learn.org/stable/modules/preprocessing.html\n", + "Please also refer to the documentation for alternative solver options:\n", + " https://scikit-learn.org/stable/modules/linear_model.html#logistic-regression\n", + "\n" + ] + }, + { + "data": { + "text/plain": [ + "LogisticRegression()" + ] + }, + "execution_count": 52, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "lr.fit(X_train, y_train)" + ] + }, + { + "cell_type": "code", + "execution_count": 53, + "metadata": { + "execution": { + "iopub.execute_input": "2020-09-08T03:16:09.218744Z", + "iopub.status.busy": "2020-09-08T03:16:09.217862Z", + "iopub.status.idle": "2020-09-08T03:16:09.221479Z", + "shell.execute_reply": "2020-09-08T03:16:09.220709Z" + }, + "papermill": { + "duration": 0.04748, + "end_time": "2020-09-08T03:16:09.221608", + "exception": false, + "start_time": "2020-09-08T03:16:09.174128", + "status": "completed" + }, + "tags": [] + }, + "outputs": [], + "source": [ + "lr_prediction=lr.predict(X_test)" + ] + }, + { + "cell_type": "code", + "execution_count": 54, + "metadata": { + "execution": { + "iopub.execute_input": "2020-09-08T03:16:09.305929Z", + "iopub.status.busy": "2020-09-08T03:16:09.304450Z", + "iopub.status.idle": "2020-09-08T03:16:09.319854Z", + "shell.execute_reply": "2020-09-08T03:16:09.321172Z" + }, + "papermill": { + "duration": 0.064783, + "end_time": "2020-09-08T03:16:09.321445", + "exception": false, + "start_time": "2020-09-08T03:16:09.256662", + "status": "completed" + }, + "tags": [] + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "[[10 21]\n", + " [ 0 78]]\n", + "\n", + "\n", + " precision recall f1-score support\n", + "\n", + " 0 1.00 0.32 0.49 31\n", + " 1 0.79 1.00 0.88 78\n", + "\n", + " accuracy 0.81 109\n", + " macro avg 0.89 0.66 0.68 109\n", + "weighted avg 0.85 0.81 0.77 109\n", + "\n", + "\n", + "\n", + "Logistic Regression accuracy: 0.8073394495412844\n" + ] + } + ], + "source": [ + "print(confusion_matrix(y_test,lr_prediction))\n", + "print('\\n')\n", + "print(classification_report(y_test,lr_prediction))\n", + "print('\\n')\n", + "print('Logistic Regression accuracy: ', accuracy_score(y_test,lr_prediction))" + ] + }, + { + "cell_type": "markdown", + "execution_count": null, + "metadata": { + "papermill": { + "duration": 0.036852, + "end_time": "2020-09-08T03:16:09.395570", + "exception": false, + "start_time": "2020-09-08T03:16:09.358718", + "status": "completed" + }, + "tags": [] + }, + "source": [ + "### 4-2-Decision Tree " + ] + }, + { + "cell_type": "code", + "execution_count": 55, + "metadata": { + "execution": { + "iopub.execute_input": "2020-09-08T03:16:09.472762Z", + "iopub.status.busy": "2020-09-08T03:16:09.471994Z", + "iopub.status.idle": "2020-09-08T03:16:09.475399Z", + "shell.execute_reply": "2020-09-08T03:16:09.476025Z" + }, + "papermill": { + "duration": 0.045616, + "end_time": "2020-09-08T03:16:09.476198", + "exception": false, + "start_time": "2020-09-08T03:16:09.430582", + "status": "completed" + }, + "tags": [] + }, + "outputs": [], + "source": [ + "dt=DecisionTreeClassifier()" + ] + }, + { + "cell_type": "code", + "execution_count": 56, + "metadata": { + "execution": { + "iopub.execute_input": "2020-09-08T03:16:09.554316Z", + "iopub.status.busy": "2020-09-08T03:16:09.553517Z", + "iopub.status.idle": "2020-09-08T03:16:09.562792Z", + "shell.execute_reply": "2020-09-08T03:16:09.562036Z" + }, + "papermill": { + "duration": 0.051438, + "end_time": "2020-09-08T03:16:09.562921", + "exception": false, + "start_time": "2020-09-08T03:16:09.511483", + "status": "completed" + }, + "tags": [] + }, + "outputs": [ + { + "data": { + "text/plain": [ + "DecisionTreeClassifier()" + ] + }, + "execution_count": 56, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "dt.fit(X_train, y_train)" + ] + }, + { + "cell_type": "code", + "execution_count": 57, + "metadata": { + "execution": { + "iopub.execute_input": "2020-09-08T03:16:09.648972Z", + "iopub.status.busy": "2020-09-08T03:16:09.647648Z", + "iopub.status.idle": "2020-09-08T03:16:09.655685Z", + "shell.execute_reply": "2020-09-08T03:16:09.654587Z" + }, + "papermill": { + "duration": 0.060434, + "end_time": "2020-09-08T03:16:09.655936", + "exception": false, + "start_time": "2020-09-08T03:16:09.595502", + "status": "completed" + }, + "tags": [] + }, + "outputs": [], + "source": [ + "dt_prediction=dt.predict(X_test)" + ] + }, + { + "cell_type": "code", + "execution_count": 58, + "metadata": { + "execution": { + "iopub.execute_input": "2020-09-08T03:16:09.770198Z", + "iopub.status.busy": "2020-09-08T03:16:09.768911Z", + "iopub.status.idle": "2020-09-08T03:16:09.785597Z", + "shell.execute_reply": "2020-09-08T03:16:09.786224Z" + }, + "papermill": { + "duration": 0.079809, + "end_time": "2020-09-08T03:16:09.786410", + "exception": false, + "start_time": "2020-09-08T03:16:09.706601", + "status": "completed" + }, + "tags": [] + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "[[14 17]\n", + " [15 63]]\n", + "\n", + "\n", + " precision recall f1-score support\n", + "\n", + " 0 0.48 0.45 0.47 31\n", + " 1 0.79 0.81 0.80 78\n", + "\n", + " accuracy 0.71 109\n", + " macro avg 0.64 0.63 0.63 109\n", + "weighted avg 0.70 0.71 0.70 109\n", + "\n", + "\n", + "\n", + "Decision Tree Accuracy: 0.7064220183486238\n" + ] + } + ], + "source": [ + "print(confusion_matrix(y_test,dt_prediction))\n", + "print('\\n')\n", + "print(classification_report(y_test,dt_prediction))\n", + "print('\\n')\n", + "print('Decision Tree Accuracy: ', accuracy_score(y_test,dt_prediction))" + ] + }, + { + "cell_type": "markdown", + "execution_count": null, + "metadata": { + "papermill": { + "duration": 0.033503, + "end_time": "2020-09-08T03:16:09.861581", + "exception": false, + "start_time": "2020-09-08T03:16:09.828078", + "status": "completed" + }, + "tags": [] + }, + "source": [ + "##### 4-3-Random Forest" + ] + }, + { + "cell_type": "code", + "execution_count": 59, + "metadata": { + "execution": { + "iopub.execute_input": "2020-09-08T03:16:09.935180Z", + "iopub.status.busy": "2020-09-08T03:16:09.934364Z", + "iopub.status.idle": "2020-09-08T03:16:09.938296Z", + "shell.execute_reply": "2020-09-08T03:16:09.937543Z" + }, + "papermill": { + "duration": 0.043446, + "end_time": "2020-09-08T03:16:09.938436", + "exception": false, + "start_time": "2020-09-08T03:16:09.894990", + "status": "completed" + }, + "tags": [] + }, + "outputs": [], + "source": [ + "rf=RandomForestClassifier(n_estimators=200)" + ] + }, + { + "cell_type": "code", + "execution_count": 60, + "metadata": { + "execution": { + "iopub.execute_input": "2020-09-08T03:16:10.023125Z", + "iopub.status.busy": "2020-09-08T03:16:10.022288Z", + "iopub.status.idle": "2020-09-08T03:16:10.553028Z", + "shell.execute_reply": "2020-09-08T03:16:10.552196Z" + }, + "papermill": { + "duration": 0.581309, + "end_time": "2020-09-08T03:16:10.553166", + "exception": false, + "start_time": "2020-09-08T03:16:09.971857", + "status": "completed" + }, + "tags": [] + }, + "outputs": [ + { + "data": { + "text/plain": [ + "RandomForestClassifier(n_estimators=200)" + ] + }, + "execution_count": 60, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "rf.fit(X_train, y_train)" + ] + }, + { + "cell_type": "code", + "execution_count": 61, + "metadata": { + "execution": { + "iopub.execute_input": "2020-09-08T03:16:10.722199Z", + "iopub.status.busy": "2020-09-08T03:16:10.721311Z", + "iopub.status.idle": "2020-09-08T03:16:10.752617Z", + "shell.execute_reply": "2020-09-08T03:16:10.751794Z" + }, + "papermill": { + "duration": 0.165155, + "end_time": "2020-09-08T03:16:10.752749", + "exception": false, + "start_time": "2020-09-08T03:16:10.587594", + "status": "completed" + }, + "tags": [] + }, + "outputs": [], + "source": [ + "rf_prediction=rf.predict(X_test)" + ] + }, + { + "cell_type": "code", + "execution_count": 62, + "metadata": { + "execution": { + "iopub.execute_input": "2020-09-08T03:16:10.832579Z", + "iopub.status.busy": "2020-09-08T03:16:10.831750Z", + "iopub.status.idle": "2020-09-08T03:16:10.847098Z", + "shell.execute_reply": "2020-09-08T03:16:10.846243Z" + }, + "papermill": { + "duration": 0.060092, + "end_time": "2020-09-08T03:16:10.847243", + "exception": false, + "start_time": "2020-09-08T03:16:10.787151", + "status": "completed" + }, + "tags": [] + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "[[12 19]\n", + " [ 5 73]]\n", + "\n", + "\n", + " precision recall f1-score support\n", + "\n", + " 0 0.71 0.39 0.50 31\n", + " 1 0.79 0.94 0.86 78\n", + "\n", + " accuracy 0.78 109\n", + " macro avg 0.75 0.66 0.68 109\n", + "weighted avg 0.77 0.78 0.76 109\n", + "\n", + "\n", + "\n", + "Random Forest Accuracy: 0.7798165137614679\n" + ] + } + ], + "source": [ + "print(confusion_matrix(y_test,rf_prediction))\n", + "print('\\n')\n", + "print(classification_report(y_test,rf_prediction))\n", + "print('\\n')\n", + "print('Random Forest Accuracy: ', accuracy_score(y_test,rf_prediction))" + ] + }, + { + "cell_type": "markdown", + "execution_count": null, + "metadata": { + "papermill": { + "duration": 0.034116, + "end_time": "2020-09-08T03:16:10.916017", + "exception": false, + "start_time": "2020-09-08T03:16:10.881901", + "status": "completed" + }, + "tags": [] + }, + "source": [ + "##### 4-4-KNearest Neighbors" + ] + }, + { + "cell_type": "code", + "execution_count": 63, + "metadata": { + "execution": { + "iopub.execute_input": "2020-09-08T03:16:10.999870Z", + "iopub.status.busy": "2020-09-08T03:16:10.997521Z", + "iopub.status.idle": "2020-09-08T03:16:11.536747Z", + "shell.execute_reply": "2020-09-08T03:16:11.537673Z" + }, + "papermill": { + "duration": 0.5862, + "end_time": "2020-09-08T03:16:11.537880", + "exception": false, + "start_time": "2020-09-08T03:16:10.951680", + "status": "completed" + }, + "tags": [] + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "[0.3853211009174312, 0.48623853211009177, 0.4036697247706422, 0.44954128440366975, 0.43119266055045874, 0.45871559633027525, 0.3486238532110092, 0.3669724770642202, 0.3302752293577982, 0.3302752293577982, 0.3119266055045872, 0.3394495412844037, 0.29357798165137616, 0.30275229357798167, 0.29357798165137616, 0.3119266055045872, 0.3211009174311927, 0.29357798165137616, 0.27522935779816515, 0.27522935779816515, 0.27522935779816515, 0.27522935779816515, 0.26605504587155965, 0.26605504587155965, 0.27522935779816515, 0.27522935779816515, 0.28440366972477066, 0.27522935779816515, 0.28440366972477066, 0.28440366972477066, 0.28440366972477066, 0.28440366972477066, 0.28440366972477066, 0.28440366972477066, 0.28440366972477066, 0.28440366972477066, 0.28440366972477066, 0.28440366972477066, 0.28440366972477066]\n" + ] + } + ], + "source": [ + "error_rate=[]\n", + "for n in range(1,40):\n", + " knn=KNeighborsClassifier(n_neighbors=n)\n", + " knn.fit(X_train, y_train)\n", + " knn_prediction=knn.predict(X_test)\n", + " error_rate.append(np.mean(knn_prediction!=y_test))\n", + "print(error_rate)" + ] + }, + { + "cell_type": "code", + "execution_count": 64, + "metadata": { + "execution": { + "iopub.execute_input": "2020-09-08T03:16:11.638085Z", + "iopub.status.busy": "2020-09-08T03:16:11.636111Z", + "iopub.status.idle": "2020-09-08T03:16:12.063158Z", + "shell.execute_reply": "2020-09-08T03:16:12.063821Z" + }, + "papermill": { + "duration": 0.486515, + "end_time": "2020-09-08T03:16:12.064009", + "exception": false, + "start_time": "2020-09-08T03:16:11.577494", + "status": "completed" + }, + "tags": [] + }, + "outputs": [ + { + "data": { + "text/plain": [ + "Text(0.5, 1.0, 'Elbow Method')" + ] + }, + "execution_count": 64, + "metadata": {}, + "output_type": "execute_result" + }, + { + "data": { + "image/png": "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\n", + "text/plain": [ + "
" + ] + }, + "metadata": { + "needs_background": "light" + }, + "output_type": "display_data" + } + ], + "source": [ + "plt.figure(figsize=(8,6))\n", + "sns.set_style('whitegrid')\n", + "plt.plot(list(range(1,40)),error_rate,color='b', marker='o', linewidth=2, markersize=12, markerfacecolor='r', markeredgecolor='r')\n", + "plt.xlabel('Number of Neighbors')\n", + "plt.ylabel('Error Rate')\n", + "plt.title('Elbow Method')" + ] + }, + { + "cell_type": "code", + "execution_count": 65, + "metadata": { + "execution": { + "iopub.execute_input": "2020-09-08T03:16:12.147838Z", + "iopub.status.busy": "2020-09-08T03:16:12.146539Z", + "iopub.status.idle": "2020-09-08T03:16:12.150256Z", + "shell.execute_reply": "2020-09-08T03:16:12.150944Z" + }, + "papermill": { + "duration": 0.048706, + "end_time": "2020-09-08T03:16:12.151140", + "exception": false, + "start_time": "2020-09-08T03:16:12.102434", + "status": "completed" + }, + "tags": [] + }, + "outputs": [], + "source": [ + "knn=KNeighborsClassifier(n_neighbors=23)" + ] + }, + { + "cell_type": "code", + "execution_count": 66, + "metadata": { + "execution": { + "iopub.execute_input": "2020-09-08T03:16:12.242944Z", + "iopub.status.busy": "2020-09-08T03:16:12.240283Z", + "iopub.status.idle": "2020-09-08T03:16:12.247941Z", + "shell.execute_reply": "2020-09-08T03:16:12.248518Z" + }, + "papermill": { + "duration": 0.058474, + "end_time": "2020-09-08T03:16:12.248695", + "exception": false, + "start_time": "2020-09-08T03:16:12.190221", + "status": "completed" + }, + "tags": [] + }, + "outputs": [ + { + "data": { + "text/plain": [ + "KNeighborsClassifier(n_neighbors=23)" + ] + }, + "execution_count": 66, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "knn.fit(X_train, y_train)" + ] + }, + { + "cell_type": "code", + "execution_count": 67, + "metadata": { + "execution": { + "iopub.execute_input": "2020-09-08T03:16:12.331602Z", + "iopub.status.busy": "2020-09-08T03:16:12.330740Z", + "iopub.status.idle": "2020-09-08T03:16:12.341936Z", + "shell.execute_reply": "2020-09-08T03:16:12.341116Z" + }, + "papermill": { + "duration": 0.056219, + "end_time": "2020-09-08T03:16:12.342067", + "exception": false, + "start_time": "2020-09-08T03:16:12.285848", + "status": "completed" + }, + "tags": [] + }, + "outputs": [], + "source": [ + "knn_prediction=knn.predict(X_test)" + ] + }, + { + "cell_type": "code", + "execution_count": 68, + "metadata": { + "execution": { + "iopub.execute_input": "2020-09-08T03:16:12.426316Z", + "iopub.status.busy": "2020-09-08T03:16:12.425449Z", + "iopub.status.idle": "2020-09-08T03:16:12.440260Z", + "shell.execute_reply": "2020-09-08T03:16:12.439387Z" + }, + "papermill": { + "duration": 0.061825, + "end_time": "2020-09-08T03:16:12.440401", + "exception": false, + "start_time": "2020-09-08T03:16:12.378576", + "status": "completed" + }, + "tags": [] + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "[[ 2 29]\n", + " [ 0 78]]\n", + "\n", + "\n", + " precision recall f1-score support\n", + "\n", + " 0 1.00 0.06 0.12 31\n", + " 1 0.73 1.00 0.84 78\n", + "\n", + " accuracy 0.73 109\n", + " macro avg 0.86 0.53 0.48 109\n", + "weighted avg 0.81 0.73 0.64 109\n", + "\n", + "\n", + "\n", + "KNN accuracy Accuracy: 0.7339449541284404\n" + ] + } + ], + "source": [ + "print(confusion_matrix(y_test,knn_prediction))\n", + "print('\\n')\n", + "print(classification_report(y_test,knn_prediction))\n", + "print('\\n')\n", + "print('KNN accuracy Accuracy: ', accuracy_score(y_test,knn_prediction))" + ] + }, + { + "cell_type": "markdown", + "execution_count": null, + "metadata": { + "papermill": { + "duration": 0.035892, + "end_time": "2020-09-08T03:16:12.515080", + "exception": false, + "start_time": "2020-09-08T03:16:12.479188", + "status": "completed" + }, + "tags": [] + }, + "source": [ + "##### 4-5-SVC" + ] + }, + { + "cell_type": "code", + "execution_count": 69, + "metadata": { + "execution": { + "iopub.execute_input": "2020-09-08T03:16:12.592711Z", + "iopub.status.busy": "2020-09-08T03:16:12.591334Z", + "iopub.status.idle": "2020-09-08T03:16:12.595208Z", + "shell.execute_reply": "2020-09-08T03:16:12.594346Z" + }, + "papermill": { + "duration": 0.04455, + "end_time": "2020-09-08T03:16:12.595349", + "exception": false, + "start_time": "2020-09-08T03:16:12.550799", + "status": "completed" + }, + "tags": [] + }, + "outputs": [], + "source": [ + "svc=SVC()" + ] + }, + { + "cell_type": "code", + "execution_count": 70, + "metadata": { + "execution": { + "iopub.execute_input": "2020-09-08T03:16:12.685046Z", + "iopub.status.busy": "2020-09-08T03:16:12.684189Z", + "iopub.status.idle": "2020-09-08T03:16:12.705415Z", + "shell.execute_reply": "2020-09-08T03:16:12.704457Z" + }, + "papermill": { + "duration": 0.069879, + "end_time": "2020-09-08T03:16:12.705596", + "exception": false, + "start_time": "2020-09-08T03:16:12.635717", + "status": "completed" + }, + "tags": [] + }, + "outputs": [ + { + "data": { + "text/plain": [ + "SVC()" + ] + }, + "execution_count": 70, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "svc.fit(X_train, y_train)" + ] + }, + { + "cell_type": "code", + "execution_count": 71, + "metadata": { + "execution": { + "iopub.execute_input": "2020-09-08T03:16:12.790520Z", + "iopub.status.busy": "2020-09-08T03:16:12.789661Z", + "iopub.status.idle": "2020-09-08T03:16:12.794409Z", + "shell.execute_reply": "2020-09-08T03:16:12.795003Z" + }, + "papermill": { + "duration": 0.049784, + "end_time": "2020-09-08T03:16:12.795179", + "exception": false, + "start_time": "2020-09-08T03:16:12.745395", + "status": "completed" + }, + "tags": [] + }, + "outputs": [], + "source": [ + "svc_prediction=svc.predict(X_test)" + ] + }, + { + "cell_type": "code", + "execution_count": 72, + "metadata": { + "execution": { + "iopub.execute_input": "2020-09-08T03:16:12.881214Z", + "iopub.status.busy": "2020-09-08T03:16:12.880041Z", + "iopub.status.idle": "2020-09-08T03:16:12.892392Z", + "shell.execute_reply": "2020-09-08T03:16:12.891618Z" + }, + "papermill": { + "duration": 0.057881, + "end_time": "2020-09-08T03:16:12.892529", + "exception": false, + "start_time": "2020-09-08T03:16:12.834648", + "status": "completed" + }, + "tags": [] + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "[[ 0 31]\n", + " [ 1 77]]\n", + "\n", + "\n", + " precision recall f1-score support\n", + "\n", + " 0 0.00 0.00 0.00 31\n", + " 1 0.71 0.99 0.83 78\n", + "\n", + " accuracy 0.71 109\n", + " macro avg 0.36 0.49 0.41 109\n", + "weighted avg 0.51 0.71 0.59 109\n", + "\n", + "\n", + "\n", + "SVC َAccuracy: 0.7064220183486238\n" + ] + } + ], + "source": [ + "print(confusion_matrix(y_test,svc_prediction))\n", + "print('\\n')\n", + "print(classification_report(y_test,svc_prediction))\n", + "print('\\n')\n", + "print('SVC َAccuracy: ', accuracy_score(y_test,svc_prediction))" + ] + }, + { + "cell_type": "code", + "execution_count": 73, + "metadata": { + "execution": { + "iopub.execute_input": "2020-09-08T03:16:12.977135Z", + "iopub.status.busy": "2020-09-08T03:16:12.975351Z", + "iopub.status.idle": "2020-09-08T03:16:12.982336Z", + "shell.execute_reply": "2020-09-08T03:16:12.980913Z" + }, + "papermill": { + "duration": 0.052385, + "end_time": "2020-09-08T03:16:12.982521", + "exception": false, + "start_time": "2020-09-08T03:16:12.930136", + "status": "completed" + }, + "tags": [] + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Logistic Regression Accuracy: 0.8073394495412844\n", + "Decision Tree Accuracy: 0.7064220183486238\n", + "Random Forest Accuracy: 0.7798165137614679\n", + "KNN Accuracy: 0.7339449541284404\n", + "SVC Accuracy: 0.7064220183486238\n" + ] + } + ], + "source": [ + "print('Logistic Regression Accuracy: ', accuracy_score(y_test,lr_prediction))\n", + "print('Decision Tree Accuracy: ', accuracy_score(y_test,dt_prediction))\n", + "print('Random Forest Accuracy: ', accuracy_score(y_test,rf_prediction))\n", + "print('KNN Accuracy: ', accuracy_score(y_test,knn_prediction))\n", + "print('SVC Accuracy: ', accuracy_score(y_test,svc_prediction))" + ] + }, + { + "cell_type": "markdown", + "execution_count": null, + "metadata": { + "papermill": { + "duration": 0.039901, + "end_time": "2020-09-08T03:16:13.061982", + "exception": false, + "start_time": "2020-09-08T03:16:13.022081", + "status": "completed" + }, + "tags": [] + }, + "source": [ + "### CONCLUSION\n", + "\n", + "The Loan Status is heavily dependent on the Credit History for Predictions.\n", + "\n", + "The Logistic Regression algorithm gives us the maximum Accuracy (80%) compared to the other 4 Machine Learning Classification Algorithms." + ] + } + ], + "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.6" + }, + "papermill": { + "duration": 23.464495, + "end_time": "2020-09-08T03:16:13.213032", + "environment_variables": {}, + "exception": null, + "input_path": "__notebook__.ipynb", + "output_path": "__notebook__.ipynb", + "parameters": {}, + "start_time": "2020-09-08T03:15:49.748537", + "version": "2.1.0" + } + }, + "nbformat": 4, + "nbformat_minor": 4 +} diff --git a/Notebooks/README.md b/Notebooks/README.md new file mode 100644 index 000000000..8b1378917 --- /dev/null +++ b/Notebooks/README.md @@ -0,0 +1 @@ + diff --git a/README.md b/README.md index ccc4a086f..238369a94 100644 --- a/README.md +++ b/README.md @@ -1,50 +1,200 @@ -# mini-projects-python -A collection of simple python mini projects to enhance your python skills - - -If you want to learn about python visit [Here](https://github.com/chavarera/PythonScript) -## Steps To Follow -- Select an issue -- Open [project here](https://github.com/chavarera/python-mini-projects) -- Create a fork of the project -- Create clone of forked project on your local machine -- Checkout to development branch -- Create a folder in projects directory according to issue name -- Write your code -- Commit the changes -- Push the code -- Create a pull request - -## Contributors ✨ - -Thanks goes to these wonderful people -Sr no | Project Name | Author ---- | --- | --- -1 | [Hello World](https://github.com/chavarera/python-mini-projects/tree/master/projects/Hello) | [Ravi Chavare](https://github.com/chavarera) -2 | [JSON to CSV](https://github.com/chavarera/python-mini-projects/tree/master/projects/Convert_JSON_to_CSV)| [Murilo Pagliuso](https://github.com/DarkCeptor44) -3 | [Random Password Generator](https://github.com/chavarera/python-mini-projects/tree/master/projects/Random%20password%20generator) | [Mitesh](https://github.com/Mitesh2499) -4 | [Instagram Profile Info](https://github.com/chavarera/python-mini-projects/tree/master/projects/InstagramProfile) | [Ravi Chavare](https://github.com/chavarera) -5 | [Search string in Files](https://github.com/chavarera/python-mini-projects/tree/master/projects/string%20search%20from%20multiple%20files) | [Mitesh](https://github.com/Mitesh2499) -6 | [Fetch links from Webpage](https://github.com/chavarera/python-mini-projects/tree/master/projects/All%20Links%20from%20given%20Webpage) | [Mitesh](https://github.com/Mitesh2499) -7 | [Todo App With Flask](https://github.com/chavarera/python-mini-projects/tree/master/projects/Todo%20app) | [Mitesh](https://github.com/Mitesh2499) -8 | [Add Watermark on Images](https://github.com/chavarera/python-mini-projects/tree/master/projects/image%20watermark) | [Mitesh](https://github.com/Mitesh2499) -9 | [WishList App Using Django](https://github.com/chavarera/python-mini-projects/tree/master/projects/WishList) | [Ravi Chavare](https://github.com/chavarera) -10 | [Split Folders into Subfolders](https://github.com/chavarera/python-mini-projects/tree/master/projects/split%20folder%20into%20subfolders) | [Ravi Chavare](https://github.com/chavarera) -11 | [Download bulk images](https://github.com/chavarera/python-mini-projects/tree/master/projects/download%20images%20from%20website) | [Mitesh](https://github.com/Mitesh2499) -12 | [Ranom word from file](https://github.com/chavarera/python-mini-projects/tree/master/projects/Random_word_from_list) | -13 | [Battery notification](https://github.com/chavarera/python-mini-projects/tree/master/projects/battery%20notification) | [Mitesh](https://github.com/Mitesh2499) -14 | [Calculate age](https://github.com/chavarera/python-mini-projects/tree/master/projects/Calculate%20age) | [Gaodong](https://github.com/xlgd) -15 | [Text file analysis](https://github.com/chavarera/python-mini-projects/tree/master/projects/Textfile%20analysis) | [m044de](https://github.com/m044de/) -16 | [Generate image snipets](https://github.com/chavarera/python-mini-projects/tree/master/projects/py-carbon-clips) | [ravi chavare](https://github.com/chavarera/) -17 | [Organize file system](https://github.com/chavarera/python-mini-projects/tree/master/projects/organized%20download%20folder%20with%20different%20categories) | [Mitesh](https://github.com/Mitesh2499) -18 | [Send emails](https://github.com/chavarera/python-mini-projects/tree/master/projects/send%20email%20from%20CSV) | [Mitesh](https://github.com/Mitesh2499) -19 | [Get Ipaddress and Hostname of Website](https://github.com/chavarera/python-mini-projects/tree/master/projects/Find%20Out%20Hostname%20and%20IP%20address) | [Nuh Mohammed](https://github.com/NuhMohammed)| -20 | [Progressbar using tqdm](https://github.com/chavarera/python-mini-projects/tree/master/projects/Terminal%20Progress%20Bar%20with%20Images%20Resizing) | [Mitesh](https://github.com/Mitesh2499) -21 | [Get meta information of images](https://github.com/Xlgd/python-mini-projects/tree/master/projects/Get%20meta%20information%20of%20images) | [Gaodong](https://github.com/xlgd) -22 | [Captures Frames from video](https://github.com/chavarera/python-mini-projects/tree/master/projects/Capture_Video_Frames) | [phileinSophos](https://github.com/phileinSophos/) -23 | [Fetch Wifi Saved Password Windows](https://github.com/chavarera/python-mini-projects/tree/master/projects/Get%20Wifi%20password) | [Mitesh](https://github.com/Mitesh2499) -24 | [Save Screenshot of given Website](https://github.com/chavarera/python-mini-projects/tree/master/projects/snapshot%20of%20given%20website) | [m044de](https://github.com/m044de/) -25 | [Split files using no of lines](https://github.com/chavarera/python-mini-projects/tree/master/projects/Split_File) | [phileinSophos](https://github.com/phileinSophos/) -26 | [Encode and decode text using key](https://github.com/chavarera/python-mini-projects/tree/master/projects/create%20script%20to%20encode%20and%20decode%20text) | [Gaodong](https://github.com/xlgd) -27 | [captures screenshot at regular interval of time](https://github.com/chavarera/python-mini-projects/tree/master/projects/capture_screenshot) | [d33pc](https://github.com/d33pc/) -28 | [Create password hash](https://github.com/chavarera/python-mini-projects/tree/master/projects/hashing%20passwords) | [m044de](https://github.com/m044de/) + +[![forthebadge](https://forthebadge.com/images/badges/built-by-developers.svg)](https://forthebadge.com) +[![forthebadge](https://forthebadge.com/images/badges/built-with-love.svg)](https://forthebadge.com) +[![forthebadge](https://forthebadge.com/images/badges/built-with-swag.svg)](https://forthebadge.com) +[![forthebadge](https://forthebadge.com/images/badges/made-with-python.svg)](https://forthebadge.com) + +# Python-Mini-Projects + +[![All Contributors](https://img.shields.io/github/contributors/Python-World/python-mini-projects)](#contributors-) +![Issues](https://img.shields.io/github/issues/Python-World/python-mini-projects) +![Pull Requests](https://img.shields.io/github/issues-pr/Python-World/python-mini-projects?) +![Forks](https://img.shields.io/github/forks/Python-World/python-mini-projects) +![Stars](https://img.shields.io/github/stars/Python-World/python-mini-projects) +![License](https://img.shields.io/github/license/Python-World/python-mini-projects) + +A collection of simple python mini projects to enhance your Python skills. + +If you want to learn about python, visit [here.](https://github.com/Python-World/Py-Resources) + +If you are new to Github and open source then, visit [here.](https://towardsdatascience.com/getting-started-with-git-and-github-6fcd0f2d4ac6) + +## Steps To Follow + +- Select an issue and ask to be _assigned_ to it. +- Check existing scripts in the [projects](/projects/) directory. +- **Star** this repository. +- On the [python-mini-projects](https://github.com/Python-World/python-mini-projects) repo page, click the **Fork** button. +
+- **Clone** your forked repository to your local machine. This button will show you the URL to run. +
+ + For example, run this command inside your terminal: + + ```bash + git clone https://github.com//python-mini-projects.git + ``` + + **Replace \!** + + Learn more about [forking](https://help.github.com/en/github/getting-started-with-github/fork-a-repo) and [cloning a repo](https://docs.github.com/en/github/creating-cloning-and-archiving-repositories/cloning-a-repository). +- Before you make any changes, [keep your fork in sync](https://www.freecodecamp.org/news/how-to-sync-your-fork-with-the-original-git-repository/) to avoid merge conflicts: + + ```bash + git remote add upstream https://github.com/Python-World/python-mini-projects.git + git fetch upstream + git pull upstream master + git push + ``` + + Alternatively, GitHub also provides syncing now - click "Fetch upstream" at the top of your repo below "Code" button. + +- If you run into a **merge conflict**, you have to resolve the conflict. There are a lot of guides online, or you can try this one by [opensource.com](https://opensource.com/article/20/4/git-merge-conflict). + +- Checkout to development branch (*name your branch according to the issue name*). + + ```bash + git checkout -b + ``` + +- Create a folder in + [projects directory](https://github.com/Python-World/python-mini-projects/tree/master/projects) + according to issue name. +- Write your code and add to the respective folder in the projects directory, locally. +- Don't forget to add a `README.md` in your folder, according to the + [README_TEMPLATE.](https://github.com/Python-World/python-mini-projects/blob/master/README_TEMPLATE.md) +- Add the changes with `git add`, `git commit` ([write a good commit message](https://chris.beams.io/posts/git-commit/), if possible): + + ```bash + git add -A + git commit -m "" + ``` + +- Push the code _to your repository_. + + ```bash + git push origin + ``` + +- Go to the GitHub page of _your fork_, and **make a pull request**: + + ![pull request image](https://help.github.com/assets/images/help/pull_requests/choose-base-and-compare-branches.png) + + Read more about pull requests on the [GitHub help pages](https://help.github.com/en/github/collaborating-with-issues-and-pull-requests/creating-a-pull-request). +- Now wait, until one of us *reviews your Pull Request*! If there are any conflicts, you will get a notification. + +## README Template for scripts + +[README Template](https://github.com/Python-World/python-mini-projects/blob/master/README_TEMPLATE.md) + +## Connect On Social media + +[Join WhatsApp group](https://chat.whatsapp.com/GlLTqQSbocLC23ntKU15O9) + +## Contributors ✨ + +SR No | Project | Author +--- | --- | --- +1 | [Hello World](https://github.com/Python-World/python-mini-projects/tree/master/projects/Hello) | [Ravi Chavare](https://github.com/chavarera) +2 | [JSON to CSV](https://github.com/Python-World/python-mini-projects/tree/master/projects/Convert_JSON_to_CSV)| [Murilo Pagliuso](https://github.com/DarkCeptor44) +3 | [Random Password Generator](https://github.com/Python-World/python-mini-projects/tree/master/projects/Random_password_generator) | [Mitesh](https://github.com/Mitesh2499) +4 | [Instagram Profile Info](https://github.com/Python-World/python-mini-projects/tree/master/projects/Instagram_profile) | [Ravi Chavare](https://github.com/chavarera) +5 | [Search string in Files](https://github.com/Python-World/python-mini-projects/tree/master/projects/String_search_from_multiple_files) | [Mitesh](https://github.com/Mitesh2499) +6 | [Fetch links from Webpage](https://github.com/Python-World/python-mini-projects/tree/master/projects/All_links_from_given_webpage) | [Mitesh](https://github.com/Mitesh2499) & [Michael Mba](https://github.com/mikeysan) +7 | [Todo App With Flask](https://github.com/Python-World/python-mini-projects/tree/master/projects/Todo_app) | [Mitesh](https://github.com/Mitesh2499) +8 | [Add Watermark on Images](https://github.com/Python-World/python-mini-projects/tree/master/projects/Image_watermark) | [Mitesh](https://github.com/Mitesh2499) +9 | [WishList App Using Django](https://github.com/Python-World/python-mini-projects/tree/master/projects/WishList) | [Ravi Chavare](https://github.com/chavarera) +10 | [Split Folders into Subfolders](https://github.com/Python-World/python-mini-projects/tree/master/projects/Split_folder_into_subfolders) | [Ravi Chavare](https://github.com/chavarera) +11 | [Download bulk images](https://github.com/Python-World/python-mini-projects/tree/master/projects/Download_images_from_website) | [Mitesh](https://github.com/Mitesh2499) +12 | [Random word from file](https://github.com/Python-World/python-mini-projects/tree/master/projects/Random_word_from_list) | [Ravi Chavare](https://github.com/chavarera) +13 | [Battery notification](https://github.com/Python-World/python-mini-projects/tree/master/projects/Battery_notification) | [Mitesh](https://github.com/Mitesh2499) +14 | [Calculate age](https://github.com/Python-World/python-mini-projects/tree/master/projects/Calculate_age) | [Gaodong](https://github.com/xlgd) +15 | [Text file analysis](https://github.com/Python-World/python-mini-projects/tree/master/projects/Textfile_analysis) | [m044de](https://github.com/m044de/) +16 | [Generate image snipets](https://github.com/Python-World/python-mini-projects/tree/master/projects/Py_carbon_clips) | [ravi chavare](https://github.com/Python-World/) +17 | [Organize file system](https://github.com/Python-World/python-mini-projects/tree/master/projects/Organized_download_folder_with_different_categories) | [Mitesh](https://github.com/Mitesh2499) +18 | [Send emails](https://github.com/Python-World/python-mini-projects/tree/master/projects/Send_email_from_csv) | [Mitesh](https://github.com/Mitesh2499) +19 | [Get Ipaddress and Hostname of Website](https://github.com/Python-World/python-mini-projects/tree/master/projects/Find_out_hostname_and_ip_address) | [Nuh Mohammed](https://github.com/NuhMohammed)| +20 | [Progressbar using tqdm](https://github.com/Python-World/python-mini-projects/tree/master/projects/Terminal_progress_bar_with_images_resizing) | [Mitesh](https://github.com/Mitesh2499) +21 | [Get meta information of images](https://github.com/Python-World/python-mini-projects/tree/master/projects/Get_meta_information_of_images) | [Gaodong](https://github.com/xlgd) +22 | [Captures Frames from video](https://github.com/Python-World/python-mini-projects/tree/master/projects/Capture_Video_Frames) | [phileinSophos](https://github.com/phileinSophos/) +23 | [Fetch Wifi Saved Password Windows](https://github.com/Python-World/python-mini-projects/tree/master/projects/Get_wifi_password) | [Mitesh](https://github.com/Mitesh2499) +24 | [Save Screenshot of given Website](https://github.com/Python-World/python-mini-projects/tree/master/projects/Snapshot_of_given_website) | [m044de](https://github.com/m044de/) +25 | [Split files using no of lines](https://github.com/Python-World/python-mini-projects/tree/master/projects/Split_File) | [phileinSophos](https://github.com/phileinSophos/) +26 | [Encrypt and decrypt text](https://github.com/Python-World/python-mini-projects/tree/master/projects/Encrypt_and_decrypt_text) | [Gaodong](https://github.com/xlgd) +27 | [Captures screenshot at regular interval of time](https://github.com/Python-World/python-mini-projects/tree/master/projects/capture_screenshot) | [d33pc](https://github.com/d33pc/) +28 | [Create password hash](https://github.com/Python-World/python-mini-projects/tree/master/projects/Hashing_passwords) | [m044de](https://github.com/m044de/) +29 | [Encrypt file and folders](https://github.com/Python-World/python-mini-projects/tree/master/projects/Create_a_script_to_encrypt_files_and_folder) | [Gaodong](https://github.com/xlgd) +30 | [Decimal to binary and vice versa](https://github.com/Python-World/python-mini-projects/tree/master/projects/Decimal_to_binary_convertor_and_vice_versa) | [Alan Anaya](https://github.com/alananayaa/) +31 | [Cli Based Todo Application](https://github.com/Python-World/python-mini-projects/tree/master/projects/Cli_todo) | [Audrey Yang](https://github.com/audrey-yang) +32 | [Currency Convertor cli app](https://github.com/Python-World/python-mini-projects/tree/master/projects/Currency_converter) | [github-of-wone](https://github.com/github-of-wone/) +33 | [Stopwatch Application](https://github.com/Python-World/python-mini-projects/tree/master/projects/Create_a_simple_stopwatch) | [Gaodong](https://github.com/xlgd) +34 | [CLI Proxy Tester](https://github.com/Python-World/python-mini-projects/tree/master/projects/cli_proxy_tester) | [Ingo Kleiber](https://github.com/IngoKl) +35 | [XML to JSON file Convertor](https://github.com/Python-World/python-mini-projects/tree/master/projects/Convert_XML_to_JSON) | [John Kirtley](https://github.com/johnkirtley) +36 | [Compress file and folders](https://github.com/Python-World/python-mini-projects/tree/master/projects/Write_script_to_compress_folder_and_files) | [Gaodong](https://github.com/xlgd) +37 | [Find IMDB movie ratings](https://github.com/Python-World/python-mini-projects/tree/master/projects/Find_imdb_rating) | [ShivSt](https://github.com/ShivSt) +38 | [Convert dictionary to python object](https://github.com/Python-World/python-mini-projects/tree/master/projects/convert_dictionary_to_python_object) | [Varun-22](https://github.com/Varun-22) +39 | [Move files to alphabetically arranged folders](https://github.com/Python-World/python-mini-projects/tree/master/projects/Write_script_to_move_files_into_alphabetically_ordered_folder) | [Chathura Nimesh](https://github.com/kana800/) +40 | [Scrape Youtube video comment](https://github.com/Python-World/python-mini-projects/tree/master/projects/Web_scraping_a_youtube_comment) | [Saicharan67](https://github.com/Saicharan67) +41 | [Website Summerization](https://github.com/Python-World/python-mini-projects/tree/master/projects/Web_page_summation) | [Believe Ohiozua](https://github.com/believeohiozua) +42 | [Text To speech(mp3)](https://github.com/Python-World/python-mini-projects/tree/master/projects/Text_to_speech) | [Sergej Dikun](https://github.com/Serhazor) +43 | [Image format conversion](https://github.com/Python-World/python-mini-projects/tree/master/projects/convert_Imgs) | [Ramon Ferreira](https://github.com/ramonfsk) +44 | [Save random article from wikipedia](https://github.com/Python-World/python-mini-projects/tree/master/projects/Random_Wikipedia_Article) | [Rakshit Puri](https://github.com/skate1512) +45 | [Check website connectivity](https://github.com/Python-World/python-mini-projects/tree/master/projects/Check_website_connectivity) | [Shiv Thakur](https://github.com/ShivSt) +46 | [Fetch city weather information](https://github.com/Python-World/python-mini-projects/tree/master/projects/Fetch_current_weather) | [Kushal Agrawal](https://github.com/kushal98) +47 | [Calculator App](https://github.com/Python-World/python-mini-projects/tree/master/projects/Create_calculator_app) | [Gaodong](https://github.com/xlgd) +48 | [Merge Csv files](https://github.com/Python-World/python-mini-projects/tree/master/projects/Merge_csv_files) | [Kushal Agrawal](https://github.com/kushal98) +49 | [Fetch tweets and save in csv](https://github.com/Python-World/python-mini-projects/tree/master/projects/Fetch_and_store_tweets) | [Kushal Agrawal](https://github.com/kushal98) +50 | [Language Translator using googletrans](https://github.com/Python-World/python-mini-projects/tree/master/projects/Language_translator) | [Ashiqur Rahman Tusher](https://github.com/ashikurt77) +51 | [Split video using timeperiod](https://github.com/Python-World/python-mini-projects/tree/master/projects/Split_a_video_file_by_given_time_period) | [Chathura Nimesh](https://github.com/kana800/) +52 | [Fetch unique words from file](https://github.com/Python-World/python-mini-projects/tree/master/projects/Unique_words_in_a_file) | [Rakshit Puri](https://github.com/skate1512) +53 | [Speech to text converter](https://github.com/Python-World/python-mini-projects/tree/master/projects/Speech_to_text) | [Paulo Henrique](https://github.com/Python-World/python-mini-projects/tree/master/projects/Speech%20to%20text) +54 | [Set Random Wallpaper](https://github.com/Python-World/python-mini-projects/tree/master/projects/Write_a_script_to_download_a_random_image_from_unsplash_and_set_it_as_wallpaper) | [Chathura Nimesh](https://github.com/kana800/) +55 | [Find Dominant color from image](https://github.com/Python-World/python-mini-projects/tree/master/projects/Dominant_color) | [Mitesh](https://github.com/Mitesh2499) +56 | [Ascii art](https://github.com/Python-World/python-mini-projects/tree/master/projects/Ascii_art) | [Shiny Akash](https://github.com/Shiny-Akash) +57 | [Merge Pdf Files](https://github.com/Python-World/python-mini-projects/tree/master/projects/Merge_pdfs) | [ShivSt](https://github.com/ShivSt) +58 | [Fetch Open Port](https://github.com/Python-World/python-mini-projects/tree/master/projects/Fetch_open_ports) | [Kushal Agrawal](https://github.com/kushal98) +59 | [Convert Numbers To Words](https://github.com/Python-World/python-mini-projects/tree/master/projects/Convert_numbers_to_word) | [Niraj Shrestha](https://github.com/CrestNiraj12) +60 | [Restart and Shutdown System](https://github.com/Python-World/python-mini-projects/tree/master/projects/Shutdown_or_restart_your_device) | [Phillibob55](https://github.com/Phillibob55) +61 | [Check website connectivity](https://github.com/Python-World/python-mini-projects/tree/master/projects/Check_website_connectivity) | [Shiv Thakur](https://github.com/ShivSt) +62 | [Digital clock using tkinter](https://github.com/Python-World/python-mini-projects/tree/master/projects/Digital_clock) | [Aditya Jetely](https://github.com/adityaj7) +63 | [Covert Image To Pdf](https://github.com/Python-World/python-mini-projects/tree/master/projects/Convert_a_image_to_pdf) | [Gaodong](https://github.com/xlgd) +64 | [Store emails in csv file](https://github.com/Python-World/python-mini-projects/tree/master/projects/Store_emails_in_csv) | [Shiv Thakur](https://github.com/ShivSt) +65 | [Test Internet Connection](https://github.com/Python-World/python-mini-projects/tree/master/projects/Internet_connection_check) | [Jacob Ogle](https://github.com/Jakeogle94) +66 | [XKCD Comics Downloader](https://github.com/Python-World/python-mini-projects/tree/master/projects/XKCD_downloader)| [Aditya Jetely](https://github.com/AdityaJ7) +67 | [Website Blocker And Unblocker](https://github.com/Python-World/python-mini-projects/tree/master/projects/Website_blocker)| [Phillibob55](https://github.com/Phillibob55) +68 | [Fetch Domain Dns Record](https://github.com/Python-World/python-mini-projects/tree/master/projects/Dns_record)| [Aditya Jetely](https://github.com/AdityaJ7) +69 | [Python-Auto-Draw](https://github.com/Python-World/python-mini-projects/tree/master/projects/Python_auto_draw)| [Tushar Nankani](https://github.com/tusharnankani) +70 | [News Website Scraper](https://github.com/Python-World/python-mini-projects/tree/master/projects/News_website_scraper)| [pratik-choudhari](https://github.com/pratik-choudhari) +71 | [Rock Paper Scissors Game](https://github.com/Python-World/python-mini-projects/tree/master/projects/RockPaperScissors_Game)| [Tushar Nankani](https://github.com/tusharnankani) +72 | [Zip File Extractor](https://github.com/Python-World/python-mini-projects/tree/master/projects/Extract_zip_files)| [Aditya Jetely](https://github.com/AdityaJ7) +73 | [Random Password Generator](https://github.com/Python-World/python-mini-projects/blob/master/projects/Random_password_generator)| [Tushar Nankani](https://github.com/tusharnankani) +74 | [Script to perform Geocoding](https://github.com/Python-World/python-mini-projects/tree/master/projects/Geocoding)| [Aditya Jetely](https://github.com/AdityaJ7) +75 | [Python Carbon Clips](https://github.com/Python-World/python-mini-projects/tree/master/projects/Py_carbon_clips)| [Ravishankar Chavare](https://github.com/chavarera) +76 | [QR Code Generator](https://github.com/Python-World/python-mini-projects/tree/master/projects/Qr_code_generator)| [Shiv Thakur](https://github.com/ShivSt) +77 | [Recursive Password Generator](https://github.com/Python-World/python-mini-projects/tree/master/projects/Recursive_password_generator)| [Erfan Saberi](https://github.com/erfansaberi) +78 | [Tic Tac Toe](https://github.com/Python-World/python-mini-projects/tree/master/projects/Tic_tac_toe)| [Erfan Saberi](https://github.com/erfansaberi) +79 | [Tic Tac Toe with AI](https://github.com/Python-World/python-mini-projects/tree/master/projects/Tic_tac_toe_with_ai)| [Tushar Nankani](https://github.com/tusharnankani) +80 | [Cartoonify an Image](https://github.com/Python-World/python-mini-projects/tree/master/projects/Easy_cartoonify)| [Bartu Yaman](https://github.com/brtymn) +81 | [Quote Scrapper](https://github.com/Python-World/python-mini-projects/tree/master/projects/Scrape_quotes)| [Anandha Krishnan Aji](https://github.com/anandhakrishnanaji) +82 | [Time To Load Website](https://github.com/Python-World/python-mini-projects/tree/master/projects/Time_to_load_website)| [Aditya Jetely](https://github.com/AdityaJ7) +83 | [Customer Loan Repayment Prediction](https://github.com/Python-World/python-mini-projects/tree/master/Notebooks/Customer_loan_repayment_problem)| [ART](https://github.com/Tomyzon1728) +84 | [Generate Wordcloud from Wikipedia Article](https://github.com/Python-World/python-mini-projects/tree/master/projects/Wikipedia_search_wordcloud)| [Naman Shah](https://github.com/namanshah01) +85 | [Number Guessing Game](https://github.com/Python-World/python-mini-projects/tree/master/projects/Number_guessing_game)| [Javokhirbek](https://github.com/leader2one) +86 | [Convert JPEG to PNG](https://github.com/Python-World/python-mini-projects/tree/master/projects/Convert_JPEG_to_PNG)| [AnuragGupta](https://github.com/AnuragGupta806) +87 | [Movie Information Scrapper](https://github.com/Python-World/python-mini-projects/tree/master/projects/Movie%20Information%20Scraper)| [Anandha Krishnan Aji](https://github.com/anandhakrishnanaji) +88 | [Fetch HTTP Status Code](https://github.com/Python-World/python-mini-projects/tree/master/projects/Fetch%20HTTP%20status%20code)| [AkshataJ96](https://github.com/AkshataJ96) +89 | [Check Leap Year](https://github.com/Python-World/python-mini-projects/tree/master/projects/Leap_Year_Checker)| [Hariom Vyas](https://github.com/Hariom1509) +90 | [Scrape Medium Articles](https://github.com/Python-World/python-mini-projects/tree/master/projects/Scraping%20Medium%20Articles)| [Naman Shah](https://github.com/namanshah01) +91 | [HackerNews Scrapper](https://github.com/Python-World/python-mini-projects/tree/master/projects/Scrape_Hacker_News)| [Javokhirbek](https://github.com/leader2one) +92 | [Reduce Image Size](https://github.com/Python-World/python-mini-projects/tree/master/projects/Reduce_image_file_size)| [Vipul Verma](https://github.com/VIPverma01) +93 | [Easy Video Player](https://github.com/Python-World/python-mini-projects/tree/master/projects/EasyVideoPlayer)| [Bartu Yaman](https://github.com/brtymn) +94 | [GeeksforGeeks Article downloader](https://github.com/Python-World/python-mini-projects/tree/master/projects/download%20GeeksForGeeks%20articles)| [Shiv Thakur](https://github.com/ShivSt) +95 | [PDF to Text](https://github.com/Python-World/python-mini-projects/tree/master/projects/convert%20pdf%20to%20text)| [pi1814](https://github.com/pi1814) +96 | [Unstructured Supplemenrary Service Data](https://github.com/Python-World/python-mini-projects/tree/master/projects/Unstructured%20Supplemenrary%20%20Service%20Data)| [ART](https://github.com/Tomyzon1728) +97 | [Duplicate Files remover](https://github.com/Python-World/python-mini-projects/tree/master/projects/Duplicate%20files%20remover)| [Anandha Krishnan Aji](https://github.com/anandhakrishnanaji) +98 | [PNG to ICO converter](https://github.com/Python-World/python-mini-projects/tree/master/projects/convert_png_images_to_ico_format)| [weicheansoo](https://github.com/weicheansoo) +99 | [Find IMDB Ratings](https://github.com/Python-World/python-mini-projects/tree/master/projects/Find_imdb_rating)| [Utkarsh Bajaj](https://github.com/utkarshbajaj) +100 | [Terminal Based Hangman Game](https://github.com/Python-World/python-mini-projects/tree/master/projects/Terminal_Based_Hangman_Game)| [neohboonyee99](https://github.com/neohboonyee99) +101 | [Whatsapp Bot](https://github.com/Python-World/python-mini-projects/tree/master/projects/whatsapp_Bot)| [urmil89](https://github.com/urmil89) +102 | [Zip Bruter](https://github.com/Python-World/python-mini-projects/tree/master/projects/Zip_Bruter) | [Erdoğan YOKSUL](https://www.github.com/eredotpkfr) +103 | [CountDown Timer](https://github.com/Python-World/python-mini-projects/tree/master/projects/Countdown_timer) | [Japneet Kalra](https://github.com/japneetsingh035) diff --git a/README_TEMPLATE.md b/README_TEMPLATE.md new file mode 100644 index 000000000..c02a122a4 --- /dev/null +++ b/README_TEMPLATE.md @@ -0,0 +1,22 @@ +# Script Title + +A short description about the script must be mentioned here. + +### Prerequisites + +Modules required to be able to use the script successfully +and how to install them. +(Including a `requirements.txt` file will work.) + +### How to run the script + +Steps on how to run the script along with suitable examples. + +### Screenshot/GIF showing the sample use of the script + +Add a jpeg/png/gif file here. + +## *Author Name* + +The name of the author of the code goes here. +If you have a web site or a Git user name, feel free to link. diff --git a/docs/.nojekyll b/docs/.nojekyll new file mode 100644 index 000000000..e69de29bb diff --git a/docs/README.md b/docs/README.md new file mode 100644 index 000000000..d2729bdc7 --- /dev/null +++ b/docs/README.md @@ -0,0 +1,109 @@ + + +Python Project Collection +
+ +SR No | Project | Author +--- | --- | --- +1 | [Hello World](https://github.com/chavarera/python-mini-projects/tree/master/projects/Hello) | [Ravi Chavare](https://github.com/chavarera) +2 | [JSON to CSV](https://github.com/chavarera/python-mini-projects/tree/master/projects/Convert_JSON_to_CSV)| [Murilo Pagliuso](https://github.com/DarkCeptor44) +3 | [Random Password Generator](https://github.com/chavarera/python-mini-projects/tree/master/projects/Random_password_generator) | [Mitesh](https://github.com/Mitesh2499) +4 | [Instagram Profile Info](https://github.com/chavarera/python-mini-projects/tree/master/projects/Instagram_profile) | [Ravi Chavare](https://github.com/chavarera) +5 | [Search string in Files](https://github.com/chavarera/python-mini-projects/tree/master/projects/String_search_from_multiple_files) | [Mitesh](https://github.com/Mitesh2499) +6 | [Fetch links from Webpage](https://github.com/chavarera/python-mini-projects/tree/master/projects/All_links_from_given_webpage) | [Mitesh](https://github.com/Mitesh2499) & [Michael Mba](https://github.com/mikeysan) +7 | [Todo App With Flask](https://github.com/chavarera/python-mini-projects/tree/master/projects/Todo_app) | [Mitesh](https://github.com/Mitesh2499) +8 | [Add Watermark on Images](https://github.com/chavarera/python-mini-projects/tree/master/projects/Image_watermark) | [Mitesh](https://github.com/Mitesh2499) +9 | [WishList App Using Django](https://github.com/chavarera/python-mini-projects/tree/master/projects/WishList) | [Ravi Chavare](https://github.com/chavarera) +10 | [Split Folders into Subfolders](https://github.com/chavarera/python-mini-projects/tree/master/projects/Split_folder_into_subfolders) | [Ravi Chavare](https://github.com/chavarera) +11 | [Download bulk images](https://github.com/chavarera/python-mini-projects/tree/master/projects/Download_images_from_website) | [Mitesh](https://github.com/Mitesh2499) +12 | [Random word from file](https://github.com/chavarera/python-mini-projects/tree/master/projects/Random_word_from_list) | [Ravi Chavare](https://github.com/chavarera) +13 | [Battery notification](https://github.com/chavarera/python-mini-projects/tree/master/projects/Battery_notification) | [Mitesh](https://github.com/Mitesh2499) +14 | [Calculate age](https://github.com/chavarera/python-mini-projects/tree/master/projects/Calculate_age) | [Gaodong](https://github.com/xlgd) +15 | [Text file analysis](https://github.com/chavarera/python-mini-projects/tree/master/projects/Textfile_analysis) | [m044de](https://github.com/m044de/) +16 | [Generate image snipets](https://github.com/chavarera/python-mini-projects/tree/master/projects/Py_carbon_clips) | [ravi chavare](https://github.com/chavarera/) +17 | [Organize file system](https://github.com/chavarera/python-mini-projects/tree/master/projects/Organized_download_folder_with_different_categories) | [Mitesh](https://github.com/Mitesh2499) +18 | [Send emails](https://github.com/chavarera/python-mini-projects/tree/master/projects/Send_email_from_csv) | [Mitesh](https://github.com/Mitesh2499) +19 | [Get Ipaddress and Hostname of Website](https://github.com/chavarera/python-mini-projects/tree/master/projects/Find_out_hostname_and_ip_address) | [Nuh Mohammed](https://github.com/NuhMohammed)| +20 | [Progressbar using tqdm](https://github.com/chavarera/python-mini-projects/tree/master/projects/Terminal_progress_bar_with_images_resizing) | [Mitesh](https://github.com/Mitesh2499) +21 | [Get meta information of images](https://github.com/chavarera/python-mini-projects/tree/master/projects/Get_meta_information_of_images) | [Gaodong](https://github.com/xlgd) +22 | [Captures Frames from video](https://github.com/chavarera/python-mini-projects/tree/master/projects/Capture_Video_Frames) | [phileinSophos](https://github.com/phileinSophos/) +23 | [Fetch Wifi Saved Password Windows](https://github.com/chavarera/python-mini-projects/tree/master/projects/Get_wifi_password) | [Mitesh](https://github.com/Mitesh2499) +24 | [Save Screenshot of given Website](https://github.com/chavarera/python-mini-projects/tree/master/projects/Snapshot_of_given_website) | [m044de](https://github.com/m044de/) +25 | [Split files using no of lines](https://github.com/chavarera/python-mini-projects/tree/master/projects/Split_File) | [phileinSophos](https://github.com/phileinSophos/) +26 | [Encode and decode text using key](https://github.com/chavarera/python-mini-projects/tree/master/projects/Create_script_to_encode_and_decode_text) | [Gaodong](https://github.com/xlgd) +27 | [Captures screenshot at regular interval of time](https://github.com/chavarera/python-mini-projects/tree/master/projects/capture_screenshot) | [d33pc](https://github.com/d33pc/) +28 | [Create password hash](https://github.com/chavarera/python-mini-projects/tree/master/projects/Hashing_passwords) | [m044de](https://github.com/m044de/) +29 | [Encrypt file and folders](https://github.com/chavarera/python-mini-projects/tree/master/projects/Create_a_script_to_encrypt_files_and_folder) | [Gaodong](https://github.com/xlgd) +30 | [Decimal to binary and vice versa](https://github.com/chavarera/python-mini-projects/tree/master/projects/Decimal_to_binary_convertor_and_vice_versa) | [Alan Anaya](https://github.com/alananayaa/) +31 | [Cli Based Todo Application](https://github.com/chavarera/python-mini-projects/tree/master/projects/Cli_todo) | [Audrey Yang](https://github.com/audrey-yang) +32 | [Currency Convertor cli app](https://github.com/chavarera/python-mini-projects/tree/master/projects/Currency_converter) | [github-of-wone](https://github.com/github-of-wone/) +33 | [Stopwatch Application](https://github.com/chavarera/python-mini-projects/tree/master/projects/Create_a_simple_stopwatch) | [Gaodong](https://github.com/xlgd) +34 | [CLI Proxy Tester](https://github.com/chavarera/python-mini-projects/tree/master/projects/cli_proxy_tester) | [Ingo Kleiber](https://github.com/IngoKl) +35 | [XML to JSON file Convertor](https://github.com/chavarera/python-mini-projects/tree/master/projects/Convert_XML_to_JSON) | [John Kirtley](https://github.com/johnkirtley) +36 | [Compress file and folders](https://github.com/chavarera/python-mini-projects/tree/master/projects/Write_script_to_compress_folder_and_files) | [Gaodong](https://github.com/xlgd) +37 | [Find IMDB movie ratings](https://github.com/chavarera/python-mini-projects/tree/master/projects/Find_imdb_rating) | [ShivSt](https://github.com/ShivSt) +38 | [Convert dictionary to python object](https://github.com/chavarera/python-mini-projects/tree/master/projects/convert_dictionary_to_python_object) | [Varun-22](https://github.com/Varun-22) +39 | [Move files to alphabetically arranged folders](https://github.com/chavarera/python-mini-projects/tree/master/projects/Write_script_to_move_files_into_alphabetically_ordered_folder) | [Chathura Nimesh](https://github.com/kana800/) +40 | [Scrape Youtube video comment](https://github.com/chavarera/python-mini-projects/tree/master/projects/Web_scraping_a_youtube_comment) | [Saicharan67](https://github.com/Saicharan67) +41 | [Website Summerization](https://github.com/chavarera/python-mini-projects/tree/master/projects/Web_page_summation) | [Believe Ohiozua](https://github.com/believeohiozua) +42 | [Text To speech(mp3)](https://github.com/chavarera/python-mini-projects/tree/master/projects/Text_to_speech) | [Sergej Dikun](https://github.com/Serhazor) +43 | [Image format conversio)](https://github.com/chavarera/python-mini-projects/tree/master/projects/convert_Imgs) | [Ramon Ferreira](https://github.com/ramonfsk) +44 | [Save random article from wikipedia](https://github.com/chavarera/python-mini-projects/tree/master/projects/Random_Wikipedia_Article) | [Rakshit Puri](https://github.com/skate1512) +45 | [Check website connectivity](https://github.com/chavarera/python-mini-projects/tree/master/projects/Check_website_connectivity) | [Shiv Thakur](https://github.com/ShivSt) +46 | [Fetch city weather information](https://github.com/chavarera/python-mini-projects/tree/master/projects/Fetch_current_weather) | [Kushal Agrawal](https://github.com/kushal98) +47 | [Calculator App](https://github.com/chavarera/python-mini-projects/tree/master/projects/Create_calculator_app) | [Gaodong](https://github.com/xlgd) +48 | [Merge Csv files](https://github.com/chavarera/python-mini-projects/tree/master/projects/Merge_csv_files) | [Kushal Agrawal](https://github.com/kushal98) +49 | [Fetch tweets and save in csv](https://github.com/chavarera/python-mini-projects/tree/master/projects/Fetch_and_store_tweets) | [Kushal Agrawal](https://github.com/kushal98) +50 | [Language Translator using googletrans](https://github.com/chavarera/python-mini-projects/tree/master/projects/Language_translator) | [Ashiqur Rahman Tusher](https://github.com/ashikurt77) +51 | [Split video using timeperiod](https://github.com/chavarera/python-mini-projects/tree/master/projects/Split_a_video_file_by_given_time_period) | [Chathura Nimesh](https://github.com/kana800/) +52 | [Fetch unique words from file](https://github.com/chavarera/python-mini-projects/tree/master/projects/Unique_words_in_a_file) | [Rakshit Puri](https://github.com/skate1512) +53 | [Speech to text converter](https://github.com/chavarera/python-mini-projects/tree/master/projects/Speech_to_text) | [Paulo Henrique](https://github.com/chavarera/python-mini-projects/tree/master/projects/Speech%20to%20text) +54 | [Set Random Wallpaper](https://github.com/chavarera/python-mini-projects/tree/master/projects/Write_a_script_to_download_a_random_image_from_unsplash_and_set_it_as_wallpaper) | [Chathura Nimesh](https://github.com/kana800/) +55 | [Find Dominant color from image](https://github.com/chavarera/python-mini-projects/tree/master/projects/Dominant_color) | [Mitesh](https://github.com/Mitesh2499) +56 | [Ascii art](https://github.com/chavarera/python-mini-projects/tree/master/projects/Ascii_art) | [Shiny Akash](https://github.com/Shiny-Akash) +57 | [Merge Pdf Files](https://github.com/chavarera/python-mini-projects/tree/master/projects/Merge_pdfs) | [ShivSt](https://github.com/ShivSt) +58 | [Fetch Open Port](https://github.com/chavarera/python-mini-projects/tree/master/projects/Fetch_open_ports) | [Kushal Agrawal](https://github.com/kushal98) +59 | [Convert Numbers To Words](https://github.com/chavarera/python-mini-projects/tree/master/projects/Convert_numbers_to_word) | [Niraj Shrestha](https://github.com/CrestNiraj12) +60 | [Restart and Shutdown System](https://github.com/chavarera/python-mini-projects/tree/master/projects/Shutdown_or_restart_your_device) | [Phillibob55](https://github.com/Phillibob55) +61 | [Check website connectivity](https://github.com/chavarera/python-mini-projects/tree/master/projects/Check_website_connectivity) | [Shiv Thakur](https://github.com/ShivSt) +62 | [Digital clock using tkinter](https://github.com/chavarera/python-mini-projects/tree/master/projects/Digital_clock) | [Aditya Jetely](https://github.com/adityaj7) +63 | [Covert Image To Pdf](https://github.com/chavarera/python-mini-projects/tree/master/projects/Convert_a_image_to_pdf) | [Gaodong](https://github.com/xlgd) +64 | [Store emails in csv file](https://github.com/chavarera/python-mini-projects/tree/master/projects/Store_emails_in_csv) | [Shiv Thakur](https://github.com/ShivSt) +65 | [Test Internet Connection](https://github.com/chavarera/python-mini-projects/tree/master/projects/Internet_connection_check) | [Jacob Ogle](https://github.com/Jakeogle94) +66 | [XKCD Comics Downloader](https://github.com/chavarera/python-mini-projects/tree/master/projects/XKCD_downloader)| [Aditya Jetely](https://github.com/AdityaJ7) +67 | [Website Blocker And Unblocker](https://github.com/chavarera/python-mini-projects/tree/master/projects/Website_blocker)| [Phillibob55](https://github.com/Phillibob55) +68 | [Fetch Domain Dns Record ](https://github.com/chavarera/python-mini-projects/tree/master/projects/Dns_record)| [Aditya Jetely](https://github.com/AdityaJ7) +69 | [Python-Auto-Draw](https://github.com/chavarera/python-mini-projects/tree/master/projects/Python_auto_draw)| [Tushar Nankani](https://github.com/tusharnankani) +70 | [News Website Scraper](https://github.com/chavarera/python-mini-projects/tree/master/projects/News_website_scraper)| [pratik-choudhari](https://github.com/pratik-choudhari) +71 | [Rock Paper Scissors Game](https://github.com/chavarera/python-mini-projects/tree/master/projects/RockPaperScissors_Game)| [Tushar Nankani](https://github.com/tusharnankani) +72 | [Zip File Extractor](https://github.com/chavarera/python-mini-projects/tree/master/projects/Extract_zip_files)| [Aditya Jetely](https://github.com/AdityaJ7) +73 | [Random Password Generator](https://github.com/chavarera/python-mini-projects/blob/master/projects/Random_password_generator)| [Tushar Nankani](https://github.com/tusharnankani) +74 | [Script to perform Geocoding](https://github.com/chavarera/python-mini-projects/tree/master/projects/Geocoding)| [Aditya Jetely](https://github.com/AdityaJ7) +75 | [Python Carbon Clips](https://github.com/chavarera/python-mini-projects/tree/master/projects/Py_carbon_clips)| [Ravishankar Chavare](https://github.com/chavarera) +76 | [QR Code Generator](https://github.com/chavarera/python-mini-projects/tree/master/projects/Qr_code_generator)| [Shiv Thakur](https://github.com/ShivSt) +77 | [Recursive Password Generator](https://github.com/chavarera/python-mini-projects/tree/master/projects/Recursive_password_generator)| [Erfan Saberi](https://github.com/erfansaberi) +78 | [Tic Tac Toe](https://github.com/chavarera/python-mini-projects/tree/master/projects/Tic_tac_toe)| [Erfan Saberi](https://github.com/erfansaberi) +79 | [Tic Tac Toe with AI](https://github.com/chavarera/python-mini-projects/tree/master/projects/Tic_tac_toe_with_ai)| [Tushar Nankani](https://github.com/tusharnankani) +80 | [Cartoonify an Image](https://github.com/chavarera/python-mini-projects/tree/master/projects/Easy_cartoonify)| [Bartu Yaman](https://github.com/brtymn) +81 | [Quote Scrapper](https://github.com/chavarera/python-mini-projects/tree/master/projects/Scrape_quotes)| [Anandha Krishnan Aji](https://github.com/anandhakrishnanaji) +82 | [Time To Load Website](https://github.com/chavarera/python-mini-projects/tree/master/projects/Time_to_load_website)| [Aditya Jetely](https://github.com/AdityaJ7) +83 | [Customer Loan Repayment Prediction](https://github.com/chavarera/python-mini-projects/tree/master/Notebooks/Customer_loan_repayment_problem)| [ART](https://github.com/Tomyzon1728) +84 | [Generate Wordcloud from Wikipedia Article](https://github.com/chavarera/python-mini-projects/tree/master/projects/Wikipedia_search_wordcloud)| [Naman Shah](https://github.com/namanshah01) +85 | [Number Guessing Game](https://github.com/chavarera/python-mini-projects/tree/master/projects/Number_guessing_game)| [Javokhirbek](https://github.com/leader2one) +86 | [Convert JPEG to PNG](https://github.com/chavarera/python-mini-projects/tree/master/projects/Convert_JPEG_to_PNG)| [AnuragGupta](https://github.com/AnuragGupta806) +87 | [Movie Information Scrapper](https://github.com/chavarera/python-mini-projects/tree/master/projects/Movie%20Information%20Scraper)| [Anandha Krishnan Aji](https://github.com/anandhakrishnanaji) +88 | [Fetch HTTP Status Code](https://github.com/chavarera/python-mini-projects/tree/master/projects/Fetch%20HTTP%20status%20code)| [AkshataJ96](https://github.com/AkshataJ96) +89 | [Check Leap Year](https://github.com/chavarera/python-mini-projects/tree/master/projects/Leap_Year_Checker)| [Hariom Vyas](https://github.com/Hariom1509) +90 | [Scrape Medium Articles](https://github.com/chavarera/python-mini-projects/tree/master/projects/Scraping%20Medium%20Articles)| [Naman Shah](https://github.com/namanshah01) +91 | [HackerNews Scrapper](https://github.com/chavarera/python-mini-projects/tree/master/projects/Scrape_Hacker_News)| [Javokhirbek](https://github.com/leader2one) +92 | [Reduce Image Size](https://github.com/chavarera/python-mini-projects/tree/master/projects/Reduce_image_file_size)| [Vipul Verma](https://github.com/VIPverma01) +93 | [Easy Video Player](https://github.com/chavarera/python-mini-projects/tree/master/projects/EasyVideoPlayer)| [Bartu Yaman](https://github.com/brtymn) +94 | [GeeksforGeeks Article downloader](https://github.com/chavarera/python-mini-projects/tree/master/projects/download%20GeeksForGeeks%20articles)| [Shiv Thakur](https://github.com/ShivSt) +95 | [PDF to Text](https://github.com/chavarera/python-mini-projects/tree/master/projects/convert%20pdf%20to%20text)| [pi1814](https://github.com/pi1814) +96 | [Unstructured Supplemenrary Service Data](https://github.com/chavarera/python-mini-projects/tree/master/projects/Unstructured%20Supplemenrary%20%20Service%20Data)| [ART](https://github.com/Tomyzon1728) +97 | [Duplicate Files remover](https://github.com/chavarera/python-mini-projects/tree/master/projects/Duplicate%20files%20remover)| [Anandha Krishnan Aji](https://github.com/anandhakrishnanaji) +98 | [PNG to ICO converter](https://github.com/chavarera/python-mini-projects/tree/master/projects/convert_png_images_to_ico_format)| [weicheansoo](https://github.com/weicheansoo) +99 | [Find IMDB Ratings](https://github.com/chavarera/python-mini-projects/tree/master/projects/Find_imdb_rating)| [Utkarsh Bajaj](https://github.com/utkarshbajaj) +100 | [Terminal Based Hangman Game](https://github.com/chavarera/python-mini-projects/tree/master/projects/Terminal_Based_Hangman_Game)| [neohboonyee99](https://github.com/neohboonyee99) +101 | [Diff Utility](https://github.com/Python-World/python-mini-projects/tree/master/projects/Diff_Util)| [KILLinefficiency](https://github.com/KILLinefficiency) +102 | [Sine_Wave](https://github.com/chavarera/python-mini-projects/tree/master/projects/Sine_Wave)| [echoaj](https://github.com/echoaj) diff --git a/docs/_config.yml b/docs/_config.yml new file mode 100644 index 000000000..8b1378917 --- /dev/null +++ b/docs/_config.yml @@ -0,0 +1 @@ + diff --git a/docs/assets/css/main.css b/docs/assets/css/main.css new file mode 100644 index 000000000..26dfbd7ac --- /dev/null +++ b/docs/assets/css/main.css @@ -0,0 +1,85 @@ +/* Required for browsers w/o shadow DOM support */ +iframe[src*="buttons.github.io"] { + margin: 0; +} + +.markdown-section strong code { + font-weight: normal; + + +} +.markdown-section{ +max-width:100%; +} + +/* Theme Toggles */ +label[data-class-target="label + .docsify-tabs"] { + margin-right: 0.8em; +} + +.sidebar-toggle{ +Display:none; +} +.sidebar{ +Display:none; +} +/* Custom Styles */ +/* ========================================================================== */ +/* Icon Only */ +.docsify-tabs__tab[data-tab="icon only"] { + letter-spacing: -100vw; + color: transparent; +} +.docsify-tabs__tab[data-tab="icon only"]:before { + content: url(https://icongr.am/feather/image.svg?size=18&color=999999); + vertical-align: middle; +} + +/* Icon + Label */ +[data-tab="icon + label"]:before { + content: url(https://icongr.am/feather/image.svg?size=18&color=999999); + height: 16px; + margin-right: 0.5em; + vertical-align: middle; +} + +/* Active State */ +.docsify-tabs__tab--active[data-tab="active state"] { + box-shadow: none; + background: #13547a; + color: white; +} +.docsify-tabs__content[data-tab-content="active state"] { + background-image: linear-gradient(0deg, #80d0c7 0%, #13547a 100%); +} +.docsify-tabs__content[data-tab-content="active state"] p strong { + color: white; +} + +/* CodePen */ +[data-tab-content="codepen"] .cp_embed_wrapper { + position: relative; + top: calc(0px - var(--docsifytabs-content-padding)); + left: calc(0px - var(--docsifytabs-content-padding)); + width: calc(100% + calc(var(--docsifytabs-content-padding) * 2)); + margin-bottom: calc(0px - var(--docsifytabs-content-padding)); +} + +/* Badge */ +[data-tab="badge"]:after { + content: 'New!'; + position: absolute; + top: 0; + right: 0; + min-height: 1em; + min-width: 1em; + padding: 0.325em 0.5em 0.3em 0.5em; + border-radius: 3px; + background: red; + color: #fff; + font-family: sans-serif; + font-weight: bold; + font-size: 11px; + line-height: 1; + transform: translate(35%, -45%); +} diff --git a/docs/index.html b/docs/index.html new file mode 100644 index 000000000..20151c299 --- /dev/null +++ b/docs/index.html @@ -0,0 +1,36 @@ + + + + + + + Python Project Collection + + + + + +
+ + + + + + + + + + + + + + diff --git a/projects/.DS_Store b/projects/.DS_Store new file mode 100644 index 000000000..cc9466266 Binary files /dev/null and b/projects/.DS_Store differ diff --git a/projects/Alarm clock/alarm_clock.py b/projects/Alarm clock/alarm_clock.py new file mode 100644 index 000000000..4c746282f --- /dev/null +++ b/projects/Alarm clock/alarm_clock.py @@ -0,0 +1,86 @@ +# Import Required Library +from tkinter import * +import datetime +import time +import winsound +from threading import * + +# Create Object +root = Tk() + +# Set geometry +root.geometry("400x200") + +# Use Threading +def Threading(): + t1=Thread(target=alarm) + t1.start() + +def alarm(): + # Infinite Loop + while True: + # Set Alarm + set_alarm_time = f"{hour.get()}:{minute.get()}:{second.get()}" + + # Wait for one seconds + time.sleep(1) + + # Get current time + current_time = datetime.datetime.now().strftime("%H:%M:%S") + print(current_time,set_alarm_time) + + # Check whether set alarm is equal to current time or not + if current_time == set_alarm_time: + print("Time to Wake up") + # Playing sound + winsound.PlaySound("sound.wav",winsound.SND_ASYNC) + +# Add Labels, Frame, Button, Optionmenus +Label(root,text="Alarm Clock",font=("Helvetica 20 bold"),fg="red").pack(pady=10) +Label(root,text="Set Time",font=("Helvetica 15 bold")).pack() + +frame = Frame(root) +frame.pack() + +hour = StringVar(root) +hours = ('00', '01', '02', '03', '04', '05', '06', '07', + '08', '09', '10', '11', '12', '13', '14', '15', + '16', '17', '18', '19', '20', '21', '22', '23', '24' + ) +hour.set(hours[0]) + +hrs = OptionMenu(frame, hour, *hours) +hrs.pack(side=LEFT) + +minute = StringVar(root) +minutes = ('00', '01', '02', '03', '04', '05', '06', '07', + '08', '09', '10', '11', '12', '13', '14', '15', + '16', '17', '18', '19', '20', '21', '22', '23', + '24', '25', '26', '27', '28', '29', '30', '31', + '32', '33', '34', '35', '36', '37', '38', '39', + '40', '41', '42', '43', '44', '45', '46', '47', + '48', '49', '50', '51', '52', '53', '54', '55', + '56', '57', '58', '59', '60') +minute.set(minutes[0]) + +mins = OptionMenu(frame, minute, *minutes) +mins.pack(side=LEFT) + +second = StringVar(root) +seconds = ('00', '01', '02', '03', '04', '05', '06', '07', + '08', '09', '10', '11', '12', '13', '14', '15', + '16', '17', '18', '19', '20', '21', '22', '23', + '24', '25', '26', '27', '28', '29', '30', '31', + '32', '33', '34', '35', '36', '37', '38', '39', + '40', '41', '42', '43', '44', '45', '46', '47', + '48', '49', '50', '51', '52', '53', '54', '55', + '56', '57', '58', '59', '60') +second.set(seconds[0]) + +secs = OptionMenu(frame, second, *seconds) +secs.pack(side=LEFT) + +Button(root,text="Set Alarm",font=("Helvetica 15"),command=Threading).pack(pady=20) + +# Execute Tkinter +root.mainloop() diff --git a/projects/All Links from given Webpage/get_links.py b/projects/All Links from given Webpage/get_links.py deleted file mode 100644 index 36e496115..000000000 --- a/projects/All Links from given Webpage/get_links.py +++ /dev/null @@ -1,11 +0,0 @@ -import requests as rq -from bs4 import BeautifulSoup - -url = input("Enter Link") -data = rq.get(url) -soup = BeautifulSoup(data.text, "html.parser") -links = [] -for link in soup.find_all("a"): - links.append(link.get("href")) - -print(links[:10]) diff --git a/projects/All_links_from_given_webpage/README.md b/projects/All_links_from_given_webpage/README.md new file mode 100644 index 000000000..822fa1623 --- /dev/null +++ b/projects/All_links_from_given_webpage/README.md @@ -0,0 +1,24 @@ +# All Links from given Webpage + +This script retrieves all links from a given Webpage and saves them as a txt file + +### Prerequisites +Required Modules +- BeautifulSoup4 +- requests + +to install: +``` +$ pip install -r requirements.txt +``` + +### How to run the script +``` bash +$ python get_links.py +``` +You will then be asked which webpage you would like to analyze. +After that the extracted links will be saved as an array in `myLinks.txt`. + + +## *Author Name* +[Mitesh](https://github.com/Mitesh2499) & [Michael Mba](https://github.com/mikeysan) diff --git a/projects/All_links_from_given_webpage/get_links.py b/projects/All_links_from_given_webpage/get_links.py new file mode 100644 index 000000000..c0d059b04 --- /dev/null +++ b/projects/All_links_from_given_webpage/get_links.py @@ -0,0 +1,17 @@ +import requests as rq +from bs4 import BeautifulSoup + +url = input("Enter Link: ") +if ("https" or "http") in url: + data = rq.get(url) +else: + data = rq.get("https://" + url) +soup = BeautifulSoup(data.text, "html.parser") +links = [] +for link in soup.find_all("a"): + links.append(link.get("href")) + +# Writing the output to a file (myLinks.txt) instead of to stdout +# You can change 'a' to 'w' to overwrite the file each time +with open("myLinks.txt", 'a') as saved: + print(links[:10], file=saved) diff --git a/projects/All_links_from_given_webpage/requirements.txt b/projects/All_links_from_given_webpage/requirements.txt new file mode 100644 index 000000000..947e8e896 --- /dev/null +++ b/projects/All_links_from_given_webpage/requirements.txt @@ -0,0 +1,2 @@ +beautifulsoup4==4.9.2 +requests==2.24.0 diff --git a/projects/Ascii_art/README.md b/projects/Ascii_art/README.md new file mode 100644 index 000000000..b7bb3326d --- /dev/null +++ b/projects/Ascii_art/README.md @@ -0,0 +1,30 @@ +# ascii-art + +## Description +This Project will take an image and print out an [ASCII-art](https://en.wikipedia.org/wiki/ASCII_art). + +## About this Project +This project uses [opencv](https://www.opencv.org) to process image and [numpy](https://numpy.org) to manipulate arrays. The Image is numerically coded for different threshold regions it comes under and for each coded regions , a symbol is used for printing it out in the stdout. + +## Usage +Use the Script [make_art.py](https://github.com/Shiny-Akash/python-mini-projects/blob/ascii-art/projects/asciiart/make_art.py) . +In the command line, Enter + +`python3 make_art.py [image_path]` + +Replace the `[image_path]` with the image you want to do ascii-art. By default it takes [sample_image.png](https://github.com/Shiny-Akash/python-mini-projects/blob/ascii-art/projects/asciiart/sample_image.png) + +## Customization +There are two things you can customize in [make_art.py](https://github.com/Shiny-Akash/python-mini-projects/blob/ascii-art/projects/asciiart/make_art.py). + +* `symbols_list` +* `threshold_list` + +Modify the threshold list to take **different threshold values** thereby changing the patterns in the printed image. +Modify the symbols list to substitute **different symbols** in the coded patterns. + +## Sample +Input Image : +![input_image](sample_image.png) +Output : +![output_image](sample_output.png) diff --git a/projects/Ascii_art/make_art.py b/projects/Ascii_art/make_art.py new file mode 100644 index 000000000..f966d676e --- /dev/null +++ b/projects/Ascii_art/make_art.py @@ -0,0 +1,54 @@ +#!/usr/bin/env python3 + +import cv2 +import numpy as np + +import sys + +symbols_list = ["#", "-", "*", ".", "+", "o"] +threshold_list = [0, 50, 100, 150, 200] + +def print_out_ascii(array): + """prints the coded image with symbols""" + + for row in array: + for e in row: + # select symbol based on the type of coding + print(symbols_list[int(e) % len(symbols_list)], end="") + print() + + +def img_to_ascii(image): + """returns the numeric coded image""" + + # resizing parameters + # adjust these parameters if the output doesn't fit to the screen + height, width = image.shape + new_width = int(width / 20) + new_height = int(height / 40) + + # resize image to fit the printing screen + resized_image = cv2.resize(image, (new_width, new_height),) + + thresh_image = np.zeros(resized_image.shape) + + for i, threshold in enumerate(threshold_list): + # assign corresponding values according to the index of threshold applied + thresh_image[resized_image > threshold] = i + return thresh_image + + +if __name__ == "__main__": + + if len(sys.argv) < 2: + print("Image Path not specified : Using sample_image.png\n") + image_path = "sample_image.png" # default image path + + if len(sys.argv) == 2: + print("Using {} as Image Path\n".format(sys.argv[1])) + image_path = sys.argv[1] + + image = cv2.imread(image_path, 0) # read image + + ascii_art = img_to_ascii(image) + print_out_ascii(ascii_art) diff --git a/projects/Ascii_art/requirements.txt b/projects/Ascii_art/requirements.txt new file mode 100644 index 000000000..eeb7194fa --- /dev/null +++ b/projects/Ascii_art/requirements.txt @@ -0,0 +1,2 @@ +opencv-python==4.3.0.36 +numpy==1.19.1 diff --git a/projects/Ascii_art/sample_image.png b/projects/Ascii_art/sample_image.png new file mode 100644 index 000000000..7a0af276f Binary files /dev/null and b/projects/Ascii_art/sample_image.png differ diff --git a/projects/Ascii_art/sample_output.png b/projects/Ascii_art/sample_output.png new file mode 100644 index 000000000..b3b20fee3 Binary files /dev/null and b/projects/Ascii_art/sample_output.png differ diff --git a/projects/AudioBook/Audio-book.py b/projects/AudioBook/Audio-book.py new file mode 100644 index 000000000..91c92570e --- /dev/null +++ b/projects/AudioBook/Audio-book.py @@ -0,0 +1,36 @@ +#Importing Libraries +#Importing Google Text to Speech library +from gtts import gTTS + +#Importing PDF reader PyPDF2 +import PyPDF2 + +#Open file Path +pdf_File = open('name.pdf', 'rb') + +#Create PDF Reader Object +pdf_Reader = PyPDF2.PdfFileReader(pdf_File) +count = pdf_Reader.numPages # counts number of pages in pdf +textList = [] + +#Extracting text data from each page of the pdf file +for i in range(count): + try: + page = pdf_Reader.getPage(i) + textList.append(page.extractText()) + except: + pass + +#Converting multiline text to single line text +textString = " ".join(textList) + +print(textString) + +#Set language to english (en) +language = 'en' + +#Call GTTS +myAudio = gTTS(text=textString, lang=language, slow=False) + +#Save as mp3 file +myAudio.save("Audio.mp3") diff --git a/projects/AudioBook/README.md b/projects/AudioBook/README.md new file mode 100644 index 000000000..2af610457 --- /dev/null +++ b/projects/AudioBook/README.md @@ -0,0 +1,14 @@ +# AudioBook + +### Description +This application will make an mp3 based on you pdf file. + +### Instal the requirements +``` +pip install gtts +pip install PyPDF2 +``` +### Dun the application +``` +python Audio-book.py +``` diff --git a/projects/Baidu_POI_crawl/README.md b/projects/Baidu_POI_crawl/README.md new file mode 100644 index 000000000..9dc7ff0e0 --- /dev/null +++ b/projects/Baidu_POI_crawl/README.md @@ -0,0 +1,30 @@ +# Script Title + + +Crawl the POI in the city through Baidu map API. + +### Prerequisites + + +1. `pip install -r requirements.txt` +2. Log in to [Baidu map open platform](https://lbsyun.baidu.com/apiconsole/key#/home), creating web API and record AK. + +### How to run the script + + + +1. `cd python-mini-projects\projects\Baidu_POI_crawl` +2. `python main.py --ak yours_ak --city city_name --poi poi_name` + +### Screenshot/GIF showing the sample use of the script + + + +![image-20211117172514622](https://user-images.githubusercontent.com/71769312/142175449-294daf40-413a-43df-aa3a-8d99a203afa9.png) + +![UXGOS$6WMD)`{XQ$8YK}7WU](https://user-images.githubusercontent.com/71769312/142175459-8f10d1c4-5c5d-4754-9fd5-d5ec58a79081.png) + +## *Author Name* + + +[YiZhou Chen](https://github.com/geoyee) diff --git a/projects/Baidu_POI_crawl/__pycache__/util.cpython-37.pyc b/projects/Baidu_POI_crawl/__pycache__/util.cpython-37.pyc new file mode 100644 index 000000000..f80dadf79 Binary files /dev/null and b/projects/Baidu_POI_crawl/__pycache__/util.cpython-37.pyc differ diff --git a/projects/Baidu_POI_crawl/__pycache__/util.cpython-38.pyc b/projects/Baidu_POI_crawl/__pycache__/util.cpython-38.pyc new file mode 100644 index 000000000..ce59c01d5 Binary files /dev/null and b/projects/Baidu_POI_crawl/__pycache__/util.cpython-38.pyc differ diff --git a/projects/Baidu_POI_crawl/main.py b/projects/Baidu_POI_crawl/main.py new file mode 100644 index 000000000..f7c562005 --- /dev/null +++ b/projects/Baidu_POI_crawl/main.py @@ -0,0 +1,27 @@ +import os +import os.path as osp +from util import get_baidu_poi +import argparse + + +def run(args): + baidu_web_ak = args.ak + city_str = args.city + roi_key = args.poi + output = args.save + if not osp.exists(output): + os.makedirs(output) + get_baidu_poi(roi_key, city_str, baidu_web_ak, output) + print("current area completed") + + +parser = argparse.ArgumentParser(description="input parameters") +parser.add_argument("--ak", type=str, required=True, help="Baidu web ak") +parser.add_argument("--city", type=str, required=True, help="City name") +parser.add_argument("--poi", type=str, required=True, help="POI key") +parser.add_argument("--save", type=str, default="output", help="Save path") + + +if __name__ == "__main__": + args = parser.parse_args() + run(args) \ No newline at end of file diff --git a/projects/Baidu_POI_crawl/output/2021-11-17.log b/projects/Baidu_POI_crawl/output/2021-11-17.log new file mode 100644 index 000000000..938f3a7af --- /dev/null +++ b/projects/Baidu_POI_crawl/output/2021-11-17.log @@ -0,0 +1 @@ +2021-11-17-17-36-18 成都 3 diff --git a/projects/Baidu_POI_crawl/output/2021-11-17.txt b/projects/Baidu_POI_crawl/output/2021-11-17.txt new file mode 100644 index 000000000..277fcc33c --- /dev/null +++ b/projects/Baidu_POI_crawl/output/2021-11-17.txt @@ -0,0 +1,54 @@ +四川大学(望江校区),104.090633,30.637031,武侯区,四川省成都市武侯区一环路南一段24号 +四川大学(江安校区),104.005145,30.562814,双流区,成都市双流区川大路二段2号 +电子科技大学(沙河校区),104.107198,30.681868,成华区,四川省成都市成华区建设北路二段4号 +成都大学,104.196613,30.656051,龙泉驿区,四川省成都市龙泉驿区成洛大道2025号 +西南民族大学(武侯校区),104.055946,30.645411,武侯区,四川省成都市武侯区一环路南四段16号 +西南财经大学(柳林校区),103.827675,30.687832,温江区,成都市温江区柳台大道555号 +西南交通大学(九里校区),104.059439,30.704977,金牛区,四川省成都市金牛区二环路北一段111号 +电子科技大学(清水河校区),103.937404,30.756035,郫都区,四川省成都市高新区西源大道2006号 +西南交通大学(犀浦校区),103.993214,30.770399,郫都区,四川省成都市郫都区犀安路999号 +成都中医药大学(十二桥校区),104.050309,30.672574,金牛区,四川省成都市金牛区十二桥路37号 +四川农业大学(都江堰校区),103.629275,31.009812,都江堰市,四川省成都市都江堰市建设路288号 +四川大学(华西校区),104.075894,30.646763,武侯区,成都市武侯区人民南路三段17号 +成都艺术职业大学,103.892092,30.493563,新津区,四川省成都市新津区花源街道白云大道115号 +电子科技大学(九里堤校区),104.055669,30.716153,金牛区,成都市金牛区九里堤西路8号 +电子科技大学继续教育学院,104.103193,30.679693,成华区,四川省成都市成华区一环路东一段240号 +电子科技大学沙河校区-逸夫楼,104.109665,30.680913,成华区,成都市成华区建设北路二段4号电子科技大学沙河校区 +成都大学-四川抗菌素工业研究所,104.177919,30.694508,成华区,成都市成华区华冠路168号 +我的大学,104.197398,30.828142,新都区,成都市新都区同仁路199号 +成都中医药大学附属医院,104.048468,30.673511,金牛区,成都市金牛区十二桥路39-41号 +电子科技大学西区科技园,103.98074,30.739837,郫都区,四川省成都市郫都区天辰路88号 +成都大学-图书馆,104.195601,30.656236,龙泉驿区,四川省成都市龙泉驿区十陵镇成洛大道 +成都广播电视大学继续教育学院(建设北路一段),104.102742,30.677484,成华区,成都市成华区建设北路一段7号 +西南石油大学新体测中心,104.194813,30.838617,新都区,成都市新都区鸿运大道东段西南石油大学(成都校区) +成都理工大学东苑-9栋,104.158206,30.688295,成华区,成都市成华区民智巷理工东苑-西区 +成都广播电视大学直属城东学院-教学楼1号楼,104.102347,30.677874,成华区,成都市成华区建设北路一段7号 +电子科技大学附属实验小学(沙河校区),104.10353,30.683807,成华区,四川省成都市成华区府青路2段-3号-青1号 +成都大学附属中学校,104.098172,30.688535,成华区,四川省成都市成华区府青路街道三友路135号 +成都理工大学附属小学,104.153179,30.696257,成华区,四川省成都市成华区民兴东路62号 +西南财经大学,104.442003,30.862562,金堂县,成都市金堂县幸福横街百合苑(幸福横路) +电子科技大学实验幼儿园,104.10855,30.684714,成华区,成都市成华区建设北路二段5号东院沙河缘15号 +四川师范大学附属天府欧城幼稚园,104.261685,30.898376,青白江区,成都市青白江区同华大道与新河路交叉路口往西北约260米 +西南石油大学学生公寓-4号楼,104.19334,30.829785,新都区,四川省成都市新都区大学路160号 +西南石油大学教工41幢,104.188074,30.83157,新都区,成都市新都区蜀龙大道北段香城学府 +西南石油大学教工42幢,104.188467,30.831576,新都区,成都市新都区蜀龙大道北段香城学府 +西南石油大学(成都校区)教工宿舍-12幢,104.188587,30.830054,新都区,成都市新都区南环路香城学府 +西南石油大学材料科学与工程学院,104.190255,30.837702,新都区,成都市新都区蜀龙大道北段西南石油大学(成都校区) +西南石油大学教工35幢,104.187797,30.832034,新都区,成都市新都区蜀龙大道北段香城学府 +成都医学院第一附属医院-大学生宿舍,104.165693,30.836846,新都区,成都市新都区新新街二巷成都医学院第一附属医院北侧 +成都医学院第一附属医院大学生宿舍-33幢,104.165218,30.836607,新都区,四川省成都市新都区成都医学院第一附属医院大学生宿舍33幢 +电子科技大学医院,104.11028,30.68007,成华区,成都市成华区建设北路二段4号电子科技大学沙河校区 +西南石油大学(成都校区)教工宿舍-2幢,104.186624,30.828824,新都区,成都市新都区嘉陵路西南石油大学(成都校区)教工宿舍2幢 +四川农业大学都江堰校区-教职工住宅第5幢,103.630269,31.010702,都江堰市,四川省成都市都江堰市柳岸路附近四川农业大学都江堰校区教职工住宅第5幢 +四川农业大学都江堰校区第一教学楼-侧楼,103.627828,31.010159,都江堰市,四川省成都市都江堰市建设路288号 +四川农业大学都江堰校区学生公寓第-1幢,103.630687,31.009693,都江堰市,四川省成都市都江堰市观景路41号附近四川农业大学都江堰校区学生公寓第1幢 +四川农业大学-第二林业勘察设计研究所,103.626795,31.010544,都江堰市,成都市都江堰市建设路288号 +西华大学老川东食品科研中心,104.221373,30.822995,新都区,成都市新都区君跃路四川老川东食品有限公司 +西南石油大学成都校区油气钻井技术国家工程实验室钻头研究室,104.190204,30.836932,新都区,成都市新都区蜀龙大道北段西南石油大学(成都校区) +四川师范大学附属田童幼儿园,103.630805,30.97236,都江堰市,成都市都江堰市幸福镇灌温路78号 +四川农业大学都江堰校区-教职工住宅第14幢,103.628016,31.012494,都江堰市,成都市都江堰市建设路288号四川农业大学(都江堰校区) +四川西南交通大学希望学院-图书馆,104.471273,30.85726,金堂县,四川省成都市金堂县学府路8号 +四川农业大学都江堰校区-教职工住宅第7幢,103.630133,31.010203,都江堰市,成都市都江堰市建设路288号四川农业大学(都江堰校区) +西南石油大学教工-28幢,104.187065,30.832293,新都区,成都市新都区西南石油大学(成都校区)教工宿舍28幢 +西华大学彭州校区-女生公寓,103.949394,30.98662,彭州市,成都市彭州市南大街168号 +四川农业大学都江堰校区-研究生公寓,103.632825,31.010149,都江堰市,成都市都江堰市平武巷柳岸公寓东南门南侧约90米 diff --git a/projects/Baidu_POI_crawl/requirements.txt b/projects/Baidu_POI_crawl/requirements.txt new file mode 100644 index 000000000..0b37a21e8 --- /dev/null +++ b/projects/Baidu_POI_crawl/requirements.txt @@ -0,0 +1,2 @@ +requests +json \ No newline at end of file diff --git a/projects/Baidu_POI_crawl/util.py b/projects/Baidu_POI_crawl/util.py new file mode 100644 index 000000000..b00c3dc71 --- /dev/null +++ b/projects/Baidu_POI_crawl/util.py @@ -0,0 +1,47 @@ +import requests +import json +import time + + +# call API +def get_baidu_poi(roi_key, city_str, baidu_ak, output): + """ + inputs: + roi_key: poi name + city_str: city name + baidu_ak: baidu web API AK + output: file save path + """ + now_time = time.strftime("%Y-%m-%d") + page_num = 0 + logfile = open(output + "/" + now_time + ".log", "a+", encoding="utf-8") + file = open(output + "/" + now_time + ".txt", "a+", encoding="utf-8") + while True: + try: + URL = "http://api.map.baidu.com/place/v2/search?query=" + roi_key + \ + "®ion=" + city_str + \ + "&output=json" + \ + "&ak=" + baidu_ak + \ + "&scope=2" + \ + "&page_size=20" + \ + "&page_num=" + str(page_num) + resp = requests.get(URL) + res = json.loads(resp.text) + if len(res["results"]) == 0: + logfile.writelines(time.strftime("%Y-%m-%d-%H-%M-%S") + " " + city_str + " " + str(page_num) + "\n") + break + else: + for r in res["results"]: + j_name = r["name"] + j_lat = r["location"]["lat"] + j_lon = r["location"]["lng"] + j_area = r["area"] + j_add = r["address"] + j_str = str(j_name) + "," + str(j_lon) + "," + str(j_lat) + "," + str(j_area) + "," + str(j_add) + "\n" + file.writelines(j_str) + page_num += 1 + time.sleep(1) + except: + print("except") + logfile.writelines(time.strftime("%Y-%m-%d-%H-%M-%S") + " " + city_str + " " + str(page_num) + "\n") + break \ No newline at end of file diff --git a/projects/Battery_notification/README.md b/projects/Battery_notification/README.md new file mode 100644 index 000000000..a59acf410 --- /dev/null +++ b/projects/Battery_notification/README.md @@ -0,0 +1,23 @@ +# Battery Notificator + +This python script gives you a notification about your battery percentage of the device. + +## Pre-requisites: + +You will need to install python on your machine. You can download python from the python.org and install it. +And a few other python package that you need to install are as: + + 1. psutil + > pip install psutil + + 2. pynotifier + > pip install py-notifier + + 3. win10toast + > pip install win10toast + +## How to run the Script: + python battery.py + +## Authon Name: +Bharat Gupta diff --git a/projects/battery notification/battery.py b/projects/Battery_notification/battery.py similarity index 75% rename from projects/battery notification/battery.py rename to projects/Battery_notification/battery.py index 30700e95e..06b0cf52d 100644 --- a/projects/battery notification/battery.py +++ b/projects/Battery_notification/battery.py @@ -1,19 +1,19 @@ -# pip install psutil -import psutil - -battery = psutil.sensors_battery() -plugged = battery.power_plugged -percent = battery.percent - -if percent >= 30: - - # pip install pynotifier - # pip install win10toast - from pynotifier import Notification - - Notification( - title="Battery Low", - description=str(percent) + "% Battery remain!!", - duration=5, # Duration in seconds - urgency=Notification.URGENCY_CRITICAL, - ).send() +# pip install psutil +import psutil + +battery = psutil.sensors_battery() +plugged = battery.power_plugged +percent = battery.percent + +if percent <= 30 and plugged!=True: + + # pip install py-notifier + # pip install win10toast + from pynotifier import Notification + + Notification( + title="Battery Low", + description=str(percent) + "% Battery remain!!", + duration=5, # Duration in seconds + + ).send() diff --git a/projects/Battery_notification/requirements.txt b/projects/Battery_notification/requirements.txt new file mode 100644 index 000000000..30f4d0a98 --- /dev/null +++ b/projects/Battery_notification/requirements.txt @@ -0,0 +1,3 @@ +psutil==5.7.2 +py-notifier==0.1 +win10toast==0.9 diff --git a/projects/Billing_system/Bill.PNG b/projects/Billing_system/Bill.PNG new file mode 100644 index 000000000..3e0075e89 Binary files /dev/null and b/projects/Billing_system/Bill.PNG differ diff --git a/projects/Billing_system/README.md b/projects/Billing_system/README.md new file mode 100644 index 000000000..048967ae7 --- /dev/null +++ b/projects/Billing_system/README.md @@ -0,0 +1,24 @@ +

Billing system using Tkinter

+

This project can be used for any shops. User can store all the data and generate the bill.

+ +

Tech stack:

+
    +
  • Python
  • +
+ +

Libraries used:

+
    +
  • Tkinter
  • +
  • Os
  • +
  • Messagebox
  • +
+ +

To install external modules:

+

  • Run pip install tkinter
  • + +

    To execute the project:

    +

  • Run billing system.py
  • + +

    Screenshot/GIF of this project.

    + +![Bill](https://user-images.githubusercontent.com/72568715/134779769-7695a727-adbb-43b7-9e60-1205dc982ae7.PNG) diff --git a/projects/Billing_system/biling_system.py b/projects/Billing_system/biling_system.py new file mode 100644 index 000000000..38c8b880b --- /dev/null +++ b/projects/Billing_system/biling_system.py @@ -0,0 +1,427 @@ +from tkinter import* +import random +import os +from tkinter import messagebox + +# ============main============================ +class Bill_App: + def __init__(self, root): + self.root = root + self.root.geometry("1350x700+0+0") + self.root.title("Billing Software") + bg_color = "#badc57" + title = Label(self.root, text="Billing Software", font=('times new roman', 30, 'bold'), pady=2, bd=12, bg="#badc57", fg="Black", relief=GROOVE) + title.pack(fill=X) + # ================variables======================= + self.sanitizer = IntVar() + self.mask = IntVar() + self.hand_gloves = IntVar() + self.dettol = IntVar() + self.newsprin = IntVar() + self.thermal_gun = IntVar() + # ============grocery============================== + self.rice = IntVar() + self.food_oil = IntVar() + self.wheat = IntVar() + self.daal = IntVar() + self.flour = IntVar() + self.maggi = IntVar() + #=============coldDtinks============================= + self.sprite = IntVar() + self.limka = IntVar() + self.mazza = IntVar() + self.coke = IntVar() + self.fanta = IntVar() + self.mountain_duo = IntVar() + # ==============Total product price================ + self.medical_price = StringVar() + self.grocery_price = StringVar() + self.cold_drinks_price = StringVar() + # ==============Customer========================== + self.c_name = StringVar() + self.c_phone = StringVar() + self.bill_no = StringVar() + x = random.randint(1000, 9999) + self.bill_no.set(str(x)) + self.search_bill = StringVar() + # ===============Tax================================ + self.medical_tax = StringVar() + self.grocery_tax = StringVar() + self.cold_drinks_tax = StringVar() + # =============customer retail details====================== + F1 = LabelFrame(self.root, text="Customer Details", font=('times new roman', 15, 'bold'), bd=10, fg="Black", bg="#badc57") + F1.place(x=0, y=80, relwidth=1) + cname_lbl = Label(F1, text="Customer Name:", bg=bg_color, font=('times new roman', 15, 'bold')) + cname_lbl.grid(row=0, column=0, padx=20, pady=5) + cname_txt = Entry(F1, width=15, textvariable=self.c_name, font='arial 15', bd=7, relief=GROOVE) + cname_txt.grid(row=0, column=1, pady=5, padx=10) + + cphn_lbl = Label(F1, text="Customer Phone:", bg="#badc57", font=('times new roman', 15, 'bold')) + cphn_lbl.grid(row=0, column=2, padx=20, pady=5) + cphn_txt = Entry(F1, width=15, textvariable=self.c_phone, font='arial 15', bd=7, relief=GROOVE) + cphn_txt.grid(row=0, column=3, pady=5, padx=10) + + c_bill_lbl = Label(F1, text="Bill Number:", bg="#badc57", font=('times new roman', 15, 'bold')) + c_bill_lbl.grid(row=0, column=4, padx=20, pady=5) + c_bill_txt = Entry(F1, width=15, textvariable=self.search_bill, font='arial 15', bd=7, relief=GROOVE) + c_bill_txt.grid(row=0, column=5, pady=5, padx=10) + + bil_btn = Button(F1, text="Search", command=self.find_bill, width=10, bd=7, font=('arial', 12, 'bold'), relief=GROOVE) + bil_btn.grid(row=0, column=6, pady=5, padx=10) + + # ===================Medical==================================== + F2 = LabelFrame(self.root, text="Medical Purpose", font=('times new roman', 15, 'bold'), bd=10, fg="Black", bg="#badc57") + F2.place(x=5, y=180, width=325, height=380) + + sanitizer_lbl = Label(F2, text="Sanitizer", font=('times new roman', 16, 'bold'), bg="#badc57", fg="black") + sanitizer_lbl.grid(row=0, column=0, padx=10, pady=10, sticky='W') + sanitizer_txt = Entry(F2, width=10, textvariable=self.sanitizer, font=('times new roman', 16, 'bold'), bd=5, relief=GROOVE) + sanitizer_txt.grid(row=0, column=1, padx=10, pady=10) + + mask_lbl = Label(F2, text="Mask", font=('times new roman', 16, 'bold'), bg="#badc57", fg="black") + mask_lbl.grid(row=1, column=0, padx=10, pady=10, sticky='W') + mask_txt = Entry(F2, width=10, textvariable=self.mask, font=('times new roman', 16, 'bold'), bd=5, relief=GROOVE) + mask_txt.grid(row=1, column=1, padx=10, pady=10) + + hand_gloves_lbl = Label(F2, text="Hand Gloves", font=('times new roman', 16, 'bold'), bg="#badc57", fg="black") + hand_gloves_lbl.grid(row=2, column=0, padx=10, pady=10, sticky='W') + hand_gloves_txt = Entry(F2, width=10, textvariable=self.hand_gloves, font=('times new roman', 16, 'bold'), bd=5, relief =GROOVE) + hand_gloves_txt.grid(row=2, column=1, padx=10, pady=10) + + dettol_lbl = Label(F2, text="Dettol", font=('times new roman', 16, 'bold'), bg="#badc57", fg="black") + dettol_lbl.grid(row=3, column=0, padx=10, pady=10, sticky='W') + dettol_txt = Entry(F2, width=10, textvariable=self.dettol, font=('times new roman', 16, 'bold'), bd=5, relief=GROOVE) + dettol_txt.grid(row=3, column=1, padx=10, pady=10) + + newsprin_lbl = Label(F2, text="Newsprin", font =('times new roman', 16, 'bold'), bg = "#badc57", fg = "black") + newsprin_lbl.grid(row=4, column=0, padx=10, pady=10, sticky='W') + newsprin_txt = Entry(F2, width=10, textvariable=self.newsprin, font=('times new roman', 16, 'bold'), bd=5, relief=GROOVE) + newsprin_txt.grid(row=4, column=1, padx=10, pady=10) + + thermal_gun_lbl = Label(F2, text="Thermal Gun", font=('times new roman', 16, 'bold'), bg="#badc57", fg="black") + thermal_gun_lbl.grid(row=5, column=0, padx=10, pady=10, sticky='W') + thermal_gun_txt = Entry(F2, width=10, textvariable=self.thermal_gun, font=('times new roman', 16, 'bold'), bd=5, relief=GROOVE) + thermal_gun_txt.grid(row=5, column=1, padx=10, pady=10) + + # ==========GroceryItems========================= + F3 = LabelFrame(self.root, text="Grocery Items", font=('times new roman', 15, 'bold'), bd=10, fg="Black", bg="#badc57") + F3.place(x=340, y=180, width=325, height=380) + + rice_lbl = Label(F3, text="Rice", font=('times new roman', 16, 'bold'), bg="#badc57", fg="black") + rice_lbl.grid(row=0, column=0, padx=10, pady=10, sticky='W') + rice_txt = Entry(F3, width=10, textvariable=self.rice, font=('times new roman', 16, 'bold'), bd=5, relief=GROOVE) + rice_txt.grid(row=0, column=1, padx=10, pady=10) + + food_oil_lbl = Label(F3, text="Food Oil", font=('times new roman', 16, 'bold'), bg="#badc57", fg="black") + food_oil_lbl.grid(row=1, column=0, padx=10, pady=10, sticky='W') + food_oil_txt = Entry(F3, width=10, textvariable=self.food_oil, font=('times new roman', 16, 'bold'), bd=5, relief=GROOVE) + food_oil_txt.grid(row=1, column=1, padx=10, pady=10) + + wheat_lbl = Label(F3, text="Wheat", font=('times new roman', 16, 'bold'), bg="#badc57", fg="black") + wheat_lbl.grid(row=2, column=0, padx=10, pady=10, sticky='W') + wheat_txt = Entry(F3, width=10, textvariable=self.wheat, font=('times new roman', 16, 'bold'), bd=5, relief=GROOVE) + wheat_txt.grid(row=2, column=1, padx=10, pady=10) + + daal_lbl = Label(F3, text="Daal", font=('times new roman', 16, 'bold'), bg="#badc57", fg="black") + daal_lbl.grid(row=3, column=0, padx=10, pady=10, sticky='W') + daal_txt = Entry(F3, width=10, textvariable=self.daal, font=('times new roman', 16, 'bold'), bd=5, relief=GROOVE) + daal_txt.grid(row=3, column=1, padx=10, pady=10) + + flour_lbl = Label(F3, text="Flour", font=('times new roman', 16, 'bold'), bg="#badc57", fg="black") + flour_lbl.grid(row=4, column=0, padx=10, pady=10, sticky='W') + flour_txt = Entry(F3, width=10, textvariable=self.flour, font=('times new roman', 16, 'bold'), bd=5, relief=GROOVE) + flour_txt.grid(row=4, column=1, padx=10, pady=10) + + maggi_lbl = Label(F3, text="Maggi", font=('times new roman', 16, 'bold'), bg="#badc57", fg="black") + maggi_lbl.grid(row=5, column=0, padx=10, pady=10, sticky='W') + maggi_txt = Entry(F3, width=10, textvariable=self.maggi, font=('times new roman', 16, 'bold'), bd=5, relief=GROOVE) + maggi_txt.grid(row=5, column=1, padx=10, pady=10) + + # ===========ColdDrinks================================ + F4 = LabelFrame(self.root, text="Cold Drinks", font=('times new roman', 15, 'bold'), bd=10, fg="Black", bg="#badc57") + F4.place(x=670, y=180, width=325, height=380) + + sprite_lbl = Label(F4, text="Sprite", font=('times new roman', 16, 'bold'), bg="#badc57", fg="black") + sprite_lbl.grid(row=0, column=0, padx=10, pady=10, sticky='W') + sprite_txt = Entry(F4, width=10, textvariable=self.sprite, font=('times new roman', 16, 'bold'), bd=5, relief=GROOVE) + sprite_txt.grid(row=0, column=1, padx=10, pady=10) + + limka_lbl = Label(F4, text="Limka", font=('times new roman', 16, 'bold'), bg="#badc57", fg="black") + limka_lbl.grid(row=1, column=0, padx=10, pady=10, sticky='W') + limka_txt = Entry(F4, width=10, textvariable=self.limka, font=('times new roman', 16, 'bold'), bd=5, relief=GROOVE) + limka_txt.grid(row=1, column=1, padx=10, pady=10) + + mazza_lbl = Label(F4, text="Mazza", font=('times new roman', 16, 'bold'), bg="#badc57", fg="black") + mazza_lbl.grid(row=2, column=0, padx=10, pady=10, sticky='W') + wheat_txt = Entry(F4, width=10, textvariable=self.mazza, font=('times new roman', 16, 'bold'), bd=5, relief=GROOVE) + wheat_txt.grid(row=2, column=1, padx=10, pady=10) + + coke_lbl = Label(F4, text="Coke", font=('times new roman', 16, 'bold'), bg="#badc57", fg="black") + coke_lbl.grid(row=3, column=0, padx=10, pady=10, sticky='W') + coke_txt = Entry(F4, width=10, textvariable=self.coke, font=('times new roman', 16, 'bold'), bd=5, relief=GROOVE) + coke_txt.grid(row=3, column=1, padx=10, pady=10) + + fanta_lbl = Label(F4, text="Fanta", font=('times new roman', 16, 'bold'), bg="#badc57", fg="black") + fanta_lbl.grid(row=4, column=0, padx=10, pady=10, sticky='W') + fanta_txt = Entry(F4, width=10, textvariable=self.fanta, font=('times new roman', 16, 'bold'), bd=5, relief=GROOVE) + fanta_txt.grid(row=4, column=1, padx=10, pady=10) + + mountain_duo_lbl = Label(F4, text="Mountain Duo", font=('times new roman', 16, 'bold'), bg="#badc57", fg="black") + mountain_duo_lbl.grid(row=5, column=0, padx=10, pady=10, sticky='W') + mountain_duo_txt = Entry(F4, width=10, textvariable=self.mountain_duo, font=('times new roman', 16, 'bold'), bd=5, relief=GROOVE) + mountain_duo_txt.grid(row=5, column=1, padx=10, pady=10) + + # =================BillArea====================== + F5 = Frame(self.root, bd=10, relief=GROOVE) + F5.place(x=1010, y=180, width=350, height=380) + + bill_title = Label(F5, text="Bill Area", font='arial 15 bold', bd=7, relief=GROOVE) + bill_title.pack(fill=X) + scroll_y = Scrollbar(F5, orient=VERTICAL) + self.txtarea = Text(F5, yscrollcommand=scroll_y.set) + scroll_y.pack(side=RIGHT, fill=Y) + scroll_y.config(command=self.txtarea.yview) + self.txtarea.pack(fill=BOTH, expand=1) + + # =======================ButtonFrame============= + F6 = LabelFrame(self.root, text="Bill Area", font=('times new roman', 14, 'bold'), bd=10, fg="Black", bg="#badc57") + F6.place(x=0, y=560, relwidth=1, height=140) + + m1_lbl = Label(F6, text="Total Medical Price", font=('times new roman', 14, 'bold'), bg="#badc57", fg="black") + m1_lbl.grid(row=0, column=0, padx=20, pady=1, sticky='W') + m1_txt = Entry(F6, width=18, textvariable=self.medical_price, font='arial 10 bold', bd=7, relief=GROOVE) + m1_txt.grid(row=0, column=1, padx=18, pady=1) + + m2_lbl = Label(F6, text="Total Grocery Price", font=('times new roman', 14, 'bold'), bg="#badc57", fg="black") + m2_lbl.grid(row=1, column=0, padx=20, pady=1, sticky='W') + m2_txt = Entry(F6, width=18, textvariable=self.grocery_price, font='arial 10 bold', bd=7, relief=GROOVE) + m2_txt.grid(row=1, column=1, padx=18, pady=1) + + m3_lbl = Label(F6, text="Total Cold Drinks Price", font=('times new roman', 14, 'bold'), bg="#badc57", fg="black") + m3_lbl.grid(row=2, column=0, padx=20, pady=1, sticky='W') + m3_txt = Entry(F6, width=18, textvariable=self.cold_drinks_price, font='arial 10 bold', bd=7, relief=GROOVE) + m3_txt.grid(row=2, column=1, padx=18, pady=1) + + m4_lbl = Label(F6, text="Medical Tax", font=('times new roman', 14, 'bold'), bg="#badc57", fg="black") + m4_lbl.grid(row=0, column=2, padx=20, pady=1, sticky='W') + m4_txt = Entry(F6, width=18, textvariable=self.medical_tax, font='arial 10 bold', bd=7, relief=GROOVE) + m4_txt.grid(row=0, column=3, padx=18, pady=1) + + m5_lbl = Label(F6, text="Grocery Tax", font=('times new roman', 14, 'bold'), bg="#badc57", fg="black") + m5_lbl.grid(row=1, column=2, padx=20, pady=1, sticky='W') + m5_txt = Entry(F6, width=18, textvariable=self.grocery_tax, font='arial 10 bold', bd=7, relief=GROOVE) + m5_txt.grid(row=1, column=3, padx=18, pady=1) + + m6_lbl = Label(F6, text="Cold Drinks Tax", font=('times new roman', 14, 'bold'), bg="#badc57", fg="black") + m6_lbl.grid(row=2, column=2, padx=20, pady=1, sticky='W') + m6_txt = Entry(F6, width=18, textvariable=self.cold_drinks_tax, font='arial 10 bold', bd=7, relief=GROOVE) + m6_txt.grid(row=2, column=3, padx=18, pady=1) + + # =======Buttons-====================================== + btn_f = Frame(F6, bd=7, relief=GROOVE) + btn_f.place(x=760, width=580, height=105) + + total_btn = Button(btn_f, command=self.total, text="Total", bg="#535C68", bd=2, fg="white", pady=15, width=12, font='arial 13 bold') + total_btn.grid(row=0, column=0, padx=5, pady=5) + + generateBill_btn = Button(btn_f, command=self.bill_area, text="Generate Bill", bd=2, bg="#535C68", fg="white", pady=12, width=12, font='arial 13 bold') + generateBill_btn.grid(row=0, column=1, padx=5, pady=5) + + clear_btn = Button(btn_f, command=self.clear_data, text="Clear", bg="#535C68", bd=2, fg="white", pady=15, width=12, font='arial 13 bold') + clear_btn.grid(row=0, column=2, padx=5, pady=5) + + exit_btn = Button(btn_f, command=self.exit_app, text="Exit", bd=2, bg="#535C68", fg="white", pady=15, width=12, font='arial 13 bold') + exit_btn.grid(row=0, column=3, padx=5, pady=5) + self.welcome_bill() + +#================totalBill========================== + def total(self): + self.m_h_g_p = self.hand_gloves.get()*12 + self.m_s_p = self.sanitizer.get()*2 + self.m_m_p = self.mask.get()*5 + self.m_d_p = self.dettol.get()*30 + self.m_n_p = self.newsprin.get()*5 + self.m_t_g_p = self.thermal_gun.get()*15 + self.total_medical_price = float(self.m_m_p+self.m_h_g_p+self.m_d_p+self.m_n_p+self.m_t_g_p+self.m_s_p) + + self.medical_price.set("Rs. "+str(self.total_medical_price)) + self.c_tax = round((self.total_medical_price*0.05), 2) + self.medical_tax.set("Rs. "+str(self.c_tax)) + + self.g_r_p = self.rice.get()*10 + self.g_f_o_p = self.food_oil.get()*10 + self.g_w_p = self.wheat.get()*10 + self.g_d_p = self.daal.get()*6 + self.g_f_p = self.flour.get()*8 + self.g_m_p = self.maggi.get()*5 + self.total_grocery_price = float(self.g_r_p+self.g_f_o_p+self.g_w_p+self.g_d_p+self.g_f_p+self.g_m_p) + + self.grocery_price.set("Rs. " + str(self.total_grocery_price)) + self.g_tax = round((self.total_grocery_price*5), 2) + self.grocery_tax.set("Rs. " + str(self.g_tax)) + + self.c_d_s_p = self.sprite.get()*10 + self.c_d_l_p = self.limka.get()*10 + self.c_d_m_p = self.mazza.get()*10 + self.c_d_c_p = self.coke.get()*10 + self.c_d_f_p = self.fanta.get()*10 + self.c_m_d = self.mountain_duo.get()*10 + self.total_cold_drinks_price = float(self.c_d_s_p+self.c_d_l_p+self.c_d_m_p+self.c_d_c_p+self.c_d_f_p+self.c_m_d) + + self.cold_drinks_price.set("Rs. "+str(self.total_cold_drinks_price)) + self.c_d_tax = round((self.total_cold_drinks_price * 0.1), 2) + self.cold_drinks_tax.set("Rs. "+str(self.c_d_tax)) + + self.total_bill = float(self.total_medical_price+self.total_grocery_price+self.total_cold_drinks_price+self.c_tax+self.g_tax+self.c_d_tax) + +#==============welcome-bill============================== + def welcome_bill(self): + self.txtarea.delete('1.0', END) + self.txtarea.insert(END, "\tWelcome Webcode Retail") + self.txtarea.insert(END, f"\n Bill Number:{self.bill_no.get()}") + self.txtarea.insert(END, f"\nCustomer Name:{self.c_name.get()}") + self.txtarea.insert(END, f"\nPhone Number{self.c_phone.get()}") + self.txtarea.insert(END, f"\n================================") + self.txtarea.insert(END, f"\nProducts\t\tQTY\t\tPrice") + +#=========billArea================================================= + def bill_area(self): + if self.c_name.get() == " " or self.c_phone.get() == " ": + messagebox.showerror("Error", "Customer Details Are Must") + elif self.medical_price.get() == "Rs. 0.0" and self.grocery_price.get() == "Rs. 0.0" and self.cold_drinks_price.get()=="Rs. 0.0": + messagebox.showerror("Error", "No Product Purchased") + else: + self.welcome_bill() + # ============medical=========================== + if self.sanitizer.get() != 0: + self.txtarea.insert(END, f"\n Sanitizer\t\t{self.sanitizer.get()}\t\t{self.m_s_p}") + if self.mask.get() != 0: + self.txtarea.insert(END, f"\n Sanitizer\t\t{self.mask.get()}\t\t{self.m_m_p}") + if self.hand_gloves.get() != 0: + self.txtarea.insert(END, f"\n Hand Gloves\t\t{self.hand_gloves.get()}\t\t{self.m_h_g_p}") + if self.dettol.get() != 0: + self.txtarea.insert(END, f"\n Dettol\t\t{self.dettol.get()}\t\t{self.m_d_p}") + if self.newsprin.get() != 0: + self.txtarea.insert(END, f"\n Newsprin\t\t{self.newsprin.get()}\t\t{self.m_n_p}") + if self.thermal_gun.get() != 0: + self.txtarea.insert(END , f"\n Thermal Gun\t\t{self.sanitizer.get()}\t\t{self.m_t_g_p}") + # ==============Grocery============================ + if self.rice.get() != 0: + self.txtarea.insert(END, f"\n Rice\t\t{self.rice.get()}\t\t{self.g_r_p}") + if self.food_oil.get() != 0: + self.txtarea.insert(END, f"\n Food Oil\t\t{self.food_oil.get()}\t\t{self.g_f_o_p}") + if self.wheat.get() != 0: + self.txtarea.insert(END, f"\n Wheat\t\t{self.wheat.get()}\t\t{self.g_w_p}") + if self.daal.get() != 0: + self.txtarea.insert(END, f"\n Daal\t\t{self.daal.get()}\t\t{self.g_d_p}") + if self.flour.get() != 0: + self.txtarea.insert(END, f"\n Flour\t\t{self.flour.get()}\t\t{self.g_f_p}") + if self.maggi.get() != 0: + self.txtarea.insert(END, f"\n Maggi\t\t{self.maggi.get()}\t\t{self.g_m_p}") + #================ColdDrinks========================== + if self.sprite.get() != 0: + self.txtarea.insert(END, f"\n Sprite\t\t{self.sprite.get()}\t\t{self.c_d_s_p}") + if self.limka.get() != 0: + self.txtarea.insert(END, f"\n Sanitizer\t\t{self.limka.get()}\t\t{self.c_d_l_p}") + if self.mazza.get() != 0: + self.txtarea.insert(END, f"\n Mazza\t\t{self.mazza.get()}\t\t{self.c_d_m_p}") + if self.coke.get() != 0: + self.txtarea.insert(END, f"\n Dettol\t\t{self.coke.get()}\t\t{self.c_d_c_p}") + if self.fanta.get() != 0: + self.txtarea.insert(END, f"\n Fanta\t\t{self.newsprin.get()}\t\t{self.c_d_f_p}") + if self.mountain_duo.get() != 0: + self.txtarea.insert(END, f"\n Mountain Duo\t\t{self.sanitizer.get()}\t\t{self.c_m_d}") + self.txtarea.insert(END, f"\n--------------------------------") + # ===============taxes============================== + if self.medical_tax.get() != '0.0': + self.txtarea.insert(END, f"\n Medical Tax\t\t\t{self.medical_tax.get()}") + if self.grocery_tax.get() != '0.0': + self.txtarea.insert(END, f"\n Grocery Tax\t\t\t{self.grocery_tax.get()}") + if self.cold_drinks_tax.get() != '0.0': + self.txtarea.insert(END, f"\n Cold Drinks Tax\t\t\t{self.cold_drinks_tax.get()}") + + self.txtarea.insert(END, f"\n Total Bil:\t\t\t Rs.{self.total_bill}") + self.txtarea.insert(END, f"\n--------------------------------") + self.save_bill() + + #=========savebill============================ + def save_bill(self): + op = messagebox.askyesno("Save Bill", "Do you want to save the bill?") + if op > 0: + self.bill_data = self.txtarea.get('1.0', END) + f1 = open("bills/"+str(self.bill_no.get())+".txt", "w") + f1.write(self.bill_data) + f1.close() + messagebox.showinfo("Saved", f"Bill no:{self.bill_no.get()} Saved Successfully") + else: + return + + # ===================find_bill================================ + def find_bill(self): + present = "no" + for i in os.listdir("bills/"): + if i.split('.')[0] == self.search_bill.get(): + f1 = open(f"bills/{i}", "r") + self.txtarea.delete("1.0", END) + for d in f1: + self.txtarea.insert(END, d) + f1.close() + present = "yes" + if present == "no": + messagebox.showerror("Error", "Invalid Bill No") + + # ======================clear-bill====================== + def clear_data(self): + op = messagebox.askyesno("Clear", "Do you really want to Clear?") + if op > 0: + self.sanitizer.set(0) + self.mask.set(0) + self.hand_gloves.set(0) + self.dettol.set(0) + self.newsprin.set(0) + self.thermal_gun.set(0) + # ============grocery============================== + self.rice.set(0) + self.food_oil.set(0) + self.wheat.set(0) + self.daal.set(0) + self.flour.set(0) + self.maggi.set(0) + # =============coldDrinks============================= + self.sprite.set(0) + self.limka.set(0) + self.mazza.set(0) + self.coke.set(0) + self.fanta.set(0) + self.mountain_duo.set(0) + # ====================taxes================================ + self.medical_price.set("") + self.grocery_price.set("") + self.cold_drinks_price.set("") + + self.medical_tax.set("") + self.grocery_tax.set("") + self.cold_drinks_tax.set("") + + self.c_name.set("") + self.c_phone.set("") + + self.bill_no.set("") + x = random.randint(1000, 9999) + self.bill_no.set(str(x)) + + self.search_bill.set("") + self.welcome_bill() + + # ===========exit======================= + def exit_app(self): + op = messagebox.askyesno("Exit", "Do you really want to exit?") + if op > 0: + self.root.destroy() + + +root = Tk() +obj = Bill_App(root) +root.mainloop() + + diff --git a/projects/Bouncing_ball_simulator/README.md b/projects/Bouncing_ball_simulator/README.md new file mode 100644 index 000000000..9334e306e --- /dev/null +++ b/projects/Bouncing_ball_simulator/README.md @@ -0,0 +1,22 @@ +# Bouncing ball simulator + +This script shows the simulation of few balls bouncing in a container under gravity. +They also collide with the bottom part and the walls of the container. + +### Prerequisites + +The script runs in python3. +pygame module is needed + +pip3 install requirements.txt + +### How to run the script + +Navigate to the folder where the source code is written. +Open a terminal and execute the command: + +python3 ball_bounce.py + +## *Author Name* + +Ayush Shaw diff --git a/projects/Bouncing_ball_simulator/background-img.jpg b/projects/Bouncing_ball_simulator/background-img.jpg new file mode 100644 index 000000000..c6c7c16f6 Binary files /dev/null and b/projects/Bouncing_ball_simulator/background-img.jpg differ diff --git a/projects/Bouncing_ball_simulator/ball.png b/projects/Bouncing_ball_simulator/ball.png new file mode 100644 index 000000000..5ddd6617b Binary files /dev/null and b/projects/Bouncing_ball_simulator/ball.png differ diff --git a/projects/Bouncing_ball_simulator/ball_bounce.py b/projects/Bouncing_ball_simulator/ball_bounce.py new file mode 100644 index 000000000..21bced266 --- /dev/null +++ b/projects/Bouncing_ball_simulator/ball_bounce.py @@ -0,0 +1,56 @@ +#This program shows the simulation of 5 balls bouncing under gravitational acceleration. +#It is also accompanied by eleastic collission with walls of the container. +#It is fun to watch. +import pygame,time,random + +pygame.init() + +#setting screen size of pygame window to 800 by 600 pixels +screen=pygame.display.set_mode((800,600)) +background=pygame.image.load('background-img.jpg') + +#Adding title +pygame.display.set_caption('Ball Bounce Simulation') + +class ball: + ball_image=pygame.image.load('ball.png') + g=1 + def __init__(self): + self.velocityX=4 + self.velocityY=4 + self.X=random.randint(0,768) + self.Y=random.randint(0,350) + + def render_ball(self): + screen.blit(ball.ball_image, (self.X,self.Y)) + def move_ball(self): + #changing y component of velocity due to downward acceleration + self.velocityY+=ball.g + #changing position based on velocity + self.X+=self.velocityX + self.Y+=self.velocityY + #collission with the walls lead to change in velocity + if self.X<0 or self.X>768: + self.velocityX*=-1 + if self.Y<0 and self.velocityY<0: + self.velocityY*=-1 + self.Y=0 + if self.Y>568 and self.velocityY>0: + self.velocityY*=-1 + self.Y=568 +#list of balls created as objects +Ball_List=[ball(),ball(), ball(), ball(), ball()] + +#The main program loop +running=True +while running: + for event in pygame.event.get(): + if event.type == pygame.QUIT: + running=False + + time.sleep(0.02) + screen.blit(background, (0,0)) + for ball_item in Ball_List: + ball_item.render_ball() + ball_item.move_ball() + pygame.display.update() \ No newline at end of file diff --git a/projects/Bouncing_ball_simulator/requirements.txt b/projects/Bouncing_ball_simulator/requirements.txt new file mode 100644 index 000000000..639e89a11 --- /dev/null +++ b/projects/Bouncing_ball_simulator/requirements.txt @@ -0,0 +1 @@ +pygame==2.0.2 \ No newline at end of file diff --git a/projects/Calculate_age/README.md b/projects/Calculate_age/README.md new file mode 100644 index 000000000..706bbdb59 --- /dev/null +++ b/projects/Calculate_age/README.md @@ -0,0 +1,32 @@ +# Calculate Your Age! + +This script prints your age in three different ways : +1. Years +2. Months +3. Days + + +## Prerequisites + +You only need Python to run this script. You can visit [here](https://www.python.org/downloads/) to download Python. + + +## How to run the script + +Running the script is really simple! Just open a terminal in the folder where your script is located and run the following command : + + `python calculate.py` + + +## Sample use of the script + +``` +$ python calculate.py + input your name: XYZ + input your age: 33 + XYZ's age is 33 years or 406 months or 12328 days +``` + +## *Author Name* + +[Gaodong](https://github.com/xlgd) diff --git a/projects/Calculate age/calculate.py b/projects/Calculate_age/calculate.py similarity index 59% rename from projects/Calculate age/calculate.py rename to projects/Calculate_age/calculate.py index a7098c477..cdbeb7044 100644 --- a/projects/Calculate age/calculate.py +++ b/projects/Calculate_age/calculate.py @@ -1,27 +1,24 @@ +# -*- coding: utf-8 -*- import time +from calendar import isleap # judge the leap year def judge_leap_year(year): - if (year % 4) == 0: - if (year % 100) == 0: - if (year % 400) == 0: - return True - else: - return False - else: - return True + if isleap(year): + return True else: return False + # returns the number of days in each month def month_days(month, leap_year): - if month == 1 or month == 3 or month == 5 or month == 7 or month == 8 or month == 10 or month == 12: + if month in [1, 3, 5, 7, 8, 10, 12]: return 31 - elif month == 4 or month == 6 or month == 9 or month == 11: + elif month in [4, 6, 9, 11]: return 30 elif month == 2 and leap_year: return 29 - elif month ==2 and (not leap_year): + elif month == 2 and (not leap_year): return 28 @@ -30,7 +27,7 @@ def month_days(month, leap_year): localtime = time.localtime(time.time()) year = int(age) -month = year* 12 + localtime.tm_mon +month = year * 12 + localtime.tm_mon day = 0 begin_year = int(localtime.tm_year) - year @@ -48,6 +45,5 @@ def month_days(month, leap_year): day = day + month_days(m, leap_year) day = day + localtime.tm_mday - - -print("%s's age is %d years or %d months or %d days" % (name, year, month, day)) +print("%s's age is %d years or " % (name, year), end="") +print("%d months or %d days" % (month, day)) diff --git a/projects/Captcha_Genrator/Captcha_Genrator.py b/projects/Captcha_Genrator/Captcha_Genrator.py new file mode 100644 index 000000000..1b07c9c07 --- /dev/null +++ b/projects/Captcha_Genrator/Captcha_Genrator.py @@ -0,0 +1,56 @@ +""" +Instructions +1. Install captcha: pip install captcha +2. download fonts and update the path in code +3. run the code +""" + +from io import BytesIO +from tkinter import * +from random import * +from tkinter import messagebox +import string +from captcha.image import ImageCaptcha + +image = ImageCaptcha(fonts=['C:/Users/Administrator/Downloads/ChelseaMarketsr.ttf', 'C:/Users/Administrator/Downloads/DejaVuSanssr.ttf']) + +random=str(randint(100000,999999)) +data = image.generate(random) +assert isinstance(data, BytesIO) +image.write(random,'out.png') + +def verify(): + global random + x=t1.get("0.0",END) + if (int(x)==int(random)): + messagebox.showinfo("sucsess", "verified") + else: + messagebox.showinfo("Alert", "Not verified") + refresh() + +def refresh(): + random=str(randint(100000,999999)) + data = image.generate(random) + assert isinstance(data, BytesIO) + image.write(random,'out.png') + photo = PhotoImage(file="out.png") + l1.config(image=photo,height=100,width=200) + l1.update() + UpdateLabel() + +root=Tk() +photo = PhotoImage(file="out.png") + +l1=Label(root,image=photo,height=100,width=200) +t1=Text(root,height=5,width=50) +b1=Button(root,text="submit",command=verify) +b2=Button(root,text="refresh",command=refresh) + +l1.pack() +t1.pack() +b1.pack() +b2.pack() +root.mainloop() + + + diff --git a/projects/Captcha_Genrator/README.md b/projects/Captcha_Genrator/README.md new file mode 100644 index 000000000..86e94e42e --- /dev/null +++ b/projects/Captcha_Genrator/README.md @@ -0,0 +1,14 @@ +# Captcha Genrator +A simple image captcha genrator + +### Prerequisites +1. Install the dependencies by executing the following command + ```pip install -r requirements.txt``` + +2. Update the path of font in code (if required) + ```image = ImageCaptcha(fonts=['/ChelseaMarketsr.ttf', '/DejaVuSanssr.ttf'])``` + +### Screenshot +![image](https://user-images.githubusercontent.com/39544459/137623915-1e837ada-f199-4513-a15d-ecbb969fd53e.png) + +## *Mayur Singal* diff --git a/projects/Captcha_Genrator/fonts/ChelseaMarketsr.ttf b/projects/Captcha_Genrator/fonts/ChelseaMarketsr.ttf new file mode 100644 index 000000000..0885a2309 Binary files /dev/null and b/projects/Captcha_Genrator/fonts/ChelseaMarketsr.ttf differ diff --git a/projects/Captcha_Genrator/fonts/DejaVuSanssr.ttf b/projects/Captcha_Genrator/fonts/DejaVuSanssr.ttf new file mode 100644 index 000000000..9d40c3256 Binary files /dev/null and b/projects/Captcha_Genrator/fonts/DejaVuSanssr.ttf differ diff --git a/projects/Captcha_Genrator/requirements.txt b/projects/Captcha_Genrator/requirements.txt new file mode 100644 index 000000000..604852d8a --- /dev/null +++ b/projects/Captcha_Genrator/requirements.txt @@ -0,0 +1 @@ +captcha \ No newline at end of file diff --git a/projects/Capture_Video_Frames/Enhanced_Capture_Video_Frames_Test b/projects/Capture_Video_Frames/Enhanced_Capture_Video_Frames_Test new file mode 100644 index 000000000..c6ad181c5 --- /dev/null +++ b/projects/Capture_Video_Frames/Enhanced_Capture_Video_Frames_Test @@ -0,0 +1,46 @@ +import unittest + + +# enhancement 1 +def get_file_and_destination(): + input_file = input("What is the file name?") + mp4_converter = ".mp4" + input_file = input_file + mp4_converter + + destination_file = input("Where you want to save it to?") + return input_file, destination_file + + +# enhancement 2 +def get_user_input(): + user_preference = input("Enter your frame preference in total: ") + if not user_preference.isnumeric(): + print("Please enter an integer!") + new_value = get_user_input() + user_preference = new_value + return user_preference + + +# test variables for enhancement 1 +first, second = get_file_and_destination() +# test variable for enhancement 2 +input_number = get_user_input() + + +class BasicTests(unittest.TestCase): + + def test_get_string(self): + file_name = "video.mp4" + self.assertEqual(first, file_name) + + def test_get_destination(self): + destination = "testing destination" + self.assertEqual(second, destination) + + def test_input_number(self): + output_expected = input_number.isnumeric() + self.assertTrue(output_expected) + + +if __name__ == "__main__": + unittest.main() diff --git a/projects/Capture_Video_Frames/README.md b/projects/Capture_Video_Frames/README.md index 7dc4a171f..b95c8c0ff 100644 --- a/projects/Capture_Video_Frames/README.md +++ b/projects/Capture_Video_Frames/README.md @@ -1,3 +1,219 @@ -# Capture Video Frames + +# In order to Capture Video Frames ##### Execute `python capture_video_frames.py ` + + + + +# In ordet to get live video stream from webcam +#### EXecute +python capture_video_from_webcam.py + + + + + +# In order to stream video from webcam to AWS Kinesis follow the below instructions + + Amazon Kinesis Video Streams CPP Producer, GStreamer Plugin and JNI + +

    Amazon Kinesis Video Streams | Secure Video Ingestion for Analysis & Storage

    + +

    + Build Status + Coverage Status +

    + +

    + Key Features • + Build • + Run • + Documentation • + Related • + License +

    + +## Key Features +* C++ SDK +* GStreamer Plugin (kvssink) +* JNI + +Amazon Kinesis Video Streams Producer SDK for C/C++ makes it easy to build an on-device application that securely connects to a video stream, and reliably publishes video and other media data to Kinesis Video Streams. It takes care of all the underlying tasks required to package the frames and fragments generated by the device's media pipeline. The SDK also hand +les stream creation, token rotation for secure and uninterrupted streaming, processing acknowledgements returned by Kinesis Video Streams, and other tasks. + +## Build +### Download +To download run the following command: + +`git clone https://github.com/awslabs/amazon-kinesis-video-streams-producer-sdk-cpp.git` + +Note: You will also need to install `pkg-config`, `CMake`, `m4` and a build enviroment. If you are building the GStreamer plugin you will also need GStreamer and GStreamer (Development Libraries). + +Refer to the [FAQ](#FAQ) for platform specific instructions. + +### Configure + +Prepare a build directory in the newly checked out repository: + +``` +mkdir -p amazon-kinesis-video-streams-producer-sdk-cpp/build +cd amazon-kinesis-video-streams-producer-sdk-cpp/build +``` + +If you are building on Windows you need to generate `NMake Makefiles`, you should run `cmake .. -G "NMake Makefiles"` + +GStreamer and JNI is NOT built by default, if you wish to build both you MUST execute `cmake .. -DBUILD_GSTREAMER_PLUGIN=ON -DBUILD_JNI=TRUE` + +By default we download all the libraries from GitHub and build them locally, so should require nothing to be installed ahead of time. + +If you do wish to link to existing libraries you can do `cmake .. -DBUILD_DEPENDENCIES=OFF` +Libraries needed to build producer are: Curl, Openssl and Log4cplus. If you want to build the gstreamer plugin you will need to have gstreamer in your system. +On Mac OS you can get the libraries using homebrew +``` +$ brew install pkg-config openssl cmake gstreamer gst-plugins-base gst-plugins-good gst-plugins-bad gst-plugins-ugly log4cplus gst-libav +``` +On Ubuntu and Raspberry Pi OS you can get the libraries by running +``` +$ sudo apt-get install libssl-dev libcurl4-openssl-dev liblog4cplus-dev libgstreamer1.0-dev libgstreamer-plugins-base1.0-dev gstreamer1.0-plugins-base-apps gstreamer1.0-plugins-bad gstreamer1.0-plugins-good gstreamer1.0-plugins-ugly gstreamer1.0-tools +``` + +#### Cross-Compilation +If you wish to cross-compile `CC` and `CXX` are respected when building the library and all its dependencies. See our [.travis.yml](.travis.yml) for an example of this. Every commit is cross compiled to ensure that it continues to work. + + +#### CMake Arguments +You can pass the following options to `cmake ..`. + +* `-DBUILD_GSTREAMER_PLUGIN` -- Build kvssink GStreamer plugin +* `-DBUILD_JNI` -- Build C++ wrapper for JNI to expose the functionality to Java/Android +* `-DBUILD_DEPENDENCIES` -- Build depending libraries from source +* `-DBUILD_TEST=TRUE` -- Build unit/integration tests, may be useful for confirm support for your device. `./tst/producerTest` +* `-DCODE_COVERAGE` -- Enable coverage reporting +* `-DCOMPILER_WARNINGS` -- Enable all compiler warnings +* `-DADDRESS_SANITIZER` -- Build with AddressSanitizer +* `-DMEMORY_SANITIZER` -- Build with MemorySanitizer +* `-DTHREAD_SANITIZER` -- Build with ThreadSanitizer +* `-DUNDEFINED_BEHAVIOR_SANITIZER` Build with UndefinedBehaviorSanitizer +* `-DALIGNED_MEMORY_MODEL` Build for aligned memory model only devices. Default is OFF. + +#### To Include JNI + +JNI examples are NOT built by default. If you wish to build JNI you MUST add -DBUILD_JNI=TRUE when running cmake: + +``` +cmake -DBUILD_JNI=TRUE +``` + +#### To Include Building GStreamer Sample Programs + +The GStreamer plugin and samples are NOT built by default. If you wish to build them you MUST add -DBUILD_GSTREAMER_PLUGIN=TRUE when running cmake: + +``` +cmake -DBUILD_GSTREAMER_PLUGIN=TRUE +``` + +### Compiling + +After running cmake, in the same build directior run make: + +``` +make +``` + +On Windows you should run `nmake` instead of `make` + +In your build directory you will now have shared objects for all the targets you have selected + +## Run +### GStreamer Plugin (kvssink) + +#### Loading Element +The GStreamer plugin is located in your `build` directory. + +To load this plugin set the following environment variables. This should be run from the root of the repo, NOT the `build` directory. + +``` +export GST_PLUGIN_PATH=`pwd`/build +export LD_LIBRARY_PATH=`pwd`/open-source/local/lib +``` + +The equivalent for Windows is + +``` +set GST_PLUGIN_PATH=%CD%\build +set PATH=%PATH%;%CD%\open-source\local\bin;%CD%\open-source\local\lib +``` + +Now if you execute `gst-inspect-1.0 kvssink` you should get information on the plugin like + +```text +Factory Details: + Rank primary + 10 (266) + Long-name KVS Sink + Klass Sink/Video/Network + Description GStreamer AWS KVS plugin + Author AWS KVS + +Plugin Details: + Name kvssink + Description GStreamer AWS KVS plugin + Filename /Users/seaduboi/workspaces/amazon-kinesis-video-streams-producer-sdk-cpp/build/libgstkvssink.so + Version 1.0 + License Proprietary + Source module kvssinkpackage + Binary package GStreamer + Origin URL http://gstreamer.net +``` + +If the build failed, or `GST_PLUGIN_PATH` is not properly set you will get output like + +```text +No such element or plugin 'kvssink' +``` + + +#### Using Element +The kvssink element has the following required parameters: + +* `stream-name` -- The name of the destination Kinesis video stream. +* `storage-size` -- The storage size of the device in megabytes. For information about configuring device storage, see StorageInfo. +* `access-key` -- The AWS access key that is used to access Kinesis Video Streams. You must provide either this parameter or credential-path. +* `secret-key` -- The AWS secret key that is used to access Kinesis Video Streams. You must provide either this parameter or credential-path. +* `credential-path` -- A path to a file containing your credentials for accessing Kinesis Video Streams. For example credential files, see Sample Static Credential and Sample Rotating Credential. For more information on rotating credentials, see Managing Access Keys for IAM Users. You must provide either this parameter or access-key and secret-key. + + +For examples of common use cases you can look at [Example: Kinesis Video Streams Producer SDK GStreamer Plugin](https://docs.aws.amazon.com/kinesisvideostreams/latest/dg/examples-gstreamer-plugin.html) + + +## Dockerscripts +* The sample docker scripts for RTSP plugin, raspberry pi and linux can be found in the [Kinesis demos repository](https://github.com/aws-samples/amazon-kinesis-video-streams-demos/tree/master/producer-cpp). + +## DEBUG +* If you are successfully streaming but run into issue with playback. You can do `export KVS_DEBUG_DUMP_DATA_FILE_DIR=/path/to/directory` before streaming. Producer will then dump MKV files into that path. The file is exactly what KVS will receive. You can use [MKVToolNIX](https://mkvtoolnix.download/index.html) to check that everything looks correct. You can also try to play the MKV file in compatible players. + +## FAQ +* Is CPP-SDK and GStreamer supported on Mac/Windows/Linux (Supported Platforms) +Yes! We have FAQs and platform specific instructions for [Windows](docs/windows.md), [MacOS](docs/macos.md) and [Linux](docs/linux.md) + +## Development + +The repository is using master branch as the aggregation and all of the feature development is done in appropriate feature branches. The PRs (Pull Requests) are cut on a feature branch and once approved with all the checks passed they can be merged by a click of a button on the PR tool. The master branch should always be build-able and all the tests should be passing. We are welcoming any contribution to the code base. + +### Release +The repository is under active development and even with incremental unit test coverage where some of the tests are actually full integration tests, we require more rigorous internal testing in order to 'cut' release versions. The release is cut against a particular commit that gets approved. The general philosophy is to cut a release when a set of commits contribute to a self-containing feature or when we add major internal functionality improvements. + +### Versioning +We deploy 3 digit version strings in a form of 'Major.Minor.Revision' scheme. +* Major version update - Major functionality changes. Might not have direct backward compatibility. For example, multiple public API parameter changes. +* Minor version update - Additional features. Major bug fixes. Might have some minor backward compatibility issues. For example, an extra parameter on a callback function. +* Revision version update - Minor features. Bug fixes. Full backward compatibility. For example, an extra fields added to the public structures with version bump. + +## Related +* [What Is Amazon Kinesis Video Streams](https://docs.aws.amazon.com/kinesisvideostreams/latest/dg/what-is-kinesis-video.html) +* [C SDK](https://github.com/awslabs/amazon-kinesis-video-streams-producer-c) +* [Example: Kinesis Video Streams Producer SDK GStreamer Plugin](https://docs.aws.amazon.com/kinesisvideostreams/latest/dg/examples-gstreamer-plugin.html) + +## License + +This library is licensed under the Apache 2.0 License. diff --git a/projects/Capture_Video_Frames/requirements.txt b/projects/Capture_Video_Frames/requirements.txt new file mode 100644 index 000000000..3b8161846 --- /dev/null +++ b/projects/Capture_Video_Frames/requirements.txt @@ -0,0 +1 @@ +opencv-python==4.3.0.36 diff --git a/projects/Check_website_connectivity/README.md b/projects/Check_website_connectivity/README.md new file mode 100644 index 000000000..79d7e49a7 --- /dev/null +++ b/projects/Check_website_connectivity/README.md @@ -0,0 +1,39 @@ +# Check Website Connectivity + +This directory contains a simple tool to check connectivity to a number of web sites. + +The input file `websites.txt` should contain web site URLs, one per line. + +The output file `website_status.csv` contains a two-column report with +the URL of each checked site and its status. +The script simply checks whether the web server returns a 200 status code. + +The output file will be overwritten each time you run the tool. + + +## Prerequisites + +This project uses the third-party library +[requests](https://requests.readthedocs.io/) +as well as the `csv` module from the Python standard library. + + +## How to run the Script + +To run this script, type + +``` +python check_connectivity.py +``` +in the directory where you have checked out these files. +(If you have an IDE which lets you run Python files, +and prefer to use that instead, +make sure you configure it to set the working directory to +the one which contains the input file.) + + +## Development ideas + +The CSV should perhaps contain a date stamp, too. + +Perhaps add the `logging` library and optionally print progress information. diff --git a/projects/Check_website_connectivity/check_connectivity.py b/projects/Check_website_connectivity/check_connectivity.py new file mode 100644 index 000000000..b35952d79 --- /dev/null +++ b/projects/Check_website_connectivity/check_connectivity.py @@ -0,0 +1,25 @@ +import csv + +import requests + + +status_dict = {"Website": "Status"} + + +def main(): + with open("websites.txt", "r") as fr: + for line in fr: + website = line.strip() + status = requests.get(website).status_code + status_dict[website] = "working" if status == 200 \ + else "not working" + + # print(status_dict) + with open("website_status.csv", "w", newline="") as fw: + csv_writers = csv.writer(fw) + for key in status_dict.keys(): + csv_writers.writerow([key, status_dict[key]]) + + +if __name__ == "__main__": + main() diff --git a/projects/Check_website_connectivity/requirements.txt b/projects/Check_website_connectivity/requirements.txt new file mode 100644 index 000000000..f2293605c --- /dev/null +++ b/projects/Check_website_connectivity/requirements.txt @@ -0,0 +1 @@ +requests diff --git a/projects/Check_website_connectivity/website_status.csv b/projects/Check_website_connectivity/website_status.csv new file mode 100644 index 000000000..bf4d56981 --- /dev/null +++ b/projects/Check_website_connectivity/website_status.csv @@ -0,0 +1,6 @@ +Website,Status +http://web.hike.com/,working +https://github.com/chavarera/python-mini-projects/issues/96,working +https://www.youtube.com/,working +https://dillinger.io/,working +https://pypi.org/,working diff --git a/projects/Check_website_connectivity/websites.txt b/projects/Check_website_connectivity/websites.txt new file mode 100644 index 000000000..0e77f34a2 --- /dev/null +++ b/projects/Check_website_connectivity/websites.txt @@ -0,0 +1,5 @@ +http://web.hike.com/ +https://github.com/chavarera/python-mini-projects/issues/96 +https://www.youtube.com/ +https://dillinger.io/ +https://pypi.org/ \ No newline at end of file diff --git a/projects/Cli_todo/README.md b/projects/Cli_todo/README.md new file mode 100644 index 000000000..1e885f499 --- /dev/null +++ b/projects/Cli_todo/README.md @@ -0,0 +1,19 @@ +# Simple CLI Todo App +Simple Todo app with command line interface. Supports adding, deleting, and viewing task entries. + +## Dependencies +Requires Python 3 and Click + +Install Click: `pip install click` + +## How to use +### Running +either run it from your code editor or Ide or type `python todo.py [command]` in your command line. +(insted of [command] add desired command u want) + +### Commands +|Command | Description| +|-------|-------| +|`add`| Adds a task. Prompts user for task text. | +|`done`| Deletes a task. Prompts user for task id. | +|`tasks`| Displays all inputted tasks. | diff --git a/projects/Cli_todo/requirements.txt b/projects/Cli_todo/requirements.txt new file mode 100644 index 000000000..f7fc59bf3 --- /dev/null +++ b/projects/Cli_todo/requirements.txt @@ -0,0 +1 @@ +click==7.1.2 diff --git a/projects/Cli_todo/todo.py b/projects/Cli_todo/todo.py new file mode 100644 index 000000000..635d3d708 --- /dev/null +++ b/projects/Cli_todo/todo.py @@ -0,0 +1,68 @@ +import click + +@click.group() +@click.pass_context +def todo(ctx): + '''Simple CLI Todo App''' + ctx.ensure_object(dict) + #Open todo.txt – first line contains latest ID, rest contain tasks and IDs + with open('./todo.txt') as f: + content = f.readlines() + #Transfer data from todo.txt to the context + ctx.obj['LATEST'] = int(content[:1][0]) + ctx.obj['TASKS'] = {en.split('```')[0]:en.split('```')[1][:-1] for en in content[1:]} + +@todo.command() +@click.pass_context +def tasks(ctx): + '''Display tasks''' + if ctx.obj['TASKS']: + click.echo('YOUR TASKS\n**********') + #Iterate through all the tasks stored in the context + for i, task in ctx.obj['TASKS'].items(): + click.echo('• ' + task + ' (ID: ' + i + ')') + click.echo('') + else: + click.echo('No tasks yet! Use ADD to add one.\n') + +@todo.command() +@click.pass_context +@click.option('-add', '--add_task', prompt='Enter task to add') +def add(ctx, add_task): + '''Add a task''' + if add_task: + #Add task to list in context + ctx.obj['TASKS'][ctx.obj['LATEST']] = add_task + click.echo('Added task "' + add_task + '" with ID ' + str(ctx.obj['LATEST'])) + #Open todo.txt and write current index and tasks with IDs (separated by " ``` ") + curr_ind = [str(ctx.obj['LATEST'] + 1)] + tasks = [str(i) + '```' + t for (i, t) in ctx.obj['TASKS'].items()] + with open('./todo.txt', 'w') as f: + f.writelines(['%s\n' % en for en in curr_ind + tasks]) + +@todo.command() +@click.pass_context +@click.option('-fin', '--fin_taskid', prompt='Enter ID of task to finish', type=int) +def done(ctx, fin_taskid): + '''Delete a task by ID''' + #Find task with associated ID + if str(fin_taskid) in ctx.obj['TASKS'].keys(): + task = ctx.obj['TASKS'][str(fin_taskid)] + #Delete task from task list in context + del ctx.obj['TASKS'][str(fin_taskid)] + click.echo('Finished and removed task "' + task + '" with id ' + str(fin_taskid)) + #Open todo.txt and write current index and tasks with IDs (separated by " ``` ") + if ctx.obj['TASKS']: + curr_ind = [str(ctx.obj['LATEST'] + 1)] + tasks = [str(i) + '```' + t for (i, t) in ctx.obj['TASKS'].items()] + with open('./todo.txt', 'w') as f: + f.writelines(['%s\n' % en for en in curr_ind + tasks]) + else: + #Resets ID tracker to 0 if list is empty + with open('./todo.txt', 'w') as f: + f.writelines([str(0) + '\n']) + else: + click.echo('Error: no task with id ' + str(fin_taskid)) + +if __name__ == '__main__': + todo() \ No newline at end of file diff --git a/projects/Cli_todo/todo.txt b/projects/Cli_todo/todo.txt new file mode 100644 index 000000000..573541ac9 --- /dev/null +++ b/projects/Cli_todo/todo.txt @@ -0,0 +1 @@ +0 diff --git a/projects/Compute_IoU/Compute_IoU.py b/projects/Compute_IoU/Compute_IoU.py new file mode 100644 index 000000000..79cedc78b --- /dev/null +++ b/projects/Compute_IoU/Compute_IoU.py @@ -0,0 +1,33 @@ +import numpy as np + +def Cal_IoU(GT_bbox, Pred_bbox): + ''' + Args: + GT_bbox: the bounding box of the ground truth + Pred_bbox: the bounding box of the predicted + Returns: + IoU: Intersection over Union + ''' + #1. Calculate the area of the intersecting area + ixmin = max(GT_bbox[0], Pred_bbox[0]) + iymin = max(GT_bbox[1], Pred_bbox[1]) + ixmax = min(GT_bbox[2], Pred_bbox[2]) + iymax = min(GT_bbox[3], Pred_bbox[3]) + iw = np.maximum(ixmax - ixmin + 1., 0.) # the weight of the area + ih = np.maximum(iymax - iymin + 1., 0.) # the height of the area + area = iw * ih + + #2. Calculate the area of all area + #S = S1 + S2 - area + S1 = (Pred_bbox[2] - GT_bbox[0] + 1) * (Pred_bbox[3] - GT_bbox[1] + 1) + S2 = (GT_bbox[2] - GT_bbox[0] + 1) * (GT_bbox[3] - GT_bbox[1] + 1) + S = S1 + S2 - area + + #3. Calculate the IoU + iou = area / S + return iou + +if __name__ == "__main__": + pred_bbox = np.array([40, 40, 100, 100]) + gt_bbox = np.array([70, 80, 110, 130]) + print(Cal_IoU(pred_bbox, gt_bbox)) diff --git a/projects/Compute_IoU/README.md b/projects/Compute_IoU/README.md new file mode 100644 index 000000000..b10f3dbca --- /dev/null +++ b/projects/Compute_IoU/README.md @@ -0,0 +1,19 @@ + +# Image-Watermark + +## Description + +The project will help you calculate Intersection over Union (IoU). + +## About this Project + +Intersection over Union (IoU) is used when calculating mAP. It is a number from 0 to 1 that specifies the amount of overlap between the predicted and ground truth bounding box. + +## Usage + +Use the Script [Compute_IoU.py](https://github.com/Python-World/python-mini-projects/blob/master/projects/Compute_IoU/Compute_IoU.py) . In the command line, Enter + +`python3 Compute_IoU.py ` + +## Author +[Mason](https://github.com/JohnMasoner) \ No newline at end of file diff --git a/projects/Convert_JPEG_to_PNG/README.md b/projects/Convert_JPEG_to_PNG/README.md new file mode 100644 index 000000000..76f0ae261 --- /dev/null +++ b/projects/Convert_JPEG_to_PNG/README.md @@ -0,0 +1,21 @@ +# CONVERT_JPEG_to_PNG + +This project contains a simply python script to change file extension from .jpeg to .png + +## Requirements +Pillow module + +`pip install pillow` + +## Two methods: + +I accomplished this task in two ways +### Using Terminal +- Add the image in jpeg format with name as 'input' in this folder. +- Run converter_terminal.py script +- output image will be generated in this folder + +### Using GUI +Just run the converter_GUI.py script and pick any jpeg image from any location and then press 'Convert Jpeg to Png' + + diff --git a/projects/Convert_JPEG_to_PNG/converter_GUI.py b/projects/Convert_JPEG_to_PNG/converter_GUI.py new file mode 100644 index 000000000..a6d596132 --- /dev/null +++ b/projects/Convert_JPEG_to_PNG/converter_GUI.py @@ -0,0 +1,40 @@ +import tkinter as tk +from tkinter import filedialog +from PIL import Image +root = tk.Tk() # Tkinter window initialized +root.title('Converter') # Title of the window +canvas1 = tk.Canvas(root, width=300, height=250, bg='orange', relief='raised') +canvas1.pack() +label1 = tk.Label(root, text='File Converter', bg='lightsteelblue2') # giving a title to the screen +label1.config(font=('helvetica', 20)) +canvas1.create_window(150, 60, window=label1) +im1 = None # variable to store path of image + + +def getJPG(): + '''Function to get image location and open it with pillow''' + global im1 + import_file_path = filedialog.askopenfilename() + im1 = Image.open(import_file_path) + + +font = ('helvetica', 12, 'bold') +bg = 'royalblue' +fg = 'white' +browseButton_JPG = tk.Button(text=" Import JPEG File ", command=getJPG, bg=bg, fg=fg, font=font) # Browse button +canvas1.create_window(150, 130, window=browseButton_JPG) + + +def convertToPNG(): + '''Function to change file extenstion to png and save it to User's prefered location ''' + global im1 + if im1 is None: + tk.messagebox.showerror("Error", "No File selected") + else: + export_file_path = filedialog.asksaveasfilename(defaultextension='.png') + im1.save(export_file_path) + + +saveAsButton_PNG = tk.Button(text='Convert JPEG to PNG', command=convertToPNG, bg=bg, fg=fg, font=font) # Convert button +canvas1.create_window(150, 180, window=saveAsButton_PNG) +root.mainloop() diff --git a/projects/Convert_JPEG_to_PNG/converter_terminal.py b/projects/Convert_JPEG_to_PNG/converter_terminal.py new file mode 100644 index 000000000..0168b7e1a --- /dev/null +++ b/projects/Convert_JPEG_to_PNG/converter_terminal.py @@ -0,0 +1,3 @@ +from PIL import Image +im1 = Image.open('input.jpeg') # takes input image from present folder +im1.save('output.png') # output image is generated the folder diff --git a/projects/Convert_JPEG_to_PNG/input.jpeg b/projects/Convert_JPEG_to_PNG/input.jpeg new file mode 100644 index 000000000..a850441af Binary files /dev/null and b/projects/Convert_JPEG_to_PNG/input.jpeg differ diff --git a/projects/Convert_JPEG_to_PNG/output.png b/projects/Convert_JPEG_to_PNG/output.png new file mode 100644 index 000000000..121bacc64 Binary files /dev/null and b/projects/Convert_JPEG_to_PNG/output.png differ diff --git a/projects/Convert_JSON_to_CSV/README.md b/projects/Convert_JSON_to_CSV/README.md new file mode 100644 index 000000000..451129ed5 --- /dev/null +++ b/projects/Convert_JSON_to_CSV/README.md @@ -0,0 +1,9 @@ +# Convert a json file into a csv +This script take a json file as input and generate a csv file in output. + +### Prerequisites modules +* json +* Run `pip install json` to install required external modules. + +### How to run the script +- Execute `python3 converter.py` diff --git a/projects/Convert_XML_To_JSON/README.md b/projects/Convert_XML_To_JSON/README.md new file mode 100644 index 000000000..34d99a86f --- /dev/null +++ b/projects/Convert_XML_To_JSON/README.md @@ -0,0 +1,19 @@ +# Converter + +Convert XML to JSON + +### prerequisite +- you need to install below library using pip +- $ pip install xmltodict + +### Description +- It coverts any input.xml file into output.json. + +### How to run the script + +- First rename your file to input.xml +- Execute `python3 converter.py` +- The Output will be shown below as output.json + +## *Author Name* +Azhad Ghufran diff --git a/projects/Convert_XML_To_JSON/converter.py b/projects/Convert_XML_To_JSON/converter.py new file mode 100644 index 000000000..4db871811 --- /dev/null +++ b/projects/Convert_XML_To_JSON/converter.py @@ -0,0 +1,14 @@ +import json +import xmltodict + +with open('input.xml') as xml_file: + parsed_data = xmltodict.parse(xml_file.read()) + + xml_file.close() + + json_conversion = json.dumps(parsed_data) + + with open('output.json', 'w') as json_file: + json_file.write(json_conversion) + + json_file.close() diff --git a/projects/Convert_XML_To_JSON/input.xml b/projects/Convert_XML_To_JSON/input.xml new file mode 100644 index 000000000..e3d1fe876 --- /dev/null +++ b/projects/Convert_XML_To_JSON/input.xml @@ -0,0 +1,120 @@ + + + + Gambardella, Matthew + XML Developer's Guide + Computer + 44.95 + 2000-10-01 + An in-depth look at creating applications + with XML. + + + Ralls, Kim + Midnight Rain + Fantasy + 5.95 + 2000-12-16 + A former architect battles corporate zombies, + an evil sorceress, and her own childhood to become queen + of the world. + + + Corets, Eva + Maeve Ascendant + Fantasy + 5.95 + 2000-11-17 + After the collapse of a nanotechnology + society in England, the young survivors lay the + foundation for a new society. + + + Corets, Eva + Oberon's Legacy + Fantasy + 5.95 + 2001-03-10 + In post-apocalypse England, the mysterious + agent known only as Oberon helps to create a new life + for the inhabitants of London. Sequel to Maeve + Ascendant. + + + Corets, Eva + The Sundered Grail + Fantasy + 5.95 + 2001-09-10 + The two daughters of Maeve, half-sisters, + battle one another for control of England. Sequel to + Oberon's Legacy. + + + Randall, Cynthia + Lover Birds + Romance + 4.95 + 2000-09-02 + When Carla meets Paul at an ornithology + conference, tempers fly as feathers get ruffled. + + + Thurman, Paula + Splish Splash + Romance + 4.95 + 2000-11-02 + A deep sea diver finds true love twenty + thousand leagues beneath the sea. + + + Knorr, Stefan + Creepy Crawlies + Horror + 4.95 + 2000-12-06 + An anthology of horror stories about roaches, + centipedes, scorpions and other insects. + + + Kress, Peter + Paradox Lost + Science Fiction + 6.95 + 2000-11-02 + After an inadvertant trip through a Heisenberg + Uncertainty Device, James Salway discovers the problems + of being quantum. + + + O'Brien, Tim + Microsoft .NET: The Programming Bible + Computer + 36.95 + 2000-12-09 + Microsoft's .NET initiative is explored in + detail in this deep programmer's reference. + + + O'Brien, Tim + MSXML3: A Comprehensive Guide + Computer + 36.95 + 2000-12-01 + The Microsoft MSXML3 parser is covered in + detail, with attention to XML DOM interfaces, XSLT processing, + SAX and more. + + + Galos, Mike + Visual Studio 7: A Comprehensive Guide + Computer + 49.95 + 2001-04-16 + Microsoft Visual Studio 7 is explored in depth, + looking at how Visual Basic, Visual C++, C#, and ASP+ are + integrated into a comprehensive development + environment. + + \ No newline at end of file diff --git a/projects/Convert_XML_To_JSON/output.json b/projects/Convert_XML_To_JSON/output.json new file mode 100644 index 000000000..d59e6c7ed --- /dev/null +++ b/projects/Convert_XML_To_JSON/output.json @@ -0,0 +1,114 @@ +{ + "catalog": { + "book": [ + { + "@id": "bk101", + "author": "Gambardella, Matthew", + "title": "XML Developer's Guide", + "genre": "Computer", + "price": "44.95", + "publish_date": "2000-10-01", + "description": "An in-depth look at creating applications \n with XML." + }, + { + "@id": "bk102", + "author": "Ralls, Kim", + "title": "Midnight Rain", + "genre": "Fantasy", + "price": "5.95", + "publish_date": "2000-12-16", + "description": "A former architect battles corporate zombies, \n an evil sorceress, and her own childhood to become queen \n of the world." + }, + { + "@id": "bk103", + "author": "Corets, Eva", + "title": "Maeve Ascendant", + "genre": "Fantasy", + "price": "5.95", + "publish_date": "2000-11-17", + "description": "After the collapse of a nanotechnology \n society in England, the young survivors lay the \n foundation for a new society." + }, + { + "@id": "bk104", + "author": "Corets, Eva", + "title": "Oberon's Legacy", + "genre": "Fantasy", + "price": "5.95", + "publish_date": "2001-03-10", + "description": "In post-apocalypse England, the mysterious \n agent known only as Oberon helps to create a new life \n for the inhabitants of London. Sequel to Maeve \n Ascendant." + }, + { + "@id": "bk105", + "author": "Corets, Eva", + "title": "The Sundered Grail", + "genre": "Fantasy", + "price": "5.95", + "publish_date": "2001-09-10", + "description": "The two daughters of Maeve, half-sisters, \n battle one another for control of England. Sequel to \n Oberon's Legacy." + }, + { + "@id": "bk106", + "author": "Randall, Cynthia", + "title": "Lover Birds", + "genre": "Romance", + "price": "4.95", + "publish_date": "2000-09-02", + "description": "When Carla meets Paul at an ornithology \n conference, tempers fly as feathers get ruffled." + }, + { + "@id": "bk107", + "author": "Thurman, Paula", + "title": "Splish Splash", + "genre": "Romance", + "price": "4.95", + "publish_date": "2000-11-02", + "description": "A deep sea diver finds true love twenty \n thousand leagues beneath the sea." + }, + { + "@id": "bk108", + "author": "Knorr, Stefan", + "title": "Creepy Crawlies", + "genre": "Horror", + "price": "4.95", + "publish_date": "2000-12-06", + "description": "An anthology of horror stories about roaches,\n centipedes, scorpions and other insects." + }, + { + "@id": "bk109", + "author": "Kress, Peter", + "title": "Paradox Lost", + "genre": "Science Fiction", + "price": "6.95", + "publish_date": "2000-11-02", + "description": "After an inadvertant trip through a Heisenberg\n Uncertainty Device, James Salway discovers the problems \n of being quantum." + }, + { + "@id": "bk110", + "author": "O'Brien, Tim", + "title": "Microsoft .NET: The Programming Bible", + "genre": "Computer", + "price": "36.95", + "publish_date": "2000-12-09", + "description": "Microsoft's .NET initiative is explored in \n detail in this deep programmer's reference." + }, + { + "@id": "bk111", + "author": "O'Brien, Tim", + "title": "MSXML3: A Comprehensive Guide", + "genre": "Computer", + "price": "36.95", + "publish_date": "2000-12-01", + "description": "The Microsoft MSXML3 parser is covered in \n detail, with attention to XML DOM interfaces, XSLT processing, \n SAX and more." + }, + { + "@id": "bk112", + "author": "Galos, Mike", + "title": "Visual Studio 7: A Comprehensive Guide", + "genre": "Computer", + "price": "49.95", + "publish_date": "2001-04-16", + "description": "Microsoft Visual Studio 7 is explored in depth,\n looking at how Visual Basic, Visual C++, C#, and ASP+ are \n integrated into a comprehensive development \n environment." + } + ] + } +} diff --git a/projects/Convert_XML_To_JSON/requirements.txt b/projects/Convert_XML_To_JSON/requirements.txt new file mode 100644 index 000000000..f094977c5 --- /dev/null +++ b/projects/Convert_XML_To_JSON/requirements.txt @@ -0,0 +1 @@ +xmltodict==0.12.0 diff --git a/projects/Convert_a_image_to_pdf/README.md b/projects/Convert_a_image_to_pdf/README.md new file mode 100644 index 000000000..07537b66c --- /dev/null +++ b/projects/Convert_a_image_to_pdf/README.md @@ -0,0 +1,30 @@ + +# Convert an Image to PDF + +The Python script enables the user to convert Images into PDF files. However, you must note that the script can only work well for JPG file formats. You can use the converter for revamping JPG images into PDF format. + +### Requirements + +**img2pdf module** + +The `img2pdf` is an external Python module which enables you to convert a JPG image into a PDF. + + pip install img2pdf + +### How to run the script + +### Using Terminal + +- Add the image in the JPG format with name as 'input' in this folder. +- Run converter_terminal.py script +- Output PDF file will be generated in this folder + + +### Screenshot/GIF showing the sample use of the script + + +![image](https://drive.google.com/uc?export=view&id=1_86AVHC3DkrOCcVsEbTXWejsXtnJOVqq) + +## *Author Name* + +[Gaodong](https://github.com/xlgd) diff --git a/projects/Convert_a_image_to_pdf/convert_image_to_pdf.py b/projects/Convert_a_image_to_pdf/convert_image_to_pdf.py new file mode 100644 index 000000000..10d42d901 --- /dev/null +++ b/projects/Convert_a_image_to_pdf/convert_image_to_pdf.py @@ -0,0 +1,23 @@ +import sys +import img2pdf +import os + +filepath = sys.argv[1] +if os.path.isdir(filepath): + with open("output.pdf", "wb") as f: + imgs = [] + for fname in os.listdir(filepath): + if not fname.endswith(".jpg"): + continue + path = os.path.join(filepath, fname) + if os.path.isdir(path): + continue + imgs.append(path) + f.write(img2pdf.convert(imgs)) +elif os.path.isfile(filepath): + if filepath.endswith(".jpg"): + with open("output.pdf", "wb") as f: + f.write(img2pdf.convert(filepath)) +else: + print("please input file or dir") + diff --git a/projects/Convert_a_image_to_pdf/requirements.txt b/projects/Convert_a_image_to_pdf/requirements.txt new file mode 100644 index 000000000..31fc281b6 --- /dev/null +++ b/projects/Convert_a_image_to_pdf/requirements.txt @@ -0,0 +1 @@ +img2pdf==0.4.0 \ No newline at end of file diff --git a/projects/Convert_numbers_to_word/README.md b/projects/Convert_numbers_to_word/README.md new file mode 100644 index 000000000..ab63b4d88 --- /dev/null +++ b/projects/Convert_numbers_to_word/README.md @@ -0,0 +1,19 @@ +# Convert Numbers To Words + +Convert a number to the written word form + +### Prerequisites + +None + +### How to run the script + +Execute `python3 converter.py` + +## Screenshot/GIF showing the sample use of the script + +![Screenshot of the converter.py file](Screenshot.png) + +## *Author Name* + +[Niraj Shrestha](https://github.com/CrestNiraj12) diff --git a/projects/Convert_numbers_to_word/Screenshot.png b/projects/Convert_numbers_to_word/Screenshot.png new file mode 100644 index 000000000..2f6d50178 Binary files /dev/null and b/projects/Convert_numbers_to_word/Screenshot.png differ diff --git a/projects/Convert_numbers_to_word/converter.py b/projects/Convert_numbers_to_word/converter.py new file mode 100644 index 000000000..8d2c66a76 --- /dev/null +++ b/projects/Convert_numbers_to_word/converter.py @@ -0,0 +1,83 @@ + +one_digit_words = { + '0': ["zero"], + '1': ["one"], + '2': ["two", "twen"], + '3': ["three", "thir"], + '4': ["four", "for"], + '5': ["five", "fif"], + '6': ["six"], + '7': ["seven"], + '8': ["eight"], + '9': ["nine"], + } + +two_digit_words = ["ten", "eleven", "twelve"] +hundred = "hundred" +large_sum_words = ["thousand", "million", "billion", "trillion", "quadrillion", "quintillion", "sextillion", "septillion", "octillion", "nonillion"] + +def converter(n): + word = [] + + if n.startswith('-'): + word.append("(negative)") + n = n[1:] + + if len(n) % 3 != 0 and len(n) > 3: + n = n.zfill(3 * (((len(n)-1) // 3) + 1)) + + sum_list = [n[i:i + 3] for i in range(0, len(n), 3)] + skip = False + + for i, num in enumerate(sum_list): + if num != '000': skip = False + + for _ in range(len(num)): + num = num.lstrip('0') + if len(num) == 1: + if (len(sum_list) > 1 or (len(sum_list) == 1 and len(sum_list[0]) == 3)) and i == len(sum_list) - 1 and (word[-1] in large_sum_words or hundred in word[-1]): + word.append("and") + word.append(one_digit_words[num][0]) + num = num[1:] + break + + if len(num) == 2: + if num[0] != '0': + if (len(sum_list) > 1 or (len(sum_list) == 1 and len(sum_list[0]) == 3)) and i == len(sum_list) - 1: + word.append("and") + if num.startswith('1'): + if int(num[1]) in range(3): + word.append(two_digit_words[int(num[1])]) + else: + number = one_digit_words[num[1]][1 if int(num[1]) in range(3, 6, 2) else 0] + word.append(number + ("teen" if not number[-1] == 't' else "een")) + else: + word.append(one_digit_words[num[0]][1 if int(num[0]) in range(2, 6) else 0] + ("ty " if num[0] != '8' else 'y ') + (one_digit_words[num[1]][0] if num[1] != '0' else "")) + break + else: + num = num[1:] + continue + + if len(num) == 3: + if num[0] != '0': + word.append(one_digit_words[num[0]][0] + " " + hundred) + if num[1:] == '00': break + num = num[1:] + + if len(sum_list[i:]) > 1 and not skip: + word.append(large_sum_words[len(sum_list[i:]) - 2]) + skip = True + + word = " ".join(map(str.strip, word)) + return word[0].lstrip().upper() + word[1:].rstrip().lower() if "negative" not in word else word[:11].lstrip() + word[11].upper() + word[12:].rstrip().lower() + +if __name__ == "__main__": + while True: + try: + n = input("Enter any number to convert it into words or 'exit' to stop: ") + if n == "exit": + break + int(n) + print(n, "-->", converter(n)) + except ValueError: + print("Error: Invalid Number!") \ No newline at end of file diff --git a/projects/Countdown_timer/README.md b/projects/Countdown_timer/README.md new file mode 100644 index 000000000..03e9d479c --- /dev/null +++ b/projects/Countdown_timer/README.md @@ -0,0 +1,32 @@ +# Development +Please have python3 installed to run this project on terminal: +[Python3 Installation](https://www.python.org/downloads/) + +# CountDown Timer + +Countdown timer made using the Python time module and is a terminal game to countdown the time. + +### Prerequisites + +Modules required to be able to use the script successfully +and how to install them. +Please have python3 installed to run this project on terminal: + + +### How to run the script + +```code +python3 main.py +``` +# Example +Enter the time in seconds: 20 +00:20 +Timer completed! + +### Screenshot/GIF showing the sample use of the script + +![example](example.png) + +## *Author Name* + +[JapneetSingh](https://github.com/japneetsingh035) \ No newline at end of file diff --git a/projects/Countdown_timer/example.png b/projects/Countdown_timer/example.png new file mode 100644 index 000000000..5709cd288 Binary files /dev/null and b/projects/Countdown_timer/example.png differ diff --git a/projects/Countdown_timer/main.py b/projects/Countdown_timer/main.py new file mode 100644 index 000000000..06c48e22c --- /dev/null +++ b/projects/Countdown_timer/main.py @@ -0,0 +1,15 @@ +import time + +def countdown(t): + while t: + mins, secs = divmod(t, 60) + timer = '{:02d}:{:02d}'.format(mins,secs) + print(timer, end="\r") + time.sleep(1) + t -= 1 + + print('Timer completed!') + +t = input('Enter the time in seconds: ') + +countdown(int(t)) \ No newline at end of file diff --git a/projects/Create_a_script_to_encrypt_files_and_folder/README.md b/projects/Create_a_script_to_encrypt_files_and_folder/README.md new file mode 100644 index 000000000..f636b7dd8 --- /dev/null +++ b/projects/Create_a_script_to_encrypt_files_and_folder/README.md @@ -0,0 +1,12 @@ +## create script to encrypt files and folder + +### usage + +python encrypt.py path(file or folder) + +examples: + python encrypt.py test.txt(file) + or + python eccrypt.py ./testdir(folder) + +encrypted files("original_file_name.bin") will be generated in original location after the program running diff --git a/projects/Create_a_script_to_encrypt_files_and_folder/encrypt.py b/projects/Create_a_script_to_encrypt_files_and_folder/encrypt.py new file mode 100644 index 000000000..3665f4f0f --- /dev/null +++ b/projects/Create_a_script_to_encrypt_files_and_folder/encrypt.py @@ -0,0 +1,39 @@ +import sys +import os +from Cryptodome.Cipher import AES +from Cryptodome import Random +from binascii import b2a_hex + + +def encrypt_dir(path): + for root, _, files in os.walk("."): + for file in files: + file_path = os.path.join(root, file) + print(file_path + " is encrypting.") + encrypt_file(file_path) + + +def encrypt_file(path): + # get the plaintext + with open(path) as f: + plain_text = f.read() + + # The key length must be 16 (AES-128), 24 (AES-192), or 32 (AES-256) Bytes. + key = b'this is a 16 key' + + iv = Random.new().read(AES.block_size) + mycipher = AES.new(key, AES.MODE_CFB, iv) + ciphertext = iv + mycipher.encrypt(plain_text.encode()) + + # output + with open(path + ".bin", "wb") as file_out: + file_out.write(ciphertext[16:]) + + +path = sys.argv[1] +if os.path.isdir(path) and os.path.exists(path): + encrypt_dir(path) +elif os.path.isfile(path) and os.path.exists(path): + encrypt_file(path) +else: + print("it's a special file(socket,FIFO,device file)") diff --git a/projects/Create_a_script_to_encrypt_files_and_folder/requirements.txt b/projects/Create_a_script_to_encrypt_files_and_folder/requirements.txt new file mode 100644 index 000000000..527b2e138 --- /dev/null +++ b/projects/Create_a_script_to_encrypt_files_and_folder/requirements.txt @@ -0,0 +1 @@ +pycryptodome==3.9.8 diff --git a/projects/Create_a_simple_stopwatch/README.md b/projects/Create_a_simple_stopwatch/README.md new file mode 100644 index 000000000..b80a6505c --- /dev/null +++ b/projects/Create_a_simple_stopwatch/README.md @@ -0,0 +1,5 @@ +## create a simple stopwatch + +### usage + +python stopwatch.py diff --git a/projects/Create_a_simple_stopwatch/stopwatch.py b/projects/Create_a_simple_stopwatch/stopwatch.py new file mode 100644 index 000000000..47dd4b192 --- /dev/null +++ b/projects/Create_a_simple_stopwatch/stopwatch.py @@ -0,0 +1,81 @@ +import tkinter as Tkinter +from datetime import datetime +counter = 0 +running = False + + +def counter_label(label): + def count(): + if running: + global counter + # To manage the intial delay. + if counter == 0: + display = 'Ready!' + else: + tt = datetime.utcfromtimestamp(counter) + string = tt.strftime('%H:%M:%S') + display = string + + label['text'] = display + + # label.after(arg1, arg2) delays by + # first argument given in milliseconds + # and then calls the function given as second argument. + # Generally like here we need to call the + # function in which it is present repeatedly. + # Delays by 1000ms=1 seconds and call count again. + label.after(1000, count) + counter += 1 + + # Triggering the start of the counter. + count() + + +# start function of the stopwatch +def Start(label): + global running + running = True + counter_label(label) + start['state'] = 'disabled' + stop['state'] = 'normal' + reset['state'] = 'normal' + + +# Stop function of the stopwatch +def Stop(): + global running + start['state'] = 'normal' + stop['state'] = 'disabled' + reset['state'] = 'normal' + running = False + + +# Reset function of the stopwatch +def Reset(label): + global counter + counter = 0 + # If reset is pressed after pressing stop. + if not running: + reset['state'] = 'disabled' + label['text'] = '00:00:00' + # If reset is pressed while the stopwatch is running. + else: + label['text'] = '00:00:00' + + +root = Tkinter.Tk() +root.title("Stopwatch") + +# Fixing the window size. +root.minsize(width=250, height=70) +label = Tkinter.Label(root, text='Ready!', fg='black', font='Verdana 30 bold') +label.pack() +f = Tkinter.Frame(root) +start = Tkinter.Button(f, text='Start', width=6, command=lambda: Start(label)) +stop = Tkinter.Button(f, text='Stop', width=6, state='disabled', command=Stop) +reset = Tkinter.Button(f, text='Reset', width=6, state='disabled', command=lambda: Reset(label)) +f.pack(anchor='center', pady=5) +start.pack(side='left') +stop.pack(side='left') +reset.pack(side='left') +root.mainloop() diff --git a/projects/Create_calculator_app/README.md b/projects/Create_calculator_app/README.md new file mode 100644 index 000000000..a42d83bc4 --- /dev/null +++ b/projects/Create_calculator_app/README.md @@ -0,0 +1,20 @@ +# Script Title + +A small python program that creates a calculator app + +### Prerequisites + +Python 3 + +### How to run the script + +> python calculator.py + +### Screenshot/GIF showing the sample use of the script + +![Output](https://user-images.githubusercontent.com/53505850/95007683-0d85c700-0630-11eb-9aa4-7125f6be1ea0.PNG) + + +## *Author Name* + +[Gaodong](https://github.com/xlgd) diff --git a/projects/Create_calculator_app/calculator.py b/projects/Create_calculator_app/calculator.py new file mode 100644 index 000000000..b35204d59 --- /dev/null +++ b/projects/Create_calculator_app/calculator.py @@ -0,0 +1,137 @@ +# -*- coding: utf-8 -*- +from tkinter import Tk, END, Entry, N, E, S, W, Button +from tkinter import font +from tkinter import Label +from functools import partial + + +def get_input(entry, argu): + entry.insert(END, argu) + + +def backspace(entry): + input_len = len(entry.get()) + entry.delete(input_len - 1) + + +def clear(entry): + entry.delete(0, END) + + +def calc(entry): + input_info = entry.get() + try: + output = str(eval(input_info.strip())) + except ZeroDivisionError: + popupmsg() + output = "" + clear(entry) + entry.insert(END, output) + + +def popupmsg(): + popup = Tk() + popup.resizable(0, 0) + popup.geometry("120x100") + popup.title("Alert") + label = Label(popup, text="Cannot divide by 0 ! \n Enter valid values") + label.pack(side="top", fill="x", pady=10) + B1 = Button(popup, text="Okay", bg="#DDDDDD", command=popup.destroy) + B1.pack() + + +def cal(): + root = Tk() + root.title("Calc") + root.resizable(0, 0) + + entry_font = font.Font(size=15) + entry = Entry(root, justify="right", font=entry_font) + entry.grid(row=0, column=0, columnspan=4, + sticky=N + W + S + E, padx=5, pady=5) + + cal_button_bg = '#FF6600' + num_button_bg = '#4B4B4B' + other_button_bg = '#DDDDDD' + text_fg = '#FFFFFF' + button_active_bg = '#C0C0C0' + + num_button = partial(Button, root, fg=text_fg, bg=num_button_bg, + padx=10, pady=3, activebackground=button_active_bg) + cal_button = partial(Button, root, fg=text_fg, bg=cal_button_bg, + padx=10, pady=3, activebackground=button_active_bg) + + button7 = num_button(text='7', bg=num_button_bg, + command=lambda: get_input(entry, '7')) + button7.grid(row=2, column=0, pady=5) + + button8 = num_button(text='8', command=lambda: get_input(entry, '8')) + button8.grid(row=2, column=1, pady=5) + + button9 = num_button(text='9', command=lambda: get_input(entry, '9')) + button9.grid(row=2, column=2, pady=5) + + button10 = cal_button(text='+', command=lambda: get_input(entry, '+')) + button10.grid(row=4, column=3, pady=5) + + button4 = num_button(text='4', command=lambda: get_input(entry, '4')) + button4.grid(row=3, column=0, pady=5) + + button5 = num_button(text='5', command=lambda: get_input(entry, '5')) + button5.grid(row=3, column=1, pady=5) + + button6 = num_button(text='6', command=lambda: get_input(entry, '6')) + button6.grid(row=3, column=2, pady=5) + + button11 = cal_button(text='-', command=lambda: get_input(entry, '-')) + button11.grid(row=3, column=3, pady=5) + + button1 = num_button(text='1', command=lambda: get_input(entry, '1')) + button1.grid(row=4, column=0, pady=5) + + button2 = num_button(text='2', command=lambda: get_input(entry, '2')) + button2.grid(row=4, column=1, pady=5) + + button3 = num_button(text='3', command=lambda: get_input(entry, '3')) + button3.grid(row=4, column=2, pady=5) + + button12 = cal_button(text='*', command=lambda: get_input(entry, '*')) + button12.grid(row=2, column=3, pady=5) + + button0 = num_button(text='0', command=lambda: get_input(entry, '0')) + #button0.grid(row=5, column=0, columnspan=2, padx=3, pady=5, sticky=N + S + E + W) + button0.grid(row=5, column=0, pady=5) + + button13 = num_button(text='.', command=lambda: get_input(entry, '.')) + button13.grid(row=5, column=1, pady=5) + + button14 = Button(root, text='/', fg=text_fg, bg=cal_button_bg, padx=10, pady=3, + command=lambda: get_input(entry, '/')) + button14.grid(row=1, column=3, pady=5) + + button15 = Button(root, text='<-', bg=other_button_bg, padx=10, pady=3, + command=lambda: backspace(entry), activebackground=button_active_bg) + button15.grid(row=1, column=0, columnspan=2, + padx=3, pady=5, sticky=N + S + E + W) + + button16 = Button(root, text='C', bg=other_button_bg, padx=10, pady=3, + command=lambda: clear(entry), activebackground=button_active_bg) + button16.grid(row=1, column=2, pady=5) + + button17 = Button(root, text='=', fg=text_fg, bg=cal_button_bg, padx=10, pady=3, + command=lambda: calc(entry), activebackground=button_active_bg) + button17.grid(row=5, column=3, pady=5) + + button18 = Button(root, text='^', fg=text_fg, bg=cal_button_bg, padx=10, pady=3, + command=lambda: get_input(entry, '**')) + button18.grid(row=5, column=2, pady=5) + def quit(): + exit['command'] = root.quit() + exit = Button(root, text='Quit', fg='white', bg='black', command=quit, height=1, width=7) + exit.grid(row=6, column=1) + + root.mainloop() + + +if __name__ == '__main__': + cal() diff --git a/projects/Create_calculator_app/output.png b/projects/Create_calculator_app/output.png new file mode 100644 index 000000000..beafd2133 Binary files /dev/null and b/projects/Create_calculator_app/output.png differ diff --git a/projects/Currency_converter/Enhanced_Currency_converter b/projects/Currency_converter/Enhanced_Currency_converter new file mode 100644 index 000000000..899932ccc --- /dev/null +++ b/projects/Currency_converter/Enhanced_Currency_converter @@ -0,0 +1,241 @@ +""" +THis program is capable of converting from one currency to another as of today itself. +It uses the api at fixer.io and then calculates the value of the currency in terms of the other as of today. +""" + +# https://github.com/chavarera/python-mini-projects/issues +# https://medium.com/@cereblanco/setup-black-and-isort-in-vscode-514804590bf9 +# Source: https://fixer.io/quickstart +# Imp read: https://stackoverflow.com/questions/3139879/how-do-i-get-currency-exchange-rates-via-an-api-such-as-google-finance + + +import requests +import json +import sys +from pprint import pprint + +# The below 4 lines bring out the value of currency from the api at fixer.io. I had to register there, the key is unique to me. +url = "http://data.fixer.io/api/latest?access_key=33ec7c73f8a4eb6b9b5b5f95118b2275" +data = requests.get(url).text +data2 = json.loads(data) # brings whether request was successful,timestamp etc +fx = data2["rates"] +currencies = [ + "AED : Emirati Dirham,United Arab Emirates Dirham", + "AFN : Afghan Afghani,Afghanistan Afghani", + "ALL : Albanian Lek,Albania Lek", + "AMD : Armenian Dram,Armenia Dram", + "ANG : Dutch Guilder,Netherlands Antilles Guilder,Bonaire,Curaçao,Saba,Sint Eustatius,Sint Maarten", + "AOA : Angolan Kwanza,Angola Kwanza", + "ARS : Argentine Peso,Argentina Peso,Islas Malvinas", + "AUD : Australian Dollar,Australia Dollar,Christmas Island,Cocos (Keeling) Islands,Norfolk Island,Ashmore and Cartier Islands,Australian Antarctic Territory,Coral Sea Islands,Heard Island,McDonald Islands,Kiribati,Nauru", + "AWG : Aruban or Dutch Guilder,Aruba Guilder", + "AZN : Azerbaijan Manat,Azerbaijan Manat", + "BAM : Bosnian Convertible Mark,Bosnia and Herzegovina Convertible Mark", + "BBD : Barbadian or Bajan Dollar,Barbados Dollar", + "BDT : Bangladeshi Taka,Bangladesh Taka", + "BGN : Bulgarian Lev,Bulgaria Lev", + "BHD : Bahraini Dinar,Bahrain Dinar", + "BIF : Burundian Franc,Burundi Franc", + "BMD : Bermudian Dollar,Bermuda Dollar", + "BND : Bruneian Dollar,Brunei Darussalam Dollar", + "BOB : Bolivian Bolíviano,Bolivia Bolíviano", + "BRL : Brazilian Real,Brazil Real", + "BSD : Bahamian Dollar,Bahamas Dollar", + "BTC : Bitcoin,BTC, XBT", + "BTN : Bhutanese Ngultrum,Bhutan Ngultrum", + "BWP : Botswana Pula,Botswana Pula", + "BYN : Belarusian Ruble,Belarus Ruble", + "BYR : Belarusian Ruble,Belarus Ruble", + "BZD : Belizean Dollar,Belize Dollar", + "CAD : Canadian Dollar,Canada Dollar", + "CDF : Congolese Franc,Congo/Kinshasa Franc", + "CHF : Swiss Franc,Switzerland Franc,Liechtenstein,Campione d'Italia,Büsingen am Hochrhein", + "CLF : Chilean Unit of Account", + "CLP : Chilean Peso,Chile Peso", + "CNY : Chinese Yuan Renminbi,China Yuan Renminbi", + "COP : Colombian Peso,Colombia Peso", + "CRC : Costa Rican Colon,Costa Rica Colon", + "CUC : Cuban Convertible Peso,Cuba Convertible Peso", + "CUP : Cuban Peso,Cuba Peso", + "CVE : Cape Verdean Escudo,Cape Verde Escudo", + "CZK : Czech Koruna,Czech Republic Koruna", + "DJF : Djiboutian Franc,Djibouti Franc", + "DKK : Danish Krone,Denmark Krone,Faroe Islands,Greenland", + "DOP : Dominican Peso,Dominican Republic Peso", + "DZD : Algerian Dinar,Algeria Dinar", + "EGP : Egyptian Pound,Egypt Pound,Gaza Strip", + "ERN : Eritrean Nakfa,Eritrea Nakfa", + "ETB : Ethiopian Birr,Ethiopia Birr,Eritrea", + "EUR : Euro,Euro Member Countries,Andorra,Austria,Azores,Baleares (Balearic Islands),Belgium,Canary Islands,Cyprus,Finland,France,French Guiana,French Southern Territories,Germany,Greece,Guadeloupe,Holland (Netherlands),Holy See (Vatican City),Ireland (Eire),Italy,Luxembourg,Madeira Islands,Malta,Monaco,Montenegro,Netherlands", + "FJD : Fijian Dollar,Fiji Dollar", + "FKP : Falkland Island Pound,Falkland Islands (Malvinas) Pound", + "GBP : British Pound,United Kingdom Pound,United Kingdom (UK),England,Northern Ireland,Scotland,Wales,Falkland Islands,Gibraltar,Guernsey,Isle of Man,Jersey,Saint Helena and Ascension,South Georgia and the South Sandwich Islands,Tristan da Cunha", + "GEL : Georgian Lari,Georgia Lari", + "GGP : Guernsey Pound,Guernsey Pound", + "GHS : Ghanaian Cedi,Ghana Cedi", + "GIP : Gibraltar Pound,Gibraltar Pound", + "GMD : Gambian Dalasi,Gambia Dalasi", + "GNF : Guinean Franc,Guinea Franc", + "GTQ : Guatemalan Quetzal,Guatemala Quetzal", + "GYD : Guyanese Dollar,Guyana Dollar", + "HKD : Hong Kong Dollar,Hong Kong Dollar", + "HNL : Honduran Lempira,Honduras Lempira", + "HRK : Croatian Kuna,Croatia Kuna", + "HTG : Haitian Gourde,Haiti Gourde", + "HUF : Hungarian Forint,Hungary Forint", + "IDR : Indonesian Rupiah,Indonesia Rupiah,East Timor", + "ILS : Israeli Shekel,Israel Shekel,Palestinian Territories", + "IMP : Isle of Man Pound,Isle of Man Pound", + "INR : Indian Rupee,India Rupee,Bhutan,Nepal", + "IQD : Iraqi Dinar,Iraq Dinar", + "IRR : Iranian Rial,Iran Rial", + "ISK : Icelandic Krona,Iceland Krona", + "JEP : Jersey Pound,Jersey Pound", + "JMD : Jamaican Dollar,Jamaica Dollar", + "JOD : Jordanian Dinar,Jordan Dinar", + "JPY : Japanese Yen,Japan Yen", + "KES : Kenyan Shilling,Kenya Shilling", + "KGS : Kyrgyzstani Som,Kyrgyzstan Som", + "KHR : Cambodian Riel,Cambodia Riel", + "KMF : Comorian Franc,Comorian Franc", + "KPW : North Korean Won,Korea (North) Won", + "KRW : South Korean Won,Korea (South) Won", + "KWD : Kuwaiti Dinar,Kuwait Dinar", + "KYD : Caymanian Dollar,Cayman Islands Dollar", + "KZT : Kazakhstani Tenge,Kazakhstan Tenge", + "LAK : Lao Kip,Laos Kip", + "LBP : Lebanese Pound,Lebanon Pound", + "LKR : Sri Lankan Rupee,Sri Lanka Rupee", + "LRD : Liberian Dollar,Liberia Dollar", + "LSL : Basotho Loti,Lesotho Loti", + "LTL : Lithuanian litas", + "LVL : Latvia Lats", + "LYD : Libyan Dinar,Libya Dinar", + "MAD : Moroccan Dirham,Morocco Dirham,Western Sahara", + "MDL : Moldovan Leu,Moldova Leu", + "MGA : Malagasy Ariary,Madagascar Ariary", + "MKD : Macedonian Denar,Macedonia Denar", + "MMK : Burmese Kyat,Myanmar (Burma) Kyat", + "MNT : Mongolian Tughrik,Mongolia Tughrik", + "MOP : Macau Pataca,Macau Pataca", + "MRU : Mauritanian Ouguiya,Mauritania Ouguiya", + "MUR : Mauritian Rupee,Mauritius Rupee", + "MVR : Maldivian Rufiyaa,Maldives (Maldive Islands) Rufiyaa", + "MWK : Malawian Kwacha,Malawi Kwacha", + "MXN : Mexican Peso,Mexico Peso", + "MYR : Malaysian Ringgit,Malaysia Ringgit", + "MZN : Mozambican Metical,Mozambique Metical", + "NAD : Namibian Dollar,Namibia Dollar", + "NGN : Nigerian Naira,Nigeria Naira", + "NIO : Nicaraguan Cordoba,Nicaragua Cordoba", + "NOK : Norwegian Krone,Norway Krone,Bouvet Island,Svalbard,Jan Mayen,Queen Maud Land,Peter I Island", + "NPR : Nepalese Rupee,Nepal Rupee,India (unofficially near India-Nepal border)", + "NZD : New Zealand Dollar,New Zealand Dollar,Cook Islands,Niue,Pitcairn Islands,Tokelau", + "OMR : Omani Rial,Oman Rial", + "PAB : Panamanian Balboa,Panama Balboa", + "PEN : Peruvian Sol,Peru Sol", + "PGK : Papua New Guinean Kina,Papua New Guinea Kina", + "PHP : Philippine Peso,Philippines Peso", + "PKR : Pakistani Rupee,Pakistan Rupee", + "PLN : Polish Zloty,Poland Zloty", + "PYG : Paraguayan Guarani,Paraguay Guarani", + "QAR : Qatari Riyal,Qatar Riyal", + "RON : Romanian Leu,Romania Leu", + "RSD : Serbian Dinar,Serbia Dinar", + "RUB : Russian Ruble,Russia Ruble,Tajikistan,Abkhazia,South Ossetia", + "RWF : Rwandan Franc,Rwanda Franc", + "SAR : Saudi Arabian Riyal,Saudi Arabia Riyal", + "SBD : Solomon Islander Dollar,Solomon Islands Dollar", + "SCR : Seychellois Rupee,Seychelles Rupee", + "SDG : Sudanese Pound,Sudan Pound", + "SEK : Swedish Krona,Sweden Krona", + "SGD : Singapore Dollar,Singapore Dollar", + "SHP : Saint Helenian Pound,Saint Helena Pound", + "SLL : Sierra Leonean Leone,Sierra Leone Leone", + "SOS : Somali Shilling,Somalia Shilling", + "SRD : Surinamese Dollar,Suriname Dollar", + "STN : Sao Tomean Dobra,São Tomé and Príncipe Dobra", + "SVC : Salvadoran Colon,El Salvador Colon", + "SYP : Syrian Pound,Syria Pound", + "SZL : Swazi Lilangeni,eSwatini Lilangeni", + "THB : Thai Baht,Thailand Baht", + "TJS : Tajikistani Somoni,Tajikistan Somoni", + "TMT : Turkmenistani Manat,Turkmenistan Manat", + "TND : Tunisian Dinar,Tunisia Dinar", + "TOP : Tongan Pa'anga,Tonga Pa'anga", + "TRY : Turkish Lira,Turkey Lira,North Cyprus", + "TTD : Trinidadian Dollar,Trinidad and Tobago Dollar,Trinidad,Tobago", + "TWD : Taiwan New Dollar,Taiwan New Dollar", + "TZS : Tanzanian Shilling,Tanzania Shilling", + "UAH : Ukrainian Hryvnia,Ukraine Hryvnia", + "UGX : Ugandan Shilling,Uganda Shilling", + "USD : US Dollar,United States Dollar,America,American Samoa,American Virgin Islands,British Indian Ocean " + "Territory,British Virgin Islands,Ecuador,El Salvador,Guam,Haiti,Micronesia,Northern Mariana Islands,Palau," + "Panama,Puerto Rico,Turks and Caicos Islands,United States Minor Outlying Islands,Wake Island,East Timor", + "UYU : Uruguayan Peso,Uruguay Peso", + "UZS : Uzbekistani Som,Uzbekistan Som", + "VEF : Venezuelan Bolívar,Venezuela Bolívar", + "VND : Vietnamese Dong,Viet Nam Dong", + "VUV : Ni-Vanuatu Vatu,Vanuatu Vatu", + "WST : Samoan Tala,Samoa Tala", + "XAF : Central African CFA Franc BEAC,Communauté Financière Africaine (BEAC) CFA Franc BEAC,Cameroon," + "Central African Republic,Chad,Congo/Brazzaville,Equatorial Guinea,Gabon", + "XAG : Silver Ounce,Silver", + "XAU : Gold Ounce,Gold", + "XCD : East Caribbean Dollar,East Caribbean Dollar,Anguilla,Antigua and Barbuda,Dominica,Grenada,The Grenadines " + "and Saint Vincent,Montserrat", + "XDR : IMF Special Drawing Rights,International Monetary Fund (IMF) Special Drawing Rights", + "XOF : CFA Franc,Communauté Financière Africaine (BCEAO) Franc,Benin,Burkina Faso,Ivory Coast," + "Guinea-Bissau,Mali,Niger,Senegal,Togo", + "XPF : CFP Franc,Comptoirs Français du Pacifique (CFP) Franc,French Polynesia,New Caledonia,Wallis and " + "Futuna Islands", + "YER : Yemeni Rial,Yemen Rial", + "ZAR : South African Rand,South Africa Rand,Lesotho,Namibia", + "ZMK : Zambian Kwacha,Zambia Kwacha", + "ZMW : Zambian Kwacha,Zambia Kwacha", + "ZWL : Zimbabwean Dollar,Zimbabwe Dollar", +] + + +# enhancement 3 +def displays_storage(): + file2 = open("conversion storage.txt", "r+") + print(file2.read()) + file2.close() + + +# The below function calculates the actual conversion +def function1(): + query = input( + "Please specify the amount of currency to convert, from currency, to currency (with space in between).\nPress " + "SHOW to see list of currencies available. \n press DISPLAY to see previous transactions" + "\nPress Q to quit. \n ") + if query == "Q": + sys.exit() + elif query == "SHOW": + pprint(currencies) + function1() + elif query == "DISPLAY": + displays_storage() + function1() + + else: + qty, fromC, toC = query.split(" ") + fromC = fromC.upper() + toC = toC.upper() + qty = float(round(int(qty), 2)) + amount = round(qty * fx[toC] / fx[fromC], 2) + # opening the file in append mode + file1 = open("conversion storage.txt", "a") + # storing the cash conversion data + file1.write(f"{qty} of currency {fromC} amounts to {amount} of currency {toC} today\n") + # closes file after use + file1.close() + print(f"{qty} of currency {fromC} amounts to {amount} of currency {toC} today") + + +try: + function1() +except KeyError: + print("You seem to have inputted wrongly, retry!") + function1() diff --git a/projects/Currency_converter/README.md b/projects/Currency_converter/README.md new file mode 100644 index 000000000..ae5a941c7 --- /dev/null +++ b/projects/Currency_converter/README.md @@ -0,0 +1,20 @@ +# Script Title + +A small python program that converts currency with live info + +### Prerequisites + +- requests +- Python 3 + +### How to run the script + +> python cc.py + +### Screenshot/GIF showing the sample use of the script + +![ ](https://github.com/Python-World/python-mini-projects/blob/master/projects/Currency_converter/output.png) + +## *Author Name* + +[github-of-wone](https://github.com/github-of-wone/) diff --git a/projects/Currency_converter/cc.py b/projects/Currency_converter/cc.py new file mode 100644 index 000000000..60367a565 --- /dev/null +++ b/projects/Currency_converter/cc.py @@ -0,0 +1,218 @@ +""" +THis program is capable of converting from one currency to another as of today itself. +It uses the api at fixer.io and then calculates the value of the currency in terms of the other as of today. +""" + +# https://github.com/chavarera/python-mini-projects/issues +# https://medium.com/@cereblanco/setup-black-and-isort-in-vscode-514804590bf9 +# Source: https://fixer.io/quickstart +# Imp read: https://stackoverflow.com/questions/3139879/how-do-i-get-currency-exchange-rates-via-an-api-such-as-google-finance + + +import requests +import json +import sys +from pprint import pprint + +# The below 4 lines bring out the value of currency from the api at fixer.io. I had to register there, the key is unique to me. +url = "http://data.fixer.io/api/latest?access_key=33ec7c73f8a4eb6b9b5b5f95118b2275" +data = requests.get(url).text +data2 = json.loads(data) #brings whether request was successful,timestamp etc +fx = data2["rates"] + +currencies = [ + "AED : Emirati Dirham,United Arab Emirates Dirham", + "AFN : Afghan Afghani,Afghanistan Afghani", + "ALL : Albanian Lek,Albania Lek", + "AMD : Armenian Dram,Armenia Dram", + "ANG : Dutch Guilder,Netherlands Antilles Guilder,Bonaire,Curaçao,Saba,Sint Eustatius,Sint Maarten", + "AOA : Angolan Kwanza,Angola Kwanza", + "ARS : Argentine Peso,Argentina Peso,Islas Malvinas", + "AUD : Australian Dollar,Australia Dollar,Christmas Island,Cocos (Keeling) Islands,Norfolk Island,Ashmore and Cartier Islands,Australian Antarctic Territory,Coral Sea Islands,Heard Island,McDonald Islands,Kiribati,Nauru", + "AWG : Aruban or Dutch Guilder,Aruba Guilder", + "AZN : Azerbaijan Manat,Azerbaijan Manat", + "BAM : Bosnian Convertible Mark,Bosnia and Herzegovina Convertible Mark", + "BBD : Barbadian or Bajan Dollar,Barbados Dollar", + "BDT : Bangladeshi Taka,Bangladesh Taka", + "BGN : Bulgarian Lev,Bulgaria Lev", + "BHD : Bahraini Dinar,Bahrain Dinar", + "BIF : Burundian Franc,Burundi Franc", + "BMD : Bermudian Dollar,Bermuda Dollar", + "BND : Bruneian Dollar,Brunei Darussalam Dollar", + "BOB : Bolivian Bolíviano,Bolivia Bolíviano", + "BRL : Brazilian Real,Brazil Real", + "BSD : Bahamian Dollar,Bahamas Dollar", + "BTC : Bitcoin,BTC, XBT", + "BTN : Bhutanese Ngultrum,Bhutan Ngultrum", + "BWP : Botswana Pula,Botswana Pula", + "BYN : Belarusian Ruble,Belarus Ruble", + "BYR : Belarusian Ruble,Belarus Ruble", + "BZD : Belizean Dollar,Belize Dollar", + "CAD : Canadian Dollar,Canada Dollar", + "CDF : Congolese Franc,Congo/Kinshasa Franc", + "CHF : Swiss Franc,Switzerland Franc,Liechtenstein,Campione d'Italia,Büsingen am Hochrhein", + "CLF : Chilean Unit of Account", + "CLP : Chilean Peso,Chile Peso", + "CNY : Chinese Yuan Renminbi,China Yuan Renminbi", + "COP : Colombian Peso,Colombia Peso", + "CRC : Costa Rican Colon,Costa Rica Colon", + "CUC : Cuban Convertible Peso,Cuba Convertible Peso", + "CUP : Cuban Peso,Cuba Peso", + "CVE : Cape Verdean Escudo,Cape Verde Escudo", + "CZK : Czech Koruna,Czech Republic Koruna", + "DJF : Djiboutian Franc,Djibouti Franc", + "DKK : Danish Krone,Denmark Krone,Faroe Islands,Greenland", + "DOP : Dominican Peso,Dominican Republic Peso", + "DZD : Algerian Dinar,Algeria Dinar", + "EGP : Egyptian Pound,Egypt Pound,Gaza Strip", + "ERN : Eritrean Nakfa,Eritrea Nakfa", + "ETB : Ethiopian Birr,Ethiopia Birr,Eritrea", + "EUR : Euro,Euro Member Countries,Andorra,Austria,Azores,Baleares (Balearic Islands),Belgium,Canary Islands,Cyprus,Finland,France,French Guiana,French Southern Territories,Germany,Greece,Guadeloupe,Holland (Netherlands),Holy See (Vatican City),Ireland (Eire),Italy,Luxembourg,Madeira Islands,Malta,Monaco,Montenegro,Netherlands", + "FJD : Fijian Dollar,Fiji Dollar", + "FKP : Falkland Island Pound,Falkland Islands (Malvinas) Pound", + "GBP : British Pound,United Kingdom Pound,United Kingdom (UK),England,Northern Ireland,Scotland,Wales,Falkland Islands,Gibraltar,Guernsey,Isle of Man,Jersey,Saint Helena and Ascension,South Georgia and the South Sandwich Islands,Tristan da Cunha", + "GEL : Georgian Lari,Georgia Lari", + "GGP : Guernsey Pound,Guernsey Pound", + "GHS : Ghanaian Cedi,Ghana Cedi", + "GIP : Gibraltar Pound,Gibraltar Pound", + "GMD : Gambian Dalasi,Gambia Dalasi", + "GNF : Guinean Franc,Guinea Franc", + "GTQ : Guatemalan Quetzal,Guatemala Quetzal", + "GYD : Guyanese Dollar,Guyana Dollar", + "HKD : Hong Kong Dollar,Hong Kong Dollar", + "HNL : Honduran Lempira,Honduras Lempira", + "HRK : Croatian Kuna,Croatia Kuna", + "HTG : Haitian Gourde,Haiti Gourde", + "HUF : Hungarian Forint,Hungary Forint", + "IDR : Indonesian Rupiah,Indonesia Rupiah,East Timor", + "ILS : Israeli Shekel,Israel Shekel,Palestinian Territories", + "IMP : Isle of Man Pound,Isle of Man Pound", + "INR : Indian Rupee,India Rupee,Bhutan,Nepal", + "IQD : Iraqi Dinar,Iraq Dinar", + "IRR : Iranian Rial,Iran Rial", + "ISK : Icelandic Krona,Iceland Krona", + "JEP : Jersey Pound,Jersey Pound", + "JMD : Jamaican Dollar,Jamaica Dollar", + "JOD : Jordanian Dinar,Jordan Dinar", + "JPY : Japanese Yen,Japan Yen", + "KES : Kenyan Shilling,Kenya Shilling", + "KGS : Kyrgyzstani Som,Kyrgyzstan Som", + "KHR : Cambodian Riel,Cambodia Riel", + "KMF : Comorian Franc,Comorian Franc", + "KPW : North Korean Won,Korea (North) Won", + "KRW : South Korean Won,Korea (South) Won", + "KWD : Kuwaiti Dinar,Kuwait Dinar", + "KYD : Caymanian Dollar,Cayman Islands Dollar", + "KZT : Kazakhstani Tenge,Kazakhstan Tenge", + "LAK : Lao Kip,Laos Kip", + "LBP : Lebanese Pound,Lebanon Pound", + "LKR : Sri Lankan Rupee,Sri Lanka Rupee", + "LRD : Liberian Dollar,Liberia Dollar", + "LSL : Basotho Loti,Lesotho Loti", + "LTL : Lithuanian litas", + "LVL : Latvia Lats", + "LYD : Libyan Dinar,Libya Dinar", + "MAD : Moroccan Dirham,Morocco Dirham,Western Sahara", + "MDL : Moldovan Leu,Moldova Leu", + "MGA : Malagasy Ariary,Madagascar Ariary", + "MKD : Macedonian Denar,Macedonia Denar", + "MMK : Burmese Kyat,Myanmar (Burma) Kyat", + "MNT : Mongolian Tughrik,Mongolia Tughrik", + "MOP : Macau Pataca,Macau Pataca", + "MRU : Mauritanian Ouguiya,Mauritania Ouguiya", + "MUR : Mauritian Rupee,Mauritius Rupee", + "MVR : Maldivian Rufiyaa,Maldives (Maldive Islands) Rufiyaa", + "MWK : Malawian Kwacha,Malawi Kwacha", + "MXN : Mexican Peso,Mexico Peso", + "MYR : Malaysian Ringgit,Malaysia Ringgit", + "MZN : Mozambican Metical,Mozambique Metical", + "NAD : Namibian Dollar,Namibia Dollar", + "NGN : Nigerian Naira,Nigeria Naira", + "NIO : Nicaraguan Cordoba,Nicaragua Cordoba", + "NOK : Norwegian Krone,Norway Krone,Bouvet Island,Svalbard,Jan Mayen,Queen Maud Land,Peter I Island", + "NPR : Nepalese Rupee,Nepal Rupee,India (unofficially near India-Nepal border)", + "NZD : New Zealand Dollar,New Zealand Dollar,Cook Islands,Niue,Pitcairn Islands,Tokelau", + "OMR : Omani Rial,Oman Rial", + "PAB : Panamanian Balboa,Panama Balboa", + "PEN : Peruvian Sol,Peru Sol", + "PGK : Papua New Guinean Kina,Papua New Guinea Kina", + "PHP : Philippine Peso,Philippines Peso", + "PKR : Pakistani Rupee,Pakistan Rupee", + "PLN : Polish Zloty,Poland Zloty", + "PYG : Paraguayan Guarani,Paraguay Guarani", + "QAR : Qatari Riyal,Qatar Riyal", + "RON : Romanian Leu,Romania Leu", + "RSD : Serbian Dinar,Serbia Dinar", + "RUB : Russian Ruble,Russia Ruble,Tajikistan,Abkhazia,South Ossetia", + "RWF : Rwandan Franc,Rwanda Franc", + "SAR : Saudi Arabian Riyal,Saudi Arabia Riyal", + "SBD : Solomon Islander Dollar,Solomon Islands Dollar", + "SCR : Seychellois Rupee,Seychelles Rupee", + "SDG : Sudanese Pound,Sudan Pound", + "SEK : Swedish Krona,Sweden Krona", + "SGD : Singapore Dollar,Singapore Dollar", + "SHP : Saint Helenian Pound,Saint Helena Pound", + "SLL : Sierra Leonean Leone,Sierra Leone Leone", + "SOS : Somali Shilling,Somalia Shilling", + "SRD : Surinamese Dollar,Suriname Dollar", + "STN : Sao Tomean Dobra,São Tomé and Príncipe Dobra", + "SVC : Salvadoran Colon,El Salvador Colon", + "SYP : Syrian Pound,Syria Pound", + "SZL : Swazi Lilangeni,eSwatini Lilangeni", + "THB : Thai Baht,Thailand Baht", + "TJS : Tajikistani Somoni,Tajikistan Somoni", + "TMT : Turkmenistani Manat,Turkmenistan Manat", + "TND : Tunisian Dinar,Tunisia Dinar", + "TOP : Tongan Pa'anga,Tonga Pa'anga", + "TRY : Turkish Lira,Turkey Lira,North Cyprus", + "TTD : Trinidadian Dollar,Trinidad and Tobago Dollar,Trinidad,Tobago", + "TWD : Taiwan New Dollar,Taiwan New Dollar", + "TZS : Tanzanian Shilling,Tanzania Shilling", + "UAH : Ukrainian Hryvnia,Ukraine Hryvnia", + "UGX : Ugandan Shilling,Uganda Shilling", + "USD : US Dollar,United States Dollar,America,American Samoa,American Virgin Islands,British Indian Ocean Territory,British Virgin Islands,Ecuador,El Salvador,Guam,Haiti,Micronesia,Northern Mariana Islands,Palau,Panama,Puerto Rico,Turks and Caicos Islands,United States Minor Outlying Islands,Wake Island,East Timor", + "UYU : Uruguayan Peso,Uruguay Peso", + "UZS : Uzbekistani Som,Uzbekistan Som", + "VEF : Venezuelan Bolívar,Venezuela Bolívar", + "VND : Vietnamese Dong,Viet Nam Dong", + "VUV : Ni-Vanuatu Vatu,Vanuatu Vatu", + "WST : Samoan Tala,Samoa Tala", + "XAF : Central African CFA Franc BEAC,Communauté Financière Africaine (BEAC) CFA Franc BEAC,Cameroon,Central African Republic,Chad,Congo/Brazzaville,Equatorial Guinea,Gabon", + "XAG : Silver Ounce,Silver", + "XAU : Gold Ounce,Gold", + "XCD : East Caribbean Dollar,East Caribbean Dollar,Anguilla,Antigua and Barbuda,Dominica,Grenada,The Grenadines and Saint Vincent,Montserrat", + "XDR : IMF Special Drawing Rights,International Monetary Fund (IMF) Special Drawing Rights", + "XOF : CFA Franc,Communauté Financière Africaine (BCEAO) Franc,Benin,Burkina Faso,Ivory Coast,Guinea-Bissau,Mali,Niger,Senegal,Togo", + "XPF : CFP Franc,Comptoirs Français du Pacifique (CFP) Franc,French Polynesia,New Caledonia,Wallis and Futuna Islands", + "YER : Yemeni Rial,Yemen Rial", + "ZAR : South African Rand,South Africa Rand,Lesotho,Namibia", + "ZMK : Zambian Kwacha,Zambia Kwacha", + "ZMW : Zambian Kwacha,Zambia Kwacha", + "ZWL : Zimbabwean Dollar,Zimbabwe Dollar", +] + + +# The below function calculates the actual conversion +def function1(): + query = input( + "Please specify the amount of currency to convert, from currency, to currency (with space in between).\nPress SHOW to see list of currencies available. \nPress Q to quit. \n" + ) + if query == "Q": + sys.exit() + elif query == "SHOW": + pprint(currencies) + function1() + else: + qty, fromC, toC = query.split(" ") + fromC = fromC.upper() + toC = toC.upper() + qty = float(round(int(qty), 2)) + amount = round(qty * fx[toC] / fx[fromC], 2) + print(f"{qty} of currency {fromC} amounts to {amount} of currency {toC} today") + + +try: + function1() +except KeyError: + print("You seem to have inputted wrongly, retry!") + function1() \ No newline at end of file diff --git a/projects/Currency_converter/output.png b/projects/Currency_converter/output.png new file mode 100644 index 000000000..4983930f5 Binary files /dev/null and b/projects/Currency_converter/output.png differ diff --git a/projects/Decimal_to_binary_convertor_and_vice_versa/README.md b/projects/Decimal_to_binary_convertor_and_vice_versa/README.md new file mode 100644 index 000000000..1b88cd94a --- /dev/null +++ b/projects/Decimal_to_binary_convertor_and_vice_versa/README.md @@ -0,0 +1,19 @@ +# Script Title + +A small python program that converts binary and decimal + +### Prerequisites + +- Python 3 + +### How to run the script + +> python decimal_to_binary.py + +### Screenshot/GIF showing the sample use of the script + +![ ](https://github.com/Python-World/python-mini-projects/blob/master/projects/Decimal_to_binary_convertor_and_vice_versa/output.png) + +## *Author Name* + +[Alan Anaya](https://github.com/alananayaa/) diff --git a/projects/Decimal_to_binary_convertor_and_vice_versa/decimal_to_binary.py b/projects/Decimal_to_binary_convertor_and_vice_versa/decimal_to_binary.py new file mode 100644 index 000000000..7bb4094cf --- /dev/null +++ b/projects/Decimal_to_binary_convertor_and_vice_versa/decimal_to_binary.py @@ -0,0 +1,12 @@ +try: + menu = int(input("Choose an option: \n 1. Decimal to binary \n 2. Binary to decimal\n Option: ")) + if menu < 1 or menu > 2: + raise ValueError + if menu == 1: + dec = int(input("Input your decimal number:\nDecimal: ")) + print("Binary: {}".format(bin(dec)[2:])) + elif menu == 2: + binary = input("Input your binary number:\n Binary: ") + print("Decimal: {}".format(int(binary, 2))) +except ValueError: + print ("please choose a valid option") diff --git a/projects/Decimal_to_binary_convertor_and_vice_versa/output.png b/projects/Decimal_to_binary_convertor_and_vice_versa/output.png new file mode 100644 index 000000000..a91cd1090 Binary files /dev/null and b/projects/Decimal_to_binary_convertor_and_vice_versa/output.png differ diff --git a/projects/Diff_Util/README.md b/projects/Diff_Util/README.md new file mode 100644 index 000000000..028986d36 --- /dev/null +++ b/projects/Diff_Util/README.md @@ -0,0 +1,62 @@ +# Diff Utility + +This program is a minimal clone of the UNIX ``diff`` program. + +``diff.py`` takes two file names as command-line arguments and compares them for changes. + +## Prerequisites +* Rich: ``rich==10.11.0`` + +## How to run the script +**Running on Windows:** + +``` +python diff.py +``` + +**Running on Linux / macOS:** + +``` +./diff.py +``` + +## Usage Example + +Consider two files ``v1`` and ``v2``: + +**v1**: +``` +Bruce +Alfred +Jason +``` + +**v2**: +``` +Batman +Alfred +Red Hood +Joker +Ra's Al Ghul +``` + +On running ``./diff.py v1 v2``, you'll get the following output: +``` + +[-] Line 1: Bruce +[+] Line 1: Batman + +[-] Line 3: Jason +[+] Line 3: Red Hood + +[+] Line 4: Joker + +[+] Line 5: Ra's Al Ghul + +``` + +## Screenshot +![Python Diff Utility](diff_util.jpg) + +# KILLinefficiency +Github Link: [KILLinefficiency](https://www.github.com/KILLinefficiency) diff --git a/projects/Diff_Util/diff.py b/projects/Diff_Util/diff.py new file mode 100755 index 000000000..9706d433c --- /dev/null +++ b/projects/Diff_Util/diff.py @@ -0,0 +1,48 @@ +#!/usr/bin/env python3 + +# sys: for reading command-line arguments. +# rich: for coloring the text. +import sys +from rich import print + +# Print Usage message if enough arguments are not passed. +if len(sys.argv) < 3: + print("Usage:") + print("\tMust provide two file names as command-line arguments.") + print("\tdiff.py ") + exit(1) + +orignal = sys.argv[1] +changed = sys.argv[2] + +# Read the contents of the files in lists. +orignal_contents = open(orignal, "r").readlines() +changed_contents = open(changed, "r").readlines() + +color = "green" +symbol = f"[bold {color}][+]" + +print() + +# Determine which file has changed much. +if len(changed_contents) <= len(orignal_contents): + color = "red" + symbol = f"[bold {color}][-]" + smallest_sloc, largest_sloc = changed_contents, orignal_contents +else: + smallest_sloc, largest_sloc = orignal_contents, changed_contents + +# Go over all the lines to check the changes. +for line in range(0, len(smallest_sloc)): + if orignal_contents[line] == changed_contents[line]: + # Ignore if the lines are same. + continue + else: + # Display the changes on the respective lines of the files. + print(f"[bold red][-] Line {line + 1}:[/bold red] {orignal_contents[line]}", end = "") + print(f"[bold green][+] Line {line + 1}:[/bold green] {changed_contents[line]}") + + # Show the additions [+] or deletions [-] for the file that is the largest. + if line == len(smallest_sloc) - 1: + for new_line in range(line + 1, len(largest_sloc)): + print(f"{symbol} Line {new_line + 1}:[/bold {color}] {largest_sloc[new_line]}") diff --git a/projects/Diff_Util/diff_util.jpg b/projects/Diff_Util/diff_util.jpg new file mode 100644 index 000000000..ea3772d44 Binary files /dev/null and b/projects/Diff_Util/diff_util.jpg differ diff --git a/projects/Diff_Util/requirements.txt b/projects/Diff_Util/requirements.txt new file mode 100644 index 000000000..c6402e593 --- /dev/null +++ b/projects/Diff_Util/requirements.txt @@ -0,0 +1 @@ +rich==10.11.0 diff --git a/projects/Digital_clock/Digital Clock.PNG b/projects/Digital_clock/Digital Clock.PNG new file mode 100644 index 000000000..c438532d2 Binary files /dev/null and b/projects/Digital_clock/Digital Clock.PNG differ diff --git a/projects/Digital_clock/README.md b/projects/Digital_clock/README.md new file mode 100644 index 000000000..40e8e76b7 --- /dev/null +++ b/projects/Digital_clock/README.md @@ -0,0 +1,16 @@ +# Digital Clock using Python and Tkinter +This script create a digital clock as per the system's current time. + +## Library Used +* tkinter +* time + +### To install required external modules +* Run `pip install tkinter` + +### How to run the script +- Execute `python3 digital_clock.py` + +### Screenshot/GIF showing the sample use of the script + +![Digital Clock Output](https://github.com/Python-World/python-mini-projects/blob/master/projects/Digital_clock/Digital%20Clock.PNG) diff --git a/projects/Digital_clock/digital_clock.py b/projects/Digital_clock/digital_clock.py new file mode 100644 index 000000000..3d5053549 --- /dev/null +++ b/projects/Digital_clock/digital_clock.py @@ -0,0 +1,56 @@ +import tkinter as tk +from time import strftime + + +def light_theme(): + frame = tk.Frame(root, bg="white") + frame.place(relx=0.1, rely=0.1, relwidth=0.8, relheight=0.8) + lbl_1 = tk.Label(frame, font=('calibri', 40, 'bold'), + background='White', foreground='black') + lbl_1.pack(anchor="s") + + def time(): + string = strftime('%I:%M:%S %p') + lbl_1.config(text=string) + lbl_1.after(1000, time) + time() + + +def dark_theme(): + frame = tk.Frame(root, bg="#22478a") + frame.place(relx=0.1, rely=0.1, relwidth=0.8, relheight=0.8) + lbl_2 = tk.Label(frame, font=('calibri', 40, 'bold'), + background='#22478a', foreground='black') + lbl_2.pack(anchor="s") + + def time(): + string = strftime('%I:%M:%S %p') + lbl_2.config(text=string) + lbl_2.after(1000, time) + time() + + +root = tk.Tk() +root.title("Digital-Clock") +canvas = tk.Canvas(root, height=140, width=400) +canvas.pack() + +frame = tk.Frame(root, bg='#22478a') +frame.place(relx=0.1, rely=0.1, relwidth=0.8, relheight=0.8) +lbl = tk.Label(frame, font=('calibri', 40, 'bold'), + background='#22478a', foreground='black') +lbl.pack(anchor="s") + +def time(): + string = strftime('%I:%M:%S %p') + lbl.config(text=string) + lbl.after(1000, time) +time() + +menubar = tk.Menu(root) +theme_menu = tk.Menu(menubar, tearoff=0) +theme_menu.add_command(label="Light", command=light_theme) +theme_menu.add_command(label="Dark", command=dark_theme) +menubar.add_cascade(label="Theme", menu=theme_menu) +root.config(menu=menubar) +root.mainloop() diff --git a/projects/Dns_record/README.md b/projects/Dns_record/README.md new file mode 100644 index 000000000..c8af26b60 --- /dev/null +++ b/projects/Dns_record/README.md @@ -0,0 +1,21 @@ +## DNS Record + +This script takes the website name as input and returns its dns records. + +#Requirements to run this file: + +External library called dnspython has been used here and it can be installed easily by using the following command: + +pip install -r requirements.txt + +#How to use this script? + +1.Install the requirements. + +2. Type the following command + +python dns_record.py + +3.It will ask for a website: + +You can give any website name for example: google.com diff --git a/projects/Dns_record/dns_record.py b/projects/Dns_record/dns_record.py new file mode 100644 index 000000000..70da90b74 --- /dev/null +++ b/projects/Dns_record/dns_record.py @@ -0,0 +1,29 @@ +#Simple program to fetch dns record of a given website + +import dns.resolver + +#Dictionary to store the dns record of a website +dns_record = {} + +#User defined website +website = input("Enter the name of the website: ") + +#Fetching the 'A' record of the website and storing it in the dictionary +a_record = dns.resolver.resolve(website, 'A') +for ipval in a_record: + dns_record['A_Record_IP'] = ipval.to_text() + +#List to store the mx records of a website +mx_record_list = [] + +#Fetching the mx records and storing them in the dictionary +mx_record = dns.resolver.resolve(website,'MX') +for server in mx_record: + mx_record_list.append(server) +for i, element in enumerate(mx_record_list): + dns_record['MX_Record', i+1] = element + +#Displaying the record on the screen +for key,value in dns_record.items(): + print(f"{key} = {value}") + diff --git a/projects/Dns_record/requirements.txt b/projects/Dns_record/requirements.txt new file mode 100644 index 000000000..689e42ff8 --- /dev/null +++ b/projects/Dns_record/requirements.txt @@ -0,0 +1 @@ +dnspython==2.0.0 \ No newline at end of file diff --git a/projects/Dominant_color/README.md b/projects/Dominant_color/README.md new file mode 100644 index 000000000..8be685bc5 --- /dev/null +++ b/projects/Dominant_color/README.md @@ -0,0 +1,21 @@ +# Finding Dominant Color + +- This script will take a image and it will find dominant color in it . + +### Prerequisites +- You only need to have installed opencv which is used for image preprocesssing. +- Run the below script to install opencv +- $ pip install opencv-python + +### How to run the script +-Run below command +- python find-color.py +- Now Enter the path for image +- Copy Your image path and enter in the command + +### Screenshot showing the sample use of the script + +![Screenshot](shot.png) + +## *Author Name* +[Mitesh](https://github.com/Mitesh2499) diff --git a/projects/Dominant_color/find-color.py b/projects/Dominant_color/find-color.py new file mode 100644 index 000000000..2f2e2bbff --- /dev/null +++ b/projects/Dominant_color/find-color.py @@ -0,0 +1,39 @@ +import cv2 +import numpy as np + +path = input("Enter Path :- ") +try: + img = cv2.imread(path) + cv2.imshow("img", img) +except Exception: + print("Path not found") + exit() + + +array = np.array(img) +unique, counts = np.unique(array, return_counts=True) + +ocurrance = dict(zip(unique, counts)) + + +a1_sorted_keys = sorted(ocurrance, key=ocurrance.get, reverse=True) +print(a1_sorted_keys[:3]) + + +# Create a blank 300x300 black image +image = np.zeros((300, 300, 3), np.uint8) +# Fill image with red color(set each pixel to red) +image[:] = a1_sorted_keys[:3] + + +c = a1_sorted_keys[0] + +# Create a blank 300x300 black image +color = np.zeros((300, 300, 3), np.uint8) +# Fill image with red color(set each pixel to red) +color[:] = (c, c, c) + +print("Tone : " + str(a1_sorted_keys[:3])) +cv2.imshow("Tone", image) +print("color : " + str([c, c, c])) +cv2.imshow("color", color) diff --git a/projects/Dominant_color/requirements.txt b/projects/Dominant_color/requirements.txt new file mode 100644 index 000000000..eeb7194fa --- /dev/null +++ b/projects/Dominant_color/requirements.txt @@ -0,0 +1,2 @@ +opencv-python==4.3.0.36 +numpy==1.19.1 diff --git a/projects/Dominant_color/shot.png b/projects/Dominant_color/shot.png new file mode 100644 index 000000000..081384351 Binary files /dev/null and b/projects/Dominant_color/shot.png differ diff --git a/projects/download images from website/Readme.md b/projects/Download_images_from_website/Readme.md similarity index 97% rename from projects/download images from website/Readme.md rename to projects/Download_images_from_website/Readme.md index a20b5832c..f1ae826b8 100644 --- a/projects/download images from website/Readme.md +++ b/projects/Download_images_from_website/Readme.md @@ -1,6 +1,6 @@ -# Scrap images from URL - -1. Dowmload Chrome Drive From Chrome. -2. Run scrap-img.py file `py scrap-img.py` -3. `Enter Path : E:\webscraping\chromedriver_win32\chromedriver.exe`
    - `Enter URL : https://dribbble.com/` +# Scrap images from URL + +1. Dowmload Chrome Drive From Chrome. +2. Run scrap-img.py file `py scrap-img.py` +3. `Enter Path : E:\webscraping\chromedriver_win32\chromedriver.exe`
    + `Enter URL : https://dribbble.com/` diff --git a/projects/Download_images_from_website/requirements.txt b/projects/Download_images_from_website/requirements.txt new file mode 100644 index 000000000..600b6ebbe --- /dev/null +++ b/projects/Download_images_from_website/requirements.txt @@ -0,0 +1 @@ +selenium==3.141.0 diff --git a/projects/download images from website/scrap-img.py b/projects/Download_images_from_website/scrap-img.py similarity index 95% rename from projects/download images from website/scrap-img.py rename to projects/Download_images_from_website/scrap-img.py index 1ed80e807..88e0cdc31 100644 --- a/projects/download images from website/scrap-img.py +++ b/projects/Download_images_from_website/scrap-img.py @@ -1,59 +1,59 @@ -from selenium import webdriver -import requests as rq -import os -from bs4 import BeautifulSoup -import time - -# path= E:\web scraping\chromedriver_win32\chromedriver.exe -path = input("Enter Path : ") - -url = input("Enter URL : ") - -output = "output" - - -def get_url(path, url): - driver = webdriver.Chrome(executable_path=r"{}".format(path)) - driver.get(url) - print("loading.....") - res = driver.execute_script("return document.documentElement.outerHTML") - - return res - - -def get_img_links(res): - soup = BeautifulSoup(res, "lxml") - imglinks = soup.find_all("img", src=True) - return imglinks - - -def download_img(img_link, index): - try: - extensions = [".jpeg", ".jpg", ".png", ".gif"] - extension = ".jpg" - for exe in extensions: - if img_link.find(exe) > 0: - extension = exe - break - - img_data = rq.get(img_link).content - with open(output + "\\" + str(index + 1) + extension, "wb+") as f: - f.write(img_data) - - f.close() - except Exception: - pass - - -result = get_url(path, url) -time.sleep(60) -img_links = get_img_links(result) -if not os.path.isdir(output): - os.mkdir(output) - -for index, img_link in enumerate(img_links): - img_link = img_link["src"] - print("Downloading...") - if img_link: - download_img(img_link, index) -print("Download Complete!!") +from selenium import webdriver +import requests as rq +import os +from bs4 import BeautifulSoup +import time + +# path= E:\web scraping\chromedriver_win32\chromedriver.exe +path = input("Enter Path : ") + +url = input("Enter URL : ") + +output = "output" + + +def get_url(path, url): + driver = webdriver.Chrome(executable_path=r"{}".format(path)) + driver.get(url) + print("loading.....") + res = driver.execute_script("return document.documentElement.outerHTML") + + return res + + +def get_img_links(res): + soup = BeautifulSoup(res, "lxml") + imglinks = soup.find_all("img", src=True) + return imglinks + + +def download_img(img_link, index): + try: + extensions = [".jpeg", ".jpg", ".png", ".gif"] + extension = ".jpg" + for exe in extensions: + if img_link.find(exe) > 0: + extension = exe + break + + img_data = rq.get(img_link).content + with open(output + "\\" + str(index + 1) + extension, "wb+") as f: + f.write(img_data) + + f.close() + except Exception: + pass + + +result = get_url(path, url) +time.sleep(60) +img_links = get_img_links(result) +if not os.path.isdir(output): + os.mkdir(output) + +for index, img_link in enumerate(img_links): + img_link = img_link["src"] + print("Downloading...") + if img_link: + download_img(img_link, index) +print("Download Complete!!") diff --git a/projects/Drowsiness detection/alarm.wav b/projects/Drowsiness detection/alarm.wav new file mode 100644 index 000000000..f7bf38c95 Binary files /dev/null and b/projects/Drowsiness detection/alarm.wav differ diff --git a/projects/Drowsiness detection/drowsiness detection.py b/projects/Drowsiness detection/drowsiness detection.py new file mode 100644 index 000000000..36f1f2209 --- /dev/null +++ b/projects/Drowsiness detection/drowsiness detection.py @@ -0,0 +1,106 @@ +import cv2 +import os +from keras.models import load_model +import numpy as np +from pygame import mixer +import time + + +mixer.init() +sound = mixer.Sound('alarm.wav') + +face = cv2.CascadeClassifier('haar cascade files\haarcascade_frontalface_alt.xml') +leye = cv2.CascadeClassifier('haar cascade files\haarcascade_lefteye_2splits.xml') +reye = cv2.CascadeClassifier('haar cascade files\haarcascade_righteye_2splits.xml') + + + +lbl=['Close','Open'] + +model = load_model('models/cnncat2.h5') +path = os.getcwd() +cap = cv2.VideoCapture(0) +font = cv2.FONT_HERSHEY_COMPLEX_SMALL +count=0 +score=0 +thicc=2 +rpred=[99] +lpred=[99] + +while(True): + ret, frame = cap.read() + height,width = frame.shape[:2] + + gray = cv2.cvtColor(frame, cv2.COLOR_BGR2GRAY) + + faces = face.detectMultiScale(gray,minNeighbors=5,scaleFactor=1.1,minSize=(25,25)) + left_eye = leye.detectMultiScale(gray) + right_eye = reye.detectMultiScale(gray) + + cv2.rectangle(frame, (0,height-50) , (200,height) , (0,0,0) , thickness=cv2.FILLED ) + + for (x,y,w,h) in faces: + cv2.rectangle(frame, (x,y) , (x+w,y+h) , (100,100,100) , 1 ) + + for (x,y,w,h) in right_eye: + r_eye=frame[y:y+h,x:x+w] + count=count+1 + r_eye = cv2.cvtColor(r_eye,cv2.COLOR_BGR2GRAY) + r_eye = cv2.resize(r_eye,(24,24)) + r_eye= r_eye/255 + r_eye= r_eye.reshape(24,24,-1) + r_eye = np.expand_dims(r_eye,axis=0) + rpred = model.predict_classes(r_eye) + if(rpred[0]==1): + lbl='Open' + if(rpred[0]==0): + lbl='Closed' + break + + for (x,y,w,h) in left_eye: + l_eye=frame[y:y+h,x:x+w] + count=count+1 + l_eye = cv2.cvtColor(l_eye,cv2.COLOR_BGR2GRAY) + l_eye = cv2.resize(l_eye,(24,24)) + l_eye= l_eye/255 + l_eye=l_eye.reshape(24,24,-1) + l_eye = np.expand_dims(l_eye,axis=0) + lpred = model.predict_classes(l_eye) + if(lpred[0]==1): + lbl='Open' + if(lpred[0]==0): + lbl='Closed' + break + + if(rpred[0]==0 and lpred[0]==0): + score=score+1 + cv2.putText(frame,"Closed",(10,height-20), font, 1,(255,255,255),1,cv2.LINE_AA) + # if(rpred[0]==1 or lpred[0]==1): + else: + score=score-1 + cv2.putText(frame,"Open",(10,height-20), font, 1,(255,255,255),1,cv2.LINE_AA) + + + if(score<0): + score=0 + cv2.putText(frame,'Score:'+str(score),(100,height-20), font, 1,(255,255,255),1,cv2.LINE_AA) + if(score>15): + #person is feeling sleepy so we beep the alarm + cv2.imwrite(os.path.join(path,'image.jpg'),frame) + try: + sound.play() + + except: # isplaying = False + pass + if(thicc<16): + thicc= thicc+2 + else: + thicc=thicc-2 + if(thicc<2): + thicc=2 + cv2.rectangle(frame,(0,0),(width,height),(0,0,255),thicc) + cv2.imshow('frame',frame) + if cv2.waitKey(1) & 0xFF == ord('q'): + break +cap.release() +cv2.destroyAllWindows() diff --git a/projects/Drowsiness detection/haar cascade files/haarcascade_frontalface_alt.xml b/projects/Drowsiness detection/haar cascade files/haarcascade_frontalface_alt.xml new file mode 100644 index 000000000..ade4b2121 --- /dev/null +++ b/projects/Drowsiness detection/haar cascade files/haarcascade_frontalface_alt.xml @@ -0,0 +1,24350 @@ + + + +BOOST + HAAR + 20 + 20 + + 213 + + 0 + 22 + + <_> + 3 + 8.2268941402435303e-01 + + <_> + + 0 -1 0 4.0141958743333817e-03 + + 3.3794190734624863e-02 8.3781069517135620e-01 + <_> + + 0 -1 1 1.5151339583098888e-02 + + 1.5141320228576660e-01 7.4888122081756592e-01 + <_> + + 0 -1 2 4.2109931819140911e-03 + + 9.0049281716346741e-02 6.3748198747634888e-01 + <_> + 16 + 6.9566087722778320e+00 + + <_> + + 0 -1 3 1.6227109590545297e-03 + + 6.9308586418628693e-02 7.1109461784362793e-01 + <_> + + 0 -1 4 2.2906649392098188e-03 + + 1.7958030104637146e-01 6.6686922311782837e-01 + <_> + + 0 -1 5 5.0025708042085171e-03 + + 1.6936729848384857e-01 6.5540069341659546e-01 + <_> + + 0 -1 6 7.9659894108772278e-03 + + 5.8663320541381836e-01 9.1414518654346466e-02 + <_> + + 0 -1 7 -3.5227010957896709e-03 + + 1.4131669700145721e-01 6.0318958759307861e-01 + <_> + + 0 -1 8 3.6667689681053162e-02 + + 3.6756721138954163e-01 7.9203182458877563e-01 + <_> + + 0 -1 9 9.3361474573612213e-03 + + 6.1613857746124268e-01 2.0885099470615387e-01 + <_> + + 0 -1 10 8.6961314082145691e-03 + + 2.8362309932708740e-01 6.3602739572525024e-01 + <_> + + 0 -1 11 1.1488880263641477e-03 + + 2.2235809266567230e-01 5.8007007837295532e-01 + <_> + + 0 -1 12 -2.1484689787030220e-03 + + 2.4064640700817108e-01 5.7870548963546753e-01 + <_> + + 0 -1 13 2.1219060290604830e-03 + + 5.5596548318862915e-01 1.3622370362281799e-01 + <_> + + 0 -1 14 -9.3949146568775177e-02 + + 8.5027372837066650e-01 4.7177401185035706e-01 + <_> + + 0 -1 15 1.3777789426967502e-03 + + 5.9936738014221191e-01 2.8345298767089844e-01 + <_> + + 0 -1 16 7.3063157498836517e-02 + + 4.3418860435485840e-01 7.0600342750549316e-01 + <_> + + 0 -1 17 3.6767389974556863e-04 + + 3.0278879404067993e-01 6.0515749454498291e-01 + <_> + + 0 -1 18 -6.0479710809886456e-03 + + 1.7984339594841003e-01 5.6752568483352661e-01 + <_> + 21 + 9.4985427856445312e+00 + + <_> + + 0 -1 19 -1.6510689631104469e-02 + + 6.6442251205444336e-01 1.4248579740524292e-01 + <_> + + 0 -1 20 2.7052499353885651e-03 + + 6.3253521919250488e-01 1.2884770333766937e-01 + <_> + + 0 -1 21 2.8069869149476290e-03 + + 1.2402880191802979e-01 6.1931931972503662e-01 + <_> + + 0 -1 22 -1.5402400167658925e-03 + + 1.4321430027484894e-01 5.6700158119201660e-01 + <_> + + 0 -1 23 -5.6386279175058007e-04 + + 1.6574330627918243e-01 5.9052079916000366e-01 + <_> + + 0 -1 24 1.9253729842603207e-03 + + 2.6955071091651917e-01 5.7388240098953247e-01 + <_> + + 0 -1 25 -5.0214841030538082e-03 + + 1.8935389816761017e-01 5.7827740907669067e-01 + <_> + + 0 -1 26 2.6365420781075954e-03 + + 2.3093290627002716e-01 5.6954258680343628e-01 + <_> + + 0 -1 27 -1.5127769438549876e-03 + + 2.7596020698547363e-01 5.9566420316696167e-01 + <_> + + 0 -1 28 -1.0157439857721329e-02 + + 1.7325380444526672e-01 5.5220472812652588e-01 + <_> + + 0 -1 29 -1.1953660286962986e-02 + + 1.3394099473953247e-01 5.5590140819549561e-01 + <_> + + 0 -1 30 4.8859491944313049e-03 + + 3.6287039518356323e-01 6.1888492107391357e-01 + <_> + + 0 -1 31 -8.0132916569709778e-02 + + 9.1211050748825073e-02 5.4759448766708374e-01 + <_> + + 0 -1 32 1.0643280111253262e-03 + + 3.7151429057121277e-01 5.7113999128341675e-01 + <_> + + 0 -1 33 -1.3419450260698795e-03 + + 5.9533137083053589e-01 3.3180978894233704e-01 + <_> + + 0 -1 34 -5.4601140320301056e-02 + + 1.8440659344196320e-01 5.6028461456298828e-01 + <_> + + 0 -1 35 2.9071690514683723e-03 + + 3.5942441225051880e-01 6.1317151784896851e-01 + <_> + + 0 -1 36 7.4718717951327562e-04 + + 5.9943532943725586e-01 3.4595629572868347e-01 + <_> + + 0 -1 37 4.3013808317482471e-03 + + 4.1726520657539368e-01 6.9908452033996582e-01 + <_> + + 0 -1 38 4.5017572119832039e-03 + + 4.5097151398658752e-01 7.8014570474624634e-01 + <_> + + 0 -1 39 2.4138500913977623e-02 + + 5.4382127523422241e-01 1.3198269903659821e-01 + <_> + 39 + 1.8412969589233398e+01 + + <_> + + 0 -1 40 1.9212230108678341e-03 + + 1.4152669906616211e-01 6.1998707056045532e-01 + <_> + + 0 -1 41 -1.2748669541906565e-04 + + 6.1910742521286011e-01 1.8849289417266846e-01 + <_> + + 0 -1 42 5.1409931620582938e-04 + + 1.4873969554901123e-01 5.8579277992248535e-01 + <_> + + 0 -1 43 4.1878609918057919e-03 + + 2.7469098567962646e-01 6.3592398166656494e-01 + <_> + + 0 -1 44 5.1015717908740044e-03 + + 5.8708512783050537e-01 2.1756289899349213e-01 + <_> + + 0 -1 45 -2.1448440384119749e-03 + + 5.8809447288513184e-01 2.9795908927917480e-01 + <_> + + 0 -1 46 -2.8977119363844395e-03 + + 2.3733270168304443e-01 5.8766472339630127e-01 + <_> + + 0 -1 47 -2.1610679104924202e-02 + + 1.2206549942493439e-01 5.1942020654678345e-01 + <_> + + 0 -1 48 -4.6299318782985210e-03 + + 2.6312309503555298e-01 5.8174091577529907e-01 + <_> + + 0 -1 49 5.9393711853772402e-04 + + 3.6386200785636902e-01 5.6985449790954590e-01 + <_> + + 0 -1 50 5.3878661245107651e-02 + + 4.3035310506820679e-01 7.5593662261962891e-01 + <_> + + 0 -1 51 1.8887349870055914e-03 + + 2.1226030588150024e-01 5.6134271621704102e-01 + <_> + + 0 -1 52 -2.3635339457541704e-03 + + 5.6318491697311401e-01 2.6427671313285828e-01 + <_> + + 0 -1 53 2.4017799645662308e-02 + + 5.7971078157424927e-01 2.7517059445381165e-01 + <_> + + 0 -1 54 2.0543030404951423e-04 + + 2.7052420377731323e-01 5.7525688409805298e-01 + <_> + + 0 -1 55 8.4790197433903813e-04 + + 5.4356247186660767e-01 2.3348769545555115e-01 + <_> + + 0 -1 56 1.4091329649090767e-03 + + 5.3194248676300049e-01 2.0631550252437592e-01 + <_> + + 0 -1 57 1.4642629539594054e-03 + + 5.4189807176589966e-01 3.0688610672950745e-01 + <_> + + 0 -1 58 1.6352549428120255e-03 + + 3.6953729391098022e-01 6.1128681898117065e-01 + <_> + + 0 -1 59 8.3172752056270838e-04 + + 3.5650369524955750e-01 6.0252362489700317e-01 + <_> + + 0 -1 60 -2.0998890977352858e-03 + + 1.9139820337295532e-01 5.3628271818161011e-01 + <_> + + 0 -1 61 -7.4213981861248612e-04 + + 3.8355550169944763e-01 5.5293101072311401e-01 + <_> + + 0 -1 62 3.2655049581080675e-03 + + 4.3128961324691772e-01 7.1018958091735840e-01 + <_> + + 0 -1 63 8.9134991867467761e-04 + + 3.9848309755325317e-01 6.3919639587402344e-01 + <_> + + 0 -1 64 -1.5284179709851742e-02 + + 2.3667329549789429e-01 5.4337137937545776e-01 + <_> + + 0 -1 65 4.8381411470472813e-03 + + 5.8175009489059448e-01 3.2391890883445740e-01 + <_> + + 0 -1 66 -9.1093179071322083e-04 + + 5.5405938625335693e-01 2.9118689894676208e-01 + <_> + + 0 -1 67 -6.1275060288608074e-03 + + 1.7752550542354584e-01 5.1966291666030884e-01 + <_> + + 0 -1 68 -4.4576259097084403e-04 + + 3.0241701006889343e-01 5.5335938930511475e-01 + <_> + + 0 -1 69 2.2646540775895119e-02 + + 4.4149309396743774e-01 6.9753772020339966e-01 + <_> + + 0 -1 70 -1.8804960418492556e-03 + + 2.7913948893547058e-01 5.4979521036148071e-01 + <_> + + 0 -1 71 7.0889107882976532e-03 + + 5.2631992101669312e-01 2.3855470120906830e-01 + <_> + + 0 -1 72 1.7318050377070904e-03 + + 4.3193790316581726e-01 6.9836008548736572e-01 + <_> + + 0 -1 73 -6.8482700735330582e-03 + + 3.0820429325103760e-01 5.3909200429916382e-01 + <_> + + 0 -1 74 -1.5062530110299122e-05 + + 5.5219221115112305e-01 3.1203660368919373e-01 + <_> + + 0 -1 75 2.9475569725036621e-02 + + 5.4013228416442871e-01 1.7706030607223511e-01 + <_> + + 0 -1 76 8.1387329846620560e-03 + + 5.1786178350448608e-01 1.2110190093517303e-01 + <_> + + 0 -1 77 2.0942950621247292e-02 + + 5.2902942895889282e-01 3.3112218976020813e-01 + <_> + + 0 -1 78 -9.5665529370307922e-03 + + 7.4719941616058350e-01 4.4519689679145813e-01 + <_> + 33 + 1.5324139595031738e+01 + + <_> + + 0 -1 79 -2.8206960996612906e-04 + + 2.0640860497951508e-01 6.0767322778701782e-01 + <_> + + 0 -1 80 1.6790600493550301e-03 + + 5.8519971370697021e-01 1.2553839385509491e-01 + <_> + + 0 -1 81 6.9827912375330925e-04 + + 9.4018429517745972e-02 5.7289612293243408e-01 + <_> + + 0 -1 82 7.8959012171253562e-04 + + 1.7819879949092865e-01 5.6943088769912720e-01 + <_> + + 0 -1 83 -2.8560499195009470e-03 + + 1.6383990645408630e-01 5.7886648178100586e-01 + <_> + + 0 -1 84 -3.8122469559311867e-03 + + 2.0854400098323822e-01 5.5085647106170654e-01 + <_> + + 0 -1 85 1.5896620461717248e-03 + + 5.7027608156204224e-01 1.8572150170803070e-01 + <_> + + 0 -1 86 1.0078339837491512e-02 + + 5.1169431209564209e-01 2.1897700428962708e-01 + <_> + + 0 -1 87 -6.3526302576065063e-02 + + 7.1313798427581787e-01 4.0438130497932434e-01 + <_> + + 0 -1 88 -9.1031491756439209e-03 + + 2.5671818852424622e-01 5.4639732837677002e-01 + <_> + + 0 -1 89 -2.4035000242292881e-03 + + 1.7006659507751465e-01 5.5909740924835205e-01 + <_> + + 0 -1 90 1.5226360410451889e-03 + + 5.4105567932128906e-01 2.6190540194511414e-01 + <_> + + 0 -1 91 1.7997439950704575e-02 + + 3.7324368953704834e-01 6.5352207422256470e-01 + <_> + + 0 -1 92 -6.4538191072642803e-03 + + 2.6264819502830505e-01 5.5374461412429810e-01 + <_> + + 0 -1 93 -1.1880760081112385e-02 + + 2.0037539303302765e-01 5.5447459220886230e-01 + <_> + + 0 -1 94 1.2713660253211856e-03 + + 5.5919027328491211e-01 3.0319759249687195e-01 + <_> + + 0 -1 95 1.1376109905540943e-03 + + 2.7304071187973022e-01 5.6465089321136475e-01 + <_> + + 0 -1 96 -4.2651998810470104e-03 + + 1.4059090614318848e-01 5.4618209600448608e-01 + <_> + + 0 -1 97 -2.9602861031889915e-03 + + 1.7950350046157837e-01 5.4592901468276978e-01 + <_> + + 0 -1 98 -8.8448226451873779e-03 + + 5.7367831468582153e-01 2.8092199563980103e-01 + <_> + + 0 -1 99 -6.6430689767003059e-03 + + 2.3706759512424469e-01 5.5038261413574219e-01 + <_> + + 0 -1 100 3.9997808635234833e-03 + + 5.6081998348236084e-01 3.3042821288108826e-01 + <_> + + 0 -1 101 -4.1221720166504383e-03 + + 1.6401059925556183e-01 5.3789931535720825e-01 + <_> + + 0 -1 102 1.5624909661710262e-02 + + 5.2276492118835449e-01 2.2886039316654205e-01 + <_> + + 0 -1 103 -1.0356419719755650e-02 + + 7.0161938667297363e-01 4.2529278993606567e-01 + <_> + + 0 -1 104 -8.7960809469223022e-03 + + 2.7673470973968506e-01 5.3558301925659180e-01 + <_> + + 0 -1 105 1.6226939857006073e-01 + + 4.3422400951385498e-01 7.4425792694091797e-01 + <_> + + 0 -1 106 4.5542530715465546e-03 + + 5.7264858484268188e-01 2.5821250677108765e-01 + <_> + + 0 -1 107 -2.1309209987521172e-03 + + 2.1068480610847473e-01 5.3610187768936157e-01 + <_> + + 0 -1 108 -1.3208420015871525e-02 + + 7.5937908887863159e-01 4.5524680614471436e-01 + <_> + + 0 -1 109 -6.5996676683425903e-02 + + 1.2524759769439697e-01 5.3440397977828979e-01 + <_> + + 0 -1 110 7.9142656177282333e-03 + + 3.3153840899467468e-01 5.6010431051254272e-01 + <_> + + 0 -1 111 2.0894279703497887e-02 + + 5.5060499906539917e-01 2.7688381075859070e-01 + <_> + 44 + 2.1010639190673828e+01 + + <_> + + 0 -1 112 1.1961159761995077e-03 + + 1.7626909911632538e-01 6.1562412977218628e-01 + <_> + + 0 -1 113 -1.8679830245673656e-03 + + 6.1181068420410156e-01 1.8323999643325806e-01 + <_> + + 0 -1 114 -1.9579799845814705e-04 + + 9.9044263362884521e-02 5.7238161563873291e-01 + <_> + + 0 -1 115 -8.0255657667294145e-04 + + 5.5798798799514771e-01 2.3772829771041870e-01 + <_> + + 0 -1 116 -2.4510810617357492e-03 + + 2.2314579784870148e-01 5.8589351177215576e-01 + <_> + + 0 -1 117 5.0361850298941135e-04 + + 2.6539939641952515e-01 5.7941037416458130e-01 + <_> + + 0 -1 118 4.0293349884450436e-03 + + 5.8038270473480225e-01 2.4848650395870209e-01 + <_> + + 0 -1 119 -1.4451709575951099e-02 + + 1.8303519487380981e-01 5.4842048883438110e-01 + <_> + + 0 -1 120 2.0380979403853416e-03 + + 3.3635589480400085e-01 6.0510927438735962e-01 + <_> + + 0 -1 121 -1.6155190533027053e-03 + + 2.2866420447826385e-01 5.4412460327148438e-01 + <_> + + 0 -1 122 3.3458340913057327e-03 + + 5.6259131431579590e-01 2.3923380672931671e-01 + <_> + + 0 -1 123 1.6379579901695251e-03 + + 3.9069938659667969e-01 5.9646219015121460e-01 + <_> + + 0 -1 124 3.0251210555434227e-02 + + 5.2484822273254395e-01 1.5757469832897186e-01 + <_> + + 0 -1 125 3.7251990288496017e-02 + + 4.1943109035491943e-01 6.7484188079833984e-01 + <_> + + 0 -1 126 -2.5109790265560150e-02 + + 1.8825499713420868e-01 5.4734510183334351e-01 + <_> + + 0 -1 127 -5.3099058568477631e-03 + + 1.3399730622768402e-01 5.2271109819412231e-01 + <_> + + 0 -1 128 1.2086479691788554e-03 + + 3.7620881199836731e-01 6.1096358299255371e-01 + <_> + + 0 -1 129 -2.1907679736614227e-02 + + 2.6631429791450500e-01 5.4040068387985229e-01 + <_> + + 0 -1 130 5.4116579703986645e-03 + + 5.3635787963867188e-01 2.2322730720043182e-01 + <_> + + 0 -1 131 6.9946326315402985e-02 + + 5.3582328557968140e-01 2.4536980688571930e-01 + <_> + + 0 -1 132 3.4520021290518343e-04 + + 2.4096719920635223e-01 5.3769302368164062e-01 + <_> + + 0 -1 133 1.2627709656953812e-03 + + 5.4258567094802856e-01 3.1556931138038635e-01 + <_> + + 0 -1 134 2.2719509899616241e-02 + + 4.1584059596061707e-01 6.5978652238845825e-01 + <_> + + 0 -1 135 -1.8111000536009669e-03 + + 2.8112530708312988e-01 5.5052447319030762e-01 + <_> + + 0 -1 136 3.3469670452177525e-03 + + 5.2600282430648804e-01 1.8914650380611420e-01 + <_> + + 0 -1 137 4.0791751234792173e-04 + + 5.6735092401504517e-01 3.3442100882530212e-01 + <_> + + 0 -1 138 1.2734799645841122e-02 + + 5.3435921669006348e-01 2.3956120014190674e-01 + <_> + + 0 -1 139 -7.3119727894663811e-03 + + 6.0108900070190430e-01 4.0222078561782837e-01 + <_> + + 0 -1 140 -5.6948751211166382e-02 + + 8.1991511583328247e-01 4.5431908965110779e-01 + <_> + + 0 -1 141 -5.0116591155529022e-03 + + 2.2002810239791870e-01 5.3577107191085815e-01 + <_> + + 0 -1 142 6.0334368608891964e-03 + + 4.4130811095237732e-01 7.1817511320114136e-01 + <_> + + 0 -1 143 3.9437441155314445e-03 + + 5.4788607358932495e-01 2.7917331457138062e-01 + <_> + + 0 -1 144 -3.6591119132936001e-03 + + 6.3578677177429199e-01 3.9897239208221436e-01 + <_> + + 0 -1 145 -3.8456181064248085e-03 + + 3.4936860203742981e-01 5.3006649017333984e-01 + <_> + + 0 -1 146 -7.1926261298358440e-03 + + 1.1196149885654449e-01 5.2296727895736694e-01 + <_> + + 0 -1 147 -5.2798941731452942e-02 + + 2.3871029913425446e-01 5.4534512758255005e-01 + <_> + + 0 -1 148 -7.9537667334079742e-03 + + 7.5869178771972656e-01 4.4393768906593323e-01 + <_> + + 0 -1 149 -2.7344180271029472e-03 + + 2.5654768943786621e-01 5.4893219470977783e-01 + <_> + + 0 -1 150 -1.8507939530536532e-03 + + 6.7343479394912720e-01 4.2524749040603638e-01 + <_> + + 0 -1 151 1.5918919816613197e-02 + + 5.4883527755737305e-01 2.2926619648933411e-01 + <_> + + 0 -1 152 -1.2687679845839739e-03 + + 6.1043310165405273e-01 4.0223899483680725e-01 + <_> + + 0 -1 153 6.2883910723030567e-03 + + 5.3108531236648560e-01 1.5361930429935455e-01 + <_> + + 0 -1 154 -6.2259892001748085e-03 + + 1.7291119694709778e-01 5.2416062355041504e-01 + <_> + + 0 -1 155 -1.2132599949836731e-02 + + 6.5977597236633301e-01 4.3251821398735046e-01 + <_> + 50 + 2.3918790817260742e+01 + + <_> + + 0 -1 156 -3.9184908382594585e-03 + + 6.1034351587295532e-01 1.4693309366703033e-01 + <_> + + 0 -1 157 1.5971299726516008e-03 + + 2.6323631405830383e-01 5.8964669704437256e-01 + <_> + + 0 -1 158 1.7780110239982605e-02 + + 5.8728742599487305e-01 1.7603619396686554e-01 + <_> + + 0 -1 159 6.5334769897162914e-04 + + 1.5678019821643829e-01 5.5960661172866821e-01 + <_> + + 0 -1 160 -2.8353091329336166e-04 + + 1.9131539762020111e-01 5.7320362329483032e-01 + <_> + + 0 -1 161 1.6104689566418529e-03 + + 2.9149138927459717e-01 5.6230807304382324e-01 + <_> + + 0 -1 162 -9.7750619053840637e-02 + + 1.9434769451618195e-01 5.6482332944869995e-01 + <_> + + 0 -1 163 5.5182358482852578e-04 + + 3.1346169114112854e-01 5.5046397447586060e-01 + <_> + + 0 -1 164 -1.2858220376074314e-02 + + 2.5364819169044495e-01 5.7601428031921387e-01 + <_> + + 0 -1 165 4.1530239395797253e-03 + + 5.7677221298217773e-01 3.6597740650177002e-01 + <_> + + 0 -1 166 1.7092459602281451e-03 + + 2.8431910276412964e-01 5.9189391136169434e-01 + <_> + + 0 -1 167 7.5217359699308872e-03 + + 4.0524271130561829e-01 6.1831092834472656e-01 + <_> + + 0 -1 168 2.2479810286313295e-03 + + 5.7837551832199097e-01 3.1354010105133057e-01 + <_> + + 0 -1 169 5.2006211131811142e-02 + + 5.5413120985031128e-01 1.9166369736194611e-01 + <_> + + 0 -1 170 1.2085529975593090e-02 + + 4.0326559543609619e-01 6.6445910930633545e-01 + <_> + + 0 -1 171 1.4687820112158079e-05 + + 3.5359779000282288e-01 5.7093828916549683e-01 + <_> + + 0 -1 172 7.1395188570022583e-06 + + 3.0374449491500854e-01 5.6102699041366577e-01 + <_> + + 0 -1 173 -4.6001640148460865e-03 + + 7.1810871362686157e-01 4.5803260803222656e-01 + <_> + + 0 -1 174 2.0058949012309313e-03 + + 5.6219518184661865e-01 2.9536840319633484e-01 + <_> + + 0 -1 175 4.5050270855426788e-03 + + 4.6153879165649414e-01 7.6190179586410522e-01 + <_> + + 0 -1 176 1.1746830306947231e-02 + + 5.3438371419906616e-01 1.7725290358066559e-01 + <_> + + 0 -1 177 -5.8316338807344437e-02 + + 1.6862459480762482e-01 5.3407722711563110e-01 + <_> + + 0 -1 178 2.3629379575140774e-04 + + 3.7920561432838440e-01 6.0268038511276245e-01 + <_> + + 0 -1 179 -7.8156180679798126e-03 + + 1.5128670632839203e-01 5.3243237733840942e-01 + <_> + + 0 -1 180 -1.0876160115003586e-02 + + 2.0818220078945160e-01 5.3199452161788940e-01 + <_> + + 0 -1 181 -2.7745519764721394e-03 + + 4.0982469916343689e-01 5.2103281021118164e-01 + <_> + + 0 -1 182 -7.8276381827890873e-04 + + 5.6932741403579712e-01 3.4788420796394348e-01 + <_> + + 0 -1 183 1.3870409689843655e-02 + + 5.3267508745193481e-01 2.2576980292797089e-01 + <_> + + 0 -1 184 -2.3674910888075829e-02 + + 1.5513050556182861e-01 5.2007079124450684e-01 + <_> + + 0 -1 185 -1.4879409718560055e-05 + + 5.5005669593811035e-01 3.8201761245727539e-01 + <_> + + 0 -1 186 3.6190641112625599e-03 + + 4.2386838793754578e-01 6.6397482156753540e-01 + <_> + + 0 -1 187 -1.9817110151052475e-02 + + 2.1500380337238312e-01 5.3823578357696533e-01 + <_> + + 0 -1 188 -3.8154039066284895e-03 + + 6.6757112741470337e-01 4.2152971029281616e-01 + <_> + + 0 -1 189 -4.9775829538702965e-03 + + 2.2672890126705170e-01 5.3863281011581421e-01 + <_> + + 0 -1 190 2.2441020701080561e-03 + + 4.3086910247802734e-01 6.8557357788085938e-01 + <_> + + 0 -1 191 1.2282459996640682e-02 + + 5.8366149663925171e-01 3.4674790501594543e-01 + <_> + + 0 -1 192 -2.8548699337989092e-03 + + 7.0169448852539062e-01 4.3114539980888367e-01 + <_> + + 0 -1 193 -3.7875669077038765e-03 + + 2.8953450918197632e-01 5.2249461412429810e-01 + <_> + + 0 -1 194 -1.2201230274513364e-03 + + 2.9755708575248718e-01 5.4816448688507080e-01 + <_> + + 0 -1 195 1.0160599835216999e-02 + + 4.8888179659843445e-01 8.1826978921890259e-01 + <_> + + 0 -1 196 -1.6174569725990295e-02 + + 1.4814929664134979e-01 5.2399927377700806e-01 + <_> + + 0 -1 197 1.9292460754513741e-02 + + 4.7863098978996277e-01 7.3781907558441162e-01 + <_> + + 0 -1 198 -3.2479539513587952e-03 + + 7.3742228746414185e-01 4.4706439971923828e-01 + <_> + + 0 -1 199 -9.3803480267524719e-03 + + 3.4891548752784729e-01 5.5379962921142578e-01 + <_> + + 0 -1 200 -1.2606129981577396e-02 + + 2.3796869814395905e-01 5.3154432773590088e-01 + <_> + + 0 -1 201 -2.5621930137276649e-02 + + 1.9646880030632019e-01 5.1387697458267212e-01 + <_> + + 0 -1 202 -7.5741496402770281e-05 + + 5.5905228853225708e-01 3.3658531308174133e-01 + <_> + + 0 -1 203 -8.9210882782936096e-02 + + 6.3404656946659088e-02 5.1626348495483398e-01 + <_> + + 0 -1 204 -2.7670480776578188e-03 + + 7.3234677314758301e-01 4.4907060265541077e-01 + <_> + + 0 -1 205 2.7152578695677221e-04 + + 4.1148349642753601e-01 5.9855180978775024e-01 + <_> + 51 + 2.4527879714965820e+01 + + <_> + + 0 -1 206 1.4786219689995050e-03 + + 2.6635450124740601e-01 6.6433167457580566e-01 + <_> + + 0 -1 207 -1.8741659587249160e-03 + + 6.1438488960266113e-01 2.5185129046440125e-01 + <_> + + 0 -1 208 -1.7151009524241090e-03 + + 5.7663410902023315e-01 2.3974630236625671e-01 + <_> + + 0 -1 209 -1.8939269939437509e-03 + + 5.6820458173751831e-01 2.5291448831558228e-01 + <_> + + 0 -1 210 -5.3006052039563656e-03 + + 1.6406759619712830e-01 5.5560797452926636e-01 + <_> + + 0 -1 211 -4.6662531793117523e-02 + + 6.1231541633605957e-01 4.7628301382064819e-01 + <_> + + 0 -1 212 -7.9431332414969802e-04 + + 5.7078588008880615e-01 2.8394040465354919e-01 + <_> + + 0 -1 213 1.4891670085489750e-02 + + 4.0896728634834290e-01 6.0063672065734863e-01 + <_> + + 0 -1 214 -1.2046529445797205e-03 + + 5.7124507427215576e-01 2.7052891254425049e-01 + <_> + + 0 -1 215 6.0619381256401539e-03 + + 5.2625042200088501e-01 3.2622259855270386e-01 + <_> + + 0 -1 216 -2.5286648888140917e-03 + + 6.8538308143615723e-01 4.1992568969726562e-01 + <_> + + 0 -1 217 -5.9010218828916550e-03 + + 3.2662820816040039e-01 5.4348129034042358e-01 + <_> + + 0 -1 218 5.6702760048210621e-03 + + 5.4684108495712280e-01 2.3190039396286011e-01 + <_> + + 0 -1 219 -3.0304100364446640e-03 + + 5.5706679821014404e-01 2.7082380652427673e-01 + <_> + + 0 -1 220 2.9803649522364140e-03 + + 3.7005689740180969e-01 5.8906257152557373e-01 + <_> + + 0 -1 221 -7.5840510427951813e-02 + + 2.1400700509548187e-01 5.4199481010437012e-01 + <_> + + 0 -1 222 1.9262539222836494e-02 + + 5.5267721414566040e-01 2.7265900373458862e-01 + <_> + + 0 -1 223 1.8888259364757687e-04 + + 3.9580118656158447e-01 6.0172098875045776e-01 + <_> + + 0 -1 224 2.9369549825787544e-02 + + 5.2413737773895264e-01 1.4357580244541168e-01 + <_> + + 0 -1 225 1.0417619487270713e-03 + + 3.3854091167449951e-01 5.9299832582473755e-01 + <_> + + 0 -1 226 2.6125640142709017e-03 + + 5.4853779077529907e-01 3.0215978622436523e-01 + <_> + + 0 -1 227 9.6977467183023691e-04 + + 3.3752760291099548e-01 5.5320328474044800e-01 + <_> + + 0 -1 228 5.9512659208849072e-04 + + 5.6317430734634399e-01 3.3593991398811340e-01 + <_> + + 0 -1 229 -1.0156559944152832e-01 + + 6.3735038042068481e-02 5.2304250001907349e-01 + <_> + + 0 -1 230 3.6156699061393738e-02 + + 5.1369631290435791e-01 1.0295289754867554e-01 + <_> + + 0 -1 231 3.4624140243977308e-03 + + 3.8793200254440308e-01 5.5582892894744873e-01 + <_> + + 0 -1 232 1.9554980099201202e-02 + + 5.2500867843627930e-01 1.8758599460124969e-01 + <_> + + 0 -1 233 -2.3121440317481756e-03 + + 6.6720288991928101e-01 4.6796411275863647e-01 + <_> + + 0 -1 234 -1.8605289515107870e-03 + + 7.1633791923522949e-01 4.3346709012985229e-01 + <_> + + 0 -1 235 -9.4026362057775259e-04 + + 3.0213609337806702e-01 5.6502032279968262e-01 + <_> + + 0 -1 236 -5.2418331615626812e-03 + + 1.8200090527534485e-01 5.2502560615539551e-01 + <_> + + 0 -1 237 1.1729019752237946e-04 + + 3.3891880512237549e-01 5.4459732770919800e-01 + <_> + + 0 -1 238 1.1878840159624815e-03 + + 4.0853491425514221e-01 6.2535631656646729e-01 + <_> + + 0 -1 239 -1.0881359688937664e-02 + + 3.3783990144729614e-01 5.7000827789306641e-01 + <_> + + 0 -1 240 1.7354859737679362e-03 + + 4.2046359181404114e-01 6.5230387449264526e-01 + <_> + + 0 -1 241 -6.5119052305817604e-03 + + 2.5952160358428955e-01 5.4281437397003174e-01 + <_> + + 0 -1 242 -1.2136430013924837e-03 + + 6.1651438474655151e-01 3.9778938889503479e-01 + <_> + + 0 -1 243 -1.0354240424931049e-02 + + 1.6280280053615570e-01 5.2195048332214355e-01 + <_> + + 0 -1 244 5.5858830455690622e-04 + + 3.1996509432792664e-01 5.5035740137100220e-01 + <_> + + 0 -1 245 1.5299649909138680e-02 + + 4.1039940714836121e-01 6.1223882436752319e-01 + <_> + + 0 -1 246 -2.1588210016489029e-02 + + 1.0349129885435104e-01 5.1973849534988403e-01 + <_> + + 0 -1 247 -1.2834629416465759e-01 + + 8.4938651323318481e-01 4.8931029438972473e-01 + <_> + + 0 -1 248 -2.2927189711481333e-03 + + 3.1301578879356384e-01 5.4715752601623535e-01 + <_> + + 0 -1 249 7.9915106296539307e-02 + + 4.8563209176063538e-01 6.0739892721176147e-01 + <_> + + 0 -1 250 -7.9441092908382416e-02 + + 8.3946740627288818e-01 4.6245330572128296e-01 + <_> + + 0 -1 251 -5.2800010889768600e-03 + + 1.8816959857940674e-01 5.3066980838775635e-01 + <_> + + 0 -1 252 1.0463109938427806e-03 + + 5.2712291479110718e-01 2.5830659270286560e-01 + <_> + + 0 -1 253 2.6317298761568964e-04 + + 4.2353048920631409e-01 5.7354408502578735e-01 + <_> + + 0 -1 254 -3.6173160187900066e-03 + + 6.9343960285186768e-01 4.4954448938369751e-01 + <_> + + 0 -1 255 1.1421879753470421e-02 + + 5.9009212255477905e-01 4.1381931304931641e-01 + <_> + + 0 -1 256 -1.9963278900831938e-03 + + 6.4663827419281006e-01 4.3272399902343750e-01 + <_> + 56 + 2.7153350830078125e+01 + + <_> + + 0 -1 257 -9.9691245704889297e-03 + + 6.1423242092132568e-01 2.4822120368480682e-01 + <_> + + 0 -1 258 7.3073059320449829e-04 + + 5.7049518823623657e-01 2.3219659924507141e-01 + <_> + + 0 -1 259 6.4045301405712962e-04 + + 2.1122519671916962e-01 5.8149331808090210e-01 + <_> + + 0 -1 260 4.5424019917845726e-03 + + 2.9504820704460144e-01 5.8663117885589600e-01 + <_> + + 0 -1 261 9.2477443104144186e-05 + + 2.9909908771514893e-01 5.7913267612457275e-01 + <_> + + 0 -1 262 -8.6603146046400070e-03 + + 2.8130298852920532e-01 5.6355422735214233e-01 + <_> + + 0 -1 263 8.0515816807746887e-03 + + 3.5353690385818481e-01 6.0547572374343872e-01 + <_> + + 0 -1 264 4.3835240649059415e-04 + + 5.5965322256088257e-01 2.7315109968185425e-01 + <_> + + 0 -1 265 -9.8168973636347800e-05 + + 5.9780317544937134e-01 3.6385610699653625e-01 + <_> + + 0 -1 266 -1.1298790341243148e-03 + + 2.7552521228790283e-01 5.4327291250228882e-01 + <_> + + 0 -1 267 6.4356150105595589e-03 + + 4.3056419491767883e-01 7.0698332786560059e-01 + <_> + + 0 -1 268 -5.6829329580068588e-02 + + 2.4952429533004761e-01 5.2949970960617065e-01 + <_> + + 0 -1 269 4.0668169967830181e-03 + + 5.4785531759262085e-01 2.4977239966392517e-01 + <_> + + 0 -1 270 4.8164798499783501e-05 + + 3.9386010169982910e-01 5.7063561677932739e-01 + <_> + + 0 -1 271 6.1795017682015896e-03 + + 4.4076061248779297e-01 7.3947668075561523e-01 + <_> + + 0 -1 272 6.4985752105712891e-03 + + 5.4452431201934814e-01 2.4791529774665833e-01 + <_> + + 0 -1 273 -1.0211090557277203e-03 + + 2.5447669625282288e-01 5.3389710187911987e-01 + <_> + + 0 -1 274 -5.4247528314590454e-03 + + 2.7188581228256226e-01 5.3240692615509033e-01 + <_> + + 0 -1 275 -1.0559899965301156e-03 + + 3.1782880425453186e-01 5.5345088243484497e-01 + <_> + + 0 -1 276 6.6465808777138591e-04 + + 4.2842191457748413e-01 6.5581941604614258e-01 + <_> + + 0 -1 277 -2.7524109464138746e-04 + + 5.9028607606887817e-01 3.8102629780769348e-01 + <_> + + 0 -1 278 4.2293202131986618e-03 + + 3.8164898753166199e-01 5.7093858718872070e-01 + <_> + + 0 -1 279 -3.2868210691958666e-03 + + 1.7477439343929291e-01 5.2595442533493042e-01 + <_> + + 0 -1 280 1.5611879643984139e-04 + + 3.6017221212387085e-01 5.7256120443344116e-01 + <_> + + 0 -1 281 -7.3621381488919724e-06 + + 5.4018580913543701e-01 3.0444970726966858e-01 + <_> + + 0 -1 282 -1.4767250046133995e-02 + + 3.2207700610160828e-01 5.5734348297119141e-01 + <_> + + 0 -1 283 2.4489590898156166e-02 + + 4.3015280365943909e-01 6.5188127756118774e-01 + <_> + + 0 -1 284 -3.7652091123163700e-04 + + 3.5645830631256104e-01 5.5982369184494019e-01 + <_> + + 0 -1 285 7.3657688517414499e-06 + + 3.4907829761505127e-01 5.5618977546691895e-01 + <_> + + 0 -1 286 -1.5099939890205860e-02 + + 1.7762720584869385e-01 5.3352999687194824e-01 + <_> + + 0 -1 287 -3.8316650316119194e-03 + + 6.1496877670288086e-01 4.2213940620422363e-01 + <_> + + 0 -1 288 1.6925400123000145e-02 + + 5.4130148887634277e-01 2.1665850281715393e-01 + <_> + + 0 -1 289 -3.0477850232273340e-03 + + 6.4494907855987549e-01 4.3546178936958313e-01 + <_> + + 0 -1 290 3.2140589319169521e-03 + + 5.4001551866531372e-01 3.5232171416282654e-01 + <_> + + 0 -1 291 -4.0023201145231724e-03 + + 2.7745240926742554e-01 5.3384172916412354e-01 + <_> + + 0 -1 292 7.4182129465043545e-03 + + 5.6767392158508301e-01 3.7028178572654724e-01 + <_> + + 0 -1 293 -8.8764587417244911e-03 + + 7.7492219209671021e-01 4.5836889743804932e-01 + <_> + + 0 -1 294 2.7311739977449179e-03 + + 5.3387218713760376e-01 3.9966610074043274e-01 + <_> + + 0 -1 295 -2.5082379579544067e-03 + + 5.6119632720947266e-01 3.7774989008903503e-01 + <_> + + 0 -1 296 -8.0541074275970459e-03 + + 2.9152289032936096e-01 5.1791828870773315e-01 + <_> + + 0 -1 297 -9.7938813269138336e-04 + + 5.5364328622817993e-01 3.7001928687095642e-01 + <_> + + 0 -1 298 -5.8745909482240677e-03 + + 3.7543910741806030e-01 5.6793761253356934e-01 + <_> + + 0 -1 299 -4.4936719350516796e-03 + + 7.0196992158889771e-01 4.4809499382972717e-01 + <_> + + 0 -1 300 -5.4389229044318199e-03 + + 2.3103649914264679e-01 5.3133869171142578e-01 + <_> + + 0 -1 301 -7.5094640487805009e-04 + + 5.8648687601089478e-01 4.1293430328369141e-01 + <_> + + 0 -1 302 1.4528800420521293e-05 + + 3.7324070930480957e-01 5.6196212768554688e-01 + <_> + + 0 -1 303 4.0758069604635239e-02 + + 5.3120911121368408e-01 2.7205219864845276e-01 + <_> + + 0 -1 304 6.6505931317806244e-03 + + 4.7100159525871277e-01 6.6934937238693237e-01 + <_> + + 0 -1 305 4.5759351924061775e-03 + + 5.1678192615509033e-01 1.6372759640216827e-01 + <_> + + 0 -1 306 6.5269311890006065e-03 + + 5.3976088762283325e-01 2.9385319352149963e-01 + <_> + + 0 -1 307 -1.3660379685461521e-02 + + 7.0864880084991455e-01 4.5322000980377197e-01 + <_> + + 0 -1 308 2.7358869090676308e-02 + + 5.2064812183380127e-01 3.5892319679260254e-01 + <_> + + 0 -1 309 6.2197551596909761e-04 + + 3.5070759057998657e-01 5.4411232471466064e-01 + <_> + + 0 -1 310 -3.3077080734074116e-03 + + 5.8595228195190430e-01 4.0248918533325195e-01 + <_> + + 0 -1 311 -1.0631109587848186e-02 + + 6.7432671785354614e-01 4.4226029515266418e-01 + <_> + + 0 -1 312 1.9441649317741394e-02 + + 5.2827161550521851e-01 1.7979049682617188e-01 + <_> + 71 + 3.4554111480712891e+01 + + <_> + + 0 -1 313 -5.5052167735993862e-03 + + 5.9147310256958008e-01 2.6265591382980347e-01 + <_> + + 0 -1 314 1.9562279339879751e-03 + + 2.3125819861888885e-01 5.7416272163391113e-01 + <_> + + 0 -1 315 -8.8924784213304520e-03 + + 1.6565300524234772e-01 5.6266540288925171e-01 + <_> + + 0 -1 316 8.3638377487659454e-02 + + 5.4234498739242554e-01 1.9572949409484863e-01 + <_> + + 0 -1 317 1.2282270472496748e-03 + + 3.4179040789604187e-01 5.9925037622451782e-01 + <_> + + 0 -1 318 5.7629169896245003e-03 + + 3.7195819616317749e-01 6.0799038410186768e-01 + <_> + + 0 -1 319 -1.6417410224676132e-03 + + 2.5774860382080078e-01 5.5769157409667969e-01 + <_> + + 0 -1 320 3.4113149158656597e-03 + + 2.9507490992546082e-01 5.5141717195510864e-01 + <_> + + 0 -1 321 -1.1069320142269135e-02 + + 7.5693589448928833e-01 4.4770789146423340e-01 + <_> + + 0 -1 322 3.4865971654653549e-02 + + 5.5837088823318481e-01 2.6696211099624634e-01 + <_> + + 0 -1 323 6.5701099811121821e-04 + + 5.6273132562637329e-01 2.9888901114463806e-01 + <_> + + 0 -1 324 -2.4339130148291588e-02 + + 2.7711850404739380e-01 5.1088631153106689e-01 + <_> + + 0 -1 325 5.9435202274471521e-04 + + 5.5806517601013184e-01 3.1203418970108032e-01 + <_> + + 0 -1 326 2.2971509024500847e-03 + + 3.3302500844001770e-01 5.6790757179260254e-01 + <_> + + 0 -1 327 -3.7801829166710377e-03 + + 2.9905349016189575e-01 5.3448081016540527e-01 + <_> + + 0 -1 328 -1.3420669734477997e-01 + + 1.4638589322566986e-01 5.3925681114196777e-01 + <_> + + 0 -1 329 7.5224548345431685e-04 + + 3.7469539046287537e-01 5.6927347183227539e-01 + <_> + + 0 -1 330 -4.0545541793107986e-02 + + 2.7547478675842285e-01 5.4842978715896606e-01 + <_> + + 0 -1 331 1.2572970008477569e-03 + + 3.7445840239524841e-01 5.7560759782791138e-01 + <_> + + 0 -1 332 -7.4249948374927044e-03 + + 7.5138592720031738e-01 4.7282311320304871e-01 + <_> + + 0 -1 333 5.0908129196614027e-04 + + 5.4048967361450195e-01 2.9323211312294006e-01 + <_> + + 0 -1 334 -1.2808450264856219e-03 + + 6.1697798967361450e-01 4.2733490467071533e-01 + <_> + + 0 -1 335 -1.8348860321566463e-03 + + 2.0484960079193115e-01 5.2064722776412964e-01 + <_> + + 0 -1 336 2.7484869584441185e-02 + + 5.2529847621917725e-01 1.6755220293998718e-01 + <_> + + 0 -1 337 2.2372419480234385e-03 + + 5.2677828073501587e-01 2.7776581048965454e-01 + <_> + + 0 -1 338 -8.8635291904211044e-03 + + 6.9545578956604004e-01 4.8120489716529846e-01 + <_> + + 0 -1 339 4.1753971017897129e-03 + + 4.2918878793716431e-01 6.3491958379745483e-01 + <_> + + 0 -1 340 -1.7098189564421773e-03 + + 2.9305368661880493e-01 5.3612488508224487e-01 + <_> + + 0 -1 341 6.5328548662364483e-03 + + 4.4953250885009766e-01 7.4096941947937012e-01 + <_> + + 0 -1 342 -9.5372907817363739e-03 + + 3.1491199135780334e-01 5.4165017604827881e-01 + <_> + + 0 -1 343 2.5310989469289780e-02 + + 5.1218920946121216e-01 1.3117079436779022e-01 + <_> + + 0 -1 344 3.6460969597101212e-02 + + 5.1759117841720581e-01 2.5913399457931519e-01 + <_> + + 0 -1 345 2.0854329690337181e-02 + + 5.1371401548385620e-01 1.5823160111904144e-01 + <_> + + 0 -1 346 -8.7207747856155038e-04 + + 5.5743098258972168e-01 4.3989789485931396e-01 + <_> + + 0 -1 347 -1.5227000403683633e-05 + + 5.5489408969879150e-01 3.7080699205398560e-01 + <_> + + 0 -1 348 -8.4316509310156107e-04 + + 3.3874198794364929e-01 5.5542111396789551e-01 + <_> + + 0 -1 349 3.6037859972566366e-03 + + 5.3580617904663086e-01 3.4111711382865906e-01 + <_> + + 0 -1 350 -6.8057891912758350e-03 + + 6.1252027750015259e-01 4.3458628654479980e-01 + <_> + + 0 -1 351 -4.7021660953760147e-02 + + 2.3581659793853760e-01 5.1937389373779297e-01 + <_> + + 0 -1 352 -3.6954108625650406e-02 + + 7.3231112957000732e-01 4.7609439492225647e-01 + <_> + + 0 -1 353 1.0439479956403375e-03 + + 5.4194551706314087e-01 3.4113308787345886e-01 + <_> + + 0 -1 354 -2.1050689974799752e-04 + + 2.8216940164566040e-01 5.5549472570419312e-01 + <_> + + 0 -1 355 -8.0831587314605713e-02 + + 9.1299301385879517e-01 4.6974349021911621e-01 + <_> + + 0 -1 356 -3.6579059087671340e-04 + + 6.0226702690124512e-01 3.9782929420471191e-01 + <_> + + 0 -1 357 -1.2545920617412776e-04 + + 5.6132131814956665e-01 3.8455399870872498e-01 + <_> + + 0 -1 358 -6.8786486983299255e-02 + + 2.2616119682788849e-01 5.3004968166351318e-01 + <_> + + 0 -1 359 1.2415789999067783e-02 + + 4.0756919980049133e-01 5.8288121223449707e-01 + <_> + + 0 -1 360 -4.7174817882478237e-03 + + 2.8272539377212524e-01 5.2677577733993530e-01 + <_> + + 0 -1 361 3.8136858493089676e-02 + + 5.0747412443161011e-01 1.0236159712076187e-01 + <_> + + 0 -1 362 -2.8168049175292253e-03 + + 6.1690068244934082e-01 4.3596929311752319e-01 + <_> + + 0 -1 363 8.1303603947162628e-03 + + 4.5244330167770386e-01 7.6060950756072998e-01 + <_> + + 0 -1 364 6.0056019574403763e-03 + + 5.2404087781906128e-01 1.8597120046615601e-01 + <_> + + 0 -1 365 1.9139319658279419e-02 + + 5.2093791961669922e-01 2.3320719599723816e-01 + <_> + + 0 -1 366 1.6445759683847427e-02 + + 5.4507029056549072e-01 3.2642349600791931e-01 + <_> + + 0 -1 367 -3.7356890738010406e-02 + + 6.9990468025207520e-01 4.5332419872283936e-01 + <_> + + 0 -1 368 -1.9727900624275208e-02 + + 2.6536649465560913e-01 5.4128098487854004e-01 + <_> + + 0 -1 369 6.6972579807043076e-03 + + 4.4805660843849182e-01 7.1386522054672241e-01 + <_> + + 0 -1 370 7.4457528535276651e-04 + + 4.2313501238822937e-01 5.4713201522827148e-01 + <_> + + 0 -1 371 1.1790640419349074e-03 + + 5.3417021036148071e-01 3.1304550170898438e-01 + <_> + + 0 -1 372 3.4980610013008118e-02 + + 5.1186597347259521e-01 3.4305301308631897e-01 + <_> + + 0 -1 373 5.6859792675822973e-04 + + 3.5321870446205139e-01 5.4686397314071655e-01 + <_> + + 0 -1 374 -1.1340649798512459e-02 + + 2.8423538804054260e-01 5.3487008810043335e-01 + <_> + + 0 -1 375 -6.6228108480572701e-03 + + 6.8836402893066406e-01 4.4926649332046509e-01 + <_> + + 0 -1 376 -8.0160330981016159e-03 + + 1.7098939418792725e-01 5.2243089675903320e-01 + <_> + + 0 -1 377 1.4206819469109178e-03 + + 5.2908462285995483e-01 2.9933831095695496e-01 + <_> + + 0 -1 378 -2.7801711112260818e-03 + + 6.4988541603088379e-01 4.4604998826980591e-01 + <_> + + 0 -1 379 -1.4747589593753219e-03 + + 3.2604381442070007e-01 5.3881132602691650e-01 + <_> + + 0 -1 380 -2.3830339312553406e-02 + + 7.5289410352706909e-01 4.8012199997901917e-01 + <_> + + 0 -1 381 6.9369790144264698e-03 + + 5.3351658582687378e-01 3.2614278793334961e-01 + <_> + + 0 -1 382 8.2806255668401718e-03 + + 4.5803940296173096e-01 5.7378298044204712e-01 + <_> + + 0 -1 383 -1.0439500212669373e-02 + + 2.5923201441764832e-01 5.2338278293609619e-01 + <_> + 80 + 3.9107288360595703e+01 + + <_> + + 0 -1 384 7.2006587870419025e-03 + + 3.2588860392570496e-01 6.8498080968856812e-01 + <_> + + 0 -1 385 -2.8593589086085558e-03 + + 5.8388811349868774e-01 2.5378298759460449e-01 + <_> + + 0 -1 386 6.8580528022721410e-04 + + 5.7080817222595215e-01 2.8124240040779114e-01 + <_> + + 0 -1 387 7.9580191522836685e-03 + + 2.5010511279106140e-01 5.5442607402801514e-01 + <_> + + 0 -1 388 -1.2124150525778532e-03 + + 2.3853680491447449e-01 5.4333502054214478e-01 + <_> + + 0 -1 389 7.9426132142543793e-03 + + 3.9550709724426270e-01 6.2207579612731934e-01 + <_> + + 0 -1 390 2.4630590341985226e-03 + + 5.6397080421447754e-01 2.9923579096794128e-01 + <_> + + 0 -1 391 -6.0396599583327770e-03 + + 2.1865129470825195e-01 5.4116767644882202e-01 + <_> + + 0 -1 392 -1.2988339876756072e-03 + + 2.3507060110569000e-01 5.3645849227905273e-01 + <_> + + 0 -1 393 2.2299369447864592e-04 + + 3.8041129708290100e-01 5.7296061515808105e-01 + <_> + + 0 -1 394 1.4654280385002494e-03 + + 2.5101679563522339e-01 5.2582687139511108e-01 + <_> + + 0 -1 395 -8.1210042117163539e-04 + + 5.9928238391876221e-01 3.8511589169502258e-01 + <_> + + 0 -1 396 -1.3836020370945334e-03 + + 5.6813961267471313e-01 3.6365869641304016e-01 + <_> + + 0 -1 397 -2.7936449274420738e-02 + + 1.4913170039653778e-01 5.3775602579116821e-01 + <_> + + 0 -1 398 -4.6919551095925272e-04 + + 3.6924299597740173e-01 5.5724847316741943e-01 + <_> + + 0 -1 399 -4.9829659983515739e-03 + + 6.7585092782974243e-01 4.5325040817260742e-01 + <_> + + 0 -1 400 1.8815309740602970e-03 + + 5.3680229187011719e-01 2.9325398802757263e-01 + <_> + + 0 -1 401 -1.9067550078034401e-02 + + 1.6493770480155945e-01 5.3300672769546509e-01 + <_> + + 0 -1 402 -4.6906559728085995e-03 + + 1.9639259576797485e-01 5.1193618774414062e-01 + <_> + + 0 -1 403 5.9777139686048031e-03 + + 4.6711719036102295e-01 7.0083981752395630e-01 + <_> + + 0 -1 404 -3.3303130418062210e-02 + + 1.1554169654846191e-01 5.1041620969772339e-01 + <_> + + 0 -1 405 9.0744107961654663e-02 + + 5.1496601104736328e-01 1.3061730563640594e-01 + <_> + + 0 -1 406 9.3555898638442159e-04 + + 3.6054810881614685e-01 5.4398590326309204e-01 + <_> + + 0 -1 407 1.4901650138199329e-02 + + 4.8862120509147644e-01 7.6875698566436768e-01 + <_> + + 0 -1 408 6.1594118596985936e-04 + + 5.3568130731582642e-01 3.2409390807151794e-01 + <_> + + 0 -1 409 -5.0670988857746124e-02 + + 1.8486219644546509e-01 5.2304041385650635e-01 + <_> + + 0 -1 410 6.8665749859064817e-04 + + 3.8405799865722656e-01 5.5179458856582642e-01 + <_> + + 0 -1 411 8.3712432533502579e-03 + + 4.2885640263557434e-01 6.1317539215087891e-01 + <_> + + 0 -1 412 -1.2953069526702166e-03 + + 2.9136741161346436e-01 5.2807378768920898e-01 + <_> + + 0 -1 413 -4.1941680014133453e-02 + + 7.5547999143600464e-01 4.8560309410095215e-01 + <_> + + 0 -1 414 -2.3529380559921265e-02 + + 2.8382799029350281e-01 5.2560812234878540e-01 + <_> + + 0 -1 415 4.0857449173927307e-02 + + 4.8709350824356079e-01 6.2772971391677856e-01 + <_> + + 0 -1 416 -2.5406869128346443e-02 + + 7.0997077226638794e-01 4.5750290155410767e-01 + <_> + + 0 -1 417 -4.1415440500713885e-04 + + 4.0308868885040283e-01 5.4694122076034546e-01 + <_> + + 0 -1 418 2.1824119612574577e-02 + + 4.5020240545272827e-01 6.7687010765075684e-01 + <_> + + 0 -1 419 1.4114039950072765e-02 + + 5.4428607225418091e-01 3.7917000055313110e-01 + <_> + + 0 -1 420 6.7214590671937913e-05 + + 4.2004638910293579e-01 5.8734762668609619e-01 + <_> + + 0 -1 421 -7.9417638480663300e-03 + + 3.7925618886947632e-01 5.5852657556533813e-01 + <_> + + 0 -1 422 -7.2144409641623497e-03 + + 7.2531038522720337e-01 4.6035489439964294e-01 + <_> + + 0 -1 423 2.5817339774221182e-03 + + 4.6933019161224365e-01 5.9002387523651123e-01 + <_> + + 0 -1 424 1.3409319519996643e-01 + + 5.1492130756378174e-01 1.8088449537754059e-01 + <_> + + 0 -1 425 2.2962710354477167e-03 + + 5.3997439146041870e-01 3.7178671360015869e-01 + <_> + + 0 -1 426 -2.1575849968940020e-03 + + 2.4084959924221039e-01 5.1488637924194336e-01 + <_> + + 0 -1 427 -4.9196188338100910e-03 + + 6.5735882520675659e-01 4.7387400269508362e-01 + <_> + + 0 -1 428 1.6267469618469477e-03 + + 4.1928219795227051e-01 6.3031142950057983e-01 + <_> + + 0 -1 429 3.3413388882763684e-04 + + 5.5402982234954834e-01 3.7021011114120483e-01 + <_> + + 0 -1 430 -2.6698080822825432e-02 + + 1.7109179496765137e-01 5.1014107465744019e-01 + <_> + + 0 -1 431 -3.0561879277229309e-02 + + 1.9042180478572845e-01 5.1687937974929810e-01 + <_> + + 0 -1 432 2.8511548880487680e-03 + + 4.4475069642066956e-01 6.3138538599014282e-01 + <_> + + 0 -1 433 -3.6211479455232620e-02 + + 2.4907270073890686e-01 5.3773492574691772e-01 + <_> + + 0 -1 434 -2.4115189444273710e-03 + + 5.3812432289123535e-01 3.6642369627952576e-01 + <_> + + 0 -1 435 -7.7253201743587852e-04 + + 5.5302321910858154e-01 3.5415500402450562e-01 + <_> + + 0 -1 436 2.9481729143299162e-04 + + 4.1326990723609924e-01 5.6672430038452148e-01 + <_> + + 0 -1 437 -6.2334560789167881e-03 + + 9.8787233233451843e-02 5.1986688375473022e-01 + <_> + + 0 -1 438 -2.6274729520082474e-02 + + 9.1127492487430573e-02 5.0281071662902832e-01 + <_> + + 0 -1 439 5.3212260827422142e-03 + + 4.7266489267349243e-01 6.2227207422256470e-01 + <_> + + 0 -1 440 -4.1129058226943016e-03 + + 2.1574570238590240e-01 5.1378047466278076e-01 + <_> + + 0 -1 441 3.2457809429615736e-03 + + 5.4107707738876343e-01 3.7217769026756287e-01 + <_> + + 0 -1 442 -1.6359709203243256e-02 + + 7.7878749370574951e-01 4.6852919459342957e-01 + <_> + + 0 -1 443 3.2166109303943813e-04 + + 5.4789870977401733e-01 4.2403739690780640e-01 + <_> + + 0 -1 444 6.4452440710738301e-04 + + 5.3305608034133911e-01 3.5013249516487122e-01 + <_> + + 0 -1 445 -7.8909732401371002e-03 + + 6.9235211610794067e-01 4.7265690565109253e-01 + <_> + + 0 -1 446 4.8336211591959000e-02 + + 5.0559002161026001e-01 7.5749203562736511e-02 + <_> + + 0 -1 447 -7.5178127735853195e-04 + + 3.7837418913841248e-01 5.5385738611221313e-01 + <_> + + 0 -1 448 -2.4953910615295172e-03 + + 3.0816510319709778e-01 5.3596121072769165e-01 + <_> + + 0 -1 449 -2.2385010961443186e-03 + + 6.6339588165283203e-01 4.6493428945541382e-01 + <_> + + 0 -1 450 -1.7988430336117744e-03 + + 6.5968447923660278e-01 4.3471878767013550e-01 + <_> + + 0 -1 451 8.7860915809869766e-03 + + 5.2318328619003296e-01 2.3155799508094788e-01 + <_> + + 0 -1 452 3.6715380847454071e-03 + + 5.2042502164840698e-01 2.9773768782615662e-01 + <_> + + 0 -1 453 -3.5336449742317200e-02 + + 7.2388780117034912e-01 4.8615050315856934e-01 + <_> + + 0 -1 454 -6.9189240457490087e-04 + + 3.1050220131874084e-01 5.2298247814178467e-01 + <_> + + 0 -1 455 -3.3946109469980001e-03 + + 3.1389680504798889e-01 5.2101737260818481e-01 + <_> + + 0 -1 456 9.8569283727556467e-04 + + 4.5365801453590393e-01 6.5850979089736938e-01 + <_> + + 0 -1 457 -5.0163101404905319e-02 + + 1.8044540286064148e-01 5.1989167928695679e-01 + <_> + + 0 -1 458 -2.2367259953171015e-03 + + 7.2557020187377930e-01 4.6513590216636658e-01 + <_> + + 0 -1 459 7.4326287722215056e-04 + + 4.4129210710525513e-01 5.8985459804534912e-01 + <_> + + 0 -1 460 -9.3485182151198387e-04 + + 3.5000529885292053e-01 5.3660178184509277e-01 + <_> + + 0 -1 461 1.7497939988970757e-02 + + 4.9121949076652527e-01 8.3152848482131958e-01 + <_> + + 0 -1 462 -1.5200000489130616e-03 + + 3.5702759027481079e-01 5.3705602884292603e-01 + <_> + + 0 -1 463 7.8003940870985389e-04 + + 4.3537721037864685e-01 5.9673351049423218e-01 + <_> + 103 + 5.0610481262207031e+01 + + <_> + + 0 -1 464 -9.9945552647113800e-03 + + 6.1625832319259644e-01 3.0545330047607422e-01 + <_> + + 0 -1 465 -1.1085229925811291e-03 + + 5.8182948827743530e-01 3.1555780768394470e-01 + <_> + + 0 -1 466 1.0364380432292819e-03 + + 2.5520521402359009e-01 5.6929117441177368e-01 + <_> + + 0 -1 467 6.8211311008781195e-04 + + 3.6850899457931519e-01 5.9349310398101807e-01 + <_> + + 0 -1 468 -6.8057340104132891e-04 + + 2.3323920369148254e-01 5.4747921228408813e-01 + <_> + + 0 -1 469 2.6068789884448051e-04 + + 3.2574570178985596e-01 5.6675457954406738e-01 + <_> + + 0 -1 470 5.1607372006401420e-04 + + 3.7447169423103333e-01 5.8454728126525879e-01 + <_> + + 0 -1 471 8.5007521556690335e-04 + + 3.4203711152076721e-01 5.5228072404861450e-01 + <_> + + 0 -1 472 -1.8607829697430134e-03 + + 2.8044199943542480e-01 5.3754240274429321e-01 + <_> + + 0 -1 473 -1.5033970121294260e-03 + + 2.5790509581565857e-01 5.4989522695541382e-01 + <_> + + 0 -1 474 2.3478909861296415e-03 + + 4.1751560568809509e-01 6.3137108087539673e-01 + <_> + + 0 -1 475 -2.8880240279249847e-04 + + 5.8651697635650635e-01 4.0526661276817322e-01 + <_> + + 0 -1 476 8.9405477046966553e-03 + + 5.2111411094665527e-01 2.3186540603637695e-01 + <_> + + 0 -1 477 -1.9327739253640175e-02 + + 2.7534329891204834e-01 5.2415257692337036e-01 + <_> + + 0 -1 478 -2.0202060113660991e-04 + + 5.7229787111282349e-01 3.6771959066390991e-01 + <_> + + 0 -1 479 2.1179069299250841e-03 + + 4.4661080837249756e-01 5.5424308776855469e-01 + <_> + + 0 -1 480 -1.7743760254234076e-03 + + 2.8132531046867371e-01 5.3009599447250366e-01 + <_> + + 0 -1 481 4.2234458960592747e-03 + + 4.3997099995613098e-01 5.7954281568527222e-01 + <_> + + 0 -1 482 -1.4375220052897930e-02 + + 2.9811179637908936e-01 5.2920591831207275e-01 + <_> + + 0 -1 483 -1.5349180437624454e-02 + + 7.7052152156829834e-01 4.7481718659400940e-01 + <_> + + 0 -1 484 1.5152279956964776e-05 + + 3.7188440561294556e-01 5.5768972635269165e-01 + <_> + + 0 -1 485 -9.1293919831514359e-03 + + 3.6151960492134094e-01 5.2867668867111206e-01 + <_> + + 0 -1 486 2.2512159775942564e-03 + + 5.3647047281265259e-01 3.4862980246543884e-01 + <_> + + 0 -1 487 -4.9696918576955795e-03 + + 6.9276517629623413e-01 4.6768361330032349e-01 + <_> + + 0 -1 488 -1.2829010374844074e-02 + + 7.7121537923812866e-01 4.6607351303100586e-01 + <_> + + 0 -1 489 -9.3660065904259682e-03 + + 3.3749839663505554e-01 5.3512877225875854e-01 + <_> + + 0 -1 490 3.2452319283038378e-03 + + 5.3251898288726807e-01 3.2896101474761963e-01 + <_> + + 0 -1 491 -1.1723560281097889e-02 + + 6.8376529216766357e-01 4.7543001174926758e-01 + <_> + + 0 -1 492 2.9257940695970319e-05 + + 3.5720878839492798e-01 5.3605020046234131e-01 + <_> + + 0 -1 493 -2.2244219508138485e-05 + + 5.5414271354675293e-01 3.5520640015602112e-01 + <_> + + 0 -1 494 5.0881509669125080e-03 + + 5.0708442926406860e-01 1.2564620375633240e-01 + <_> + + 0 -1 495 2.7429679408669472e-02 + + 5.2695602178573608e-01 1.6258180141448975e-01 + <_> + + 0 -1 496 -6.4142867922782898e-03 + + 7.1455889940261841e-01 4.5841971039772034e-01 + <_> + + 0 -1 497 3.3479959238320589e-03 + + 5.3986120223999023e-01 3.4946969151496887e-01 + <_> + + 0 -1 498 -8.2635492086410522e-02 + + 2.4391929805278778e-01 5.1602262258529663e-01 + <_> + + 0 -1 499 1.0261740535497665e-03 + + 3.8868919014930725e-01 5.7679080963134766e-01 + <_> + + 0 -1 500 -1.6307090409100056e-03 + + 3.3894580602645874e-01 5.3477007150650024e-01 + <_> + + 0 -1 501 2.4546680506318808e-03 + + 4.6014139056205750e-01 6.3872468471527100e-01 + <_> + + 0 -1 502 -9.9476519972085953e-04 + + 5.7698792219161987e-01 4.1203960776329041e-01 + <_> + + 0 -1 503 1.5409190207719803e-02 + + 4.8787090182304382e-01 7.0898222923278809e-01 + <_> + + 0 -1 504 1.1784400558099151e-03 + + 5.2635532617568970e-01 2.8952449560165405e-01 + <_> + + 0 -1 505 -2.7701919898390770e-02 + + 1.4988289773464203e-01 5.2196067571640015e-01 + <_> + + 0 -1 506 -2.9505399987101555e-02 + + 2.4893319234251976e-02 4.9998161196708679e-01 + <_> + + 0 -1 507 4.5159430010244250e-04 + + 5.4646229743957520e-01 4.0296629071235657e-01 + <_> + + 0 -1 508 7.1772639639675617e-03 + + 4.2710569500923157e-01 5.8662968873977661e-01 + <_> + + 0 -1 509 -7.4182048439979553e-02 + + 6.8741792440414429e-01 4.9190279841423035e-01 + <_> + + 0 -1 510 -1.7254160717129707e-02 + + 3.3706760406494141e-01 5.3487390279769897e-01 + <_> + + 0 -1 511 1.4851559884846210e-02 + + 4.6267929673194885e-01 6.1299049854278564e-01 + <_> + + 0 -1 512 1.0002000257372856e-02 + + 5.3461229801177979e-01 3.4234538674354553e-01 + <_> + + 0 -1 513 2.0138120744377375e-03 + + 4.6438300609588623e-01 5.8243042230606079e-01 + <_> + + 0 -1 514 1.5135470312088728e-03 + + 5.1963961124420166e-01 2.8561499714851379e-01 + <_> + + 0 -1 515 3.1381431035697460e-03 + + 4.8381629586219788e-01 5.9585297107696533e-01 + <_> + + 0 -1 516 -5.1450440660119057e-03 + + 8.9203029870986938e-01 4.7414121031761169e-01 + <_> + + 0 -1 517 -4.4736708514392376e-03 + + 2.0339429378509521e-01 5.3372788429260254e-01 + <_> + + 0 -1 518 1.9628470763564110e-03 + + 4.5716339349746704e-01 6.7258632183074951e-01 + <_> + + 0 -1 519 5.4260450415313244e-03 + + 5.2711081504821777e-01 2.8456708788871765e-01 + <_> + + 0 -1 520 4.9611460417509079e-04 + + 4.1383129358291626e-01 5.7185977697372437e-01 + <_> + + 0 -1 521 9.3728788197040558e-03 + + 5.2251511812210083e-01 2.8048470616340637e-01 + <_> + + 0 -1 522 6.0500897234305739e-04 + + 5.2367687225341797e-01 3.3145239949226379e-01 + <_> + + 0 -1 523 5.6792551185935736e-04 + + 4.5310598611831665e-01 6.2769711017608643e-01 + <_> + + 0 -1 524 2.4644339457154274e-02 + + 5.1308518648147583e-01 2.0171439647674561e-01 + <_> + + 0 -1 525 -1.0290450416505337e-02 + + 7.7865952253341675e-01 4.8766410350799561e-01 + <_> + + 0 -1 526 2.0629419013857841e-03 + + 4.2885988950729370e-01 5.8812642097473145e-01 + <_> + + 0 -1 527 -5.0519481301307678e-03 + + 3.5239779949188232e-01 5.2860087156295776e-01 + <_> + + 0 -1 528 -5.7692620903253555e-03 + + 6.8410861492156982e-01 4.5880940556526184e-01 + <_> + + 0 -1 529 -4.5789941214025021e-04 + + 3.5655200481414795e-01 5.4859781265258789e-01 + <_> + + 0 -1 530 -7.5918837683275342e-04 + + 3.3687931299209595e-01 5.2541971206665039e-01 + <_> + + 0 -1 531 -1.7737259622663260e-03 + + 3.4221610426902771e-01 5.4540151357650757e-01 + <_> + + 0 -1 532 -8.5610467940568924e-03 + + 6.5336120128631592e-01 4.4858568906784058e-01 + <_> + + 0 -1 533 1.7277270089834929e-03 + + 5.3075802326202393e-01 3.9253529906272888e-01 + <_> + + 0 -1 534 -2.8199609369039536e-02 + + 6.8574589490890503e-01 4.5885840058326721e-01 + <_> + + 0 -1 535 -1.7781109781935811e-03 + + 4.0378510951995850e-01 5.3698569536209106e-01 + <_> + + 0 -1 536 3.3177141449414194e-04 + + 5.3997987508773804e-01 3.7057501077651978e-01 + <_> + + 0 -1 537 2.6385399978607893e-03 + + 4.6654370427131653e-01 6.4527308940887451e-01 + <_> + + 0 -1 538 -2.1183069329708815e-03 + + 5.9147810935974121e-01 4.0646770596504211e-01 + <_> + + 0 -1 539 -1.4773289673030376e-02 + + 3.6420381069183350e-01 5.2947628498077393e-01 + <_> + + 0 -1 540 -1.6815440729260445e-02 + + 2.6642319560050964e-01 5.1449728012084961e-01 + <_> + + 0 -1 541 -6.3370140269398689e-03 + + 6.7795312404632568e-01 4.8520979285240173e-01 + <_> + + 0 -1 542 -4.4560048991115764e-05 + + 5.6139647960662842e-01 4.1530540585517883e-01 + <_> + + 0 -1 543 -1.0240620467811823e-03 + + 5.9644782543182373e-01 4.5663040876388550e-01 + <_> + + 0 -1 544 -2.3161689750850201e-03 + + 2.9761150479316711e-01 5.1881599426269531e-01 + <_> + + 0 -1 545 5.3217571973800659e-01 + + 5.1878392696380615e-01 2.2026319801807404e-01 + <_> + + 0 -1 546 -1.6643050312995911e-01 + + 1.8660229444503784e-01 5.0603431463241577e-01 + <_> + + 0 -1 547 1.1253529787063599e-01 + + 5.2121251821517944e-01 1.1850229650735855e-01 + <_> + + 0 -1 548 9.3046864494681358e-03 + + 4.5899370312690735e-01 6.8261492252349854e-01 + <_> + + 0 -1 549 -4.6255099587142467e-03 + + 3.0799409747123718e-01 5.2250087261199951e-01 + <_> + + 0 -1 550 -1.1116469651460648e-01 + + 2.1010440587997437e-01 5.0808018445968628e-01 + <_> + + 0 -1 551 -1.0888439603149891e-02 + + 5.7653552293777466e-01 4.7904640436172485e-01 + <_> + + 0 -1 552 5.8564301580190659e-03 + + 5.0651001930236816e-01 1.5635989606380463e-01 + <_> + + 0 -1 553 5.4854389280080795e-02 + + 4.9669149518013000e-01 7.2305107116699219e-01 + <_> + + 0 -1 554 -1.1197339743375778e-02 + + 2.1949790418148041e-01 5.0987982749938965e-01 + <_> + + 0 -1 555 4.4069071300327778e-03 + + 4.7784018516540527e-01 6.7709028720855713e-01 + <_> + + 0 -1 556 -6.3665293157100677e-02 + + 1.9363629817962646e-01 5.0810241699218750e-01 + <_> + + 0 -1 557 -9.8081491887569427e-03 + + 5.9990632534027100e-01 4.8103410005569458e-01 + <_> + + 0 -1 558 -2.1717099007219076e-03 + + 3.3383339643478394e-01 5.2354729175567627e-01 + <_> + + 0 -1 559 -1.3315520249307156e-02 + + 6.6170698404312134e-01 4.9192130565643311e-01 + <_> + + 0 -1 560 2.5442079640924931e-03 + + 4.4887441396713257e-01 6.0821849107742310e-01 + <_> + + 0 -1 561 1.2037839740514755e-02 + + 5.4093921184539795e-01 3.2924321293830872e-01 + <_> + + 0 -1 562 -2.0701050758361816e-02 + + 6.8191200494766235e-01 4.5949959754943848e-01 + <_> + + 0 -1 563 2.7608279138803482e-02 + + 4.6307921409606934e-01 5.7672828435897827e-01 + <_> + + 0 -1 564 1.2370620388537645e-03 + + 5.1653790473937988e-01 2.6350161433219910e-01 + <_> + + 0 -1 565 -3.7669338285923004e-02 + + 2.5363931059837341e-01 5.2789801359176636e-01 + <_> + + 0 -1 566 -1.8057259730994701e-03 + + 3.9851561188697815e-01 5.5175000429153442e-01 + <_> + 111 + 5.4620071411132812e+01 + + <_> + + 0 -1 567 4.4299028813838959e-03 + + 2.8910180926322937e-01 6.3352262973785400e-01 + <_> + + 0 -1 568 -2.3813319858163595e-03 + + 6.2117892503738403e-01 3.4774878621101379e-01 + <_> + + 0 -1 569 2.2915711160749197e-03 + + 2.2544120252132416e-01 5.5821180343627930e-01 + <_> + + 0 -1 570 9.9457940086722374e-04 + + 3.7117108702659607e-01 5.9300708770751953e-01 + <_> + + 0 -1 571 7.7164667891338468e-04 + + 5.6517201662063599e-01 3.3479958772659302e-01 + <_> + + 0 -1 572 -1.1386410333216190e-03 + + 3.0691260099411011e-01 5.5086308717727661e-01 + <_> + + 0 -1 573 -1.6403039626311511e-04 + + 5.7628279924392700e-01 3.6990478634834290e-01 + <_> + + 0 -1 574 2.9793529392918572e-05 + + 2.6442441344261169e-01 5.4379111528396606e-01 + <_> + + 0 -1 575 8.5774902254343033e-03 + + 5.0511389970779419e-01 1.7957249283790588e-01 + <_> + + 0 -1 576 -2.6032689493149519e-04 + + 5.8269691467285156e-01 4.4468268752098083e-01 + <_> + + 0 -1 577 -6.1404630541801453e-03 + + 3.1138521432876587e-01 5.3469717502593994e-01 + <_> + + 0 -1 578 -2.3086950182914734e-02 + + 3.2779461145401001e-01 5.3311979770660400e-01 + <_> + + 0 -1 579 -1.4243650250136852e-02 + + 7.3817098140716553e-01 4.5880630612373352e-01 + <_> + + 0 -1 580 1.9487129524350166e-02 + + 5.2566307783126831e-01 2.2744719684123993e-01 + <_> + + 0 -1 581 -9.6681108698248863e-04 + + 5.5112308263778687e-01 3.8150069117546082e-01 + <_> + + 0 -1 582 3.1474709976464510e-03 + + 5.4256367683410645e-01 2.5437268614768982e-01 + <_> + + 0 -1 583 -1.8026070029009134e-04 + + 5.3801918029785156e-01 3.4063041210174561e-01 + <_> + + 0 -1 584 -6.0266260989010334e-03 + + 3.0358019471168518e-01 5.4205721616744995e-01 + <_> + + 0 -1 585 4.4462960795499384e-04 + + 3.9909970760345459e-01 5.6601101160049438e-01 + <_> + + 0 -1 586 2.2609760053455830e-03 + + 5.5628067255020142e-01 3.9406880736351013e-01 + <_> + + 0 -1 587 5.1133058965206146e-02 + + 4.6096539497375488e-01 7.1185618638992310e-01 + <_> + + 0 -1 588 -1.7786309123039246e-02 + + 2.3161660134792328e-01 5.3221440315246582e-01 + <_> + + 0 -1 589 -4.9679628573358059e-03 + + 2.3307719826698303e-01 5.1220291852951050e-01 + <_> + + 0 -1 590 2.0667689386755228e-03 + + 4.6574440598487854e-01 6.4554882049560547e-01 + <_> + + 0 -1 591 7.4413768015801907e-03 + + 5.1543921232223511e-01 2.3616339266300201e-01 + <_> + + 0 -1 592 -3.6277279723435640e-03 + + 6.2197732925415039e-01 4.4766610860824585e-01 + <_> + + 0 -1 593 -5.3530759178102016e-03 + + 1.8373550474643707e-01 5.1022082567214966e-01 + <_> + + 0 -1 594 1.4530919492244720e-01 + + 5.1459872722625732e-01 1.5359309315681458e-01 + <_> + + 0 -1 595 2.4394490756094456e-03 + + 5.3436601161956787e-01 3.6246618628501892e-01 + <_> + + 0 -1 596 -3.1283390708267689e-03 + + 6.2150079011917114e-01 4.8455920815467834e-01 + <_> + + 0 -1 597 1.7940260004252195e-03 + + 4.2992618680000305e-01 5.8241981267929077e-01 + <_> + + 0 -1 598 3.6253821104764938e-02 + + 5.2603340148925781e-01 1.4394679665565491e-01 + <_> + + 0 -1 599 -5.1746722310781479e-03 + + 3.5065388679504395e-01 5.2870452404022217e-01 + <_> + + 0 -1 600 6.5383297624066472e-04 + + 4.8096409440040588e-01 6.1220401525497437e-01 + <_> + + 0 -1 601 -2.6480229571461678e-02 + + 1.1393620073795319e-01 5.0455862283706665e-01 + <_> + + 0 -1 602 -3.0440660193562508e-03 + + 6.3520950078964233e-01 4.7947341203689575e-01 + <_> + + 0 -1 603 3.6993520334362984e-03 + + 5.1311182975769043e-01 2.4985109269618988e-01 + <_> + + 0 -1 604 -3.6762931267730892e-04 + + 5.4213947057723999e-01 3.7095320224761963e-01 + <_> + + 0 -1 605 -4.1382260620594025e-02 + + 1.8949599564075470e-01 5.0816917419433594e-01 + <_> + + 0 -1 606 -1.0532729793339968e-03 + + 6.4543670415878296e-01 4.7836089134216309e-01 + <_> + + 0 -1 607 -2.1648600231856108e-03 + + 6.2150311470031738e-01 4.4998261332511902e-01 + <_> + + 0 -1 608 -5.6747748749330640e-04 + + 3.7126109004020691e-01 5.4193347692489624e-01 + <_> + + 0 -1 609 1.7375840246677399e-01 + + 5.0236439704895020e-01 1.2157420068979263e-01 + <_> + + 0 -1 610 -2.9049699660390615e-03 + + 3.2402679324150085e-01 5.3818839788436890e-01 + <_> + + 0 -1 611 1.2299539521336555e-03 + + 4.1655078530311584e-01 5.7034862041473389e-01 + <_> + + 0 -1 612 -5.4329237900674343e-04 + + 3.8540428876876831e-01 5.5475491285324097e-01 + <_> + + 0 -1 613 -8.3297258242964745e-03 + + 2.2044940292835236e-01 5.0970828533172607e-01 + <_> + + 0 -1 614 -1.0417630255687982e-04 + + 5.6070661544799805e-01 4.3030360341072083e-01 + <_> + + 0 -1 615 3.1204700469970703e-02 + + 4.6216571331024170e-01 6.9820040464401245e-01 + <_> + + 0 -1 616 7.8943502157926559e-03 + + 5.2695941925048828e-01 2.2690680623054504e-01 + <_> + + 0 -1 617 -4.3645310215651989e-03 + + 6.3592231273651123e-01 4.5379561185836792e-01 + <_> + + 0 -1 618 7.6793059706687927e-03 + + 5.2747678756713867e-01 2.7404838800430298e-01 + <_> + + 0 -1 619 -2.5431139394640923e-02 + + 2.0385199785232544e-01 5.0717329978942871e-01 + <_> + + 0 -1 620 8.2000601105391979e-04 + + 4.5874550938606262e-01 6.1198681592941284e-01 + <_> + + 0 -1 621 2.9284600168466568e-03 + + 5.0712740421295166e-01 2.0282049477100372e-01 + <_> + + 0 -1 622 4.5256470912136137e-05 + + 4.8121041059494019e-01 5.4308217763900757e-01 + <_> + + 0 -1 623 1.3158309739083052e-03 + + 4.6258139610290527e-01 6.7793232202529907e-01 + <_> + + 0 -1 624 1.5870389761403203e-03 + + 5.3862917423248291e-01 3.4314650297164917e-01 + <_> + + 0 -1 625 -2.1539660170674324e-02 + + 2.5942500680685043e-02 5.0032228231430054e-01 + <_> + + 0 -1 626 1.4334480278193951e-02 + + 5.2028447389602661e-01 1.5906329452991486e-01 + <_> + + 0 -1 627 -8.3881383761763573e-03 + + 7.2824811935424805e-01 4.6480441093444824e-01 + <_> + + 0 -1 628 9.1906841844320297e-03 + + 5.5623567104339600e-01 3.9231911301612854e-01 + <_> + + 0 -1 629 -5.8453059755265713e-03 + + 6.8033927679061890e-01 4.6291279792785645e-01 + <_> + + 0 -1 630 -5.4707799106836319e-02 + + 2.5616711378097534e-01 5.2061259746551514e-01 + <_> + + 0 -1 631 9.1142775490880013e-03 + + 5.1896202564239502e-01 3.0538770556449890e-01 + <_> + + 0 -1 632 -1.5575000084936619e-02 + + 1.2950749695301056e-01 5.1690948009490967e-01 + <_> + + 0 -1 633 -1.2050600344082341e-04 + + 5.7350981235504150e-01 4.2308250069618225e-01 + <_> + + 0 -1 634 1.2273970060050488e-03 + + 5.2898782491683960e-01 4.0797919034957886e-01 + <_> + + 0 -1 635 -1.2186600361019373e-03 + + 6.5756398439407349e-01 4.5744091272354126e-01 + <_> + + 0 -1 636 -3.3256649039685726e-03 + + 3.6280471086502075e-01 5.1950198411941528e-01 + <_> + + 0 -1 637 -1.3288309797644615e-02 + + 1.2842659652233124e-01 5.0434887409210205e-01 + <_> + + 0 -1 638 -3.3839771058410406e-03 + + 6.2922400236129761e-01 4.7575059533119202e-01 + <_> + + 0 -1 639 -2.1954220533370972e-01 + + 1.4877319335937500e-01 5.0650137662887573e-01 + <_> + + 0 -1 640 4.9111708067357540e-03 + + 4.2561021447181702e-01 5.6658387184143066e-01 + <_> + + 0 -1 641 -1.8744950648397207e-04 + + 4.0041440725326538e-01 5.5868571996688843e-01 + <_> + + 0 -1 642 -5.2178641781210899e-03 + + 6.0091161727905273e-01 4.8127061128616333e-01 + <_> + + 0 -1 643 -1.1111519997939467e-03 + + 3.5149338841438293e-01 5.2870899438858032e-01 + <_> + + 0 -1 644 4.4036400504410267e-03 + + 4.6422758698463440e-01 5.9240859746932983e-01 + <_> + + 0 -1 645 1.2299499660730362e-01 + + 5.0255292654037476e-01 6.9152481853961945e-02 + <_> + + 0 -1 646 -1.2313510291278362e-02 + + 5.8845919370651245e-01 4.9340128898620605e-01 + <_> + + 0 -1 647 4.1471039876341820e-03 + + 4.3722391128540039e-01 5.8934777975082397e-01 + <_> + + 0 -1 648 -3.5502649843692780e-03 + + 4.3275511264801025e-01 5.3962701559066772e-01 + <_> + + 0 -1 649 -1.9224269315600395e-02 + + 1.9131340086460114e-01 5.0683307647705078e-01 + <_> + + 0 -1 650 1.4395059552043676e-03 + + 5.3081780672073364e-01 4.2435330152511597e-01 + <_> + + 0 -1 651 -6.7751999013125896e-03 + + 6.3653957843780518e-01 4.5400860905647278e-01 + <_> + + 0 -1 652 7.0119630545377731e-03 + + 5.1898342370986938e-01 3.0261999368667603e-01 + <_> + + 0 -1 653 5.4014651104807854e-03 + + 5.1050621271133423e-01 2.5576829910278320e-01 + <_> + + 0 -1 654 9.0274988906458020e-04 + + 4.6969148516654968e-01 5.8618277311325073e-01 + <_> + + 0 -1 655 1.1474450118839741e-02 + + 5.0536459684371948e-01 1.5271779894828796e-01 + <_> + + 0 -1 656 -6.7023430019617081e-03 + + 6.5089809894561768e-01 4.8906040191650391e-01 + <_> + + 0 -1 657 -2.0462959073483944e-03 + + 6.2418168783187866e-01 4.5146000385284424e-01 + <_> + + 0 -1 658 -9.9951568990945816e-03 + + 3.4327811002731323e-01 5.4009538888931274e-01 + <_> + + 0 -1 659 -3.5700708627700806e-02 + + 1.8780590593814850e-01 5.0740778446197510e-01 + <_> + + 0 -1 660 4.5584561303257942e-04 + + 3.8052770495414734e-01 5.4025697708129883e-01 + <_> + + 0 -1 661 -5.4260600358247757e-02 + + 6.8437147140502930e-01 4.5950970053672791e-01 + <_> + + 0 -1 662 6.0600461438298225e-03 + + 5.5029052495956421e-01 4.5005279779434204e-01 + <_> + + 0 -1 663 -6.4791832119226456e-03 + + 3.3688580989837646e-01 5.3107571601867676e-01 + <_> + + 0 -1 664 -1.4939469983801246e-03 + + 6.4876401424407959e-01 4.7561758756637573e-01 + <_> + + 0 -1 665 1.4610530342906713e-05 + + 4.0345790982246399e-01 5.4510641098022461e-01 + <_> + + 0 -1 666 -7.2321938350796700e-03 + + 6.3868737220764160e-01 4.8247399926185608e-01 + <_> + + 0 -1 667 -4.0645818226039410e-03 + + 2.9864218831062317e-01 5.1573359966278076e-01 + <_> + + 0 -1 668 3.0463080853223801e-02 + + 5.0221997499465942e-01 7.1599560976028442e-01 + <_> + + 0 -1 669 -8.0544911324977875e-03 + + 6.4924520254135132e-01 4.6192750334739685e-01 + <_> + + 0 -1 670 3.9505138993263245e-02 + + 5.1505708694458008e-01 2.4506139755249023e-01 + <_> + + 0 -1 671 8.4530208259820938e-03 + + 4.5736691355705261e-01 6.3940370082855225e-01 + <_> + + 0 -1 672 -1.1688120430335402e-03 + + 3.8655120134353638e-01 5.4836612939834595e-01 + <_> + + 0 -1 673 2.8070670086890459e-03 + + 5.1285791397094727e-01 2.7014800906181335e-01 + <_> + + 0 -1 674 4.7365209320560098e-04 + + 4.0515819191932678e-01 5.3874611854553223e-01 + <_> + + 0 -1 675 1.1741080321371555e-02 + + 5.2959501743316650e-01 3.7194138765335083e-01 + <_> + + 0 -1 676 3.1833238899707794e-03 + + 4.7894069552421570e-01 6.8951261043548584e-01 + <_> + + 0 -1 677 7.0241501089185476e-04 + + 5.3844892978668213e-01 3.9180809259414673e-01 + <_> + 102 + 5.0169731140136719e+01 + + <_> + + 0 -1 678 1.7059929668903351e-02 + + 3.9485278725624084e-01 7.1425348520278931e-01 + <_> + + 0 -1 679 2.1840840578079224e-02 + + 3.3703160285949707e-01 6.0900169610977173e-01 + <_> + + 0 -1 680 2.4520049919374287e-04 + + 3.5005760192871094e-01 5.9879022836685181e-01 + <_> + + 0 -1 681 8.3272606134414673e-03 + + 3.2675281167030334e-01 5.6972408294677734e-01 + <_> + + 0 -1 682 5.7148298947140574e-04 + + 3.0445998907089233e-01 5.5316567420959473e-01 + <_> + + 0 -1 683 6.7373987985774875e-04 + + 3.6500120162963867e-01 5.6726312637329102e-01 + <_> + + 0 -1 684 3.4681590477703139e-05 + + 3.3135411143302917e-01 5.3887271881103516e-01 + <_> + + 0 -1 685 -5.8563398197293282e-03 + + 2.6979428529739380e-01 5.4987788200378418e-01 + <_> + + 0 -1 686 8.5102273151278496e-03 + + 5.2693581581115723e-01 2.7628791332244873e-01 + <_> + + 0 -1 687 -6.9817207753658295e-02 + + 2.9096031188964844e-01 5.2592468261718750e-01 + <_> + + 0 -1 688 -8.6113670840859413e-04 + + 5.8925771713256836e-01 4.0736979246139526e-01 + <_> + + 0 -1 689 9.7149249631911516e-04 + + 3.5235640406608582e-01 5.4158622026443481e-01 + <_> + + 0 -1 690 -1.4727490452060010e-05 + + 5.4230177402496338e-01 3.5031560063362122e-01 + <_> + + 0 -1 691 4.8420291393995285e-02 + + 5.1939457654953003e-01 3.4111958742141724e-01 + <_> + + 0 -1 692 1.3257140526548028e-03 + + 3.1577691435813904e-01 5.3353762626647949e-01 + <_> + + 0 -1 693 1.4922149603080470e-05 + + 4.4512999057769775e-01 5.5365538597106934e-01 + <_> + + 0 -1 694 -2.7173398993909359e-03 + + 3.0317419767379761e-01 5.2480888366699219e-01 + <_> + + 0 -1 695 2.9219500720500946e-03 + + 4.7814530134201050e-01 6.6060417890548706e-01 + <_> + + 0 -1 696 -1.9804988987743855e-03 + + 3.1863081455230713e-01 5.2876251935958862e-01 + <_> + + 0 -1 697 -4.0012109093368053e-03 + + 6.4135968685150146e-01 4.7499281167984009e-01 + <_> + + 0 -1 698 -4.3491991236805916e-03 + + 1.5074980258941650e-01 5.0989967584609985e-01 + <_> + + 0 -1 699 1.3490889687091112e-03 + + 4.3161588907241821e-01 5.8811670541763306e-01 + <_> + + 0 -1 700 1.8597070127725601e-02 + + 4.7355538606643677e-01 9.0897941589355469e-01 + <_> + + 0 -1 701 -1.8562379991635680e-03 + + 3.5531890392303467e-01 5.5778372287750244e-01 + <_> + + 0 -1 702 2.2940430790185928e-03 + + 4.5000949501991272e-01 6.5808779001235962e-01 + <_> + + 0 -1 703 2.9982850537635386e-04 + + 5.6292420625686646e-01 3.9758789539337158e-01 + <_> + + 0 -1 704 3.5455459728837013e-03 + + 5.3815472126007080e-01 3.6054858565330505e-01 + <_> + + 0 -1 705 9.6104722470045090e-03 + + 5.2559971809387207e-01 1.7967459559440613e-01 + <_> + + 0 -1 706 -6.2783220782876015e-03 + + 2.2728569805622101e-01 5.1140302419662476e-01 + <_> + + 0 -1 707 3.4598479978740215e-03 + + 4.6263080835342407e-01 6.6082191467285156e-01 + <_> + + 0 -1 708 -1.3112019514665008e-03 + + 6.3175398111343384e-01 4.4368579983711243e-01 + <_> + + 0 -1 709 2.6876179035753012e-03 + + 5.4211097955703735e-01 4.0540221333503723e-01 + <_> + + 0 -1 710 3.9118169806897640e-03 + + 5.3584778308868408e-01 3.2734549045562744e-01 + <_> + + 0 -1 711 -1.4206450432538986e-02 + + 7.7935767173767090e-01 4.9757811427116394e-01 + <_> + + 0 -1 712 7.1705528534948826e-04 + + 5.2973198890686035e-01 3.5609039664268494e-01 + <_> + + 0 -1 713 1.6635019565001130e-03 + + 4.6780940890312195e-01 5.8164817094802856e-01 + <_> + + 0 -1 714 3.3686188980937004e-03 + + 5.2767342329025269e-01 3.4464201331138611e-01 + <_> + + 0 -1 715 1.2799530290067196e-02 + + 4.8346799612045288e-01 7.4721592664718628e-01 + <_> + + 0 -1 716 3.3901201095432043e-03 + + 4.5118591189384460e-01 6.4017212390899658e-01 + <_> + + 0 -1 717 4.7070779837667942e-03 + + 5.3356587886810303e-01 3.5552209615707397e-01 + <_> + + 0 -1 718 1.4819339849054813e-03 + + 4.2507070302963257e-01 5.7727241516113281e-01 + <_> + + 0 -1 719 -6.9995759986341000e-03 + + 3.0033200979232788e-01 5.2929002046585083e-01 + <_> + + 0 -1 720 1.5939010307192802e-02 + + 5.0673192739486694e-01 1.6755819320678711e-01 + <_> + + 0 -1 721 7.6377349905669689e-03 + + 4.7950699925422668e-01 7.0856010913848877e-01 + <_> + + 0 -1 722 6.7334040068089962e-03 + + 5.1331132650375366e-01 2.1624700725078583e-01 + <_> + + 0 -1 723 -1.2858809903264046e-02 + + 1.9388419389724731e-01 5.2513718605041504e-01 + <_> + + 0 -1 724 -6.2270800117403269e-04 + + 5.6865382194519043e-01 4.1978681087493896e-01 + <_> + + 0 -1 725 -5.2651681471616030e-04 + + 4.2241689562797546e-01 5.4296958446502686e-01 + <_> + + 0 -1 726 1.1075099930167198e-02 + + 5.1137751340866089e-01 2.5145179033279419e-01 + <_> + + 0 -1 727 -3.6728251725435257e-02 + + 7.1946620941162109e-01 4.8496189713478088e-01 + <_> + + 0 -1 728 -2.8207109426148236e-04 + + 3.8402619957923889e-01 5.3944462537765503e-01 + <_> + + 0 -1 729 -2.7489690110087395e-03 + + 5.9370887279510498e-01 4.5691820979118347e-01 + <_> + + 0 -1 730 1.0047519579529762e-02 + + 5.1385760307312012e-01 2.8022980690002441e-01 + <_> + + 0 -1 731 -8.1497840583324432e-03 + + 6.0900372266769409e-01 4.6361210942268372e-01 + <_> + + 0 -1 732 -6.8833888508379459e-03 + + 3.4586110711097717e-01 5.2546602487564087e-01 + <_> + + 0 -1 733 -1.4039360394235700e-05 + + 5.6931042671203613e-01 4.0820831060409546e-01 + <_> + + 0 -1 734 1.5498419525101781e-03 + + 4.3505370616912842e-01 5.8065170049667358e-01 + <_> + + 0 -1 735 -6.7841499112546444e-03 + + 1.4688730239868164e-01 5.1827752590179443e-01 + <_> + + 0 -1 736 2.1705629478674382e-04 + + 5.2935242652893066e-01 3.4561741352081299e-01 + <_> + + 0 -1 737 3.1198898795992136e-04 + + 4.6524509787559509e-01 5.9424138069152832e-01 + <_> + + 0 -1 738 5.4507530294358730e-03 + + 4.6535089612007141e-01 7.0248460769653320e-01 + <_> + + 0 -1 739 -2.5818689027801156e-04 + + 5.4972952604293823e-01 3.7689670920372009e-01 + <_> + + 0 -1 740 -1.7442539334297180e-02 + + 3.9190879464149475e-01 5.4574978351593018e-01 + <_> + + 0 -1 741 -4.5343529433012009e-02 + + 1.6313570737838745e-01 5.1549088954925537e-01 + <_> + + 0 -1 742 1.9190689781680703e-03 + + 5.1458978652954102e-01 2.7918958663940430e-01 + <_> + + 0 -1 743 -6.0177869163453579e-03 + + 6.5176361799240112e-01 4.7563329339027405e-01 + <_> + + 0 -1 744 -4.0720738470554352e-03 + + 5.5146527290344238e-01 4.0926858782768250e-01 + <_> + + 0 -1 745 3.9855059003457427e-04 + + 3.1652408838272095e-01 5.2855509519577026e-01 + <_> + + 0 -1 746 -6.5418570302426815e-03 + + 6.8533778190612793e-01 4.6528089046478271e-01 + <_> + + 0 -1 747 3.4845089539885521e-03 + + 5.4845881462097168e-01 4.5027598738670349e-01 + <_> + + 0 -1 748 -1.3696780428290367e-02 + + 6.3957798480987549e-01 4.5725551247596741e-01 + <_> + + 0 -1 749 -1.7347140237689018e-02 + + 2.7510729432106018e-01 5.1816147565841675e-01 + <_> + + 0 -1 750 -4.0885428898036480e-03 + + 3.3256360888481140e-01 5.1949840784072876e-01 + <_> + + 0 -1 751 -9.4687901437282562e-03 + + 5.9422808885574341e-01 4.8518198728561401e-01 + <_> + + 0 -1 752 1.7084840219467878e-03 + + 4.1671109199523926e-01 5.5198061466217041e-01 + <_> + + 0 -1 753 9.4809094443917274e-03 + + 5.4338949918746948e-01 4.2085149884223938e-01 + <_> + + 0 -1 754 -4.7389650717377663e-03 + + 6.4071899652481079e-01 4.5606550574302673e-01 + <_> + + 0 -1 755 6.5761050209403038e-03 + + 5.2145552635192871e-01 2.2582270205020905e-01 + <_> + + 0 -1 756 -2.1690549328923225e-03 + + 3.1515279412269592e-01 5.1567047834396362e-01 + <_> + + 0 -1 757 1.4660170301795006e-02 + + 4.8708370327949524e-01 6.6899412870407104e-01 + <_> + + 0 -1 758 1.7231999663636088e-04 + + 3.5697489976882935e-01 5.2510780096054077e-01 + <_> + + 0 -1 759 -2.1803760901093483e-02 + + 8.8259208202362061e-01 4.9663299322128296e-01 + <_> + + 0 -1 760 -9.4736106693744659e-02 + + 1.4461620151996613e-01 5.0611138343811035e-01 + <_> + + 0 -1 761 5.5825551971793175e-03 + + 5.3964787721633911e-01 4.2380660772323608e-01 + <_> + + 0 -1 762 1.9517090404406190e-03 + + 4.1704109311103821e-01 5.4977869987487793e-01 + <_> + + 0 -1 763 1.2149900197982788e-02 + + 4.6983671188354492e-01 5.6642740964889526e-01 + <_> + + 0 -1 764 -7.5169620104134083e-03 + + 6.2677729129791260e-01 4.4631358981132507e-01 + <_> + + 0 -1 765 -7.1667909622192383e-02 + + 3.0970111489295959e-01 5.2210032939910889e-01 + <_> + + 0 -1 766 -8.8292419910430908e-02 + + 8.1123888492584229e-02 5.0063651800155640e-01 + <_> + + 0 -1 767 3.1063079833984375e-02 + + 5.1555037498474121e-01 1.2822559475898743e-01 + <_> + + 0 -1 768 4.6621840447187424e-02 + + 4.6997779607772827e-01 7.3639607429504395e-01 + <_> + + 0 -1 769 -1.2189489789307117e-02 + + 3.9205300807952881e-01 5.5189967155456543e-01 + <_> + + 0 -1 770 1.3016110286116600e-02 + + 5.2606582641601562e-01 3.6851361393928528e-01 + <_> + + 0 -1 771 -3.4952899441123009e-03 + + 6.3392949104309082e-01 4.7162809967994690e-01 + <_> + + 0 -1 772 -4.4015039748046547e-05 + + 5.3330272436141968e-01 3.7761849164962769e-01 + <_> + + 0 -1 773 -1.0966490209102631e-01 + + 1.7653420567512512e-01 5.1983469724655151e-01 + <_> + + 0 -1 774 -9.0279558207839727e-04 + + 5.3241598606109619e-01 3.8389080762863159e-01 + <_> + + 0 -1 775 7.1126641705632210e-04 + + 4.6479299664497375e-01 5.7552242279052734e-01 + <_> + + 0 -1 776 -3.1250279862433672e-03 + + 3.2367089390754700e-01 5.1667708158493042e-01 + <_> + + 0 -1 777 2.4144679773598909e-03 + + 4.7874391078948975e-01 6.4597177505493164e-01 + <_> + + 0 -1 778 4.4391240226104856e-04 + + 4.4093081355094910e-01 6.0102558135986328e-01 + <_> + + 0 -1 779 -2.2611189342569560e-04 + + 4.0381139516830444e-01 5.4932558536529541e-01 + <_> + 135 + 6.6669120788574219e+01 + + <_> + + 0 -1 780 -4.6901289373636246e-02 + + 6.6001719236373901e-01 3.7438011169433594e-01 + <_> + + 0 -1 781 -1.4568349579349160e-03 + + 5.7839912176132202e-01 3.4377971291542053e-01 + <_> + + 0 -1 782 5.5598369799554348e-03 + + 3.6222669482231140e-01 5.9082162380218506e-01 + <_> + + 0 -1 783 7.3170487303286791e-04 + + 5.5004191398620605e-01 2.8735581040382385e-01 + <_> + + 0 -1 784 1.3318009441718459e-03 + + 2.6731699705123901e-01 5.4310190677642822e-01 + <_> + + 0 -1 785 2.4347059661522508e-04 + + 3.8550278544425964e-01 5.7413887977600098e-01 + <_> + + 0 -1 786 -3.0512469820678234e-03 + + 5.5032098293304443e-01 3.4628450870513916e-01 + <_> + + 0 -1 787 -6.8657199153676629e-04 + + 3.2912218570709229e-01 5.4295092821121216e-01 + <_> + + 0 -1 788 1.4668200165033340e-03 + + 3.5883820056915283e-01 5.3518110513687134e-01 + <_> + + 0 -1 789 3.2021870720200241e-04 + + 4.2968419194221497e-01 5.7002341747283936e-01 + <_> + + 0 -1 790 7.4122188379988074e-04 + + 5.2821648120880127e-01 3.3668708801269531e-01 + <_> + + 0 -1 791 3.8330298848450184e-03 + + 4.5595678687095642e-01 6.2573361396789551e-01 + <_> + + 0 -1 792 -1.5456439927220345e-02 + + 2.3501169681549072e-01 5.1294529438018799e-01 + <_> + + 0 -1 793 2.6796779129654169e-03 + + 5.3294152021408081e-01 4.1550621390342712e-01 + <_> + + 0 -1 794 2.8296569362282753e-03 + + 4.2730879783630371e-01 5.8045381307601929e-01 + <_> + + 0 -1 795 -3.9444249123334885e-03 + + 2.9126119613647461e-01 5.2026861906051636e-01 + <_> + + 0 -1 796 2.7179559692740440e-03 + + 5.3076881170272827e-01 3.5856771469116211e-01 + <_> + + 0 -1 797 5.9077627956867218e-03 + + 4.7037750482559204e-01 5.9415858983993530e-01 + <_> + + 0 -1 798 -4.2240349575877190e-03 + + 2.1415670216083527e-01 5.0887960195541382e-01 + <_> + + 0 -1 799 4.0725888684391975e-03 + + 4.7664138674736023e-01 6.8410611152648926e-01 + <_> + + 0 -1 800 1.0149530135095119e-02 + + 5.3607988357543945e-01 3.7484970688819885e-01 + <_> + + 0 -1 801 -1.8864999583456665e-04 + + 5.7201302051544189e-01 3.8538050651550293e-01 + <_> + + 0 -1 802 -4.8864358104765415e-03 + + 3.6931228637695312e-01 5.3409588336944580e-01 + <_> + + 0 -1 803 2.6158479973673820e-02 + + 4.9623748660087585e-01 6.0599899291992188e-01 + <_> + + 0 -1 804 4.8560759751126170e-04 + + 4.4389459490776062e-01 6.0124689340591431e-01 + <_> + + 0 -1 805 1.1268709786236286e-02 + + 5.2442502975463867e-01 1.8403880298137665e-01 + <_> + + 0 -1 806 -2.8114619199186563e-03 + + 6.0602837800979614e-01 4.4098970293998718e-01 + <_> + + 0 -1 807 -5.6112729944288731e-03 + + 3.8911709189414978e-01 5.5892372131347656e-01 + <_> + + 0 -1 808 8.5680093616247177e-03 + + 5.0693458318710327e-01 2.0626190304756165e-01 + <_> + + 0 -1 809 -3.8172779022715986e-04 + + 5.8822017908096313e-01 4.1926109790802002e-01 + <_> + + 0 -1 810 -1.7680290329735726e-04 + + 5.5336058139801025e-01 4.0033689141273499e-01 + <_> + + 0 -1 811 6.5112537704408169e-03 + + 3.3101469278335571e-01 5.4441910982131958e-01 + <_> + + 0 -1 812 -6.5948683186434209e-05 + + 5.4338318109512329e-01 3.9449059963226318e-01 + <_> + + 0 -1 813 6.9939051754772663e-03 + + 5.6003582477569580e-01 4.1927140951156616e-01 + <_> + + 0 -1 814 -4.6744439750909805e-03 + + 6.6854667663574219e-01 4.6049609780311584e-01 + <_> + + 0 -1 815 1.1589850299060345e-02 + + 5.3571212291717529e-01 2.9268300533294678e-01 + <_> + + 0 -1 816 1.3007840141654015e-02 + + 4.6798178553581238e-01 7.3074632883071899e-01 + <_> + + 0 -1 817 -1.1008579749614000e-03 + + 3.9375010132789612e-01 5.4150652885437012e-01 + <_> + + 0 -1 818 6.0472649056464434e-04 + + 4.2423760890960693e-01 5.6040412187576294e-01 + <_> + + 0 -1 819 -1.4494840055704117e-02 + + 3.6312100291252136e-01 5.2931827306747437e-01 + <_> + + 0 -1 820 -5.3056948818266392e-03 + + 6.8604522943496704e-01 4.6218210458755493e-01 + <_> + + 0 -1 821 -8.1829127157106996e-04 + + 3.9440968632698059e-01 5.4204392433166504e-01 + <_> + + 0 -1 822 -1.9077520817518234e-02 + + 1.9626219570636749e-01 5.0378918647766113e-01 + <_> + + 0 -1 823 3.5549470339901745e-04 + + 4.0862590074539185e-01 5.6139731407165527e-01 + <_> + + 0 -1 824 1.9679730758070946e-03 + + 4.4891211390495300e-01 5.9261232614517212e-01 + <_> + + 0 -1 825 6.9189141504466534e-03 + + 5.3359258174896240e-01 3.7283858656883240e-01 + <_> + + 0 -1 826 2.9872779268771410e-03 + + 5.1113212108612061e-01 2.9756438732147217e-01 + <_> + + 0 -1 827 -6.2264618463814259e-03 + + 5.5414897203445435e-01 4.8245379328727722e-01 + <_> + + 0 -1 828 1.3353300280869007e-02 + + 4.5864239335060120e-01 6.4147979021072388e-01 + <_> + + 0 -1 829 3.3505238592624664e-02 + + 5.3924250602722168e-01 3.4299948811531067e-01 + <_> + + 0 -1 830 -2.5294460356235504e-03 + + 1.7037139832973480e-01 5.0133150815963745e-01 + <_> + + 0 -1 831 -1.2801629491150379e-03 + + 5.3054618835449219e-01 4.6974050998687744e-01 + <_> + + 0 -1 832 7.0687388069927692e-03 + + 4.6155458688735962e-01 6.4365047216415405e-01 + <_> + + 0 -1 833 9.6880499040707946e-04 + + 4.8335990309715271e-01 6.0438942909240723e-01 + <_> + + 0 -1 834 3.9647659286856651e-03 + + 5.1876372098922729e-01 3.2318168878555298e-01 + <_> + + 0 -1 835 -2.2057730704545975e-02 + + 4.0792569518089294e-01 5.2009809017181396e-01 + <_> + + 0 -1 836 -6.6906312713399529e-04 + + 5.3316092491149902e-01 3.8156008720397949e-01 + <_> + + 0 -1 837 -6.7009328631684184e-04 + + 5.6554222106933594e-01 4.6889019012451172e-01 + <_> + + 0 -1 838 7.4284552829340100e-04 + + 4.5343810319900513e-01 6.2874001264572144e-01 + <_> + + 0 -1 839 2.2227810695767403e-03 + + 5.3506332635879517e-01 3.3036559820175171e-01 + <_> + + 0 -1 840 -5.4130521602928638e-03 + + 1.1136870086193085e-01 5.0054347515106201e-01 + <_> + + 0 -1 841 -1.4520040167553816e-05 + + 5.6287378072738647e-01 4.3251338601112366e-01 + <_> + + 0 -1 842 2.3369169502984732e-04 + + 4.1658350825309753e-01 5.4477912187576294e-01 + <_> + + 0 -1 843 4.2894547805190086e-03 + + 4.8603910207748413e-01 6.7786490917205811e-01 + <_> + + 0 -1 844 5.9103150852024555e-03 + + 5.2623051404953003e-01 3.6121138930320740e-01 + <_> + + 0 -1 845 1.2900539673864841e-02 + + 5.3193771839141846e-01 3.2502880692481995e-01 + <_> + + 0 -1 846 4.6982979401946068e-03 + + 4.6182450652122498e-01 6.6659259796142578e-01 + <_> + + 0 -1 847 1.0439859703183174e-02 + + 5.5056709051132202e-01 3.8836041092872620e-01 + <_> + + 0 -1 848 3.0443191062659025e-03 + + 4.6978530287742615e-01 7.3018449544906616e-01 + <_> + + 0 -1 849 -6.1593751888722181e-04 + + 3.8308390974998474e-01 5.4649841785430908e-01 + <_> + + 0 -1 850 -3.4247159492224455e-03 + + 2.5663000345230103e-01 5.0895309448242188e-01 + <_> + + 0 -1 851 -9.3538565561175346e-03 + + 6.4699661731719971e-01 4.9407958984375000e-01 + <_> + + 0 -1 852 5.2338998764753342e-02 + + 4.7459828853607178e-01 7.8787708282470703e-01 + <_> + + 0 -1 853 3.5765620414167643e-03 + + 5.3066647052764893e-01 2.7484980225563049e-01 + <_> + + 0 -1 854 7.1555317845195532e-04 + + 5.4131257534027100e-01 4.0419089794158936e-01 + <_> + + 0 -1 855 -1.0516679845750332e-02 + + 6.1585122346878052e-01 4.8152831196784973e-01 + <_> + + 0 -1 856 7.7347927726805210e-03 + + 4.6958059072494507e-01 7.0289808511734009e-01 + <_> + + 0 -1 857 -4.3226778507232666e-03 + + 2.8495660424232483e-01 5.3046840429306030e-01 + <_> + + 0 -1 858 -2.5534399319440126e-03 + + 7.0569849014282227e-01 4.6888920664787292e-01 + <_> + + 0 -1 859 1.0268510231981054e-04 + + 3.9029321074485779e-01 5.5734640359878540e-01 + <_> + + 0 -1 860 7.1395188570022583e-06 + + 3.6842319369316101e-01 5.2639877796173096e-01 + <_> + + 0 -1 861 -1.6711989883333445e-03 + + 3.8491758704185486e-01 5.3872710466384888e-01 + <_> + + 0 -1 862 4.9260449595749378e-03 + + 4.7297719120979309e-01 7.4472510814666748e-01 + <_> + + 0 -1 863 4.3908702209591866e-03 + + 4.8091810941696167e-01 5.5919218063354492e-01 + <_> + + 0 -1 864 -1.7793629318475723e-02 + + 6.9036781787872314e-01 4.6769270300865173e-01 + <_> + + 0 -1 865 2.0469669252634048e-03 + + 5.3706902265548706e-01 3.3081620931625366e-01 + <_> + + 0 -1 866 2.9891489073634148e-02 + + 5.1398652791976929e-01 3.3090591430664062e-01 + <_> + + 0 -1 867 1.5494900289922953e-03 + + 4.6602371335029602e-01 6.0783427953720093e-01 + <_> + + 0 -1 868 1.4956969534978271e-03 + + 4.4048359990119934e-01 5.8639198541641235e-01 + <_> + + 0 -1 869 9.5885928021743894e-04 + + 5.4359710216522217e-01 4.2085230350494385e-01 + <_> + + 0 -1 870 4.9643701640889049e-04 + + 5.3705781698226929e-01 4.0006220340728760e-01 + <_> + + 0 -1 871 -2.7280810754746199e-03 + + 5.6594127416610718e-01 4.2596429586410522e-01 + <_> + + 0 -1 872 2.3026480339467525e-03 + + 5.1616579294204712e-01 3.3508691191673279e-01 + <_> + + 0 -1 873 2.5151631236076355e-01 + + 4.8696619272232056e-01 7.1473097801208496e-01 + <_> + + 0 -1 874 -4.6328022144734859e-03 + + 2.7274489402770996e-01 5.0837898254394531e-01 + <_> + + 0 -1 875 -4.0434490889310837e-02 + + 6.8514388799667358e-01 5.0217670202255249e-01 + <_> + + 0 -1 876 1.4972220014897175e-05 + + 4.2844650149345398e-01 5.5225551128387451e-01 + <_> + + 0 -1 877 -2.4050309730228037e-04 + + 4.2261189222335815e-01 5.3900748491287231e-01 + <_> + + 0 -1 878 2.3657839745283127e-02 + + 4.7446319460868835e-01 7.5043660402297974e-01 + <_> + + 0 -1 879 -8.1449104472994804e-03 + + 4.2450588941574097e-01 5.5383628606796265e-01 + <_> + + 0 -1 880 -3.6992130335420370e-03 + + 5.9523570537567139e-01 4.5297130942344666e-01 + <_> + + 0 -1 881 -6.7718601785600185e-03 + + 4.1377940773963928e-01 5.4733997583389282e-01 + <_> + + 0 -1 882 4.2669530957937241e-03 + + 4.4841149449348450e-01 5.7979941368103027e-01 + <_> + + 0 -1 883 1.7791989957913756e-03 + + 5.6248587369918823e-01 4.4324448704719543e-01 + <_> + + 0 -1 884 1.6774770338088274e-03 + + 4.6377518773078918e-01 6.3642418384552002e-01 + <_> + + 0 -1 885 1.1732629500329494e-03 + + 4.5445030927658081e-01 5.9144157171249390e-01 + <_> + + 0 -1 886 8.6998171173036098e-04 + + 5.3347527980804443e-01 3.8859179615974426e-01 + <_> + + 0 -1 887 7.6378340600058436e-04 + + 5.3985852003097534e-01 3.7449419498443604e-01 + <_> + + 0 -1 888 1.5684569370932877e-04 + + 4.3178731203079224e-01 5.6146162748336792e-01 + <_> + + 0 -1 889 -2.1511370316147804e-02 + + 1.7859250307083130e-01 5.1855427026748657e-01 + <_> + + 0 -1 890 1.3081369979772717e-04 + + 4.3424990773200989e-01 5.6828498840332031e-01 + <_> + + 0 -1 891 2.1992040798068047e-02 + + 5.1617169380187988e-01 2.3793940246105194e-01 + <_> + + 0 -1 892 -8.0136500764638186e-04 + + 5.9867632389068604e-01 4.4664269685745239e-01 + <_> + + 0 -1 893 -8.2736099138855934e-03 + + 4.1082179546356201e-01 5.2510571479797363e-01 + <_> + + 0 -1 894 3.6831789184361696e-03 + + 5.1738142967224121e-01 3.3975180983543396e-01 + <_> + + 0 -1 895 -7.9525681212544441e-03 + + 6.8889832496643066e-01 4.8459240794181824e-01 + <_> + + 0 -1 896 1.5382299898192286e-03 + + 5.1785671710968018e-01 3.4541139006614685e-01 + <_> + + 0 -1 897 -1.4043530449271202e-02 + + 1.6784210503101349e-01 5.1886677742004395e-01 + <_> + + 0 -1 898 1.4315890148282051e-03 + + 4.3682569265365601e-01 5.6557738780975342e-01 + <_> + + 0 -1 899 -3.4014228731393814e-02 + + 7.8022962808609009e-01 4.9592170119285583e-01 + <_> + + 0 -1 900 -1.2027299962937832e-02 + + 1.5851010382175446e-01 5.0322318077087402e-01 + <_> + + 0 -1 901 1.3316619396209717e-01 + + 5.1633048057556152e-01 2.7551281452178955e-01 + <_> + + 0 -1 902 -1.5221949433907866e-03 + + 3.7283179163932800e-01 5.2145522832870483e-01 + <_> + + 0 -1 903 -9.3929271679371595e-04 + + 5.8383792638778687e-01 4.5111650228500366e-01 + <_> + + 0 -1 904 2.7719739824533463e-02 + + 4.7282868623733521e-01 7.3315447568893433e-01 + <_> + + 0 -1 905 3.1030150130391121e-03 + + 5.3022021055221558e-01 4.1015630960464478e-01 + <_> + + 0 -1 906 7.7861219644546509e-02 + + 4.9983340501785278e-01 1.2729619443416595e-01 + <_> + + 0 -1 907 -1.5854939818382263e-02 + + 5.0833359360694885e-02 5.1656562089920044e-01 + <_> + + 0 -1 908 -4.9725300632417202e-03 + + 6.7981338500976562e-01 4.6842318773269653e-01 + <_> + + 0 -1 909 -9.7676506265997887e-04 + + 6.0107719898223877e-01 4.7889319062232971e-01 + <_> + + 0 -1 910 -2.4647710379213095e-03 + + 3.3933979272842407e-01 5.2205038070678711e-01 + <_> + + 0 -1 911 -6.7937700077891350e-03 + + 4.3651369214057922e-01 5.2396631240844727e-01 + <_> + + 0 -1 912 3.2608021050691605e-02 + + 5.0527238845825195e-01 2.4252149462699890e-01 + <_> + + 0 -1 913 -5.8514421107247472e-04 + + 5.7339739799499512e-01 4.7585740685462952e-01 + <_> + + 0 -1 914 -2.9632600024342537e-02 + + 3.8922891020774841e-01 5.2635979652404785e-01 + <_> + 137 + 6.7698921203613281e+01 + + <_> + + 0 -1 915 4.6550851315259933e-02 + + 3.2769501209259033e-01 6.2405228614807129e-01 + <_> + + 0 -1 916 7.9537127166986465e-03 + + 4.2564851045608521e-01 6.9429391622543335e-01 + <_> + + 0 -1 917 6.8221561377868056e-04 + + 3.7114870548248291e-01 5.9007328748703003e-01 + <_> + + 0 -1 918 -1.9348249770700932e-04 + + 2.0411339402198792e-01 5.3005450963973999e-01 + <_> + + 0 -1 919 -2.6710508973337710e-04 + + 5.4161262512207031e-01 3.1031790375709534e-01 + <_> + + 0 -1 920 2.7818060480058193e-03 + + 5.2778327465057373e-01 3.4670698642730713e-01 + <_> + + 0 -1 921 -4.6779078547842801e-04 + + 5.3082311153411865e-01 3.2944920659065247e-01 + <_> + + 0 -1 922 -3.0335160772665404e-05 + + 5.7738727331161499e-01 3.8520970940589905e-01 + <_> + + 0 -1 923 7.8038009814918041e-04 + + 4.3174389004707336e-01 6.1500579118728638e-01 + <_> + + 0 -1 924 -4.2553851380944252e-03 + + 2.9339039325714111e-01 5.3242927789688110e-01 + <_> + + 0 -1 925 -2.4735610350035131e-04 + + 5.4688447713851929e-01 3.8430300354957581e-01 + <_> + + 0 -1 926 -1.4724259381182492e-04 + + 4.2815428972244263e-01 5.7555872201919556e-01 + <_> + + 0 -1 927 1.1864770203828812e-03 + + 3.7473011016845703e-01 5.4714661836624146e-01 + <_> + + 0 -1 928 2.3936580400913954e-03 + + 4.5377838611602783e-01 6.1115288734436035e-01 + <_> + + 0 -1 929 -1.5390539774671197e-03 + + 2.9713419079780579e-01 5.1895380020141602e-01 + <_> + + 0 -1 930 -7.1968790143728256e-03 + + 6.6990667581558228e-01 4.7264769673347473e-01 + <_> + + 0 -1 931 -4.1499789222143590e-04 + + 3.3849540352821350e-01 5.2603179216384888e-01 + <_> + + 0 -1 932 4.4359830208122730e-03 + + 5.3991222381591797e-01 3.9201408624649048e-01 + <_> + + 0 -1 933 2.6606200262904167e-03 + + 4.4825780391693115e-01 6.1196178197860718e-01 + <_> + + 0 -1 934 -1.5287200221791863e-03 + + 3.7112379074096680e-01 5.3402662277221680e-01 + <_> + + 0 -1 935 -4.7397250309586525e-03 + + 6.0310882329940796e-01 4.4551450014114380e-01 + <_> + + 0 -1 936 -1.4829129911959171e-02 + + 2.8387540578842163e-01 5.3418618440628052e-01 + <_> + + 0 -1 937 9.2275557108223438e-04 + + 5.2095472812652588e-01 3.3616539835929871e-01 + <_> + + 0 -1 938 8.3529807627201080e-02 + + 5.1199698448181152e-01 8.1164449453353882e-02 + <_> + + 0 -1 939 -7.5633148662745953e-04 + + 3.3171200752258301e-01 5.1898312568664551e-01 + <_> + + 0 -1 940 9.8403859883546829e-03 + + 5.2475982904434204e-01 2.3349590599536896e-01 + <_> + + 0 -1 941 -1.5953830443322659e-03 + + 5.7500940561294556e-01 4.2956221103668213e-01 + <_> + + 0 -1 942 3.4766020689858124e-05 + + 4.3424451351165771e-01 5.5640292167663574e-01 + <_> + + 0 -1 943 2.9862910509109497e-02 + + 4.5791471004486084e-01 6.5791881084442139e-01 + <_> + + 0 -1 944 1.1325590312480927e-02 + + 5.2743119001388550e-01 3.6738881468772888e-01 + <_> + + 0 -1 945 -8.7828645482659340e-03 + + 7.1003687381744385e-01 4.6421670913696289e-01 + <_> + + 0 -1 946 4.3639959767460823e-03 + + 5.2792161703109741e-01 2.7058771252632141e-01 + <_> + + 0 -1 947 4.1804728098213673e-03 + + 5.0725251436233521e-01 2.4490830302238464e-01 + <_> + + 0 -1 948 -4.5668511302210391e-04 + + 4.2831051349639893e-01 5.5486911535263062e-01 + <_> + + 0 -1 949 -3.7140368949621916e-03 + + 5.5193877220153809e-01 4.1036531329154968e-01 + <_> + + 0 -1 950 -2.5304289534687996e-02 + + 6.8670022487640381e-01 4.8698890209197998e-01 + <_> + + 0 -1 951 -3.4454080741852522e-04 + + 3.7288740277290344e-01 5.2876931428909302e-01 + <_> + + 0 -1 952 -8.3935231668874621e-04 + + 6.0601520538330078e-01 4.6160620450973511e-01 + <_> + + 0 -1 953 1.7280049622058868e-02 + + 5.0496357679367065e-01 1.8198239803314209e-01 + <_> + + 0 -1 954 -6.3595077954232693e-03 + + 1.6312399506568909e-01 5.2327787876129150e-01 + <_> + + 0 -1 955 1.0298109846189618e-03 + + 4.4632780551910400e-01 6.1765491962432861e-01 + <_> + + 0 -1 956 1.0117109632119536e-03 + + 5.4733848571777344e-01 4.3006989359855652e-01 + <_> + + 0 -1 957 -1.0308800265192986e-02 + + 1.1669850349426270e-01 5.0008672475814819e-01 + <_> + + 0 -1 958 5.4682018235325813e-03 + + 4.7692871093750000e-01 6.7192137241363525e-01 + <_> + + 0 -1 959 -9.1696460731327534e-04 + + 3.4710898995399475e-01 5.1781648397445679e-01 + <_> + + 0 -1 960 2.3922820109874010e-03 + + 4.7852361202239990e-01 6.2163108587265015e-01 + <_> + + 0 -1 961 -7.5573818758130074e-03 + + 5.8147960901260376e-01 4.4100850820541382e-01 + <_> + + 0 -1 962 -7.7024032361805439e-04 + + 3.8780000805854797e-01 5.4657220840454102e-01 + <_> + + 0 -1 963 -8.7125990539789200e-03 + + 1.6600510478019714e-01 4.9958360195159912e-01 + <_> + + 0 -1 964 -1.0306320153176785e-02 + + 4.0933910012245178e-01 5.2742338180541992e-01 + <_> + + 0 -1 965 -2.0940979011356831e-03 + + 6.2061947584152222e-01 4.5722800493240356e-01 + <_> + + 0 -1 966 6.8099051713943481e-03 + + 5.5677592754364014e-01 4.1556000709533691e-01 + <_> + + 0 -1 967 -1.0746059706434608e-03 + + 5.6389278173446655e-01 4.3530249595642090e-01 + <_> + + 0 -1 968 2.1550289820879698e-03 + + 4.8262658715248108e-01 6.7497581243515015e-01 + <_> + + 0 -1 969 3.1742319464683533e-02 + + 5.0483798980712891e-01 1.8832489848136902e-01 + <_> + + 0 -1 970 -7.8382723033428192e-02 + + 2.3695489764213562e-01 5.2601581811904907e-01 + <_> + + 0 -1 971 5.7415119372308254e-03 + + 5.0488287210464478e-01 2.7764698863029480e-01 + <_> + + 0 -1 972 -2.9014600440859795e-03 + + 6.2386047840118408e-01 4.6933171153068542e-01 + <_> + + 0 -1 973 -2.6427931152284145e-03 + + 3.3141419291496277e-01 5.1697772741317749e-01 + <_> + + 0 -1 974 -1.0949660092592239e-01 + + 2.3800450563430786e-01 5.1834410429000854e-01 + <_> + + 0 -1 975 7.4075913289561868e-05 + + 4.0696358680725098e-01 5.3621500730514526e-01 + <_> + + 0 -1 976 -5.0593802006915212e-04 + + 5.5067062377929688e-01 4.3745940923690796e-01 + <_> + + 0 -1 977 -8.2131777890026569e-04 + + 5.5257099866867065e-01 4.2093759775161743e-01 + <_> + + 0 -1 978 -6.0276539443293586e-05 + + 5.4554748535156250e-01 4.7482660412788391e-01 + <_> + + 0 -1 979 6.8065142259001732e-03 + + 5.1579958200454712e-01 3.4245771169662476e-01 + <_> + + 0 -1 980 1.7202789895236492e-03 + + 5.0132077932357788e-01 6.3312637805938721e-01 + <_> + + 0 -1 981 -1.3016929733566940e-04 + + 5.5397182703018188e-01 4.2268699407577515e-01 + <_> + + 0 -1 982 -4.8016388900578022e-03 + + 4.4250950217247009e-01 5.4307800531387329e-01 + <_> + + 0 -1 983 -2.5399310979992151e-03 + + 7.1457821130752563e-01 4.6976050734519958e-01 + <_> + + 0 -1 984 -1.4278929447755218e-03 + + 4.0704450011253357e-01 5.3996050357818604e-01 + <_> + + 0 -1 985 -2.5142550468444824e-02 + + 7.8846907615661621e-01 4.7473520040512085e-01 + <_> + + 0 -1 986 -3.8899609353393316e-03 + + 4.2961919307708740e-01 5.5771100521087646e-01 + <_> + + 0 -1 987 4.3947459198534489e-03 + + 4.6931621432304382e-01 7.0239442586898804e-01 + <_> + + 0 -1 988 2.4678420275449753e-02 + + 5.2423220872879028e-01 3.8125100731849670e-01 + <_> + + 0 -1 989 3.8047678768634796e-02 + + 5.0117397308349609e-01 1.6878280043601990e-01 + <_> + + 0 -1 990 7.9424865543842316e-03 + + 4.8285821080207825e-01 6.3695681095123291e-01 + <_> + + 0 -1 991 -1.5110049862414598e-03 + + 5.9064859151840210e-01 4.4876679778099060e-01 + <_> + + 0 -1 992 6.4201741479337215e-03 + + 5.2410978078842163e-01 2.9905700683593750e-01 + <_> + + 0 -1 993 -2.9802159406244755e-03 + + 3.0414658784866333e-01 5.0784897804260254e-01 + <_> + + 0 -1 994 -7.4580078944563866e-04 + + 4.1281390190124512e-01 5.2568262815475464e-01 + <_> + + 0 -1 995 -1.0470950044691563e-02 + + 5.8083951473236084e-01 4.4942960143089294e-01 + <_> + + 0 -1 996 9.3369204550981522e-03 + + 5.2465528249740601e-01 2.6589488983154297e-01 + <_> + + 0 -1 997 2.7936900034546852e-02 + + 4.6749550104141235e-01 7.0872569084167480e-01 + <_> + + 0 -1 998 7.4277678504586220e-03 + + 5.4094868898391724e-01 3.7585180997848511e-01 + <_> + + 0 -1 999 -2.3584509268403053e-02 + + 3.7586399912834167e-01 5.2385509014129639e-01 + <_> + + 0 -1 1000 1.1452640173956752e-03 + + 4.3295788764953613e-01 5.8042472600936890e-01 + <_> + + 0 -1 1001 -4.3468660442158580e-04 + + 5.2806180715560913e-01 3.8730698823928833e-01 + <_> + + 0 -1 1002 1.0648540221154690e-02 + + 4.9021130800247192e-01 5.6812518835067749e-01 + <_> + + 0 -1 1003 -3.9418050437234342e-04 + + 5.5708801746368408e-01 4.3182510137557983e-01 + <_> + + 0 -1 1004 -1.3270479394122958e-04 + + 5.6584399938583374e-01 4.3435549736022949e-01 + <_> + + 0 -1 1005 -2.0125510636717081e-03 + + 6.0567390918731689e-01 4.5375239849090576e-01 + <_> + + 0 -1 1006 2.4854319635778666e-03 + + 5.3904771804809570e-01 4.1380101442337036e-01 + <_> + + 0 -1 1007 1.8237880431115627e-03 + + 4.3548288941383362e-01 5.7171887159347534e-01 + <_> + + 0 -1 1008 -1.6656659543514252e-02 + + 3.0109131336212158e-01 5.2161228656768799e-01 + <_> + + 0 -1 1009 8.0349558265879750e-04 + + 5.3001511096954346e-01 3.8183969259262085e-01 + <_> + + 0 -1 1010 3.4170378930866718e-03 + + 5.3280287981033325e-01 4.2414000630378723e-01 + <_> + + 0 -1 1011 -3.6222729249857366e-04 + + 5.4917281866073608e-01 4.1869771480560303e-01 + <_> + + 0 -1 1012 -1.1630020290613174e-01 + + 1.4407220482826233e-01 5.2264511585235596e-01 + <_> + + 0 -1 1013 -1.4695010147988796e-02 + + 7.7477252483367920e-01 4.7157171368598938e-01 + <_> + + 0 -1 1014 2.1972130052745342e-03 + + 5.3554338216781616e-01 3.3156448602676392e-01 + <_> + + 0 -1 1015 -4.6965209185145795e-04 + + 5.7672351598739624e-01 4.4581368565559387e-01 + <_> + + 0 -1 1016 6.5144998952746391e-03 + + 5.2156740427017212e-01 3.6478888988494873e-01 + <_> + + 0 -1 1017 2.1300060674548149e-02 + + 4.9942049384117126e-01 1.5679509937763214e-01 + <_> + + 0 -1 1018 3.1881409231573343e-03 + + 4.7422000765800476e-01 6.2872701883316040e-01 + <_> + + 0 -1 1019 9.0019777417182922e-04 + + 5.3479540348052979e-01 3.9437520503997803e-01 + <_> + + 0 -1 1020 -5.1772277802228928e-03 + + 6.7271918058395386e-01 5.0131380558013916e-01 + <_> + + 0 -1 1021 -4.3764649890363216e-03 + + 3.1066751480102539e-01 5.1287931203842163e-01 + <_> + + 0 -1 1022 2.6299960445612669e-03 + + 4.8863101005554199e-01 5.7552158832550049e-01 + <_> + + 0 -1 1023 -2.0458688959479332e-03 + + 6.0257941484451294e-01 4.5580768585205078e-01 + <_> + + 0 -1 1024 6.9482706487178802e-02 + + 5.2407479286193848e-01 2.1852590143680573e-01 + <_> + + 0 -1 1025 2.4048939347267151e-02 + + 5.0118672847747803e-01 2.0906220376491547e-01 + <_> + + 0 -1 1026 3.1095340382307768e-03 + + 4.8667120933532715e-01 7.1085482835769653e-01 + <_> + + 0 -1 1027 -1.2503260513767600e-03 + + 3.4078910946846008e-01 5.1561951637268066e-01 + <_> + + 0 -1 1028 -1.0281190043315291e-03 + + 5.5755722522735596e-01 4.4394320249557495e-01 + <_> + + 0 -1 1029 -8.8893622159957886e-03 + + 6.4020007848739624e-01 4.6204420924186707e-01 + <_> + + 0 -1 1030 -6.1094801640138030e-04 + + 3.7664419412612915e-01 5.4488998651504517e-01 + <_> + + 0 -1 1031 -5.7686357758939266e-03 + + 3.3186489343643188e-01 5.1336771249771118e-01 + <_> + + 0 -1 1032 1.8506490159779787e-03 + + 4.9035701155662537e-01 6.4069348573684692e-01 + <_> + + 0 -1 1033 -9.9799469113349915e-02 + + 1.5360510349273682e-01 5.0155621767044067e-01 + <_> + + 0 -1 1034 -3.5128349065780640e-01 + + 5.8823131024837494e-02 5.1743787527084351e-01 + <_> + + 0 -1 1035 -4.5244570821523666e-02 + + 6.9614887237548828e-01 4.6778729557991028e-01 + <_> + + 0 -1 1036 7.1481578052043915e-02 + + 5.1679861545562744e-01 1.0380929708480835e-01 + <_> + + 0 -1 1037 2.1895780228078365e-03 + + 4.2730781435966492e-01 5.5320608615875244e-01 + <_> + + 0 -1 1038 -5.9242651332169771e-04 + + 4.6389439702033997e-01 5.2763891220092773e-01 + <_> + + 0 -1 1039 1.6788389766588807e-03 + + 5.3016489744186401e-01 3.9320349693298340e-01 + <_> + + 0 -1 1040 -2.2163488902151585e-03 + + 5.6306940317153931e-01 4.7570338845252991e-01 + <_> + + 0 -1 1041 1.1568699846975505e-04 + + 4.3075358867645264e-01 5.5357027053833008e-01 + <_> + + 0 -1 1042 -7.2017288766801357e-03 + + 1.4448820054531097e-01 5.1930642127990723e-01 + <_> + + 0 -1 1043 8.9081272017210722e-04 + + 4.3844321370124817e-01 5.5936211347579956e-01 + <_> + + 0 -1 1044 1.9605009583756328e-04 + + 5.3404158353805542e-01 4.7059568762779236e-01 + <_> + + 0 -1 1045 5.2022142335772514e-04 + + 5.2138561010360718e-01 3.8100790977478027e-01 + <_> + + 0 -1 1046 9.4588572392240167e-04 + + 4.7694149613380432e-01 6.1307388544082642e-01 + <_> + + 0 -1 1047 9.1698471806012094e-05 + + 4.2450091242790222e-01 5.4293632507324219e-01 + <_> + + 0 -1 1048 2.1833200007677078e-03 + + 5.4577308893203735e-01 4.1910758614540100e-01 + <_> + + 0 -1 1049 -8.6039671441540122e-04 + + 5.7645887136459351e-01 4.4716599583625793e-01 + <_> + + 0 -1 1050 -1.3236239552497864e-02 + + 6.3728231191635132e-01 4.6950098872184753e-01 + <_> + + 0 -1 1051 4.3376701069064438e-04 + + 5.3178739547729492e-01 3.9458298683166504e-01 + <_> + 140 + 6.9229873657226562e+01 + + <_> + + 0 -1 1052 -2.4847149848937988e-02 + + 6.5555167198181152e-01 3.8733118772506714e-01 + <_> + + 0 -1 1053 6.1348611488938332e-03 + + 3.7480720877647400e-01 5.9739977121353149e-01 + <_> + + 0 -1 1054 6.4498498104512691e-03 + + 5.4254919290542603e-01 2.5488111376762390e-01 + <_> + + 0 -1 1055 6.3491211039945483e-04 + + 2.4624420702457428e-01 5.3872537612915039e-01 + <_> + + 0 -1 1056 1.4023890253156424e-03 + + 5.5943220853805542e-01 3.5286578536033630e-01 + <_> + + 0 -1 1057 3.0044000595808029e-04 + + 3.9585039019584656e-01 5.7659381628036499e-01 + <_> + + 0 -1 1058 1.0042409849120304e-04 + + 3.6989969015121460e-01 5.5349981784820557e-01 + <_> + + 0 -1 1059 -5.0841490738093853e-03 + + 3.7110909819602966e-01 5.5478000640869141e-01 + <_> + + 0 -1 1060 -1.9537260755896568e-02 + + 7.4927550554275513e-01 4.5792970061302185e-01 + <_> + + 0 -1 1061 -7.4532740654831287e-06 + + 5.6497871875762939e-01 3.9040699601173401e-01 + <_> + + 0 -1 1062 -3.6079459823668003e-03 + + 3.3810880780220032e-01 5.2678012847900391e-01 + <_> + + 0 -1 1063 2.0697501022368670e-03 + + 5.5192911624908447e-01 3.7143889069557190e-01 + <_> + + 0 -1 1064 -4.6463840408250690e-04 + + 5.6082147359848022e-01 4.1135668754577637e-01 + <_> + + 0 -1 1065 7.5490452582016587e-04 + + 3.5592061281204224e-01 5.3293561935424805e-01 + <_> + + 0 -1 1066 -9.8322238773107529e-04 + + 5.4147958755493164e-01 3.7632051110267639e-01 + <_> + + 0 -1 1067 -1.9940640777349472e-02 + + 6.3479030132293701e-01 4.7052991390228271e-01 + <_> + + 0 -1 1068 3.7680300883948803e-03 + + 3.9134898781776428e-01 5.5637162923812866e-01 + <_> + + 0 -1 1069 -9.4528505578637123e-03 + + 2.5548928976058960e-01 5.2151167392730713e-01 + <_> + + 0 -1 1070 2.9560849070549011e-03 + + 5.1746791601181030e-01 3.0639201402664185e-01 + <_> + + 0 -1 1071 9.1078737750649452e-03 + + 5.3884482383728027e-01 2.8859630227088928e-01 + <_> + + 0 -1 1072 1.8219229532405734e-03 + + 4.3360430002212524e-01 5.8521968126296997e-01 + <_> + + 0 -1 1073 1.4688739553093910e-02 + + 5.2873617410659790e-01 2.8700059652328491e-01 + <_> + + 0 -1 1074 -1.4387990348041058e-02 + + 7.0194488763809204e-01 4.6473708748817444e-01 + <_> + + 0 -1 1075 -1.8986649811267853e-02 + + 2.9865521192550659e-01 5.2470117807388306e-01 + <_> + + 0 -1 1076 1.1527639580890536e-03 + + 4.3234738707542419e-01 5.9316617250442505e-01 + <_> + + 0 -1 1077 1.0933670215308666e-02 + + 5.2868640422821045e-01 3.1303191184997559e-01 + <_> + + 0 -1 1078 -1.4932730235159397e-02 + + 2.6584190130233765e-01 5.0840771198272705e-01 + <_> + + 0 -1 1079 -2.9970539617352188e-04 + + 5.4635268449783325e-01 3.7407240271568298e-01 + <_> + + 0 -1 1080 4.1677621193230152e-03 + + 4.7034969925880432e-01 7.4357217550277710e-01 + <_> + + 0 -1 1081 -6.3905320130288601e-03 + + 2.0692589879035950e-01 5.2805382013320923e-01 + <_> + + 0 -1 1082 4.5029609464108944e-03 + + 5.1826488971710205e-01 3.4835430979728699e-01 + <_> + + 0 -1 1083 -9.2040365561842918e-03 + + 6.8037772178649902e-01 4.9323600530624390e-01 + <_> + + 0 -1 1084 8.1327259540557861e-02 + + 5.0583988428115845e-01 2.2530519962310791e-01 + <_> + + 0 -1 1085 -1.5079280734062195e-01 + + 2.9634249210357666e-01 5.2646797895431519e-01 + <_> + + 0 -1 1086 3.3179009333252907e-03 + + 4.6554958820343018e-01 7.0729321241378784e-01 + <_> + + 0 -1 1087 7.7402801252901554e-04 + + 4.7803479433059692e-01 5.6682378053665161e-01 + <_> + + 0 -1 1088 6.8199541419744492e-04 + + 4.2869961261749268e-01 5.7221567630767822e-01 + <_> + + 0 -1 1089 5.3671570494771004e-03 + + 5.2993071079254150e-01 3.1146219372749329e-01 + <_> + + 0 -1 1090 9.7018666565418243e-05 + + 3.6746388673782349e-01 5.2694618701934814e-01 + <_> + + 0 -1 1091 -1.2534089386463165e-01 + + 2.3514920473098755e-01 5.2457910776138306e-01 + <_> + + 0 -1 1092 -5.2516269497573376e-03 + + 7.1159368753433228e-01 4.6937671303749084e-01 + <_> + + 0 -1 1093 -7.8342109918594360e-03 + + 4.4626510143280029e-01 5.4090857505798340e-01 + <_> + + 0 -1 1094 -1.1310069821774960e-03 + + 5.9456187486648560e-01 4.4176620244979858e-01 + <_> + + 0 -1 1095 1.7601120052859187e-03 + + 5.3532499074935913e-01 3.9734530448913574e-01 + <_> + + 0 -1 1096 -8.1581249833106995e-04 + + 3.7602680921554565e-01 5.2647268772125244e-01 + <_> + + 0 -1 1097 -3.8687589112669230e-03 + + 6.3099128007888794e-01 4.7498199343681335e-01 + <_> + + 0 -1 1098 1.5207129763439298e-03 + + 5.2301818132400513e-01 3.3612239360809326e-01 + <_> + + 0 -1 1099 5.4586738348007202e-01 + + 5.1671397686004639e-01 1.1726350337266922e-01 + <_> + + 0 -1 1100 1.5650190412998199e-02 + + 4.9794390797615051e-01 1.3932949304580688e-01 + <_> + + 0 -1 1101 -1.1731860227882862e-02 + + 7.1296507120132446e-01 4.9211961030960083e-01 + <_> + + 0 -1 1102 -6.1765122227370739e-03 + + 2.2881029546260834e-01 5.0497019290924072e-01 + <_> + + 0 -1 1103 2.2457661107182503e-03 + + 4.6324339509010315e-01 6.0487258434295654e-01 + <_> + + 0 -1 1104 -5.1915869116783142e-03 + + 6.4674210548400879e-01 4.6021929383277893e-01 + <_> + + 0 -1 1105 -2.3827880620956421e-02 + + 1.4820009469985962e-01 5.2260792255401611e-01 + <_> + + 0 -1 1106 1.0284580057486892e-03 + + 5.1354891061782837e-01 3.3759570121765137e-01 + <_> + + 0 -1 1107 -1.0078850202262402e-02 + + 2.7405610680580139e-01 5.3035670518875122e-01 + <_> + + 0 -1 1108 2.6168930344283581e-03 + + 5.3326708078384399e-01 3.9724540710449219e-01 + <_> + + 0 -1 1109 5.4385367548093200e-04 + + 5.3656041622161865e-01 4.0634119510650635e-01 + <_> + + 0 -1 1110 5.3510512225329876e-03 + + 4.6537590026855469e-01 6.8890458345413208e-01 + <_> + + 0 -1 1111 -1.5274790348485112e-03 + + 5.4495012760162354e-01 3.6247238516807556e-01 + <_> + + 0 -1 1112 -8.0624416470527649e-02 + + 1.6560870409011841e-01 5.0002872943878174e-01 + <_> + + 0 -1 1113 2.2192029282450676e-02 + + 5.1327311992645264e-01 2.0028080046176910e-01 + <_> + + 0 -1 1114 7.3100631125271320e-03 + + 4.6179479360580444e-01 6.3665360212326050e-01 + <_> + + 0 -1 1115 -6.4063072204589844e-03 + + 5.9162509441375732e-01 4.8678609728813171e-01 + <_> + + 0 -1 1116 -7.6415040530264378e-04 + + 3.8884091377258301e-01 5.3157979249954224e-01 + <_> + + 0 -1 1117 7.6734489994123578e-04 + + 4.1590648889541626e-01 5.6052798032760620e-01 + <_> + + 0 -1 1118 6.1474501853808761e-04 + + 3.0890220403671265e-01 5.1201480627059937e-01 + <_> + + 0 -1 1119 -5.0105270929634571e-03 + + 3.9721998572349548e-01 5.2073061466217041e-01 + <_> + + 0 -1 1120 -8.6909132078289986e-03 + + 6.2574082612991333e-01 4.6085759997367859e-01 + <_> + + 0 -1 1121 -1.6391459852457047e-02 + + 2.0852099359035492e-01 5.2422660589218140e-01 + <_> + + 0 -1 1122 4.0973909199237823e-04 + + 5.2224272489547729e-01 3.7803208827972412e-01 + <_> + + 0 -1 1123 -2.5242289993911982e-03 + + 5.8039271831512451e-01 4.6118900179862976e-01 + <_> + + 0 -1 1124 5.0945312250405550e-04 + + 4.4012719392776489e-01 5.8460158109664917e-01 + <_> + + 0 -1 1125 1.9656419754028320e-03 + + 5.3223252296447754e-01 4.1845908761024475e-01 + <_> + + 0 -1 1126 5.6298897834494710e-04 + + 3.7418448925018311e-01 5.2345657348632812e-01 + <_> + + 0 -1 1127 -6.7946797935292125e-04 + + 4.6310418844223022e-01 5.3564780950546265e-01 + <_> + + 0 -1 1128 7.2856349870562553e-03 + + 5.0446701049804688e-01 2.3775640130043030e-01 + <_> + + 0 -1 1129 -1.7459489405155182e-02 + + 7.2891211509704590e-01 5.0504350662231445e-01 + <_> + + 0 -1 1130 -2.5421749800443649e-02 + + 6.6671347618103027e-01 4.6781000494956970e-01 + <_> + + 0 -1 1131 -1.5647639520466328e-03 + + 4.3917590379714966e-01 5.3236269950866699e-01 + <_> + + 0 -1 1132 1.1444360017776489e-02 + + 4.3464401364326477e-01 5.6800121068954468e-01 + <_> + + 0 -1 1133 -6.7352550104260445e-04 + + 4.4771409034729004e-01 5.2968120574951172e-01 + <_> + + 0 -1 1134 9.3194209039211273e-03 + + 4.7402000427246094e-01 7.4626070261001587e-01 + <_> + + 0 -1 1135 1.3328490604180843e-04 + + 5.3650617599487305e-01 4.7521349787712097e-01 + <_> + + 0 -1 1136 -7.8815799206495285e-03 + + 1.7522190511226654e-01 5.0152552127838135e-01 + <_> + + 0 -1 1137 -5.7985680177807808e-03 + + 7.2712367773056030e-01 4.8962008953094482e-01 + <_> + + 0 -1 1138 -3.8922499516047537e-04 + + 4.0039089322090149e-01 5.3449410200119019e-01 + <_> + + 0 -1 1139 -1.9288610201328993e-03 + + 5.6056129932403564e-01 4.8039558529853821e-01 + <_> + + 0 -1 1140 8.4214154630899429e-03 + + 4.7532469034194946e-01 7.6236087083816528e-01 + <_> + + 0 -1 1141 8.1655876711010933e-03 + + 5.3932619094848633e-01 4.1916438937187195e-01 + <_> + + 0 -1 1142 4.8280550981871784e-04 + + 4.2408001422882080e-01 5.3998219966888428e-01 + <_> + + 0 -1 1143 -2.7186630759388208e-03 + + 4.2445999383926392e-01 5.4249238967895508e-01 + <_> + + 0 -1 1144 -1.2507230043411255e-02 + + 5.8958417177200317e-01 4.5504111051559448e-01 + <_> + + 0 -1 1145 -2.4286519736051559e-02 + + 2.6471349596977234e-01 5.1891797780990601e-01 + <_> + + 0 -1 1146 -2.9676330741494894e-03 + + 7.3476827144622803e-01 4.7497498989105225e-01 + <_> + + 0 -1 1147 -1.2528999708592892e-02 + + 2.7560499310493469e-01 5.1775997877120972e-01 + <_> + + 0 -1 1148 -1.0104000102728605e-03 + + 3.5105609893798828e-01 5.1447242498397827e-01 + <_> + + 0 -1 1149 -2.1348530426621437e-03 + + 5.6379258632659912e-01 4.6673199534416199e-01 + <_> + + 0 -1 1150 1.9564259797334671e-02 + + 4.6145731210708618e-01 6.1376398801803589e-01 + <_> + + 0 -1 1151 -9.7146347165107727e-02 + + 2.9983788728713989e-01 5.1935559511184692e-01 + <_> + + 0 -1 1152 4.5014568604528904e-03 + + 5.0778847932815552e-01 3.0457559227943420e-01 + <_> + + 0 -1 1153 6.3706971704959869e-03 + + 4.8610189557075500e-01 6.8875008821487427e-01 + <_> + + 0 -1 1154 -9.0721528977155685e-03 + + 1.6733959317207336e-01 5.0175631046295166e-01 + <_> + + 0 -1 1155 -5.3537208586931229e-03 + + 2.6927569508552551e-01 5.2426332235336304e-01 + <_> + + 0 -1 1156 -1.0932840406894684e-02 + + 7.1838641166687012e-01 4.7360289096832275e-01 + <_> + + 0 -1 1157 8.2356072962284088e-03 + + 5.2239668369293213e-01 2.3898629844188690e-01 + <_> + + 0 -1 1158 -1.0038160253316164e-03 + + 5.7193559408187866e-01 4.4339430332183838e-01 + <_> + + 0 -1 1159 4.0859128348529339e-03 + + 5.4728418588638306e-01 4.1488361358642578e-01 + <_> + + 0 -1 1160 1.5485419332981110e-01 + + 4.9738121032714844e-01 6.1061598360538483e-02 + <_> + + 0 -1 1161 2.0897459762636572e-04 + + 4.7091740369796753e-01 5.4238891601562500e-01 + <_> + + 0 -1 1162 3.3316991175524890e-04 + + 4.0896269679069519e-01 5.3009921312332153e-01 + <_> + + 0 -1 1163 -1.0813400149345398e-02 + + 6.1043697595596313e-01 4.9573341012001038e-01 + <_> + + 0 -1 1164 4.5656010508537292e-02 + + 5.0696891546249390e-01 2.8666600584983826e-01 + <_> + + 0 -1 1165 1.2569549726322293e-03 + + 4.8469170928001404e-01 6.3181710243225098e-01 + <_> + + 0 -1 1166 -1.2015070021152496e-01 + + 6.0526140034198761e-02 4.9809598922729492e-01 + <_> + + 0 -1 1167 -1.0533799650147557e-04 + + 5.3631097078323364e-01 4.7080421447753906e-01 + <_> + + 0 -1 1168 -2.0703190565109253e-01 + + 5.9660330414772034e-02 4.9790981411933899e-01 + <_> + + 0 -1 1169 1.2909180077258497e-04 + + 4.7129771113395691e-01 5.3779977560043335e-01 + <_> + + 0 -1 1170 3.8818528992123902e-04 + + 4.3635380268096924e-01 5.5341911315917969e-01 + <_> + + 0 -1 1171 -2.9243610333651304e-03 + + 5.8111858367919922e-01 4.8252159357070923e-01 + <_> + + 0 -1 1172 8.3882332546636462e-04 + + 5.3117001056671143e-01 4.0381389856338501e-01 + <_> + + 0 -1 1173 -1.9061550265178084e-03 + + 3.7707018852233887e-01 5.2600151300430298e-01 + <_> + + 0 -1 1174 8.9514348655939102e-03 + + 4.7661679983139038e-01 7.6821839809417725e-01 + <_> + + 0 -1 1175 1.3083459809422493e-02 + + 5.2644628286361694e-01 3.0622220039367676e-01 + <_> + + 0 -1 1176 -2.1159330010414124e-01 + + 6.7371982336044312e-01 4.6958100795745850e-01 + <_> + + 0 -1 1177 3.1493250280618668e-03 + + 5.6448352336883545e-01 4.3869531154632568e-01 + <_> + + 0 -1 1178 3.9754100725986063e-04 + + 4.5260611176490784e-01 5.8956301212310791e-01 + <_> + + 0 -1 1179 -1.3814480043947697e-03 + + 6.0705822706222534e-01 4.9424138665199280e-01 + <_> + + 0 -1 1180 -5.8122188784182072e-04 + + 5.9982132911682129e-01 4.5082521438598633e-01 + <_> + + 0 -1 1181 -2.3905329871922731e-03 + + 4.2055889964103699e-01 5.2238482236862183e-01 + <_> + + 0 -1 1182 2.7268929407000542e-02 + + 5.2064472436904907e-01 3.5633018612861633e-01 + <_> + + 0 -1 1183 -3.7658358924090862e-03 + + 3.1447041034698486e-01 5.2188140153884888e-01 + <_> + + 0 -1 1184 -1.4903489500284195e-03 + + 3.3801960945129395e-01 5.1244372129440308e-01 + <_> + + 0 -1 1185 -1.7428230494260788e-02 + + 5.8299607038497925e-01 4.9197259545326233e-01 + <_> + + 0 -1 1186 -1.5278030186891556e-02 + + 6.1631447076797485e-01 4.6178871393203735e-01 + <_> + + 0 -1 1187 3.1995609402656555e-02 + + 5.1663571596145630e-01 1.7127640545368195e-01 + <_> + + 0 -1 1188 -3.8256710395216942e-03 + + 3.4080120921134949e-01 5.1313877105712891e-01 + <_> + + 0 -1 1189 -8.5186436772346497e-03 + + 6.1055189371109009e-01 4.9979418516159058e-01 + <_> + + 0 -1 1190 9.0641621500253677e-04 + + 4.3272709846496582e-01 5.5823111534118652e-01 + <_> + + 0 -1 1191 1.0344849899411201e-02 + + 4.8556530475616455e-01 5.4524201154708862e-01 + <_> + 160 + 7.9249076843261719e+01 + + <_> + + 0 -1 1192 7.8981826081871986e-03 + + 3.3325248956680298e-01 5.9464621543884277e-01 + <_> + + 0 -1 1193 1.6170160379260778e-03 + + 3.4906411170959473e-01 5.5778688192367554e-01 + <_> + + 0 -1 1194 -5.5449741194024682e-04 + + 5.5425661802291870e-01 3.2915300130844116e-01 + <_> + + 0 -1 1195 1.5428980113938451e-03 + + 3.6125791072845459e-01 5.5459791421890259e-01 + <_> + + 0 -1 1196 -1.0329450014978647e-03 + + 3.5301390290260315e-01 5.5761402845382690e-01 + <_> + + 0 -1 1197 7.7698158565908670e-04 + + 3.9167788624763489e-01 5.6453210115432739e-01 + <_> + + 0 -1 1198 1.4320300519466400e-01 + + 4.6674820780754089e-01 7.0236331224441528e-01 + <_> + + 0 -1 1199 -7.3866490274667740e-03 + + 3.0736848711967468e-01 5.2892577648162842e-01 + <_> + + 0 -1 1200 -6.2936742324382067e-04 + + 5.6221181154251099e-01 4.0370491147041321e-01 + <_> + + 0 -1 1201 7.8893528552725911e-04 + + 5.2676612138748169e-01 3.5578748583793640e-01 + <_> + + 0 -1 1202 -1.2228050269186497e-02 + + 6.6683208942413330e-01 4.6255499124526978e-01 + <_> + + 0 -1 1203 3.5420239437371492e-03 + + 5.5214381217956543e-01 3.8696730136871338e-01 + <_> + + 0 -1 1204 -1.0585320414975286e-03 + + 3.6286780238151550e-01 5.3209269046783447e-01 + <_> + + 0 -1 1205 1.4935660146875307e-05 + + 4.6324449777603149e-01 5.3633230924606323e-01 + <_> + + 0 -1 1206 5.2537708543241024e-03 + + 5.1322317123413086e-01 3.2657089829444885e-01 + <_> + + 0 -1 1207 -8.2338023930788040e-03 + + 6.6936898231506348e-01 4.7741401195526123e-01 + <_> + + 0 -1 1208 2.1866810129722580e-05 + + 4.0538620948791504e-01 5.4579311609268188e-01 + <_> + + 0 -1 1209 -3.8150229956954718e-03 + + 6.4549958705902100e-01 4.7931781411170959e-01 + <_> + + 0 -1 1210 1.1105879675596952e-03 + + 5.2704071998596191e-01 3.5296788811683655e-01 + <_> + + 0 -1 1211 -5.7707689702510834e-03 + + 3.8035470247268677e-01 5.3529578447341919e-01 + <_> + + 0 -1 1212 -3.0158339068293571e-03 + + 5.3394031524658203e-01 3.8871330022811890e-01 + <_> + + 0 -1 1213 -8.5453689098358154e-04 + + 3.5646161437034607e-01 5.2736037969589233e-01 + <_> + + 0 -1 1214 1.1050510220229626e-02 + + 4.6719071269035339e-01 6.8497377634048462e-01 + <_> + + 0 -1 1215 4.2605839669704437e-02 + + 5.1514732837677002e-01 7.0220090448856354e-02 + <_> + + 0 -1 1216 -3.0781750101596117e-03 + + 3.0416610836982727e-01 5.1526021957397461e-01 + <_> + + 0 -1 1217 -5.4815728217363358e-03 + + 6.4302957057952881e-01 4.8972299695014954e-01 + <_> + + 0 -1 1218 3.1881860923022032e-03 + + 5.3074932098388672e-01 3.8262099027633667e-01 + <_> + + 0 -1 1219 3.5947180003859103e-04 + + 4.6500471234321594e-01 5.4219049215316772e-01 + <_> + + 0 -1 1220 -4.0705031715333462e-03 + + 2.8496798872947693e-01 5.0791162252426147e-01 + <_> + + 0 -1 1221 -1.4594170264899731e-02 + + 2.9716458916664124e-01 5.1284617185592651e-01 + <_> + + 0 -1 1222 -1.1947689927183092e-04 + + 5.6310981512069702e-01 4.3430820107460022e-01 + <_> + + 0 -1 1223 -6.9344649091362953e-04 + + 4.4035780429840088e-01 5.3599590063095093e-01 + <_> + + 0 -1 1224 1.4834799912932795e-05 + + 3.4210088849067688e-01 5.1646977663040161e-01 + <_> + + 0 -1 1225 9.0296985581517220e-03 + + 4.6393430233001709e-01 6.1140751838684082e-01 + <_> + + 0 -1 1226 -8.0640818923711777e-03 + + 2.8201588988304138e-01 5.0754940509796143e-01 + <_> + + 0 -1 1227 2.6062119752168655e-02 + + 5.2089059352874756e-01 2.6887780427932739e-01 + <_> + + 0 -1 1228 1.7314659431576729e-02 + + 4.6637138724327087e-01 6.7385399341583252e-01 + <_> + + 0 -1 1229 2.2666640579700470e-02 + + 5.2093499898910522e-01 2.2127239406108856e-01 + <_> + + 0 -1 1230 -2.1965929772704840e-03 + + 6.0631012916564941e-01 4.5381900668144226e-01 + <_> + + 0 -1 1231 -9.5282476395368576e-03 + + 4.6352049708366394e-01 5.2474308013916016e-01 + <_> + + 0 -1 1232 8.0943619832396507e-03 + + 5.2894401550292969e-01 3.9138820767402649e-01 + <_> + + 0 -1 1233 -7.2877332568168640e-02 + + 7.7520018815994263e-01 4.9902349710464478e-01 + <_> + + 0 -1 1234 -6.9009521976113319e-03 + + 2.4280390143394470e-01 5.0480902194976807e-01 + <_> + + 0 -1 1235 -1.1308239772915840e-02 + + 5.7343649864196777e-01 4.8423761129379272e-01 + <_> + + 0 -1 1236 5.9613201767206192e-02 + + 5.0298362970352173e-01 2.5249770283699036e-01 + <_> + + 0 -1 1237 -2.8624620754271746e-03 + + 6.0730451345443726e-01 4.8984599113464355e-01 + <_> + + 0 -1 1238 4.4781449250876904e-03 + + 5.0152891874313354e-01 2.2203169763088226e-01 + <_> + + 0 -1 1239 -1.7513240454718471e-03 + + 6.6144287586212158e-01 4.9338689446449280e-01 + <_> + + 0 -1 1240 4.0163420140743256e-02 + + 5.1808780431747437e-01 3.7410449981689453e-01 + <_> + + 0 -1 1241 3.4768949262797832e-04 + + 4.7204169631004333e-01 5.8180320262908936e-01 + <_> + + 0 -1 1242 2.6551650371402502e-03 + + 3.8050109148025513e-01 5.2213358879089355e-01 + <_> + + 0 -1 1243 -8.7706279009580612e-03 + + 2.9441660642623901e-01 5.2312952280044556e-01 + <_> + + 0 -1 1244 -5.5122091434895992e-03 + + 7.3461771011352539e-01 4.7228169441223145e-01 + <_> + + 0 -1 1245 6.8672042107209563e-04 + + 5.4528760910034180e-01 4.2424130439758301e-01 + <_> + + 0 -1 1246 5.6019669864326715e-04 + + 4.3988621234893799e-01 5.6012850999832153e-01 + <_> + + 0 -1 1247 2.4143769405782223e-03 + + 4.7416868805885315e-01 6.1366218328475952e-01 + <_> + + 0 -1 1248 -1.5680900542065501e-03 + + 6.0445529222488403e-01 4.5164099335670471e-01 + <_> + + 0 -1 1249 -3.6827491130679846e-03 + + 2.4524590373039246e-01 5.2949821949005127e-01 + <_> + + 0 -1 1250 -2.9409190756268799e-04 + + 3.7328380346298218e-01 5.2514511346817017e-01 + <_> + + 0 -1 1251 4.2847759323194623e-04 + + 5.4988098144531250e-01 4.0655350685119629e-01 + <_> + + 0 -1 1252 -4.8817070201039314e-03 + + 2.1399089694023132e-01 4.9999570846557617e-01 + <_> + + 0 -1 1253 2.7272020815871656e-04 + + 4.6502870321273804e-01 5.8134287595748901e-01 + <_> + + 0 -1 1254 2.0947199664078653e-04 + + 4.3874868750572205e-01 5.5727928876876831e-01 + <_> + + 0 -1 1255 4.8501189798116684e-02 + + 5.2449727058410645e-01 3.2128891348838806e-01 + <_> + + 0 -1 1256 -4.5166411437094212e-03 + + 6.0568130016326904e-01 4.5458820462226868e-01 + <_> + + 0 -1 1257 -1.2291680090129375e-02 + + 2.0409290492534637e-01 5.1522141695022583e-01 + <_> + + 0 -1 1258 4.8549679922871292e-04 + + 5.2376049757003784e-01 3.7395030260086060e-01 + <_> + + 0 -1 1259 3.0556049197912216e-02 + + 4.9605339765548706e-01 5.9382462501525879e-01 + <_> + + 0 -1 1260 -1.5105320198927075e-04 + + 5.3513038158416748e-01 4.1452041268348694e-01 + <_> + + 0 -1 1261 2.4937440175563097e-03 + + 4.6933668851852417e-01 5.5149412155151367e-01 + <_> + + 0 -1 1262 -1.2382130138576031e-02 + + 6.7913967370986938e-01 4.6816679835319519e-01 + <_> + + 0 -1 1263 -5.1333461888134480e-03 + + 3.6087390780448914e-01 5.2291601896286011e-01 + <_> + + 0 -1 1264 5.1919277757406235e-04 + + 5.3000730276107788e-01 3.6336138844490051e-01 + <_> + + 0 -1 1265 1.5060420334339142e-01 + + 5.1573169231414795e-01 2.2117820382118225e-01 + <_> + + 0 -1 1266 7.7144149690866470e-03 + + 4.4104969501495361e-01 5.7766091823577881e-01 + <_> + + 0 -1 1267 9.4443522393703461e-03 + + 5.4018551111221313e-01 3.7566500902175903e-01 + <_> + + 0 -1 1268 2.5006249779835343e-04 + + 4.3682709336280823e-01 5.6073749065399170e-01 + <_> + + 0 -1 1269 -3.3077150583267212e-03 + + 4.2447990179061890e-01 5.5182307958602905e-01 + <_> + + 0 -1 1270 7.4048910755664110e-04 + + 4.4969621300697327e-01 5.9005767107009888e-01 + <_> + + 0 -1 1271 4.4092051684856415e-02 + + 5.2934932708740234e-01 3.1563550233840942e-01 + <_> + + 0 -1 1272 3.3639909233897924e-03 + + 4.4832968711853027e-01 5.8486622571945190e-01 + <_> + + 0 -1 1273 -3.9760079234838486e-03 + + 4.5595070719718933e-01 5.4836392402648926e-01 + <_> + + 0 -1 1274 2.7716930489987135e-03 + + 5.3417861461639404e-01 3.7924841046333313e-01 + <_> + + 0 -1 1275 -2.4123019829858094e-04 + + 5.6671887636184692e-01 4.5769730210304260e-01 + <_> + + 0 -1 1276 4.9425667384639382e-04 + + 4.4212448596954346e-01 5.6287872791290283e-01 + <_> + + 0 -1 1277 -3.8876468897797167e-04 + + 4.2883709073066711e-01 5.3910630941390991e-01 + <_> + + 0 -1 1278 -5.0048898905515671e-02 + + 6.8995130062103271e-01 4.7037428617477417e-01 + <_> + + 0 -1 1279 -3.6635480821132660e-02 + + 2.2177790105342865e-01 5.1918262243270874e-01 + <_> + + 0 -1 1280 2.4273579474538565e-03 + + 5.1362240314483643e-01 3.4973978996276855e-01 + <_> + + 0 -1 1281 1.9558030180633068e-03 + + 4.8261928558349609e-01 6.4083808660507202e-01 + <_> + + 0 -1 1282 -1.7494610510766506e-03 + + 3.9228358864784241e-01 5.2726852893829346e-01 + <_> + + 0 -1 1283 1.3955079950392246e-02 + + 5.0782018899917603e-01 8.4165048599243164e-01 + <_> + + 0 -1 1284 -2.1896739781368524e-04 + + 5.5204898118972778e-01 4.3142348527908325e-01 + <_> + + 0 -1 1285 -1.5131309628486633e-03 + + 3.9346051216125488e-01 5.3825712203979492e-01 + <_> + + 0 -1 1286 -4.3622800149023533e-03 + + 7.3706287145614624e-01 4.7364759445190430e-01 + <_> + + 0 -1 1287 6.5160587430000305e-02 + + 5.1592797040939331e-01 3.2815951108932495e-01 + <_> + + 0 -1 1288 -2.3567399475723505e-03 + + 3.6728268861770630e-01 5.1728862524032593e-01 + <_> + + 0 -1 1289 1.5146659687161446e-02 + + 5.0314939022064209e-01 6.6876041889190674e-01 + <_> + + 0 -1 1290 -2.2850960493087769e-02 + + 6.7675197124481201e-01 4.7095969319343567e-01 + <_> + + 0 -1 1291 4.8867650330066681e-03 + + 5.2579981088638306e-01 4.0598788857460022e-01 + <_> + + 0 -1 1292 1.7619599821045995e-03 + + 4.6962729096412659e-01 6.6882789134979248e-01 + <_> + + 0 -1 1293 -1.2942519970238209e-03 + + 4.3207129836082458e-01 5.3442817926406860e-01 + <_> + + 0 -1 1294 1.0929949581623077e-02 + + 4.9977061152458191e-01 1.6374860703945160e-01 + <_> + + 0 -1 1295 2.9958489903947338e-05 + + 4.2824178934097290e-01 5.6332242488861084e-01 + <_> + + 0 -1 1296 -6.5884361974895000e-03 + + 6.7721211910247803e-01 4.7005268931388855e-01 + <_> + + 0 -1 1297 3.2527779694646597e-03 + + 5.3133970499038696e-01 4.5361489057540894e-01 + <_> + + 0 -1 1298 -4.0435739792883396e-03 + + 5.6600618362426758e-01 4.4133889675140381e-01 + <_> + + 0 -1 1299 -1.2523540062829852e-03 + + 3.7319138646125793e-01 5.3564518690109253e-01 + <_> + + 0 -1 1300 1.9246719602961093e-04 + + 5.1899862289428711e-01 3.7388110160827637e-01 + <_> + + 0 -1 1301 -3.8589671254158020e-02 + + 2.9563739895820618e-01 5.1888108253479004e-01 + <_> + + 0 -1 1302 1.5489870565943420e-04 + + 4.3471351265907288e-01 5.5095332860946655e-01 + <_> + + 0 -1 1303 -3.3763848245143890e-02 + + 3.2303300499916077e-01 5.1954758167266846e-01 + <_> + + 0 -1 1304 -8.2657067105174065e-03 + + 5.9754890203475952e-01 4.5521140098571777e-01 + <_> + + 0 -1 1305 1.4481440302915871e-05 + + 4.7456780076026917e-01 5.4974269866943359e-01 + <_> + + 0 -1 1306 1.4951299817766994e-05 + + 4.3244731426239014e-01 5.4806441068649292e-01 + <_> + + 0 -1 1307 -1.8741799518465996e-02 + + 1.5800529718399048e-01 5.1785331964492798e-01 + <_> + + 0 -1 1308 1.7572239739820361e-03 + + 4.5176368951797485e-01 5.7737642526626587e-01 + <_> + + 0 -1 1309 -3.1391119118779898e-03 + + 4.1496479511260986e-01 5.4608422517776489e-01 + <_> + + 0 -1 1310 6.6656779381446540e-05 + + 4.0390908718109131e-01 5.2930849790573120e-01 + <_> + + 0 -1 1311 6.7743421532213688e-03 + + 4.7676518559455872e-01 6.1219561100006104e-01 + <_> + + 0 -1 1312 -7.3868161998689175e-03 + + 3.5862588882446289e-01 5.1872807741165161e-01 + <_> + + 0 -1 1313 1.4040930196642876e-02 + + 4.7121399641036987e-01 5.5761557817459106e-01 + <_> + + 0 -1 1314 -5.5258329957723618e-03 + + 2.6610270142555237e-01 5.0392812490463257e-01 + <_> + + 0 -1 1315 3.8684239983558655e-01 + + 5.1443397998809814e-01 2.5258991122245789e-01 + <_> + + 0 -1 1316 1.1459240340627730e-04 + + 4.2849949002265930e-01 5.4233711957931519e-01 + <_> + + 0 -1 1317 -1.8467569723725319e-02 + + 3.8858351111412048e-01 5.2130621671676636e-01 + <_> + + 0 -1 1318 -4.5907011372037232e-04 + + 5.4125630855560303e-01 4.2359098792076111e-01 + <_> + + 0 -1 1319 1.2527540093287826e-03 + + 4.8993051052093506e-01 6.6240912675857544e-01 + <_> + + 0 -1 1320 1.4910609461367130e-03 + + 5.2867782115936279e-01 4.0400519967079163e-01 + <_> + + 0 -1 1321 -7.5435562757775187e-04 + + 6.0329902172088623e-01 4.7951200604438782e-01 + <_> + + 0 -1 1322 -6.9478838704526424e-03 + + 4.0844011306762695e-01 5.3735041618347168e-01 + <_> + + 0 -1 1323 2.8092920547351241e-04 + + 4.8460629582405090e-01 5.7593822479248047e-01 + <_> + + 0 -1 1324 9.6073717577382922e-04 + + 5.1647412776947021e-01 3.5549798607826233e-01 + <_> + + 0 -1 1325 -2.6883929967880249e-04 + + 5.6775820255279541e-01 4.7317659854888916e-01 + <_> + + 0 -1 1326 2.1599370520561934e-03 + + 4.7314870357513428e-01 7.0705670118331909e-01 + <_> + + 0 -1 1327 5.6235301308333874e-03 + + 5.2402430772781372e-01 2.7817919850349426e-01 + <_> + + 0 -1 1328 -5.0243991427123547e-03 + + 2.8370139002799988e-01 5.0623041391372681e-01 + <_> + + 0 -1 1329 -9.7611639648675919e-03 + + 7.4007177352905273e-01 4.9345690011978149e-01 + <_> + + 0 -1 1330 4.1515100747346878e-03 + + 5.1191312074661255e-01 3.4070080518722534e-01 + <_> + + 0 -1 1331 6.2465080991387367e-03 + + 4.9237880110740662e-01 6.5790587663650513e-01 + <_> + + 0 -1 1332 -7.0597478188574314e-03 + + 2.4347110092639923e-01 5.0328421592712402e-01 + <_> + + 0 -1 1333 -2.0587709732353687e-03 + + 5.9003108739852905e-01 4.6950870752334595e-01 + <_> + + 0 -1 1334 -2.4146060459315777e-03 + + 3.6473178863525391e-01 5.1892018318176270e-01 + <_> + + 0 -1 1335 -1.4817609917372465e-03 + + 6.0349482297897339e-01 4.9401280283927917e-01 + <_> + + 0 -1 1336 -6.3016400672495365e-03 + + 5.8189898729324341e-01 4.5604279637336731e-01 + <_> + + 0 -1 1337 3.4763428848236799e-03 + + 5.2174758911132812e-01 3.4839931130409241e-01 + <_> + + 0 -1 1338 -2.2250870242714882e-02 + + 2.3607000708580017e-01 5.0320827960968018e-01 + <_> + + 0 -1 1339 -3.0612550675868988e-02 + + 6.4991867542266846e-01 4.9149191379547119e-01 + <_> + + 0 -1 1340 1.3057479634881020e-02 + + 4.4133231043815613e-01 5.6837642192840576e-01 + <_> + + 0 -1 1341 -6.0095742810517550e-04 + + 4.3597310781478882e-01 5.3334832191467285e-01 + <_> + + 0 -1 1342 -4.1514250915497541e-04 + + 5.5040627717971802e-01 4.3260601162910461e-01 + <_> + + 0 -1 1343 -1.3776290230453014e-02 + + 4.0641129016876221e-01 5.2015489339828491e-01 + <_> + + 0 -1 1344 -3.2296508550643921e-02 + + 4.7351971268653870e-02 4.9771949648857117e-01 + <_> + + 0 -1 1345 5.3556978702545166e-02 + + 4.8817330598831177e-01 6.6669392585754395e-01 + <_> + + 0 -1 1346 8.1889545544981956e-03 + + 5.4000371694564819e-01 4.2408201098442078e-01 + <_> + + 0 -1 1347 2.1055320394225419e-04 + + 4.8020479083061218e-01 5.5638527870178223e-01 + <_> + + 0 -1 1348 -2.4382730480283499e-03 + + 7.3877930641174316e-01 4.7736850380897522e-01 + <_> + + 0 -1 1349 3.2835570164024830e-03 + + 5.2885460853576660e-01 3.1712919473648071e-01 + <_> + + 0 -1 1350 2.3729570675641298e-03 + + 4.7508129477500916e-01 7.0601707696914673e-01 + <_> + + 0 -1 1351 -1.4541699783876538e-03 + + 3.8117301464080811e-01 5.3307390213012695e-01 + <_> + 177 + 8.7696029663085938e+01 + + <_> + + 0 -1 1352 5.5755238980054855e-02 + + 4.0191569924354553e-01 6.8060368299484253e-01 + <_> + + 0 -1 1353 2.4730248842388391e-03 + + 3.3511489629745483e-01 5.9657198190689087e-01 + <_> + + 0 -1 1354 -3.5031698644161224e-04 + + 5.5577081441879272e-01 3.4822869300842285e-01 + <_> + + 0 -1 1355 5.4167630150914192e-04 + + 4.2608588933944702e-01 5.6933808326721191e-01 + <_> + + 0 -1 1356 7.7193678589537740e-04 + + 3.4942400455474854e-01 5.4336887598037720e-01 + <_> + + 0 -1 1357 -1.5999219613149762e-03 + + 4.0284991264343262e-01 5.4843592643737793e-01 + <_> + + 0 -1 1358 -1.1832080053864047e-04 + + 3.8069018721580505e-01 5.4254651069641113e-01 + <_> + + 0 -1 1359 3.2909031142480671e-04 + + 2.6201000809669495e-01 5.4295217990875244e-01 + <_> + + 0 -1 1360 2.9518108931370080e-04 + + 3.7997689843177795e-01 5.3992640972137451e-01 + <_> + + 0 -1 1361 9.0466710389591753e-05 + + 4.4336450099945068e-01 5.4402261972427368e-01 + <_> + + 0 -1 1362 1.5007190086180344e-05 + + 3.7196549773216248e-01 5.4091197252273560e-01 + <_> + + 0 -1 1363 1.3935610651969910e-01 + + 5.5253958702087402e-01 4.4790428876876831e-01 + <_> + + 0 -1 1364 1.6461990308016539e-03 + + 4.2645010352134705e-01 5.7721698284149170e-01 + <_> + + 0 -1 1365 4.9984431825578213e-04 + + 4.3595260381698608e-01 5.6858712434768677e-01 + <_> + + 0 -1 1366 -1.0971280280500650e-03 + + 3.3901369571685791e-01 5.2054089307785034e-01 + <_> + + 0 -1 1367 6.6919892560690641e-04 + + 4.5574560761451721e-01 5.9806597232818604e-01 + <_> + + 0 -1 1368 8.6471042595803738e-04 + + 5.1348412036895752e-01 2.9440331459045410e-01 + <_> + + 0 -1 1369 -2.7182599296793342e-04 + + 3.9065781235694885e-01 5.3771811723709106e-01 + <_> + + 0 -1 1370 3.0249499104684219e-05 + + 3.6796098947525024e-01 5.2256888151168823e-01 + <_> + + 0 -1 1371 -8.5225896909832954e-03 + + 7.2931021451950073e-01 4.8923650383949280e-01 + <_> + + 0 -1 1372 1.6705560265108943e-03 + + 4.3453249335289001e-01 5.6961381435394287e-01 + <_> + + 0 -1 1373 -7.1433838456869125e-03 + + 2.5912800431251526e-01 5.2256238460540771e-01 + <_> + + 0 -1 1374 -1.6319369897246361e-02 + + 6.9222790002822876e-01 4.6515759825706482e-01 + <_> + + 0 -1 1375 4.8034260980784893e-03 + + 5.3522628545761108e-01 3.2863029837608337e-01 + <_> + + 0 -1 1376 -7.5421929359436035e-03 + + 2.0405440032482147e-01 5.0345462560653687e-01 + <_> + + 0 -1 1377 -1.4363110065460205e-02 + + 6.8048888444900513e-01 4.8890590667724609e-01 + <_> + + 0 -1 1378 8.9063588529825211e-04 + + 5.3106957674026489e-01 3.8954809308052063e-01 + <_> + + 0 -1 1379 -4.4060191139578819e-03 + + 5.7415628433227539e-01 4.3724268674850464e-01 + <_> + + 0 -1 1380 -1.8862540309783071e-04 + + 2.8317859768867493e-01 5.0982052087783813e-01 + <_> + + 0 -1 1381 -3.7979281041771173e-03 + + 3.3725079894065857e-01 5.2465802431106567e-01 + <_> + + 0 -1 1382 1.4627049677073956e-04 + + 5.3066742420196533e-01 3.9117100834846497e-01 + <_> + + 0 -1 1383 -4.9164638767251745e-05 + + 5.4624962806701660e-01 3.9427208900451660e-01 + <_> + + 0 -1 1384 -3.3582501113414764e-02 + + 2.1578240394592285e-01 5.0482118129730225e-01 + <_> + + 0 -1 1385 -3.5339309833943844e-03 + + 6.4653122425079346e-01 4.8726969957351685e-01 + <_> + + 0 -1 1386 5.0144111737608910e-03 + + 4.6176680922508240e-01 6.2480747699737549e-01 + <_> + + 0 -1 1387 1.8817370757460594e-02 + + 5.2206891775131226e-01 2.0000520348548889e-01 + <_> + + 0 -1 1388 -1.3434339780360460e-03 + + 4.0145379304885864e-01 5.3016197681427002e-01 + <_> + + 0 -1 1389 1.7557960236445069e-03 + + 4.7940391302108765e-01 5.6531697511672974e-01 + <_> + + 0 -1 1390 -9.5637463033199310e-02 + + 2.0341950654983521e-01 5.0067067146301270e-01 + <_> + + 0 -1 1391 -2.2241229191422462e-02 + + 7.6724731922149658e-01 5.0463402271270752e-01 + <_> + + 0 -1 1392 -1.5575819648802280e-02 + + 7.4903422594070435e-01 4.7558510303497314e-01 + <_> + + 0 -1 1393 5.3599118255078793e-03 + + 5.3653037548065186e-01 4.0046709775924683e-01 + <_> + + 0 -1 1394 -2.1763499826192856e-02 + + 7.4015498161315918e-02 4.9641749262809753e-01 + <_> + + 0 -1 1395 -1.6561590135097504e-01 + + 2.8591030836105347e-01 5.2180862426757812e-01 + <_> + + 0 -1 1396 1.6461320046801120e-04 + + 4.1916158795356750e-01 5.3807932138442993e-01 + <_> + + 0 -1 1397 -8.9077502489089966e-03 + + 6.2731927633285522e-01 4.8774048686027527e-01 + <_> + + 0 -1 1398 8.6346449097618461e-04 + + 5.1599407196044922e-01 3.6710259318351746e-01 + <_> + + 0 -1 1399 -1.3751760125160217e-03 + + 5.8843767642974854e-01 4.5790839195251465e-01 + <_> + + 0 -1 1400 -1.4081239933148026e-03 + + 3.5605099797248840e-01 5.1399451494216919e-01 + <_> + + 0 -1 1401 -3.9342888630926609e-03 + + 5.9942889213562012e-01 4.6642720699310303e-01 + <_> + + 0 -1 1402 -3.1966928392648697e-02 + + 3.3454620838165283e-01 5.1441830396652222e-01 + <_> + + 0 -1 1403 -1.5089280168467667e-05 + + 5.5826562643051147e-01 4.4140571355819702e-01 + <_> + + 0 -1 1404 5.1994470413774252e-04 + + 4.6236801147460938e-01 6.1689937114715576e-01 + <_> + + 0 -1 1405 -3.4220460802316666e-03 + + 6.5570747852325439e-01 4.9748051166534424e-01 + <_> + + 0 -1 1406 1.7723299970384687e-04 + + 5.2695018053054810e-01 3.9019080996513367e-01 + <_> + + 0 -1 1407 1.5716759953647852e-03 + + 4.6333730220794678e-01 5.7904577255249023e-01 + <_> + + 0 -1 1408 -8.9041329920291901e-03 + + 2.6896080374717712e-01 5.0535911321640015e-01 + <_> + + 0 -1 1409 4.0677518700249493e-04 + + 5.4566031694412231e-01 4.3298989534378052e-01 + <_> + + 0 -1 1410 6.7604780197143555e-03 + + 4.6489939093589783e-01 6.6897618770599365e-01 + <_> + + 0 -1 1411 2.9100088868290186e-03 + + 5.3097039461135864e-01 3.3778399229049683e-01 + <_> + + 0 -1 1412 1.3885459629818797e-03 + + 4.0747389197349548e-01 5.3491330146789551e-01 + <_> + + 0 -1 1413 -7.6764263212680817e-02 + + 1.9921760261058807e-01 5.2282422780990601e-01 + <_> + + 0 -1 1414 -2.2688310127705336e-04 + + 5.4385018348693848e-01 4.2530721426010132e-01 + <_> + + 0 -1 1415 -6.3094152137637138e-03 + + 4.2591789364814758e-01 5.3789097070693970e-01 + <_> + + 0 -1 1416 -1.1007279902696609e-01 + + 6.9041568040847778e-01 4.7217491269111633e-01 + <_> + + 0 -1 1417 2.8619659133255482e-04 + + 4.5249149203300476e-01 5.5483061075210571e-01 + <_> + + 0 -1 1418 2.9425329557852820e-05 + + 5.3703737258911133e-01 4.2364639043807983e-01 + <_> + + 0 -1 1419 -2.4886570870876312e-02 + + 6.4235579967498779e-01 4.9693039059638977e-01 + <_> + + 0 -1 1420 3.3148851245641708e-02 + + 4.9884751439094543e-01 1.6138119995594025e-01 + <_> + + 0 -1 1421 7.8491691965609789e-04 + + 5.4160261154174805e-01 4.2230090498924255e-01 + <_> + + 0 -1 1422 4.7087189741432667e-03 + + 4.5763289928436279e-01 6.0275578498840332e-01 + <_> + + 0 -1 1423 2.4144479539245367e-03 + + 5.3089731931686401e-01 4.4224989414215088e-01 + <_> + + 0 -1 1424 1.9523180089890957e-03 + + 4.7056341171264648e-01 6.6633248329162598e-01 + <_> + + 0 -1 1425 1.3031980488449335e-03 + + 4.4061261415481567e-01 5.5269622802734375e-01 + <_> + + 0 -1 1426 4.4735497795045376e-03 + + 5.1290237903594971e-01 3.3014988899230957e-01 + <_> + + 0 -1 1427 -2.6652868837118149e-03 + + 3.1354710459709167e-01 5.1750361919403076e-01 + <_> + + 0 -1 1428 1.3666770246345550e-04 + + 4.1193708777427673e-01 5.3068768978118896e-01 + <_> + + 0 -1 1429 -1.7126450315117836e-02 + + 6.1778062582015991e-01 4.8365789651870728e-01 + <_> + + 0 -1 1430 -2.6601430727168918e-04 + + 3.6543309688568115e-01 5.1697367429733276e-01 + <_> + + 0 -1 1431 -2.2932380437850952e-02 + + 3.4909150004386902e-01 5.1639920473098755e-01 + <_> + + 0 -1 1432 2.3316550068557262e-03 + + 5.1662999391555786e-01 3.7093898653984070e-01 + <_> + + 0 -1 1433 1.6925660893321037e-02 + + 5.0147360563278198e-01 8.0539882183074951e-01 + <_> + + 0 -1 1434 -8.9858826249837875e-03 + + 6.4707887172698975e-01 4.6570208668708801e-01 + <_> + + 0 -1 1435 -1.1874699965119362e-02 + + 3.2463788986206055e-01 5.2587550878524780e-01 + <_> + + 0 -1 1436 1.9350569345988333e-04 + + 5.1919418573379517e-01 3.8396438956260681e-01 + <_> + + 0 -1 1437 5.8713490143418312e-03 + + 4.9181339144706726e-01 6.1870431900024414e-01 + <_> + + 0 -1 1438 -2.4838790297508240e-01 + + 1.8368029594421387e-01 4.9881500005722046e-01 + <_> + + 0 -1 1439 1.2256000190973282e-02 + + 5.2270537614822388e-01 3.6320298910140991e-01 + <_> + + 0 -1 1440 8.3990179700776935e-04 + + 4.4902500510215759e-01 5.7741481065750122e-01 + <_> + + 0 -1 1441 2.5407369248569012e-03 + + 4.8047870397567749e-01 5.8582991361618042e-01 + <_> + + 0 -1 1442 -1.4822429977357388e-02 + + 2.5210499763488770e-01 5.0235372781753540e-01 + <_> + + 0 -1 1443 -5.7973959483206272e-03 + + 5.9966957569122314e-01 4.8537150025367737e-01 + <_> + + 0 -1 1444 7.2662148158997297e-04 + + 5.1537168025970459e-01 3.6717799305915833e-01 + <_> + + 0 -1 1445 -1.7232580110430717e-02 + + 6.6217190027236938e-01 4.9946561455726624e-01 + <_> + + 0 -1 1446 7.8624086454510689e-03 + + 4.6333950757980347e-01 6.2561017274856567e-01 + <_> + + 0 -1 1447 -4.7343620099127293e-03 + + 3.6155730485916138e-01 5.2818852663040161e-01 + <_> + + 0 -1 1448 8.3048478700220585e-04 + + 4.4428890943527222e-01 5.5509579181671143e-01 + <_> + + 0 -1 1449 7.6602199114859104e-03 + + 5.1629352569580078e-01 2.6133549213409424e-01 + <_> + + 0 -1 1450 -4.1048377752304077e-03 + + 2.7896320819854736e-01 5.0190317630767822e-01 + <_> + + 0 -1 1451 4.8512578941881657e-03 + + 4.9689841270446777e-01 5.6616681814193726e-01 + <_> + + 0 -1 1452 9.9896453320980072e-04 + + 4.4456079602241516e-01 5.5518132448196411e-01 + <_> + + 0 -1 1453 -2.7023631334304810e-01 + + 2.9388209804892540e-02 5.1513141393661499e-01 + <_> + + 0 -1 1454 -1.3090680353343487e-02 + + 5.6993997097015381e-01 4.4474598765373230e-01 + <_> + + 0 -1 1455 -9.4342790544033051e-03 + + 4.3054661154747009e-01 5.4878950119018555e-01 + <_> + + 0 -1 1456 -1.5482039889320731e-03 + + 3.6803171038627625e-01 5.1280808448791504e-01 + <_> + + 0 -1 1457 5.3746132180094719e-03 + + 4.8389169573783875e-01 6.1015558242797852e-01 + <_> + + 0 -1 1458 1.5786769799888134e-03 + + 5.3252232074737549e-01 4.1185480356216431e-01 + <_> + + 0 -1 1459 3.6856050137430429e-03 + + 4.8109480738639832e-01 6.2523031234741211e-01 + <_> + + 0 -1 1460 9.3887019902467728e-03 + + 5.2002298831939697e-01 3.6294108629226685e-01 + <_> + + 0 -1 1461 1.2792630121111870e-02 + + 4.9617099761962891e-01 6.7380160093307495e-01 + <_> + + 0 -1 1462 -3.3661040943115950e-03 + + 4.0602791309356689e-01 5.2835988998413086e-01 + <_> + + 0 -1 1463 3.9771420415490866e-04 + + 4.6741139888763428e-01 5.9007751941680908e-01 + <_> + + 0 -1 1464 1.4868030557408929e-03 + + 4.5191168785095215e-01 6.0820537805557251e-01 + <_> + + 0 -1 1465 -8.8686749339103699e-02 + + 2.8078991174697876e-01 5.1809918880462646e-01 + <_> + + 0 -1 1466 -7.4296112870797515e-05 + + 5.2955842018127441e-01 4.0876251459121704e-01 + <_> + + 0 -1 1467 -1.4932939848222304e-05 + + 5.4614001512527466e-01 4.5385429263114929e-01 + <_> + + 0 -1 1468 5.9162238612771034e-03 + + 5.3291612863540649e-01 4.1921341419219971e-01 + <_> + + 0 -1 1469 1.1141640134155750e-03 + + 4.5120179653167725e-01 5.7062172889709473e-01 + <_> + + 0 -1 1470 8.9249362645205110e-05 + + 4.5778059959411621e-01 5.8976382017135620e-01 + <_> + + 0 -1 1471 2.5319510605186224e-03 + + 5.2996039390563965e-01 3.3576390147209167e-01 + <_> + + 0 -1 1472 1.2426200322806835e-02 + + 4.9590590596199036e-01 1.3466019928455353e-01 + <_> + + 0 -1 1473 2.8335750102996826e-02 + + 5.1170790195465088e-01 6.1043637106195092e-04 + <_> + + 0 -1 1474 6.6165882162749767e-03 + + 4.7363498806953430e-01 7.0116281509399414e-01 + <_> + + 0 -1 1475 8.0468766391277313e-03 + + 5.2164179086685181e-01 3.2828199863433838e-01 + <_> + + 0 -1 1476 -1.1193980462849140e-03 + + 5.8098608255386353e-01 4.5637390017509460e-01 + <_> + + 0 -1 1477 1.3277590274810791e-02 + + 5.3983622789382935e-01 4.1039010882377625e-01 + <_> + + 0 -1 1478 4.8794739996083081e-04 + + 4.2492860555648804e-01 5.4105907678604126e-01 + <_> + + 0 -1 1479 1.1243170127272606e-02 + + 5.2699637413024902e-01 3.4382158517837524e-01 + <_> + + 0 -1 1480 -8.9896668214350939e-04 + + 5.6330758333206177e-01 4.4566130638122559e-01 + <_> + + 0 -1 1481 6.6677159629762173e-03 + + 5.3128892183303833e-01 4.3626791238784790e-01 + <_> + + 0 -1 1482 2.8947299346327782e-02 + + 4.7017949819564819e-01 6.5757977962493896e-01 + <_> + + 0 -1 1483 -2.3400049656629562e-02 + + 0. 5.1373988389968872e-01 + <_> + + 0 -1 1484 -8.9117050170898438e-02 + + 2.3745279759168625e-02 4.9424308538436890e-01 + <_> + + 0 -1 1485 -1.4054600149393082e-02 + + 3.1273230910301208e-01 5.1175111532211304e-01 + <_> + + 0 -1 1486 8.1239398568868637e-03 + + 5.0090491771697998e-01 2.5200259685516357e-01 + <_> + + 0 -1 1487 -4.9964650534093380e-03 + + 6.3871437311172485e-01 4.9278119206428528e-01 + <_> + + 0 -1 1488 3.1253970228135586e-03 + + 5.1368498802185059e-01 3.6804521083831787e-01 + <_> + + 0 -1 1489 6.7669642157852650e-03 + + 5.5098438262939453e-01 4.3636319041252136e-01 + <_> + + 0 -1 1490 -2.3711440153419971e-03 + + 6.1623352766036987e-01 4.5869469642639160e-01 + <_> + + 0 -1 1491 -5.3522791713476181e-03 + + 6.1854577064514160e-01 4.9204909801483154e-01 + <_> + + 0 -1 1492 -1.5968859195709229e-02 + + 1.3826179504394531e-01 4.9832528829574585e-01 + <_> + + 0 -1 1493 4.7676060348749161e-03 + + 4.6880578994750977e-01 5.4900461435317993e-01 + <_> + + 0 -1 1494 -2.4714691098779440e-03 + + 2.3685149848461151e-01 5.0039529800415039e-01 + <_> + + 0 -1 1495 -7.1033788844943047e-04 + + 5.8563941717147827e-01 4.7215330600738525e-01 + <_> + + 0 -1 1496 -1.4117559790611267e-01 + + 8.6900062859058380e-02 4.9615910649299622e-01 + <_> + + 0 -1 1497 1.0651809722185135e-01 + + 5.1388370990753174e-01 1.7410050332546234e-01 + <_> + + 0 -1 1498 -5.2744749933481216e-02 + + 7.3536360263824463e-01 4.7728818655014038e-01 + <_> + + 0 -1 1499 -4.7431760467588902e-03 + + 3.8844060897827148e-01 5.2927017211914062e-01 + <_> + + 0 -1 1500 9.9676765967160463e-04 + + 5.2234929800033569e-01 4.0034240484237671e-01 + <_> + + 0 -1 1501 8.0284131690859795e-03 + + 4.9591061472892761e-01 7.2129642963409424e-01 + <_> + + 0 -1 1502 8.6025858763605356e-04 + + 4.4448840618133545e-01 5.5384761095046997e-01 + <_> + + 0 -1 1503 9.3191501218825579e-04 + + 5.3983712196350098e-01 4.1632440686225891e-01 + <_> + + 0 -1 1504 -2.5082060601562262e-03 + + 5.8542650938034058e-01 4.5625001192092896e-01 + <_> + + 0 -1 1505 -2.1378761157393456e-03 + + 4.6080690622329712e-01 5.2802592515945435e-01 + <_> + + 0 -1 1506 -2.1546049974858761e-03 + + 3.7911269068717957e-01 5.2559971809387207e-01 + <_> + + 0 -1 1507 -7.6214009895920753e-03 + + 5.9986090660095215e-01 4.9520739912986755e-01 + <_> + + 0 -1 1508 2.2055360022932291e-03 + + 4.4842061400413513e-01 5.5885308980941772e-01 + <_> + + 0 -1 1509 1.2586950324475765e-03 + + 5.4507470130920410e-01 4.4238409399986267e-01 + <_> + + 0 -1 1510 -5.0926720723509789e-03 + + 4.1182750463485718e-01 5.2630358934402466e-01 + <_> + + 0 -1 1511 -2.5095739401876926e-03 + + 5.7879078388214111e-01 4.9984949827194214e-01 + <_> + + 0 -1 1512 -7.7327556908130646e-02 + + 8.3978658914566040e-01 4.8111200332641602e-01 + <_> + + 0 -1 1513 -4.1485819965600967e-02 + + 2.4086110293865204e-01 5.1769930124282837e-01 + <_> + + 0 -1 1514 1.0355669655837119e-04 + + 4.3553608655929565e-01 5.4170542955398560e-01 + <_> + + 0 -1 1515 1.3255809899419546e-03 + + 5.4539710283279419e-01 4.8940950632095337e-01 + <_> + + 0 -1 1516 -8.0598732456564903e-03 + + 5.7710242271423340e-01 4.5779189467430115e-01 + <_> + + 0 -1 1517 1.9058620557188988e-02 + + 5.1698678731918335e-01 3.4004750847816467e-01 + <_> + + 0 -1 1518 -3.5057891160249710e-02 + + 2.2032439708709717e-01 5.0005030632019043e-01 + <_> + + 0 -1 1519 5.7296059094369411e-03 + + 5.0434082746505737e-01 6.5975707769393921e-01 + <_> + + 0 -1 1520 -1.1648329906165600e-02 + + 2.1862849593162537e-01 4.9966529011726379e-01 + <_> + + 0 -1 1521 1.4544479781761765e-03 + + 5.0076818466186523e-01 5.5037277936935425e-01 + <_> + + 0 -1 1522 -2.5030909455381334e-04 + + 4.1298410296440125e-01 5.2416700124740601e-01 + <_> + + 0 -1 1523 -8.2907272735610604e-04 + + 5.4128682613372803e-01 4.9744960665702820e-01 + <_> + + 0 -1 1524 1.0862209601327777e-03 + + 4.6055299043655396e-01 5.8792287111282349e-01 + <_> + + 0 -1 1525 2.0000500080641359e-04 + + 5.2788549661636353e-01 4.7052091360092163e-01 + <_> + + 0 -1 1526 2.9212920926511288e-03 + + 5.1296097040176392e-01 3.7555369734764099e-01 + <_> + + 0 -1 1527 2.5387400761246681e-02 + + 4.8226919770240784e-01 5.7907682657241821e-01 + <_> + + 0 -1 1528 -3.1968469265848398e-03 + + 5.2483952045440674e-01 3.9628401398658752e-01 + <_> + 182 + 9.0253349304199219e+01 + + <_> + + 0 -1 1529 5.8031738735735416e-03 + + 3.4989839792251587e-01 5.9619832038879395e-01 + <_> + + 0 -1 1530 -9.0003069490194321e-03 + + 6.8166369199752808e-01 4.4785520434379578e-01 + <_> + + 0 -1 1531 -1.1549659539014101e-03 + + 5.5857062339782715e-01 3.5782510042190552e-01 + <_> + + 0 -1 1532 -1.1069850297644734e-03 + + 5.3650361299514771e-01 3.0504280328750610e-01 + <_> + + 0 -1 1533 1.0308309720130637e-04 + + 3.6390951275825500e-01 5.3446358442306519e-01 + <_> + + 0 -1 1534 -5.0984839908778667e-03 + + 2.8591570258140564e-01 5.5042648315429688e-01 + <_> + + 0 -1 1535 8.2572200335562229e-04 + + 5.2365237474441528e-01 3.4760418534278870e-01 + <_> + + 0 -1 1536 9.9783325567841530e-03 + + 4.7503221035003662e-01 6.2196469306945801e-01 + <_> + + 0 -1 1537 -3.7402529269456863e-02 + + 3.3433759212493896e-01 5.2780628204345703e-01 + <_> + + 0 -1 1538 4.8548257909715176e-03 + + 5.1921808719635010e-01 3.7004441022872925e-01 + <_> + + 0 -1 1539 -1.8664470408111811e-03 + + 2.9298439621925354e-01 5.0919449329376221e-01 + <_> + + 0 -1 1540 1.6888890415430069e-02 + + 3.6868458986282349e-01 5.4312258958816528e-01 + <_> + + 0 -1 1541 -5.8372621424496174e-03 + + 3.6321839690208435e-01 5.2213358879089355e-01 + <_> + + 0 -1 1542 -1.4713739510625601e-03 + + 5.8706837892532349e-01 4.7006508708000183e-01 + <_> + + 0 -1 1543 -1.1522950371727347e-03 + + 3.1958949565887451e-01 5.1409542560577393e-01 + <_> + + 0 -1 1544 -4.2560300789773464e-03 + + 6.3018590211868286e-01 4.8149210214614868e-01 + <_> + + 0 -1 1545 -6.7378291860222816e-03 + + 1.9770480692386627e-01 5.0258082151412964e-01 + <_> + + 0 -1 1546 1.1382670141756535e-02 + + 4.9541321396827698e-01 6.8670457601547241e-01 + <_> + + 0 -1 1547 5.1794708706438541e-03 + + 5.1644277572631836e-01 3.3506479859352112e-01 + <_> + + 0 -1 1548 -1.1743789911270142e-01 + + 2.3152460157871246e-01 5.2344137430191040e-01 + <_> + + 0 -1 1549 2.8703449293971062e-02 + + 4.6642971038818359e-01 6.7225211858749390e-01 + <_> + + 0 -1 1550 4.8231030814349651e-03 + + 5.2208751440048218e-01 2.7235329151153564e-01 + <_> + + 0 -1 1551 2.6798530016094446e-03 + + 5.0792771577835083e-01 2.9069489240646362e-01 + <_> + + 0 -1 1552 8.0504082143306732e-03 + + 4.8859509825706482e-01 6.3950210809707642e-01 + <_> + + 0 -1 1553 4.8054959625005722e-03 + + 5.1972568035125732e-01 3.6566638946533203e-01 + <_> + + 0 -1 1554 -2.2420159075409174e-03 + + 6.1534678936004639e-01 4.7637018561363220e-01 + <_> + + 0 -1 1555 -1.3757710345089436e-02 + + 2.6373448967933655e-01 5.0309032201766968e-01 + <_> + + 0 -1 1556 -1.0338299721479416e-01 + + 2.2875219583511353e-01 5.1824611425399780e-01 + <_> + + 0 -1 1557 -9.4432085752487183e-03 + + 6.9533038139343262e-01 4.6949490904808044e-01 + <_> + + 0 -1 1558 8.0271181650459766e-04 + + 5.4506552219390869e-01 4.2687839269638062e-01 + <_> + + 0 -1 1559 -4.1945669800043106e-03 + + 6.0913878679275513e-01 4.5716428756713867e-01 + <_> + + 0 -1 1560 1.0942210443317890e-02 + + 5.2410632371902466e-01 3.2845470309257507e-01 + <_> + + 0 -1 1561 -5.7841069065034389e-04 + + 5.3879290819168091e-01 4.1793689131736755e-01 + <_> + + 0 -1 1562 -2.0888620056211948e-03 + + 4.2926910519599915e-01 5.3017157316207886e-01 + <_> + + 0 -1 1563 3.2383969519287348e-03 + + 3.7923479080200195e-01 5.2207440137863159e-01 + <_> + + 0 -1 1564 4.9075027927756310e-03 + + 5.2372831106185913e-01 4.1267579793930054e-01 + <_> + + 0 -1 1565 -3.2277941703796387e-02 + + 1.9476559758186340e-01 4.9945020675659180e-01 + <_> + + 0 -1 1566 -8.9711230248212814e-03 + + 6.0112851858139038e-01 4.9290320277214050e-01 + <_> + + 0 -1 1567 1.5321089886128902e-02 + + 5.0097537040710449e-01 2.0398220419883728e-01 + <_> + + 0 -1 1568 2.0855569746345282e-03 + + 4.8621898889541626e-01 5.7216948270797729e-01 + <_> + + 0 -1 1569 5.0615021027624607e-03 + + 5.0002187490463257e-01 1.8018059432506561e-01 + <_> + + 0 -1 1570 -3.7174751050770283e-03 + + 5.5301171541213989e-01 4.8975929617881775e-01 + <_> + + 0 -1 1571 -1.2170500122010708e-02 + + 4.1786059737205505e-01 5.3837239742279053e-01 + <_> + + 0 -1 1572 4.6248398721218109e-03 + + 4.9971699714660645e-01 5.7613271474838257e-01 + <_> + + 0 -1 1573 -2.1040429419372231e-04 + + 5.3318071365356445e-01 4.0976810455322266e-01 + <_> + + 0 -1 1574 -1.4641780406236649e-02 + + 5.7559251785278320e-01 5.0517761707305908e-01 + <_> + + 0 -1 1575 3.3199489116668701e-03 + + 4.5769768953323364e-01 6.0318058729171753e-01 + <_> + + 0 -1 1576 3.7236879579722881e-03 + + 4.3803969025611877e-01 5.4158830642700195e-01 + <_> + + 0 -1 1577 8.2951161311939359e-04 + + 5.1630318164825439e-01 3.7022191286087036e-01 + <_> + + 0 -1 1578 -1.1408490128815174e-02 + + 6.0729467868804932e-01 4.8625651001930237e-01 + <_> + + 0 -1 1579 -4.5320121571421623e-03 + + 3.2924759387969971e-01 5.0889629125595093e-01 + <_> + + 0 -1 1580 5.1276017911732197e-03 + + 4.8297679424285889e-01 6.1227089166641235e-01 + <_> + + 0 -1 1581 9.8583158105611801e-03 + + 4.6606799960136414e-01 6.5561771392822266e-01 + <_> + + 0 -1 1582 3.6985918879508972e-02 + + 5.2048492431640625e-01 1.6904720664024353e-01 + <_> + + 0 -1 1583 4.6491161920130253e-03 + + 5.1673221588134766e-01 3.7252250313758850e-01 + <_> + + 0 -1 1584 -4.2664702050387859e-03 + + 6.4064931869506836e-01 4.9873429536819458e-01 + <_> + + 0 -1 1585 -4.7956590424291790e-04 + + 5.8972930908203125e-01 4.4648739695549011e-01 + <_> + + 0 -1 1586 3.6827160511165857e-03 + + 5.4415607452392578e-01 3.4726628661155701e-01 + <_> + + 0 -1 1587 -1.0059880092740059e-02 + + 2.1431629359722137e-01 5.0048297643661499e-01 + <_> + + 0 -1 1588 -3.0361840617842972e-04 + + 5.3864240646362305e-01 4.5903238654136658e-01 + <_> + + 0 -1 1589 -1.4545479789376259e-03 + + 5.7511842250823975e-01 4.4970950484275818e-01 + <_> + + 0 -1 1590 1.6515209572389722e-03 + + 5.4219377040863037e-01 4.2385208606719971e-01 + <_> + + 0 -1 1591 -7.8468639403581619e-03 + + 4.0779209136962891e-01 5.2581572532653809e-01 + <_> + + 0 -1 1592 -5.1259850151836872e-03 + + 4.2292758822441101e-01 5.4794532060623169e-01 + <_> + + 0 -1 1593 -3.6890961229801178e-02 + + 6.5963757038116455e-01 4.6746781468391418e-01 + <_> + + 0 -1 1594 2.4035639944486320e-04 + + 4.2511358857154846e-01 5.5732029676437378e-01 + <_> + + 0 -1 1595 -1.5150169929256663e-05 + + 5.2592468261718750e-01 4.0741148591041565e-01 + <_> + + 0 -1 1596 2.2108471021056175e-03 + + 4.6717229485511780e-01 5.8863520622253418e-01 + <_> + + 0 -1 1597 -1.1568620102480054e-03 + + 5.7110661268234253e-01 4.4871619343757629e-01 + <_> + + 0 -1 1598 4.9996292218565941e-03 + + 5.2641981840133667e-01 2.8983271121978760e-01 + <_> + + 0 -1 1599 -1.4656189596280456e-03 + + 3.8917380571365356e-01 5.1978719234466553e-01 + <_> + + 0 -1 1600 -1.1975039960816503e-03 + + 5.7958728075027466e-01 4.9279558658599854e-01 + <_> + + 0 -1 1601 -4.4954330660402775e-03 + + 2.3776030540466309e-01 5.0125551223754883e-01 + <_> + + 0 -1 1602 1.4997160178609192e-04 + + 4.8766261339187622e-01 5.6176078319549561e-01 + <_> + + 0 -1 1603 2.6391509454697371e-03 + + 5.1680880784988403e-01 3.7655091285705566e-01 + <_> + + 0 -1 1604 -2.9368131072260439e-04 + + 5.4466491937637329e-01 4.8746308684349060e-01 + <_> + + 0 -1 1605 1.4211760135367513e-03 + + 4.6878978610038757e-01 6.6913318634033203e-01 + <_> + + 0 -1 1606 7.9427637159824371e-02 + + 5.1934438943862915e-01 2.7329459786415100e-01 + <_> + + 0 -1 1607 7.9937502741813660e-02 + + 4.9717310070991516e-01 1.7820839583873749e-01 + <_> + + 0 -1 1608 1.1089259758591652e-02 + + 5.1659947633743286e-01 3.2094758749008179e-01 + <_> + + 0 -1 1609 1.6560709627810866e-04 + + 4.0584719181060791e-01 5.3072762489318848e-01 + <_> + + 0 -1 1610 -5.3354292176663876e-03 + + 3.4450569748878479e-01 5.1581299304962158e-01 + <_> + + 0 -1 1611 1.1287260567769408e-03 + + 4.5948630571365356e-01 6.0755330324172974e-01 + <_> + + 0 -1 1612 -2.1969219669699669e-02 + + 1.6804009675979614e-01 5.2285957336425781e-01 + <_> + + 0 -1 1613 -2.1775320055894554e-04 + + 3.8615968823432922e-01 5.2156728506088257e-01 + <_> + + 0 -1 1614 2.0200149447191507e-04 + + 5.5179792642593384e-01 4.3630391359329224e-01 + <_> + + 0 -1 1615 -2.1733149886131287e-02 + + 7.9994601011276245e-01 4.7898510098457336e-01 + <_> + + 0 -1 1616 -8.4399932529777288e-04 + + 4.0859758853912354e-01 5.3747731447219849e-01 + <_> + + 0 -1 1617 -4.3895249837078154e-04 + + 5.4704052209854126e-01 4.3661430478096008e-01 + <_> + + 0 -1 1618 1.5092400135472417e-03 + + 4.9889969825744629e-01 5.8421492576599121e-01 + <_> + + 0 -1 1619 -3.5547839943319559e-03 + + 6.7536902427673340e-01 4.7210058569908142e-01 + <_> + + 0 -1 1620 4.8191400128416717e-04 + + 5.4158538579940796e-01 4.3571090698242188e-01 + <_> + + 0 -1 1621 -6.0264398343861103e-03 + + 2.2585099935531616e-01 4.9918809533119202e-01 + <_> + + 0 -1 1622 -1.1668140068650246e-02 + + 6.2565547227859497e-01 4.9274989962577820e-01 + <_> + + 0 -1 1623 -2.8718370012938976e-03 + + 3.9477849006652832e-01 5.2458018064498901e-01 + <_> + + 0 -1 1624 1.7051169648766518e-02 + + 4.7525110840797424e-01 5.7942241430282593e-01 + <_> + + 0 -1 1625 -1.3352080248296261e-02 + + 6.0411047935485840e-01 4.5445358753204346e-01 + <_> + + 0 -1 1626 -3.9301801007241011e-04 + + 4.2582759261131287e-01 5.5449050664901733e-01 + <_> + + 0 -1 1627 3.0483349692076445e-03 + + 5.2334201335906982e-01 3.7802729010581970e-01 + <_> + + 0 -1 1628 -4.3579288758337498e-03 + + 6.3718891143798828e-01 4.8386740684509277e-01 + <_> + + 0 -1 1629 5.6661018170416355e-03 + + 5.3747057914733887e-01 4.1636660695075989e-01 + <_> + + 0 -1 1630 6.0677339206449687e-05 + + 4.6387958526611328e-01 5.3116250038146973e-01 + <_> + + 0 -1 1631 3.6738160997629166e-02 + + 4.6886560320854187e-01 6.4665240049362183e-01 + <_> + + 0 -1 1632 8.6528137326240540e-03 + + 5.2043187618255615e-01 2.1886579692363739e-01 + <_> + + 0 -1 1633 -1.5371359884738922e-01 + + 1.6303719580173492e-01 4.9588400125503540e-01 + <_> + + 0 -1 1634 -4.1560421232134104e-04 + + 5.7744592428207397e-01 4.6964588761329651e-01 + <_> + + 0 -1 1635 -1.2640169588848948e-03 + + 3.9771759510040283e-01 5.2171981334686279e-01 + <_> + + 0 -1 1636 -3.5473341122269630e-03 + + 6.0465282201766968e-01 4.8083150386810303e-01 + <_> + + 0 -1 1637 3.0019069527043030e-05 + + 3.9967238903045654e-01 5.2282011508941650e-01 + <_> + + 0 -1 1638 1.3113019522279501e-03 + + 4.7121581435203552e-01 5.7659977674484253e-01 + <_> + + 0 -1 1639 -1.3374709524214268e-03 + + 4.1095849871635437e-01 5.2531701326370239e-01 + <_> + + 0 -1 1640 2.0876709371805191e-02 + + 5.2029937505722046e-01 1.7579819262027740e-01 + <_> + + 0 -1 1641 -7.5497948564589024e-03 + + 6.5666097402572632e-01 4.6949750185012817e-01 + <_> + + 0 -1 1642 2.4188550189137459e-02 + + 5.1286739110946655e-01 3.3702209591865540e-01 + <_> + + 0 -1 1643 -2.9358828905969858e-03 + + 6.5807867050170898e-01 4.6945410966873169e-01 + <_> + + 0 -1 1644 5.7557929307222366e-02 + + 5.1464450359344482e-01 2.7752599120140076e-01 + <_> + + 0 -1 1645 -1.1343370424583554e-03 + + 3.8366019725799561e-01 5.1926672458648682e-01 + <_> + + 0 -1 1646 1.6816999763250351e-02 + + 5.0855928659439087e-01 6.1772608757019043e-01 + <_> + + 0 -1 1647 5.0535178743302822e-03 + + 5.1387631893157959e-01 3.6847919225692749e-01 + <_> + + 0 -1 1648 -4.5874710194766521e-03 + + 5.9896552562713623e-01 4.8352020978927612e-01 + <_> + + 0 -1 1649 1.6882460331544280e-03 + + 4.5094868540763855e-01 5.7230567932128906e-01 + <_> + + 0 -1 1650 -1.6554000321775675e-03 + + 3.4967708587646484e-01 5.2433192729949951e-01 + <_> + + 0 -1 1651 -1.9373800605535507e-02 + + 1.1205369979143143e-01 4.9687129259109497e-01 + <_> + + 0 -1 1652 1.0374450124800205e-02 + + 5.1481968164443970e-01 4.3952131271362305e-01 + <_> + + 0 -1 1653 1.4973050565458834e-04 + + 4.0849998593330383e-01 5.2698868513107300e-01 + <_> + + 0 -1 1654 -4.2981930077075958e-02 + + 6.3941049575805664e-01 5.0185042619705200e-01 + <_> + + 0 -1 1655 8.3065936341881752e-03 + + 4.7075539827346802e-01 6.6983532905578613e-01 + <_> + + 0 -1 1656 -4.1285790503025055e-03 + + 4.5413690805435181e-01 5.3236472606658936e-01 + <_> + + 0 -1 1657 1.7399420030415058e-03 + + 4.3339619040489197e-01 5.4398661851882935e-01 + <_> + + 0 -1 1658 1.1739750334527344e-04 + + 4.5796871185302734e-01 5.5434262752532959e-01 + <_> + + 0 -1 1659 1.8585780344437808e-04 + + 4.3246439099311829e-01 5.4267549514770508e-01 + <_> + + 0 -1 1660 5.5587692186236382e-03 + + 5.2572208642959595e-01 3.5506111383438110e-01 + <_> + + 0 -1 1661 -7.9851560294628143e-03 + + 6.0430181026458740e-01 4.6306359767913818e-01 + <_> + + 0 -1 1662 6.0594122624024749e-04 + + 4.5982548594474792e-01 5.5331951379776001e-01 + <_> + + 0 -1 1663 -2.2983040253166109e-04 + + 4.1307520866394043e-01 5.3224611282348633e-01 + <_> + + 0 -1 1664 4.3740210821852088e-04 + + 4.0430399775505066e-01 5.4092890024185181e-01 + <_> + + 0 -1 1665 2.9482020181603730e-04 + + 4.4949638843536377e-01 5.6288522481918335e-01 + <_> + + 0 -1 1666 1.0312659665942192e-02 + + 5.1775109767913818e-01 2.7043169736862183e-01 + <_> + + 0 -1 1667 -7.7241109684109688e-03 + + 1.9880190491676331e-01 4.9805539846420288e-01 + <_> + + 0 -1 1668 -4.6797208487987518e-03 + + 6.6447502374649048e-01 5.0182962417602539e-01 + <_> + + 0 -1 1669 -5.0755459815263748e-03 + + 3.8983049988746643e-01 5.1852691173553467e-01 + <_> + + 0 -1 1670 2.2479740437120199e-03 + + 4.8018088936805725e-01 5.6603360176086426e-01 + <_> + + 0 -1 1671 8.3327008178457618e-04 + + 5.2109199762344360e-01 3.9571881294250488e-01 + <_> + + 0 -1 1672 -4.1279330849647522e-02 + + 6.1545419692993164e-01 5.0070542097091675e-01 + <_> + + 0 -1 1673 -5.0930189900100231e-04 + + 3.9759421348571777e-01 5.2284038066864014e-01 + <_> + + 0 -1 1674 1.2568780221045017e-03 + + 4.9791380763053894e-01 5.9391832351684570e-01 + <_> + + 0 -1 1675 8.0048497766256332e-03 + + 4.9844971299171448e-01 1.6333660483360291e-01 + <_> + + 0 -1 1676 -1.1879300000146031e-03 + + 5.9049648046493530e-01 4.9426248669624329e-01 + <_> + + 0 -1 1677 6.1948952497914433e-04 + + 4.1995579004287720e-01 5.3287261724472046e-01 + <_> + + 0 -1 1678 6.6829859279096127e-03 + + 5.4186028242111206e-01 4.9058890342712402e-01 + <_> + + 0 -1 1679 -3.7062340416014194e-03 + + 3.7259390950202942e-01 5.1380002498626709e-01 + <_> + + 0 -1 1680 -3.9739411324262619e-02 + + 6.4789611101150513e-01 5.0503468513488770e-01 + <_> + + 0 -1 1681 1.4085009461268783e-03 + + 4.6823391318321228e-01 6.3778841495513916e-01 + <_> + + 0 -1 1682 3.9322688826359808e-04 + + 5.4585301876068115e-01 4.1504821181297302e-01 + <_> + + 0 -1 1683 -1.8979819724336267e-03 + + 3.6901599168777466e-01 5.1497042179107666e-01 + <_> + + 0 -1 1684 -1.3970440253615379e-02 + + 6.0505628585815430e-01 4.8113578557968140e-01 + <_> + + 0 -1 1685 -1.0100819915533066e-01 + + 2.0170800387859344e-01 4.9923619627952576e-01 + <_> + + 0 -1 1686 -1.7346920445561409e-02 + + 5.7131487131118774e-01 4.8994860053062439e-01 + <_> + + 0 -1 1687 1.5619759506080300e-04 + + 4.2153888940811157e-01 5.3926420211791992e-01 + <_> + + 0 -1 1688 1.3438929617404938e-01 + + 5.1361519098281860e-01 3.7676128745079041e-01 + <_> + + 0 -1 1689 -2.4582240730524063e-02 + + 7.0273578166961670e-01 4.7479069232940674e-01 + <_> + + 0 -1 1690 -3.8553720805794001e-03 + + 4.3174090981483459e-01 5.4277169704437256e-01 + <_> + + 0 -1 1691 -2.3165249731391668e-03 + + 5.9426987171173096e-01 4.6186479926109314e-01 + <_> + + 0 -1 1692 -4.8518120311200619e-03 + + 6.1915689706802368e-01 4.8848950862884521e-01 + <_> + + 0 -1 1693 2.4699938949197531e-03 + + 5.2566647529602051e-01 4.0171998739242554e-01 + <_> + + 0 -1 1694 4.5496959239244461e-02 + + 5.2378678321838379e-01 2.6857739686965942e-01 + <_> + + 0 -1 1695 -2.0319599658250809e-02 + + 2.1304459869861603e-01 4.9797388911247253e-01 + <_> + + 0 -1 1696 2.6994998916052282e-04 + + 4.8140418529510498e-01 5.5431222915649414e-01 + <_> + + 0 -1 1697 -1.8232699949294329e-03 + + 6.4825797080993652e-01 4.7099891304969788e-01 + <_> + + 0 -1 1698 -6.3015790656208992e-03 + + 4.5819279551506042e-01 5.3062361478805542e-01 + <_> + + 0 -1 1699 -2.4139499873854220e-04 + + 5.2320867776870728e-01 4.0517631173133850e-01 + <_> + + 0 -1 1700 -1.0330369696021080e-03 + + 5.5562019348144531e-01 4.7891938686370850e-01 + <_> + + 0 -1 1701 1.8041160365100950e-04 + + 5.2294427156448364e-01 4.0118101239204407e-01 + <_> + + 0 -1 1702 -6.1407860368490219e-02 + + 6.2986820936203003e-01 5.0107032060623169e-01 + <_> + + 0 -1 1703 -6.9543913006782532e-02 + + 7.2282809019088745e-01 4.7731840610504150e-01 + <_> + + 0 -1 1704 -7.0542663335800171e-02 + + 2.2695130109786987e-01 5.1825290918350220e-01 + <_> + + 0 -1 1705 2.4423799477517605e-03 + + 5.2370971441268921e-01 4.0981510281562805e-01 + <_> + + 0 -1 1706 1.5494349645450711e-03 + + 4.7737509012222290e-01 5.4680430889129639e-01 + <_> + + 0 -1 1707 -2.3914219811558723e-02 + + 7.1469759941101074e-01 4.7838249802589417e-01 + <_> + + 0 -1 1708 -1.2453690171241760e-02 + + 2.6352968811988831e-01 5.2411228418350220e-01 + <_> + + 0 -1 1709 -2.0760179904755205e-04 + + 3.6237570643424988e-01 5.1136088371276855e-01 + <_> + + 0 -1 1710 2.9781080229440704e-05 + + 4.7059321403503418e-01 5.4328018426895142e-01 + <_> + 211 + 1.0474919891357422e+02 + + <_> + + 0 -1 1711 1.1772749945521355e-02 + + 3.8605189323425293e-01 6.4211672544479370e-01 + <_> + + 0 -1 1712 2.7037570253014565e-02 + + 4.3856549263000488e-01 6.7540389299392700e-01 + <_> + + 0 -1 1713 -3.6419500247575343e-05 + + 5.4871010780334473e-01 3.4233158826828003e-01 + <_> + + 0 -1 1714 1.9995409529656172e-03 + + 3.2305321097373962e-01 5.4003179073333740e-01 + <_> + + 0 -1 1715 4.5278300531208515e-03 + + 5.0916397571563721e-01 2.9350438714027405e-01 + <_> + + 0 -1 1716 4.7890920541249216e-04 + + 4.1781538724899292e-01 5.3440642356872559e-01 + <_> + + 0 -1 1717 1.1720920447260141e-03 + + 2.8991821408271790e-01 5.1320707798004150e-01 + <_> + + 0 -1 1718 9.5305702416226268e-04 + + 4.2801249027252197e-01 5.5608451366424561e-01 + <_> + + 0 -1 1719 1.5099150004971307e-05 + + 4.0448719263076782e-01 5.4047602415084839e-01 + <_> + + 0 -1 1720 -6.0817901976406574e-04 + + 4.2717689275741577e-01 5.5034661293029785e-01 + <_> + + 0 -1 1721 3.3224520739167929e-03 + + 3.9627239108085632e-01 5.3697347640991211e-01 + <_> + + 0 -1 1722 -1.1037490330636501e-03 + + 4.7271779179573059e-01 5.2377498149871826e-01 + <_> + + 0 -1 1723 -1.4350269921123981e-03 + + 5.6030082702636719e-01 4.2235091328620911e-01 + <_> + + 0 -1 1724 2.0767399109899998e-03 + + 5.2259171009063721e-01 4.7327259182929993e-01 + <_> + + 0 -1 1725 -1.6412809782195836e-04 + + 3.9990758895874023e-01 5.4327398538589478e-01 + <_> + + 0 -1 1726 8.8302437216043472e-03 + + 4.6783858537673950e-01 6.0273271799087524e-01 + <_> + + 0 -1 1727 -1.0552070103585720e-02 + + 3.4939670562744141e-01 5.2139747142791748e-01 + <_> + + 0 -1 1728 -2.2731600329279900e-03 + + 6.1858189105987549e-01 4.7490629553794861e-01 + <_> + + 0 -1 1729 -8.4786332445219159e-04 + + 5.2853411436080933e-01 3.8434821367263794e-01 + <_> + + 0 -1 1730 1.2081359745934606e-03 + + 5.3606408834457397e-01 3.4473359584808350e-01 + <_> + + 0 -1 1731 2.6512730401009321e-03 + + 4.5582920312881470e-01 6.1939620971679688e-01 + <_> + + 0 -1 1732 -1.1012479662895203e-03 + + 3.6802300810813904e-01 5.3276282548904419e-01 + <_> + + 0 -1 1733 4.9561518244445324e-04 + + 3.9605951309204102e-01 5.2749407291412354e-01 + <_> + + 0 -1 1734 -4.3901771306991577e-02 + + 7.0204448699951172e-01 4.9928390979766846e-01 + <_> + + 0 -1 1735 3.4690350294113159e-02 + + 5.0491642951965332e-01 2.7666029334068298e-01 + <_> + + 0 -1 1736 -2.7442190330475569e-03 + + 2.6726329326629639e-01 5.2749711275100708e-01 + <_> + + 0 -1 1737 3.3316588960587978e-03 + + 4.5794829726219177e-01 6.0011017322540283e-01 + <_> + + 0 -1 1738 -2.0044570788741112e-02 + + 3.1715941429138184e-01 5.2357178926467896e-01 + <_> + + 0 -1 1739 1.3492030557245016e-03 + + 5.2653628587722778e-01 4.0343248844146729e-01 + <_> + + 0 -1 1740 2.9702018946409225e-03 + + 5.3324568271636963e-01 4.5719841122627258e-01 + <_> + + 0 -1 1741 6.3039981760084629e-03 + + 4.5933109521865845e-01 6.0346359014511108e-01 + <_> + + 0 -1 1742 -1.2936590239405632e-02 + + 4.4379639625549316e-01 5.3729712963104248e-01 + <_> + + 0 -1 1743 4.0148729458451271e-03 + + 4.6803238987922668e-01 6.4378339052200317e-01 + <_> + + 0 -1 1744 -2.6401679497212172e-03 + + 3.7096318602561951e-01 5.3143328428268433e-01 + <_> + + 0 -1 1745 1.3918439857661724e-02 + + 4.7235551476478577e-01 7.1308088302612305e-01 + <_> + + 0 -1 1746 -4.5087869511917233e-04 + + 4.4923940300941467e-01 5.3704041242599487e-01 + <_> + + 0 -1 1747 2.5384349282830954e-04 + + 4.4068640470504761e-01 5.5144029855728149e-01 + <_> + + 0 -1 1748 2.2710000630468130e-03 + + 4.6824169158935547e-01 5.9679841995239258e-01 + <_> + + 0 -1 1749 2.4120779708027840e-03 + + 5.0793921947479248e-01 3.0185988545417786e-01 + <_> + + 0 -1 1750 -3.6025670851813629e-05 + + 5.6010371446609497e-01 4.4710969924926758e-01 + <_> + + 0 -1 1751 -7.4905529618263245e-03 + + 2.2075350582599640e-01 4.9899441003799438e-01 + <_> + + 0 -1 1752 -1.7513120546936989e-02 + + 6.5312159061431885e-01 5.0176489353179932e-01 + <_> + + 0 -1 1753 1.4281630516052246e-01 + + 4.9679630994796753e-01 1.4820620417594910e-01 + <_> + + 0 -1 1754 5.5345268920063972e-03 + + 4.8989468812942505e-01 5.9542238712310791e-01 + <_> + + 0 -1 1755 -9.6323591424152255e-04 + + 3.9271169900894165e-01 5.1960742473602295e-01 + <_> + + 0 -1 1756 -2.0370010752230883e-03 + + 5.6133252382278442e-01 4.8848581314086914e-01 + <_> + + 0 -1 1757 1.6614829655736685e-03 + + 4.4728800654411316e-01 5.5788809061050415e-01 + <_> + + 0 -1 1758 -3.1188090797513723e-03 + + 3.8405328989028931e-01 5.3974777460098267e-01 + <_> + + 0 -1 1759 -6.4000617712736130e-03 + + 5.8439838886260986e-01 4.5332181453704834e-01 + <_> + + 0 -1 1760 3.1319601112045348e-04 + + 5.4392218589782715e-01 4.2347279191017151e-01 + <_> + + 0 -1 1761 -1.8222099170088768e-02 + + 1.2884649634361267e-01 4.9584048986434937e-01 + <_> + + 0 -1 1762 8.7969247251749039e-03 + + 4.9512979388237000e-01 7.1534800529479980e-01 + <_> + + 0 -1 1763 -4.2395070195198059e-03 + + 3.9465999603271484e-01 5.1949369907379150e-01 + <_> + + 0 -1 1764 9.7086271271109581e-03 + + 4.8975038528442383e-01 6.0649001598358154e-01 + <_> + + 0 -1 1765 -3.9934171363711357e-03 + + 3.2454401254653931e-01 5.0608289241790771e-01 + <_> + + 0 -1 1766 -1.6785059124231339e-02 + + 1.5819530189037323e-01 5.2037787437438965e-01 + <_> + + 0 -1 1767 1.8272090703248978e-02 + + 4.6809351444244385e-01 6.6269791126251221e-01 + <_> + + 0 -1 1768 5.6872838176786900e-03 + + 5.2116978168487549e-01 3.5121849179267883e-01 + <_> + + 0 -1 1769 -1.0739039862528443e-03 + + 5.7683861255645752e-01 4.5298451185226440e-01 + <_> + + 0 -1 1770 -3.7093870341777802e-03 + + 4.5077630877494812e-01 5.3135812282562256e-01 + <_> + + 0 -1 1771 -2.1110709349159151e-04 + + 5.4608201980590820e-01 4.3333768844604492e-01 + <_> + + 0 -1 1772 1.0670139454305172e-03 + + 5.3718560934066772e-01 4.0783908963203430e-01 + <_> + + 0 -1 1773 3.5943021066486835e-03 + + 4.4712871313095093e-01 5.6438362598419189e-01 + <_> + + 0 -1 1774 -5.1776031032204628e-03 + + 4.4993931055068970e-01 5.2803301811218262e-01 + <_> + + 0 -1 1775 -2.5414369883947074e-04 + + 5.5161732435226440e-01 4.4077080488204956e-01 + <_> + + 0 -1 1776 6.3522560521960258e-03 + + 5.1941901445388794e-01 2.4652279913425446e-01 + <_> + + 0 -1 1777 -4.4205080484971404e-04 + + 3.8307058811187744e-01 5.1396822929382324e-01 + <_> + + 0 -1 1778 7.4488727841526270e-04 + + 4.8910909891128540e-01 5.9747868776321411e-01 + <_> + + 0 -1 1779 -3.5116379149258137e-03 + + 7.4136817455291748e-01 4.7687649726867676e-01 + <_> + + 0 -1 1780 -1.2540910392999649e-02 + + 3.6488190293312073e-01 5.2528268098831177e-01 + <_> + + 0 -1 1781 9.4931852072477341e-03 + + 5.1004928350448608e-01 3.6295869946479797e-01 + <_> + + 0 -1 1782 1.2961150147020817e-02 + + 5.2324420213699341e-01 4.3335610628128052e-01 + <_> + + 0 -1 1783 4.7209449112415314e-03 + + 4.6481490135192871e-01 6.3310527801513672e-01 + <_> + + 0 -1 1784 -2.3119079414755106e-03 + + 5.9303098917007446e-01 4.5310580730438232e-01 + <_> + + 0 -1 1785 -2.8262299019843340e-03 + + 3.8704779744148254e-01 5.2571010589599609e-01 + <_> + + 0 -1 1786 -1.4311339473351836e-03 + + 5.5225032567977905e-01 4.5618548989295959e-01 + <_> + + 0 -1 1787 1.9378310535103083e-03 + + 4.5462208986282349e-01 5.7369667291641235e-01 + <_> + + 0 -1 1788 2.6343559147790074e-04 + + 5.3457391262054443e-01 4.5718750357627869e-01 + <_> + + 0 -1 1789 7.8257522545754910e-04 + + 3.9678159356117249e-01 5.2201879024505615e-01 + <_> + + 0 -1 1790 -1.9550440832972527e-02 + + 2.8296428918838501e-01 5.2435082197189331e-01 + <_> + + 0 -1 1791 4.3914958951063454e-04 + + 4.5900669693946838e-01 5.8990901708602905e-01 + <_> + + 0 -1 1792 2.1452000364661217e-02 + + 5.2314108610153198e-01 2.8553789854049683e-01 + <_> + + 0 -1 1793 5.8973580598831177e-04 + + 4.3972569704055786e-01 5.5064219236373901e-01 + <_> + + 0 -1 1794 -2.6157610118389130e-02 + + 3.1350791454315186e-01 5.1891750097274780e-01 + <_> + + 0 -1 1795 -1.3959860429167747e-02 + + 3.2132729887962341e-01 5.0407177209854126e-01 + <_> + + 0 -1 1796 -6.3699018210172653e-03 + + 6.3875448703765869e-01 4.8495069146156311e-01 + <_> + + 0 -1 1797 -8.5613820701837540e-03 + + 2.7591320872306824e-01 5.0320190191268921e-01 + <_> + + 0 -1 1798 9.6622901037335396e-04 + + 4.6856409311294556e-01 5.8348792791366577e-01 + <_> + + 0 -1 1799 7.6550268568098545e-04 + + 5.1752072572708130e-01 3.8964220881462097e-01 + <_> + + 0 -1 1800 -8.1833340227603912e-03 + + 2.0691369473934174e-01 5.2081221342086792e-01 + <_> + + 0 -1 1801 -9.3976939097046852e-03 + + 6.1340910196304321e-01 4.6412229537963867e-01 + <_> + + 0 -1 1802 4.8028980381786823e-03 + + 5.4541081190109253e-01 4.3952199816703796e-01 + <_> + + 0 -1 1803 -3.5680569708347321e-03 + + 6.3444852828979492e-01 4.6810939908027649e-01 + <_> + + 0 -1 1804 4.0733120404183865e-03 + + 5.2926832437515259e-01 4.0156200528144836e-01 + <_> + + 0 -1 1805 1.2568129459396005e-03 + + 4.3929880857467651e-01 5.4528248310089111e-01 + <_> + + 0 -1 1806 -2.9065010603517294e-03 + + 5.8988320827484131e-01 4.8633798956871033e-01 + <_> + + 0 -1 1807 -2.4409340694546700e-03 + + 4.0693649649620056e-01 5.2474218606948853e-01 + <_> + + 0 -1 1808 2.4830700829625130e-02 + + 5.1827257871627808e-01 3.6825248599052429e-01 + <_> + + 0 -1 1809 -4.8854008316993713e-02 + + 1.3075779378414154e-01 4.9612811207771301e-01 + <_> + + 0 -1 1810 -1.6110379947349429e-03 + + 6.4210057258605957e-01 4.8726621270179749e-01 + <_> + + 0 -1 1811 -9.7009479999542236e-02 + + 4.7769349068403244e-02 4.9509888887405396e-01 + <_> + + 0 -1 1812 1.1209240183234215e-03 + + 4.6162670850753784e-01 5.3547459840774536e-01 + <_> + + 0 -1 1813 -1.3064090162515640e-03 + + 6.2618541717529297e-01 4.6388059854507446e-01 + <_> + + 0 -1 1814 4.5771620352752507e-04 + + 5.3844177722930908e-01 4.6466401219367981e-01 + <_> + + 0 -1 1815 -6.3149951165542006e-04 + + 3.8040471076965332e-01 5.1302570104598999e-01 + <_> + + 0 -1 1816 1.4505970466416329e-04 + + 4.5543101429939270e-01 5.6644618511199951e-01 + <_> + + 0 -1 1817 -1.6474550589919090e-02 + + 6.5969580411911011e-01 4.7158598899841309e-01 + <_> + + 0 -1 1818 1.3369579799473286e-02 + + 5.1954662799835205e-01 3.0359649658203125e-01 + <_> + + 0 -1 1819 1.0271780047332868e-04 + + 5.2291762828826904e-01 4.1070660948753357e-01 + <_> + + 0 -1 1820 -5.5311559699475765e-03 + + 6.3528877496719360e-01 4.9609071016311646e-01 + <_> + + 0 -1 1821 -2.6187049224972725e-03 + + 3.8245460391044617e-01 5.1409840583801270e-01 + <_> + + 0 -1 1822 5.0834268331527710e-03 + + 4.9504399299621582e-01 6.2208187580108643e-01 + <_> + + 0 -1 1823 7.9818159341812134e-02 + + 4.9523359537124634e-01 1.3224759697914124e-01 + <_> + + 0 -1 1824 -9.9226586520671844e-02 + + 7.5427287817001343e-01 5.0084167718887329e-01 + <_> + + 0 -1 1825 -6.5174017800018191e-04 + + 3.6993029713630676e-01 5.1301211118698120e-01 + <_> + + 0 -1 1826 -1.8996849656105042e-02 + + 6.6891789436340332e-01 4.9212029576301575e-01 + <_> + + 0 -1 1827 1.7346899956464767e-02 + + 4.9833008646965027e-01 1.8591980636119843e-01 + <_> + + 0 -1 1828 5.5082101607695222e-04 + + 4.5744240283966064e-01 5.5221217870712280e-01 + <_> + + 0 -1 1829 2.0056050270795822e-03 + + 5.1317447423934937e-01 3.8564699888229370e-01 + <_> + + 0 -1 1830 -7.7688191086053848e-03 + + 4.3617001175880432e-01 5.4343092441558838e-01 + <_> + + 0 -1 1831 5.0878278911113739e-02 + + 4.6827208995819092e-01 6.8406397104263306e-01 + <_> + + 0 -1 1832 -2.2901780903339386e-03 + + 4.3292450904846191e-01 5.3060990571975708e-01 + <_> + + 0 -1 1833 -1.5715380141045898e-04 + + 5.3700572252273560e-01 4.3781641125679016e-01 + <_> + + 0 -1 1834 1.0519240051507950e-01 + + 5.1372742652893066e-01 6.7361466586589813e-02 + <_> + + 0 -1 1835 2.7198919560760260e-03 + + 4.1120609641075134e-01 5.2556651830673218e-01 + <_> + + 0 -1 1836 4.8337779939174652e-02 + + 5.4046237468719482e-01 4.4389671087265015e-01 + <_> + + 0 -1 1837 9.5703761326149106e-04 + + 4.3559691309928894e-01 5.3995108604431152e-01 + <_> + + 0 -1 1838 -2.5371259078383446e-02 + + 5.9951752424240112e-01 5.0310248136520386e-01 + <_> + + 0 -1 1839 5.2457951009273529e-02 + + 4.9502879381179810e-01 1.3983510434627533e-01 + <_> + + 0 -1 1840 -1.2365629896521568e-02 + + 6.3972991704940796e-01 4.9641060829162598e-01 + <_> + + 0 -1 1841 -1.4589719474315643e-01 + + 1.0016699880361557e-01 4.9463221430778503e-01 + <_> + + 0 -1 1842 -1.5908600762486458e-02 + + 3.3123299479484558e-01 5.2083408832550049e-01 + <_> + + 0 -1 1843 3.9486068999394774e-04 + + 4.4063639640808105e-01 5.4261028766632080e-01 + <_> + + 0 -1 1844 -5.2454001270234585e-03 + + 2.7995899319648743e-01 5.1899671554565430e-01 + <_> + + 0 -1 1845 -5.0421799533069134e-03 + + 6.9875800609588623e-01 4.7521421313285828e-01 + <_> + + 0 -1 1846 2.9812189750373363e-03 + + 4.9832889437675476e-01 6.3074797391891479e-01 + <_> + + 0 -1 1847 -7.2884308174252510e-03 + + 2.9823330044746399e-01 5.0268697738647461e-01 + <_> + + 0 -1 1848 1.5094350092113018e-03 + + 5.3084421157836914e-01 3.8329708576202393e-01 + <_> + + 0 -1 1849 -9.3340799212455750e-03 + + 2.0379640161991119e-01 4.9698171019554138e-01 + <_> + + 0 -1 1850 2.8667140752077103e-02 + + 5.0256967544555664e-01 6.9280272722244263e-01 + <_> + + 0 -1 1851 1.7019680142402649e-01 + + 4.9600529670715332e-01 1.4764429628849030e-01 + <_> + + 0 -1 1852 -3.2614478841423988e-03 + + 5.6030637025833130e-01 4.8260560631752014e-01 + <_> + + 0 -1 1853 5.5769277969375253e-04 + + 5.2055621147155762e-01 4.1296330094337463e-01 + <_> + + 0 -1 1854 3.6258339881896973e-01 + + 5.2216529846191406e-01 3.7686121463775635e-01 + <_> + + 0 -1 1855 -1.1615130119025707e-02 + + 6.0226827859878540e-01 4.6374899148941040e-01 + <_> + + 0 -1 1856 -4.0795197710394859e-03 + + 4.0704470872879028e-01 5.3374791145324707e-01 + <_> + + 0 -1 1857 5.7204300537705421e-04 + + 4.6018350124359131e-01 5.9003931283950806e-01 + <_> + + 0 -1 1858 6.7543348995968699e-04 + + 5.3982520103454590e-01 4.3454289436340332e-01 + <_> + + 0 -1 1859 6.3295697327703238e-04 + + 5.2015632390975952e-01 4.0513589978218079e-01 + <_> + + 0 -1 1860 1.2435320531949401e-03 + + 4.6423879265785217e-01 5.5474412441253662e-01 + <_> + + 0 -1 1861 -4.7363857738673687e-03 + + 6.1985671520233154e-01 4.6725520491600037e-01 + <_> + + 0 -1 1862 -6.4658462069928646e-03 + + 6.8373328447341919e-01 5.0190007686614990e-01 + <_> + + 0 -1 1863 3.5017321351915598e-04 + + 4.3448030948638916e-01 5.3636229038238525e-01 + <_> + + 0 -1 1864 1.5754920605104417e-04 + + 4.7600790858268738e-01 5.7320207357406616e-01 + <_> + + 0 -1 1865 9.9774366244673729e-03 + + 5.0909858942031860e-01 3.6350399255752563e-01 + <_> + + 0 -1 1866 -4.1464529931545258e-04 + + 5.5700647830963135e-01 4.5938020944595337e-01 + <_> + + 0 -1 1867 -3.5888899583369493e-04 + + 5.3568458557128906e-01 4.3391349911689758e-01 + <_> + + 0 -1 1868 4.0463250479660928e-04 + + 4.4398030638694763e-01 5.4367768764495850e-01 + <_> + + 0 -1 1869 -8.2184787606820464e-04 + + 4.0422949194908142e-01 5.1762992143630981e-01 + <_> + + 0 -1 1870 5.9467419050633907e-03 + + 4.9276518821716309e-01 5.6337797641754150e-01 + <_> + + 0 -1 1871 -2.1753389388322830e-02 + + 8.0062937736511230e-01 4.8008409142494202e-01 + <_> + + 0 -1 1872 -1.4540379866957664e-02 + + 3.9460548758506775e-01 5.1822227239608765e-01 + <_> + + 0 -1 1873 -4.0510769933462143e-02 + + 2.1324990317225456e-02 4.9357929825782776e-01 + <_> + + 0 -1 1874 -5.8458268176764250e-04 + + 4.0127959847450256e-01 5.3140252828598022e-01 + <_> + + 0 -1 1875 5.5151800625026226e-03 + + 4.6424189209938049e-01 5.8962607383728027e-01 + <_> + + 0 -1 1876 -6.0626221820712090e-03 + + 6.5021592378616333e-01 5.0164777040481567e-01 + <_> + + 0 -1 1877 9.4535842537879944e-02 + + 5.2647089958190918e-01 4.1268271207809448e-01 + <_> + + 0 -1 1878 4.7315051779150963e-03 + + 4.8791998624801636e-01 5.8924478292465210e-01 + <_> + + 0 -1 1879 -5.2571471314877272e-04 + + 3.9172801375389099e-01 5.1894128322601318e-01 + <_> + + 0 -1 1880 -2.5464049540460110e-03 + + 5.8375990390777588e-01 4.9857059121131897e-01 + <_> + + 0 -1 1881 -2.6075689122080803e-02 + + 1.2619839608669281e-01 4.9558219313621521e-01 + <_> + + 0 -1 1882 -5.4779709316790104e-03 + + 5.7225137948989868e-01 5.0102657079696655e-01 + <_> + + 0 -1 1883 5.1337741315364838e-03 + + 5.2732622623443604e-01 4.2263761162757874e-01 + <_> + + 0 -1 1884 4.7944980906322598e-04 + + 4.4500669836997986e-01 5.8195871114730835e-01 + <_> + + 0 -1 1885 -2.1114079281687737e-03 + + 5.7576531171798706e-01 4.5117148756980896e-01 + <_> + + 0 -1 1886 -1.3179990462958813e-02 + + 1.8843810260295868e-01 5.1607340574264526e-01 + <_> + + 0 -1 1887 -4.7968099825084209e-03 + + 6.5897899866104126e-01 4.7361189126968384e-01 + <_> + + 0 -1 1888 6.7483168095350266e-03 + + 5.2594298124313354e-01 3.3563950657844543e-01 + <_> + + 0 -1 1889 1.4623369788751006e-03 + + 5.3552711009979248e-01 4.2640921473503113e-01 + <_> + + 0 -1 1890 4.7645159065723419e-03 + + 5.0344067811965942e-01 5.7868278026580811e-01 + <_> + + 0 -1 1891 6.8066660314798355e-03 + + 4.7566050291061401e-01 6.6778290271759033e-01 + <_> + + 0 -1 1892 3.6608621012419462e-03 + + 5.3696119785308838e-01 4.3115469813346863e-01 + <_> + + 0 -1 1893 2.1449640393257141e-02 + + 4.9686419963836670e-01 1.8888160586357117e-01 + <_> + + 0 -1 1894 4.1678901761770248e-03 + + 4.9307331442832947e-01 5.8153688907623291e-01 + <_> + + 0 -1 1895 8.6467564105987549e-03 + + 5.2052050828933716e-01 4.1325950622558594e-01 + <_> + + 0 -1 1896 -3.6114078829996288e-04 + + 5.4835551977157593e-01 4.8009279370307922e-01 + <_> + + 0 -1 1897 1.0808729566633701e-03 + + 4.6899020671844482e-01 6.0414212942123413e-01 + <_> + + 0 -1 1898 5.7719959877431393e-03 + + 5.1711422204971313e-01 3.0532771348953247e-01 + <_> + + 0 -1 1899 1.5720770461484790e-03 + + 5.2199780941009521e-01 4.1788038611412048e-01 + <_> + + 0 -1 1900 -1.9307859474793077e-03 + + 5.8603698015213013e-01 4.8129200935363770e-01 + <_> + + 0 -1 1901 -7.8926272690296173e-03 + + 1.7492769658565521e-01 4.9717339873313904e-01 + <_> + + 0 -1 1902 -2.2224679123610258e-03 + + 4.3425890803337097e-01 5.2128481864929199e-01 + <_> + + 0 -1 1903 1.9011989934369922e-03 + + 4.7651869058609009e-01 6.8920552730560303e-01 + <_> + + 0 -1 1904 2.7576119173318148e-03 + + 5.2621912956237793e-01 4.3374860286712646e-01 + <_> + + 0 -1 1905 5.1787449046969414e-03 + + 4.8040691018104553e-01 7.8437292575836182e-01 + <_> + + 0 -1 1906 -9.0273341629654169e-04 + + 4.1208469867706299e-01 5.3534239530563354e-01 + <_> + + 0 -1 1907 5.1797959022223949e-03 + + 4.7403728961944580e-01 6.4259600639343262e-01 + <_> + + 0 -1 1908 -1.0114000178873539e-02 + + 2.4687920510768890e-01 5.1750177145004272e-01 + <_> + + 0 -1 1909 -1.8617060035467148e-02 + + 5.7562941312789917e-01 4.6289789676666260e-01 + <_> + + 0 -1 1910 5.9225959703326225e-03 + + 5.1696258783340454e-01 3.2142710685729980e-01 + <_> + + 0 -1 1911 -6.2945079989731312e-03 + + 3.8720148801803589e-01 5.1416367292404175e-01 + <_> + + 0 -1 1912 6.5353019163012505e-03 + + 4.8530489206314087e-01 6.3104897737503052e-01 + <_> + + 0 -1 1913 1.0878399480134249e-03 + + 5.1173150539398193e-01 3.7232589721679688e-01 + <_> + + 0 -1 1914 -2.2542240098118782e-02 + + 5.6927400827407837e-01 4.8871129751205444e-01 + <_> + + 0 -1 1915 -3.0065660830587149e-03 + + 2.5560128688812256e-01 5.0039929151535034e-01 + <_> + + 0 -1 1916 7.4741272255778313e-03 + + 4.8108729720115662e-01 5.6759268045425415e-01 + <_> + + 0 -1 1917 2.6162320747971535e-02 + + 4.9711948633193970e-01 1.7772370576858521e-01 + <_> + + 0 -1 1918 9.4352738233283162e-04 + + 4.9400109052658081e-01 5.4912507534027100e-01 + <_> + + 0 -1 1919 3.3363241702318192e-02 + + 5.0076121091842651e-01 2.7907240390777588e-01 + <_> + + 0 -1 1920 -1.5118650160729885e-02 + + 7.0595788955688477e-01 4.9730318784713745e-01 + <_> + + 0 -1 1921 9.8648946732282639e-04 + + 5.1286202669143677e-01 3.7767618894577026e-01 + <_> + 213 + 1.0576110076904297e+02 + + <_> + + 0 -1 1922 -9.5150798559188843e-02 + + 6.4707571268081665e-01 4.0172868967056274e-01 + <_> + + 0 -1 1923 6.2702340073883533e-03 + + 3.9998221397399902e-01 5.7464492321014404e-01 + <_> + + 0 -1 1924 3.0018089455552399e-04 + + 3.5587701201438904e-01 5.5388098955154419e-01 + <_> + + 0 -1 1925 1.1757409665733576e-03 + + 4.2565348744392395e-01 5.3826177120208740e-01 + <_> + + 0 -1 1926 4.4235268433112651e-05 + + 3.6829081177711487e-01 5.5899268388748169e-01 + <_> + + 0 -1 1927 -2.9936920327600092e-05 + + 5.4524701833724976e-01 4.0203678607940674e-01 + <_> + + 0 -1 1928 3.0073199886828661e-03 + + 5.2390581369400024e-01 3.3178439736366272e-01 + <_> + + 0 -1 1929 -1.0513889603316784e-02 + + 4.3206891417503357e-01 5.3079837560653687e-01 + <_> + + 0 -1 1930 8.3476826548576355e-03 + + 4.5046371221542358e-01 6.4532989263534546e-01 + <_> + + 0 -1 1931 -3.1492270063608885e-03 + + 4.3134251236915588e-01 5.3705251216888428e-01 + <_> + + 0 -1 1932 -1.4435649973165710e-05 + + 5.3266030550003052e-01 3.8179719448089600e-01 + <_> + + 0 -1 1933 -4.2855090578086674e-04 + + 4.3051639199256897e-01 5.3820097446441650e-01 + <_> + + 0 -1 1934 1.5062429883982986e-04 + + 4.2359709739685059e-01 5.5449652671813965e-01 + <_> + + 0 -1 1935 7.1559831500053406e-02 + + 5.3030598163604736e-01 2.6788029074668884e-01 + <_> + + 0 -1 1936 8.4095180500298738e-04 + + 3.5571089386940002e-01 5.2054339647293091e-01 + <_> + + 0 -1 1937 6.2986500561237335e-02 + + 5.2253627777099609e-01 2.8613761067390442e-01 + <_> + + 0 -1 1938 -3.3798629883676767e-03 + + 3.6241859197616577e-01 5.2016979455947876e-01 + <_> + + 0 -1 1939 -1.1810739670181647e-04 + + 5.4744768142700195e-01 3.9598938822746277e-01 + <_> + + 0 -1 1940 -5.4505601292476058e-04 + + 3.7404221296310425e-01 5.2157157659530640e-01 + <_> + + 0 -1 1941 -1.8454910023137927e-03 + + 5.8930522203445435e-01 4.5844489336013794e-01 + <_> + + 0 -1 1942 -4.3832371011376381e-04 + + 4.0845820307731628e-01 5.3853511810302734e-01 + <_> + + 0 -1 1943 -2.4000830017030239e-03 + + 3.7774550914764404e-01 5.2935802936553955e-01 + <_> + + 0 -1 1944 -9.8795741796493530e-02 + + 2.9636120796203613e-01 5.0700891017913818e-01 + <_> + + 0 -1 1945 3.1798239797353745e-03 + + 4.8776328563690186e-01 6.7264437675476074e-01 + <_> + + 0 -1 1946 3.2406419632025063e-04 + + 4.3669110536575317e-01 5.5611097812652588e-01 + <_> + + 0 -1 1947 -3.2547250390052795e-02 + + 3.1281578540802002e-01 5.3086161613464355e-01 + <_> + + 0 -1 1948 -7.7561130747199059e-03 + + 6.5602248907089233e-01 4.6398720145225525e-01 + <_> + + 0 -1 1949 1.6027249395847321e-02 + + 5.1726800203323364e-01 3.1418979167938232e-01 + <_> + + 0 -1 1950 7.1002350523485802e-06 + + 4.0844461321830750e-01 5.3362947702407837e-01 + <_> + + 0 -1 1951 7.3422808200120926e-03 + + 4.9669221043586731e-01 6.6034650802612305e-01 + <_> + + 0 -1 1952 -1.6970280557870865e-03 + + 5.9082370996475220e-01 4.5001828670501709e-01 + <_> + + 0 -1 1953 2.4118260480463505e-03 + + 5.3151607513427734e-01 3.5997208952903748e-01 + <_> + + 0 -1 1954 -5.5300937965512276e-03 + + 2.3340409994125366e-01 4.9968141317367554e-01 + <_> + + 0 -1 1955 -2.6478730142116547e-03 + + 5.8809357881546021e-01 4.6847340464591980e-01 + <_> + + 0 -1 1956 1.1295629665255547e-02 + + 4.9837771058082581e-01 1.8845909833908081e-01 + <_> + + 0 -1 1957 -6.6952878842130303e-04 + + 5.8721381425857544e-01 4.7990199923515320e-01 + <_> + + 0 -1 1958 1.4410680159926414e-03 + + 5.1311892271041870e-01 3.5010111331939697e-01 + <_> + + 0 -1 1959 2.4637870956212282e-03 + + 5.3393721580505371e-01 4.1176390647888184e-01 + <_> + + 0 -1 1960 3.3114518737420440e-04 + + 4.3133831024169922e-01 5.3982460498809814e-01 + <_> + + 0 -1 1961 -3.3557269722223282e-02 + + 2.6753368973731995e-01 5.1791548728942871e-01 + <_> + + 0 -1 1962 1.8539419397711754e-02 + + 4.9738699197769165e-01 2.3171770572662354e-01 + <_> + + 0 -1 1963 -2.9698139405809343e-04 + + 5.5297082662582397e-01 4.6436640620231628e-01 + <_> + + 0 -1 1964 -4.5577259152196348e-04 + + 5.6295841932296753e-01 4.4691911339759827e-01 + <_> + + 0 -1 1965 -1.0158980265259743e-02 + + 6.7062127590179443e-01 4.9259188771247864e-01 + <_> + + 0 -1 1966 -2.2413829356082715e-05 + + 5.2394217252731323e-01 3.9129018783569336e-01 + <_> + + 0 -1 1967 7.2034963523037732e-05 + + 4.7994381189346313e-01 5.5017888545989990e-01 + <_> + + 0 -1 1968 -6.9267209619283676e-03 + + 6.9300097227096558e-01 4.6980848908424377e-01 + <_> + + 0 -1 1969 -7.6997838914394379e-03 + + 4.0996238589286804e-01 5.4808831214904785e-01 + <_> + + 0 -1 1970 -7.3130549862980843e-03 + + 3.2834759354591370e-01 5.0578862428665161e-01 + <_> + + 0 -1 1971 1.9650589674711227e-03 + + 4.9780470132827759e-01 6.3982498645782471e-01 + <_> + + 0 -1 1972 7.1647600270807743e-03 + + 4.6611601114273071e-01 6.2221372127532959e-01 + <_> + + 0 -1 1973 -2.4078639224171638e-02 + + 2.3346449434757233e-01 5.2221620082855225e-01 + <_> + + 0 -1 1974 -2.1027969196438789e-02 + + 1.1836539953947067e-01 4.9382260441780090e-01 + <_> + + 0 -1 1975 3.6017020465806127e-04 + + 5.3250199556350708e-01 4.1167110204696655e-01 + <_> + + 0 -1 1976 -1.7219729721546173e-02 + + 6.2787622213363647e-01 4.6642690896987915e-01 + <_> + + 0 -1 1977 -7.8672142699360847e-03 + + 3.4034150838851929e-01 5.2497369050979614e-01 + <_> + + 0 -1 1978 -4.4777389848604798e-04 + + 3.6104118824005127e-01 5.0862592458724976e-01 + <_> + + 0 -1 1979 5.5486010387539864e-03 + + 4.8842659592628479e-01 6.2034982442855835e-01 + <_> + + 0 -1 1980 -6.9461148232221603e-03 + + 2.6259300112724304e-01 5.0110971927642822e-01 + <_> + + 0 -1 1981 1.3569870498031378e-04 + + 4.3407949805259705e-01 5.6283122301101685e-01 + <_> + + 0 -1 1982 -4.5880250632762909e-02 + + 6.5079987049102783e-01 4.6962749958038330e-01 + <_> + + 0 -1 1983 -2.1582560613751411e-02 + + 3.8265028595924377e-01 5.2876168489456177e-01 + <_> + + 0 -1 1984 -2.0209539681673050e-02 + + 3.2333680987358093e-01 5.0744771957397461e-01 + <_> + + 0 -1 1985 5.8496710844337940e-03 + + 5.1776039600372314e-01 4.4896709918975830e-01 + <_> + + 0 -1 1986 -5.7476379879517481e-05 + + 4.0208509564399719e-01 5.2463638782501221e-01 + <_> + + 0 -1 1987 -1.1513100471347570e-03 + + 6.3150721788406372e-01 4.9051541090011597e-01 + <_> + + 0 -1 1988 1.9862831104546785e-03 + + 4.7024598717689514e-01 6.4971512556076050e-01 + <_> + + 0 -1 1989 -5.2719512023031712e-03 + + 3.6503839492797852e-01 5.2276527881622314e-01 + <_> + + 0 -1 1990 1.2662699446082115e-03 + + 5.1661008596420288e-01 3.8776180148124695e-01 + <_> + + 0 -1 1991 -6.2919440679252148e-03 + + 7.3758941888809204e-01 5.0238478183746338e-01 + <_> + + 0 -1 1992 6.7360111279413104e-04 + + 4.4232261180877686e-01 5.4955857992172241e-01 + <_> + + 0 -1 1993 -1.0523450328037143e-03 + + 5.9763962030410767e-01 4.8595830798149109e-01 + <_> + + 0 -1 1994 -4.4216238893568516e-04 + + 5.9559392929077148e-01 4.3989309668540955e-01 + <_> + + 0 -1 1995 1.1747940443456173e-03 + + 5.3498882055282593e-01 4.6050581336021423e-01 + <_> + + 0 -1 1996 5.2457437850534916e-03 + + 5.0491911172866821e-01 2.9415771365165710e-01 + <_> + + 0 -1 1997 -2.4539720267057419e-02 + + 2.5501778721809387e-01 5.2185869216918945e-01 + <_> + + 0 -1 1998 7.3793041519820690e-04 + + 4.4248610734939575e-01 5.4908162355422974e-01 + <_> + + 0 -1 1999 1.4233799884095788e-03 + + 5.3195142745971680e-01 4.0813559293746948e-01 + <_> + + 0 -1 2000 -2.4149110540747643e-03 + + 4.0876591205596924e-01 5.2389502525329590e-01 + <_> + + 0 -1 2001 -1.2165299849584699e-03 + + 5.6745791435241699e-01 4.9080529808998108e-01 + <_> + + 0 -1 2002 -1.2438809499144554e-03 + + 4.1294258832931519e-01 5.2561181783676147e-01 + <_> + + 0 -1 2003 6.1942739412188530e-03 + + 5.0601941347122192e-01 7.3136532306671143e-01 + <_> + + 0 -1 2004 -1.6607169527560472e-03 + + 5.9796321392059326e-01 4.5963698625564575e-01 + <_> + + 0 -1 2005 -2.7316259220242500e-02 + + 4.1743651032447815e-01 5.3088420629501343e-01 + <_> + + 0 -1 2006 -1.5845570014789701e-03 + + 5.6158047914505005e-01 4.5194861292839050e-01 + <_> + + 0 -1 2007 -1.5514739789068699e-03 + + 4.0761870145797729e-01 5.3607851266860962e-01 + <_> + + 0 -1 2008 3.8446558755822480e-04 + + 4.3472939729690552e-01 5.4304420948028564e-01 + <_> + + 0 -1 2009 -1.4672259800136089e-02 + + 1.6593049466609955e-01 5.1460939645767212e-01 + <_> + + 0 -1 2010 8.1608882173895836e-03 + + 4.9618190526962280e-01 1.8847459554672241e-01 + <_> + + 0 -1 2011 1.1121659772470593e-03 + + 4.8682639002799988e-01 6.0938161611557007e-01 + <_> + + 0 -1 2012 -7.2603770531713963e-03 + + 6.2843251228332520e-01 4.6903759241104126e-01 + <_> + + 0 -1 2013 -2.4046430189628154e-04 + + 5.5750000476837158e-01 4.0460440516471863e-01 + <_> + + 0 -1 2014 -2.3348190006799996e-04 + + 4.1157621145248413e-01 5.2528482675552368e-01 + <_> + + 0 -1 2015 5.5736480280756950e-03 + + 4.7300729155540466e-01 5.6901007890701294e-01 + <_> + + 0 -1 2016 3.0623769387602806e-02 + + 4.9718868732452393e-01 1.7400950193405151e-01 + <_> + + 0 -1 2017 9.2074798885732889e-04 + + 5.3721177577972412e-01 4.3548721075057983e-01 + <_> + + 0 -1 2018 -4.3550739064812660e-05 + + 5.3668838739395142e-01 4.3473169207572937e-01 + <_> + + 0 -1 2019 -6.6452710889279842e-03 + + 3.4355181455612183e-01 5.1605331897735596e-01 + <_> + + 0 -1 2020 4.3221998959779739e-02 + + 4.7667920589447021e-01 7.2936528921127319e-01 + <_> + + 0 -1 2021 2.2331769578158855e-03 + + 5.0293159484863281e-01 5.6331712007522583e-01 + <_> + + 0 -1 2022 3.1829739455133677e-03 + + 4.0160921216011047e-01 5.1921367645263672e-01 + <_> + + 0 -1 2023 -1.8027749320026487e-04 + + 4.0883159637451172e-01 5.4179197549819946e-01 + <_> + + 0 -1 2024 -5.2934689447283745e-03 + + 4.0756770968437195e-01 5.2435618638992310e-01 + <_> + + 0 -1 2025 1.2750959722325206e-03 + + 4.9132829904556274e-01 6.3870108127593994e-01 + <_> + + 0 -1 2026 4.3385322205722332e-03 + + 5.0316721200942993e-01 2.9473468661308289e-01 + <_> + + 0 -1 2027 8.5250744596123695e-03 + + 4.9497890472412109e-01 6.3088691234588623e-01 + <_> + + 0 -1 2028 -9.4266352243721485e-04 + + 5.3283667564392090e-01 4.2856499552726746e-01 + <_> + + 0 -1 2029 1.3609660090878606e-03 + + 4.9915251135826111e-01 5.9415012598037720e-01 + <_> + + 0 -1 2030 4.4782509212382138e-04 + + 4.5735040307044983e-01 5.8544808626174927e-01 + <_> + + 0 -1 2031 1.3360050506889820e-03 + + 4.6043589711189270e-01 5.8490520715713501e-01 + <_> + + 0 -1 2032 -6.0967548051849008e-04 + + 3.9693889021873474e-01 5.2294230461120605e-01 + <_> + + 0 -1 2033 -2.3656780831515789e-03 + + 5.8083200454711914e-01 4.8983570933341980e-01 + <_> + + 0 -1 2034 1.0734340175986290e-03 + + 4.3512108922004700e-01 5.4700392484664917e-01 + <_> + + 0 -1 2035 2.1923359017819166e-03 + + 5.3550601005554199e-01 3.8429039716720581e-01 + <_> + + 0 -1 2036 5.4968618787825108e-03 + + 5.0181388854980469e-01 2.8271919488906860e-01 + <_> + + 0 -1 2037 -7.5368821620941162e-02 + + 1.2250760197639465e-01 5.1488268375396729e-01 + <_> + + 0 -1 2038 2.5134470313787460e-02 + + 4.7317668795585632e-01 7.0254462957382202e-01 + <_> + + 0 -1 2039 -2.9358599931583740e-05 + + 5.4305320978164673e-01 4.6560868620872498e-01 + <_> + + 0 -1 2040 -5.8355910005047917e-04 + + 4.0310400724411011e-01 5.1901197433471680e-01 + <_> + + 0 -1 2041 -2.6639450807124376e-03 + + 4.3081268668174744e-01 5.1617711782455444e-01 + <_> + + 0 -1 2042 -1.3804089976474643e-03 + + 6.2198299169540405e-01 4.6955159306526184e-01 + <_> + + 0 -1 2043 1.2313219485804439e-03 + + 5.3793638944625854e-01 4.4258311390876770e-01 + <_> + + 0 -1 2044 -1.4644179827882908e-05 + + 5.2816402912139893e-01 4.2225030064582825e-01 + <_> + + 0 -1 2045 -1.2818809598684311e-02 + + 2.5820928812026978e-01 5.1799327135086060e-01 + <_> + + 0 -1 2046 2.2852189838886261e-02 + + 4.7786930203437805e-01 7.6092642545700073e-01 + <_> + + 0 -1 2047 8.2305970136076212e-04 + + 5.3409922122955322e-01 4.6717241406440735e-01 + <_> + + 0 -1 2048 1.2770120054483414e-02 + + 4.9657610058784485e-01 1.4723660051822662e-01 + <_> + + 0 -1 2049 -5.0051510334014893e-02 + + 6.4149940013885498e-01 5.0165921449661255e-01 + <_> + + 0 -1 2050 1.5775270760059357e-02 + + 4.5223200321197510e-01 5.6853622198104858e-01 + <_> + + 0 -1 2051 -1.8501620739698410e-02 + + 2.7647489309310913e-01 5.1379591226577759e-01 + <_> + + 0 -1 2052 2.4626250378787518e-03 + + 5.1419419050216675e-01 3.7954080104827881e-01 + <_> + + 0 -1 2053 6.2916167080402374e-02 + + 5.0606489181518555e-01 6.5804338455200195e-01 + <_> + + 0 -1 2054 -2.1648500478477217e-05 + + 5.1953881978988647e-01 4.0198868513107300e-01 + <_> + + 0 -1 2055 2.1180990152060986e-03 + + 4.9623650312423706e-01 5.9544587135314941e-01 + <_> + + 0 -1 2056 -1.6634890809655190e-02 + + 3.7579330801963806e-01 5.1754468679428101e-01 + <_> + + 0 -1 2057 -2.8899470344185829e-03 + + 6.6240137815475464e-01 5.0571787357330322e-01 + <_> + + 0 -1 2058 7.6783262193202972e-02 + + 4.7957968711853027e-01 8.0477148294448853e-01 + <_> + + 0 -1 2059 3.9170677773654461e-03 + + 4.9378821253776550e-01 5.7199418544769287e-01 + <_> + + 0 -1 2060 -7.2670601308345795e-02 + + 5.3894560784101486e-02 4.9439039826393127e-01 + <_> + + 0 -1 2061 5.4039502143859863e-01 + + 5.1297742128372192e-01 1.1433389782905579e-01 + <_> + + 0 -1 2062 2.9510019812732935e-03 + + 4.5283439755439758e-01 5.6985741853713989e-01 + <_> + + 0 -1 2063 3.4508369863033295e-03 + + 5.3577268123626709e-01 4.2187309265136719e-01 + <_> + + 0 -1 2064 -4.2077939724549651e-04 + + 5.9161728620529175e-01 4.6379259228706360e-01 + <_> + + 0 -1 2065 3.3051050268113613e-03 + + 5.2733850479125977e-01 4.3820428848266602e-01 + <_> + + 0 -1 2066 4.7735060798004270e-04 + + 4.0465280413627625e-01 5.1818847656250000e-01 + <_> + + 0 -1 2067 -2.5928510352969170e-02 + + 7.4522358179092407e-01 5.0893861055374146e-01 + <_> + + 0 -1 2068 -2.9729790985584259e-03 + + 3.2954359054565430e-01 5.0587952136993408e-01 + <_> + + 0 -1 2069 5.8508329093456268e-03 + + 4.8571440577507019e-01 5.7930248975753784e-01 + <_> + + 0 -1 2070 -4.5967519283294678e-02 + + 4.3127310276031494e-01 5.3806531429290771e-01 + <_> + + 0 -1 2071 1.5585960447788239e-01 + + 5.1961702108383179e-01 1.6847139596939087e-01 + <_> + + 0 -1 2072 1.5164829790592194e-02 + + 4.7357571125030518e-01 6.7350268363952637e-01 + <_> + + 0 -1 2073 -1.0604249546304345e-03 + + 5.8229267597198486e-01 4.7757029533386230e-01 + <_> + + 0 -1 2074 6.6476291976869106e-03 + + 4.9991989135742188e-01 2.3195350170135498e-01 + <_> + + 0 -1 2075 -1.2231130152940750e-02 + + 4.7508931159973145e-01 5.2629822492599487e-01 + <_> + + 0 -1 2076 5.6528882123529911e-03 + + 5.0697678327560425e-01 3.5618188977241516e-01 + <_> + + 0 -1 2077 1.2977829901501536e-03 + + 4.8756939172744751e-01 5.6190627813339233e-01 + <_> + + 0 -1 2078 1.0781589895486832e-02 + + 4.7507700324058533e-01 6.7823082208633423e-01 + <_> + + 0 -1 2079 2.8654779307544231e-03 + + 5.3054618835449219e-01 4.2907360196113586e-01 + <_> + + 0 -1 2080 2.8663428965955973e-03 + + 4.5184791088104248e-01 5.5393511056900024e-01 + <_> + + 0 -1 2081 -5.1983320154249668e-03 + + 4.1491198539733887e-01 5.4341888427734375e-01 + <_> + + 0 -1 2082 5.3739990107715130e-03 + + 4.7178968787193298e-01 6.5076571702957153e-01 + <_> + + 0 -1 2083 -1.4641529880464077e-02 + + 2.1721640229225159e-01 5.1617771387100220e-01 + <_> + + 0 -1 2084 -1.5042580344015732e-05 + + 5.3373837471008301e-01 4.2988368868827820e-01 + <_> + + 0 -1 2085 -1.1875660129589960e-04 + + 4.6045941114425659e-01 5.5824470520019531e-01 + <_> + + 0 -1 2086 1.6995530575513840e-02 + + 4.9458950757980347e-01 7.3880076408386230e-02 + <_> + + 0 -1 2087 -3.5095941275358200e-02 + + 7.0055091381072998e-01 4.9775910377502441e-01 + <_> + + 0 -1 2088 2.4217350874096155e-03 + + 4.4662651419639587e-01 5.4776942729949951e-01 + <_> + + 0 -1 2089 -9.6340337768197060e-04 + + 4.7140988707542419e-01 5.3133380413055420e-01 + <_> + + 0 -1 2090 1.6391130338888615e-04 + + 4.3315461277961731e-01 5.3422421216964722e-01 + <_> + + 0 -1 2091 -2.1141460165381432e-02 + + 2.6447001099586487e-01 5.2044987678527832e-01 + <_> + + 0 -1 2092 8.7775202700868249e-04 + + 5.2083498239517212e-01 4.1527429223060608e-01 + <_> + + 0 -1 2093 -2.7943920344114304e-02 + + 6.3441252708435059e-01 5.0188118219375610e-01 + <_> + + 0 -1 2094 6.7297378554940224e-03 + + 5.0504380464553833e-01 3.5008639097213745e-01 + <_> + + 0 -1 2095 2.3281039670109749e-02 + + 4.9663180112838745e-01 6.9686770439147949e-01 + <_> + + 0 -1 2096 -1.1644979938864708e-02 + + 3.3002600073814392e-01 5.0496298074722290e-01 + <_> + + 0 -1 2097 1.5764309093356133e-02 + + 4.9915981292724609e-01 7.3211538791656494e-01 + <_> + + 0 -1 2098 -1.3611479662358761e-03 + + 3.9117351174354553e-01 5.1606708765029907e-01 + <_> + + 0 -1 2099 -8.1522337859496474e-04 + + 5.6289112567901611e-01 4.9497190117835999e-01 + <_> + + 0 -1 2100 -6.0066272271797061e-04 + + 5.8535951375961304e-01 4.5505958795547485e-01 + <_> + + 0 -1 2101 4.9715518252924085e-04 + + 4.2714700102806091e-01 5.4435992240905762e-01 + <_> + + 0 -1 2102 2.3475370835512877e-03 + + 5.1431107521057129e-01 3.8876569271087646e-01 + <_> + + 0 -1 2103 -8.9261569082736969e-03 + + 6.0445022583007812e-01 4.9717208743095398e-01 + <_> + + 0 -1 2104 -1.3919910416007042e-02 + + 2.5831609964370728e-01 5.0003677606582642e-01 + <_> + + 0 -1 2105 1.0209949687123299e-03 + + 4.8573741316795349e-01 5.5603581666946411e-01 + <_> + + 0 -1 2106 -2.7441629208624363e-03 + + 5.9368848800659180e-01 4.6457770466804504e-01 + <_> + + 0 -1 2107 -1.6200130805373192e-02 + + 3.1630149483680725e-01 5.1934951543807983e-01 + <_> + + 0 -1 2108 4.3331980705261230e-03 + + 5.0612241029739380e-01 3.4588789939880371e-01 + <_> + + 0 -1 2109 5.8497930876910686e-04 + + 4.7790178656578064e-01 5.8701777458190918e-01 + <_> + + 0 -1 2110 -2.2466450463980436e-03 + + 4.2978510260581970e-01 5.3747731447219849e-01 + <_> + + 0 -1 2111 2.3146099410951138e-03 + + 5.4386717081069946e-01 4.6409699320793152e-01 + <_> + + 0 -1 2112 8.7679121643304825e-03 + + 4.7268930077552795e-01 6.7717897891998291e-01 + <_> + + 0 -1 2113 -2.2448020172305405e-04 + + 4.2291730642318726e-01 5.4280489683151245e-01 + <_> + + 0 -1 2114 -7.4336021207273006e-03 + + 6.0988807678222656e-01 4.6836739778518677e-01 + <_> + + 0 -1 2115 -2.3189240600913763e-03 + + 5.6894367933273315e-01 4.4242420792579651e-01 + <_> + + 0 -1 2116 -2.1042178850620985e-03 + + 3.7622210383415222e-01 5.1870870590209961e-01 + <_> + + 0 -1 2117 4.6034841216169298e-04 + + 4.6994051337242126e-01 5.7712072134017944e-01 + <_> + + 0 -1 2118 1.0547629790380597e-03 + + 4.4652169942855835e-01 5.6017017364501953e-01 + <_> + + 0 -1 2119 8.7148818420246243e-04 + + 5.4498052597045898e-01 3.9147090911865234e-01 + <_> + + 0 -1 2120 3.3364820410497487e-04 + + 4.5640090107917786e-01 5.6457388401031494e-01 + <_> + + 0 -1 2121 -1.4853250468149781e-03 + + 5.7473778724670410e-01 4.6927788853645325e-01 + <_> + + 0 -1 2122 3.0251620337367058e-03 + + 5.1661968231201172e-01 3.7628141045570374e-01 + <_> + + 0 -1 2123 5.0280741415917873e-03 + + 5.0021117925643921e-01 6.1515271663665771e-01 + <_> + + 0 -1 2124 -5.8164511574432254e-04 + + 5.3945982456207275e-01 4.3907511234283447e-01 + <_> + + 0 -1 2125 4.5141529291868210e-02 + + 5.1883268356323242e-01 2.0630359649658203e-01 + <_> + + 0 -1 2126 -1.0795620037242770e-03 + + 3.9046850800514221e-01 5.1379072666168213e-01 + <_> + + 0 -1 2127 1.5995999274309725e-04 + + 4.8953229188919067e-01 5.4275041818618774e-01 + <_> + + 0 -1 2128 -1.9359270110726357e-02 + + 6.9752287864685059e-01 4.7735071182250977e-01 + <_> + + 0 -1 2129 2.0725509524345398e-01 + + 5.2336359024047852e-01 3.0349919199943542e-01 + <_> + + 0 -1 2130 -4.1953290929086506e-04 + + 5.4193967580795288e-01 4.4601860642433167e-01 + <_> + + 0 -1 2131 2.2582069505006075e-03 + + 4.8157641291618347e-01 6.0274088382720947e-01 + <_> + + 0 -1 2132 -6.7811207845807076e-03 + + 3.9802789688110352e-01 5.1833057403564453e-01 + <_> + + 0 -1 2133 1.1154309846460819e-02 + + 5.4312318563461304e-01 4.1887599229812622e-01 + <_> + + 0 -1 2134 4.3162431567907333e-02 + + 4.7382280230522156e-01 6.5229612588882446e-01 + + <_> + + <_> + 3 7 14 4 -1. + <_> + 3 9 14 2 2. + <_> + + <_> + 1 2 18 4 -1. + <_> + 7 2 6 4 3. + <_> + + <_> + 1 7 15 9 -1. + <_> + 1 10 15 3 3. + <_> + + <_> + 5 6 2 6 -1. + <_> + 5 9 2 3 2. + <_> + + <_> + 7 5 6 3 -1. + <_> + 9 5 2 3 3. + <_> + + <_> + 4 0 12 9 -1. + <_> + 4 3 12 3 3. + <_> + + <_> + 6 9 10 8 -1. + <_> + 6 13 10 4 2. + <_> + + <_> + 3 6 14 8 -1. + <_> + 3 10 14 4 2. + <_> + + <_> + 14 1 6 10 -1. + <_> + 14 1 3 10 2. + <_> + + <_> + 7 8 5 12 -1. + <_> + 7 12 5 4 3. + <_> + + <_> + 1 1 18 3 -1. + <_> + 7 1 6 3 3. + <_> + + <_> + 1 8 17 2 -1. + <_> + 1 9 17 1 2. + <_> + + <_> + 16 6 4 2 -1. + <_> + 16 7 4 1 2. + <_> + + <_> + 5 17 2 2 -1. + <_> + 5 18 2 1 2. + <_> + + <_> + 14 2 6 12 -1. + <_> + 14 2 3 12 2. + <_> + + <_> + 4 0 4 12 -1. + <_> + 4 0 2 6 2. + <_> + 6 6 2 6 2. + <_> + + <_> + 2 11 18 8 -1. + <_> + 8 11 6 8 3. + <_> + + <_> + 5 7 10 2 -1. + <_> + 5 8 10 1 2. + <_> + + <_> + 15 11 5 3 -1. + <_> + 15 12 5 1 3. + <_> + + <_> + 5 3 10 9 -1. + <_> + 5 6 10 3 3. + <_> + + <_> + 9 4 2 14 -1. + <_> + 9 11 2 7 2. + <_> + + <_> + 3 5 4 12 -1. + <_> + 3 9 4 4 3. + <_> + + <_> + 4 5 12 5 -1. + <_> + 8 5 4 5 3. + <_> + + <_> + 5 6 10 8 -1. + <_> + 5 10 10 4 2. + <_> + + <_> + 8 0 6 9 -1. + <_> + 8 3 6 3 3. + <_> + + <_> + 9 12 1 8 -1. + <_> + 9 16 1 4 2. + <_> + + <_> + 0 7 20 6 -1. + <_> + 0 9 20 2 3. + <_> + + <_> + 7 0 6 17 -1. + <_> + 9 0 2 17 3. + <_> + + <_> + 9 0 6 4 -1. + <_> + 11 0 2 4 3. + <_> + + <_> + 5 1 6 4 -1. + <_> + 7 1 2 4 3. + <_> + + <_> + 12 1 6 16 -1. + <_> + 14 1 2 16 3. + <_> + + <_> + 0 5 18 8 -1. + <_> + 0 5 9 4 2. + <_> + 9 9 9 4 2. + <_> + + <_> + 8 15 10 4 -1. + <_> + 13 15 5 2 2. + <_> + 8 17 5 2 2. + <_> + + <_> + 3 1 4 8 -1. + <_> + 3 1 2 4 2. + <_> + 5 5 2 4 2. + <_> + + <_> + 3 6 14 10 -1. + <_> + 10 6 7 5 2. + <_> + 3 11 7 5 2. + <_> + + <_> + 2 1 6 16 -1. + <_> + 4 1 2 16 3. + <_> + + <_> + 0 18 20 2 -1. + <_> + 0 19 20 1 2. + <_> + + <_> + 8 13 4 3 -1. + <_> + 8 14 4 1 3. + <_> + + <_> + 9 14 2 3 -1. + <_> + 9 15 2 1 3. + <_> + + <_> + 0 12 9 6 -1. + <_> + 0 14 9 2 3. + <_> + + <_> + 5 7 3 4 -1. + <_> + 5 9 3 2 2. + <_> + + <_> + 9 3 2 16 -1. + <_> + 9 11 2 8 2. + <_> + + <_> + 3 6 13 8 -1. + <_> + 3 10 13 4 2. + <_> + + <_> + 12 3 8 2 -1. + <_> + 12 3 4 2 2. + <_> + + <_> + 8 8 4 12 -1. + <_> + 8 12 4 4 3. + <_> + + <_> + 11 3 8 6 -1. + <_> + 15 3 4 3 2. + <_> + 11 6 4 3 2. + <_> + + <_> + 7 1 6 19 -1. + <_> + 9 1 2 19 3. + <_> + + <_> + 9 0 6 4 -1. + <_> + 11 0 2 4 3. + <_> + + <_> + 3 1 9 3 -1. + <_> + 6 1 3 3 3. + <_> + + <_> + 8 15 10 4 -1. + <_> + 13 15 5 2 2. + <_> + 8 17 5 2 2. + <_> + + <_> + 0 3 6 10 -1. + <_> + 3 3 3 10 2. + <_> + + <_> + 3 4 15 15 -1. + <_> + 3 9 15 5 3. + <_> + + <_> + 6 5 8 6 -1. + <_> + 6 7 8 2 3. + <_> + + <_> + 4 4 12 10 -1. + <_> + 10 4 6 5 2. + <_> + 4 9 6 5 2. + <_> + + <_> + 6 4 4 4 -1. + <_> + 8 4 2 4 2. + <_> + + <_> + 15 11 1 2 -1. + <_> + 15 12 1 1 2. + <_> + + <_> + 3 11 2 2 -1. + <_> + 3 12 2 1 2. + <_> + + <_> + 16 11 1 3 -1. + <_> + 16 12 1 1 3. + <_> + + <_> + 3 15 6 4 -1. + <_> + 3 15 3 2 2. + <_> + 6 17 3 2 2. + <_> + + <_> + 6 7 8 2 -1. + <_> + 6 8 8 1 2. + <_> + + <_> + 3 11 1 3 -1. + <_> + 3 12 1 1 3. + <_> + + <_> + 6 0 12 2 -1. + <_> + 6 1 12 1 2. + <_> + + <_> + 9 14 2 3 -1. + <_> + 9 15 2 1 3. + <_> + + <_> + 7 15 6 2 -1. + <_> + 7 16 6 1 2. + <_> + + <_> + 0 5 4 6 -1. + <_> + 0 7 4 2 3. + <_> + + <_> + 4 12 12 2 -1. + <_> + 8 12 4 2 3. + <_> + + <_> + 6 3 1 9 -1. + <_> + 6 6 1 3 3. + <_> + + <_> + 10 17 3 2 -1. + <_> + 11 17 1 2 3. + <_> + + <_> + 9 9 2 2 -1. + <_> + 9 10 2 1 2. + <_> + + <_> + 7 6 6 4 -1. + <_> + 9 6 2 4 3. + <_> + + <_> + 7 17 3 2 -1. + <_> + 8 17 1 2 3. + <_> + + <_> + 10 17 3 3 -1. + <_> + 11 17 1 3 3. + <_> + + <_> + 8 12 3 2 -1. + <_> + 8 13 3 1 2. + <_> + + <_> + 9 3 6 2 -1. + <_> + 11 3 2 2 3. + <_> + + <_> + 3 11 14 4 -1. + <_> + 3 13 14 2 2. + <_> + + <_> + 1 10 18 4 -1. + <_> + 10 10 9 2 2. + <_> + 1 12 9 2 2. + <_> + + <_> + 0 10 3 3 -1. + <_> + 0 11 3 1 3. + <_> + + <_> + 9 1 6 6 -1. + <_> + 11 1 2 6 3. + <_> + + <_> + 8 7 3 6 -1. + <_> + 9 7 1 6 3. + <_> + + <_> + 1 0 18 9 -1. + <_> + 1 3 18 3 3. + <_> + + <_> + 12 10 2 6 -1. + <_> + 12 13 2 3 2. + <_> + + <_> + 0 5 19 8 -1. + <_> + 0 9 19 4 2. + <_> + + <_> + 7 0 6 9 -1. + <_> + 9 0 2 9 3. + <_> + + <_> + 5 3 6 1 -1. + <_> + 7 3 2 1 3. + <_> + + <_> + 11 3 6 1 -1. + <_> + 13 3 2 1 3. + <_> + + <_> + 5 10 4 6 -1. + <_> + 5 13 4 3 2. + <_> + + <_> + 11 3 6 1 -1. + <_> + 13 3 2 1 3. + <_> + + <_> + 4 4 12 6 -1. + <_> + 4 6 12 2 3. + <_> + + <_> + 15 12 2 6 -1. + <_> + 15 14 2 2 3. + <_> + + <_> + 9 3 2 2 -1. + <_> + 10 3 1 2 2. + <_> + + <_> + 9 3 3 1 -1. + <_> + 10 3 1 1 3. + <_> + + <_> + 1 1 4 14 -1. + <_> + 3 1 2 14 2. + <_> + + <_> + 9 0 4 4 -1. + <_> + 11 0 2 2 2. + <_> + 9 2 2 2 2. + <_> + + <_> + 7 5 1 14 -1. + <_> + 7 12 1 7 2. + <_> + + <_> + 19 0 1 4 -1. + <_> + 19 2 1 2 2. + <_> + + <_> + 5 5 6 4 -1. + <_> + 8 5 3 4 2. + <_> + + <_> + 9 18 3 2 -1. + <_> + 10 18 1 2 3. + <_> + + <_> + 8 18 3 2 -1. + <_> + 9 18 1 2 3. + <_> + + <_> + 4 5 12 6 -1. + <_> + 4 7 12 2 3. + <_> + + <_> + 3 12 2 6 -1. + <_> + 3 14 2 2 3. + <_> + + <_> + 10 8 2 12 -1. + <_> + 10 12 2 4 3. + <_> + + <_> + 7 18 3 2 -1. + <_> + 8 18 1 2 3. + <_> + + <_> + 9 0 6 2 -1. + <_> + 11 0 2 2 3. + <_> + + <_> + 5 11 9 3 -1. + <_> + 5 12 9 1 3. + <_> + + <_> + 9 0 6 2 -1. + <_> + 11 0 2 2 3. + <_> + + <_> + 1 1 18 5 -1. + <_> + 7 1 6 5 3. + <_> + + <_> + 8 0 4 4 -1. + <_> + 10 0 2 2 2. + <_> + 8 2 2 2 2. + <_> + + <_> + 3 12 1 3 -1. + <_> + 3 13 1 1 3. + <_> + + <_> + 8 14 5 3 -1. + <_> + 8 15 5 1 3. + <_> + + <_> + 5 4 10 12 -1. + <_> + 5 4 5 6 2. + <_> + 10 10 5 6 2. + <_> + + <_> + 9 6 9 12 -1. + <_> + 9 10 9 4 3. + <_> + + <_> + 2 2 12 14 -1. + <_> + 2 2 6 7 2. + <_> + 8 9 6 7 2. + <_> + + <_> + 4 7 12 2 -1. + <_> + 8 7 4 2 3. + <_> + + <_> + 7 4 6 4 -1. + <_> + 7 6 6 2 2. + <_> + + <_> + 4 5 11 8 -1. + <_> + 4 9 11 4 2. + <_> + + <_> + 3 10 16 4 -1. + <_> + 3 12 16 2 2. + <_> + + <_> + 0 0 16 2 -1. + <_> + 0 1 16 1 2. + <_> + + <_> + 7 5 6 2 -1. + <_> + 9 5 2 2 3. + <_> + + <_> + 3 2 6 10 -1. + <_> + 3 2 3 5 2. + <_> + 6 7 3 5 2. + <_> + + <_> + 10 5 8 15 -1. + <_> + 10 10 8 5 3. + <_> + + <_> + 3 14 8 6 -1. + <_> + 3 14 4 3 2. + <_> + 7 17 4 3 2. + <_> + + <_> + 14 2 2 2 -1. + <_> + 14 3 2 1 2. + <_> + + <_> + 1 10 7 6 -1. + <_> + 1 13 7 3 2. + <_> + + <_> + 15 4 4 3 -1. + <_> + 15 4 2 3 2. + <_> + + <_> + 2 9 14 6 -1. + <_> + 2 9 7 3 2. + <_> + 9 12 7 3 2. + <_> + + <_> + 5 7 10 4 -1. + <_> + 5 9 10 2 2. + <_> + + <_> + 6 9 8 8 -1. + <_> + 6 9 4 4 2. + <_> + 10 13 4 4 2. + <_> + + <_> + 14 1 3 2 -1. + <_> + 14 2 3 1 2. + <_> + + <_> + 1 4 4 2 -1. + <_> + 3 4 2 2 2. + <_> + + <_> + 11 10 2 8 -1. + <_> + 11 14 2 4 2. + <_> + + <_> + 0 0 5 3 -1. + <_> + 0 1 5 1 3. + <_> + + <_> + 2 5 18 8 -1. + <_> + 11 5 9 4 2. + <_> + 2 9 9 4 2. + <_> + + <_> + 6 6 1 6 -1. + <_> + 6 9 1 3 2. + <_> + + <_> + 19 1 1 3 -1. + <_> + 19 2 1 1 3. + <_> + + <_> + 7 6 6 6 -1. + <_> + 9 6 2 6 3. + <_> + + <_> + 19 1 1 3 -1. + <_> + 19 2 1 1 3. + <_> + + <_> + 3 13 2 3 -1. + <_> + 3 14 2 1 3. + <_> + + <_> + 8 4 8 12 -1. + <_> + 12 4 4 6 2. + <_> + 8 10 4 6 2. + <_> + + <_> + 5 2 6 3 -1. + <_> + 7 2 2 3 3. + <_> + + <_> + 6 1 9 10 -1. + <_> + 6 6 9 5 2. + <_> + + <_> + 0 4 6 12 -1. + <_> + 2 4 2 12 3. + <_> + + <_> + 15 13 2 3 -1. + <_> + 15 14 2 1 3. + <_> + + <_> + 7 14 5 3 -1. + <_> + 7 15 5 1 3. + <_> + + <_> + 15 13 3 3 -1. + <_> + 15 14 3 1 3. + <_> + + <_> + 6 14 8 3 -1. + <_> + 6 15 8 1 3. + <_> + + <_> + 15 13 3 3 -1. + <_> + 15 14 3 1 3. + <_> + + <_> + 2 13 3 3 -1. + <_> + 2 14 3 1 3. + <_> + + <_> + 4 7 12 12 -1. + <_> + 10 7 6 6 2. + <_> + 4 13 6 6 2. + <_> + + <_> + 9 7 2 6 -1. + <_> + 10 7 1 6 2. + <_> + + <_> + 8 9 5 2 -1. + <_> + 8 10 5 1 2. + <_> + + <_> + 8 6 3 4 -1. + <_> + 9 6 1 4 3. + <_> + + <_> + 9 6 2 8 -1. + <_> + 9 10 2 4 2. + <_> + + <_> + 7 7 3 6 -1. + <_> + 8 7 1 6 3. + <_> + + <_> + 11 3 3 3 -1. + <_> + 12 3 1 3 3. + <_> + + <_> + 5 4 6 1 -1. + <_> + 7 4 2 1 3. + <_> + + <_> + 5 6 10 3 -1. + <_> + 5 7 10 1 3. + <_> + + <_> + 7 3 6 9 -1. + <_> + 7 6 6 3 3. + <_> + + <_> + 6 7 9 1 -1. + <_> + 9 7 3 1 3. + <_> + + <_> + 2 8 16 8 -1. + <_> + 2 12 16 4 2. + <_> + + <_> + 14 6 2 6 -1. + <_> + 14 9 2 3 2. + <_> + + <_> + 1 5 6 15 -1. + <_> + 1 10 6 5 3. + <_> + + <_> + 10 0 6 9 -1. + <_> + 10 3 6 3 3. + <_> + + <_> + 6 6 7 14 -1. + <_> + 6 13 7 7 2. + <_> + + <_> + 13 7 3 6 -1. + <_> + 13 9 3 2 3. + <_> + + <_> + 1 8 15 4 -1. + <_> + 6 8 5 4 3. + <_> + + <_> + 11 2 3 10 -1. + <_> + 11 7 3 5 2. + <_> + + <_> + 3 7 4 6 -1. + <_> + 3 9 4 2 3. + <_> + + <_> + 13 3 6 10 -1. + <_> + 15 3 2 10 3. + <_> + + <_> + 5 7 8 10 -1. + <_> + 5 7 4 5 2. + <_> + 9 12 4 5 2. + <_> + + <_> + 4 4 12 12 -1. + <_> + 10 4 6 6 2. + <_> + 4 10 6 6 2. + <_> + + <_> + 1 4 6 9 -1. + <_> + 3 4 2 9 3. + <_> + + <_> + 11 3 2 5 -1. + <_> + 11 3 1 5 2. + <_> + + <_> + 7 3 2 5 -1. + <_> + 8 3 1 5 2. + <_> + + <_> + 10 14 2 3 -1. + <_> + 10 15 2 1 3. + <_> + + <_> + 5 12 6 2 -1. + <_> + 8 12 3 2 2. + <_> + + <_> + 9 14 2 3 -1. + <_> + 9 15 2 1 3. + <_> + + <_> + 4 11 12 6 -1. + <_> + 4 14 12 3 2. + <_> + + <_> + 11 11 5 9 -1. + <_> + 11 14 5 3 3. + <_> + + <_> + 6 15 3 2 -1. + <_> + 6 16 3 1 2. + <_> + + <_> + 11 0 3 5 -1. + <_> + 12 0 1 5 3. + <_> + + <_> + 5 5 6 7 -1. + <_> + 8 5 3 7 2. + <_> + + <_> + 13 0 1 9 -1. + <_> + 13 3 1 3 3. + <_> + + <_> + 3 2 4 8 -1. + <_> + 3 2 2 4 2. + <_> + 5 6 2 4 2. + <_> + + <_> + 13 12 4 6 -1. + <_> + 13 14 4 2 3. + <_> + + <_> + 3 12 4 6 -1. + <_> + 3 14 4 2 3. + <_> + + <_> + 13 11 3 4 -1. + <_> + 13 13 3 2 2. + <_> + + <_> + 4 4 4 3 -1. + <_> + 4 5 4 1 3. + <_> + + <_> + 7 5 11 8 -1. + <_> + 7 9 11 4 2. + <_> + + <_> + 7 8 3 4 -1. + <_> + 8 8 1 4 3. + <_> + + <_> + 9 1 6 1 -1. + <_> + 11 1 2 1 3. + <_> + + <_> + 5 5 3 3 -1. + <_> + 5 6 3 1 3. + <_> + + <_> + 0 9 20 6 -1. + <_> + 10 9 10 3 2. + <_> + 0 12 10 3 2. + <_> + + <_> + 8 6 3 5 -1. + <_> + 9 6 1 5 3. + <_> + + <_> + 11 0 1 3 -1. + <_> + 11 1 1 1 3. + <_> + + <_> + 4 2 4 2 -1. + <_> + 4 3 4 1 2. + <_> + + <_> + 12 6 4 3 -1. + <_> + 12 7 4 1 3. + <_> + + <_> + 5 0 6 4 -1. + <_> + 7 0 2 4 3. + <_> + + <_> + 9 7 3 8 -1. + <_> + 10 7 1 8 3. + <_> + + <_> + 9 7 2 2 -1. + <_> + 10 7 1 2 2. + <_> + + <_> + 6 7 14 4 -1. + <_> + 13 7 7 2 2. + <_> + 6 9 7 2 2. + <_> + + <_> + 0 5 3 6 -1. + <_> + 0 7 3 2 3. + <_> + + <_> + 13 11 3 4 -1. + <_> + 13 13 3 2 2. + <_> + + <_> + 4 11 3 4 -1. + <_> + 4 13 3 2 2. + <_> + + <_> + 5 9 12 8 -1. + <_> + 11 9 6 4 2. + <_> + 5 13 6 4 2. + <_> + + <_> + 9 12 1 3 -1. + <_> + 9 13 1 1 3. + <_> + + <_> + 10 15 2 4 -1. + <_> + 10 17 2 2 2. + <_> + + <_> + 7 7 6 1 -1. + <_> + 9 7 2 1 3. + <_> + + <_> + 12 3 6 6 -1. + <_> + 15 3 3 3 2. + <_> + 12 6 3 3 2. + <_> + + <_> + 0 4 10 6 -1. + <_> + 0 6 10 2 3. + <_> + + <_> + 8 3 8 14 -1. + <_> + 12 3 4 7 2. + <_> + 8 10 4 7 2. + <_> + + <_> + 4 4 7 15 -1. + <_> + 4 9 7 5 3. + <_> + + <_> + 12 2 6 8 -1. + <_> + 15 2 3 4 2. + <_> + 12 6 3 4 2. + <_> + + <_> + 2 2 6 8 -1. + <_> + 2 2 3 4 2. + <_> + 5 6 3 4 2. + <_> + + <_> + 2 13 18 7 -1. + <_> + 8 13 6 7 3. + <_> + + <_> + 4 3 8 14 -1. + <_> + 4 3 4 7 2. + <_> + 8 10 4 7 2. + <_> + + <_> + 18 1 2 6 -1. + <_> + 18 3 2 2 3. + <_> + + <_> + 9 11 2 3 -1. + <_> + 9 12 2 1 3. + <_> + + <_> + 18 1 2 6 -1. + <_> + 18 3 2 2 3. + <_> + + <_> + 0 1 2 6 -1. + <_> + 0 3 2 2 3. + <_> + + <_> + 1 5 18 6 -1. + <_> + 1 7 18 2 3. + <_> + + <_> + 0 2 6 7 -1. + <_> + 3 2 3 7 2. + <_> + + <_> + 7 3 6 14 -1. + <_> + 7 10 6 7 2. + <_> + + <_> + 3 7 13 10 -1. + <_> + 3 12 13 5 2. + <_> + + <_> + 11 15 2 2 -1. + <_> + 11 16 2 1 2. + <_> + + <_> + 2 11 16 4 -1. + <_> + 2 11 8 2 2. + <_> + 10 13 8 2 2. + <_> + + <_> + 13 7 6 4 -1. + <_> + 16 7 3 2 2. + <_> + 13 9 3 2 2. + <_> + + <_> + 6 10 3 9 -1. + <_> + 6 13 3 3 3. + <_> + + <_> + 14 6 1 6 -1. + <_> + 14 9 1 3 2. + <_> + + <_> + 5 10 4 1 -1. + <_> + 7 10 2 1 2. + <_> + + <_> + 3 8 15 5 -1. + <_> + 8 8 5 5 3. + <_> + + <_> + 1 6 5 4 -1. + <_> + 1 8 5 2 2. + <_> + + <_> + 3 1 17 6 -1. + <_> + 3 3 17 2 3. + <_> + + <_> + 6 7 8 2 -1. + <_> + 10 7 4 2 2. + <_> + + <_> + 9 7 3 2 -1. + <_> + 10 7 1 2 3. + <_> + + <_> + 8 7 3 2 -1. + <_> + 9 7 1 2 3. + <_> + + <_> + 8 9 4 2 -1. + <_> + 8 10 4 1 2. + <_> + + <_> + 8 8 4 3 -1. + <_> + 8 9 4 1 3. + <_> + + <_> + 9 5 6 4 -1. + <_> + 9 5 3 4 2. + <_> + + <_> + 8 13 4 3 -1. + <_> + 8 14 4 1 3. + <_> + + <_> + 4 7 12 6 -1. + <_> + 10 7 6 3 2. + <_> + 4 10 6 3 2. + <_> + + <_> + 8 14 4 3 -1. + <_> + 8 15 4 1 3. + <_> + + <_> + 9 7 3 3 -1. + <_> + 9 8 3 1 3. + <_> + + <_> + 7 4 3 8 -1. + <_> + 8 4 1 8 3. + <_> + + <_> + 10 0 3 6 -1. + <_> + 11 0 1 6 3. + <_> + + <_> + 6 3 4 8 -1. + <_> + 8 3 2 8 2. + <_> + + <_> + 14 3 6 13 -1. + <_> + 14 3 3 13 2. + <_> + + <_> + 8 13 3 6 -1. + <_> + 8 16 3 3 2. + <_> + + <_> + 14 3 6 13 -1. + <_> + 14 3 3 13 2. + <_> + + <_> + 0 7 10 4 -1. + <_> + 0 7 5 2 2. + <_> + 5 9 5 2 2. + <_> + + <_> + 14 3 6 13 -1. + <_> + 14 3 3 13 2. + <_> + + <_> + 0 3 6 13 -1. + <_> + 3 3 3 13 2. + <_> + + <_> + 9 1 4 1 -1. + <_> + 9 1 2 1 2. + <_> + + <_> + 8 0 2 1 -1. + <_> + 9 0 1 1 2. + <_> + + <_> + 10 16 4 4 -1. + <_> + 12 16 2 2 2. + <_> + 10 18 2 2 2. + <_> + + <_> + 9 6 2 3 -1. + <_> + 10 6 1 3 2. + <_> + + <_> + 4 5 12 2 -1. + <_> + 8 5 4 2 3. + <_> + + <_> + 8 7 3 5 -1. + <_> + 9 7 1 5 3. + <_> + + <_> + 6 4 8 6 -1. + <_> + 6 6 8 2 3. + <_> + + <_> + 9 5 2 12 -1. + <_> + 9 11 2 6 2. + <_> + + <_> + 4 6 6 8 -1. + <_> + 4 10 6 4 2. + <_> + + <_> + 12 2 8 5 -1. + <_> + 12 2 4 5 2. + <_> + + <_> + 0 8 18 3 -1. + <_> + 0 9 18 1 3. + <_> + + <_> + 8 12 4 8 -1. + <_> + 8 16 4 4 2. + <_> + + <_> + 0 2 8 5 -1. + <_> + 4 2 4 5 2. + <_> + + <_> + 13 11 3 4 -1. + <_> + 13 13 3 2 2. + <_> + + <_> + 5 11 6 1 -1. + <_> + 7 11 2 1 3. + <_> + + <_> + 11 3 3 1 -1. + <_> + 12 3 1 1 3. + <_> + + <_> + 7 13 5 3 -1. + <_> + 7 14 5 1 3. + <_> + + <_> + 11 11 7 6 -1. + <_> + 11 14 7 3 2. + <_> + + <_> + 2 11 7 6 -1. + <_> + 2 14 7 3 2. + <_> + + <_> + 12 14 2 6 -1. + <_> + 12 16 2 2 3. + <_> + + <_> + 8 14 3 3 -1. + <_> + 8 15 3 1 3. + <_> + + <_> + 11 0 3 5 -1. + <_> + 12 0 1 5 3. + <_> + + <_> + 6 1 4 9 -1. + <_> + 8 1 2 9 2. + <_> + + <_> + 10 3 6 1 -1. + <_> + 12 3 2 1 3. + <_> + + <_> + 8 8 3 4 -1. + <_> + 8 10 3 2 2. + <_> + + <_> + 8 12 4 2 -1. + <_> + 8 13 4 1 2. + <_> + + <_> + 5 18 4 2 -1. + <_> + 5 19 4 1 2. + <_> + + <_> + 2 1 18 6 -1. + <_> + 2 3 18 2 3. + <_> + + <_> + 6 0 3 2 -1. + <_> + 7 0 1 2 3. + <_> + + <_> + 13 8 6 2 -1. + <_> + 16 8 3 1 2. + <_> + 13 9 3 1 2. + <_> + + <_> + 6 10 3 6 -1. + <_> + 6 13 3 3 2. + <_> + + <_> + 0 13 20 4 -1. + <_> + 10 13 10 2 2. + <_> + 0 15 10 2 2. + <_> + + <_> + 7 7 6 5 -1. + <_> + 9 7 2 5 3. + <_> + + <_> + 11 0 2 2 -1. + <_> + 11 1 2 1 2. + <_> + + <_> + 1 8 6 2 -1. + <_> + 1 8 3 1 2. + <_> + 4 9 3 1 2. + <_> + + <_> + 0 2 20 2 -1. + <_> + 10 2 10 1 2. + <_> + 0 3 10 1 2. + <_> + + <_> + 7 14 5 3 -1. + <_> + 7 15 5 1 3. + <_> + + <_> + 7 13 6 6 -1. + <_> + 10 13 3 3 2. + <_> + 7 16 3 3 2. + <_> + + <_> + 9 12 2 3 -1. + <_> + 9 13 2 1 3. + <_> + + <_> + 16 11 1 6 -1. + <_> + 16 13 1 2 3. + <_> + + <_> + 3 11 1 6 -1. + <_> + 3 13 1 2 3. + <_> + + <_> + 4 4 14 12 -1. + <_> + 11 4 7 6 2. + <_> + 4 10 7 6 2. + <_> + + <_> + 5 4 3 3 -1. + <_> + 5 5 3 1 3. + <_> + + <_> + 12 3 3 3 -1. + <_> + 13 3 1 3 3. + <_> + + <_> + 6 6 8 3 -1. + <_> + 6 7 8 1 3. + <_> + + <_> + 12 3 3 3 -1. + <_> + 13 3 1 3 3. + <_> + + <_> + 3 1 4 10 -1. + <_> + 3 1 2 5 2. + <_> + 5 6 2 5 2. + <_> + + <_> + 5 7 10 2 -1. + <_> + 5 7 5 2 2. + <_> + + <_> + 8 7 3 3 -1. + <_> + 9 7 1 3 3. + <_> + + <_> + 15 12 2 3 -1. + <_> + 15 13 2 1 3. + <_> + + <_> + 7 8 3 4 -1. + <_> + 8 8 1 4 3. + <_> + + <_> + 13 4 1 12 -1. + <_> + 13 10 1 6 2. + <_> + + <_> + 4 5 12 12 -1. + <_> + 4 5 6 6 2. + <_> + 10 11 6 6 2. + <_> + + <_> + 7 14 7 3 -1. + <_> + 7 15 7 1 3. + <_> + + <_> + 3 12 2 3 -1. + <_> + 3 13 2 1 3. + <_> + + <_> + 3 2 14 2 -1. + <_> + 10 2 7 1 2. + <_> + 3 3 7 1 2. + <_> + + <_> + 0 1 3 10 -1. + <_> + 1 1 1 10 3. + <_> + + <_> + 9 0 6 5 -1. + <_> + 11 0 2 5 3. + <_> + + <_> + 5 7 6 2 -1. + <_> + 8 7 3 2 2. + <_> + + <_> + 7 1 6 10 -1. + <_> + 7 6 6 5 2. + <_> + + <_> + 1 1 18 3 -1. + <_> + 7 1 6 3 3. + <_> + + <_> + 16 3 3 6 -1. + <_> + 16 5 3 2 3. + <_> + + <_> + 6 3 7 6 -1. + <_> + 6 6 7 3 2. + <_> + + <_> + 4 7 12 2 -1. + <_> + 8 7 4 2 3. + <_> + + <_> + 0 4 17 10 -1. + <_> + 0 9 17 5 2. + <_> + + <_> + 3 4 15 16 -1. + <_> + 3 12 15 8 2. + <_> + + <_> + 7 15 6 4 -1. + <_> + 7 17 6 2 2. + <_> + + <_> + 15 2 4 9 -1. + <_> + 15 2 2 9 2. + <_> + + <_> + 2 3 3 2 -1. + <_> + 2 4 3 1 2. + <_> + + <_> + 13 6 7 9 -1. + <_> + 13 9 7 3 3. + <_> + + <_> + 8 11 4 3 -1. + <_> + 8 12 4 1 3. + <_> + + <_> + 0 2 20 6 -1. + <_> + 10 2 10 3 2. + <_> + 0 5 10 3 2. + <_> + + <_> + 3 2 6 10 -1. + <_> + 3 2 3 5 2. + <_> + 6 7 3 5 2. + <_> + + <_> + 13 10 3 4 -1. + <_> + 13 12 3 2 2. + <_> + + <_> + 4 10 3 4 -1. + <_> + 4 12 3 2 2. + <_> + + <_> + 7 5 6 3 -1. + <_> + 9 5 2 3 3. + <_> + + <_> + 7 6 6 8 -1. + <_> + 7 10 6 4 2. + <_> + + <_> + 0 11 20 6 -1. + <_> + 0 14 20 3 2. + <_> + + <_> + 4 13 4 6 -1. + <_> + 4 13 2 3 2. + <_> + 6 16 2 3 2. + <_> + + <_> + 6 0 8 12 -1. + <_> + 10 0 4 6 2. + <_> + 6 6 4 6 2. + <_> + + <_> + 2 0 15 2 -1. + <_> + 2 1 15 1 2. + <_> + + <_> + 9 12 2 3 -1. + <_> + 9 13 2 1 3. + <_> + + <_> + 3 12 1 2 -1. + <_> + 3 13 1 1 2. + <_> + + <_> + 9 11 2 3 -1. + <_> + 9 12 2 1 3. + <_> + + <_> + 7 3 3 1 -1. + <_> + 8 3 1 1 3. + <_> + + <_> + 17 7 3 6 -1. + <_> + 17 9 3 2 3. + <_> + + <_> + 7 2 3 2 -1. + <_> + 8 2 1 2 3. + <_> + + <_> + 11 4 5 3 -1. + <_> + 11 5 5 1 3. + <_> + + <_> + 4 4 5 3 -1. + <_> + 4 5 5 1 3. + <_> + + <_> + 19 3 1 2 -1. + <_> + 19 4 1 1 2. + <_> + + <_> + 5 5 4 3 -1. + <_> + 5 6 4 1 3. + <_> + + <_> + 17 7 3 6 -1. + <_> + 17 9 3 2 3. + <_> + + <_> + 0 7 3 6 -1. + <_> + 0 9 3 2 3. + <_> + + <_> + 14 2 6 9 -1. + <_> + 14 5 6 3 3. + <_> + + <_> + 0 4 5 6 -1. + <_> + 0 6 5 2 3. + <_> + + <_> + 10 5 6 2 -1. + <_> + 12 5 2 2 3. + <_> + + <_> + 4 5 6 2 -1. + <_> + 6 5 2 2 3. + <_> + + <_> + 8 1 4 6 -1. + <_> + 8 3 4 2 3. + <_> + + <_> + 0 2 3 6 -1. + <_> + 0 4 3 2 3. + <_> + + <_> + 6 6 8 3 -1. + <_> + 6 7 8 1 3. + <_> + + <_> + 0 1 5 9 -1. + <_> + 0 4 5 3 3. + <_> + + <_> + 16 0 4 15 -1. + <_> + 16 0 2 15 2. + <_> + + <_> + 1 10 3 2 -1. + <_> + 1 11 3 1 2. + <_> + + <_> + 14 4 1 10 -1. + <_> + 14 9 1 5 2. + <_> + + <_> + 0 1 4 12 -1. + <_> + 2 1 2 12 2. + <_> + + <_> + 11 11 4 2 -1. + <_> + 11 11 2 2 2. + <_> + + <_> + 5 11 4 2 -1. + <_> + 7 11 2 2 2. + <_> + + <_> + 3 8 15 5 -1. + <_> + 8 8 5 5 3. + <_> + + <_> + 0 0 6 10 -1. + <_> + 3 0 3 10 2. + <_> + + <_> + 11 4 3 2 -1. + <_> + 12 4 1 2 3. + <_> + + <_> + 8 12 3 8 -1. + <_> + 8 16 3 4 2. + <_> + + <_> + 8 14 5 3 -1. + <_> + 8 15 5 1 3. + <_> + + <_> + 7 14 4 3 -1. + <_> + 7 15 4 1 3. + <_> + + <_> + 11 4 3 2 -1. + <_> + 12 4 1 2 3. + <_> + + <_> + 3 15 14 4 -1. + <_> + 3 15 7 2 2. + <_> + 10 17 7 2 2. + <_> + + <_> + 2 2 16 4 -1. + <_> + 10 2 8 2 2. + <_> + 2 4 8 2 2. + <_> + + <_> + 0 8 6 12 -1. + <_> + 3 8 3 12 2. + <_> + + <_> + 5 7 10 2 -1. + <_> + 5 7 5 2 2. + <_> + + <_> + 9 7 2 5 -1. + <_> + 10 7 1 5 2. + <_> + + <_> + 13 7 6 4 -1. + <_> + 16 7 3 2 2. + <_> + 13 9 3 2 2. + <_> + + <_> + 0 13 8 2 -1. + <_> + 0 14 8 1 2. + <_> + + <_> + 13 7 6 4 -1. + <_> + 16 7 3 2 2. + <_> + 13 9 3 2 2. + <_> + + <_> + 1 7 6 4 -1. + <_> + 1 7 3 2 2. + <_> + 4 9 3 2 2. + <_> + + <_> + 12 6 1 12 -1. + <_> + 12 12 1 6 2. + <_> + + <_> + 9 5 2 6 -1. + <_> + 10 5 1 6 2. + <_> + + <_> + 14 12 2 3 -1. + <_> + 14 13 2 1 3. + <_> + + <_> + 4 12 2 3 -1. + <_> + 4 13 2 1 3. + <_> + + <_> + 8 12 4 3 -1. + <_> + 8 13 4 1 3. + <_> + + <_> + 5 2 2 4 -1. + <_> + 5 2 1 2 2. + <_> + 6 4 1 2 2. + <_> + + <_> + 5 5 11 3 -1. + <_> + 5 6 11 1 3. + <_> + + <_> + 7 6 4 12 -1. + <_> + 7 12 4 6 2. + <_> + + <_> + 12 13 8 5 -1. + <_> + 12 13 4 5 2. + <_> + + <_> + 7 6 1 12 -1. + <_> + 7 12 1 6 2. + <_> + + <_> + 1 2 6 3 -1. + <_> + 4 2 3 3 2. + <_> + + <_> + 9 5 6 10 -1. + <_> + 12 5 3 5 2. + <_> + 9 10 3 5 2. + <_> + + <_> + 5 5 8 12 -1. + <_> + 5 5 4 6 2. + <_> + 9 11 4 6 2. + <_> + + <_> + 0 7 20 6 -1. + <_> + 0 9 20 2 3. + <_> + + <_> + 4 2 2 2 -1. + <_> + 4 3 2 1 2. + <_> + + <_> + 4 18 12 2 -1. + <_> + 8 18 4 2 3. + <_> + + <_> + 7 4 4 16 -1. + <_> + 7 12 4 8 2. + <_> + + <_> + 7 6 7 8 -1. + <_> + 7 10 7 4 2. + <_> + + <_> + 6 3 3 1 -1. + <_> + 7 3 1 1 3. + <_> + + <_> + 11 15 2 4 -1. + <_> + 11 17 2 2 2. + <_> + + <_> + 3 5 4 8 -1. + <_> + 3 9 4 4 2. + <_> + + <_> + 7 1 6 12 -1. + <_> + 7 7 6 6 2. + <_> + + <_> + 4 6 6 2 -1. + <_> + 6 6 2 2 3. + <_> + + <_> + 16 4 4 6 -1. + <_> + 16 6 4 2 3. + <_> + + <_> + 3 3 5 2 -1. + <_> + 3 4 5 1 2. + <_> + + <_> + 9 11 2 3 -1. + <_> + 9 12 2 1 3. + <_> + + <_> + 2 16 4 2 -1. + <_> + 2 17 4 1 2. + <_> + + <_> + 7 13 6 6 -1. + <_> + 10 13 3 3 2. + <_> + 7 16 3 3 2. + <_> + + <_> + 7 0 3 4 -1. + <_> + 8 0 1 4 3. + <_> + + <_> + 8 15 4 3 -1. + <_> + 8 16 4 1 3. + <_> + + <_> + 0 4 4 6 -1. + <_> + 0 6 4 2 3. + <_> + + <_> + 5 6 12 3 -1. + <_> + 9 6 4 3 3. + <_> + + <_> + 7 6 6 14 -1. + <_> + 9 6 2 14 3. + <_> + + <_> + 9 7 3 3 -1. + <_> + 10 7 1 3 3. + <_> + + <_> + 6 12 2 4 -1. + <_> + 6 14 2 2 2. + <_> + + <_> + 10 12 7 6 -1. + <_> + 10 14 7 2 3. + <_> + + <_> + 1 0 15 2 -1. + <_> + 1 1 15 1 2. + <_> + + <_> + 14 0 6 6 -1. + <_> + 14 0 3 6 2. + <_> + + <_> + 5 3 3 1 -1. + <_> + 6 3 1 1 3. + <_> + + <_> + 14 0 6 6 -1. + <_> + 14 0 3 6 2. + <_> + + <_> + 0 3 20 10 -1. + <_> + 0 8 20 5 2. + <_> + + <_> + 14 0 6 6 -1. + <_> + 14 0 3 6 2. + <_> + + <_> + 0 0 6 6 -1. + <_> + 3 0 3 6 2. + <_> + + <_> + 19 15 1 2 -1. + <_> + 19 16 1 1 2. + <_> + + <_> + 0 2 4 8 -1. + <_> + 2 2 2 8 2. + <_> + + <_> + 2 1 18 4 -1. + <_> + 11 1 9 2 2. + <_> + 2 3 9 2 2. + <_> + + <_> + 8 12 1 2 -1. + <_> + 8 13 1 1 2. + <_> + + <_> + 5 2 10 6 -1. + <_> + 10 2 5 3 2. + <_> + 5 5 5 3 2. + <_> + + <_> + 9 7 2 4 -1. + <_> + 10 7 1 4 2. + <_> + + <_> + 9 7 3 3 -1. + <_> + 10 7 1 3 3. + <_> + + <_> + 4 5 12 8 -1. + <_> + 8 5 4 8 3. + <_> + + <_> + 15 15 4 3 -1. + <_> + 15 16 4 1 3. + <_> + + <_> + 8 18 3 1 -1. + <_> + 9 18 1 1 3. + <_> + + <_> + 9 13 4 3 -1. + <_> + 9 14 4 1 3. + <_> + + <_> + 7 13 4 3 -1. + <_> + 7 14 4 1 3. + <_> + + <_> + 19 15 1 2 -1. + <_> + 19 16 1 1 2. + <_> + + <_> + 0 15 8 4 -1. + <_> + 0 17 8 2 2. + <_> + + <_> + 9 3 6 4 -1. + <_> + 11 3 2 4 3. + <_> + + <_> + 8 14 4 3 -1. + <_> + 8 15 4 1 3. + <_> + + <_> + 3 14 14 6 -1. + <_> + 3 16 14 2 3. + <_> + + <_> + 6 3 6 6 -1. + <_> + 6 6 6 3 2. + <_> + + <_> + 5 11 10 6 -1. + <_> + 5 14 10 3 2. + <_> + + <_> + 3 10 3 4 -1. + <_> + 4 10 1 4 3. + <_> + + <_> + 13 9 2 2 -1. + <_> + 13 9 1 2 2. + <_> + + <_> + 5 3 6 4 -1. + <_> + 7 3 2 4 3. + <_> + + <_> + 9 7 3 3 -1. + <_> + 10 7 1 3 3. + <_> + + <_> + 2 12 2 3 -1. + <_> + 2 13 2 1 3. + <_> + + <_> + 9 8 3 12 -1. + <_> + 9 12 3 4 3. + <_> + + <_> + 3 14 4 6 -1. + <_> + 3 14 2 3 2. + <_> + 5 17 2 3 2. + <_> + + <_> + 16 15 2 2 -1. + <_> + 16 16 2 1 2. + <_> + + <_> + 2 15 2 2 -1. + <_> + 2 16 2 1 2. + <_> + + <_> + 8 12 4 3 -1. + <_> + 8 13 4 1 3. + <_> + + <_> + 0 7 20 1 -1. + <_> + 10 7 10 1 2. + <_> + + <_> + 7 6 8 3 -1. + <_> + 7 6 4 3 2. + <_> + + <_> + 5 7 8 2 -1. + <_> + 9 7 4 2 2. + <_> + + <_> + 9 7 3 5 -1. + <_> + 10 7 1 5 3. + <_> + + <_> + 8 7 3 5 -1. + <_> + 9 7 1 5 3. + <_> + + <_> + 11 1 3 5 -1. + <_> + 12 1 1 5 3. + <_> + + <_> + 6 2 3 6 -1. + <_> + 7 2 1 6 3. + <_> + + <_> + 14 14 6 5 -1. + <_> + 14 14 3 5 2. + <_> + + <_> + 9 8 2 2 -1. + <_> + 9 9 2 1 2. + <_> + + <_> + 10 7 1 3 -1. + <_> + 10 8 1 1 3. + <_> + + <_> + 6 6 2 2 -1. + <_> + 6 6 1 1 2. + <_> + 7 7 1 1 2. + <_> + + <_> + 2 11 18 4 -1. + <_> + 11 11 9 2 2. + <_> + 2 13 9 2 2. + <_> + + <_> + 6 6 2 2 -1. + <_> + 6 6 1 1 2. + <_> + 7 7 1 1 2. + <_> + + <_> + 0 15 20 2 -1. + <_> + 0 16 20 1 2. + <_> + + <_> + 4 14 2 3 -1. + <_> + 4 15 2 1 3. + <_> + + <_> + 8 14 4 3 -1. + <_> + 8 15 4 1 3. + <_> + + <_> + 8 7 2 3 -1. + <_> + 8 8 2 1 3. + <_> + + <_> + 9 10 2 3 -1. + <_> + 9 11 2 1 3. + <_> + + <_> + 5 4 10 4 -1. + <_> + 5 6 10 2 2. + <_> + + <_> + 9 7 6 4 -1. + <_> + 12 7 3 2 2. + <_> + 9 9 3 2 2. + <_> + + <_> + 4 7 3 6 -1. + <_> + 4 9 3 2 3. + <_> + + <_> + 11 15 4 4 -1. + <_> + 13 15 2 2 2. + <_> + 11 17 2 2 2. + <_> + + <_> + 7 8 4 2 -1. + <_> + 7 9 4 1 2. + <_> + + <_> + 13 1 4 3 -1. + <_> + 13 1 2 3 2. + <_> + + <_> + 5 15 4 4 -1. + <_> + 5 15 2 2 2. + <_> + 7 17 2 2 2. + <_> + + <_> + 9 5 4 7 -1. + <_> + 9 5 2 7 2. + <_> + + <_> + 5 6 8 3 -1. + <_> + 9 6 4 3 2. + <_> + + <_> + 9 9 2 2 -1. + <_> + 9 10 2 1 2. + <_> + + <_> + 7 15 5 3 -1. + <_> + 7 16 5 1 3. + <_> + + <_> + 11 10 4 3 -1. + <_> + 11 10 2 3 2. + <_> + + <_> + 6 9 8 10 -1. + <_> + 6 14 8 5 2. + <_> + + <_> + 10 11 6 2 -1. + <_> + 10 11 3 2 2. + <_> + + <_> + 4 11 6 2 -1. + <_> + 7 11 3 2 2. + <_> + + <_> + 11 3 8 1 -1. + <_> + 11 3 4 1 2. + <_> + + <_> + 6 3 3 2 -1. + <_> + 7 3 1 2 3. + <_> + + <_> + 14 5 6 5 -1. + <_> + 14 5 3 5 2. + <_> + + <_> + 7 5 2 12 -1. + <_> + 7 11 2 6 2. + <_> + + <_> + 8 11 4 3 -1. + <_> + 8 12 4 1 3. + <_> + + <_> + 4 1 2 3 -1. + <_> + 5 1 1 3 2. + <_> + + <_> + 18 3 2 6 -1. + <_> + 18 5 2 2 3. + <_> + + <_> + 0 3 2 6 -1. + <_> + 0 5 2 2 3. + <_> + + <_> + 9 12 2 3 -1. + <_> + 9 13 2 1 3. + <_> + + <_> + 7 13 4 3 -1. + <_> + 7 14 4 1 3. + <_> + + <_> + 18 0 2 6 -1. + <_> + 18 2 2 2 3. + <_> + + <_> + 0 0 2 6 -1. + <_> + 0 2 2 2 3. + <_> + + <_> + 8 14 6 3 -1. + <_> + 8 15 6 1 3. + <_> + + <_> + 7 4 2 4 -1. + <_> + 8 4 1 4 2. + <_> + + <_> + 8 5 4 6 -1. + <_> + 8 7 4 2 3. + <_> + + <_> + 6 4 2 2 -1. + <_> + 7 4 1 2 2. + <_> + + <_> + 3 14 14 4 -1. + <_> + 10 14 7 2 2. + <_> + 3 16 7 2 2. + <_> + + <_> + 6 15 6 2 -1. + <_> + 6 15 3 1 2. + <_> + 9 16 3 1 2. + <_> + + <_> + 14 15 6 2 -1. + <_> + 14 16 6 1 2. + <_> + + <_> + 2 12 12 8 -1. + <_> + 2 16 12 4 2. + <_> + + <_> + 7 7 7 2 -1. + <_> + 7 8 7 1 2. + <_> + + <_> + 0 2 18 2 -1. + <_> + 0 3 18 1 2. + <_> + + <_> + 9 6 2 5 -1. + <_> + 9 6 1 5 2. + <_> + + <_> + 7 5 3 8 -1. + <_> + 8 5 1 8 3. + <_> + + <_> + 9 6 3 4 -1. + <_> + 10 6 1 4 3. + <_> + + <_> + 4 13 3 2 -1. + <_> + 4 14 3 1 2. + <_> + + <_> + 9 4 6 3 -1. + <_> + 11 4 2 3 3. + <_> + + <_> + 5 4 6 3 -1. + <_> + 7 4 2 3 3. + <_> + + <_> + 14 11 5 2 -1. + <_> + 14 12 5 1 2. + <_> + + <_> + 1 2 6 9 -1. + <_> + 3 2 2 9 3. + <_> + + <_> + 14 6 6 13 -1. + <_> + 14 6 3 13 2. + <_> + + <_> + 3 6 14 8 -1. + <_> + 3 6 7 4 2. + <_> + 10 10 7 4 2. + <_> + + <_> + 16 0 4 11 -1. + <_> + 16 0 2 11 2. + <_> + + <_> + 3 4 12 12 -1. + <_> + 3 4 6 6 2. + <_> + 9 10 6 6 2. + <_> + + <_> + 11 4 5 3 -1. + <_> + 11 5 5 1 3. + <_> + + <_> + 4 11 4 2 -1. + <_> + 4 12 4 1 2. + <_> + + <_> + 10 7 2 2 -1. + <_> + 10 7 1 2 2. + <_> + + <_> + 8 7 2 2 -1. + <_> + 9 7 1 2 2. + <_> + + <_> + 9 17 3 2 -1. + <_> + 10 17 1 2 3. + <_> + + <_> + 5 6 3 3 -1. + <_> + 5 7 3 1 3. + <_> + + <_> + 10 0 3 3 -1. + <_> + 11 0 1 3 3. + <_> + + <_> + 5 6 6 2 -1. + <_> + 5 6 3 1 2. + <_> + 8 7 3 1 2. + <_> + + <_> + 12 16 4 3 -1. + <_> + 12 17 4 1 3. + <_> + + <_> + 3 12 3 2 -1. + <_> + 3 13 3 1 2. + <_> + + <_> + 9 12 3 2 -1. + <_> + 9 13 3 1 2. + <_> + + <_> + 1 11 16 4 -1. + <_> + 1 11 8 2 2. + <_> + 9 13 8 2 2. + <_> + + <_> + 12 4 3 3 -1. + <_> + 12 5 3 1 3. + <_> + + <_> + 4 4 5 3 -1. + <_> + 4 5 5 1 3. + <_> + + <_> + 12 16 4 3 -1. + <_> + 12 17 4 1 3. + <_> + + <_> + 5 4 3 3 -1. + <_> + 5 5 3 1 3. + <_> + + <_> + 9 0 2 2 -1. + <_> + 9 1 2 1 2. + <_> + + <_> + 8 9 4 2 -1. + <_> + 8 10 4 1 2. + <_> + + <_> + 8 8 4 3 -1. + <_> + 8 9 4 1 3. + <_> + + <_> + 0 13 6 3 -1. + <_> + 2 13 2 3 3. + <_> + + <_> + 16 14 3 2 -1. + <_> + 16 15 3 1 2. + <_> + + <_> + 1 18 18 2 -1. + <_> + 7 18 6 2 3. + <_> + + <_> + 16 14 3 2 -1. + <_> + 16 15 3 1 2. + <_> + + <_> + 1 14 3 2 -1. + <_> + 1 15 3 1 2. + <_> + + <_> + 7 14 6 3 -1. + <_> + 7 15 6 1 3. + <_> + + <_> + 5 14 8 3 -1. + <_> + 5 15 8 1 3. + <_> + + <_> + 10 6 4 14 -1. + <_> + 10 6 2 14 2. + <_> + + <_> + 6 6 4 14 -1. + <_> + 8 6 2 14 2. + <_> + + <_> + 13 5 2 3 -1. + <_> + 13 6 2 1 3. + <_> + + <_> + 7 16 6 1 -1. + <_> + 9 16 2 1 3. + <_> + + <_> + 9 12 3 3 -1. + <_> + 9 13 3 1 3. + <_> + + <_> + 7 0 3 3 -1. + <_> + 8 0 1 3 3. + <_> + + <_> + 4 0 16 18 -1. + <_> + 4 9 16 9 2. + <_> + + <_> + 1 1 16 14 -1. + <_> + 1 8 16 7 2. + <_> + + <_> + 3 9 15 4 -1. + <_> + 8 9 5 4 3. + <_> + + <_> + 6 12 7 3 -1. + <_> + 6 13 7 1 3. + <_> + + <_> + 14 15 2 3 -1. + <_> + 14 16 2 1 3. + <_> + + <_> + 2 3 16 14 -1. + <_> + 2 3 8 7 2. + <_> + 10 10 8 7 2. + <_> + + <_> + 16 2 4 18 -1. + <_> + 18 2 2 9 2. + <_> + 16 11 2 9 2. + <_> + + <_> + 4 15 2 3 -1. + <_> + 4 16 2 1 3. + <_> + + <_> + 16 2 4 18 -1. + <_> + 18 2 2 9 2. + <_> + 16 11 2 9 2. + <_> + + <_> + 1 1 8 3 -1. + <_> + 1 2 8 1 3. + <_> + + <_> + 8 11 4 3 -1. + <_> + 8 12 4 1 3. + <_> + + <_> + 5 11 5 9 -1. + <_> + 5 14 5 3 3. + <_> + + <_> + 16 0 4 11 -1. + <_> + 16 0 2 11 2. + <_> + + <_> + 7 0 6 1 -1. + <_> + 9 0 2 1 3. + <_> + + <_> + 16 3 3 7 -1. + <_> + 17 3 1 7 3. + <_> + + <_> + 1 3 3 7 -1. + <_> + 2 3 1 7 3. + <_> + + <_> + 7 8 6 12 -1. + <_> + 7 12 6 4 3. + <_> + + <_> + 0 0 4 11 -1. + <_> + 2 0 2 11 2. + <_> + + <_> + 14 0 6 20 -1. + <_> + 14 0 3 20 2. + <_> + + <_> + 0 3 1 2 -1. + <_> + 0 4 1 1 2. + <_> + + <_> + 5 5 10 8 -1. + <_> + 10 5 5 4 2. + <_> + 5 9 5 4 2. + <_> + + <_> + 4 7 12 4 -1. + <_> + 4 7 6 2 2. + <_> + 10 9 6 2 2. + <_> + + <_> + 2 1 6 4 -1. + <_> + 5 1 3 4 2. + <_> + + <_> + 9 7 6 4 -1. + <_> + 12 7 3 2 2. + <_> + 9 9 3 2 2. + <_> + + <_> + 5 6 2 6 -1. + <_> + 5 9 2 3 2. + <_> + + <_> + 9 16 6 4 -1. + <_> + 12 16 3 2 2. + <_> + 9 18 3 2 2. + <_> + + <_> + 9 4 2 12 -1. + <_> + 9 10 2 6 2. + <_> + + <_> + 7 1 6 18 -1. + <_> + 9 1 2 18 3. + <_> + + <_> + 4 12 12 2 -1. + <_> + 8 12 4 2 3. + <_> + + <_> + 8 8 6 2 -1. + <_> + 8 9 6 1 2. + <_> + + <_> + 8 0 3 6 -1. + <_> + 9 0 1 6 3. + <_> + + <_> + 11 18 3 2 -1. + <_> + 11 19 3 1 2. + <_> + + <_> + 1 1 17 4 -1. + <_> + 1 3 17 2 2. + <_> + + <_> + 11 8 4 12 -1. + <_> + 11 8 2 12 2. + <_> + + <_> + 8 14 4 3 -1. + <_> + 8 15 4 1 3. + <_> + + <_> + 12 3 2 17 -1. + <_> + 12 3 1 17 2. + <_> + + <_> + 4 7 6 1 -1. + <_> + 6 7 2 1 3. + <_> + + <_> + 18 3 2 3 -1. + <_> + 18 4 2 1 3. + <_> + + <_> + 8 4 3 4 -1. + <_> + 8 6 3 2 2. + <_> + + <_> + 4 5 12 10 -1. + <_> + 4 10 12 5 2. + <_> + + <_> + 5 18 4 2 -1. + <_> + 7 18 2 2 2. + <_> + + <_> + 17 2 3 6 -1. + <_> + 17 4 3 2 3. + <_> + + <_> + 7 7 6 6 -1. + <_> + 9 7 2 6 3. + <_> + + <_> + 17 2 3 6 -1. + <_> + 17 4 3 2 3. + <_> + + <_> + 8 0 3 4 -1. + <_> + 9 0 1 4 3. + <_> + + <_> + 9 14 2 3 -1. + <_> + 9 15 2 1 3. + <_> + + <_> + 0 12 6 3 -1. + <_> + 0 13 6 1 3. + <_> + + <_> + 8 14 4 3 -1. + <_> + 8 15 4 1 3. + <_> + + <_> + 3 12 2 3 -1. + <_> + 3 13 2 1 3. + <_> + + <_> + 5 6 12 7 -1. + <_> + 9 6 4 7 3. + <_> + + <_> + 0 2 3 6 -1. + <_> + 0 4 3 2 3. + <_> + + <_> + 14 6 1 3 -1. + <_> + 14 7 1 1 3. + <_> + + <_> + 2 0 3 14 -1. + <_> + 3 0 1 14 3. + <_> + + <_> + 12 14 5 6 -1. + <_> + 12 16 5 2 3. + <_> + + <_> + 4 14 5 6 -1. + <_> + 4 16 5 2 3. + <_> + + <_> + 11 10 2 2 -1. + <_> + 12 10 1 1 2. + <_> + 11 11 1 1 2. + <_> + + <_> + 5 0 3 14 -1. + <_> + 6 0 1 14 3. + <_> + + <_> + 10 15 2 3 -1. + <_> + 10 16 2 1 3. + <_> + + <_> + 0 2 2 3 -1. + <_> + 0 3 2 1 3. + <_> + + <_> + 5 11 12 6 -1. + <_> + 5 14 12 3 2. + <_> + + <_> + 6 11 3 9 -1. + <_> + 6 14 3 3 3. + <_> + + <_> + 11 10 2 2 -1. + <_> + 12 10 1 1 2. + <_> + 11 11 1 1 2. + <_> + + <_> + 5 6 1 3 -1. + <_> + 5 7 1 1 3. + <_> + + <_> + 4 9 13 3 -1. + <_> + 4 10 13 1 3. + <_> + + <_> + 1 7 15 6 -1. + <_> + 6 7 5 6 3. + <_> + + <_> + 4 5 12 6 -1. + <_> + 8 5 4 6 3. + <_> + + <_> + 8 10 4 3 -1. + <_> + 8 11 4 1 3. + <_> + + <_> + 15 14 1 3 -1. + <_> + 15 15 1 1 3. + <_> + + <_> + 1 11 5 3 -1. + <_> + 1 12 5 1 3. + <_> + + <_> + 7 1 7 12 -1. + <_> + 7 7 7 6 2. + <_> + + <_> + 0 1 6 10 -1. + <_> + 0 1 3 5 2. + <_> + 3 6 3 5 2. + <_> + + <_> + 16 1 4 3 -1. + <_> + 16 2 4 1 3. + <_> + + <_> + 5 5 2 3 -1. + <_> + 5 6 2 1 3. + <_> + + <_> + 12 2 3 5 -1. + <_> + 13 2 1 5 3. + <_> + + <_> + 0 3 4 6 -1. + <_> + 0 5 4 2 3. + <_> + + <_> + 8 12 4 2 -1. + <_> + 8 13 4 1 2. + <_> + + <_> + 8 18 3 1 -1. + <_> + 9 18 1 1 3. + <_> + + <_> + 11 10 2 2 -1. + <_> + 12 10 1 1 2. + <_> + 11 11 1 1 2. + <_> + + <_> + 7 10 2 2 -1. + <_> + 7 10 1 1 2. + <_> + 8 11 1 1 2. + <_> + + <_> + 11 11 4 4 -1. + <_> + 11 13 4 2 2. + <_> + + <_> + 8 12 3 8 -1. + <_> + 9 12 1 8 3. + <_> + + <_> + 13 0 6 3 -1. + <_> + 13 1 6 1 3. + <_> + + <_> + 8 8 3 4 -1. + <_> + 9 8 1 4 3. + <_> + + <_> + 5 7 10 10 -1. + <_> + 10 7 5 5 2. + <_> + 5 12 5 5 2. + <_> + + <_> + 3 18 8 2 -1. + <_> + 3 18 4 1 2. + <_> + 7 19 4 1 2. + <_> + + <_> + 10 2 6 8 -1. + <_> + 12 2 2 8 3. + <_> + + <_> + 4 2 6 8 -1. + <_> + 6 2 2 8 3. + <_> + + <_> + 11 0 3 7 -1. + <_> + 12 0 1 7 3. + <_> + + <_> + 7 11 2 1 -1. + <_> + 8 11 1 1 2. + <_> + + <_> + 15 14 1 3 -1. + <_> + 15 15 1 1 3. + <_> + + <_> + 7 15 2 2 -1. + <_> + 7 15 1 1 2. + <_> + 8 16 1 1 2. + <_> + + <_> + 15 14 1 3 -1. + <_> + 15 15 1 1 3. + <_> + + <_> + 6 0 3 7 -1. + <_> + 7 0 1 7 3. + <_> + + <_> + 18 1 2 7 -1. + <_> + 18 1 1 7 2. + <_> + + <_> + 2 0 8 20 -1. + <_> + 2 10 8 10 2. + <_> + + <_> + 3 0 15 6 -1. + <_> + 3 2 15 2 3. + <_> + + <_> + 4 3 12 2 -1. + <_> + 4 4 12 1 2. + <_> + + <_> + 16 0 4 5 -1. + <_> + 16 0 2 5 2. + <_> + + <_> + 7 0 3 4 -1. + <_> + 8 0 1 4 3. + <_> + + <_> + 16 0 4 5 -1. + <_> + 16 0 2 5 2. + <_> + + <_> + 1 7 6 13 -1. + <_> + 3 7 2 13 3. + <_> + + <_> + 16 0 4 5 -1. + <_> + 16 0 2 5 2. + <_> + + <_> + 0 0 4 5 -1. + <_> + 2 0 2 5 2. + <_> + + <_> + 14 12 3 6 -1. + <_> + 14 14 3 2 3. + <_> + + <_> + 3 12 3 6 -1. + <_> + 3 14 3 2 3. + <_> + + <_> + 16 1 4 3 -1. + <_> + 16 2 4 1 3. + <_> + + <_> + 8 7 2 10 -1. + <_> + 8 7 1 5 2. + <_> + 9 12 1 5 2. + <_> + + <_> + 11 11 4 4 -1. + <_> + 11 13 4 2 2. + <_> + + <_> + 0 1 4 3 -1. + <_> + 0 2 4 1 3. + <_> + + <_> + 13 4 1 3 -1. + <_> + 13 5 1 1 3. + <_> + + <_> + 7 15 3 5 -1. + <_> + 8 15 1 5 3. + <_> + + <_> + 9 7 3 5 -1. + <_> + 10 7 1 5 3. + <_> + + <_> + 8 7 3 5 -1. + <_> + 9 7 1 5 3. + <_> + + <_> + 10 6 4 14 -1. + <_> + 10 6 2 14 2. + <_> + + <_> + 0 5 5 6 -1. + <_> + 0 7 5 2 3. + <_> + + <_> + 9 5 6 4 -1. + <_> + 9 5 3 4 2. + <_> + + <_> + 0 0 18 10 -1. + <_> + 6 0 6 10 3. + <_> + + <_> + 10 6 4 14 -1. + <_> + 10 6 2 14 2. + <_> + + <_> + 6 6 4 14 -1. + <_> + 8 6 2 14 2. + <_> + + <_> + 13 4 1 3 -1. + <_> + 13 5 1 1 3. + <_> + + <_> + 5 1 2 3 -1. + <_> + 6 1 1 3 2. + <_> + + <_> + 18 1 2 18 -1. + <_> + 19 1 1 9 2. + <_> + 18 10 1 9 2. + <_> + + <_> + 2 1 4 3 -1. + <_> + 2 2 4 1 3. + <_> + + <_> + 18 1 2 18 -1. + <_> + 19 1 1 9 2. + <_> + 18 10 1 9 2. + <_> + + <_> + 1 14 4 6 -1. + <_> + 1 14 2 3 2. + <_> + 3 17 2 3 2. + <_> + + <_> + 10 11 7 6 -1. + <_> + 10 13 7 2 3. + <_> + + <_> + 0 10 6 10 -1. + <_> + 0 10 3 5 2. + <_> + 3 15 3 5 2. + <_> + + <_> + 11 0 3 4 -1. + <_> + 12 0 1 4 3. + <_> + + <_> + 5 10 5 6 -1. + <_> + 5 13 5 3 2. + <_> + + <_> + 14 6 1 8 -1. + <_> + 14 10 1 4 2. + <_> + + <_> + 1 7 18 6 -1. + <_> + 1 7 9 3 2. + <_> + 10 10 9 3 2. + <_> + + <_> + 9 7 2 2 -1. + <_> + 9 7 1 2 2. + <_> + + <_> + 5 9 4 5 -1. + <_> + 7 9 2 5 2. + <_> + + <_> + 7 6 6 3 -1. + <_> + 9 6 2 3 3. + <_> + + <_> + 1 0 18 4 -1. + <_> + 7 0 6 4 3. + <_> + + <_> + 7 15 2 4 -1. + <_> + 7 17 2 2 2. + <_> + + <_> + 1 0 19 9 -1. + <_> + 1 3 19 3 3. + <_> + + <_> + 3 7 3 6 -1. + <_> + 3 9 3 2 3. + <_> + + <_> + 13 7 4 4 -1. + <_> + 15 7 2 2 2. + <_> + 13 9 2 2 2. + <_> + + <_> + 3 7 4 4 -1. + <_> + 3 7 2 2 2. + <_> + 5 9 2 2 2. + <_> + + <_> + 9 6 10 8 -1. + <_> + 9 10 10 4 2. + <_> + + <_> + 3 8 14 12 -1. + <_> + 3 14 14 6 2. + <_> + + <_> + 6 5 10 12 -1. + <_> + 11 5 5 6 2. + <_> + 6 11 5 6 2. + <_> + + <_> + 9 11 2 3 -1. + <_> + 9 12 2 1 3. + <_> + + <_> + 9 5 6 5 -1. + <_> + 9 5 3 5 2. + <_> + + <_> + 9 4 2 4 -1. + <_> + 9 6 2 2 2. + <_> + + <_> + 9 5 6 5 -1. + <_> + 9 5 3 5 2. + <_> + + <_> + 5 5 6 5 -1. + <_> + 8 5 3 5 2. + <_> + + <_> + 11 2 6 1 -1. + <_> + 13 2 2 1 3. + <_> + + <_> + 3 2 6 1 -1. + <_> + 5 2 2 1 3. + <_> + + <_> + 13 5 2 3 -1. + <_> + 13 6 2 1 3. + <_> + + <_> + 0 10 1 4 -1. + <_> + 0 12 1 2 2. + <_> + + <_> + 13 5 2 3 -1. + <_> + 13 6 2 1 3. + <_> + + <_> + 8 18 3 2 -1. + <_> + 9 18 1 2 3. + <_> + + <_> + 6 15 9 2 -1. + <_> + 6 16 9 1 2. + <_> + + <_> + 8 14 4 3 -1. + <_> + 8 15 4 1 3. + <_> + + <_> + 18 4 2 4 -1. + <_> + 18 6 2 2 2. + <_> + + <_> + 5 5 2 3 -1. + <_> + 5 6 2 1 3. + <_> + + <_> + 15 16 3 2 -1. + <_> + 15 17 3 1 2. + <_> + + <_> + 0 0 3 9 -1. + <_> + 0 3 3 3 3. + <_> + + <_> + 9 7 3 3 -1. + <_> + 9 8 3 1 3. + <_> + + <_> + 8 7 3 3 -1. + <_> + 8 8 3 1 3. + <_> + + <_> + 9 5 2 6 -1. + <_> + 9 5 1 6 2. + <_> + + <_> + 8 6 3 4 -1. + <_> + 9 6 1 4 3. + <_> + + <_> + 7 6 8 12 -1. + <_> + 11 6 4 6 2. + <_> + 7 12 4 6 2. + <_> + + <_> + 5 6 8 12 -1. + <_> + 5 6 4 6 2. + <_> + 9 12 4 6 2. + <_> + + <_> + 12 4 3 3 -1. + <_> + 12 5 3 1 3. + <_> + + <_> + 2 16 3 2 -1. + <_> + 2 17 3 1 2. + <_> + + <_> + 12 4 3 3 -1. + <_> + 12 5 3 1 3. + <_> + + <_> + 2 12 6 6 -1. + <_> + 2 14 6 2 3. + <_> + + <_> + 7 13 6 3 -1. + <_> + 7 14 6 1 3. + <_> + + <_> + 6 14 6 3 -1. + <_> + 6 15 6 1 3. + <_> + + <_> + 14 15 5 3 -1. + <_> + 14 16 5 1 3. + <_> + + <_> + 5 4 3 3 -1. + <_> + 5 5 3 1 3. + <_> + + <_> + 14 15 5 3 -1. + <_> + 14 16 5 1 3. + <_> + + <_> + 5 3 6 2 -1. + <_> + 7 3 2 2 3. + <_> + + <_> + 8 15 4 3 -1. + <_> + 8 16 4 1 3. + <_> + + <_> + 1 15 5 3 -1. + <_> + 1 16 5 1 3. + <_> + + <_> + 8 13 4 6 -1. + <_> + 10 13 2 3 2. + <_> + 8 16 2 3 2. + <_> + + <_> + 7 8 3 3 -1. + <_> + 8 8 1 3 3. + <_> + + <_> + 12 0 5 4 -1. + <_> + 12 2 5 2 2. + <_> + + <_> + 0 2 20 2 -1. + <_> + 0 2 10 1 2. + <_> + 10 3 10 1 2. + <_> + + <_> + 1 0 18 4 -1. + <_> + 7 0 6 4 3. + <_> + + <_> + 4 3 6 1 -1. + <_> + 6 3 2 1 3. + <_> + + <_> + 4 18 13 2 -1. + <_> + 4 19 13 1 2. + <_> + + <_> + 2 10 3 6 -1. + <_> + 2 12 3 2 3. + <_> + + <_> + 14 12 6 8 -1. + <_> + 17 12 3 4 2. + <_> + 14 16 3 4 2. + <_> + + <_> + 4 13 10 6 -1. + <_> + 4 13 5 3 2. + <_> + 9 16 5 3 2. + <_> + + <_> + 14 12 1 2 -1. + <_> + 14 13 1 1 2. + <_> + + <_> + 8 13 4 3 -1. + <_> + 8 14 4 1 3. + <_> + + <_> + 14 12 2 2 -1. + <_> + 14 13 2 1 2. + <_> + + <_> + 4 12 2 2 -1. + <_> + 4 13 2 1 2. + <_> + + <_> + 8 12 9 2 -1. + <_> + 8 13 9 1 2. + <_> + + <_> + 9 14 2 3 -1. + <_> + 9 15 2 1 3. + <_> + + <_> + 11 10 3 6 -1. + <_> + 11 13 3 3 2. + <_> + + <_> + 5 6 9 12 -1. + <_> + 5 12 9 6 2. + <_> + + <_> + 11 10 3 6 -1. + <_> + 11 13 3 3 2. + <_> + + <_> + 6 10 3 6 -1. + <_> + 6 13 3 3 2. + <_> + + <_> + 5 4 11 3 -1. + <_> + 5 5 11 1 3. + <_> + + <_> + 7 1 5 10 -1. + <_> + 7 6 5 5 2. + <_> + + <_> + 2 8 18 2 -1. + <_> + 2 9 18 1 2. + <_> + + <_> + 7 17 5 3 -1. + <_> + 7 18 5 1 3. + <_> + + <_> + 5 9 12 1 -1. + <_> + 9 9 4 1 3. + <_> + + <_> + 0 14 6 6 -1. + <_> + 0 14 3 3 2. + <_> + 3 17 3 3 2. + <_> + + <_> + 5 9 12 1 -1. + <_> + 9 9 4 1 3. + <_> + + <_> + 3 9 12 1 -1. + <_> + 7 9 4 1 3. + <_> + + <_> + 14 10 6 7 -1. + <_> + 14 10 3 7 2. + <_> + + <_> + 1 0 16 2 -1. + <_> + 1 1 16 1 2. + <_> + + <_> + 10 9 10 9 -1. + <_> + 10 12 10 3 3. + <_> + + <_> + 0 1 10 2 -1. + <_> + 5 1 5 2 2. + <_> + + <_> + 17 3 2 3 -1. + <_> + 17 4 2 1 3. + <_> + + <_> + 1 3 2 3 -1. + <_> + 1 4 2 1 3. + <_> + + <_> + 9 7 3 6 -1. + <_> + 10 7 1 6 3. + <_> + + <_> + 6 5 4 3 -1. + <_> + 8 5 2 3 2. + <_> + + <_> + 7 5 6 6 -1. + <_> + 9 5 2 6 3. + <_> + + <_> + 3 4 12 12 -1. + <_> + 3 4 6 6 2. + <_> + 9 10 6 6 2. + <_> + + <_> + 9 2 6 15 -1. + <_> + 11 2 2 15 3. + <_> + + <_> + 2 2 6 17 -1. + <_> + 4 2 2 17 3. + <_> + + <_> + 14 10 6 7 -1. + <_> + 14 10 3 7 2. + <_> + + <_> + 0 10 6 7 -1. + <_> + 3 10 3 7 2. + <_> + + <_> + 9 2 6 15 -1. + <_> + 11 2 2 15 3. + <_> + + <_> + 5 2 6 15 -1. + <_> + 7 2 2 15 3. + <_> + + <_> + 17 9 3 6 -1. + <_> + 17 11 3 2 3. + <_> + + <_> + 6 7 6 6 -1. + <_> + 8 7 2 6 3. + <_> + + <_> + 1 10 18 6 -1. + <_> + 10 10 9 3 2. + <_> + 1 13 9 3 2. + <_> + + <_> + 0 9 10 9 -1. + <_> + 0 12 10 3 3. + <_> + + <_> + 8 15 4 3 -1. + <_> + 8 16 4 1 3. + <_> + + <_> + 5 12 3 4 -1. + <_> + 5 14 3 2 2. + <_> + + <_> + 3 3 16 12 -1. + <_> + 3 9 16 6 2. + <_> + + <_> + 1 1 12 12 -1. + <_> + 1 1 6 6 2. + <_> + 7 7 6 6 2. + <_> + + <_> + 10 4 2 4 -1. + <_> + 11 4 1 2 2. + <_> + 10 6 1 2 2. + <_> + + <_> + 0 9 10 2 -1. + <_> + 0 9 5 1 2. + <_> + 5 10 5 1 2. + <_> + + <_> + 9 11 3 3 -1. + <_> + 9 12 3 1 3. + <_> + + <_> + 3 12 9 2 -1. + <_> + 3 13 9 1 2. + <_> + + <_> + 9 9 2 2 -1. + <_> + 9 10 2 1 2. + <_> + + <_> + 3 4 13 6 -1. + <_> + 3 6 13 2 3. + <_> + + <_> + 9 7 6 4 -1. + <_> + 12 7 3 2 2. + <_> + 9 9 3 2 2. + <_> + + <_> + 1 0 6 8 -1. + <_> + 4 0 3 8 2. + <_> + + <_> + 9 5 2 12 -1. + <_> + 9 11 2 6 2. + <_> + + <_> + 4 4 3 10 -1. + <_> + 4 9 3 5 2. + <_> + + <_> + 6 17 8 3 -1. + <_> + 6 18 8 1 3. + <_> + + <_> + 0 5 10 6 -1. + <_> + 0 7 10 2 3. + <_> + + <_> + 13 2 3 2 -1. + <_> + 13 3 3 1 2. + <_> + + <_> + 7 5 4 5 -1. + <_> + 9 5 2 5 2. + <_> + + <_> + 12 14 3 6 -1. + <_> + 12 16 3 2 3. + <_> + + <_> + 1 11 8 2 -1. + <_> + 1 12 8 1 2. + <_> + + <_> + 7 13 6 3 -1. + <_> + 7 14 6 1 3. + <_> + + <_> + 0 5 3 6 -1. + <_> + 0 7 3 2 3. + <_> + + <_> + 13 2 3 2 -1. + <_> + 13 3 3 1 2. + <_> + + <_> + 4 14 4 6 -1. + <_> + 4 14 2 3 2. + <_> + 6 17 2 3 2. + <_> + + <_> + 13 2 3 2 -1. + <_> + 13 3 3 1 2. + <_> + + <_> + 8 2 4 12 -1. + <_> + 8 6 4 4 3. + <_> + + <_> + 14 0 6 8 -1. + <_> + 17 0 3 4 2. + <_> + 14 4 3 4 2. + <_> + + <_> + 7 17 3 2 -1. + <_> + 8 17 1 2 3. + <_> + + <_> + 8 12 4 2 -1. + <_> + 8 13 4 1 2. + <_> + + <_> + 6 0 8 12 -1. + <_> + 6 0 4 6 2. + <_> + 10 6 4 6 2. + <_> + + <_> + 14 0 2 10 -1. + <_> + 15 0 1 5 2. + <_> + 14 5 1 5 2. + <_> + + <_> + 5 3 8 6 -1. + <_> + 5 3 4 3 2. + <_> + 9 6 4 3 2. + <_> + + <_> + 14 0 6 10 -1. + <_> + 17 0 3 5 2. + <_> + 14 5 3 5 2. + <_> + + <_> + 9 14 1 2 -1. + <_> + 9 15 1 1 2. + <_> + + <_> + 15 10 4 3 -1. + <_> + 15 11 4 1 3. + <_> + + <_> + 8 14 2 3 -1. + <_> + 8 15 2 1 3. + <_> + + <_> + 3 13 14 4 -1. + <_> + 10 13 7 2 2. + <_> + 3 15 7 2 2. + <_> + + <_> + 1 10 4 3 -1. + <_> + 1 11 4 1 3. + <_> + + <_> + 9 11 6 1 -1. + <_> + 11 11 2 1 3. + <_> + + <_> + 5 11 6 1 -1. + <_> + 7 11 2 1 3. + <_> + + <_> + 3 5 16 15 -1. + <_> + 3 10 16 5 3. + <_> + + <_> + 6 12 4 2 -1. + <_> + 8 12 2 2 2. + <_> + + <_> + 4 4 12 10 -1. + <_> + 10 4 6 5 2. + <_> + 4 9 6 5 2. + <_> + + <_> + 8 6 3 4 -1. + <_> + 9 6 1 4 3. + <_> + + <_> + 8 12 4 8 -1. + <_> + 10 12 2 4 2. + <_> + 8 16 2 4 2. + <_> + + <_> + 8 14 4 3 -1. + <_> + 8 15 4 1 3. + <_> + + <_> + 12 2 3 2 -1. + <_> + 13 2 1 2 3. + <_> + + <_> + 8 15 3 2 -1. + <_> + 8 16 3 1 2. + <_> + + <_> + 6 0 9 14 -1. + <_> + 9 0 3 14 3. + <_> + + <_> + 9 6 2 3 -1. + <_> + 10 6 1 3 2. + <_> + + <_> + 10 8 2 3 -1. + <_> + 10 9 2 1 3. + <_> + + <_> + 0 9 4 6 -1. + <_> + 0 11 4 2 3. + <_> + + <_> + 6 0 8 2 -1. + <_> + 6 1 8 1 2. + <_> + + <_> + 6 14 7 3 -1. + <_> + 6 15 7 1 3. + <_> + + <_> + 8 10 8 9 -1. + <_> + 8 13 8 3 3. + <_> + + <_> + 5 2 3 2 -1. + <_> + 6 2 1 2 3. + <_> + + <_> + 14 1 6 8 -1. + <_> + 17 1 3 4 2. + <_> + 14 5 3 4 2. + <_> + + <_> + 0 1 6 8 -1. + <_> + 0 1 3 4 2. + <_> + 3 5 3 4 2. + <_> + + <_> + 1 2 18 6 -1. + <_> + 10 2 9 3 2. + <_> + 1 5 9 3 2. + <_> + + <_> + 9 3 2 1 -1. + <_> + 10 3 1 1 2. + <_> + + <_> + 13 2 4 6 -1. + <_> + 15 2 2 3 2. + <_> + 13 5 2 3 2. + <_> + + <_> + 5 4 3 3 -1. + <_> + 5 5 3 1 3. + <_> + + <_> + 13 5 1 3 -1. + <_> + 13 6 1 1 3. + <_> + + <_> + 2 16 5 3 -1. + <_> + 2 17 5 1 3. + <_> + + <_> + 13 2 4 6 -1. + <_> + 15 2 2 3 2. + <_> + 13 5 2 3 2. + <_> + + <_> + 3 2 4 6 -1. + <_> + 3 2 2 3 2. + <_> + 5 5 2 3 2. + <_> + + <_> + 13 5 1 2 -1. + <_> + 13 6 1 1 2. + <_> + + <_> + 5 5 2 2 -1. + <_> + 5 6 2 1 2. + <_> + + <_> + 13 9 2 2 -1. + <_> + 13 9 1 2 2. + <_> + + <_> + 5 9 2 2 -1. + <_> + 6 9 1 2 2. + <_> + + <_> + 13 17 3 2 -1. + <_> + 13 18 3 1 2. + <_> + + <_> + 6 16 4 4 -1. + <_> + 6 16 2 2 2. + <_> + 8 18 2 2 2. + <_> + + <_> + 9 16 2 3 -1. + <_> + 9 17 2 1 3. + <_> + + <_> + 0 13 9 6 -1. + <_> + 0 15 9 2 3. + <_> + + <_> + 9 14 2 6 -1. + <_> + 9 17 2 3 2. + <_> + + <_> + 9 15 2 3 -1. + <_> + 9 16 2 1 3. + <_> + + <_> + 1 10 18 6 -1. + <_> + 1 12 18 2 3. + <_> + + <_> + 8 11 4 2 -1. + <_> + 8 12 4 1 2. + <_> + + <_> + 7 9 6 2 -1. + <_> + 7 10 6 1 2. + <_> + + <_> + 8 8 2 3 -1. + <_> + 8 9 2 1 3. + <_> + + <_> + 17 5 3 4 -1. + <_> + 18 5 1 4 3. + <_> + + <_> + 1 19 18 1 -1. + <_> + 7 19 6 1 3. + <_> + + <_> + 9 0 3 2 -1. + <_> + 10 0 1 2 3. + <_> + + <_> + 1 8 1 6 -1. + <_> + 1 10 1 2 3. + <_> + + <_> + 12 17 8 3 -1. + <_> + 12 17 4 3 2. + <_> + + <_> + 0 5 3 4 -1. + <_> + 1 5 1 4 3. + <_> + + <_> + 9 7 2 3 -1. + <_> + 9 8 2 1 3. + <_> + + <_> + 7 11 2 2 -1. + <_> + 7 11 1 1 2. + <_> + 8 12 1 1 2. + <_> + + <_> + 11 3 2 5 -1. + <_> + 11 3 1 5 2. + <_> + + <_> + 7 3 2 5 -1. + <_> + 8 3 1 5 2. + <_> + + <_> + 15 13 2 3 -1. + <_> + 15 14 2 1 3. + <_> + + <_> + 5 6 2 3 -1. + <_> + 5 7 2 1 3. + <_> + + <_> + 4 19 15 1 -1. + <_> + 9 19 5 1 3. + <_> + + <_> + 1 19 15 1 -1. + <_> + 6 19 5 1 3. + <_> + + <_> + 15 13 2 3 -1. + <_> + 15 14 2 1 3. + <_> + + <_> + 5 0 4 15 -1. + <_> + 7 0 2 15 2. + <_> + + <_> + 9 6 2 5 -1. + <_> + 9 6 1 5 2. + <_> + + <_> + 9 5 2 7 -1. + <_> + 10 5 1 7 2. + <_> + + <_> + 16 11 3 3 -1. + <_> + 16 12 3 1 3. + <_> + + <_> + 1 11 3 3 -1. + <_> + 1 12 3 1 3. + <_> + + <_> + 6 6 8 3 -1. + <_> + 6 7 8 1 3. + <_> + + <_> + 0 15 6 2 -1. + <_> + 0 16 6 1 2. + <_> + + <_> + 1 0 18 6 -1. + <_> + 7 0 6 6 3. + <_> + + <_> + 6 0 3 4 -1. + <_> + 7 0 1 4 3. + <_> + + <_> + 14 10 4 10 -1. + <_> + 16 10 2 5 2. + <_> + 14 15 2 5 2. + <_> + + <_> + 3 2 3 2 -1. + <_> + 4 2 1 2 3. + <_> + + <_> + 11 2 2 2 -1. + <_> + 11 3 2 1 2. + <_> + + <_> + 2 10 4 10 -1. + <_> + 2 10 2 5 2. + <_> + 4 15 2 5 2. + <_> + + <_> + 0 13 20 6 -1. + <_> + 10 13 10 3 2. + <_> + 0 16 10 3 2. + <_> + + <_> + 0 5 2 15 -1. + <_> + 1 5 1 15 2. + <_> + + <_> + 1 7 18 4 -1. + <_> + 10 7 9 2 2. + <_> + 1 9 9 2 2. + <_> + + <_> + 0 0 2 17 -1. + <_> + 1 0 1 17 2. + <_> + + <_> + 2 6 16 6 -1. + <_> + 10 6 8 3 2. + <_> + 2 9 8 3 2. + <_> + + <_> + 8 14 1 3 -1. + <_> + 8 15 1 1 3. + <_> + + <_> + 8 15 4 2 -1. + <_> + 8 16 4 1 2. + <_> + + <_> + 5 2 8 2 -1. + <_> + 5 2 4 1 2. + <_> + 9 3 4 1 2. + <_> + + <_> + 6 11 8 6 -1. + <_> + 6 14 8 3 2. + <_> + + <_> + 9 13 2 2 -1. + <_> + 9 14 2 1 2. + <_> + + <_> + 18 4 2 6 -1. + <_> + 18 6 2 2 3. + <_> + + <_> + 9 12 2 2 -1. + <_> + 9 13 2 1 2. + <_> + + <_> + 18 4 2 6 -1. + <_> + 18 6 2 2 3. + <_> + + <_> + 9 13 1 3 -1. + <_> + 9 14 1 1 3. + <_> + + <_> + 18 4 2 6 -1. + <_> + 18 6 2 2 3. + <_> + + <_> + 0 4 2 6 -1. + <_> + 0 6 2 2 3. + <_> + + <_> + 9 12 3 3 -1. + <_> + 9 13 3 1 3. + <_> + + <_> + 3 13 2 3 -1. + <_> + 3 14 2 1 3. + <_> + + <_> + 13 13 4 3 -1. + <_> + 13 14 4 1 3. + <_> + + <_> + 5 4 3 3 -1. + <_> + 5 5 3 1 3. + <_> + + <_> + 5 2 10 6 -1. + <_> + 5 4 10 2 3. + <_> + + <_> + 3 13 4 3 -1. + <_> + 3 14 4 1 3. + <_> + + <_> + 3 7 15 5 -1. + <_> + 8 7 5 5 3. + <_> + + <_> + 3 7 12 2 -1. + <_> + 7 7 4 2 3. + <_> + + <_> + 10 3 3 9 -1. + <_> + 11 3 1 9 3. + <_> + + <_> + 8 6 4 6 -1. + <_> + 10 6 2 6 2. + <_> + + <_> + 9 7 4 3 -1. + <_> + 9 8 4 1 3. + <_> + + <_> + 0 9 4 9 -1. + <_> + 2 9 2 9 2. + <_> + + <_> + 9 13 3 5 -1. + <_> + 10 13 1 5 3. + <_> + + <_> + 7 7 6 3 -1. + <_> + 9 7 2 3 3. + <_> + + <_> + 9 7 3 5 -1. + <_> + 10 7 1 5 3. + <_> + + <_> + 5 7 8 2 -1. + <_> + 9 7 4 2 2. + <_> + + <_> + 5 9 12 2 -1. + <_> + 9 9 4 2 3. + <_> + + <_> + 5 6 10 3 -1. + <_> + 10 6 5 3 2. + <_> + + <_> + 10 12 3 1 -1. + <_> + 11 12 1 1 3. + <_> + + <_> + 0 1 11 15 -1. + <_> + 0 6 11 5 3. + <_> + + <_> + 1 0 18 6 -1. + <_> + 7 0 6 6 3. + <_> + + <_> + 7 7 6 1 -1. + <_> + 9 7 2 1 3. + <_> + + <_> + 5 16 6 4 -1. + <_> + 5 16 3 2 2. + <_> + 8 18 3 2 2. + <_> + + <_> + 6 5 9 8 -1. + <_> + 6 9 9 4 2. + <_> + + <_> + 5 10 2 6 -1. + <_> + 5 13 2 3 2. + <_> + + <_> + 7 6 8 10 -1. + <_> + 11 6 4 5 2. + <_> + 7 11 4 5 2. + <_> + + <_> + 5 6 8 10 -1. + <_> + 5 6 4 5 2. + <_> + 9 11 4 5 2. + <_> + + <_> + 9 5 2 2 -1. + <_> + 9 6 2 1 2. + <_> + + <_> + 5 12 8 2 -1. + <_> + 5 13 8 1 2. + <_> + + <_> + 10 2 8 2 -1. + <_> + 10 3 8 1 2. + <_> + + <_> + 4 0 2 10 -1. + <_> + 4 0 1 5 2. + <_> + 5 5 1 5 2. + <_> + + <_> + 9 10 2 2 -1. + <_> + 9 11 2 1 2. + <_> + + <_> + 2 8 15 3 -1. + <_> + 2 9 15 1 3. + <_> + + <_> + 8 13 4 3 -1. + <_> + 8 14 4 1 3. + <_> + + <_> + 7 2 3 2 -1. + <_> + 8 2 1 2 3. + <_> + + <_> + 7 13 6 3 -1. + <_> + 7 14 6 1 3. + <_> + + <_> + 9 9 2 2 -1. + <_> + 9 10 2 1 2. + <_> + + <_> + 17 2 3 6 -1. + <_> + 17 4 3 2 3. + <_> + + <_> + 1 5 3 4 -1. + <_> + 2 5 1 4 3. + <_> + + <_> + 14 8 4 6 -1. + <_> + 14 10 4 2 3. + <_> + + <_> + 1 4 3 8 -1. + <_> + 2 4 1 8 3. + <_> + + <_> + 8 13 4 6 -1. + <_> + 8 16 4 3 2. + <_> + + <_> + 3 14 2 2 -1. + <_> + 3 15 2 1 2. + <_> + + <_> + 14 8 4 6 -1. + <_> + 14 10 4 2 3. + <_> + + <_> + 2 8 4 6 -1. + <_> + 2 10 4 2 3. + <_> + + <_> + 10 14 1 6 -1. + <_> + 10 17 1 3 2. + <_> + + <_> + 7 5 3 6 -1. + <_> + 8 5 1 6 3. + <_> + + <_> + 11 2 2 6 -1. + <_> + 12 2 1 3 2. + <_> + 11 5 1 3 2. + <_> + + <_> + 6 6 6 5 -1. + <_> + 8 6 2 5 3. + <_> + + <_> + 17 1 3 6 -1. + <_> + 17 3 3 2 3. + <_> + + <_> + 8 7 3 5 -1. + <_> + 9 7 1 5 3. + <_> + + <_> + 9 18 3 2 -1. + <_> + 10 18 1 2 3. + <_> + + <_> + 8 18 3 2 -1. + <_> + 9 18 1 2 3. + <_> + + <_> + 12 3 5 2 -1. + <_> + 12 4 5 1 2. + <_> + + <_> + 7 1 5 12 -1. + <_> + 7 7 5 6 2. + <_> + + <_> + 1 0 18 4 -1. + <_> + 7 0 6 4 3. + <_> + + <_> + 4 2 2 2 -1. + <_> + 4 3 2 1 2. + <_> + + <_> + 11 14 4 2 -1. + <_> + 13 14 2 1 2. + <_> + 11 15 2 1 2. + <_> + + <_> + 0 2 3 6 -1. + <_> + 0 4 3 2 3. + <_> + + <_> + 9 7 2 3 -1. + <_> + 9 8 2 1 3. + <_> + + <_> + 5 5 1 3 -1. + <_> + 5 6 1 1 3. + <_> + + <_> + 10 10 6 1 -1. + <_> + 10 10 3 1 2. + <_> + + <_> + 4 10 6 1 -1. + <_> + 7 10 3 1 2. + <_> + + <_> + 9 17 3 3 -1. + <_> + 9 18 3 1 3. + <_> + + <_> + 4 14 1 3 -1. + <_> + 4 15 1 1 3. + <_> + + <_> + 12 5 3 3 -1. + <_> + 12 6 3 1 3. + <_> + + <_> + 4 5 12 3 -1. + <_> + 4 6 12 1 3. + <_> + + <_> + 9 8 2 3 -1. + <_> + 9 9 2 1 3. + <_> + + <_> + 4 9 3 3 -1. + <_> + 5 9 1 3 3. + <_> + + <_> + 6 0 9 17 -1. + <_> + 9 0 3 17 3. + <_> + + <_> + 9 12 1 3 -1. + <_> + 9 13 1 1 3. + <_> + + <_> + 9 5 2 15 -1. + <_> + 9 10 2 5 3. + <_> + + <_> + 8 14 2 3 -1. + <_> + 8 15 2 1 3. + <_> + + <_> + 10 14 1 3 -1. + <_> + 10 15 1 1 3. + <_> + + <_> + 7 1 6 5 -1. + <_> + 9 1 2 5 3. + <_> + + <_> + 0 0 20 2 -1. + <_> + 0 0 10 2 2. + <_> + + <_> + 2 13 5 3 -1. + <_> + 2 14 5 1 3. + <_> + + <_> + 9 11 2 3 -1. + <_> + 9 12 2 1 3. + <_> + + <_> + 2 5 9 15 -1. + <_> + 2 10 9 5 3. + <_> + + <_> + 5 0 12 10 -1. + <_> + 11 0 6 5 2. + <_> + 5 5 6 5 2. + <_> + + <_> + 5 1 2 3 -1. + <_> + 6 1 1 3 2. + <_> + + <_> + 10 7 6 1 -1. + <_> + 12 7 2 1 3. + <_> + + <_> + 3 1 2 10 -1. + <_> + 3 1 1 5 2. + <_> + 4 6 1 5 2. + <_> + + <_> + 13 7 2 1 -1. + <_> + 13 7 1 1 2. + <_> + + <_> + 4 13 4 6 -1. + <_> + 4 15 4 2 3. + <_> + + <_> + 13 7 2 1 -1. + <_> + 13 7 1 1 2. + <_> + + <_> + 5 7 2 1 -1. + <_> + 6 7 1 1 2. + <_> + + <_> + 2 12 18 4 -1. + <_> + 11 12 9 2 2. + <_> + 2 14 9 2 2. + <_> + + <_> + 5 7 2 2 -1. + <_> + 5 7 1 1 2. + <_> + 6 8 1 1 2. + <_> + + <_> + 16 3 4 2 -1. + <_> + 16 4 4 1 2. + <_> + + <_> + 0 2 2 18 -1. + <_> + 0 2 1 9 2. + <_> + 1 11 1 9 2. + <_> + + <_> + 1 2 18 4 -1. + <_> + 10 2 9 2 2. + <_> + 1 4 9 2 2. + <_> + + <_> + 9 14 1 3 -1. + <_> + 9 15 1 1 3. + <_> + + <_> + 2 12 18 4 -1. + <_> + 11 12 9 2 2. + <_> + 2 14 9 2 2. + <_> + + <_> + 0 12 18 4 -1. + <_> + 0 12 9 2 2. + <_> + 9 14 9 2 2. + <_> + + <_> + 11 4 5 3 -1. + <_> + 11 5 5 1 3. + <_> + + <_> + 6 4 7 3 -1. + <_> + 6 5 7 1 3. + <_> + + <_> + 13 17 3 3 -1. + <_> + 13 18 3 1 3. + <_> + + <_> + 8 1 3 4 -1. + <_> + 9 1 1 4 3. + <_> + + <_> + 11 4 2 4 -1. + <_> + 11 4 1 4 2. + <_> + + <_> + 0 17 9 3 -1. + <_> + 3 17 3 3 3. + <_> + + <_> + 11 0 2 8 -1. + <_> + 12 0 1 4 2. + <_> + 11 4 1 4 2. + <_> + + <_> + 0 8 6 12 -1. + <_> + 0 8 3 6 2. + <_> + 3 14 3 6 2. + <_> + + <_> + 10 7 4 12 -1. + <_> + 10 13 4 6 2. + <_> + + <_> + 5 3 8 14 -1. + <_> + 5 10 8 7 2. + <_> + + <_> + 14 10 6 1 -1. + <_> + 14 10 3 1 2. + <_> + + <_> + 0 4 10 4 -1. + <_> + 0 6 10 2 2. + <_> + + <_> + 10 0 5 8 -1. + <_> + 10 4 5 4 2. + <_> + + <_> + 8 1 4 8 -1. + <_> + 8 1 2 4 2. + <_> + 10 5 2 4 2. + <_> + + <_> + 9 11 6 1 -1. + <_> + 11 11 2 1 3. + <_> + + <_> + 8 9 3 4 -1. + <_> + 9 9 1 4 3. + <_> + + <_> + 18 4 2 6 -1. + <_> + 18 6 2 2 3. + <_> + + <_> + 8 8 3 4 -1. + <_> + 9 8 1 4 3. + <_> + + <_> + 7 1 13 3 -1. + <_> + 7 2 13 1 3. + <_> + + <_> + 7 13 6 1 -1. + <_> + 9 13 2 1 3. + <_> + + <_> + 12 11 3 6 -1. + <_> + 12 13 3 2 3. + <_> + + <_> + 5 11 6 1 -1. + <_> + 7 11 2 1 3. + <_> + + <_> + 1 4 18 10 -1. + <_> + 10 4 9 5 2. + <_> + 1 9 9 5 2. + <_> + + <_> + 8 6 4 9 -1. + <_> + 8 9 4 3 3. + <_> + + <_> + 8 6 4 3 -1. + <_> + 8 7 4 1 3. + <_> + + <_> + 8 7 3 3 -1. + <_> + 9 7 1 3 3. + <_> + + <_> + 14 15 4 3 -1. + <_> + 14 16 4 1 3. + <_> + + <_> + 5 10 3 10 -1. + <_> + 6 10 1 10 3. + <_> + + <_> + 8 15 4 3 -1. + <_> + 8 16 4 1 3. + <_> + + <_> + 0 8 1 6 -1. + <_> + 0 10 1 2 3. + <_> + + <_> + 10 15 1 3 -1. + <_> + 10 16 1 1 3. + <_> + + <_> + 2 15 4 3 -1. + <_> + 2 16 4 1 3. + <_> + + <_> + 18 3 2 8 -1. + <_> + 19 3 1 4 2. + <_> + 18 7 1 4 2. + <_> + + <_> + 0 3 2 8 -1. + <_> + 0 3 1 4 2. + <_> + 1 7 1 4 2. + <_> + + <_> + 3 7 14 10 -1. + <_> + 10 7 7 5 2. + <_> + 3 12 7 5 2. + <_> + + <_> + 0 7 19 3 -1. + <_> + 0 8 19 1 3. + <_> + + <_> + 12 6 3 3 -1. + <_> + 12 7 3 1 3. + <_> + + <_> + 0 6 1 3 -1. + <_> + 0 7 1 1 3. + <_> + + <_> + 12 6 3 3 -1. + <_> + 12 7 3 1 3. + <_> + + <_> + 5 6 3 3 -1. + <_> + 5 7 3 1 3. + <_> + + <_> + 8 2 4 2 -1. + <_> + 8 3 4 1 2. + <_> + + <_> + 6 3 4 12 -1. + <_> + 8 3 2 12 2. + <_> + + <_> + 13 6 2 3 -1. + <_> + 13 7 2 1 3. + <_> + + <_> + 0 10 20 4 -1. + <_> + 0 12 20 2 2. + <_> + + <_> + 2 0 17 14 -1. + <_> + 2 7 17 7 2. + <_> + + <_> + 0 0 6 10 -1. + <_> + 0 0 3 5 2. + <_> + 3 5 3 5 2. + <_> + + <_> + 14 6 6 4 -1. + <_> + 14 6 3 4 2. + <_> + + <_> + 0 6 6 4 -1. + <_> + 3 6 3 4 2. + <_> + + <_> + 13 2 7 2 -1. + <_> + 13 3 7 1 2. + <_> + + <_> + 0 2 7 2 -1. + <_> + 0 3 7 1 2. + <_> + + <_> + 6 11 14 2 -1. + <_> + 13 11 7 1 2. + <_> + 6 12 7 1 2. + <_> + + <_> + 8 5 2 2 -1. + <_> + 8 5 1 1 2. + <_> + 9 6 1 1 2. + <_> + + <_> + 13 9 2 3 -1. + <_> + 13 9 1 3 2. + <_> + + <_> + 1 1 3 12 -1. + <_> + 2 1 1 12 3. + <_> + + <_> + 17 4 1 3 -1. + <_> + 17 5 1 1 3. + <_> + + <_> + 2 4 1 3 -1. + <_> + 2 5 1 1 3. + <_> + + <_> + 14 5 1 3 -1. + <_> + 14 6 1 1 3. + <_> + + <_> + 7 16 2 3 -1. + <_> + 7 17 2 1 3. + <_> + + <_> + 8 13 4 6 -1. + <_> + 10 13 2 3 2. + <_> + 8 16 2 3 2. + <_> + + <_> + 5 5 1 3 -1. + <_> + 5 6 1 1 3. + <_> + + <_> + 16 0 4 20 -1. + <_> + 16 0 2 20 2. + <_> + + <_> + 5 1 2 6 -1. + <_> + 5 1 1 3 2. + <_> + 6 4 1 3 2. + <_> + + <_> + 5 4 10 4 -1. + <_> + 5 6 10 2 2. + <_> + + <_> + 15 2 4 12 -1. + <_> + 15 2 2 12 2. + <_> + + <_> + 7 6 4 12 -1. + <_> + 7 12 4 6 2. + <_> + + <_> + 14 5 1 8 -1. + <_> + 14 9 1 4 2. + <_> + + <_> + 1 4 14 10 -1. + <_> + 1 4 7 5 2. + <_> + 8 9 7 5 2. + <_> + + <_> + 11 6 6 14 -1. + <_> + 14 6 3 7 2. + <_> + 11 13 3 7 2. + <_> + + <_> + 3 6 6 14 -1. + <_> + 3 6 3 7 2. + <_> + 6 13 3 7 2. + <_> + + <_> + 4 9 15 2 -1. + <_> + 9 9 5 2 3. + <_> + + <_> + 7 14 6 3 -1. + <_> + 7 15 6 1 3. + <_> + + <_> + 6 3 14 4 -1. + <_> + 13 3 7 2 2. + <_> + 6 5 7 2 2. + <_> + + <_> + 1 9 15 2 -1. + <_> + 6 9 5 2 3. + <_> + + <_> + 6 11 8 9 -1. + <_> + 6 14 8 3 3. + <_> + + <_> + 7 4 3 8 -1. + <_> + 8 4 1 8 3. + <_> + + <_> + 14 6 2 6 -1. + <_> + 14 9 2 3 2. + <_> + + <_> + 5 7 6 4 -1. + <_> + 5 7 3 2 2. + <_> + 8 9 3 2 2. + <_> + + <_> + 1 1 18 19 -1. + <_> + 7 1 6 19 3. + <_> + + <_> + 1 2 6 5 -1. + <_> + 4 2 3 5 2. + <_> + + <_> + 12 17 6 2 -1. + <_> + 12 18 6 1 2. + <_> + + <_> + 2 17 6 2 -1. + <_> + 2 18 6 1 2. + <_> + + <_> + 17 3 3 6 -1. + <_> + 17 5 3 2 3. + <_> + + <_> + 8 17 3 3 -1. + <_> + 8 18 3 1 3. + <_> + + <_> + 10 13 2 6 -1. + <_> + 10 16 2 3 2. + <_> + + <_> + 7 13 6 3 -1. + <_> + 7 14 6 1 3. + <_> + + <_> + 17 3 3 6 -1. + <_> + 17 5 3 2 3. + <_> + + <_> + 8 13 2 3 -1. + <_> + 8 14 2 1 3. + <_> + + <_> + 9 3 6 2 -1. + <_> + 11 3 2 2 3. + <_> + + <_> + 0 3 3 6 -1. + <_> + 0 5 3 2 3. + <_> + + <_> + 8 5 4 6 -1. + <_> + 8 7 4 2 3. + <_> + + <_> + 5 5 3 2 -1. + <_> + 5 6 3 1 2. + <_> + + <_> + 10 1 3 4 -1. + <_> + 11 1 1 4 3. + <_> + + <_> + 1 2 5 9 -1. + <_> + 1 5 5 3 3. + <_> + + <_> + 13 6 2 3 -1. + <_> + 13 7 2 1 3. + <_> + + <_> + 0 6 14 3 -1. + <_> + 7 6 7 3 2. + <_> + + <_> + 2 11 18 8 -1. + <_> + 2 15 18 4 2. + <_> + + <_> + 5 6 2 3 -1. + <_> + 5 7 2 1 3. + <_> + + <_> + 10 6 4 2 -1. + <_> + 12 6 2 1 2. + <_> + 10 7 2 1 2. + <_> + + <_> + 6 6 4 2 -1. + <_> + 6 6 2 1 2. + <_> + 8 7 2 1 2. + <_> + + <_> + 10 1 3 4 -1. + <_> + 11 1 1 4 3. + <_> + + <_> + 7 1 2 7 -1. + <_> + 8 1 1 7 2. + <_> + + <_> + 4 2 15 14 -1. + <_> + 4 9 15 7 2. + <_> + + <_> + 8 7 3 2 -1. + <_> + 9 7 1 2 3. + <_> + + <_> + 2 3 18 4 -1. + <_> + 11 3 9 2 2. + <_> + 2 5 9 2 2. + <_> + + <_> + 9 7 2 2 -1. + <_> + 10 7 1 2 2. + <_> + + <_> + 13 9 2 3 -1. + <_> + 13 9 1 3 2. + <_> + + <_> + 5 2 6 2 -1. + <_> + 7 2 2 2 3. + <_> + + <_> + 9 5 2 7 -1. + <_> + 9 5 1 7 2. + <_> + + <_> + 5 9 2 3 -1. + <_> + 6 9 1 3 2. + <_> + + <_> + 6 0 14 18 -1. + <_> + 6 9 14 9 2. + <_> + + <_> + 2 16 6 3 -1. + <_> + 2 17 6 1 3. + <_> + + <_> + 9 7 3 6 -1. + <_> + 10 7 1 6 3. + <_> + + <_> + 7 8 4 3 -1. + <_> + 7 9 4 1 3. + <_> + + <_> + 7 12 6 3 -1. + <_> + 7 13 6 1 3. + <_> + + <_> + 9 12 2 3 -1. + <_> + 9 13 2 1 3. + <_> + + <_> + 7 12 6 2 -1. + <_> + 9 12 2 2 3. + <_> + + <_> + 5 11 4 6 -1. + <_> + 5 14 4 3 2. + <_> + + <_> + 11 12 7 2 -1. + <_> + 11 13 7 1 2. + <_> + + <_> + 6 10 8 6 -1. + <_> + 6 10 4 3 2. + <_> + 10 13 4 3 2. + <_> + + <_> + 11 10 3 4 -1. + <_> + 11 12 3 2 2. + <_> + + <_> + 9 16 2 3 -1. + <_> + 9 17 2 1 3. + <_> + + <_> + 13 3 1 9 -1. + <_> + 13 6 1 3 3. + <_> + + <_> + 1 13 14 6 -1. + <_> + 1 15 14 2 3. + <_> + + <_> + 13 6 1 6 -1. + <_> + 13 9 1 3 2. + <_> + + <_> + 0 4 3 8 -1. + <_> + 1 4 1 8 3. + <_> + + <_> + 18 0 2 18 -1. + <_> + 18 0 1 18 2. + <_> + + <_> + 2 3 6 2 -1. + <_> + 2 4 6 1 2. + <_> + + <_> + 9 0 8 6 -1. + <_> + 9 2 8 2 3. + <_> + + <_> + 6 6 1 6 -1. + <_> + 6 9 1 3 2. + <_> + + <_> + 14 8 6 3 -1. + <_> + 14 9 6 1 3. + <_> + + <_> + 0 0 2 18 -1. + <_> + 1 0 1 18 2. + <_> + + <_> + 1 18 18 2 -1. + <_> + 10 18 9 1 2. + <_> + 1 19 9 1 2. + <_> + + <_> + 3 15 2 2 -1. + <_> + 3 16 2 1 2. + <_> + + <_> + 8 14 5 3 -1. + <_> + 8 15 5 1 3. + <_> + + <_> + 8 14 2 3 -1. + <_> + 8 15 2 1 3. + <_> + + <_> + 12 3 3 3 -1. + <_> + 13 3 1 3 3. + <_> + + <_> + 7 5 6 2 -1. + <_> + 9 5 2 2 3. + <_> + + <_> + 15 5 5 2 -1. + <_> + 15 6 5 1 2. + <_> + + <_> + 0 5 5 2 -1. + <_> + 0 6 5 1 2. + <_> + + <_> + 17 14 1 6 -1. + <_> + 17 17 1 3 2. + <_> + + <_> + 2 9 9 3 -1. + <_> + 5 9 3 3 3. + <_> + + <_> + 12 3 3 3 -1. + <_> + 13 3 1 3 3. + <_> + + <_> + 0 0 4 18 -1. + <_> + 2 0 2 18 2. + <_> + + <_> + 17 6 1 3 -1. + <_> + 17 7 1 1 3. + <_> + + <_> + 2 14 1 6 -1. + <_> + 2 17 1 3 2. + <_> + + <_> + 19 8 1 2 -1. + <_> + 19 9 1 1 2. + <_> + + <_> + 5 3 3 3 -1. + <_> + 6 3 1 3 3. + <_> + + <_> + 9 16 2 3 -1. + <_> + 9 17 2 1 3. + <_> + + <_> + 2 6 1 3 -1. + <_> + 2 7 1 1 3. + <_> + + <_> + 12 4 8 2 -1. + <_> + 16 4 4 1 2. + <_> + 12 5 4 1 2. + <_> + + <_> + 0 4 8 2 -1. + <_> + 0 4 4 1 2. + <_> + 4 5 4 1 2. + <_> + + <_> + 2 16 18 4 -1. + <_> + 2 18 18 2 2. + <_> + + <_> + 7 15 2 4 -1. + <_> + 7 17 2 2 2. + <_> + + <_> + 4 0 14 3 -1. + <_> + 4 1 14 1 3. + <_> + + <_> + 0 0 4 20 -1. + <_> + 2 0 2 20 2. + <_> + + <_> + 12 4 4 8 -1. + <_> + 14 4 2 4 2. + <_> + 12 8 2 4 2. + <_> + + <_> + 6 7 2 2 -1. + <_> + 6 7 1 1 2. + <_> + 7 8 1 1 2. + <_> + + <_> + 10 6 2 3 -1. + <_> + 10 7 2 1 3. + <_> + + <_> + 8 7 3 2 -1. + <_> + 8 8 3 1 2. + <_> + + <_> + 8 2 6 12 -1. + <_> + 8 8 6 6 2. + <_> + + <_> + 4 0 11 12 -1. + <_> + 4 4 11 4 3. + <_> + + <_> + 14 9 6 11 -1. + <_> + 16 9 2 11 3. + <_> + + <_> + 0 14 4 3 -1. + <_> + 0 15 4 1 3. + <_> + + <_> + 9 10 2 3 -1. + <_> + 9 11 2 1 3. + <_> + + <_> + 5 11 3 2 -1. + <_> + 5 12 3 1 2. + <_> + + <_> + 9 15 3 3 -1. + <_> + 10 15 1 3 3. + <_> + + <_> + 8 8 3 4 -1. + <_> + 9 8 1 4 3. + <_> + + <_> + 9 15 3 3 -1. + <_> + 10 15 1 3 3. + <_> + + <_> + 7 7 3 2 -1. + <_> + 8 7 1 2 3. + <_> + + <_> + 2 10 16 4 -1. + <_> + 10 10 8 2 2. + <_> + 2 12 8 2 2. + <_> + + <_> + 2 3 4 17 -1. + <_> + 4 3 2 17 2. + <_> + + <_> + 15 13 2 7 -1. + <_> + 15 13 1 7 2. + <_> + + <_> + 2 2 6 1 -1. + <_> + 5 2 3 1 2. + <_> + + <_> + 5 2 12 4 -1. + <_> + 9 2 4 4 3. + <_> + + <_> + 6 0 8 12 -1. + <_> + 6 0 4 6 2. + <_> + 10 6 4 6 2. + <_> + + <_> + 13 7 2 2 -1. + <_> + 14 7 1 1 2. + <_> + 13 8 1 1 2. + <_> + + <_> + 0 12 20 6 -1. + <_> + 0 14 20 2 3. + <_> + + <_> + 14 7 2 3 -1. + <_> + 14 7 1 3 2. + <_> + + <_> + 0 8 9 12 -1. + <_> + 3 8 3 12 3. + <_> + + <_> + 3 0 16 2 -1. + <_> + 3 0 8 2 2. + <_> + + <_> + 6 15 3 3 -1. + <_> + 6 16 3 1 3. + <_> + + <_> + 8 15 6 3 -1. + <_> + 8 16 6 1 3. + <_> + + <_> + 0 10 1 6 -1. + <_> + 0 12 1 2 3. + <_> + + <_> + 10 9 4 3 -1. + <_> + 10 10 4 1 3. + <_> + + <_> + 9 15 2 3 -1. + <_> + 9 16 2 1 3. + <_> + + <_> + 5 7 10 1 -1. + <_> + 5 7 5 1 2. + <_> + + <_> + 4 0 12 19 -1. + <_> + 10 0 6 19 2. + <_> + + <_> + 0 6 20 6 -1. + <_> + 10 6 10 3 2. + <_> + 0 9 10 3 2. + <_> + + <_> + 3 6 2 2 -1. + <_> + 3 6 1 1 2. + <_> + 4 7 1 1 2. + <_> + + <_> + 15 6 2 2 -1. + <_> + 16 6 1 1 2. + <_> + 15 7 1 1 2. + <_> + + <_> + 3 6 2 2 -1. + <_> + 3 6 1 1 2. + <_> + 4 7 1 1 2. + <_> + + <_> + 14 4 1 12 -1. + <_> + 14 10 1 6 2. + <_> + + <_> + 2 5 16 10 -1. + <_> + 2 5 8 5 2. + <_> + 10 10 8 5 2. + <_> + + <_> + 9 17 3 2 -1. + <_> + 10 17 1 2 3. + <_> + + <_> + 1 4 2 2 -1. + <_> + 1 5 2 1 2. + <_> + + <_> + 5 0 15 5 -1. + <_> + 10 0 5 5 3. + <_> + + <_> + 0 0 15 5 -1. + <_> + 5 0 5 5 3. + <_> + + <_> + 11 2 2 17 -1. + <_> + 11 2 1 17 2. + <_> + + <_> + 7 2 2 17 -1. + <_> + 8 2 1 17 2. + <_> + + <_> + 15 11 2 9 -1. + <_> + 15 11 1 9 2. + <_> + + <_> + 3 11 2 9 -1. + <_> + 4 11 1 9 2. + <_> + + <_> + 5 16 14 4 -1. + <_> + 5 16 7 4 2. + <_> + + <_> + 1 4 18 1 -1. + <_> + 7 4 6 1 3. + <_> + + <_> + 13 7 6 4 -1. + <_> + 16 7 3 2 2. + <_> + 13 9 3 2 2. + <_> + + <_> + 9 8 2 12 -1. + <_> + 9 12 2 4 3. + <_> + + <_> + 12 1 6 6 -1. + <_> + 12 3 6 2 3. + <_> + + <_> + 5 2 6 6 -1. + <_> + 5 2 3 3 2. + <_> + 8 5 3 3 2. + <_> + + <_> + 9 16 6 4 -1. + <_> + 12 16 3 2 2. + <_> + 9 18 3 2 2. + <_> + + <_> + 1 2 18 3 -1. + <_> + 7 2 6 3 3. + <_> + + <_> + 7 4 9 10 -1. + <_> + 7 9 9 5 2. + <_> + + <_> + 5 9 4 4 -1. + <_> + 7 9 2 4 2. + <_> + + <_> + 11 10 3 6 -1. + <_> + 11 13 3 3 2. + <_> + + <_> + 7 11 5 3 -1. + <_> + 7 12 5 1 3. + <_> + + <_> + 7 11 6 6 -1. + <_> + 10 11 3 3 2. + <_> + 7 14 3 3 2. + <_> + + <_> + 0 0 10 9 -1. + <_> + 0 3 10 3 3. + <_> + + <_> + 13 14 1 6 -1. + <_> + 13 16 1 2 3. + <_> + + <_> + 0 2 3 6 -1. + <_> + 0 4 3 2 3. + <_> + + <_> + 8 14 4 3 -1. + <_> + 8 15 4 1 3. + <_> + + <_> + 6 14 1 6 -1. + <_> + 6 16 1 2 3. + <_> + + <_> + 9 15 2 3 -1. + <_> + 9 16 2 1 3. + <_> + + <_> + 6 4 3 3 -1. + <_> + 7 4 1 3 3. + <_> + + <_> + 9 0 11 3 -1. + <_> + 9 1 11 1 3. + <_> + + <_> + 0 6 20 3 -1. + <_> + 0 7 20 1 3. + <_> + + <_> + 10 1 1 2 -1. + <_> + 10 2 1 1 2. + <_> + + <_> + 9 6 2 6 -1. + <_> + 10 6 1 6 2. + <_> + + <_> + 5 8 12 1 -1. + <_> + 9 8 4 1 3. + <_> + + <_> + 3 8 12 1 -1. + <_> + 7 8 4 1 3. + <_> + + <_> + 9 7 3 5 -1. + <_> + 10 7 1 5 3. + <_> + + <_> + 3 9 6 2 -1. + <_> + 6 9 3 2 2. + <_> + + <_> + 12 9 3 3 -1. + <_> + 12 10 3 1 3. + <_> + + <_> + 7 0 6 1 -1. + <_> + 9 0 2 1 3. + <_> + + <_> + 12 9 3 3 -1. + <_> + 12 10 3 1 3. + <_> + + <_> + 7 10 2 1 -1. + <_> + 8 10 1 1 2. + <_> + + <_> + 6 4 9 13 -1. + <_> + 9 4 3 13 3. + <_> + + <_> + 6 8 4 2 -1. + <_> + 6 9 4 1 2. + <_> + + <_> + 16 2 4 6 -1. + <_> + 16 2 2 6 2. + <_> + + <_> + 0 17 6 3 -1. + <_> + 0 18 6 1 3. + <_> + + <_> + 10 10 3 10 -1. + <_> + 10 15 3 5 2. + <_> + + <_> + 8 7 3 5 -1. + <_> + 9 7 1 5 3. + <_> + + <_> + 10 4 4 3 -1. + <_> + 10 4 2 3 2. + <_> + + <_> + 8 4 3 8 -1. + <_> + 9 4 1 8 3. + <_> + + <_> + 6 6 9 13 -1. + <_> + 9 6 3 13 3. + <_> + + <_> + 6 0 8 12 -1. + <_> + 6 0 4 6 2. + <_> + 10 6 4 6 2. + <_> + + <_> + 14 2 6 8 -1. + <_> + 16 2 2 8 3. + <_> + + <_> + 6 0 3 6 -1. + <_> + 7 0 1 6 3. + <_> + + <_> + 14 2 6 8 -1. + <_> + 16 2 2 8 3. + <_> + + <_> + 0 5 6 6 -1. + <_> + 0 8 6 3 2. + <_> + + <_> + 9 12 6 2 -1. + <_> + 12 12 3 1 2. + <_> + 9 13 3 1 2. + <_> + + <_> + 8 17 3 2 -1. + <_> + 9 17 1 2 3. + <_> + + <_> + 11 6 2 2 -1. + <_> + 12 6 1 1 2. + <_> + 11 7 1 1 2. + <_> + + <_> + 1 9 18 2 -1. + <_> + 7 9 6 2 3. + <_> + + <_> + 11 6 2 2 -1. + <_> + 12 6 1 1 2. + <_> + 11 7 1 1 2. + <_> + + <_> + 3 4 12 8 -1. + <_> + 7 4 4 8 3. + <_> + + <_> + 13 11 5 3 -1. + <_> + 13 12 5 1 3. + <_> + + <_> + 9 10 2 3 -1. + <_> + 9 11 2 1 3. + <_> + + <_> + 14 7 2 3 -1. + <_> + 14 7 1 3 2. + <_> + + <_> + 5 4 1 3 -1. + <_> + 5 5 1 1 3. + <_> + + <_> + 13 4 2 3 -1. + <_> + 13 5 2 1 3. + <_> + + <_> + 5 4 2 3 -1. + <_> + 5 5 2 1 3. + <_> + + <_> + 9 8 2 3 -1. + <_> + 9 9 2 1 3. + <_> + + <_> + 8 9 2 2 -1. + <_> + 8 10 2 1 2. + <_> + + <_> + 15 14 1 4 -1. + <_> + 15 16 1 2 2. + <_> + + <_> + 3 12 2 2 -1. + <_> + 3 13 2 1 2. + <_> + + <_> + 12 15 2 2 -1. + <_> + 13 15 1 1 2. + <_> + 12 16 1 1 2. + <_> + + <_> + 9 13 2 2 -1. + <_> + 9 14 2 1 2. + <_> + + <_> + 4 11 14 9 -1. + <_> + 4 14 14 3 3. + <_> + + <_> + 7 13 4 3 -1. + <_> + 7 14 4 1 3. + <_> + + <_> + 15 14 1 4 -1. + <_> + 15 16 1 2 2. + <_> + + <_> + 4 14 1 4 -1. + <_> + 4 16 1 2 2. + <_> + + <_> + 14 0 6 13 -1. + <_> + 16 0 2 13 3. + <_> + + <_> + 4 1 2 12 -1. + <_> + 4 1 1 6 2. + <_> + 5 7 1 6 2. + <_> + + <_> + 11 14 6 6 -1. + <_> + 14 14 3 3 2. + <_> + 11 17 3 3 2. + <_> + + <_> + 3 14 6 6 -1. + <_> + 3 14 3 3 2. + <_> + 6 17 3 3 2. + <_> + + <_> + 14 17 3 2 -1. + <_> + 14 18 3 1 2. + <_> + + <_> + 3 17 3 2 -1. + <_> + 3 18 3 1 2. + <_> + + <_> + 14 0 6 13 -1. + <_> + 16 0 2 13 3. + <_> + + <_> + 0 0 6 13 -1. + <_> + 2 0 2 13 3. + <_> + + <_> + 10 10 7 6 -1. + <_> + 10 12 7 2 3. + <_> + + <_> + 6 15 2 2 -1. + <_> + 6 15 1 1 2. + <_> + 7 16 1 1 2. + <_> + + <_> + 6 11 8 6 -1. + <_> + 10 11 4 3 2. + <_> + 6 14 4 3 2. + <_> + + <_> + 7 6 2 2 -1. + <_> + 7 6 1 1 2. + <_> + 8 7 1 1 2. + <_> + + <_> + 2 2 16 6 -1. + <_> + 10 2 8 3 2. + <_> + 2 5 8 3 2. + <_> + + <_> + 5 4 3 3 -1. + <_> + 5 5 3 1 3. + <_> + + <_> + 11 7 3 10 -1. + <_> + 11 12 3 5 2. + <_> + + <_> + 6 7 3 10 -1. + <_> + 6 12 3 5 2. + <_> + + <_> + 10 7 3 2 -1. + <_> + 11 7 1 2 3. + <_> + + <_> + 8 12 4 2 -1. + <_> + 8 13 4 1 2. + <_> + + <_> + 10 1 1 3 -1. + <_> + 10 2 1 1 3. + <_> + + <_> + 1 2 4 18 -1. + <_> + 1 2 2 9 2. + <_> + 3 11 2 9 2. + <_> + + <_> + 12 4 4 12 -1. + <_> + 12 10 4 6 2. + <_> + + <_> + 0 0 1 6 -1. + <_> + 0 2 1 2 3. + <_> + + <_> + 9 11 2 3 -1. + <_> + 9 12 2 1 3. + <_> + + <_> + 8 7 4 3 -1. + <_> + 8 8 4 1 3. + <_> + + <_> + 10 7 3 2 -1. + <_> + 11 7 1 2 3. + <_> + + <_> + 7 7 3 2 -1. + <_> + 8 7 1 2 3. + <_> + + <_> + 9 4 6 1 -1. + <_> + 11 4 2 1 3. + <_> + + <_> + 8 7 2 3 -1. + <_> + 9 7 1 3 2. + <_> + + <_> + 12 7 8 6 -1. + <_> + 16 7 4 3 2. + <_> + 12 10 4 3 2. + <_> + + <_> + 0 7 8 6 -1. + <_> + 0 7 4 3 2. + <_> + 4 10 4 3 2. + <_> + + <_> + 18 2 2 10 -1. + <_> + 19 2 1 5 2. + <_> + 18 7 1 5 2. + <_> + + <_> + 0 2 6 4 -1. + <_> + 3 2 3 4 2. + <_> + + <_> + 9 4 6 1 -1. + <_> + 11 4 2 1 3. + <_> + + <_> + 7 15 2 2 -1. + <_> + 7 15 1 1 2. + <_> + 8 16 1 1 2. + <_> + + <_> + 11 13 1 6 -1. + <_> + 11 16 1 3 2. + <_> + + <_> + 8 13 1 6 -1. + <_> + 8 16 1 3 2. + <_> + + <_> + 14 3 2 1 -1. + <_> + 14 3 1 1 2. + <_> + + <_> + 8 15 2 3 -1. + <_> + 8 16 2 1 3. + <_> + + <_> + 12 15 7 4 -1. + <_> + 12 17 7 2 2. + <_> + + <_> + 4 14 12 3 -1. + <_> + 4 15 12 1 3. + <_> + + <_> + 10 3 3 2 -1. + <_> + 11 3 1 2 3. + <_> + + <_> + 4 12 2 2 -1. + <_> + 4 13 2 1 2. + <_> + + <_> + 10 11 4 6 -1. + <_> + 10 14 4 3 2. + <_> + + <_> + 7 13 2 2 -1. + <_> + 7 13 1 1 2. + <_> + 8 14 1 1 2. + <_> + + <_> + 4 11 14 4 -1. + <_> + 11 11 7 2 2. + <_> + 4 13 7 2 2. + <_> + + <_> + 1 18 18 2 -1. + <_> + 7 18 6 2 3. + <_> + + <_> + 11 18 2 2 -1. + <_> + 12 18 1 1 2. + <_> + 11 19 1 1 2. + <_> + + <_> + 7 18 2 2 -1. + <_> + 7 18 1 1 2. + <_> + 8 19 1 1 2. + <_> + + <_> + 12 18 8 2 -1. + <_> + 12 19 8 1 2. + <_> + + <_> + 7 14 6 2 -1. + <_> + 7 15 6 1 2. + <_> + + <_> + 8 12 4 8 -1. + <_> + 10 12 2 4 2. + <_> + 8 16 2 4 2. + <_> + + <_> + 4 9 3 3 -1. + <_> + 4 10 3 1 3. + <_> + + <_> + 7 10 6 2 -1. + <_> + 9 10 2 2 3. + <_> + + <_> + 5 0 4 15 -1. + <_> + 7 0 2 15 2. + <_> + + <_> + 8 6 12 14 -1. + <_> + 12 6 4 14 3. + <_> + + <_> + 5 16 3 3 -1. + <_> + 5 17 3 1 3. + <_> + + <_> + 8 1 12 19 -1. + <_> + 12 1 4 19 3. + <_> + + <_> + 3 0 3 2 -1. + <_> + 3 1 3 1 2. + <_> + + <_> + 10 12 4 5 -1. + <_> + 10 12 2 5 2. + <_> + + <_> + 6 12 4 5 -1. + <_> + 8 12 2 5 2. + <_> + + <_> + 11 11 2 2 -1. + <_> + 12 11 1 1 2. + <_> + 11 12 1 1 2. + <_> + + <_> + 0 2 3 6 -1. + <_> + 0 4 3 2 3. + <_> + + <_> + 11 11 2 2 -1. + <_> + 12 11 1 1 2. + <_> + 11 12 1 1 2. + <_> + + <_> + 7 6 4 10 -1. + <_> + 7 11 4 5 2. + <_> + + <_> + 11 11 2 2 -1. + <_> + 12 11 1 1 2. + <_> + 11 12 1 1 2. + <_> + + <_> + 2 13 5 2 -1. + <_> + 2 14 5 1 2. + <_> + + <_> + 11 11 2 2 -1. + <_> + 12 11 1 1 2. + <_> + 11 12 1 1 2. + <_> + + <_> + 7 11 2 2 -1. + <_> + 7 11 1 1 2. + <_> + 8 12 1 1 2. + <_> + + <_> + 14 13 3 3 -1. + <_> + 14 14 3 1 3. + <_> + + <_> + 3 13 3 3 -1. + <_> + 3 14 3 1 3. + <_> + + <_> + 9 14 2 3 -1. + <_> + 9 15 2 1 3. + <_> + + <_> + 8 7 3 3 -1. + <_> + 8 8 3 1 3. + <_> + + <_> + 13 5 3 3 -1. + <_> + 13 6 3 1 3. + <_> + + <_> + 0 9 5 3 -1. + <_> + 0 10 5 1 3. + <_> + + <_> + 13 5 3 3 -1. + <_> + 13 6 3 1 3. + <_> + + <_> + 9 12 2 8 -1. + <_> + 9 12 1 4 2. + <_> + 10 16 1 4 2. + <_> + + <_> + 11 7 2 2 -1. + <_> + 12 7 1 1 2. + <_> + 11 8 1 1 2. + <_> + + <_> + 0 16 6 4 -1. + <_> + 3 16 3 4 2. + <_> + + <_> + 10 6 2 3 -1. + <_> + 10 7 2 1 3. + <_> + + <_> + 9 5 2 6 -1. + <_> + 9 7 2 2 3. + <_> + + <_> + 12 15 8 4 -1. + <_> + 12 15 4 4 2. + <_> + + <_> + 0 14 8 6 -1. + <_> + 4 14 4 6 2. + <_> + + <_> + 9 0 3 2 -1. + <_> + 10 0 1 2 3. + <_> + + <_> + 4 15 4 2 -1. + <_> + 6 15 2 2 2. + <_> + + <_> + 12 7 3 13 -1. + <_> + 13 7 1 13 3. + <_> + + <_> + 5 7 3 13 -1. + <_> + 6 7 1 13 3. + <_> + + <_> + 9 6 3 9 -1. + <_> + 9 9 3 3 3. + <_> + + <_> + 4 4 7 12 -1. + <_> + 4 10 7 6 2. + <_> + + <_> + 12 12 2 2 -1. + <_> + 13 12 1 1 2. + <_> + 12 13 1 1 2. + <_> + + <_> + 6 12 2 2 -1. + <_> + 6 12 1 1 2. + <_> + 7 13 1 1 2. + <_> + + <_> + 8 9 4 2 -1. + <_> + 10 9 2 1 2. + <_> + 8 10 2 1 2. + <_> + + <_> + 3 6 2 2 -1. + <_> + 3 6 1 1 2. + <_> + 4 7 1 1 2. + <_> + + <_> + 16 6 3 2 -1. + <_> + 16 7 3 1 2. + <_> + + <_> + 0 7 19 4 -1. + <_> + 0 9 19 2 2. + <_> + + <_> + 10 2 10 1 -1. + <_> + 10 2 5 1 2. + <_> + + <_> + 9 4 2 12 -1. + <_> + 9 10 2 6 2. + <_> + + <_> + 12 18 4 1 -1. + <_> + 12 18 2 1 2. + <_> + + <_> + 1 7 6 4 -1. + <_> + 1 7 3 2 2. + <_> + 4 9 3 2 2. + <_> + + <_> + 12 0 6 13 -1. + <_> + 14 0 2 13 3. + <_> + + <_> + 2 0 6 13 -1. + <_> + 4 0 2 13 3. + <_> + + <_> + 10 5 8 8 -1. + <_> + 10 9 8 4 2. + <_> + + <_> + 8 3 2 5 -1. + <_> + 9 3 1 5 2. + <_> + + <_> + 8 4 9 1 -1. + <_> + 11 4 3 1 3. + <_> + + <_> + 3 4 9 1 -1. + <_> + 6 4 3 1 3. + <_> + + <_> + 1 0 18 10 -1. + <_> + 7 0 6 10 3. + <_> + + <_> + 7 17 5 3 -1. + <_> + 7 18 5 1 3. + <_> + + <_> + 7 11 6 1 -1. + <_> + 9 11 2 1 3. + <_> + + <_> + 2 2 3 2 -1. + <_> + 2 3 3 1 2. + <_> + + <_> + 8 12 4 2 -1. + <_> + 8 13 4 1 2. + <_> + + <_> + 6 10 3 6 -1. + <_> + 6 13 3 3 2. + <_> + + <_> + 11 4 2 4 -1. + <_> + 11 4 1 4 2. + <_> + + <_> + 7 4 2 4 -1. + <_> + 8 4 1 4 2. + <_> + + <_> + 9 6 2 4 -1. + <_> + 9 6 1 4 2. + <_> + + <_> + 6 13 8 3 -1. + <_> + 6 14 8 1 3. + <_> + + <_> + 9 15 3 4 -1. + <_> + 10 15 1 4 3. + <_> + + <_> + 9 2 2 17 -1. + <_> + 10 2 1 17 2. + <_> + + <_> + 7 0 6 1 -1. + <_> + 9 0 2 1 3. + <_> + + <_> + 8 15 3 4 -1. + <_> + 9 15 1 4 3. + <_> + + <_> + 7 13 7 3 -1. + <_> + 7 14 7 1 3. + <_> + + <_> + 8 16 3 3 -1. + <_> + 9 16 1 3 3. + <_> + + <_> + 6 2 8 10 -1. + <_> + 6 7 8 5 2. + <_> + + <_> + 2 5 8 8 -1. + <_> + 2 9 8 4 2. + <_> + + <_> + 14 16 2 2 -1. + <_> + 14 17 2 1 2. + <_> + + <_> + 4 16 2 2 -1. + <_> + 4 17 2 1 2. + <_> + + <_> + 10 11 4 6 -1. + <_> + 10 14 4 3 2. + <_> + + <_> + 6 11 4 6 -1. + <_> + 6 14 4 3 2. + <_> + + <_> + 10 14 1 3 -1. + <_> + 10 15 1 1 3. + <_> + + <_> + 8 14 4 3 -1. + <_> + 8 15 4 1 3. + <_> + + <_> + 10 0 4 6 -1. + <_> + 12 0 2 3 2. + <_> + 10 3 2 3 2. + <_> + + <_> + 0 3 20 2 -1. + <_> + 0 4 20 1 2. + <_> + + <_> + 12 0 8 2 -1. + <_> + 16 0 4 1 2. + <_> + 12 1 4 1 2. + <_> + + <_> + 2 12 10 8 -1. + <_> + 2 16 10 4 2. + <_> + + <_> + 17 7 2 10 -1. + <_> + 18 7 1 5 2. + <_> + 17 12 1 5 2. + <_> + + <_> + 1 7 2 10 -1. + <_> + 1 7 1 5 2. + <_> + 2 12 1 5 2. + <_> + + <_> + 15 10 3 6 -1. + <_> + 15 12 3 2 3. + <_> + + <_> + 4 4 6 2 -1. + <_> + 6 4 2 2 3. + <_> + + <_> + 0 5 20 6 -1. + <_> + 0 7 20 2 3. + <_> + + <_> + 0 0 8 2 -1. + <_> + 0 0 4 1 2. + <_> + 4 1 4 1 2. + <_> + + <_> + 1 0 18 4 -1. + <_> + 7 0 6 4 3. + <_> + + <_> + 1 13 6 2 -1. + <_> + 1 14 6 1 2. + <_> + + <_> + 10 8 3 4 -1. + <_> + 11 8 1 4 3. + <_> + + <_> + 6 1 6 1 -1. + <_> + 8 1 2 1 3. + <_> + + <_> + 8 14 4 3 -1. + <_> + 8 15 4 1 3. + <_> + + <_> + 1 6 18 2 -1. + <_> + 10 6 9 2 2. + <_> + + <_> + 15 11 1 2 -1. + <_> + 15 12 1 1 2. + <_> + + <_> + 6 5 1 2 -1. + <_> + 6 6 1 1 2. + <_> + + <_> + 13 4 1 3 -1. + <_> + 13 5 1 1 3. + <_> + + <_> + 2 15 1 2 -1. + <_> + 2 16 1 1 2. + <_> + + <_> + 12 4 4 3 -1. + <_> + 12 5 4 1 3. + <_> + + <_> + 0 0 7 3 -1. + <_> + 0 1 7 1 3. + <_> + + <_> + 9 12 6 2 -1. + <_> + 9 12 3 2 2. + <_> + + <_> + 5 4 2 3 -1. + <_> + 5 5 2 1 3. + <_> + + <_> + 18 4 2 3 -1. + <_> + 18 5 2 1 3. + <_> + + <_> + 3 0 8 6 -1. + <_> + 3 2 8 2 3. + <_> + + <_> + 0 2 20 6 -1. + <_> + 10 2 10 3 2. + <_> + 0 5 10 3 2. + <_> + + <_> + 4 7 2 4 -1. + <_> + 5 7 1 4 2. + <_> + + <_> + 3 10 15 2 -1. + <_> + 8 10 5 2 3. + <_> + + <_> + 3 0 12 11 -1. + <_> + 9 0 6 11 2. + <_> + + <_> + 13 0 2 6 -1. + <_> + 13 0 1 6 2. + <_> + + <_> + 0 19 2 1 -1. + <_> + 1 19 1 1 2. + <_> + + <_> + 16 10 4 10 -1. + <_> + 18 10 2 5 2. + <_> + 16 15 2 5 2. + <_> + + <_> + 4 8 10 3 -1. + <_> + 4 9 10 1 3. + <_> + + <_> + 14 12 3 3 -1. + <_> + 14 13 3 1 3. + <_> + + <_> + 0 10 4 10 -1. + <_> + 0 10 2 5 2. + <_> + 2 15 2 5 2. + <_> + + <_> + 18 3 2 6 -1. + <_> + 18 5 2 2 3. + <_> + + <_> + 6 6 1 3 -1. + <_> + 6 7 1 1 3. + <_> + + <_> + 7 7 7 2 -1. + <_> + 7 8 7 1 2. + <_> + + <_> + 0 3 2 6 -1. + <_> + 0 5 2 2 3. + <_> + + <_> + 11 1 3 1 -1. + <_> + 12 1 1 1 3. + <_> + + <_> + 5 0 2 6 -1. + <_> + 6 0 1 6 2. + <_> + + <_> + 1 1 18 14 -1. + <_> + 7 1 6 14 3. + <_> + + <_> + 4 6 8 3 -1. + <_> + 8 6 4 3 2. + <_> + + <_> + 9 12 6 2 -1. + <_> + 9 12 3 2 2. + <_> + + <_> + 5 12 6 2 -1. + <_> + 8 12 3 2 2. + <_> + + <_> + 10 7 3 5 -1. + <_> + 11 7 1 5 3. + <_> + + <_> + 7 7 3 5 -1. + <_> + 8 7 1 5 3. + <_> + + <_> + 13 0 3 10 -1. + <_> + 14 0 1 10 3. + <_> + + <_> + 4 11 3 2 -1. + <_> + 4 12 3 1 2. + <_> + + <_> + 17 3 3 6 -1. + <_> + 18 3 1 6 3. + <_> + + <_> + 1 8 18 10 -1. + <_> + 1 13 18 5 2. + <_> + + <_> + 13 0 3 10 -1. + <_> + 14 0 1 10 3. + <_> + + <_> + 9 14 2 3 -1. + <_> + 9 15 2 1 3. + <_> + + <_> + 16 3 3 7 -1. + <_> + 17 3 1 7 3. + <_> + + <_> + 4 0 3 10 -1. + <_> + 5 0 1 10 3. + <_> + + <_> + 16 3 3 7 -1. + <_> + 17 3 1 7 3. + <_> + + <_> + 0 9 1 2 -1. + <_> + 0 10 1 1 2. + <_> + + <_> + 18 1 2 10 -1. + <_> + 18 1 1 10 2. + <_> + + <_> + 0 1 2 10 -1. + <_> + 1 1 1 10 2. + <_> + + <_> + 10 16 3 4 -1. + <_> + 11 16 1 4 3. + <_> + + <_> + 2 8 3 3 -1. + <_> + 3 8 1 3 3. + <_> + + <_> + 11 0 2 6 -1. + <_> + 12 0 1 3 2. + <_> + 11 3 1 3 2. + <_> + + <_> + 7 0 2 6 -1. + <_> + 7 0 1 3 2. + <_> + 8 3 1 3 2. + <_> + + <_> + 16 3 3 7 -1. + <_> + 17 3 1 7 3. + <_> + + <_> + 1 3 3 7 -1. + <_> + 2 3 1 7 3. + <_> + + <_> + 14 1 6 16 -1. + <_> + 16 1 2 16 3. + <_> + + <_> + 0 1 6 16 -1. + <_> + 2 1 2 16 3. + <_> + + <_> + 2 0 16 8 -1. + <_> + 10 0 8 4 2. + <_> + 2 4 8 4 2. + <_> + + <_> + 6 8 5 3 -1. + <_> + 6 9 5 1 3. + <_> + + <_> + 9 7 3 3 -1. + <_> + 10 7 1 3 3. + <_> + + <_> + 8 8 4 3 -1. + <_> + 8 9 4 1 3. + <_> + + <_> + 9 6 2 4 -1. + <_> + 9 6 1 4 2. + <_> + + <_> + 0 7 15 1 -1. + <_> + 5 7 5 1 3. + <_> + + <_> + 8 2 7 9 -1. + <_> + 8 5 7 3 3. + <_> + + <_> + 1 7 16 4 -1. + <_> + 1 7 8 2 2. + <_> + 9 9 8 2 2. + <_> + + <_> + 6 12 8 2 -1. + <_> + 6 13 8 1 2. + <_> + + <_> + 8 11 3 3 -1. + <_> + 8 12 3 1 3. + <_> + + <_> + 4 5 14 10 -1. + <_> + 11 5 7 5 2. + <_> + 4 10 7 5 2. + <_> + + <_> + 4 12 3 2 -1. + <_> + 4 13 3 1 2. + <_> + + <_> + 9 11 6 1 -1. + <_> + 11 11 2 1 3. + <_> + + <_> + 4 9 7 6 -1. + <_> + 4 11 7 2 3. + <_> + + <_> + 7 10 6 3 -1. + <_> + 7 11 6 1 3. + <_> + + <_> + 9 11 2 2 -1. + <_> + 9 12 2 1 2. + <_> + + <_> + 0 5 20 6 -1. + <_> + 0 7 20 2 3. + <_> + + <_> + 6 4 6 1 -1. + <_> + 8 4 2 1 3. + <_> + + <_> + 9 11 6 1 -1. + <_> + 11 11 2 1 3. + <_> + + <_> + 5 11 6 1 -1. + <_> + 7 11 2 1 3. + <_> + + <_> + 10 16 3 4 -1. + <_> + 11 16 1 4 3. + <_> + + <_> + 8 7 3 3 -1. + <_> + 9 7 1 3 3. + <_> + + <_> + 2 12 16 8 -1. + <_> + 2 16 16 4 2. + <_> + + <_> + 0 15 15 2 -1. + <_> + 0 16 15 1 2. + <_> + + <_> + 15 4 5 6 -1. + <_> + 15 6 5 2 3. + <_> + + <_> + 9 5 2 4 -1. + <_> + 10 5 1 4 2. + <_> + + <_> + 8 10 9 6 -1. + <_> + 8 12 9 2 3. + <_> + + <_> + 2 19 15 1 -1. + <_> + 7 19 5 1 3. + <_> + + <_> + 10 16 3 4 -1. + <_> + 11 16 1 4 3. + <_> + + <_> + 0 15 20 4 -1. + <_> + 0 17 20 2 2. + <_> + + <_> + 10 16 3 4 -1. + <_> + 11 16 1 4 3. + <_> + + <_> + 7 16 3 4 -1. + <_> + 8 16 1 4 3. + <_> + + <_> + 9 16 3 3 -1. + <_> + 9 17 3 1 3. + <_> + + <_> + 8 11 4 6 -1. + <_> + 8 14 4 3 2. + <_> + + <_> + 9 6 2 12 -1. + <_> + 9 10 2 4 3. + <_> + + <_> + 8 17 4 3 -1. + <_> + 8 18 4 1 3. + <_> + + <_> + 9 18 8 2 -1. + <_> + 13 18 4 1 2. + <_> + 9 19 4 1 2. + <_> + + <_> + 1 18 8 2 -1. + <_> + 1 19 8 1 2. + <_> + + <_> + 13 5 6 15 -1. + <_> + 15 5 2 15 3. + <_> + + <_> + 9 8 2 2 -1. + <_> + 9 9 2 1 2. + <_> + + <_> + 9 5 2 3 -1. + <_> + 9 5 1 3 2. + <_> + + <_> + 1 5 6 15 -1. + <_> + 3 5 2 15 3. + <_> + + <_> + 4 1 14 8 -1. + <_> + 11 1 7 4 2. + <_> + 4 5 7 4 2. + <_> + + <_> + 2 4 4 16 -1. + <_> + 2 4 2 8 2. + <_> + 4 12 2 8 2. + <_> + + <_> + 12 4 3 12 -1. + <_> + 12 10 3 6 2. + <_> + + <_> + 4 5 10 12 -1. + <_> + 4 5 5 6 2. + <_> + 9 11 5 6 2. + <_> + + <_> + 9 14 2 3 -1. + <_> + 9 15 2 1 3. + <_> + + <_> + 5 4 2 3 -1. + <_> + 5 5 2 1 3. + <_> + + <_> + 12 2 4 10 -1. + <_> + 14 2 2 5 2. + <_> + 12 7 2 5 2. + <_> + + <_> + 6 4 7 3 -1. + <_> + 6 5 7 1 3. + <_> + + <_> + 2 0 18 2 -1. + <_> + 11 0 9 1 2. + <_> + 2 1 9 1 2. + <_> + + <_> + 0 0 18 2 -1. + <_> + 0 0 9 1 2. + <_> + 9 1 9 1 2. + <_> + + <_> + 13 13 4 6 -1. + <_> + 15 13 2 3 2. + <_> + 13 16 2 3 2. + <_> + + <_> + 3 13 4 6 -1. + <_> + 3 13 2 3 2. + <_> + 5 16 2 3 2. + <_> + + <_> + 10 12 2 6 -1. + <_> + 10 15 2 3 2. + <_> + + <_> + 5 9 10 10 -1. + <_> + 5 9 5 5 2. + <_> + 10 14 5 5 2. + <_> + + <_> + 11 4 4 2 -1. + <_> + 13 4 2 1 2. + <_> + 11 5 2 1 2. + <_> + + <_> + 7 12 6 8 -1. + <_> + 10 12 3 8 2. + <_> + + <_> + 12 2 4 10 -1. + <_> + 14 2 2 5 2. + <_> + 12 7 2 5 2. + <_> + + <_> + 8 11 2 1 -1. + <_> + 9 11 1 1 2. + <_> + + <_> + 10 5 1 12 -1. + <_> + 10 9 1 4 3. + <_> + + <_> + 0 11 6 9 -1. + <_> + 3 11 3 9 2. + <_> + + <_> + 12 2 4 10 -1. + <_> + 14 2 2 5 2. + <_> + 12 7 2 5 2. + <_> + + <_> + 4 2 4 10 -1. + <_> + 4 2 2 5 2. + <_> + 6 7 2 5 2. + <_> + + <_> + 11 4 4 2 -1. + <_> + 13 4 2 1 2. + <_> + 11 5 2 1 2. + <_> + + <_> + 0 14 6 3 -1. + <_> + 0 15 6 1 3. + <_> + + <_> + 11 4 4 2 -1. + <_> + 13 4 2 1 2. + <_> + 11 5 2 1 2. + <_> + + <_> + 6 1 3 2 -1. + <_> + 7 1 1 2 3. + <_> + + <_> + 11 4 4 2 -1. + <_> + 13 4 2 1 2. + <_> + 11 5 2 1 2. + <_> + + <_> + 5 4 4 2 -1. + <_> + 5 4 2 1 2. + <_> + 7 5 2 1 2. + <_> + + <_> + 13 0 2 12 -1. + <_> + 14 0 1 6 2. + <_> + 13 6 1 6 2. + <_> + + <_> + 6 0 3 10 -1. + <_> + 7 0 1 10 3. + <_> + + <_> + 3 0 17 8 -1. + <_> + 3 4 17 4 2. + <_> + + <_> + 0 4 20 4 -1. + <_> + 0 6 20 2 2. + <_> + + <_> + 0 3 8 2 -1. + <_> + 4 3 4 2 2. + <_> + + <_> + 8 11 4 3 -1. + <_> + 8 12 4 1 3. + <_> + + <_> + 5 7 6 4 -1. + <_> + 5 7 3 2 2. + <_> + 8 9 3 2 2. + <_> + + <_> + 8 3 4 9 -1. + <_> + 8 6 4 3 3. + <_> + + <_> + 8 15 1 4 -1. + <_> + 8 17 1 2 2. + <_> + + <_> + 4 5 12 7 -1. + <_> + 8 5 4 7 3. + <_> + + <_> + 4 2 4 10 -1. + <_> + 4 2 2 5 2. + <_> + 6 7 2 5 2. + <_> + + <_> + 3 0 17 2 -1. + <_> + 3 1 17 1 2. + <_> + + <_> + 2 2 16 15 -1. + <_> + 2 7 16 5 3. + <_> + + <_> + 15 2 5 2 -1. + <_> + 15 3 5 1 2. + <_> + + <_> + 9 3 2 2 -1. + <_> + 10 3 1 2 2. + <_> + + <_> + 4 5 16 15 -1. + <_> + 4 10 16 5 3. + <_> + + <_> + 7 13 5 6 -1. + <_> + 7 16 5 3 2. + <_> + + <_> + 10 7 3 2 -1. + <_> + 11 7 1 2 3. + <_> + + <_> + 8 3 3 1 -1. + <_> + 9 3 1 1 3. + <_> + + <_> + 9 16 3 3 -1. + <_> + 9 17 3 1 3. + <_> + + <_> + 0 2 5 2 -1. + <_> + 0 3 5 1 2. + <_> + + <_> + 12 5 4 3 -1. + <_> + 12 6 4 1 3. + <_> + + <_> + 1 7 12 1 -1. + <_> + 5 7 4 1 3. + <_> + + <_> + 7 5 6 14 -1. + <_> + 7 12 6 7 2. + <_> + + <_> + 0 0 8 10 -1. + <_> + 0 0 4 5 2. + <_> + 4 5 4 5 2. + <_> + + <_> + 9 1 3 2 -1. + <_> + 10 1 1 2 3. + <_> + + <_> + 8 1 3 2 -1. + <_> + 9 1 1 2 3. + <_> + + <_> + 12 4 3 3 -1. + <_> + 12 5 3 1 3. + <_> + + <_> + 7 4 6 16 -1. + <_> + 7 12 6 8 2. + <_> + + <_> + 12 4 3 3 -1. + <_> + 12 5 3 1 3. + <_> + + <_> + 2 3 2 6 -1. + <_> + 2 5 2 2 3. + <_> + + <_> + 14 2 6 9 -1. + <_> + 14 5 6 3 3. + <_> + + <_> + 5 4 3 3 -1. + <_> + 5 5 3 1 3. + <_> + + <_> + 9 17 3 2 -1. + <_> + 10 17 1 2 3. + <_> + + <_> + 5 5 2 3 -1. + <_> + 5 6 2 1 3. + <_> + + <_> + 13 11 3 6 -1. + <_> + 13 13 3 2 3. + <_> + + <_> + 3 14 2 6 -1. + <_> + 3 17 2 3 2. + <_> + + <_> + 14 3 6 2 -1. + <_> + 14 4 6 1 2. + <_> + + <_> + 0 8 16 2 -1. + <_> + 0 9 16 1 2. + <_> + + <_> + 14 3 6 2 -1. + <_> + 14 4 6 1 2. + <_> + + <_> + 0 0 5 6 -1. + <_> + 0 2 5 2 3. + <_> + + <_> + 12 5 4 3 -1. + <_> + 12 6 4 1 3. + <_> + + <_> + 4 11 3 6 -1. + <_> + 4 13 3 2 3. + <_> + + <_> + 12 5 4 3 -1. + <_> + 12 6 4 1 3. + <_> + + <_> + 9 5 1 3 -1. + <_> + 9 6 1 1 3. + <_> + + <_> + 12 5 4 3 -1. + <_> + 12 6 4 1 3. + <_> + + <_> + 6 6 8 12 -1. + <_> + 6 12 8 6 2. + <_> + + <_> + 12 5 4 3 -1. + <_> + 12 6 4 1 3. + <_> + + <_> + 5 12 9 2 -1. + <_> + 8 12 3 2 3. + <_> + + <_> + 12 5 4 3 -1. + <_> + 12 6 4 1 3. + <_> + + <_> + 4 5 4 3 -1. + <_> + 4 6 4 1 3. + <_> + + <_> + 6 6 9 2 -1. + <_> + 9 6 3 2 3. + <_> + + <_> + 4 11 1 3 -1. + <_> + 4 12 1 1 3. + <_> + + <_> + 14 12 6 6 -1. + <_> + 14 12 3 6 2. + <_> + + <_> + 7 0 3 7 -1. + <_> + 8 0 1 7 3. + <_> + + <_> + 9 8 3 3 -1. + <_> + 10 8 1 3 3. + <_> + + <_> + 8 8 3 3 -1. + <_> + 9 8 1 3 3. + <_> + + <_> + 5 10 11 3 -1. + <_> + 5 11 11 1 3. + <_> + + <_> + 5 7 10 1 -1. + <_> + 10 7 5 1 2. + <_> + + <_> + 9 7 3 2 -1. + <_> + 10 7 1 2 3. + <_> + + <_> + 8 7 3 2 -1. + <_> + 9 7 1 2 3. + <_> + + <_> + 11 9 4 2 -1. + <_> + 11 9 2 2 2. + <_> + + <_> + 5 9 4 2 -1. + <_> + 7 9 2 2 2. + <_> + + <_> + 14 10 2 4 -1. + <_> + 14 12 2 2 2. + <_> + + <_> + 7 7 3 2 -1. + <_> + 8 7 1 2 3. + <_> + + <_> + 14 17 6 3 -1. + <_> + 14 18 6 1 3. + <_> + + <_> + 4 5 12 12 -1. + <_> + 4 5 6 6 2. + <_> + 10 11 6 6 2. + <_> + + <_> + 6 9 8 8 -1. + <_> + 10 9 4 4 2. + <_> + 6 13 4 4 2. + <_> + + <_> + 0 4 15 4 -1. + <_> + 5 4 5 4 3. + <_> + + <_> + 13 2 4 1 -1. + <_> + 13 2 2 1 2. + <_> + + <_> + 4 12 2 2 -1. + <_> + 4 13 2 1 2. + <_> + + <_> + 8 13 4 3 -1. + <_> + 8 14 4 1 3. + <_> + + <_> + 9 13 2 3 -1. + <_> + 9 14 2 1 3. + <_> + + <_> + 13 11 2 3 -1. + <_> + 13 12 2 1 3. + <_> + + <_> + 7 12 4 4 -1. + <_> + 7 12 2 2 2. + <_> + 9 14 2 2 2. + <_> + + <_> + 10 11 2 2 -1. + <_> + 11 11 1 1 2. + <_> + 10 12 1 1 2. + <_> + + <_> + 8 17 3 2 -1. + <_> + 9 17 1 2 3. + <_> + + <_> + 10 11 2 2 -1. + <_> + 11 11 1 1 2. + <_> + 10 12 1 1 2. + <_> + + <_> + 0 17 6 3 -1. + <_> + 0 18 6 1 3. + <_> + + <_> + 10 11 2 2 -1. + <_> + 11 11 1 1 2. + <_> + 10 12 1 1 2. + <_> + + <_> + 8 11 2 2 -1. + <_> + 8 11 1 1 2. + <_> + 9 12 1 1 2. + <_> + + <_> + 12 5 8 4 -1. + <_> + 12 5 4 4 2. + <_> + + <_> + 0 5 8 4 -1. + <_> + 4 5 4 4 2. + <_> + + <_> + 13 2 4 1 -1. + <_> + 13 2 2 1 2. + <_> + + <_> + 3 2 4 1 -1. + <_> + 5 2 2 1 2. + <_> + + <_> + 10 0 4 2 -1. + <_> + 12 0 2 1 2. + <_> + 10 1 2 1 2. + <_> + + <_> + 7 12 3 1 -1. + <_> + 8 12 1 1 3. + <_> + + <_> + 8 11 4 8 -1. + <_> + 10 11 2 4 2. + <_> + 8 15 2 4 2. + <_> + + <_> + 9 9 2 2 -1. + <_> + 9 10 2 1 2. + <_> + + <_> + 3 18 15 2 -1. + <_> + 3 19 15 1 2. + <_> + + <_> + 2 6 2 12 -1. + <_> + 2 6 1 6 2. + <_> + 3 12 1 6 2. + <_> + + <_> + 9 8 2 3 -1. + <_> + 9 9 2 1 3. + <_> + + <_> + 7 10 3 2 -1. + <_> + 8 10 1 2 3. + <_> + + <_> + 11 11 3 1 -1. + <_> + 12 11 1 1 3. + <_> + + <_> + 6 11 3 1 -1. + <_> + 7 11 1 1 3. + <_> + + <_> + 9 2 4 2 -1. + <_> + 11 2 2 1 2. + <_> + 9 3 2 1 2. + <_> + + <_> + 4 12 2 3 -1. + <_> + 4 13 2 1 3. + <_> + + <_> + 2 1 18 3 -1. + <_> + 8 1 6 3 3. + <_> + + <_> + 5 1 4 14 -1. + <_> + 7 1 2 14 2. + <_> + + <_> + 8 16 12 3 -1. + <_> + 8 16 6 3 2. + <_> + + <_> + 1 17 18 3 -1. + <_> + 7 17 6 3 3. + <_> + + <_> + 9 14 2 6 -1. + <_> + 9 17 2 3 2. + <_> + + <_> + 9 12 1 8 -1. + <_> + 9 16 1 4 2. + <_> + + <_> + 9 14 2 3 -1. + <_> + 9 15 2 1 3. + <_> + + <_> + 9 6 2 12 -1. + <_> + 9 10 2 4 3. + <_> + + <_> + 12 9 3 3 -1. + <_> + 12 10 3 1 3. + <_> + + <_> + 0 1 4 8 -1. + <_> + 2 1 2 8 2. + <_> + + <_> + 9 1 6 2 -1. + <_> + 12 1 3 1 2. + <_> + 9 2 3 1 2. + <_> + + <_> + 1 3 12 14 -1. + <_> + 1 10 12 7 2. + <_> + + <_> + 8 12 4 2 -1. + <_> + 10 12 2 1 2. + <_> + 8 13 2 1 2. + <_> + + <_> + 1 9 10 2 -1. + <_> + 1 9 5 1 2. + <_> + 6 10 5 1 2. + <_> + + <_> + 8 15 4 3 -1. + <_> + 8 16 4 1 3. + <_> + + <_> + 6 8 8 3 -1. + <_> + 6 9 8 1 3. + <_> + + <_> + 9 15 5 3 -1. + <_> + 9 16 5 1 3. + <_> + + <_> + 8 7 4 3 -1. + <_> + 8 8 4 1 3. + <_> + + <_> + 7 7 6 2 -1. + <_> + 7 8 6 1 2. + <_> + + <_> + 5 7 8 2 -1. + <_> + 5 7 4 1 2. + <_> + 9 8 4 1 2. + <_> + + <_> + 12 9 3 3 -1. + <_> + 12 10 3 1 3. + <_> + + <_> + 4 7 4 2 -1. + <_> + 4 8 4 1 2. + <_> + + <_> + 14 2 6 9 -1. + <_> + 14 5 6 3 3. + <_> + + <_> + 4 9 3 3 -1. + <_> + 5 9 1 3 3. + <_> + + <_> + 12 9 3 3 -1. + <_> + 12 10 3 1 3. + <_> + + <_> + 0 2 6 9 -1. + <_> + 0 5 6 3 3. + <_> + + <_> + 17 3 3 6 -1. + <_> + 18 3 1 6 3. + <_> + + <_> + 0 3 3 6 -1. + <_> + 1 3 1 6 3. + <_> + + <_> + 17 14 1 2 -1. + <_> + 17 15 1 1 2. + <_> + + <_> + 4 9 4 3 -1. + <_> + 6 9 2 3 2. + <_> + + <_> + 12 9 3 3 -1. + <_> + 12 10 3 1 3. + <_> + + <_> + 5 9 3 3 -1. + <_> + 5 10 3 1 3. + <_> + + <_> + 9 5 6 8 -1. + <_> + 12 5 3 4 2. + <_> + 9 9 3 4 2. + <_> + + <_> + 5 5 6 8 -1. + <_> + 5 5 3 4 2. + <_> + 8 9 3 4 2. + <_> + + <_> + 16 1 4 6 -1. + <_> + 16 4 4 3 2. + <_> + + <_> + 1 0 6 20 -1. + <_> + 3 0 2 20 3. + <_> + + <_> + 12 11 3 2 -1. + <_> + 13 11 1 2 3. + <_> + + <_> + 5 11 3 2 -1. + <_> + 6 11 1 2 3. + <_> + + <_> + 9 4 6 1 -1. + <_> + 11 4 2 1 3. + <_> + + <_> + 0 0 8 3 -1. + <_> + 4 0 4 3 2. + <_> + + <_> + 15 0 2 5 -1. + <_> + 15 0 1 5 2. + <_> + + <_> + 4 1 3 2 -1. + <_> + 5 1 1 2 3. + <_> + + <_> + 7 0 6 15 -1. + <_> + 9 0 2 15 3. + <_> + + <_> + 6 11 3 1 -1. + <_> + 7 11 1 1 3. + <_> + + <_> + 12 0 3 4 -1. + <_> + 13 0 1 4 3. + <_> + + <_> + 5 4 6 1 -1. + <_> + 7 4 2 1 3. + <_> + + <_> + 12 7 3 2 -1. + <_> + 12 8 3 1 2. + <_> + + <_> + 0 1 4 6 -1. + <_> + 0 4 4 3 2. + <_> + + <_> + 12 7 3 2 -1. + <_> + 12 8 3 1 2. + <_> + + <_> + 2 16 3 3 -1. + <_> + 2 17 3 1 3. + <_> + + <_> + 13 8 6 10 -1. + <_> + 16 8 3 5 2. + <_> + 13 13 3 5 2. + <_> + + <_> + 0 9 5 2 -1. + <_> + 0 10 5 1 2. + <_> + + <_> + 12 11 2 2 -1. + <_> + 13 11 1 1 2. + <_> + 12 12 1 1 2. + <_> + + <_> + 3 15 3 3 -1. + <_> + 3 16 3 1 3. + <_> + + <_> + 12 7 3 2 -1. + <_> + 12 8 3 1 2. + <_> + + <_> + 5 7 3 2 -1. + <_> + 5 8 3 1 2. + <_> + + <_> + 9 5 9 9 -1. + <_> + 9 8 9 3 3. + <_> + + <_> + 5 0 3 7 -1. + <_> + 6 0 1 7 3. + <_> + + <_> + 5 2 12 5 -1. + <_> + 9 2 4 5 3. + <_> + + <_> + 6 11 2 2 -1. + <_> + 6 11 1 1 2. + <_> + 7 12 1 1 2. + <_> + + <_> + 15 15 3 2 -1. + <_> + 15 16 3 1 2. + <_> + + <_> + 2 15 3 2 -1. + <_> + 2 16 3 1 2. + <_> + + <_> + 14 12 6 8 -1. + <_> + 17 12 3 4 2. + <_> + 14 16 3 4 2. + <_> + + <_> + 2 8 15 6 -1. + <_> + 7 8 5 6 3. + <_> + + <_> + 2 2 18 17 -1. + <_> + 8 2 6 17 3. + <_> + + <_> + 5 1 4 1 -1. + <_> + 7 1 2 1 2. + <_> + + <_> + 5 2 12 5 -1. + <_> + 9 2 4 5 3. + <_> + + <_> + 3 2 12 5 -1. + <_> + 7 2 4 5 3. + <_> + + <_> + 4 9 12 4 -1. + <_> + 10 9 6 2 2. + <_> + 4 11 6 2 2. + <_> + + <_> + 5 15 6 2 -1. + <_> + 5 15 3 1 2. + <_> + 8 16 3 1 2. + <_> + + <_> + 10 14 2 3 -1. + <_> + 10 15 2 1 3. + <_> + + <_> + 0 13 20 2 -1. + <_> + 0 13 10 1 2. + <_> + 10 14 10 1 2. + <_> + + <_> + 4 9 12 8 -1. + <_> + 10 9 6 4 2. + <_> + 4 13 6 4 2. + <_> + + <_> + 8 13 3 6 -1. + <_> + 8 16 3 3 2. + <_> + + <_> + 10 12 2 2 -1. + <_> + 10 13 2 1 2. + <_> + + <_> + 9 12 2 2 -1. + <_> + 9 12 1 1 2. + <_> + 10 13 1 1 2. + <_> + + <_> + 4 11 14 4 -1. + <_> + 11 11 7 2 2. + <_> + 4 13 7 2 2. + <_> + + <_> + 8 5 4 2 -1. + <_> + 8 6 4 1 2. + <_> + + <_> + 10 10 6 3 -1. + <_> + 12 10 2 3 3. + <_> + + <_> + 2 14 1 2 -1. + <_> + 2 15 1 1 2. + <_> + + <_> + 13 8 6 12 -1. + <_> + 16 8 3 6 2. + <_> + 13 14 3 6 2. + <_> + + <_> + 1 8 6 12 -1. + <_> + 1 8 3 6 2. + <_> + 4 14 3 6 2. + <_> + + <_> + 10 0 6 10 -1. + <_> + 12 0 2 10 3. + <_> + + <_> + 5 11 8 4 -1. + <_> + 5 11 4 2 2. + <_> + 9 13 4 2 2. + <_> + + <_> + 10 16 8 4 -1. + <_> + 14 16 4 2 2. + <_> + 10 18 4 2 2. + <_> + + <_> + 7 7 6 6 -1. + <_> + 9 7 2 6 3. + <_> + + <_> + 10 2 4 10 -1. + <_> + 10 2 2 10 2. + <_> + + <_> + 6 1 4 9 -1. + <_> + 8 1 2 9 2. + <_> + + <_> + 12 19 2 1 -1. + <_> + 12 19 1 1 2. + <_> + + <_> + 1 2 4 9 -1. + <_> + 3 2 2 9 2. + <_> + + <_> + 7 5 6 4 -1. + <_> + 9 5 2 4 3. + <_> + + <_> + 9 4 2 4 -1. + <_> + 9 6 2 2 2. + <_> + + <_> + 14 5 2 8 -1. + <_> + 14 9 2 4 2. + <_> + + <_> + 7 6 5 12 -1. + <_> + 7 12 5 6 2. + <_> + + <_> + 14 6 2 6 -1. + <_> + 14 9 2 3 2. + <_> + + <_> + 4 6 2 6 -1. + <_> + 4 9 2 3 2. + <_> + + <_> + 8 15 10 4 -1. + <_> + 13 15 5 2 2. + <_> + 8 17 5 2 2. + <_> + + <_> + 6 18 2 2 -1. + <_> + 7 18 1 2 2. + <_> + + <_> + 11 3 6 2 -1. + <_> + 11 4 6 1 2. + <_> + + <_> + 2 0 16 6 -1. + <_> + 2 2 16 2 3. + <_> + + <_> + 11 3 6 2 -1. + <_> + 11 4 6 1 2. + <_> + + <_> + 4 11 10 3 -1. + <_> + 4 12 10 1 3. + <_> + + <_> + 11 3 6 2 -1. + <_> + 11 4 6 1 2. + <_> + + <_> + 3 3 6 2 -1. + <_> + 3 4 6 1 2. + <_> + + <_> + 16 0 4 7 -1. + <_> + 16 0 2 7 2. + <_> + + <_> + 0 14 9 6 -1. + <_> + 0 16 9 2 3. + <_> + + <_> + 9 16 3 3 -1. + <_> + 9 17 3 1 3. + <_> + + <_> + 4 6 6 2 -1. + <_> + 6 6 2 2 3. + <_> + + <_> + 15 11 1 3 -1. + <_> + 15 12 1 1 3. + <_> + + <_> + 5 5 2 3 -1. + <_> + 5 6 2 1 3. + <_> + + <_> + 10 9 2 2 -1. + <_> + 10 10 2 1 2. + <_> + + <_> + 3 1 4 3 -1. + <_> + 5 1 2 3 2. + <_> + + <_> + 16 0 4 7 -1. + <_> + 16 0 2 7 2. + <_> + + <_> + 0 0 20 1 -1. + <_> + 10 0 10 1 2. + <_> + + <_> + 15 11 1 3 -1. + <_> + 15 12 1 1 3. + <_> + + <_> + 0 4 3 4 -1. + <_> + 1 4 1 4 3. + <_> + + <_> + 16 3 3 6 -1. + <_> + 16 5 3 2 3. + <_> + + <_> + 1 3 3 6 -1. + <_> + 1 5 3 2 3. + <_> + + <_> + 6 2 12 6 -1. + <_> + 12 2 6 3 2. + <_> + 6 5 6 3 2. + <_> + + <_> + 8 10 4 3 -1. + <_> + 8 11 4 1 3. + <_> + + <_> + 4 2 14 6 -1. + <_> + 11 2 7 3 2. + <_> + 4 5 7 3 2. + <_> + + <_> + 9 11 2 3 -1. + <_> + 9 12 2 1 3. + <_> + + <_> + 15 13 2 3 -1. + <_> + 15 14 2 1 3. + <_> + + <_> + 8 12 4 3 -1. + <_> + 8 13 4 1 3. + <_> + + <_> + 15 11 1 3 -1. + <_> + 15 12 1 1 3. + <_> + + <_> + 7 13 5 2 -1. + <_> + 7 14 5 1 2. + <_> + + <_> + 7 12 6 3 -1. + <_> + 7 13 6 1 3. + <_> + + <_> + 5 11 4 4 -1. + <_> + 5 13 4 2 2. + <_> + + <_> + 11 4 3 3 -1. + <_> + 12 4 1 3 3. + <_> + + <_> + 6 4 3 3 -1. + <_> + 7 4 1 3 3. + <_> + + <_> + 16 5 3 6 -1. + <_> + 17 5 1 6 3. + <_> + + <_> + 3 6 12 7 -1. + <_> + 7 6 4 7 3. + <_> + + <_> + 16 5 3 6 -1. + <_> + 17 5 1 6 3. + <_> + + <_> + 3 13 2 3 -1. + <_> + 3 14 2 1 3. + <_> + + <_> + 16 5 3 6 -1. + <_> + 17 5 1 6 3. + <_> + + <_> + 1 5 3 6 -1. + <_> + 2 5 1 6 3. + <_> + + <_> + 1 9 18 1 -1. + <_> + 7 9 6 1 3. + <_> + + <_> + 0 9 8 7 -1. + <_> + 4 9 4 7 2. + <_> + + <_> + 12 11 8 2 -1. + <_> + 12 12 8 1 2. + <_> + + <_> + 0 11 8 2 -1. + <_> + 0 12 8 1 2. + <_> + + <_> + 9 13 2 3 -1. + <_> + 9 14 2 1 3. + <_> + + <_> + 4 10 12 4 -1. + <_> + 4 10 6 2 2. + <_> + 10 12 6 2 2. + <_> + + <_> + 9 3 3 7 -1. + <_> + 10 3 1 7 3. + <_> + + <_> + 7 2 3 5 -1. + <_> + 8 2 1 5 3. + <_> + + <_> + 9 12 4 6 -1. + <_> + 11 12 2 3 2. + <_> + 9 15 2 3 2. + <_> + + <_> + 8 7 3 6 -1. + <_> + 9 7 1 6 3. + <_> + + <_> + 15 4 4 2 -1. + <_> + 15 5 4 1 2. + <_> + + <_> + 8 7 3 3 -1. + <_> + 9 7 1 3 3. + <_> + + <_> + 14 2 6 4 -1. + <_> + 14 4 6 2 2. + <_> + + <_> + 7 16 6 1 -1. + <_> + 9 16 2 1 3. + <_> + + <_> + 15 13 2 3 -1. + <_> + 15 14 2 1 3. + <_> + + <_> + 8 7 3 10 -1. + <_> + 9 7 1 10 3. + <_> + + <_> + 11 10 2 6 -1. + <_> + 11 12 2 2 3. + <_> + + <_> + 6 10 4 1 -1. + <_> + 8 10 2 1 2. + <_> + + <_> + 10 9 2 2 -1. + <_> + 10 10 2 1 2. + <_> + + <_> + 8 9 2 2 -1. + <_> + 8 10 2 1 2. + <_> + + <_> + 12 7 2 2 -1. + <_> + 13 7 1 1 2. + <_> + 12 8 1 1 2. + <_> + + <_> + 5 7 2 2 -1. + <_> + 5 7 1 1 2. + <_> + 6 8 1 1 2. + <_> + + <_> + 13 0 3 14 -1. + <_> + 14 0 1 14 3. + <_> + + <_> + 4 0 3 14 -1. + <_> + 5 0 1 14 3. + <_> + + <_> + 13 4 3 14 -1. + <_> + 14 4 1 14 3. + <_> + + <_> + 9 14 2 3 -1. + <_> + 9 15 2 1 3. + <_> + + <_> + 8 14 4 3 -1. + <_> + 8 15 4 1 3. + <_> + + <_> + 4 2 3 16 -1. + <_> + 5 2 1 16 3. + <_> + + <_> + 7 2 8 10 -1. + <_> + 7 7 8 5 2. + <_> + + <_> + 6 14 7 3 -1. + <_> + 6 15 7 1 3. + <_> + + <_> + 9 2 10 12 -1. + <_> + 14 2 5 6 2. + <_> + 9 8 5 6 2. + <_> + + <_> + 6 7 8 2 -1. + <_> + 6 8 8 1 2. + <_> + + <_> + 8 13 4 6 -1. + <_> + 8 16 4 3 2. + <_> + + <_> + 6 6 1 3 -1. + <_> + 6 7 1 1 3. + <_> + + <_> + 16 2 4 6 -1. + <_> + 16 4 4 2 3. + <_> + + <_> + 6 6 4 2 -1. + <_> + 6 6 2 1 2. + <_> + 8 7 2 1 2. + <_> + + <_> + 16 2 4 6 -1. + <_> + 16 4 4 2 3. + <_> + + <_> + 0 2 4 6 -1. + <_> + 0 4 4 2 3. + <_> + + <_> + 9 6 2 6 -1. + <_> + 9 6 1 6 2. + <_> + + <_> + 3 4 6 10 -1. + <_> + 3 9 6 5 2. + <_> + + <_> + 9 5 2 6 -1. + <_> + 9 5 1 6 2. + <_> + + <_> + 3 13 2 3 -1. + <_> + 3 14 2 1 3. + <_> + + <_> + 13 13 3 2 -1. + <_> + 13 14 3 1 2. + <_> + + <_> + 2 16 10 4 -1. + <_> + 2 16 5 2 2. + <_> + 7 18 5 2 2. + <_> + + <_> + 5 6 10 6 -1. + <_> + 10 6 5 3 2. + <_> + 5 9 5 3 2. + <_> + + <_> + 7 14 1 3 -1. + <_> + 7 15 1 1 3. + <_> + + <_> + 14 16 6 3 -1. + <_> + 14 17 6 1 3. + <_> + + <_> + 5 4 3 3 -1. + <_> + 5 5 3 1 3. + <_> + + <_> + 7 4 10 3 -1. + <_> + 7 5 10 1 3. + <_> + + <_> + 0 4 5 4 -1. + <_> + 0 6 5 2 2. + <_> + + <_> + 13 11 3 9 -1. + <_> + 13 14 3 3 3. + <_> + + <_> + 4 11 3 9 -1. + <_> + 4 14 3 3 3. + <_> + + <_> + 9 7 2 1 -1. + <_> + 9 7 1 1 2. + <_> + + <_> + 5 0 6 17 -1. + <_> + 7 0 2 17 3. + <_> + + <_> + 10 3 6 3 -1. + <_> + 10 3 3 3 2. + <_> + + <_> + 2 2 15 4 -1. + <_> + 7 2 5 4 3. + <_> + + <_> + 8 2 8 2 -1. + <_> + 12 2 4 1 2. + <_> + 8 3 4 1 2. + <_> + + <_> + 8 1 3 6 -1. + <_> + 8 3 3 2 3. + <_> + + <_> + 9 17 2 2 -1. + <_> + 9 18 2 1 2. + <_> + + <_> + 0 0 2 14 -1. + <_> + 1 0 1 14 2. + <_> + + <_> + 12 0 7 3 -1. + <_> + 12 1 7 1 3. + <_> + + <_> + 1 14 1 2 -1. + <_> + 1 15 1 1 2. + <_> + + <_> + 14 12 2 8 -1. + <_> + 15 12 1 4 2. + <_> + 14 16 1 4 2. + <_> + + <_> + 1 0 7 3 -1. + <_> + 1 1 7 1 3. + <_> + + <_> + 14 12 2 8 -1. + <_> + 15 12 1 4 2. + <_> + 14 16 1 4 2. + <_> + + <_> + 6 0 8 12 -1. + <_> + 6 0 4 6 2. + <_> + 10 6 4 6 2. + <_> + + <_> + 6 1 8 9 -1. + <_> + 6 4 8 3 3. + <_> + + <_> + 5 2 2 2 -1. + <_> + 5 3 2 1 2. + <_> + + <_> + 13 14 6 6 -1. + <_> + 16 14 3 3 2. + <_> + 13 17 3 3 2. + <_> + + <_> + 0 17 20 2 -1. + <_> + 0 17 10 1 2. + <_> + 10 18 10 1 2. + <_> + + <_> + 10 3 2 6 -1. + <_> + 11 3 1 3 2. + <_> + 10 6 1 3 2. + <_> + + <_> + 5 12 6 2 -1. + <_> + 8 12 3 2 2. + <_> + + <_> + 10 7 6 13 -1. + <_> + 10 7 3 13 2. + <_> + + <_> + 5 15 10 5 -1. + <_> + 10 15 5 5 2. + <_> + + <_> + 10 4 4 10 -1. + <_> + 10 4 2 10 2. + <_> + + <_> + 5 7 2 1 -1. + <_> + 6 7 1 1 2. + <_> + + <_> + 10 3 6 7 -1. + <_> + 10 3 3 7 2. + <_> + + <_> + 4 3 6 7 -1. + <_> + 7 3 3 7 2. + <_> + + <_> + 1 7 18 5 -1. + <_> + 7 7 6 5 3. + <_> + + <_> + 3 17 4 3 -1. + <_> + 5 17 2 3 2. + <_> + + <_> + 8 14 12 6 -1. + <_> + 14 14 6 3 2. + <_> + 8 17 6 3 2. + <_> + + <_> + 0 13 20 4 -1. + <_> + 0 13 10 2 2. + <_> + 10 15 10 2 2. + <_> + + <_> + 4 5 14 2 -1. + <_> + 11 5 7 1 2. + <_> + 4 6 7 1 2. + <_> + + <_> + 1 2 10 12 -1. + <_> + 1 2 5 6 2. + <_> + 6 8 5 6 2. + <_> + + <_> + 6 1 14 3 -1. + <_> + 6 2 14 1 3. + <_> + + <_> + 8 16 2 3 -1. + <_> + 8 17 2 1 3. + <_> + + <_> + 9 17 3 2 -1. + <_> + 10 17 1 2 3. + <_> + + <_> + 5 15 4 2 -1. + <_> + 5 15 2 1 2. + <_> + 7 16 2 1 2. + <_> + + <_> + 10 15 1 3 -1. + <_> + 10 16 1 1 3. + <_> + + <_> + 8 16 4 4 -1. + <_> + 8 16 2 2 2. + <_> + 10 18 2 2 2. + <_> + + <_> + 6 11 8 6 -1. + <_> + 6 14 8 3 2. + <_> + + <_> + 2 13 5 2 -1. + <_> + 2 14 5 1 2. + <_> + + <_> + 13 14 6 6 -1. + <_> + 16 14 3 3 2. + <_> + 13 17 3 3 2. + <_> + + <_> + 1 9 18 4 -1. + <_> + 7 9 6 4 3. + <_> + + <_> + 13 14 6 6 -1. + <_> + 16 14 3 3 2. + <_> + 13 17 3 3 2. + <_> + + <_> + 0 2 1 6 -1. + <_> + 0 4 1 2 3. + <_> + + <_> + 5 0 15 20 -1. + <_> + 5 10 15 10 2. + <_> + + <_> + 1 14 6 6 -1. + <_> + 1 14 3 3 2. + <_> + 4 17 3 3 2. + <_> + + <_> + 8 14 4 6 -1. + <_> + 10 14 2 3 2. + <_> + 8 17 2 3 2. + <_> + + <_> + 7 11 2 1 -1. + <_> + 8 11 1 1 2. + <_> + + <_> + 9 17 3 2 -1. + <_> + 10 17 1 2 3. + <_> + + <_> + 8 17 3 2 -1. + <_> + 9 17 1 2 3. + <_> + + <_> + 12 14 4 6 -1. + <_> + 14 14 2 3 2. + <_> + 12 17 2 3 2. + <_> + + <_> + 4 14 4 6 -1. + <_> + 4 14 2 3 2. + <_> + 6 17 2 3 2. + <_> + + <_> + 13 14 2 6 -1. + <_> + 14 14 1 3 2. + <_> + 13 17 1 3 2. + <_> + + <_> + 5 14 2 6 -1. + <_> + 5 14 1 3 2. + <_> + 6 17 1 3 2. + <_> + + <_> + 7 0 6 12 -1. + <_> + 7 4 6 4 3. + <_> + + <_> + 0 7 12 2 -1. + <_> + 4 7 4 2 3. + <_> + + <_> + 10 3 3 13 -1. + <_> + 11 3 1 13 3. + <_> + + <_> + 7 3 3 13 -1. + <_> + 8 3 1 13 3. + <_> + + <_> + 10 8 6 3 -1. + <_> + 10 9 6 1 3. + <_> + + <_> + 3 11 3 2 -1. + <_> + 4 11 1 2 3. + <_> + + <_> + 13 12 6 8 -1. + <_> + 16 12 3 4 2. + <_> + 13 16 3 4 2. + <_> + + <_> + 7 6 6 5 -1. + <_> + 9 6 2 5 3. + <_> + + <_> + 17 11 2 7 -1. + <_> + 17 11 1 7 2. + <_> + + <_> + 3 13 8 2 -1. + <_> + 7 13 4 2 2. + <_> + + <_> + 6 9 8 3 -1. + <_> + 6 10 8 1 3. + <_> + + <_> + 4 3 4 3 -1. + <_> + 4 4 4 1 3. + <_> + + <_> + 11 3 4 3 -1. + <_> + 11 4 4 1 3. + <_> + + <_> + 1 4 17 12 -1. + <_> + 1 8 17 4 3. + <_> + + <_> + 11 3 4 3 -1. + <_> + 11 4 4 1 3. + <_> + + <_> + 4 8 6 3 -1. + <_> + 4 9 6 1 3. + <_> + + <_> + 12 3 5 3 -1. + <_> + 12 4 5 1 3. + <_> + + <_> + 1 11 2 7 -1. + <_> + 2 11 1 7 2. + <_> + + <_> + 15 12 2 8 -1. + <_> + 16 12 1 4 2. + <_> + 15 16 1 4 2. + <_> + + <_> + 4 8 11 3 -1. + <_> + 4 9 11 1 3. + <_> + + <_> + 9 13 6 2 -1. + <_> + 12 13 3 1 2. + <_> + 9 14 3 1 2. + <_> + + <_> + 6 13 4 3 -1. + <_> + 6 14 4 1 3. + <_> + + <_> + 9 12 3 3 -1. + <_> + 10 12 1 3 3. + <_> + + <_> + 5 3 3 3 -1. + <_> + 5 4 3 1 3. + <_> + + <_> + 9 4 2 3 -1. + <_> + 9 5 2 1 3. + <_> + + <_> + 0 2 16 3 -1. + <_> + 0 3 16 1 3. + <_> + + <_> + 15 12 2 8 -1. + <_> + 16 12 1 4 2. + <_> + 15 16 1 4 2. + <_> + + <_> + 3 12 2 8 -1. + <_> + 3 12 1 4 2. + <_> + 4 16 1 4 2. + <_> + + <_> + 14 13 3 6 -1. + <_> + 14 15 3 2 3. + <_> + + <_> + 3 13 3 6 -1. + <_> + 3 15 3 2 3. + <_> + + <_> + 6 5 10 2 -1. + <_> + 11 5 5 1 2. + <_> + 6 6 5 1 2. + <_> + + <_> + 2 14 14 6 -1. + <_> + 2 17 14 3 2. + <_> + + <_> + 10 14 1 3 -1. + <_> + 10 15 1 1 3. + <_> + + <_> + 4 16 2 2 -1. + <_> + 4 16 1 1 2. + <_> + 5 17 1 1 2. + <_> + + <_> + 10 6 2 3 -1. + <_> + 10 7 2 1 3. + <_> + + <_> + 0 17 20 2 -1. + <_> + 0 17 10 1 2. + <_> + 10 18 10 1 2. + <_> + + <_> + 13 6 1 3 -1. + <_> + 13 7 1 1 3. + <_> + + <_> + 8 13 3 2 -1. + <_> + 9 13 1 2 3. + <_> + + <_> + 12 2 3 3 -1. + <_> + 13 2 1 3 3. + <_> + + <_> + 3 18 2 2 -1. + <_> + 3 18 1 1 2. + <_> + 4 19 1 1 2. + <_> + + <_> + 9 16 3 4 -1. + <_> + 10 16 1 4 3. + <_> + + <_> + 6 6 1 3 -1. + <_> + 6 7 1 1 3. + <_> + + <_> + 13 1 5 2 -1. + <_> + 13 2 5 1 2. + <_> + + <_> + 7 14 6 2 -1. + <_> + 7 14 3 1 2. + <_> + 10 15 3 1 2. + <_> + + <_> + 11 3 3 4 -1. + <_> + 12 3 1 4 3. + <_> + + <_> + 1 13 12 6 -1. + <_> + 5 13 4 6 3. + <_> + + <_> + 14 11 5 2 -1. + <_> + 14 12 5 1 2. + <_> + + <_> + 2 15 14 4 -1. + <_> + 2 15 7 2 2. + <_> + 9 17 7 2 2. + <_> + + <_> + 3 7 14 2 -1. + <_> + 10 7 7 1 2. + <_> + 3 8 7 1 2. + <_> + + <_> + 1 11 4 2 -1. + <_> + 1 12 4 1 2. + <_> + + <_> + 14 0 6 14 -1. + <_> + 16 0 2 14 3. + <_> + + <_> + 4 11 1 3 -1. + <_> + 4 12 1 1 3. + <_> + + <_> + 14 0 6 14 -1. + <_> + 16 0 2 14 3. + <_> + + <_> + 1 10 3 7 -1. + <_> + 2 10 1 7 3. + <_> + + <_> + 8 12 9 2 -1. + <_> + 8 13 9 1 2. + <_> + + <_> + 0 6 20 1 -1. + <_> + 10 6 10 1 2. + <_> + + <_> + 8 4 4 4 -1. + <_> + 8 4 2 4 2. + <_> + + <_> + 0 0 2 2 -1. + <_> + 0 1 2 1 2. + <_> + + <_> + 5 3 10 9 -1. + <_> + 5 6 10 3 3. + <_> + + <_> + 15 2 4 10 -1. + <_> + 15 2 2 10 2. + <_> + + <_> + 8 2 2 7 -1. + <_> + 9 2 1 7 2. + <_> + + <_> + 7 4 12 1 -1. + <_> + 11 4 4 1 3. + <_> + + <_> + 3 4 9 1 -1. + <_> + 6 4 3 1 3. + <_> + + <_> + 15 10 1 4 -1. + <_> + 15 12 1 2 2. + <_> + + <_> + 4 10 6 4 -1. + <_> + 7 10 3 4 2. + <_> + + <_> + 15 9 1 6 -1. + <_> + 15 12 1 3 2. + <_> + + <_> + 7 17 6 3 -1. + <_> + 7 18 6 1 3. + <_> + + <_> + 14 3 2 16 -1. + <_> + 15 3 1 8 2. + <_> + 14 11 1 8 2. + <_> + + <_> + 4 9 1 6 -1. + <_> + 4 12 1 3 2. + <_> + + <_> + 12 1 5 2 -1. + <_> + 12 2 5 1 2. + <_> + + <_> + 6 18 4 2 -1. + <_> + 6 18 2 1 2. + <_> + 8 19 2 1 2. + <_> + + <_> + 2 4 16 10 -1. + <_> + 10 4 8 5 2. + <_> + 2 9 8 5 2. + <_> + + <_> + 6 5 1 10 -1. + <_> + 6 10 1 5 2. + <_> + + <_> + 4 8 15 2 -1. + <_> + 9 8 5 2 3. + <_> + + <_> + 1 8 15 2 -1. + <_> + 6 8 5 2 3. + <_> + + <_> + 9 5 3 6 -1. + <_> + 9 7 3 2 3. + <_> + + <_> + 5 7 8 2 -1. + <_> + 9 7 4 2 2. + <_> + + <_> + 9 11 2 3 -1. + <_> + 9 12 2 1 3. + <_> + + <_> + 1 0 16 3 -1. + <_> + 1 1 16 1 3. + <_> + + <_> + 11 2 7 2 -1. + <_> + 11 3 7 1 2. + <_> + + <_> + 5 1 10 18 -1. + <_> + 5 7 10 6 3. + <_> + + <_> + 17 4 3 2 -1. + <_> + 18 4 1 2 3. + <_> + + <_> + 8 13 1 3 -1. + <_> + 8 14 1 1 3. + <_> + + <_> + 3 14 14 6 -1. + <_> + 3 16 14 2 3. + <_> + + <_> + 0 2 3 4 -1. + <_> + 1 2 1 4 3. + <_> + + <_> + 12 1 5 2 -1. + <_> + 12 2 5 1 2. + <_> + + <_> + 3 1 5 2 -1. + <_> + 3 2 5 1 2. + <_> + + <_> + 10 13 2 3 -1. + <_> + 10 14 2 1 3. + <_> + + <_> + 8 13 2 3 -1. + <_> + 8 14 2 1 3. + <_> + + <_> + 14 12 2 3 -1. + <_> + 14 13 2 1 3. + <_> + + <_> + 7 2 2 3 -1. + <_> + 7 3 2 1 3. + <_> + + <_> + 5 6 10 4 -1. + <_> + 10 6 5 2 2. + <_> + 5 8 5 2 2. + <_> + + <_> + 9 13 1 6 -1. + <_> + 9 16 1 3 2. + <_> + + <_> + 10 12 2 2 -1. + <_> + 11 12 1 1 2. + <_> + 10 13 1 1 2. + <_> + + <_> + 4 12 2 3 -1. + <_> + 4 13 2 1 3. + <_> + + <_> + 14 4 6 6 -1. + <_> + 14 6 6 2 3. + <_> + + <_> + 8 17 2 3 -1. + <_> + 8 18 2 1 3. + <_> + + <_> + 16 4 4 6 -1. + <_> + 16 6 4 2 3. + <_> + + <_> + 0 4 4 6 -1. + <_> + 0 6 4 2 3. + <_> + + <_> + 14 6 2 3 -1. + <_> + 14 6 1 3 2. + <_> + + <_> + 4 9 8 1 -1. + <_> + 8 9 4 1 2. + <_> + + <_> + 8 12 4 3 -1. + <_> + 8 13 4 1 3. + <_> + + <_> + 5 12 10 6 -1. + <_> + 5 14 10 2 3. + <_> + + <_> + 11 12 1 2 -1. + <_> + 11 13 1 1 2. + <_> + + <_> + 8 15 4 2 -1. + <_> + 8 16 4 1 2. + <_> + + <_> + 6 9 8 8 -1. + <_> + 10 9 4 4 2. + <_> + 6 13 4 4 2. + <_> + + <_> + 7 12 4 6 -1. + <_> + 7 12 2 3 2. + <_> + 9 15 2 3 2. + <_> + + <_> + 10 11 3 1 -1. + <_> + 11 11 1 1 3. + <_> + + <_> + 9 7 2 10 -1. + <_> + 9 7 1 5 2. + <_> + 10 12 1 5 2. + <_> + + <_> + 8 0 6 6 -1. + <_> + 10 0 2 6 3. + <_> + + <_> + 3 11 2 6 -1. + <_> + 3 13 2 2 3. + <_> + + <_> + 16 12 1 2 -1. + <_> + 16 13 1 1 2. + <_> + + <_> + 1 14 6 6 -1. + <_> + 1 14 3 3 2. + <_> + 4 17 3 3 2. + <_> + + <_> + 13 1 3 6 -1. + <_> + 14 1 1 6 3. + <_> + + <_> + 8 8 2 2 -1. + <_> + 8 9 2 1 2. + <_> + + <_> + 9 9 3 3 -1. + <_> + 10 9 1 3 3. + <_> + + <_> + 8 7 3 3 -1. + <_> + 8 8 3 1 3. + <_> + + <_> + 14 0 2 3 -1. + <_> + 14 0 1 3 2. + <_> + + <_> + 1 0 18 9 -1. + <_> + 7 0 6 9 3. + <_> + + <_> + 11 5 4 15 -1. + <_> + 11 5 2 15 2. + <_> + + <_> + 5 5 4 15 -1. + <_> + 7 5 2 15 2. + <_> + + <_> + 14 0 2 3 -1. + <_> + 14 0 1 3 2. + <_> + + <_> + 4 0 2 3 -1. + <_> + 5 0 1 3 2. + <_> + + <_> + 11 12 2 2 -1. + <_> + 12 12 1 1 2. + <_> + 11 13 1 1 2. + <_> + + <_> + 7 12 2 2 -1. + <_> + 7 12 1 1 2. + <_> + 8 13 1 1 2. + <_> + + <_> + 12 0 3 4 -1. + <_> + 13 0 1 4 3. + <_> + + <_> + 4 11 3 3 -1. + <_> + 4 12 3 1 3. + <_> + + <_> + 12 7 4 2 -1. + <_> + 12 8 4 1 2. + <_> + + <_> + 8 10 3 2 -1. + <_> + 9 10 1 2 3. + <_> + + <_> + 9 9 3 2 -1. + <_> + 10 9 1 2 3. + <_> + + <_> + 8 9 3 2 -1. + <_> + 9 9 1 2 3. + <_> + + <_> + 12 0 3 4 -1. + <_> + 13 0 1 4 3. + <_> + + <_> + 5 0 3 4 -1. + <_> + 6 0 1 4 3. + <_> + + <_> + 4 14 12 4 -1. + <_> + 10 14 6 2 2. + <_> + 4 16 6 2 2. + <_> + + <_> + 8 13 2 3 -1. + <_> + 8 14 2 1 3. + <_> + + <_> + 10 10 3 8 -1. + <_> + 10 14 3 4 2. + <_> + + <_> + 8 10 4 8 -1. + <_> + 8 10 2 4 2. + <_> + 10 14 2 4 2. + <_> + + <_> + 10 8 3 1 -1. + <_> + 11 8 1 1 3. + <_> + + <_> + 9 12 1 6 -1. + <_> + 9 15 1 3 2. + <_> + + <_> + 10 8 3 1 -1. + <_> + 11 8 1 1 3. + <_> + + <_> + 7 8 3 1 -1. + <_> + 8 8 1 1 3. + <_> + + <_> + 5 2 15 14 -1. + <_> + 5 9 15 7 2. + <_> + + <_> + 2 1 2 10 -1. + <_> + 2 1 1 5 2. + <_> + 3 6 1 5 2. + <_> + + <_> + 14 14 2 3 -1. + <_> + 14 15 2 1 3. + <_> + + <_> + 2 7 3 3 -1. + <_> + 3 7 1 3 3. + <_> + + <_> + 17 4 3 3 -1. + <_> + 17 5 3 1 3. + <_> + + <_> + 0 4 3 3 -1. + <_> + 0 5 3 1 3. + <_> + + <_> + 13 5 6 2 -1. + <_> + 16 5 3 1 2. + <_> + 13 6 3 1 2. + <_> + + <_> + 4 19 12 1 -1. + <_> + 8 19 4 1 3. + <_> + + <_> + 12 12 2 4 -1. + <_> + 12 14 2 2 2. + <_> + + <_> + 3 15 1 3 -1. + <_> + 3 16 1 1 3. + <_> + + <_> + 11 16 6 4 -1. + <_> + 11 16 3 4 2. + <_> + + <_> + 2 10 3 10 -1. + <_> + 3 10 1 10 3. + <_> + + <_> + 12 8 2 4 -1. + <_> + 12 8 1 4 2. + <_> + + <_> + 6 8 2 4 -1. + <_> + 7 8 1 4 2. + <_> + + <_> + 10 14 2 3 -1. + <_> + 10 14 1 3 2. + <_> + + <_> + 5 1 10 3 -1. + <_> + 10 1 5 3 2. + <_> + + <_> + 10 7 3 2 -1. + <_> + 11 7 1 2 3. + <_> + + <_> + 5 6 9 2 -1. + <_> + 8 6 3 2 3. + <_> + + <_> + 9 8 2 2 -1. + <_> + 9 9 2 1 2. + <_> + + <_> + 2 11 16 6 -1. + <_> + 2 11 8 3 2. + <_> + 10 14 8 3 2. + <_> + + <_> + 12 7 2 2 -1. + <_> + 13 7 1 1 2. + <_> + 12 8 1 1 2. + <_> + + <_> + 9 5 2 3 -1. + <_> + 9 6 2 1 3. + <_> + + <_> + 9 7 3 2 -1. + <_> + 10 7 1 2 3. + <_> + + <_> + 5 1 8 12 -1. + <_> + 5 7 8 6 2. + <_> + + <_> + 13 5 2 2 -1. + <_> + 13 6 2 1 2. + <_> + + <_> + 5 5 2 2 -1. + <_> + 5 6 2 1 2. + <_> + + <_> + 12 4 3 3 -1. + <_> + 12 5 3 1 3. + <_> + + <_> + 4 14 2 3 -1. + <_> + 4 15 2 1 3. + <_> + + <_> + 12 4 3 3 -1. + <_> + 12 5 3 1 3. + <_> + + <_> + 5 4 3 3 -1. + <_> + 5 5 3 1 3. + <_> + + <_> + 9 14 2 6 -1. + <_> + 10 14 1 3 2. + <_> + 9 17 1 3 2. + <_> + + <_> + 8 14 3 2 -1. + <_> + 9 14 1 2 3. + <_> + + <_> + 9 5 6 6 -1. + <_> + 11 5 2 6 3. + <_> + + <_> + 5 5 6 6 -1. + <_> + 7 5 2 6 3. + <_> + + <_> + 13 13 1 2 -1. + <_> + 13 14 1 1 2. + <_> + + <_> + 0 2 10 2 -1. + <_> + 0 3 10 1 2. + <_> + + <_> + 13 13 1 2 -1. + <_> + 13 14 1 1 2. + <_> + + <_> + 5 7 2 2 -1. + <_> + 5 7 1 1 2. + <_> + 6 8 1 1 2. + <_> + + <_> + 13 5 2 7 -1. + <_> + 13 5 1 7 2. + <_> + + <_> + 6 13 1 2 -1. + <_> + 6 14 1 1 2. + <_> + + <_> + 11 0 3 7 -1. + <_> + 12 0 1 7 3. + <_> + + <_> + 0 3 2 16 -1. + <_> + 0 3 1 8 2. + <_> + 1 11 1 8 2. + <_> + + <_> + 11 0 3 7 -1. + <_> + 12 0 1 7 3. + <_> + + <_> + 6 0 3 7 -1. + <_> + 7 0 1 7 3. + <_> + + <_> + 11 16 8 4 -1. + <_> + 11 16 4 4 2. + <_> + + <_> + 1 16 8 4 -1. + <_> + 5 16 4 4 2. + <_> + + <_> + 13 5 2 7 -1. + <_> + 13 5 1 7 2. + <_> + + <_> + 5 5 2 7 -1. + <_> + 6 5 1 7 2. + <_> + + <_> + 18 6 2 14 -1. + <_> + 18 13 2 7 2. + <_> + + <_> + 6 10 3 4 -1. + <_> + 6 12 3 2 2. + <_> + + <_> + 14 7 1 2 -1. + <_> + 14 8 1 1 2. + <_> + + <_> + 0 1 18 6 -1. + <_> + 0 1 9 3 2. + <_> + 9 4 9 3 2. + <_> + + <_> + 14 7 1 2 -1. + <_> + 14 8 1 1 2. + <_> + + <_> + 0 6 2 14 -1. + <_> + 0 13 2 7 2. + <_> + + <_> + 17 0 3 12 -1. + <_> + 18 0 1 12 3. + <_> + + <_> + 0 6 18 3 -1. + <_> + 0 7 18 1 3. + <_> + + <_> + 6 0 14 16 -1. + <_> + 6 8 14 8 2. + <_> + + <_> + 0 0 3 12 -1. + <_> + 1 0 1 12 3. + <_> + + <_> + 13 0 3 7 -1. + <_> + 14 0 1 7 3. + <_> + + <_> + 5 7 1 2 -1. + <_> + 5 8 1 1 2. + <_> + + <_> + 14 4 6 6 -1. + <_> + 14 6 6 2 3. + <_> + + <_> + 5 7 7 2 -1. + <_> + 5 8 7 1 2. + <_> + + <_> + 8 6 6 9 -1. + <_> + 8 9 6 3 3. + <_> + + <_> + 5 4 6 1 -1. + <_> + 7 4 2 1 3. + <_> + + <_> + 13 0 6 4 -1. + <_> + 16 0 3 2 2. + <_> + 13 2 3 2 2. + <_> + + <_> + 1 2 18 12 -1. + <_> + 1 6 18 4 3. + <_> + + <_> + 3 2 17 12 -1. + <_> + 3 6 17 4 3. + <_> + + <_> + 5 14 7 3 -1. + <_> + 5 15 7 1 3. + <_> + + <_> + 10 14 1 3 -1. + <_> + 10 15 1 1 3. + <_> + + <_> + 3 14 3 3 -1. + <_> + 3 15 3 1 3. + <_> + + <_> + 14 4 6 6 -1. + <_> + 14 6 6 2 3. + <_> + + <_> + 0 4 6 6 -1. + <_> + 0 6 6 2 3. + <_> + + <_> + 12 5 4 3 -1. + <_> + 12 6 4 1 3. + <_> + + <_> + 4 5 4 3 -1. + <_> + 4 6 4 1 3. + <_> + + <_> + 18 0 2 6 -1. + <_> + 18 2 2 2 3. + <_> + + <_> + 8 1 4 9 -1. + <_> + 10 1 2 9 2. + <_> + + <_> + 6 6 8 2 -1. + <_> + 6 6 4 2 2. + <_> + + <_> + 6 5 4 2 -1. + <_> + 6 5 2 1 2. + <_> + 8 6 2 1 2. + <_> + + <_> + 10 5 2 3 -1. + <_> + 10 6 2 1 3. + <_> + + <_> + 9 5 1 3 -1. + <_> + 9 6 1 1 3. + <_> + + <_> + 9 10 2 2 -1. + <_> + 9 11 2 1 2. + <_> + + <_> + 0 8 4 3 -1. + <_> + 0 9 4 1 3. + <_> + + <_> + 6 0 8 6 -1. + <_> + 6 3 8 3 2. + <_> + + <_> + 1 0 6 4 -1. + <_> + 1 0 3 2 2. + <_> + 4 2 3 2 2. + <_> + + <_> + 13 0 3 7 -1. + <_> + 14 0 1 7 3. + <_> + + <_> + 9 16 2 2 -1. + <_> + 9 17 2 1 2. + <_> + + <_> + 11 4 6 10 -1. + <_> + 11 9 6 5 2. + <_> + + <_> + 0 10 19 2 -1. + <_> + 0 11 19 1 2. + <_> + + <_> + 9 5 8 9 -1. + <_> + 9 8 8 3 3. + <_> + + <_> + 4 0 3 7 -1. + <_> + 5 0 1 7 3. + <_> + + <_> + 8 6 4 12 -1. + <_> + 10 6 2 6 2. + <_> + 8 12 2 6 2. + <_> + + <_> + 0 2 6 4 -1. + <_> + 0 4 6 2 2. + <_> + + <_> + 8 15 4 3 -1. + <_> + 8 16 4 1 3. + <_> + + <_> + 8 0 3 7 -1. + <_> + 9 0 1 7 3. + <_> + + <_> + 9 5 3 4 -1. + <_> + 10 5 1 4 3. + <_> + + <_> + 8 5 3 4 -1. + <_> + 9 5 1 4 3. + <_> + + <_> + 7 6 6 1 -1. + <_> + 9 6 2 1 3. + <_> + + <_> + 7 14 4 4 -1. + <_> + 7 14 2 2 2. + <_> + 9 16 2 2 2. + <_> + + <_> + 13 14 4 6 -1. + <_> + 15 14 2 3 2. + <_> + 13 17 2 3 2. + <_> + + <_> + 7 8 1 8 -1. + <_> + 7 12 1 4 2. + <_> + + <_> + 16 0 2 8 -1. + <_> + 17 0 1 4 2. + <_> + 16 4 1 4 2. + <_> + + <_> + 2 0 2 8 -1. + <_> + 2 0 1 4 2. + <_> + 3 4 1 4 2. + <_> + + <_> + 6 1 14 3 -1. + <_> + 6 2 14 1 3. + <_> + + <_> + 7 9 3 10 -1. + <_> + 7 14 3 5 2. + <_> + + <_> + 9 14 2 2 -1. + <_> + 9 15 2 1 2. + <_> + + <_> + 7 7 6 8 -1. + <_> + 7 11 6 4 2. + <_> + + <_> + 9 7 3 6 -1. + <_> + 9 10 3 3 2. + <_> + + <_> + 7 13 3 3 -1. + <_> + 7 14 3 1 3. + <_> + + <_> + 9 9 2 2 -1. + <_> + 9 10 2 1 2. + <_> + + <_> + 0 1 18 2 -1. + <_> + 6 1 6 2 3. + <_> + + <_> + 7 1 6 14 -1. + <_> + 7 8 6 7 2. + <_> + + <_> + 1 9 18 1 -1. + <_> + 7 9 6 1 3. + <_> + + <_> + 9 7 2 2 -1. + <_> + 9 7 1 2 2. + <_> + + <_> + 9 3 2 9 -1. + <_> + 10 3 1 9 2. + <_> + + <_> + 18 14 2 3 -1. + <_> + 18 15 2 1 3. + <_> + + <_> + 7 11 3 1 -1. + <_> + 8 11 1 1 3. + <_> + + <_> + 10 8 3 4 -1. + <_> + 11 8 1 4 3. + <_> + + <_> + 7 14 3 6 -1. + <_> + 8 14 1 6 3. + <_> + + <_> + 10 8 3 4 -1. + <_> + 11 8 1 4 3. + <_> + + <_> + 7 8 3 4 -1. + <_> + 8 8 1 4 3. + <_> + + <_> + 7 9 6 9 -1. + <_> + 7 12 6 3 3. + <_> + + <_> + 0 14 2 3 -1. + <_> + 0 15 2 1 3. + <_> + + <_> + 11 12 1 2 -1. + <_> + 11 13 1 1 2. + <_> + + <_> + 4 3 8 3 -1. + <_> + 8 3 4 3 2. + <_> + + <_> + 0 4 20 6 -1. + <_> + 0 4 10 6 2. + <_> + + <_> + 9 14 1 3 -1. + <_> + 9 15 1 1 3. + <_> + + <_> + 8 14 4 3 -1. + <_> + 8 15 4 1 3. + <_> + + <_> + 0 15 14 4 -1. + <_> + 0 17 14 2 2. + <_> + + <_> + 1 14 18 6 -1. + <_> + 1 17 18 3 2. + <_> + + <_> + 0 0 10 6 -1. + <_> + 0 0 5 3 2. + <_> + 5 3 5 3 2. + diff --git a/projects/Drowsiness detection/haar cascade files/haarcascade_lefteye_2splits.xml b/projects/Drowsiness detection/haar cascade files/haarcascade_lefteye_2splits.xml new file mode 100644 index 000000000..9a9ef58fb --- /dev/null +++ b/projects/Drowsiness detection/haar cascade files/haarcascade_lefteye_2splits.xml @@ -0,0 +1,7390 @@ + + + +BOOST + HAAR + 20 + 20 + + 33 + + 0 + 20 + + <_> + 5 + -2.3924100399017334e+00 + + <_> + + 0 1 0 2.7325989678502083e-02 -1 -2 1 -7.0568458177149296e-03 + + -9.0600621700286865e-01 9.3385708332061768e-01 + -4.5859959721565247e-01 + <_> + + 0 1 2 -1.2538699805736542e-01 -1 -2 3 + -1.1487299948930740e-01 + + 7.2463721036911011e-01 5.3034168481826782e-01 + -8.3221220970153809e-01 + <_> + + 0 1 4 -5.8309938758611679e-02 -1 -2 5 + -1.7684370279312134e-02 + + 6.5408891439437866e-01 2.9482871294021606e-01 + -7.4809581041336060e-01 + <_> + + 0 1 6 3.5937170032411814e-03 -1 -2 7 -1.3436110457405448e-03 + + -5.0303918123245239e-01 6.5995341539382935e-01 + -5.5740857124328613e-01 + <_> + + 1 0 8 -2.1795940119773149e-03 -1 -2 9 1.1514870449900627e-02 + + -4.2016351222991943e-01 5.9694331884384155e-01 + -8.0508047342300415e-01 + <_> + 7 + -2.6498730182647705e+00 + + <_> + + 1 0 10 -2.2485560178756714e-01 -1 -2 11 + -9.6008004620671272e-03 + + -8.1363201141357422e-01 9.0863138437271118e-01 + -3.2208970189094543e-01 + <_> + + 0 1 12 7.4219167232513428e-02 -1 -2 13 + -5.3165741264820099e-03 + + -7.5329452753067017e-01 8.6339497566223145e-01 + -3.3463571220636368e-02 + <_> + + 1 0 14 -2.1913449745625257e-03 -1 -2 15 + 1.1800959706306458e-02 + + -5.5720347166061401e-01 -3.2359680533409119e-01 + 6.4163821935653687e-01 + <_> + + 1 0 16 -7.6179709285497665e-03 -1 -2 17 + -9.0587511658668518e-03 + + -5.3167867660522461e-01 -7.3611450195312500e-01 + 5.5660772323608398e-01 + <_> + + 1 0 18 -4.9959779717028141e-03 -1 -2 19 + 8.0803930759429932e-03 + + -4.1476911306381226e-01 5.9278357028961182e-01 + -6.7384922504425049e-01 + <_> + + 0 1 20 1.9909010734409094e-03 -1 -2 21 + 1.6845749923959374e-03 + + -4.2145928740501404e-01 5.4679220914840698e-01 + -7.5099450349807739e-01 + <_> + + 1 0 22 -5.0781872123479843e-03 -1 -2 23 + 2.6645609177649021e-03 + + -3.9899548888206482e-01 5.8940601348876953e-01 + -4.6778041124343872e-01 + <_> + 8 + -2.3828399181365967e+00 + + <_> + + 1 0 24 -2.5301438570022583e-01 -1 -2 25 + 2.9663778841495514e-03 + + -7.5402587652206421e-01 -3.5279649496078491e-01 + 8.7992298603057861e-01 + <_> + + 1 0 26 -4.7127649188041687e-02 -1 -2 27 + 1.9500750349834561e-03 + + -5.2234899997711182e-01 -3.0379909276962280e-01 + 7.5204378366470337e-01 + <_> + + 0 1 28 -7.1481026709079742e-02 -1 -2 29 + 2.2189730405807495e-01 + + 6.5841901302337646e-01 -6.0907202959060669e-01 + 5.6842160224914551e-01 + <_> + + 0 1 30 3.3842820674180984e-02 -1 -2 31 + -5.1714561413973570e-04 + + -6.4311647415161133e-01 5.4620361328125000e-01 + -3.9984148740768433e-01 + <_> + + 1 0 32 -3.4458211157470942e-03 -1 -2 33 + 2.4395729415118694e-03 + + -4.5636838674545288e-01 4.7798189520835876e-01 + -9.1247087717056274e-01 + <_> + + 1 0 34 2.1385070867836475e-03 -1 -2 35 + 1.8324409611523151e-03 + + -8.3617758750915527e-01 3.3462798595428467e-01 + -7.5008547306060791e-01 + <_> + + 1 0 36 1.1167610064148903e-03 -1 -2 37 + 9.9106997367925942e-05 + + -6.9083797931671143e-01 -3.4561330080032349e-01 + 4.1183179616928101e-01 + <_> + + 1 0 38 1.5447770245373249e-02 -1 -2 39 + -3.2244939357042313e-02 + + 3.6980190873146057e-01 6.1112838983535767e-01 + -5.5685341358184814e-01 + <_> + 9 + -2.1312201023101807e+00 + + <_> + + 1 0 40 -1.2251129746437073e-01 -1 -2 41 + -1.4230609871447086e-02 + + -6.7026627063751221e-01 8.7802392244338989e-01 + -1.8784180283546448e-01 + <_> + + 1 0 42 -5.9833219274878502e-03 -1 -2 43 + 7.7085137367248535e-02 + + -5.8122849464416504e-01 -5.0395351648330688e-01 + 6.7387360334396362e-01 + <_> + + 0 1 44 -1.1086189746856689e-01 -1 -2 45 + 9.4604760408401489e-02 + + 6.3432037830352783e-01 -4.9726390838623047e-01 + 3.8787439465522766e-01 + <_> + + 0 1 46 1.7696130089461803e-04 -1 -2 47 + 2.0120320841670036e-03 + + -6.3938802480697632e-01 -3.5313910245895386e-01 + 5.1538437604904175e-01 + <_> + + 1 0 48 -1.6102839726954699e-03 -1 -2 49 + 1.6666069859638810e-03 + + -5.1915901899337769e-01 4.0478190779685974e-01 + -6.9496357440948486e-01 + <_> + + 1 0 50 -7.1480998303741217e-04 -1 -2 51 + -4.7647571191191673e-03 + + -4.8945188522338867e-01 -5.0037759542465210e-01 + 4.0796059370040894e-01 + <_> + + 0 1 52 7.8659597784280777e-03 -1 -2 53 + -1.2938310392200947e-03 + + -3.3636429905891418e-01 -6.7621380090713501e-01 + 4.7010248899459839e-01 + <_> + + 1 0 54 -3.6533139063976705e-04 -1 -2 55 + 2.0565679296851158e-03 + + -4.7071608901023865e-01 4.1323411464691162e-01 + -5.5526417493820190e-01 + <_> + + 0 1 56 7.8385717642959207e-05 -1 -2 57 + 1.7511800397187471e-03 + + -5.1521158218383789e-01 3.3417248725891113e-01 + -7.9558157920837402e-01 + <_> + 9 + -2.0176210403442383e+00 + + <_> + + 1 0 58 -6.4695239067077637e-02 -1 -2 59 + 9.5212170854210854e-03 + + -6.1326402425765991e-01 -5.4831558465957642e-01 + 7.8652447462081909e-01 + <_> + + 0 1 60 -9.8109766840934753e-02 -1 -2 61 + -8.5938459634780884e-01 + + 6.9113308191299438e-01 4.5364680886268616e-01 + -5.0026148557662964e-01 + <_> + + 1 0 62 -8.9836172759532928e-02 -1 -2 63 + 2.6945930439978838e-03 + + -5.2928781509399414e-01 -3.8199779391288757e-01 + 5.7821297645568848e-01 + <_> + + 1 0 64 2.5973599404096603e-03 -1 -2 65 + -3.0058110132813454e-03 + + -9.1928368806838989e-01 -8.0213797092437744e-01 + 2.9259279370307922e-01 + <_> + + 1 0 66 -4.5496290549635887e-03 -1 -2 67 + 4.7376728616654873e-03 + + -4.3678951263427734e-01 4.1010880470275879e-01 + -7.2692811489105225e-01 + <_> + + 1 0 68 4.6190437860786915e-03 -1 -2 69 + 4.5377281494438648e-03 + + -8.4895151853561401e-01 3.0124679207801819e-01 + -7.0301771163940430e-01 + <_> + + 1 0 70 -2.4952790699899197e-03 -1 -2 71 + -5.1753767766058445e-03 + + -4.6784749627113342e-01 -7.4530351161956787e-01 + 4.0011820197105408e-01 + <_> + + 0 1 72 -5.2049742080271244e-03 -1 -2 73 + -8.7892003357410431e-02 + + 4.8669269680976868e-01 8.3493947982788086e-01 + -3.3827719092369080e-01 + <_> + + 0 1 74 6.9997250102460384e-03 -1 -2 75 + -9.0990252792835236e-03 + + -2.9039889574050903e-01 6.2315821647644043e-01 + -3.5424730181694031e-01 + <_> + 11 + -2.2212049961090088e+00 + + <_> + + 1 0 76 -5.5702101439237595e-02 -1 -2 77 + 3.4033291041851044e-02 + + -6.9841581583023071e-01 -3.9509189128875732e-01 + 8.0313128232955933e-01 + <_> + + 1 0 78 -4.6199060976505280e-02 -1 -2 79 + -4.8061669804155827e-03 + + -4.8860380053520203e-01 8.0775612592697144e-01 + -7.4490822851657867e-02 + <_> + + 0 1 80 1.8170489929616451e-03 -1 -2 81 + -3.6162370815873146e-03 + + -3.8043528795242310e-01 6.0451722145080566e-01 + -2.2582240402698517e-01 + <_> + + 1 0 82 -1.5706950798630714e-02 -1 -2 83 + 4.3929950334131718e-03 + + -3.7577998638153076e-01 5.4214221239089966e-01 + -3.7388241291046143e-01 + <_> + + 1 0 84 -1.0047219984699041e-04 -1 -2 85 + -8.6475118994712830e-02 + + -4.7433409094810486e-01 5.0186318159103394e-01 + -2.1136230230331421e-01 + <_> + + 0 1 86 -7.7960766851902008e-02 -1 -2 87 + 9.8561286926269531e-02 + + 5.7337349653244019e-01 -3.2515558600425720e-01 + 5.3035980463027954e-01 + <_> + + 0 1 88 -5.4359167814254761e-01 -1 -2 89 + -4.4177699834108353e-02 + + 5.9464299678802490e-01 2.9671078920364380e-01 + -3.8474830985069275e-01 + <_> + + 1 0 90 -8.8016409426927567e-04 -1 -2 91 + 2.6359390467405319e-03 + + -3.2000589370727539e-01 -1.7586140334606171e-01 + 4.8360350728034973e-01 + <_> + + 0 1 92 -1.4203689992427826e-02 -1 -2 93 + -7.3902818257920444e-05 + + -7.7882087230682373e-01 3.0619418621063232e-01 + -3.3196049928665161e-01 + <_> + + 1 0 94 4.6157240867614746e-03 -1 -2 95 + 1.1152310296893120e-02 + + 4.9689778685569763e-01 -5.3435891866683960e-01 + 9.7229443490505219e-02 + <_> + + 0 1 96 -6.0547702014446259e-03 -1 -2 97 + -2.1118740551173687e-03 + + -8.3811217546463013e-01 6.3617032766342163e-01 + -4.8299189656972885e-02 + <_> + 13 + -2.1328830718994141e+00 + + <_> + + 1 0 98 -1.2956829741597176e-02 -1 -2 99 + -2.7141019701957703e-02 + + -6.4874732494354248e-01 7.6293057203292847e-01 + -3.3947870135307312e-01 + <_> + + 0 1 100 4.5119998976588249e-03 -1 -2 101 + 1.2516690418124199e-02 + + -5.0059837102890015e-01 -3.6873328685760498e-01 + 5.9888631105422974e-01 + <_> + + 1 0 102 -6.0557941906154156e-03 -1 -2 103 + -4.6923749148845673e-02 + + -3.8940930366516113e-01 6.3268911838531494e-01 + -2.6270028948783875e-01 + <_> + + 1 0 104 -2.4018269032239914e-03 -1 -2 105 + -1.5936089679598808e-02 + + -5.0517928600311279e-01 6.5526002645492554e-01 + -1.7308109998703003e-01 + <_> + + 0 1 106 1.4000290073454380e-02 -1 -2 107 + 1.3202779926359653e-02 + + -4.1653230786323547e-01 -4.9121969938278198e-01 + 3.7397938966751099e-01 + <_> + + 1 0 108 -2.7658580802381039e-04 -1 -2 109 + -4.8634149134159088e-03 + + -4.5382869243621826e-01 -5.9796881675720215e-01 + 3.1217721104621887e-01 + <_> + + 1 0 110 2.7654920704662800e-03 -1 -2 111 + 2.5534769892692566e-01 + + -7.6476567983627319e-01 -3.4267220646142960e-02 + 7.0786577463150024e-01 + <_> + + 1 0 112 4.6812961809337139e-03 -1 -2 113 + 6.5162130631506443e-03 + + -7.8790861368179321e-01 1.8877579271793365e-01 + -7.9132258892059326e-01 + <_> + + 1 0 114 5.7325329631567001e-02 -1 -2 115 + -1.2718330137431622e-02 + + 6.2349188327789307e-01 3.0860608816146851e-01 + -3.2784330844879150e-01 + <_> + + 1 0 116 -6.7374261561781168e-04 -1 -2 117 + 5.6564649567008018e-03 + + -4.5451548695564270e-01 2.7431339025497437e-01 + -7.8447937965393066e-01 + <_> + + 1 0 118 3.1134090386331081e-03 -1 -2 119 + 2.4249779526144266e-03 + + 3.9738771319389343e-01 -3.5198271274566650e-01 + 3.0490091443061829e-01 + <_> + + 0 1 120 -5.5641461163759232e-02 -1 -2 121 + 4.3548129498958588e-02 + + 4.5575490593910217e-01 -3.3370929956436157e-01 + 2.9501429200172424e-01 + <_> + + 1 0 122 8.0783379962667823e-04 -1 -2 123 + 1.8713270546868443e-03 + + 2.2460040450096130e-01 -6.6048407554626465e-01 + 1.5031670033931732e-01 + <_> + 13 + -1.9884539842605591e+00 + + <_> + + 1 0 124 -4.3516629934310913e-01 -1 -2 125 + 6.2595037743449211e-03 + + -4.9959290027618408e-01 -2.3639589548110962e-01 + 7.9975378513336182e-01 + <_> + + 1 0 126 -6.6518150269985199e-03 -1 -2 127 + -5.7092090137302876e-03 + + -5.4752808809280396e-01 6.4273327589035034e-01 + -2.1511809527873993e-01 + <_> + + 0 1 128 1.9450180232524872e-02 -1 -2 129 + -5.4476498626172543e-03 + + -5.3605002164840698e-01 5.5794501304626465e-01 + -2.1474960446357727e-01 + <_> + + 1 0 130 -1.6347589553333819e-04 -1 -2 131 + 7.1614650078117847e-03 + + -5.5962842702865601e-01 -1.6604369878768921e-01 + 4.6805259585380554e-01 + <_> + + 1 0 132 -1.3145170174539089e-02 -1 -2 133 + -1.1436809785664082e-02 + + -4.1279909014701843e-01 3.7901800870895386e-01 + -4.1791579127311707e-01 + <_> + + 0 1 134 -7.2912001051008701e-03 -1 -2 135 + -5.2170921117067337e-04 + + -7.6089668273925781e-01 3.2527619600296021e-01 + -3.0110970139503479e-01 + <_> + + 1 0 136 3.3754010219126940e-03 -1 -2 137 + 2.5100160855799913e-03 + + -7.8373962640762329e-01 1.8525449931621552e-01 + -5.8084958791732788e-01 + <_> + + 0 1 138 -1.2884209863841534e-03 -1 -2 139 + -1.8726480193436146e-03 + + 2.7339500188827515e-01 1.6819879412651062e-01 + -5.1986902952194214e-01 + <_> + + 1 0 140 2.4010189808905125e-03 -1 -2 141 + 4.8938081599771976e-03 + + -8.2964670658111572e-01 1.6796599328517914e-01 + -6.5530872344970703e-01 + <_> + + 0 1 142 3.1223020050674677e-03 -1 -2 143 + 5.0366491079330444e-02 + + -4.3521308898925781e-01 -5.8327801525592804e-03 + 7.0878309011459351e-01 + <_> + + 1 0 144 3.6151800304651260e-02 -1 -2 145 + -1.3426589965820312e-01 + + 4.4979161024093628e-01 3.9472430944442749e-01 + -3.7588629126548767e-01 + <_> + + 1 0 146 -2.7791369706392288e-02 -1 -2 147 + -1.2712170369923115e-02 + + -2.9488721489906311e-01 -7.2011739015579224e-01 + 3.6595028638839722e-01 + <_> + + 1 0 148 -3.8276749546639621e-04 -1 -2 149 + -6.1330529861152172e-03 + + -4.0581339597702026e-01 -5.2725958824157715e-01 + 3.6040499806404114e-01 + <_> + 16 + -2.0902318954467773e+00 + + <_> + + 1 0 150 -4.7748669981956482e-02 -1 -2 151 + 4.6201851218938828e-03 + + -5.9902387857437134e-01 -2.4887490272521973e-01 + 6.9201582670211792e-01 + <_> + + 1 0 152 -8.5353456437587738e-02 -1 -2 153 + -7.0110969245433807e-03 + + -5.1715832948684692e-01 5.6950652599334717e-01 + -2.4749420583248138e-01 + <_> + + 1 0 154 -7.6567470096051693e-03 -1 -2 155 + -3.5919491201639175e-02 + + -3.7316519021987915e-01 4.9438580870628357e-01 + -3.9586681127548218e-01 + <_> + + 0 1 156 -7.4326626956462860e-02 -1 -2 157 + 9.0118587017059326e-02 + + 5.6755977869033813e-01 -3.8921171426773071e-01 + 3.1079098582267761e-01 + <_> + + 0 1 158 1.6736460849642754e-02 -1 -2 159 + 1.8592580454424024e-03 + + -3.6674138903617859e-01 3.4875720739364624e-01 + -5.7483112812042236e-01 + <_> + + 1 0 160 7.5264140032231808e-03 -1 -2 161 + -3.5309391096234322e-03 + + 6.7878991365432739e-01 4.8617920279502869e-01 + -2.5660640001296997e-01 + <_> + + 1 0 162 -4.9510748795000836e-05 -1 -2 163 + -6.8923248909413815e-03 + + -4.5661240816116333e-01 -5.7134729623794556e-01 + 3.2921048998832703e-01 + <_> + + 1 0 164 6.1156069859862328e-03 -1 -2 165 + -5.5014882236719131e-03 + + -7.1315360069274902e-01 -5.9139078855514526e-01 + 1.9805949926376343e-01 + <_> + + 1 0 166 -4.2378060519695282e-02 -1 -2 167 + 2.2011259570717812e-03 + + -3.8239300251007080e-01 3.3457010984420776e-01 + -4.3032339215278625e-01 + <_> + + 1 0 168 2.1217379253357649e-03 -1 -2 169 + 6.4385468140244484e-03 + + -6.8310022354125977e-01 2.0478610694408417e-01 + -6.1793941259384155e-01 + <_> + + 1 0 170 3.1177410855889320e-03 -1 -2 171 + 4.2230269173160195e-04 + + 5.1137161254882812e-01 -3.6440208554267883e-01 + 2.1073049306869507e-01 + <_> + + 0 1 172 -6.5657291561365128e-03 -1 -2 173 + 2.5686610024422407e-03 + + -6.4581501483917236e-01 2.7643561363220215e-01 + -3.4198498725891113e-01 + <_> + + 1 0 174 -6.2437567976303399e-05 -1 -2 175 + -3.6269261036068201e-03 + + -3.1758078932762146e-01 -8.1051957607269287e-01 + 2.7218630909919739e-01 + <_> + + 1 0 176 -3.4638389479368925e-03 -1 -2 177 + -7.4930191040039062e-02 + + -3.9515769481658936e-01 -5.4353868961334229e-01 + 2.6106119155883789e-01 + <_> + + 0 1 178 -9.7247250378131866e-03 -1 -2 179 + 4.5450199395418167e-03 + + 4.1124871373176575e-01 -3.1576550006866455e-01 + 3.9046970009803772e-01 + <_> + + 0 1 180 -2.7354240883141756e-03 -1 -2 181 + -1.6969470307230949e-02 + + -7.4906748533248901e-01 -6.2437218427658081e-01 + 1.8387380242347717e-01 + <_> + 15 + -1.9407310485839844e+00 + + <_> + + 1 0 182 -2.4978699162602425e-02 -1 -2 183 + -5.8007869869470596e-02 + + -6.0697889328002930e-01 7.1478021144866943e-01 + -2.9943239688873291e-01 + <_> + + 1 0 184 -5.1753749139606953e-03 -1 -2 185 + -8.9618662605062127e-04 + + -3.5297989845275879e-01 5.4417461156845093e-01 + -3.9789950847625732e-01 + <_> + + 1 0 186 -2.8718139219563454e-05 -1 -2 187 + 4.7620530240237713e-03 + + -4.8898181319236755e-01 -3.1144559383392334e-01 + 4.6786791086196899e-01 + <_> + + 0 1 188 1.9751280546188354e-02 -1 -2 189 + -1.2683609966188669e-03 + + -4.3020489811897278e-01 -5.4090851545333862e-01 + 3.9797520637512207e-01 + <_> + + 1 0 190 -4.5749718992738053e-05 -1 -2 191 + 2.4090509396046400e-03 + + -4.4518938660621643e-01 2.8822308778762817e-01 + -5.4514312744140625e-01 + <_> + + 0 1 192 -4.5728669501841068e-03 -1 -2 193 + 8.9018214493989944e-03 + + 5.5039870738983154e-01 -4.1598889231681824e-01 + 1.7468899488449097e-01 + <_> + + 0 1 194 -1.2056449800729752e-01 -1 -2 195 + 4.6919930726289749e-02 + + 6.8890577554702759e-01 -4.2266309261322021e-01 + 1.7010940611362457e-01 + <_> + + 0 1 196 -4.2390259914100170e-03 -1 -2 197 + 3.2174249645322561e-03 + + -6.3045340776443481e-01 -3.6097949743270874e-01 + 2.4933730065822601e-01 + <_> + + 0 1 198 -8.5738790221512318e-04 -1 -2 199 + -1.8432449549436569e-02 + + 3.0993479490280151e-01 9.7758449614048004e-02 + -5.0742352008819580e-01 + <_> + + 1 0 200 5.8692828752100468e-03 -1 -2 201 + -6.8751699291169643e-03 + + -7.4556058645248413e-01 -6.7458391189575195e-01 + 1.5918810665607452e-01 + <_> + + 1 0 202 -6.8542227381840348e-05 -1 -2 203 + -1.0658579878509045e-02 + + -4.1279420256614685e-01 3.7002709507942200e-01 + -2.1731729805469513e-01 + <_> + + 0 1 204 -1.8811509944498539e-03 -1 -2 205 + -2.2309130057692528e-02 + + 5.7902830839157104e-01 1.9725680351257324e-01 + -3.2475191354751587e-01 + <_> + + 1 0 206 6.5826578065752983e-04 -1 -2 207 + -5.0781588070094585e-03 + + -6.0630238056182861e-01 -7.7123302221298218e-01 + 1.8186129629611969e-01 + <_> + + 1 0 208 5.6215081363916397e-02 -1 -2 209 + -3.7720590829849243e-02 + + 5.0561398267745972e-01 3.6052110791206360e-01 + -3.2743760943412781e-01 + <_> + + 1 0 210 3.9480631239712238e-03 -1 -2 211 + -2.4269670248031616e-03 + + -7.5788182020187378e-01 5.2076101303100586e-01 + -6.1021361500024796e-02 + <_> + 19 + -2.1061589717864990e+00 + + <_> + + 1 0 212 -1.6906699165701866e-02 -1 -2 213 + 2.5327840819954872e-02 + + -4.7501268982887268e-01 -4.4016760587692261e-01 + 6.0885351896286011e-01 + <_> + + 0 1 214 -1.5663320198655128e-02 -1 -2 215 + -1.6101899743080139e-01 + + 5.7100051641464233e-01 4.0989148616790771e-01 + -3.8142371177673340e-01 + <_> + + 0 1 216 1.6885380318854004e-04 -1 -2 217 + -3.0552360694855452e-03 + + -4.7958490252494812e-01 4.2852300405502319e-01 + -2.8252631425857544e-01 + <_> + + 1 0 218 4.8042940907180309e-03 -1 -2 219 + -5.0092511810362339e-03 + + -6.8659138679504395e-01 -5.9033542871475220e-01 + 1.9732500612735748e-01 + <_> + + 1 0 220 -3.7119518965482712e-02 -1 -2 221 + 3.7857799325138330e-03 + + -4.3130961060523987e-01 3.3596190810203552e-01 + -3.7401720881462097e-01 + <_> + + 0 1 222 -1.0869850404560566e-02 -1 -2 223 + 4.0577541221864522e-04 + + 5.4841208457946777e-01 -5.0022697448730469e-01 + 5.1423858851194382e-02 + <_> + + 1 0 224 5.0201490521430969e-03 -1 -2 225 + 2.5601210072636604e-03 + + -5.9016227722167969e-01 1.9469800591468811e-01 + -6.4648360013961792e-01 + <_> + + 1 0 226 -1.2395749799907207e-03 -1 -2 227 + -5.1075750961899757e-03 + + -2.7762159705162048e-01 -6.1149162054061890e-01 + 3.5250389575958252e-01 + <_> + + 1 0 228 -6.4853738876990974e-05 -1 -2 229 + 2.3282810579985380e-03 + + -3.4008860588073730e-01 2.7134749293327332e-01 + -6.6915398836135864e-01 + <_> + + 1 0 230 -1.5571110416203737e-03 -1 -2 231 + 2.3992219939827919e-03 + + -4.1144248843193054e-01 2.5939700007438660e-01 + -4.0380299091339111e-01 + <_> + + 1 0 232 7.7784422319382429e-04 -1 -2 233 + 3.2334199640899897e-03 + + 2.9523921012878418e-01 -5.8436852693557739e-01 + -1.7936639487743378e-02 + <_> + + 1 0 234 -5.6113858590833843e-05 -1 -2 235 + 1.9111000001430511e-03 + + -3.5021650791168213e-01 2.6312610507011414e-01 + -6.1549347639083862e-01 + <_> + + 0 1 236 -3.4321150742471218e-03 -1 -2 237 + -1.4541969634592533e-02 + + 3.7493300437927246e-01 4.3788930773735046e-01 + -3.0131611227989197e-01 + <_> + + 0 1 238 -2.5027070194482803e-02 -1 -2 239 + -3.1183639075607061e-03 + + -5.2829748392105103e-01 -8.1336849927902222e-01 + 1.7928420007228851e-01 + <_> + + 1 0 240 2.9415208846330643e-03 -1 -2 241 + -2.4807679001241922e-03 + + -4.7243058681488037e-01 -6.0058331489562988e-01 + 2.1497109532356262e-01 + <_> + + 1 0 242 -4.2498838156461716e-03 -1 -2 243 + 7.6959328725934029e-03 + + -3.3230608701705933e-01 2.1247069537639618e-01 + -8.1967252492904663e-01 + <_> + + 0 1 244 -6.1426039785146713e-02 -1 -2 245 + 5.3176790475845337e-02 + + 5.2200448513031006e-01 -2.9851761460304260e-01 + 2.8654190897941589e-01 + <_> + + 0 1 246 2.5695779186207801e-05 -1 -2 247 + 2.4311970919370651e-03 + + -3.4719291329383850e-01 -1.2133490294218063e-01 + 3.8965350389480591e-01 + <_> + + 1 0 248 5.6956289336085320e-03 -1 -2 249 + -6.6630227956920862e-04 + + -6.6364032030105591e-01 2.7921909093856812e-01 + -2.1624849736690521e-01 + <_> + 20 + -2.0051579475402832e+00 + + <_> + + 1 0 250 -2.8509549796581268e-02 -1 -2 251 + -1.6429109498858452e-02 + + -5.5133241415023804e-01 6.0328769683837891e-01 + -3.0009600520133972e-01 + <_> + + 1 0 252 -5.8078952133655548e-03 -1 -2 253 + -1.4670349657535553e-02 + + -4.8640519380569458e-01 4.4786658883094788e-01 + -3.5448360443115234e-01 + <_> + + 1 0 254 -1.0694459779188037e-03 -1 -2 255 + -5.0697539001703262e-02 + + -3.8593119382858276e-01 4.3865600228309631e-01 + -3.1134051084518433e-01 + <_> + + 0 1 256 -7.2318017482757568e-02 -1 -2 257 + -1.6740759834647179e-02 + + 5.5695492029190063e-01 3.4036931395530701e-01 + -3.7713068723678589e-01 + <_> + + 1 0 258 1.2923260219395161e-02 -1 -2 259 + -2.0832989830523729e-03 + + 2.6987180113792419e-01 7.2217263281345367e-02 + -5.0617259740829468e-01 + <_> + + 0 1 260 2.9217539122328162e-04 -1 -2 261 + 4.6477448195219040e-03 + + -4.7199469804763794e-01 -2.0233640074729919e-01 + 3.6684620380401611e-01 + <_> + + 0 1 262 1.6355320112779737e-03 -1 -2 263 + 6.0143060982227325e-03 + + -3.3369150757789612e-01 2.6335370540618896e-01 + -7.5315129756927490e-01 + <_> + + 0 1 264 -1.9768040627241135e-02 -1 -2 265 + 5.0995801575481892e-03 + + -7.3396641016006470e-01 -1.0626330226659775e-01 + 3.7877479195594788e-01 + <_> + + 1 0 266 2.1737320348620415e-03 -1 -2 267 + 2.3621059954166412e-02 + + -4.5873621106147766e-01 -3.7341989576816559e-02 + 5.0312960147857666e-01 + <_> + + 1 0 268 4.7070439904928207e-02 -1 -2 269 + 4.8429161310195923e-02 + + 3.9159670472145081e-01 -2.7507638931274414e-01 + 3.6923450231552124e-01 + <_> + + 0 1 270 7.1763257437851280e-05 -1 -2 271 + -4.0031517855823040e-03 + + -2.6133701205253601e-01 -4.6118479967117310e-01 + 3.4101578593254089e-01 + <_> + + 1 0 272 2.5536299217492342e-03 -1 -2 273 + -2.5720898993313313e-03 + + 4.4237849116325378e-01 4.3066531419754028e-01 + -2.8360688686370850e-01 + <_> + + 1 0 274 8.7512210011482239e-03 -1 -2 275 + 5.7346918620169163e-03 + + -7.7647632360458374e-01 1.4551159739494324e-01 + -7.5074160099029541e-01 + <_> + + 0 1 276 -6.6438838839530945e-03 -1 -2 277 + -3.4590701106935740e-03 + + 4.0350550413131714e-01 2.8769719600677490e-01 + -2.8021600842475891e-01 + <_> + + 1 0 278 9.9742468446493149e-03 -1 -2 279 + 1.3233659788966179e-02 + + -6.0677021741867065e-01 1.5478080511093140e-01 + -7.0759147405624390e-01 + <_> + + 0 1 280 -5.0271311774849892e-03 -1 -2 281 + -1.2092100223526359e-04 + + -7.3897778987884521e-01 2.3473000526428223e-01 + -2.4400579929351807e-01 + <_> + + 1 0 282 -1.2881499715149403e-03 -1 -2 283 + 6.2854858115315437e-03 + + -2.8901669383049011e-01 2.8100869059562683e-01 + -5.6933850049972534e-01 + <_> + + 1 0 284 5.6929360143840313e-03 -1 -2 285 + -5.3880861960351467e-03 + + -7.8456932306289673e-01 2.6201328635215759e-01 + -2.2232030332088470e-01 + <_> + + 1 0 286 4.8205819912254810e-03 -1 -2 287 + 3.4279188513755798e-01 + + 5.6795972585678101e-01 -1.8314230442047119e-01 + 5.4108071327209473e-01 + <_> + + 0 1 288 5.1370919682085514e-03 -1 -2 289 + -9.1285221278667450e-03 + + -3.9116761088371277e-01 5.3076338768005371e-01 + -3.0019309371709824e-02 + <_> + 21 + -2.1121981143951416e+00 + + <_> + + 1 0 290 -5.1386129111051559e-02 -1 -2 291 + 5.1850839518010616e-03 + + -5.3148782253265381e-01 -2.4744540452957153e-01 + 6.1181622743606567e-01 + <_> + + 1 0 292 -1.5259400010108948e-02 -1 -2 293 + 2.5995150208473206e-02 + + -4.3303629755973816e-01 4.3979901820421219e-02 + 7.3829138278961182e-01 + <_> + + 1 0 294 -3.2312370836734772e-02 -1 -2 295 + 1.3700700365006924e-02 + + -3.9609751105308533e-01 -2.7643880248069763e-01 + 4.2535358667373657e-01 + <_> + + 1 0 296 -2.2647869773209095e-03 -1 -2 297 + -6.8290620110929012e-03 + + -3.2005569338798523e-01 -5.1682972908020020e-01 + 3.6975708603858948e-01 + <_> + + 1 0 298 -2.2481549531221390e-03 -1 -2 299 + 4.5944549143314362e-02 + + -3.6244350671768188e-01 -1.3187309959903359e-03 + 6.3217681646347046e-01 + <_> + + 1 0 300 1.8755620112642646e-03 -1 -2 301 + -1.9700559787452221e-03 + + -7.1403390169143677e-01 -5.8730661869049072e-01 + 1.7592810094356537e-01 + <_> + + 1 0 302 -6.5721389837563038e-03 -1 -2 303 + -1.1746180243790150e-02 + + -3.6347511410713196e-01 3.1440791487693787e-01 + -4.0111118555068970e-01 + <_> + + 1 0 304 -1.6494120063725859e-04 -1 -2 305 + -7.2169408667832613e-05 + + -3.7792590260505676e-01 5.2791112661361694e-01 + -1.0790319740772247e-01 + <_> + + 0 1 306 1.9697639800142497e-04 -1 -2 307 + -1.1423509567975998e-02 + + -4.7097641229629517e-01 -8.5209292173385620e-01 + 1.7662869393825531e-01 + <_> + + 0 1 308 -4.5562228187918663e-03 -1 -2 309 + -4.4720191508531570e-03 + + -8.0601161718368530e-01 -6.1500209569931030e-01 + 1.2908309698104858e-01 + <_> + + 0 1 310 -1.7765410011634231e-03 -1 -2 311 + -7.8799277544021606e-03 + + 3.1382599472999573e-01 3.0394628643989563e-01 + -3.7204921245574951e-01 + <_> + + 0 1 312 -1.4284689677879214e-03 -1 -2 313 + -1.8939910223707557e-03 + + 5.0413030385971069e-01 3.4823760390281677e-01 + -2.3673820495605469e-01 + <_> + + 0 1 314 -3.1496640294790268e-03 -1 -2 315 + -1.0716119781136513e-02 + + -6.6812378168106079e-01 -4.8515519499778748e-01 + 1.9036419689655304e-01 + <_> + + 0 1 316 -6.8033537827432156e-03 -1 -2 317 + 1.4902319759130478e-02 + + -5.6979268789291382e-01 1.3098250329494476e-01 + -7.1448272466659546e-01 + <_> + + 0 1 318 -3.4170228987932205e-02 -1 -2 319 + -1.4779250323772430e-01 + + 5.0575131177902222e-01 2.8233268857002258e-01 + -2.7205321192741394e-01 + <_> + + 1 0 320 -5.5842810979811475e-05 -1 -2 321 + 3.9885081350803375e-02 + + -2.6936730742454529e-01 5.6696129031479359e-03 + 6.3975161314010620e-01 + <_> + + 1 0 322 1.2483130209147930e-02 -1 -2 323 + -3.2864511013031006e-04 + + -7.4533742666244507e-01 3.6449620127677917e-01 + -9.6498817205429077e-02 + <_> + + 0 1 324 -1.4710469986312091e-04 -1 -2 325 + -2.7814340591430664e-01 + + 1.4060440659523010e-01 5.7002830505371094e-01 + -4.8755478858947754e-01 + <_> + + 0 1 326 -1.3452640268951654e-03 -1 -2 327 + 9.1500842245295644e-04 + + 3.9255830645561218e-01 -3.0215170979499817e-01 + 3.6698031425476074e-01 + <_> + + 0 1 328 -3.4133149310946465e-03 -1 -2 329 + 5.1169008947908878e-03 + + -6.4085817337036133e-01 -2.3052580654621124e-01 + 2.4285919964313507e-01 + <_> + + 1 0 330 8.8846698403358459e-02 -1 -2 331 + 6.1080828309059143e-03 + + 4.5381888747215271e-01 -3.5880088806152344e-01 + 1.3209380209445953e-01 + <_> + 23 + -1.8701590299606323e+00 + + <_> + + 1 0 332 -1.5930000692605972e-02 -1 -2 333 + 2.7407450601458549e-02 + + -3.5245341062545776e-01 -6.0236789286136627e-02 + 7.2715848684310913e-01 + <_> + + 1 0 334 -8.5037678480148315e-02 -1 -2 335 + -1.1508919997140765e-03 + + -4.3576711416244507e-01 4.6471679210662842e-01 + -3.5896891355514526e-01 + <_> + + 1 0 336 -6.4599298639222980e-04 -1 -2 337 + 5.5495807901024818e-03 + + -3.1371060013771057e-01 4.1225919127464294e-01 + -4.9400448799133301e-01 + <_> + + 1 0 338 -1.1472150217741728e-03 -1 -2 339 + -6.4546810463070869e-03 + + -3.9192581176757812e-01 -6.9197827577590942e-01 + 2.6103940606117249e-01 + <_> + + 0 1 340 -1.1414250358939171e-02 -1 -2 341 + 1.1582579463720322e-03 + + 3.2361420989036560e-01 -3.8304999470710754e-01 + 2.8015980124473572e-01 + <_> + + 1 0 342 -6.1077292775735259e-04 -1 -2 343 + 1.1812780285254121e-03 + + -3.7471079826354980e-01 -1.7685219645500183e-01 + 3.5498109459877014e-01 + <_> + + 1 0 344 7.9117231070995331e-03 -1 -2 345 + -9.0904926764778793e-05 + + -6.9681918621063232e-01 2.0756739377975464e-01 + -4.4282090663909912e-01 + <_> + + 0 1 346 2.8638960793614388e-03 -1 -2 347 + 1.2769990134984255e-03 + + -4.1364789009094238e-01 -2.1157020330429077e-01 + 3.1919568777084351e-01 + <_> + + 0 1 348 -7.5440858490765095e-03 -1 -2 349 + 5.4467269219458103e-03 + + -7.5495690107345581e-01 1.3229879736900330e-01 + -6.7695891857147217e-01 + <_> + + 1 0 350 1.3641830300912261e-03 -1 -2 351 + 1.3810779899358749e-02 + + -4.2168149352073669e-01 1.5719360113143921e-01 + -6.7965167760848999e-01 + <_> + + 1 0 352 5.0265640020370483e-02 -1 -2 353 + 4.7765119234099984e-05 + + 7.4369138479232788e-01 -3.8102349638938904e-01 + 1.0605350136756897e-01 + <_> + + 1 0 354 1.4666689932346344e-01 -1 -2 355 + -3.0426830053329468e-01 + + 5.3409832715988159e-01 3.7783610820770264e-01 + -2.1534620225429535e-01 + <_> + + 0 1 356 -3.2244708854705095e-03 -1 -2 357 + -1.7187190242111683e-03 + + 2.8274241089820862e-01 1.0677109658718109e-01 + -4.4204118847846985e-01 + <_> + + 0 1 358 -8.4115704521536827e-03 -1 -2 359 + -2.3220919072628021e-02 + + -8.3557051420211792e-01 -5.1933908462524414e-01 + 1.3181640207767487e-01 + <_> + + 0 1 360 -6.3912221230566502e-03 -1 -2 361 + -3.0661540222354233e-04 + + -6.8552321195602417e-01 2.2192850708961487e-01 + -2.3945030570030212e-01 + <_> + + 1 0 362 1.8742750398814678e-03 -1 -2 363 + -2.8299540281295776e-02 + + -4.7218438982963562e-01 -6.8186718225479126e-01 + 1.5923790633678436e-01 + <_> + + 1 0 364 7.9352483153343201e-03 -1 -2 365 + -8.7599940598011017e-03 + + -7.3135781288146973e-01 -6.0014718770980835e-01 + 1.0350330173969269e-01 + <_> + + 0 1 366 -5.5426149629056454e-03 -1 -2 367 + -1.8066290067508817e-03 + + -5.9360408782958984e-01 2.5533521175384521e-01 + -1.7036439478397369e-01 + <_> + + 1 0 368 -8.3993803709745407e-03 -1 -2 369 + -1.9515500171110034e-03 + + -2.3953610658645630e-01 3.7252411246299744e-01 + -1.2982900440692902e-01 + <_> + + 0 1 370 -2.2850139066576958e-03 -1 -2 371 + -6.1910818330943584e-03 + + 5.0227212905883789e-01 4.4551658630371094e-01 + -1.6307780146598816e-01 + <_> + + 1 0 372 1.1659320443868637e-03 -1 -2 373 + -2.1016779355704784e-03 + + 3.4809079766273499e-01 3.1531378626823425e-01 + -3.4710261225700378e-01 + <_> + + 0 1 374 -9.1615924611687660e-03 -1 -2 375 + -2.0036540925502777e-02 + + -6.8623197078704834e-01 -6.8991881608963013e-01 + 1.2962220609188080e-01 + <_> + + 1 0 376 2.7148448862135410e-03 -1 -2 377 + 2.2834159899502993e-03 + + 4.7745740413665771e-01 -1.3344570063054562e-02 + -6.1795878410339355e-01 + <_> + 26 + -1.9807859659194946e+00 + + <_> + + 1 0 378 -3.2838471233844757e-02 -1 -2 379 + -7.5696408748626709e-03 + + -5.1984071731567383e-01 6.3690251111984253e-01 + -1.1562170088291168e-01 + <_> + + 1 0 380 5.4125871509313583e-02 -1 -2 381 + 2.7004599571228027e-01 + + 5.0340247154235840e-01 -3.4640678763389587e-01 + 3.7651509046554565e-01 + <_> + + 0 1 382 7.0261410437524319e-03 -1 -2 383 + 3.1245660502463579e-03 + + -4.1046440601348877e-01 -4.1382190585136414e-01 + 3.7550741434097290e-01 + <_> + + 1 0 384 -1.8708549905568361e-03 -1 -2 385 + -1.4969009906053543e-02 + + -3.7827330827713013e-01 3.9941680431365967e-01 + -2.2254510223865509e-01 + <_> + + 1 0 386 3.4136420581489801e-03 -1 -2 387 + 2.3454260081052780e-03 + + -5.4667568206787109e-01 1.6618840396404266e-01 + -6.3203942775726318e-01 + <_> + + 1 0 388 -1.1689099483191967e-03 -1 -2 389 + -7.8206984326243401e-03 + + -4.4972181320190430e-01 -5.7166117429733276e-01 + 1.8599990010261536e-01 + <_> + + 0 1 390 -2.6324259117245674e-02 -1 -2 391 + -9.1647548833861947e-04 + + -7.8041112422943115e-01 2.3100090026855469e-01 + -2.1224120259284973e-01 + <_> + + 0 1 392 -2.3702960461378098e-03 -1 -2 393 + -9.2874821275472641e-03 + + 2.7304211258888245e-01 2.3200799524784088e-01 + -3.4602558612823486e-01 + <_> + + 1 0 394 2.9221060685813427e-03 -1 -2 395 + -1.4097889652475715e-03 + + -6.9972628355026245e-01 4.8019358515739441e-01 + -4.2650200426578522e-02 + <_> + + 1 0 396 9.3326548812910914e-04 -1 -2 397 + -5.6837309151887894e-02 + + 3.7708479166030884e-01 4.6375161409378052e-01 + -2.0441579818725586e-01 + <_> + + 1 0 398 -9.1405760031193495e-05 -1 -2 399 + -1.1147770099341869e-02 + + -2.9447770118713379e-01 3.6579200625419617e-01 + -1.6106230020523071e-01 + <_> + + 1 0 400 8.0759642878547311e-04 -1 -2 401 + 1.7215589759871364e-03 + + -3.8769969344139099e-01 1.7790059745311737e-01 + -5.9673792123794556e-01 + <_> + + 0 1 402 1.4305640012025833e-02 -1 -2 403 + -3.8885008543729782e-02 + + -2.8887918591499329e-01 3.6497229337692261e-01 + -1.3762719929218292e-01 + <_> + + 0 1 404 -3.4479280002415180e-03 -1 -2 405 + 3.0168178677558899e-01 + + 1.8110840022563934e-01 -3.5425490140914917e-01 + 4.2958360910415649e-01 + <_> + + 1 0 406 2.8582389932125807e-03 -1 -2 407 + 1.4091320335865021e-03 + + 5.2957808971405029e-01 -2.1234430372714996e-01 + 3.1428509950637817e-01 + <_> + + 0 1 408 -1.6597079811617732e-03 -1 -2 409 + 8.7804382201284170e-04 + + -6.3348418474197388e-01 -5.5315300822257996e-02 + 3.9389958977699280e-01 + <_> + + 1 0 410 2.0211800001561642e-03 -1 -2 411 + -6.8409871309995651e-03 + + -4.7127309441566467e-01 -6.4065527915954590e-01 + 1.4861440658569336e-01 + <_> + + 1 0 412 4.7200761735439301e-02 -1 -2 413 + 4.9684080295264721e-03 + + 4.1216409206390381e-01 -3.2404300570487976e-01 + 1.5755960345268250e-01 + <_> + + 1 0 414 3.7529911845922470e-02 -1 -2 415 + -1.1665089987218380e-02 + + 4.1328459978103638e-01 2.5467500090599060e-01 + -3.1303560733795166e-01 + <_> + + 1 0 416 -6.8298257247079164e-05 -1 -2 417 + 1.5325429849326611e-02 + + -2.7212071418762207e-01 2.2946609556674957e-01 + -6.7345708608627319e-01 + <_> + + 1 0 418 8.5185896605253220e-03 -1 -2 419 + -2.6828479021787643e-03 + + -7.1114671230316162e-01 1.5511700510978699e-01 + -3.5444891452789307e-01 + <_> + + 1 0 420 1.3791749952360988e-03 -1 -2 421 + -3.3968368370551616e-05 + + 3.6916270852088928e-01 5.9150930494070053e-02 + -4.6007719635963440e-01 + <_> + + 1 0 422 5.8259358629584312e-03 -1 -2 423 + -8.1688696518540382e-03 + + -5.4986697435379028e-01 -5.0567412376403809e-01 + 1.5189670026302338e-01 + <_> + + 0 1 424 -2.3251199163496494e-03 -1 -2 425 + -4.8669208772480488e-03 + + 3.4904810786247253e-01 5.3138560056686401e-01 + -2.1413469314575195e-01 + <_> + + 1 0 426 4.3380381539463997e-03 -1 -2 427 + 3.4176679328083992e-03 + + -7.8248262405395508e-01 1.2460789829492569e-01 + -5.5297750234603882e-01 + <_> + + 1 0 428 5.5309730768203735e-01 -1 -2 429 + 2.3636389523744583e-03 + + 4.6573078632354736e-01 -3.3309051394462585e-01 + 9.4380050897598267e-02 + <_> + 26 + -1.9697020053863525e+00 + + <_> + + 1 0 430 -2.2934280335903168e-02 -1 -2 431 + -4.2665850371122360e-02 + + -4.4716298580169678e-01 5.4085898399353027e-01 + -3.3589279651641846e-01 + <_> + + 0 1 432 -9.8418388515710831e-03 -1 -2 433 + -1.1932349763810635e-02 + + 3.9958000183105469e-01 3.4219118952751160e-01 + -4.2416951060295105e-01 + <_> + + 1 0 434 -2.4437010288238525e-02 -1 -2 435 + -4.9987169913947582e-03 + + -3.7337359786033630e-01 4.0358328819274902e-01 + -3.5199370980262756e-01 + <_> + + 0 1 436 1.8582950579002500e-03 -1 -2 437 + 2.7540219016373158e-03 + + -4.4158118963241577e-01 -2.8722938895225525e-01 + 3.3857241272926331e-01 + <_> + + 1 0 438 -3.4452530089765787e-03 -1 -2 439 + -5.9277489781379700e-03 + + -3.1821981072425842e-01 -6.5073519945144653e-01 + 2.7109220623970032e-01 + <_> + + 1 0 440 -1.2391789641696960e-04 -1 -2 441 + -7.3327139019966125e-02 + + -3.3467200398445129e-01 -5.9646248817443848e-01 + 2.2861810028553009e-01 + <_> + + 1 0 442 -8.3964750170707703e-02 -1 -2 443 + -8.1644707825034857e-04 + + -2.2525189816951752e-01 3.8213649392127991e-01 + -3.3410450816154480e-01 + <_> + + 0 1 444 -1.5207779593765736e-02 -1 -2 445 + 4.6894788742065430e-02 + + 3.0742698907852173e-01 -3.8833889365196228e-01 + 2.3177519440650940e-01 + <_> + + 0 1 446 -1.0398440062999725e-01 -1 -2 447 + 3.9815339259803295e-03 + + 7.1321141719818115e-01 -2.3310199379920959e-01 + 2.9247841238975525e-01 + <_> + + 1 0 448 2.5737080723047256e-03 -1 -2 449 + 9.1035291552543640e-04 + + -5.5017340183258057e-01 -1.8228930234909058e-01 + 2.8370320796966553e-01 + <_> + + 1 0 450 6.4211348071694374e-03 -1 -2 451 + -5.8243819512426853e-03 + + -4.8581978678703308e-01 2.4608190357685089e-01 + -2.1565020084381104e-01 + <_> + + 0 1 452 -4.0043629705905914e-02 -1 -2 453 + 8.4683427121490240e-04 + + -6.3880550861358643e-01 -6.0435589402914047e-02 + 4.3711128830909729e-01 + <_> + + 1 0 454 1.2964580208063126e-02 -1 -2 455 + -2.2524749510921538e-04 + + 5.9495061635971069e-01 8.6831472814083099e-02 + -3.6362320184707642e-01 + <_> + + 0 1 456 -1.7258729785680771e-03 -1 -2 457 + -7.2289421223104000e-03 + + -6.4707720279693604e-01 -6.8775367736816406e-01 + 1.3838720321655273e-01 + <_> + + 1 0 458 2.5079259648919106e-03 -1 -2 459 + -1.9473560387268662e-03 + + 3.0659309029579163e-01 2.2967760264873505e-01 + -3.4737649559974670e-01 + <_> + + 1 0 460 7.4747111648321152e-03 -1 -2 461 + 1.0328400094294921e-04 + + -6.5191787481307983e-01 -2.0725889503955841e-01 + 2.2402130067348480e-01 + <_> + + 0 1 462 -7.8996885567903519e-03 -1 -2 463 + 4.2833909392356873e-03 + + -7.2479170560836792e-01 1.3954970240592957e-01 + -4.3086060881614685e-01 + <_> + + 1 0 464 6.3452741596847773e-04 -1 -2 465 + -5.4966621100902557e-03 + + 2.9792639613151550e-01 -5.6205391883850098e-01 + -2.9608119279146194e-02 + <_> + + 1 0 466 3.1408690847456455e-03 -1 -2 467 + -5.0443639047443867e-03 + + -6.1322140693664551e-01 -5.3060102462768555e-01 + 1.2507459521293640e-01 + <_> + + 1 0 468 4.5964870601892471e-02 -1 -2 469 + -5.3749699145555496e-03 + + 3.8188719749450684e-01 1.4089010655879974e-01 + -3.5535690188407898e-01 + <_> + + 1 0 470 2.9262059833854437e-03 -1 -2 471 + 5.2230368601158261e-04 + + -6.0886657238006592e-01 -7.1441568434238434e-02 + 3.6275258660316467e-01 + <_> + + 0 1 472 -4.4181118719279766e-03 -1 -2 473 + 4.3349149636924267e-03 + + -7.6458007097244263e-01 1.1246410012245178e-01 + -5.4553848505020142e-01 + <_> + + 1 0 474 2.6483018882572651e-03 -1 -2 475 + -1.0814110282808542e-03 + + 2.3542310297489166e-01 1.4422300457954407e-01 + -3.4401959180831909e-01 + <_> + + 1 0 476 -5.4296739108394831e-05 -1 -2 477 + 5.5393581278622150e-03 + + -2.8607460856437683e-01 1.9345289468765259e-01 + -5.0549429655075073e-01 + <_> + + 1 0 478 3.3703099936246872e-02 -1 -2 479 + -1.2178930046502501e-04 + + 3.8302558660507202e-01 6.6414177417755127e-02 + -4.8530051112174988e-01 + <_> + + 0 1 480 -1.7803770024329424e-03 -1 -2 481 + -5.6019638577708974e-05 + + 4.4113549590110779e-01 1.2396749854087830e-01 + -2.6292270421981812e-01 + <_> + 30 + -2.0330519676208496e+00 + + <_> + + 1 0 482 3.1982790678739548e-03 -1 -2 483 + -1.5240450156852603e-03 + + 5.4208421707153320e-01 8.2784838974475861e-02 + -5.0164830684661865e-01 + <_> + + 0 1 484 -1.2284429743885994e-02 -1 -2 485 + -8.3555448800325394e-03 + + 4.4174939393997192e-01 3.5863399505615234e-01 + -3.6254858970642090e-01 + <_> + + 1 0 486 4.1357800364494324e-02 -1 -2 487 + 2.2308749612420797e-03 + + 4.7858810424804688e-01 -6.0390347242355347e-01 + -8.7199418339878321e-04 + <_> + + 1 0 488 -5.4160541296005249e-01 -1 -2 489 + 7.9009458422660828e-03 + + -3.2536658644676208e-01 -3.6415100097656250e-01 + 4.0501600503921509e-01 + <_> + + 1 0 490 -2.7236728928983212e-03 -1 -2 491 + 2.1041880827397108e-03 + + -2.7644181251525879e-01 3.4068119525909424e-01 + -4.1922488808631897e-01 + <_> + + 1 0 492 1.2688159476965666e-03 -1 -2 493 + -4.2881062254309654e-03 + + -5.4520767927169800e-01 3.0060088634490967e-01 + -1.5233190357685089e-01 + <_> + + 1 0 494 -4.8890449106693268e-03 -1 -2 495 + 5.0922110676765442e-03 + + -3.7665820121765137e-01 2.1803319454193115e-01 + -5.7126522064208984e-01 + <_> + + 0 1 496 -7.0944731123745441e-03 -1 -2 497 + 2.5431890040636063e-02 + + 5.1921921968460083e-01 -2.1260249614715576e-01 + 3.0566200613975525e-01 + <_> + + 1 0 498 -6.7461907747201622e-05 -1 -2 499 + -8.5350889712572098e-03 + + -3.3406749367713928e-01 3.5043460130691528e-01 + -9.0384833514690399e-02 + <_> + + 0 1 500 -4.1117807850241661e-03 -1 -2 501 + 6.3964081928133965e-03 + + -6.9683700799942017e-01 1.1542639881372452e-01 + -6.6645371913909912e-01 + <_> + + 1 0 502 9.8322751000523567e-04 -1 -2 503 + -5.5737968068569899e-04 + + 3.5695379972457886e-01 2.3081110417842865e-01 + -2.8862631320953369e-01 + <_> + + 1 0 504 2.8798289131373167e-03 -1 -2 505 + -7.7164517715573311e-03 + + -5.9923267364501953e-01 3.6074900627136230e-01 + -8.1827618181705475e-02 + <_> + + 0 1 506 3.7285129074007273e-03 -1 -2 507 + -1.3161109760403633e-02 + + -3.7732011079788208e-01 6.7023038864135742e-01 + 1.5114549547433853e-02 + <_> + + 1 0 508 -3.8966130465269089e-02 -1 -2 509 + -5.7413699105381966e-03 + + -3.1252211332321167e-01 3.3947479724884033e-01 + -1.6011409461498260e-01 + <_> + + 1 0 510 1.2538330256938934e-01 -1 -2 511 + -9.7243122756481171e-02 + + 7.3721152544021606e-01 5.0288981199264526e-01 + -1.3284370303153992e-01 + <_> + + 0 1 512 -2.0128490868955851e-03 -1 -2 513 + 3.5349070094525814e-03 + + 4.1367891430854797e-01 -1.5923270583152771e-01 + 4.4056579470634460e-01 + <_> + + 1 0 514 4.4846540689468384e-01 -1 -2 515 + -1.0387780144810677e-02 + + 5.9423661231994629e-01 3.0399119853973389e-01 + -1.8287350237369537e-01 + <_> + + 0 1 516 -1.4210389927029610e-03 -1 -2 517 + 3.6446070298552513e-03 + + -4.5361068844795227e-01 1.5766820311546326e-01 + -6.2608838081359863e-01 + <_> + + 1 0 518 3.2253630924969912e-03 -1 -2 519 + 9.8893349058926105e-04 + + -4.1410240530967712e-01 -1.0757800191640854e-01 + 3.1156888604164124e-01 + <_> + + 0 1 520 -2.7107829228043556e-03 -1 -2 521 + -6.9264871999621391e-03 + + -7.5352817773818970e-01 2.7464428544044495e-01 + -1.1728949844837189e-01 + <_> + + 0 1 522 -3.7942770868539810e-02 -1 -2 523 + 1.3486459851264954e-02 + + 2.6936548948287964e-01 -3.1532868742942810e-01 + 2.5785440206527710e-01 + <_> + + 1 0 524 2.7866458985954523e-03 -1 -2 525 + 3.2895719632506371e-03 + + -6.8431657552719116e-01 1.2949100136756897e-01 + -4.4475141167640686e-01 + <_> + + 1 0 526 1.7910100286826491e-03 -1 -2 527 + 3.3694170415401459e-03 + + -5.6237429380416870e-01 -6.1936769634485245e-02 + 3.6794289946556091e-01 + <_> + + 0 1 528 6.5897632157430053e-04 -1 -2 529 + -3.2603838917566463e-05 + + -2.7705720067024231e-01 2.7426779270172119e-01 + -2.2369539737701416e-01 + <_> + + 0 1 530 -6.0175720602273941e-02 -1 -2 531 + -2.1217610687017441e-02 + + -7.4174910783767700e-01 -4.5034751296043396e-01 + 1.1426000297069550e-01 + <_> + + 1 0 532 -2.2632910404354334e-03 -1 -2 533 + 6.0313078574836254e-03 + + -3.0538588762283325e-01 2.0562660694122314e-01 + -4.0689799189567566e-01 + <_> + + 1 0 534 5.7578482665121555e-04 -1 -2 535 + -9.3677162658423185e-04 + + 3.5098749399185181e-01 2.1616159379482269e-01 + -2.4415770173072815e-01 + <_> + + 0 1 536 -3.7626568228006363e-02 -1 -2 537 + 4.4729812070727348e-03 + + -5.9113681316375732e-01 1.5792270004749298e-01 + -3.2226279377937317e-01 + <_> + + 0 1 538 -7.1853301487863064e-03 -1 -2 539 + 4.0520228445529938e-02 + + -5.9519052505493164e-01 -6.6688463091850281e-02 + 3.4030249714851379e-01 + <_> + + 0 1 540 -6.1968388035893440e-03 -1 -2 541 + 1.0311529971659184e-02 + + -6.7287462949752808e-01 1.0683239996433258e-01 + -5.4825967550277710e-01 + <_> + 33 + -1.9516259431838989e+00 + + <_> + + 1 0 542 -1.9320519641041756e-02 -1 -2 543 + -1.5126460231840611e-02 + + -3.8712570071220398e-01 6.4468181133270264e-01 + -1.2727110087871552e-01 + <_> + + 1 0 544 -6.0182690620422363e-02 -1 -2 545 + -1.3576049823313951e-03 + + -3.0819109082221985e-01 4.8021888732910156e-01 + -3.3428680896759033e-01 + <_> + + 1 0 546 -5.6930771097540855e-03 -1 -2 547 + -8.0942036584019661e-03 + + -3.3166080713272095e-01 4.7517481446266174e-01 + -7.4761562049388885e-02 + <_> + + 0 1 548 6.8413332337513566e-04 -1 -2 549 + -1.1520589888095856e-01 + + -3.5741969943046570e-01 2.6105090975761414e-01 + -3.1773808598518372e-01 + <_> + + 0 1 550 -9.1124046593904495e-03 -1 -2 551 + 5.4891068430151790e-05 + + -5.8540707826614380e-01 -2.2981899976730347e-01 + 2.3482909798622131e-01 + <_> + + 0 1 552 -9.5622539520263672e-03 -1 -2 553 + -8.2032606005668640e-03 + + 3.9155280590057373e-01 4.3179950118064880e-01 + -2.3173290491104126e-01 + <_> + + 0 1 554 -4.0035760030150414e-03 -1 -2 555 + 2.5406230706721544e-03 + + -5.8700478076934814e-01 1.7990030348300934e-01 + -4.1681569814682007e-01 + <_> + + 1 0 556 1.9435470458120108e-03 -1 -2 557 + 8.4362342022359371e-04 + + 3.0340009927749634e-01 -3.0661040544509888e-01 + 2.3646999895572662e-01 + <_> + + 0 1 558 -5.3103519603610039e-03 -1 -2 559 + -3.5526719875633717e-03 + + -5.6304818391799927e-01 -5.5695772171020508e-01 + 1.5022790431976318e-01 + <_> + + 1 0 560 7.1414401754736900e-03 -1 -2 561 + -1.1435860069468617e-03 + + -6.7626637220382690e-01 3.7873879075050354e-01 + -7.4442893266677856e-02 + <_> + + 0 1 562 -3.1177429482340813e-03 -1 -2 563 + -7.7415622770786285e-02 + + -6.2568587064743042e-01 3.9839410781860352e-01 + -5.5262319743633270e-02 + <_> + + 0 1 564 -3.9252988994121552e-02 -1 -2 565 + 2.2049970924854279e-02 + + 3.4094831347465515e-01 -2.4413719773292542e-01 + 4.3050870299339294e-01 + <_> + + 0 1 566 -2.2205871064215899e-03 -1 -2 567 + 2.8649640735238791e-03 + + 2.8309720754623413e-01 -3.5401880741119385e-01 + 2.1054570376873016e-01 + <_> + + 0 1 568 5.8806730521610007e-05 -1 -2 569 + -6.6595021635293961e-03 + + -2.7014040946960449e-01 -5.9313482046127319e-01 + 2.1892869472503662e-01 + <_> + + 0 1 570 1.6931600868701935e-02 -1 -2 571 + 4.7026639804244041e-03 + + -1.1279620230197906e-01 4.9212211370468140e-01 + -3.9702880382537842e-01 + <_> + + 0 1 572 1.7478819936513901e-03 -1 -2 573 + -2.0893230102956295e-03 + + -2.2339369356632233e-01 -4.3157818913459778e-01 + 2.5373139977455139e-01 + <_> + + 1 0 574 1.1534850113093853e-02 -1 -2 575 + 8.7350117973983288e-04 + + -7.0668542385101318e-01 -7.2509132325649261e-02 + 3.9975029230117798e-01 + <_> + + 1 0 576 -7.2836421895772219e-04 -1 -2 577 + 1.2666890397667885e-03 + + -2.3567649722099304e-01 2.2582389414310455e-01 + -4.2317348718643188e-01 + <_> + + 1 0 578 -8.4794021677225828e-04 -1 -2 579 + 3.6212441325187683e-01 + + -2.8307029604911804e-01 1.6724239289760590e-01 + -7.6826947927474976e-01 + <_> + + 1 0 580 -1.9437649752944708e-03 -1 -2 581 + -4.1159680113196373e-03 + + -2.7229419350624084e-01 -6.4211308956146240e-01 + 1.8810230493545532e-01 + <_> + + 1 0 582 2.3254039697349072e-03 -1 -2 583 + -1.4815620379522443e-03 + + 2.8516888618469238e-01 4.2574208974838257e-01 + -2.1113610267639160e-01 + <_> + + 1 0 584 -6.6233296820428222e-05 -1 -2 585 + -3.3756431192159653e-02 + + -2.8205850720405579e-01 -8.1803041696548462e-01 + 1.7053669691085815e-01 + <_> + + 0 1 586 -9.4350927975028753e-04 -1 -2 587 + 1.0650219628587365e-03 + + 1.5273140370845795e-01 -4.2650490999221802e-01 + 1.5235939621925354e-01 + <_> + + 0 1 588 -1.2905279872938991e-03 -1 -2 589 + 9.6549028530716896e-03 + + 1.7365390062332153e-01 -3.9721599221229553e-01 + 1.7953179776668549e-01 + <_> + + 1 0 590 1.3434770517051220e-03 -1 -2 591 + 5.5220007197931409e-04 + + -6.9609320163726807e-01 -7.2258770465850830e-02 + 3.4493291378021240e-01 + <_> + + 1 0 592 3.5795350559055805e-03 -1 -2 593 + -1.0585499927401543e-02 + + -4.8070669174194336e-01 -3.2975581288337708e-01 + 1.4686919748783112e-01 + <_> + + 1 0 594 3.5636040847748518e-03 -1 -2 595 + -1.0298290103673935e-01 + + -6.1415022611618042e-01 -7.2366482019424438e-01 + 8.4447070956230164e-02 + <_> + + 0 1 596 -2.9605759307742119e-02 -1 -2 597 + -3.4580599516630173e-02 + + 4.7113609313964844e-01 -4.3128991127014160e-01 + 2.4623470380902290e-02 + <_> + + 1 0 598 4.7923368401825428e-03 -1 -2 599 + 1.7058040248230100e-03 + + -4.6270799636840820e-01 1.4738570153713226e-01 + -3.7818890810012817e-01 + <_> + + 0 1 600 -3.3174119889736176e-03 -1 -2 601 + -1.7022279789671302e-03 + + 2.7929860353469849e-01 2.6326990127563477e-01 + -2.5129210948944092e-01 + <_> + + 1 0 602 -8.1695342669263482e-04 -1 -2 603 + -1.4184829778969288e-03 + + -1.2859649956226349e-01 5.8855402469635010e-01 + -5.0085168331861496e-02 + <_> + + 0 1 604 -1.0478599928319454e-02 -1 -2 605 + 3.1981911510229111e-02 + + 1.4732900261878967e-01 -4.1299548745155334e-01 + 3.4442049264907837e-01 + <_> + + 1 0 606 4.5543849468231201e-02 -1 -2 607 + 2.3574009537696838e-02 + + 4.8842081427574158e-01 -4.6383219957351685e-01 + 3.7443768233060837e-02 + <_> + 29 + -1.7628519535064697e+00 + + <_> + + 1 0 608 -3.2347131520509720e-02 -1 -2 609 + -7.4855431914329529e-02 + + -4.1153168678283691e-01 5.4409480094909668e-01 + -2.1043080091476440e-01 + <_> + + 0 1 610 -5.9164799749851227e-02 -1 -2 611 + -5.0734709948301315e-03 + + 4.6945521235466003e-01 8.0933347344398499e-02 + -4.0436869859695435e-01 + <_> + + 0 1 612 6.6304411739110947e-03 -1 -2 613 + 2.2804280743002892e-02 + + -3.1943950057029724e-01 -3.5277611017227173e-01 + 3.6358159780502319e-01 + <_> + + 1 0 614 3.4148059785366058e-03 -1 -2 615 + -6.0696629807353020e-03 + + -4.2139899730682373e-01 2.8190940618515015e-01 + -2.5727981328964233e-01 + <_> + + 1 0 616 -3.3271780703216791e-03 -1 -2 617 + 1.2381239794194698e-02 + + -3.3380180597305298e-01 2.5831120088696480e-02 + 5.8200639486312866e-01 + <_> + + 0 1 618 -7.8561902046203613e-02 -1 -2 619 + -7.6863910071551800e-03 + + 5.7080817222595215e-01 1.9097380340099335e-01 + -2.4749469757080078e-01 + <_> + + 1 0 620 3.9404830895364285e-03 -1 -2 621 + -7.0624810177832842e-05 + + -3.5295888781547546e-01 2.8438061475753784e-01 + -1.6469420492649078e-01 + <_> + + 0 1 622 -2.2568539716303349e-03 -1 -2 623 + -3.5595949739217758e-03 + + -4.6189218759536743e-01 2.4525940418243408e-01 + -1.8984979391098022e-01 + <_> + + 0 1 624 -3.0113100074231625e-03 -1 -2 625 + -6.2748990021646023e-03 + + 3.0594390630722046e-01 1.4716149866580963e-01 + -3.3265221118927002e-01 + <_> + + 1 0 626 2.5835279375314713e-03 -1 -2 627 + 3.2576550729572773e-03 + + -7.4853891134262085e-01 -1.4949619770050049e-01 + 2.6293671131134033e-01 + <_> + + 1 0 628 -2.6957978843711317e-04 -1 -2 629 + -4.4593680649995804e-03 + + -2.9468360543251038e-01 -4.5905289053916931e-01 + 2.2235380113124847e-01 + <_> + + 1 0 630 2.2841650061309338e-03 -1 -2 631 + -6.7595718428492546e-04 + + -6.3815939426422119e-01 -3.1756940484046936e-01 + 1.4903070032596588e-01 + <_> + + 1 0 632 6.1428439803421497e-03 -1 -2 633 + 2.7392068877816200e-03 + + 2.4187029898166656e-01 -3.1487539410591125e-01 + 2.3589129745960236e-01 + <_> + + 0 1 634 -2.0209311041980982e-03 -1 -2 635 + 2.6892140507698059e-02 + + 2.5389561057090759e-01 -3.4391039609909058e-01 + 2.3010760545730591e-01 + <_> + + 1 0 636 1.4671060256659985e-02 -1 -2 637 + -1.2444119900465012e-02 + + 5.9517538547515869e-01 3.7335929274559021e-01 + -1.4540639519691467e-01 + <_> + + 0 1 638 2.0527220331132412e-03 -1 -2 639 + -1.7088990658521652e-02 + + -2.1135020256042480e-01 -7.2516232728958130e-01 + 2.3358739912509918e-01 + <_> + + 0 1 640 -9.8585523664951324e-03 -1 -2 641 + -1.0541190393269062e-02 + + 4.5390421152114868e-01 3.5500058531761169e-01 + -1.7118500173091888e-01 + <_> + + 1 0 642 4.0034228004515171e-03 -1 -2 643 + -1.1889140121638775e-02 + + -7.0433962345123291e-01 4.0436559915542603e-01 + -4.6263620257377625e-02 + <_> + + 0 1 644 -2.0685700699687004e-02 -1 -2 645 + -7.9243928194046021e-03 + + -6.4347600936889648e-01 -5.3632920980453491e-01 + 1.1002989858388901e-01 + <_> + + 1 0 646 1.2431150535121560e-03 -1 -2 647 + -4.2312019504606724e-03 + + 4.1220021247863770e-01 7.9887658357620239e-02 + -3.0926740169525146e-01 + <_> + + 1 0 648 9.8197339102625847e-03 -1 -2 649 + 4.5455411076545715e-02 + + -6.0976761579513550e-01 1.0621140152215958e-01 + -6.4687371253967285e-01 + <_> + + 1 0 650 2.6892758905887604e-03 -1 -2 651 + -1.5172710409387946e-03 + + -4.9122989177703857e-01 1.7578749358654022e-01 + -2.6818940043449402e-01 + <_> + + 1 0 652 6.2014168361201882e-04 -1 -2 653 + -2.0233519899193197e-04 + + 2.5500729680061340e-01 7.2745857760310173e-03 + -5.0815272331237793e-01 + <_> + + 1 0 654 3.1760020647197962e-03 -1 -2 655 + -1.2668699491769075e-03 + + 4.3849268555641174e-01 1.6349400579929352e-01 + -2.9128161072731018e-01 + <_> + + 1 0 656 5.1056100055575371e-03 -1 -2 657 + -1.5026510227471590e-03 + + -7.5001358985900879e-01 2.7198830246925354e-01 + -9.9486798048019409e-02 + <_> + + 0 1 658 -3.6238620523363352e-03 -1 -2 659 + 7.6577658765017986e-03 + + -6.0396248102188110e-01 1.0938379913568497e-01 + -5.3007638454437256e-01 + <_> + + 0 1 660 -3.1830249354243279e-03 -1 -2 661 + 1.0931329801678658e-02 + + -4.7724890708923340e-01 -4.3065819889307022e-02 + 3.8945859670639038e-01 + <_> + + 0 1 662 -1.0047679534181952e-03 -1 -2 663 + -4.6660430729389191e-02 + + 4.1553598642349243e-01 3.0159878730773926e-01 + -1.6184380650520325e-01 + <_> + + 1 0 664 3.2002381049096584e-03 -1 -2 665 + -1.7367519903928041e-03 + + -5.4621779918670654e-01 -2.1987779438495636e-01 + 1.9606420397758484e-01 + <_> + 33 + -1.8088439702987671e+00 + + <_> + + 0 1 666 1.7160519957542419e-02 -1 -2 667 + 1.4503560028970242e-02 + + -3.2273009419441223e-01 -3.9438620209693909e-01 + 5.7922977209091187e-01 + <_> + + 1 0 668 -9.0323518961668015e-03 -1 -2 669 + -6.9836131297051907e-03 + + -4.1536870598793030e-01 3.5515859723091125e-01 + -3.8177150487899780e-01 + <_> + + 0 1 670 -1.9220909103751183e-02 -1 -2 671 + -4.0087159723043442e-02 + + 4.5315900444984436e-01 1.7228379845619202e-01 + -3.1110560894012451e-01 + <_> + + 0 1 672 5.6549701839685440e-03 -1 -2 673 + -1.1611269786953926e-02 + + -4.0461608767509460e-01 2.9034239053726196e-01 + -2.2078509628772736e-01 + <_> + + 0 1 674 -1.0576159693300724e-03 -1 -2 675 + -1.3360800221562386e-03 + + 3.5851669311523438e-01 1.5968900173902512e-02 + -4.1990101337432861e-01 + <_> + + 1 0 676 5.2302791737020016e-03 -1 -2 677 + -2.7848479803651571e-03 + + -4.9663281440734863e-01 -5.2960211038589478e-01 + 1.5535449981689453e-01 + <_> + + 0 1 678 -2.5654129683971405e-02 -1 -2 679 + -6.8942131474614143e-03 + + -5.9309178590774536e-01 2.4318109452724457e-01 + -1.8231940269470215e-01 + <_> + + 1 0 680 -6.9622750743292272e-05 -1 -2 681 + -6.4154611900448799e-03 + + -3.2716289162635803e-01 -5.0821667909622192e-01 + 1.9543349742889404e-01 + <_> + + 0 1 682 -6.7164386564400047e-05 -1 -2 683 + 2.2416690364480019e-02 + + 1.8602199852466583e-01 -3.9281991124153137e-01 + 1.3279129564762115e-01 + <_> + + 1 0 684 8.4287580102682114e-03 -1 -2 685 + -8.7357551092281938e-04 + + -5.5447560548782349e-01 4.7158730030059814e-01 + -3.8492478430271149e-02 + <_> + + 1 0 686 -4.7496971092186868e-05 -1 -2 687 + 4.5816078782081604e-03 + + -2.5197029113769531e-01 2.0250399410724640e-01 + -6.1638081073760986e-01 + <_> + + 1 0 688 -1.1175150051712990e-02 -1 -2 689 + -7.4238609522581100e-03 + + -2.7771198749542236e-01 -5.0103437900543213e-01 + 1.9318529963493347e-01 + <_> + + 0 1 690 -3.0201480258256197e-03 -1 -2 691 + -3.0343679245561361e-03 + + -6.5904247760772705e-01 3.1962481141090393e-01 + -1.0512910038232803e-01 + <_> + + 0 1 692 -1.0971290059387684e-02 -1 -2 693 + 1.2000739661743864e-04 + + 3.2707008719444275e-01 -4.1679269075393677e-01 + 1.1645200103521347e-01 + <_> + + 1 0 694 2.1552699618041515e-03 -1 -2 695 + 1.5970800304785371e-03 + + 1.5389390289783478e-01 -4.2979270219802856e-01 + 1.9192950427532196e-01 + <_> + + 0 1 696 -4.3590939603745937e-03 -1 -2 697 + -6.5752048976719379e-03 + + -8.6613738536834717e-01 3.5298541188240051e-01 + -7.2624720633029938e-02 + <_> + + 1 0 698 3.5486191045492887e-03 -1 -2 699 + 1.7437560018151999e-03 + + -3.6141040921211243e-01 -4.0250919759273529e-02 + 4.1119590401649475e-01 + <_> + + 1 0 700 6.5892767452169210e-05 -1 -2 701 + 1.2217169627547264e-02 + + 1.5523989498615265e-01 -3.6567229032516479e-01 + 2.5159689784049988e-01 + <_> + + 1 0 702 6.0199309140443802e-02 -1 -2 703 + -9.1684371232986450e-02 + + -6.8959599733352661e-01 -6.6311872005462646e-01 + 9.4827361404895782e-02 + <_> + + 1 0 704 8.9392811059951782e-04 -1 -2 705 + -1.1146500473842025e-03 + + 2.8731009364128113e-01 3.6127060651779175e-01 + -2.4054229259490967e-01 + <_> + + 0 1 706 -1.1042780242860317e-02 -1 -2 707 + 3.7769351154565811e-02 + + -7.1686691045761108e-01 1.1125349998474121e-01 + -5.6320947408676147e-01 + <_> + + 1 0 708 5.5979429744184017e-03 -1 -2 709 + -2.5462140329182148e-03 + + -5.6998908519744873e-01 2.6734578609466553e-01 + -1.0527700185775757e-01 + <_> + + 0 1 710 -1.7929819878190756e-03 -1 -2 711 + -8.9686378487385809e-05 + + 1.7712120711803436e-01 1.6762410104274750e-01 + -4.1336658596992493e-01 + <_> + + 1 0 712 -6.8254990037530661e-04 -1 -2 713 + 4.0599349886178970e-03 + + -3.1327050924301147e-01 2.0312629640102386e-01 + -4.6360948681831360e-01 + <_> + + 1 0 714 1.5843180008232594e-03 -1 -2 715 + -4.6101640909910202e-02 + + 2.6413089036941528e-01 2.4587640166282654e-01 + -3.1151199340820312e-01 + <_> + + 1 0 716 1.5759950038045645e-03 -1 -2 717 + 3.5904631018638611e-02 + + -3.6593970656394958e-01 -1.3352620415389538e-02 + 4.9500739574432373e-01 + <_> + + 1 0 718 1.9230529665946960e-02 -1 -2 719 + 1.3461830094456673e-02 + + 1.8603560328483582e-01 -4.2704311013221741e-01 + 1.4756950736045837e-01 + <_> + + 1 0 720 6.3534970395267010e-03 -1 -2 721 + 4.7998740337789059e-03 + + -5.8824592828750610e-01 1.3966129720211029e-01 + -3.6948320269584656e-01 + <_> + + 0 1 722 -9.7894563805311918e-04 -1 -2 723 + 1.8534340197220445e-03 + + 4.3156591057777405e-01 -1.9053110480308533e-01 + 2.6868799328804016e-01 + <_> + + 1 0 724 5.5962381884455681e-04 -1 -2 725 + -8.1787789240479469e-03 + + -3.0545750260353088e-01 -7.2353351116180420e-01 + 1.6197769343852997e-01 + <_> + + 1 0 726 -6.4591833506710827e-05 -1 -2 727 + -4.2282380163669586e-03 + + -1.6121749579906464e-01 4.2441681027412415e-01 + -1.1488209664821625e-01 + <_> + + 0 1 728 -3.2379399053752422e-03 -1 -2 729 + -4.7763898037374020e-03 + + -8.2811427116394043e-01 3.9157009124755859e-01 + -3.7677429616451263e-02 + <_> + + 0 1 730 -6.1182728968560696e-03 -1 -2 731 + 3.1565790995955467e-03 + + 3.0208829045295715e-01 -1.9045789539813995e-01 + 3.0219689011573792e-01 + + <_> + + <_> + 8 12 3 8 -1. + <_> + 8 16 3 4 2. + <_> + + <_> + 5 11 8 9 -1. + <_> + 7 11 4 9 2. + <_> + + <_> + 8 7 11 12 -1. + <_> + 8 11 11 4 3. + <_> + + <_> + 1 0 7 8 -1. + <_> + 1 4 7 4 2. + <_> + + <_> + 9 7 6 6 -1. + <_> + 7 9 6 2 3. + 1 + <_> + + <_> + 0 0 7 4 -1. + <_> + 0 2 7 2 2. + <_> + + <_> + 16 13 4 4 -1. + <_> + 18 13 2 4 2. + <_> + + <_> + 17 15 2 3 -1. + <_> + 17 15 1 3 2. + 1 + <_> + + <_> + 0 13 6 2 -1. + <_> + 2 13 2 2 3. + <_> + + <_> + 5 0 6 6 -1. + <_> + 7 0 2 6 3. + <_> + + <_> + 5 7 9 12 -1. + <_> + 8 11 3 4 9. + <_> + + <_> + 5 6 4 10 -1. + <_> + 5 6 2 5 2. + <_> + 7 11 2 5 2. + <_> + + <_> + 8 12 11 8 -1. + <_> + 8 16 11 4 2. + <_> + + <_> + 0 0 1 8 -1. + <_> + 0 4 1 4 2. + <_> + + <_> + 0 0 6 6 -1. + <_> + 3 0 3 6 2. + <_> + + <_> + 14 14 6 6 -1. + <_> + 14 17 6 3 2. + <_> + + <_> + 5 13 9 7 -1. + <_> + 8 13 3 7 3. + <_> + + <_> + 6 17 6 3 -1. + <_> + 8 17 2 3 3. + <_> + + <_> + 0 0 4 4 -1. + <_> + 0 2 4 2 2. + <_> + + <_> + 1 0 3 3 -1. + <_> + 2 1 1 1 9. + <_> + + <_> + 3 18 6 2 -1. + <_> + 3 19 6 1 2. + <_> + + <_> + 7 18 4 2 -1. + <_> + 8 18 2 2 2. + <_> + + <_> + 6 10 12 2 -1. + <_> + 6 11 12 1 2. + <_> + + <_> + 15 8 3 1 -1. + <_> + 16 9 1 1 3. + 1 + <_> + + <_> + 5 7 9 12 -1. + <_> + 8 11 3 4 9. + <_> + + <_> + 16 13 1 6 -1. + <_> + 16 16 1 3 2. + <_> + + <_> + 9 7 5 6 -1. + <_> + 7 9 5 2 3. + 1 + <_> + + <_> + 16 12 4 6 -1. + <_> + 18 12 2 6 2. + <_> + + <_> + 0 0 6 8 -1. + <_> + 0 4 6 4 2. + <_> + + <_> + 3 1 15 12 -1. + <_> + 3 5 15 4 3. + <_> + + <_> + 11 12 9 8 -1. + <_> + 11 16 9 4 2. + <_> + + <_> + 0 0 12 9 -1. + <_> + 4 0 4 9 3. + <_> + + <_> + 0 12 6 4 -1. + <_> + 2 12 2 4 3. + <_> + + <_> + 10 18 4 2 -1. + <_> + 11 18 2 2 2. + <_> + + <_> + 5 2 3 3 -1. + <_> + 6 2 1 3 3. + <_> + + <_> + 12 18 3 2 -1. + <_> + 13 18 1 2 3. + <_> + + <_> + 0 0 2 8 -1. + <_> + 1 0 1 8 2. + <_> + + <_> + 5 18 4 2 -1. + <_> + 5 19 4 1 2. + <_> + + <_> + 14 11 6 6 -1. + <_> + 17 11 3 6 2. + <_> + + <_> + 6 12 8 4 -1. + <_> + 8 12 4 4 2. + <_> + + <_> + 12 6 4 9 -1. + <_> + 9 9 4 3 3. + 1 + <_> + + <_> + 11 9 4 7 -1. + <_> + 12 10 2 7 2. + 1 + <_> + + <_> + 5 8 4 8 -1. + <_> + 5 8 2 4 2. + <_> + 7 12 2 4 2. + <_> + + <_> + 8 12 11 8 -1. + <_> + 8 16 11 4 2. + <_> + + <_> + 3 0 14 6 -1. + <_> + 3 3 14 3 2. + <_> + + <_> + 7 1 6 12 -1. + <_> + 7 4 6 6 2. + <_> + + <_> + 0 18 7 2 -1. + <_> + 0 19 7 1 2. + <_> + + <_> + 16 12 4 3 -1. + <_> + 18 12 2 3 2. + <_> + + <_> + 0 0 4 8 -1. + <_> + 2 0 2 8 2. + <_> + + <_> + 3 0 4 1 -1. + <_> + 5 0 2 1 2. + <_> + + <_> + 3 13 2 2 -1. + <_> + 3 13 2 1 2. + 1 + <_> + + <_> + 0 16 19 4 -1. + <_> + 0 18 19 2 2. + <_> + + <_> + 7 13 8 2 -1. + <_> + 11 13 4 2 2. + <_> + + <_> + 8 8 4 1 -1. + <_> + 9 8 2 1 2. + <_> + + <_> + 0 1 1 4 -1. + <_> + 0 3 1 2 2. + <_> + + <_> + 0 0 1 4 -1. + <_> + 0 1 1 2 2. + <_> + + <_> + 15 15 5 2 -1. + <_> + 15 16 5 1 2. + <_> + + <_> + 7 18 3 2 -1. + <_> + 8 18 1 2 3. + <_> + + <_> + 13 7 3 8 -1. + <_> + 11 9 3 4 2. + 1 + <_> + + <_> + 15 12 2 8 -1. + <_> + 15 16 2 4 2. + <_> + + <_> + 2 0 10 6 -1. + <_> + 2 3 10 3 2. + <_> + + <_> + 0 5 18 15 -1. + <_> + 6 10 6 5 9. + <_> + + <_> + 3 11 12 6 -1. + <_> + 7 13 4 2 9. + <_> + + <_> + 16 12 4 7 -1. + <_> + 18 12 2 7 2. + <_> + + <_> + 8 18 4 2 -1. + <_> + 9 18 2 2 2. + <_> + + <_> + 8 17 4 3 -1. + <_> + 9 17 2 3 2. + <_> + + <_> + 0 12 6 6 -1. + <_> + 2 12 2 6 3. + <_> + + <_> + 4 16 4 4 -1. + <_> + 5 16 2 4 2. + <_> + + <_> + 3 0 4 6 -1. + <_> + 4 0 2 6 2. + <_> + + <_> + 1 0 4 7 -1. + <_> + 2 0 2 7 2. + <_> + + <_> + 2 0 8 3 -1. + <_> + 6 0 4 3 2. + <_> + + <_> + 8 3 4 6 -1. + <_> + 9 3 2 6 2. + <_> + + <_> + 10 10 3 2 -1. + <_> + 10 11 3 1 2. + <_> + + <_> + 4 3 7 6 -1. + <_> + 4 6 7 3 2. + <_> + + <_> + 10 18 10 2 -1. + <_> + 15 18 5 2 2. + <_> + + <_> + 9 13 6 1 -1. + <_> + 9 13 3 1 2. + 1 + <_> + + <_> + 10 8 4 6 -1. + <_> + 8 10 4 2 3. + 1 + <_> + + <_> + 14 12 6 8 -1. + <_> + 14 16 6 4 2. + <_> + + <_> + 10 8 6 4 -1. + <_> + 12 10 2 4 3. + 1 + <_> + + <_> + 0 12 6 3 -1. + <_> + 2 12 2 3 3. + <_> + + <_> + 18 11 2 6 -1. + <_> + 19 11 1 6 2. + <_> + + <_> + 0 0 1 10 -1. + <_> + 0 5 1 5 2. + <_> + + <_> + 5 4 8 12 -1. + <_> + 7 4 4 12 2. + <_> + + <_> + 1 3 9 8 -1. + <_> + 4 3 3 8 3. + <_> + + <_> + 0 0 2 2 -1. + <_> + 0 1 2 1 2. + <_> + + <_> + 12 8 6 12 -1. + <_> + 14 12 2 4 9. + <_> + + <_> + 4 2 14 6 -1. + <_> + 4 4 14 2 3. + <_> + + <_> + 3 0 12 8 -1. + <_> + 3 4 12 4 2. + <_> + + <_> + 0 0 17 20 -1. + <_> + 0 5 17 10 2. + <_> + + <_> + 4 0 13 6 -1. + <_> + 4 2 13 2 3. + <_> + + <_> + 2 10 3 6 -1. + <_> + 3 10 1 6 3. + <_> + + <_> + 4 14 6 4 -1. + <_> + 4 14 3 2 2. + <_> + 7 16 3 2 2. + <_> + + <_> + 8 1 6 8 -1. + <_> + 10 1 2 8 3. + <_> + + <_> + 0 1 2 6 -1. + <_> + 1 1 1 6 2. + <_> + + <_> + 8 12 1 3 -1. + <_> + 7 13 1 1 3. + 1 + <_> + + <_> + 5 4 8 4 -1. + <_> + 5 4 8 2 2. + 1 + <_> + + <_> + 0 2 4 5 -1. + <_> + 1 2 2 5 2. + <_> + + <_> + 5 12 3 2 -1. + <_> + 6 12 1 2 3. + <_> + + <_> + 5 13 8 2 -1. + <_> + 7 13 4 2 2. + <_> + + <_> + 11 9 9 8 -1. + <_> + 11 11 9 4 2. + <_> + + <_> + 16 12 4 3 -1. + <_> + 18 12 2 3 2. + <_> + + <_> + 16 14 4 6 -1. + <_> + 16 17 4 3 2. + <_> + + <_> + 0 12 6 3 -1. + <_> + 2 12 2 3 3. + <_> + + <_> + 8 6 7 6 -1. + <_> + 6 8 7 2 3. + 1 + <_> + + <_> + 0 0 1 6 -1. + <_> + 0 3 1 3 2. + <_> + + <_> + 0 2 15 5 -1. + <_> + 5 2 5 5 3. + <_> + + <_> + 8 11 10 3 -1. + <_> + 13 11 5 3 2. + <_> + + <_> + 8 11 2 8 -1. + <_> + 8 15 2 4 2. + <_> + + <_> + 0 1 2 6 -1. + <_> + 1 1 1 6 2. + <_> + + <_> + 0 1 4 4 -1. + <_> + 1 1 2 4 2. + <_> + + <_> + 5 16 3 1 -1. + <_> + 6 17 1 1 3. + 1 + <_> + + <_> + 5 0 7 15 -1. + <_> + 5 5 7 5 3. + <_> + + <_> + 17 0 3 2 -1. + <_> + 18 1 1 2 3. + 1 + <_> + + <_> + 4 18 6 2 -1. + <_> + 6 18 2 2 3. + <_> + + <_> + 7 1 4 5 -1. + <_> + 7 1 2 5 2. + 1 + <_> + + <_> + 14 0 6 8 -1. + <_> + 14 0 3 4 2. + <_> + 17 4 3 4 2. + <_> + + <_> + 5 2 4 18 -1. + <_> + 5 2 2 9 2. + <_> + 7 11 2 9 2. + <_> + + <_> + 7 18 6 2 -1. + <_> + 9 18 2 2 3. + <_> + + <_> + 10 8 2 3 -1. + <_> + 10 9 2 1 3. + <_> + + <_> + 10 10 4 2 -1. + <_> + 10 10 2 1 2. + <_> + 12 11 2 1 2. + <_> + + <_> + 4 2 12 6 -1. + <_> + 4 4 12 2 3. + <_> + + <_> + 5 1 12 8 -1. + <_> + 5 3 12 4 2. + <_> + + <_> + 2 18 4 2 -1. + <_> + 2 19 4 1 2. + <_> + + <_> + 0 18 8 1 -1. + <_> + 4 18 4 1 2. + <_> + + <_> + 4 7 12 12 -1. + <_> + 8 11 4 4 9. + <_> + + <_> + 16 11 4 6 -1. + <_> + 18 11 2 6 2. + <_> + + <_> + 6 13 6 7 -1. + <_> + 8 13 2 7 3. + <_> + + <_> + 0 0 1 8 -1. + <_> + 0 4 1 4 2. + <_> + + <_> + 15 14 5 6 -1. + <_> + 15 17 5 3 2. + <_> + + <_> + 0 7 6 9 -1. + <_> + 2 7 2 9 3. + <_> + + <_> + 15 11 4 1 -1. + <_> + 16 12 2 1 2. + 1 + <_> + + <_> + 11 11 8 2 -1. + <_> + 15 11 4 2 2. + <_> + + <_> + 0 1 12 11 -1. + <_> + 3 1 6 11 2. + <_> + + <_> + 8 8 6 4 -1. + <_> + 7 9 6 2 2. + 1 + <_> + + <_> + 6 17 6 3 -1. + <_> + 8 17 2 3 3. + <_> + + <_> + 0 0 1 4 -1. + <_> + 0 2 1 2 2. + <_> + + <_> + 3 1 1 3 -1. + <_> + 2 2 1 1 3. + 1 + <_> + + <_> + 18 11 2 3 -1. + <_> + 18 12 2 1 3. + <_> + + <_> + 3 12 2 8 -1. + <_> + 3 12 1 4 2. + <_> + 4 16 1 4 2. + <_> + + <_> + 3 12 3 3 -1. + <_> + 4 12 1 3 3. + <_> + + <_> + 11 18 4 2 -1. + <_> + 12 18 2 2 2. + <_> + + <_> + 17 10 3 3 -1. + <_> + 17 11 3 1 3. + <_> + + <_> + 7 14 5 2 -1. + <_> + 7 15 5 1 2. + <_> + + <_> + 6 0 4 5 -1. + <_> + 6 0 2 5 2. + 1 + <_> + + <_> + 6 1 5 8 -1. + <_> + 6 5 5 4 2. + <_> + + <_> + 3 1 9 8 -1. + <_> + 3 5 9 4 2. + <_> + + <_> + 2 14 15 6 -1. + <_> + 7 14 5 6 3. + <_> + + <_> + 12 3 6 5 -1. + <_> + 14 3 2 5 3. + <_> + + <_> + 5 16 2 2 -1. + <_> + 5 16 1 2 2. + 1 + <_> + + <_> + 5 16 2 2 -1. + <_> + 5 16 1 2 2. + 1 + <_> + + <_> + 9 8 6 4 -1. + <_> + 11 10 2 4 3. + 1 + <_> + + <_> + 4 11 3 4 -1. + <_> + 4 13 3 2 2. + <_> + + <_> + 13 8 6 12 -1. + <_> + 15 12 2 4 9. + <_> + + <_> + 0 0 1 10 -1. + <_> + 0 5 1 5 2. + <_> + + <_> + 0 12 6 4 -1. + <_> + 2 12 2 4 3. + <_> + + <_> + 7 5 8 6 -1. + <_> + 5 7 8 2 3. + 1 + <_> + + <_> + 3 1 16 4 -1. + <_> + 3 3 16 2 2. + <_> + + <_> + 6 2 10 9 -1. + <_> + 6 5 10 3 3. + <_> + + <_> + 14 10 6 10 -1. + <_> + 17 10 3 10 2. + <_> + + <_> + 5 17 4 3 -1. + <_> + 6 17 2 3 2. + <_> + + <_> + 5 12 3 2 -1. + <_> + 6 12 1 2 3. + <_> + + <_> + 5 12 3 2 -1. + <_> + 6 12 1 2 3. + <_> + + <_> + 0 0 2 9 -1. + <_> + 1 0 1 9 2. + <_> + + <_> + 2 6 3 2 -1. + <_> + 2 6 3 1 2. + 1 + <_> + + <_> + 7 16 6 3 -1. + <_> + 9 16 2 3 3. + <_> + + <_> + 7 17 6 2 -1. + <_> + 9 17 2 2 3. + <_> + + <_> + 6 3 9 6 -1. + <_> + 4 5 9 2 3. + 1 + <_> + + <_> + 6 15 3 2 -1. + <_> + 7 16 1 2 3. + 1 + <_> + + <_> + 6 2 3 3 -1. + <_> + 7 2 1 3 3. + <_> + + <_> + 2 1 6 4 -1. + <_> + 4 1 2 4 3. + <_> + + <_> + 13 11 4 2 -1. + <_> + 13 11 2 1 2. + <_> + 15 12 2 1 2. + <_> + + <_> + 14 10 2 2 -1. + <_> + 14 10 1 1 2. + <_> + 15 11 1 1 2. + <_> + + <_> + 17 7 3 3 -1. + <_> + 18 8 1 3 3. + 1 + <_> + + <_> + 17 7 3 2 -1. + <_> + 18 8 1 2 3. + 1 + <_> + + <_> + 0 3 1 2 -1. + <_> + 0 4 1 1 2. + <_> + + <_> + 10 1 2 5 -1. + <_> + 11 1 1 5 2. + <_> + + <_> + 1 8 3 12 -1. + <_> + 1 11 3 6 2. + <_> + + <_> + 2 10 8 2 -1. + <_> + 2 10 4 2 2. + 1 + <_> + + <_> + 6 12 3 3 -1. + <_> + 7 13 1 1 9. + <_> + + <_> + 6 11 3 4 -1. + <_> + 7 11 1 4 3. + <_> + + <_> + 5 17 4 2 -1. + <_> + 6 17 2 2 2. + <_> + + <_> + 0 19 20 1 -1. + <_> + 10 19 10 1 2. + <_> + + <_> + 5 11 8 5 -1. + <_> + 7 11 4 5 2. + <_> + + <_> + 10 8 8 9 -1. + <_> + 10 11 8 3 3. + <_> + + <_> + 0 13 6 2 -1. + <_> + 2 13 2 2 3. + <_> + + <_> + 18 14 2 1 -1. + <_> + 18 14 1 1 2. + 1 + <_> + + <_> + 1 2 2 4 -1. + <_> + 2 2 1 4 2. + <_> + + <_> + 5 5 8 5 -1. + <_> + 9 5 4 5 2. + <_> + + <_> + 7 13 5 4 -1. + <_> + 7 15 5 2 2. + <_> + + <_> + 17 18 3 2 -1. + <_> + 17 19 3 1 2. + <_> + + <_> + 0 2 1 2 -1. + <_> + 0 3 1 1 2. + <_> + + <_> + 3 0 1 3 -1. + <_> + 2 1 1 1 3. + 1 + <_> + + <_> + 10 11 3 4 -1. + <_> + 11 11 1 4 3. + <_> + + <_> + 14 11 4 8 -1. + <_> + 16 11 2 8 2. + <_> + + <_> + 2 2 9 6 -1. + <_> + 2 5 9 3 2. + <_> + + <_> + 0 4 17 8 -1. + <_> + 0 6 17 4 2. + <_> + + <_> + 15 17 5 3 -1. + <_> + 15 18 5 1 3. + <_> + + <_> + 2 11 2 8 -1. + <_> + 2 15 2 4 2. + <_> + + <_> + 3 12 3 3 -1. + <_> + 4 12 1 3 3. + <_> + + <_> + 3 12 9 7 -1. + <_> + 6 12 3 7 3. + <_> + + <_> + 13 1 4 7 -1. + <_> + 14 1 2 7 2. + <_> + + <_> + 3 16 2 2 -1. + <_> + 3 16 1 2 2. + 1 + <_> + + <_> + 3 17 2 1 -1. + <_> + 3 17 1 1 2. + 1 + <_> + + <_> + 4 9 6 6 -1. + <_> + 4 9 3 3 2. + <_> + 7 12 3 3 2. + <_> + + <_> + 11 13 3 1 -1. + <_> + 12 13 1 1 3. + <_> + + <_> + 0 0 20 3 -1. + <_> + 5 0 10 3 2. + <_> + + <_> + 0 0 1 2 -1. + <_> + 0 1 1 1 2. + <_> + + <_> + 17 0 3 1 -1. + <_> + 18 1 1 1 3. + 1 + <_> + + <_> + 4 0 8 9 -1. + <_> + 4 3 8 3 3. + <_> + + <_> + 6 0 6 4 -1. + <_> + 6 2 6 2 2. + <_> + + <_> + 18 0 2 1 -1. + <_> + 18 0 1 1 2. + 1 + <_> + + <_> + 14 2 6 1 -1. + <_> + 17 2 3 1 2. + <_> + + <_> + 5 13 8 2 -1. + <_> + 7 13 4 2 2. + <_> + + <_> + 15 12 3 8 -1. + <_> + 15 16 3 4 2. + <_> + + <_> + 5 10 8 3 -1. + <_> + 5 11 8 1 3. + <_> + + <_> + 5 0 11 9 -1. + <_> + 5 3 11 3 3. + <_> + + <_> + 18 14 2 2 -1. + <_> + 19 14 1 2 2. + <_> + + <_> + 1 3 9 8 -1. + <_> + 4 3 3 8 3. + <_> + + <_> + 3 6 2 3 -1. + <_> + 2 7 2 1 3. + 1 + <_> + + <_> + 3 6 2 3 -1. + <_> + 2 7 2 1 3. + 1 + <_> + + <_> + 17 7 1 12 -1. + <_> + 13 11 1 4 3. + 1 + <_> + + <_> + 0 0 1 15 -1. + <_> + 0 5 1 5 3. + <_> + + <_> + 6 9 6 3 -1. + <_> + 6 10 6 1 3. + <_> + + <_> + 3 18 3 2 -1. + <_> + 3 19 3 1 2. + <_> + + <_> + 16 17 4 3 -1. + <_> + 16 18 4 1 3. + <_> + + <_> + 10 17 4 3 -1. + <_> + 11 17 2 3 2. + <_> + + <_> + 13 13 4 3 -1. + <_> + 14 13 2 3 2. + <_> + + <_> + 4 15 3 2 -1. + <_> + 5 16 1 2 3. + 1 + <_> + + <_> + 0 4 2 2 -1. + <_> + 1 4 1 2 2. + <_> + + <_> + 4 0 2 5 -1. + <_> + 5 0 1 5 2. + <_> + + <_> + 1 9 3 8 -1. + <_> + 1 11 3 4 2. + <_> + + <_> + 5 8 1 3 -1. + <_> + 4 9 1 1 3. + 1 + <_> + + <_> + 4 13 2 1 -1. + <_> + 5 13 1 1 2. + <_> + + <_> + 9 11 4 9 -1. + <_> + 11 11 2 9 2. + <_> + + <_> + 0 1 1 2 -1. + <_> + 0 2 1 1 2. + <_> + + <_> + 0 0 1 3 -1. + <_> + 0 1 1 1 3. + <_> + + <_> + 12 11 1 4 -1. + <_> + 12 12 1 2 2. + <_> + + <_> + 16 10 3 3 -1. + <_> + 15 11 3 1 3. + 1 + <_> + + <_> + 18 12 1 6 -1. + <_> + 18 12 1 3 2. + 1 + <_> + + <_> + 4 17 3 2 -1. + <_> + 5 17 1 2 3. + <_> + + <_> + 17 7 3 2 -1. + <_> + 18 8 1 2 3. + 1 + <_> + + <_> + 18 9 2 1 -1. + <_> + 18 9 1 1 2. + 1 + <_> + + <_> + 8 11 4 5 -1. + <_> + 9 12 2 5 2. + 1 + <_> + + <_> + 7 1 2 7 -1. + <_> + 8 1 1 7 2. + <_> + + <_> + 4 4 14 6 -1. + <_> + 4 6 14 2 3. + <_> + + <_> + 2 2 11 6 -1. + <_> + 2 5 11 3 2. + <_> + + <_> + 18 16 2 2 -1. + <_> + 18 17 2 1 2. + <_> + + <_> + 17 11 2 6 -1. + <_> + 18 11 1 6 2. + <_> + + <_> + 17 0 3 3 -1. + <_> + 18 1 1 3 3. + 1 + <_> + + <_> + 18 0 2 6 -1. + <_> + 18 3 2 3 2. + <_> + + <_> + 4 7 6 8 -1. + <_> + 4 7 3 4 2. + <_> + 7 11 3 4 2. + <_> + + <_> + 11 11 4 2 -1. + <_> + 11 11 2 2 2. + 1 + <_> + + <_> + 0 0 6 7 -1. + <_> + 3 0 3 7 2. + <_> + + <_> + 15 10 5 8 -1. + <_> + 15 12 5 4 2. + <_> + + <_> + 2 10 3 8 -1. + <_> + 3 10 1 8 3. + <_> + + <_> + 9 7 6 6 -1. + <_> + 7 9 6 2 3. + 1 + <_> + + <_> + 4 1 6 6 -1. + <_> + 4 4 6 3 2. + <_> + + <_> + 4 0 16 2 -1. + <_> + 4 1 16 1 2. + <_> + + <_> + 14 8 6 6 -1. + <_> + 14 8 3 3 2. + <_> + 17 11 3 3 2. + <_> + + <_> + 4 12 2 8 -1. + <_> + 4 12 1 4 2. + <_> + 5 16 1 4 2. + <_> + + <_> + 0 18 7 2 -1. + <_> + 0 19 7 1 2. + <_> + + <_> + 9 13 1 4 -1. + <_> + 9 15 1 2 2. + <_> + + <_> + 18 10 2 8 -1. + <_> + 19 10 1 8 2. + <_> + + <_> + 6 0 4 8 -1. + <_> + 7 0 2 8 2. + <_> + + <_> + 1 2 6 6 -1. + <_> + 3 2 2 6 3. + <_> + + <_> + 10 10 8 2 -1. + <_> + 10 10 4 1 2. + <_> + 14 11 4 1 2. + <_> + + <_> + 3 9 2 3 -1. + <_> + 2 10 2 1 3. + 1 + <_> + + <_> + 5 1 13 6 -1. + <_> + 5 3 13 2 3. + <_> + + <_> + 4 4 13 6 -1. + <_> + 4 6 13 2 3. + <_> + + <_> + 8 1 4 5 -1. + <_> + 8 1 2 5 2. + 1 + <_> + + <_> + 7 7 2 1 -1. + <_> + 8 7 1 1 2. + <_> + + <_> + 5 5 4 4 -1. + <_> + 6 5 2 4 2. + <_> + + <_> + 14 12 4 2 -1. + <_> + 14 12 2 1 2. + <_> + 16 13 2 1 2. + <_> + + <_> + 13 11 4 2 -1. + <_> + 13 11 2 1 2. + <_> + 15 12 2 1 2. + <_> + + <_> + 16 10 4 3 -1. + <_> + 16 11 4 1 3. + <_> + + <_> + 10 0 4 5 -1. + <_> + 11 0 2 5 2. + <_> + + <_> + 8 11 1 3 -1. + <_> + 7 12 1 1 3. + 1 + <_> + + <_> + 6 12 3 2 -1. + <_> + 7 12 1 2 3. + <_> + + <_> + 17 8 2 3 -1. + <_> + 17 8 1 3 2. + 1 + <_> + + <_> + 11 0 6 5 -1. + <_> + 13 0 2 5 3. + <_> + + <_> + 0 0 3 3 -1. + <_> + 0 1 3 1 3. + <_> + + <_> + 2 0 1 2 -1. + <_> + 2 1 1 1 2. + <_> + + <_> + 13 11 7 2 -1. + <_> + 13 12 7 1 2. + <_> + + <_> + 17 8 3 3 -1. + <_> + 18 9 1 3 3. + 1 + <_> + + <_> + 15 15 1 3 -1. + <_> + 14 16 1 1 3. + 1 + <_> + + <_> + 6 13 6 2 -1. + <_> + 8 13 2 2 3. + <_> + + <_> + 8 10 3 4 -1. + <_> + 9 10 1 4 3. + <_> + + <_> + 7 0 12 19 -1. + <_> + 13 0 6 19 2. + <_> + + <_> + 12 16 8 4 -1. + <_> + 12 18 8 2 2. + <_> + + <_> + 8 5 12 2 -1. + <_> + 14 5 6 2 2. + <_> + + <_> + 10 8 6 4 -1. + <_> + 12 10 2 4 3. + 1 + <_> + + <_> + 4 11 3 4 -1. + <_> + 4 13 3 2 2. + <_> + + <_> + 0 2 12 7 -1. + <_> + 3 2 6 7 2. + <_> + + <_> + 8 0 4 2 -1. + <_> + 8 0 2 2 2. + 1 + <_> + + <_> + 13 11 6 6 -1. + <_> + 15 13 2 2 9. + <_> + + <_> + 7 11 10 4 -1. + <_> + 12 11 5 4 2. + <_> + + <_> + 1 11 4 5 -1. + <_> + 2 11 2 5 2. + <_> + + <_> + 2 14 4 2 -1. + <_> + 3 15 2 2 2. + 1 + <_> + + <_> + 0 0 1 6 -1. + <_> + 0 3 1 3 2. + <_> + + <_> + 6 2 6 6 -1. + <_> + 6 5 6 3 2. + <_> + + <_> + 6 18 4 2 -1. + <_> + 7 18 2 2 2. + <_> + + <_> + 6 18 4 2 -1. + <_> + 7 18 2 2 2. + <_> + + <_> + 4 4 7 4 -1. + <_> + 3 5 7 2 2. + 1 + <_> + + <_> + 5 8 8 12 -1. + <_> + 7 8 4 12 2. + <_> + + <_> + 5 17 2 1 -1. + <_> + 5 17 1 1 2. + 1 + <_> + + <_> + 4 18 2 1 -1. + <_> + 5 18 1 1 2. + <_> + + <_> + 13 16 7 2 -1. + <_> + 13 17 7 1 2. + <_> + + <_> + 7 15 2 3 -1. + <_> + 7 15 1 3 2. + 1 + <_> + + <_> + 9 2 4 5 -1. + <_> + 10 2 2 5 2. + <_> + + <_> + 7 2 4 6 -1. + <_> + 8 2 2 6 2. + <_> + + <_> + 3 12 3 3 -1. + <_> + 4 12 1 3 3. + <_> + + <_> + 5 12 3 3 -1. + <_> + 6 13 1 1 9. + <_> + + <_> + 4 12 3 2 -1. + <_> + 5 12 1 2 3. + <_> + + <_> + 10 13 3 1 -1. + <_> + 11 13 1 1 3. + <_> + + <_> + 11 5 4 3 -1. + <_> + 12 5 2 3 2. + <_> + + <_> + 19 7 1 10 -1. + <_> + 19 12 1 5 2. + <_> + + <_> + 4 8 2 3 -1. + <_> + 3 9 2 1 3. + 1 + <_> + + <_> + 7 0 6 5 -1. + <_> + 9 0 2 5 3. + <_> + + <_> + 5 0 6 2 -1. + <_> + 5 0 3 2 2. + 1 + <_> + + <_> + 5 0 13 9 -1. + <_> + 5 3 13 3 3. + <_> + + <_> + 0 6 1 2 -1. + <_> + 0 7 1 1 2. + <_> + + <_> + 1 0 16 6 -1. + <_> + 1 2 16 2 3. + <_> + + <_> + 18 0 2 4 -1. + <_> + 18 0 1 4 2. + 1 + <_> + + <_> + 4 13 2 2 -1. + <_> + 4 13 1 1 2. + <_> + 5 14 1 1 2. + <_> + + <_> + 0 3 4 1 -1. + <_> + 2 3 2 1 2. + <_> + + <_> + 3 0 8 12 -1. + <_> + 3 6 8 6 2. + <_> + + <_> + 12 13 4 1 -1. + <_> + 13 13 2 1 2. + <_> + + <_> + 12 12 2 2 -1. + <_> + 12 12 1 1 2. + <_> + 13 13 1 1 2. + <_> + + <_> + 5 16 3 1 -1. + <_> + 6 17 1 1 3. + 1 + <_> + + <_> + 3 13 8 4 -1. + <_> + 3 13 4 2 2. + <_> + 7 15 4 2 2. + <_> + + <_> + 0 8 18 3 -1. + <_> + 6 9 6 1 9. + <_> + + <_> + 8 4 6 5 -1. + <_> + 11 4 3 5 2. + <_> + + <_> + 5 14 9 1 -1. + <_> + 8 14 3 1 3. + <_> + + <_> + 4 0 4 4 -1. + <_> + 4 0 2 4 2. + 1 + <_> + + <_> + 7 9 12 8 -1. + <_> + 7 11 12 4 2. + <_> + + <_> + 18 15 2 1 -1. + <_> + 18 15 1 1 2. + 1 + <_> + + <_> + 3 13 2 4 -1. + <_> + 3 13 1 2 2. + <_> + 4 15 1 2 2. + <_> + + <_> + 4 7 3 3 -1. + <_> + 3 8 3 1 3. + 1 + <_> + + <_> + 0 1 2 7 -1. + <_> + 1 1 1 7 2. + <_> + + <_> + 4 0 3 9 -1. + <_> + 5 0 1 9 3. + <_> + + <_> + 15 10 3 3 -1. + <_> + 14 11 3 1 3. + 1 + <_> + + <_> + 12 11 2 2 -1. + <_> + 12 11 1 1 2. + <_> + 13 12 1 1 2. + <_> + + <_> + 0 0 1 4 -1. + <_> + 0 2 1 2 2. + <_> + + <_> + 12 18 8 2 -1. + <_> + 12 19 8 1 2. + <_> + + <_> + 17 9 2 2 -1. + <_> + 17 9 1 2 2. + 1 + <_> + + <_> + 16 10 4 2 -1. + <_> + 17 11 2 2 2. + 1 + <_> + + <_> + 7 13 10 1 -1. + <_> + 12 13 5 1 2. + <_> + + <_> + 7 7 4 3 -1. + <_> + 9 7 2 3 2. + <_> + + <_> + 9 18 6 2 -1. + <_> + 11 18 2 2 3. + <_> + + <_> + 8 18 6 2 -1. + <_> + 10 18 2 2 3. + <_> + + <_> + 17 9 3 1 -1. + <_> + 18 10 1 1 3. + 1 + <_> + + <_> + 17 7 2 11 -1. + <_> + 18 7 1 11 2. + <_> + + <_> + 8 2 4 4 -1. + <_> + 8 2 2 4 2. + 1 + <_> + + <_> + 6 6 2 3 -1. + <_> + 7 6 1 3 2. + <_> + + <_> + 7 0 9 5 -1. + <_> + 10 3 3 5 3. + 1 + <_> + + <_> + 1 0 15 9 -1. + <_> + 6 3 5 3 9. + <_> + + <_> + 2 12 4 3 -1. + <_> + 3 12 2 3 2. + <_> + + <_> + 0 12 4 5 -1. + <_> + 1 12 2 5 2. + <_> + + <_> + 3 2 2 3 -1. + <_> + 2 3 2 1 3. + 1 + <_> + + <_> + 4 13 6 1 -1. + <_> + 4 13 3 1 2. + 1 + <_> + + <_> + 5 0 4 6 -1. + <_> + 6 0 2 6 2. + <_> + + <_> + 2 17 2 1 -1. + <_> + 2 17 1 1 2. + 1 + <_> + + <_> + 4 9 1 3 -1. + <_> + 3 10 1 1 3. + 1 + <_> + + <_> + 0 2 6 9 -1. + <_> + 2 2 2 9 3. + <_> + + <_> + 16 7 2 2 -1. + <_> + 16 7 1 2 2. + 1 + <_> + + <_> + 7 2 6 4 -1. + <_> + 9 2 2 4 3. + <_> + + <_> + 7 18 6 2 -1. + <_> + 9 18 2 2 3. + <_> + + <_> + 1 14 6 4 -1. + <_> + 3 14 2 4 3. + <_> + + <_> + 6 8 7 3 -1. + <_> + 5 9 7 1 3. + 1 + <_> + + <_> + 14 12 4 1 -1. + <_> + 15 13 2 1 2. + 1 + <_> + + <_> + 4 12 3 2 -1. + <_> + 5 12 1 2 3. + <_> + + <_> + 5 12 3 3 -1. + <_> + 6 12 1 3 3. + <_> + + <_> + 18 2 2 2 -1. + <_> + 19 2 1 2 2. + <_> + + <_> + 14 0 6 1 -1. + <_> + 17 0 3 1 2. + <_> + + <_> + 17 0 3 3 -1. + <_> + 18 1 1 3 3. + 1 + <_> + + <_> + 11 4 6 8 -1. + <_> + 13 4 2 8 3. + <_> + + <_> + 7 12 3 2 -1. + <_> + 8 12 1 2 3. + <_> + + <_> + 16 0 3 2 -1. + <_> + 16 1 3 1 2. + <_> + + <_> + 5 11 9 4 -1. + <_> + 8 11 3 4 3. + <_> + + <_> + 12 9 1 6 -1. + <_> + 12 11 1 2 3. + <_> + + <_> + 4 0 4 4 -1. + <_> + 4 0 2 4 2. + 1 + <_> + + <_> + 5 1 11 12 -1. + <_> + 5 5 11 4 3. + <_> + + <_> + 16 12 4 8 -1. + <_> + 18 12 2 8 2. + <_> + + <_> + 18 14 2 6 -1. + <_> + 18 17 2 3 2. + <_> + + <_> + 1 12 4 4 -1. + <_> + 2 12 2 4 2. + <_> + + <_> + 6 7 6 4 -1. + <_> + 5 8 6 2 2. + 1 + <_> + + <_> + 5 15 3 2 -1. + <_> + 6 16 1 2 3. + 1 + <_> + + <_> + 6 16 3 1 -1. + <_> + 7 17 1 1 3. + 1 + <_> + + <_> + 10 14 1 2 -1. + <_> + 10 14 1 1 2. + 1 + <_> + + <_> + 4 7 3 3 -1. + <_> + 3 8 3 1 3. + 1 + <_> + + <_> + 2 0 6 8 -1. + <_> + 4 0 2 8 3. + <_> + + <_> + 2 5 6 3 -1. + <_> + 4 5 2 3 3. + <_> + + <_> + 3 11 3 6 -1. + <_> + 4 11 1 6 3. + <_> + + <_> + 15 11 2 3 -1. + <_> + 14 12 2 1 3. + 1 + <_> + + <_> + 11 17 4 3 -1. + <_> + 12 17 2 3 2. + <_> + + <_> + 13 11 2 2 -1. + <_> + 13 11 1 1 2. + <_> + 14 12 1 1 2. + <_> + + <_> + 13 11 2 2 -1. + <_> + 13 11 1 1 2. + <_> + 14 12 1 1 2. + <_> + + <_> + 8 2 5 6 -1. + <_> + 8 5 5 3 2. + <_> + + <_> + 0 0 1 2 -1. + <_> + 0 1 1 1 2. + <_> + + <_> + 0 8 10 4 -1. + <_> + 0 10 10 2 2. + <_> + + <_> + 17 11 3 1 -1. + <_> + 18 12 1 1 3. + 1 + <_> + + <_> + 7 18 2 2 -1. + <_> + 8 18 1 2 2. + <_> + + <_> + 0 6 18 4 -1. + <_> + 9 6 9 4 2. + <_> + + <_> + 2 12 12 8 -1. + <_> + 6 12 4 8 3. + <_> + + <_> + 1 0 14 1 -1. + <_> + 8 0 7 1 2. + <_> + + <_> + 8 0 12 19 -1. + <_> + 14 0 6 19 2. + <_> + + <_> + 7 12 3 2 -1. + <_> + 8 12 1 2 3. + <_> + + <_> + 8 11 3 5 -1. + <_> + 9 11 1 5 3. + <_> + + <_> + 7 18 3 2 -1. + <_> + 8 18 1 2 3. + <_> + + <_> + 5 13 2 2 -1. + <_> + 5 13 1 1 2. + <_> + 6 14 1 1 2. + <_> + + <_> + 16 9 3 1 -1. + <_> + 17 10 1 1 3. + 1 + <_> + + <_> + 18 0 2 3 -1. + <_> + 18 0 1 3 2. + 1 + <_> + + <_> + 4 2 15 6 -1. + <_> + 4 4 15 2 3. + <_> + + <_> + 10 0 10 4 -1. + <_> + 10 0 5 2 2. + <_> + 15 2 5 2 2. + <_> + + <_> + 5 0 12 6 -1. + <_> + 5 2 12 2 3. + <_> + + <_> + 12 1 8 6 -1. + <_> + 12 1 4 3 2. + <_> + 16 4 4 3 2. + <_> + + <_> + 0 3 2 1 -1. + <_> + 1 3 1 1 2. + <_> + + <_> + 16 7 2 4 -1. + <_> + 16 7 1 4 2. + 1 + <_> + + <_> + 15 17 5 3 -1. + <_> + 15 18 5 1 3. + <_> + + <_> + 6 12 6 8 -1. + <_> + 8 12 2 8 3. + <_> + + <_> + 5 12 2 2 -1. + <_> + 6 12 1 2 2. + <_> + + <_> + 13 12 4 6 -1. + <_> + 14 12 2 6 2. + <_> + + <_> + 17 0 3 4 -1. + <_> + 18 1 1 4 3. + 1 + <_> + + <_> + 4 0 4 10 -1. + <_> + 5 0 2 10 2. + <_> + + <_> + 5 12 3 3 -1. + <_> + 6 12 1 3 3. + <_> + + <_> + 11 12 3 3 -1. + <_> + 12 12 1 3 3. + <_> + + <_> + 3 2 1 3 -1. + <_> + 2 3 1 1 3. + 1 + <_> + + <_> + 2 1 8 1 -1. + <_> + 4 1 4 1 2. + <_> + + <_> + 0 3 18 12 -1. + <_> + 6 7 6 4 9. + <_> + + <_> + 12 18 6 2 -1. + <_> + 15 18 3 2 2. + <_> + + <_> + 11 9 4 7 -1. + <_> + 12 10 2 7 2. + 1 + <_> + + <_> + 15 8 3 12 -1. + <_> + 16 12 1 4 9. + <_> + + <_> + 6 10 7 3 -1. + <_> + 6 11 7 1 3. + <_> + + <_> + 4 9 10 3 -1. + <_> + 4 10 10 1 3. + <_> + + <_> + 0 1 15 7 -1. + <_> + 5 1 5 7 3. + <_> + + <_> + 0 0 1 18 -1. + <_> + 0 6 1 6 3. + <_> + + <_> + 9 13 2 4 -1. + <_> + 8 14 2 2 2. + 1 + <_> + + <_> + 16 16 4 4 -1. + <_> + 16 18 4 2 2. + <_> + + <_> + 1 10 4 8 -1. + <_> + 2 10 2 8 2. + <_> + + <_> + 2 15 3 2 -1. + <_> + 3 16 1 2 3. + 1 + <_> + + <_> + 2 17 2 1 -1. + <_> + 2 17 1 1 2. + 1 + <_> + + <_> + 18 10 2 8 -1. + <_> + 18 10 2 4 2. + 1 + <_> + + <_> + 0 11 18 3 -1. + <_> + 6 12 6 1 9. + <_> + + <_> + 15 10 4 2 -1. + <_> + 16 11 2 2 2. + 1 + <_> + + <_> + 9 1 5 4 -1. + <_> + 9 3 5 2 2. + <_> + + <_> + 6 1 7 6 -1. + <_> + 6 4 7 3 2. + <_> + + <_> + 3 3 8 6 -1. + <_> + 3 6 8 3 2. + <_> + + <_> + 16 1 4 2 -1. + <_> + 18 1 2 2 2. + <_> + + <_> + 18 12 2 3 -1. + <_> + 18 13 2 1 3. + <_> + + <_> + 17 6 2 8 -1. + <_> + 17 6 1 4 2. + <_> + 18 10 1 4 2. + <_> + + <_> + 17 5 3 4 -1. + <_> + 18 6 1 4 3. + 1 + <_> + + <_> + 0 9 4 8 -1. + <_> + 0 11 4 4 2. + <_> + + <_> + 0 6 3 8 -1. + <_> + 0 10 3 4 2. + <_> + + <_> + 14 11 2 2 -1. + <_> + 14 11 1 1 2. + <_> + 15 12 1 1 2. + <_> + + <_> + 15 11 3 3 -1. + <_> + 14 12 3 1 3. + 1 + <_> + + <_> + 14 12 5 2 -1. + <_> + 14 13 5 1 2. + <_> + + <_> + 19 12 1 2 -1. + <_> + 19 13 1 1 2. + <_> + + <_> + 6 0 4 7 -1. + <_> + 7 0 2 7 2. + <_> + + <_> + 12 12 3 2 -1. + <_> + 12 13 3 1 2. + <_> + + <_> + 12 13 4 2 -1. + <_> + 12 13 2 1 2. + <_> + 14 14 2 1 2. + <_> + + <_> + 16 18 4 2 -1. + <_> + 16 19 4 1 2. + <_> + + <_> + 14 18 1 2 -1. + <_> + 14 19 1 1 2. + <_> + + <_> + 16 0 3 2 -1. + <_> + 17 1 1 2 3. + 1 + <_> + + <_> + 16 0 4 2 -1. + <_> + 17 1 2 2 2. + 1 + <_> + + <_> + 12 13 2 2 -1. + <_> + 12 13 1 1 2. + <_> + 13 14 1 1 2. + <_> + + <_> + 7 10 4 2 -1. + <_> + 7 10 2 2 2. + 1 + <_> + + <_> + 3 3 1 3 -1. + <_> + 2 4 1 1 3. + 1 + <_> + + <_> + 3 4 2 3 -1. + <_> + 2 5 2 1 3. + 1 + <_> + + <_> + 3 0 16 6 -1. + <_> + 3 2 16 2 3. + <_> + + <_> + 12 2 2 5 -1. + <_> + 12 2 1 5 2. + 1 + <_> + + <_> + 4 0 1 3 -1. + <_> + 3 1 1 1 3. + 1 + <_> + + <_> + 13 12 2 2 -1. + <_> + 13 12 1 1 2. + <_> + 14 13 1 1 2. + <_> + + <_> + 5 17 4 3 -1. + <_> + 6 17 2 3 2. + <_> + + <_> + 17 13 3 3 -1. + <_> + 17 14 3 1 3. + <_> + + <_> + 0 12 2 8 -1. + <_> + 0 12 1 4 2. + <_> + 1 16 1 4 2. + <_> + + <_> + 4 16 1 3 -1. + <_> + 3 17 1 1 3. + 1 + <_> + + <_> + 0 2 1 2 -1. + <_> + 0 3 1 1 2. + <_> + + <_> + 10 2 4 7 -1. + <_> + 11 2 2 7 2. + <_> + + <_> + 2 1 6 9 -1. + <_> + 2 4 6 3 3. + <_> + + <_> + 1 4 2 2 -1. + <_> + 2 4 1 2 2. + <_> + + <_> + 13 12 2 2 -1. + <_> + 13 12 1 1 2. + <_> + 14 13 1 1 2. + <_> + + <_> + 18 0 2 1 -1. + <_> + 19 0 1 1 2. + <_> + + <_> + 4 13 3 1 -1. + <_> + 5 13 1 1 3. + <_> + + <_> + 6 13 4 1 -1. + <_> + 7 13 2 1 2. + <_> + + <_> + 6 10 6 3 -1. + <_> + 6 11 6 1 3. + <_> + + <_> + 7 9 4 3 -1. + <_> + 7 10 4 1 3. + <_> + + <_> + 6 0 4 3 -1. + <_> + 6 0 2 3 2. + 1 + <_> + + <_> + 15 15 5 2 -1. + <_> + 15 16 5 1 2. + <_> + + <_> + 0 8 18 12 -1. + <_> + 6 12 6 4 9. + <_> + + <_> + 1 6 14 4 -1. + <_> + 8 6 7 4 2. + <_> + + <_> + 3 11 6 3 -1. + <_> + 2 12 6 1 3. + 1 + <_> + + <_> + 5 9 1 3 -1. + <_> + 4 10 1 1 3. + 1 + <_> + + <_> + 17 10 3 3 -1. + <_> + 18 11 1 3 3. + 1 + <_> + + <_> + 17 11 1 4 -1. + <_> + 16 12 1 2 2. + 1 + <_> + + <_> + 1 0 12 9 -1. + <_> + 4 0 6 9 2. + <_> + + <_> + 9 3 4 5 -1. + <_> + 10 3 2 5 2. + <_> + + <_> + 7 8 6 3 -1. + <_> + 7 9 6 1 3. + <_> + + <_> + 7 1 9 6 -1. + <_> + 7 3 9 2 3. + <_> + + <_> + 0 1 2 2 -1. + <_> + 0 2 2 1 2. + <_> + + <_> + 13 8 3 5 -1. + <_> + 14 9 1 5 3. + 1 + <_> + + <_> + 3 16 3 1 -1. + <_> + 4 17 1 1 3. + 1 + <_> + + <_> + 11 1 4 7 -1. + <_> + 12 1 2 7 2. + <_> + + <_> + 11 13 2 2 -1. + <_> + 11 13 1 1 2. + <_> + 12 14 1 1 2. + <_> + + <_> + 12 14 3 1 -1. + <_> + 13 14 1 1 3. + <_> + + <_> + 17 2 3 1 -1. + <_> + 18 3 1 1 3. + 1 + <_> + + <_> + 14 2 6 6 -1. + <_> + 14 2 3 3 2. + <_> + 17 5 3 3 2. + <_> + + <_> + 12 16 8 4 -1. + <_> + 12 18 8 2 2. + <_> + + <_> + 7 11 3 3 -1. + <_> + 6 12 3 1 3. + 1 + <_> + + <_> + 6 3 8 6 -1. + <_> + 4 5 8 2 3. + 1 + <_> + + <_> + 1 8 3 8 -1. + <_> + 1 10 3 4 2. + <_> + + <_> + 7 0 8 6 -1. + <_> + 9 2 4 6 2. + 1 + <_> + + <_> + 5 2 7 6 -1. + <_> + 5 5 7 3 2. + <_> + + <_> + 10 13 3 1 -1. + <_> + 11 13 1 1 3. + <_> + + <_> + 12 12 4 2 -1. + <_> + 12 12 2 1 2. + <_> + 14 13 2 1 2. + <_> + + <_> + 6 1 14 19 -1. + <_> + 13 1 7 19 2. + <_> + + <_> + 6 9 14 1 -1. + <_> + 13 9 7 1 2. + <_> + + <_> + 18 0 2 1 -1. + <_> + 18 0 1 1 2. + 1 + <_> + + <_> + 15 0 3 1 -1. + <_> + 16 1 1 1 3. + 1 + <_> + + <_> + 5 7 2 3 -1. + <_> + 4 8 2 1 3. + 1 + <_> + + <_> + 15 12 3 3 -1. + <_> + 14 13 3 1 3. + 1 + <_> + + <_> + 10 17 4 2 -1. + <_> + 11 17 2 2 2. + <_> + + <_> + 8 12 3 3 -1. + <_> + 9 13 1 1 9. + <_> + + <_> + 4 1 7 6 -1. + <_> + 4 3 7 2 3. + <_> + + <_> + 11 0 6 6 -1. + <_> + 11 2 6 2 3. + <_> + + <_> + 0 1 1 4 -1. + <_> + 0 2 1 2 2. + <_> + + <_> + 7 5 4 4 -1. + <_> + 8 5 2 4 2. + <_> + + <_> + 1 0 1 3 -1. + <_> + 1 1 1 1 3. + <_> + + <_> + 9 3 4 2 -1. + <_> + 9 4 4 1 2. + <_> + + <_> + 18 13 2 5 -1. + <_> + 19 13 1 5 2. + <_> + + <_> + 2 11 3 6 -1. + <_> + 3 11 1 6 3. + <_> + + <_> + 0 5 2 12 -1. + <_> + 0 9 2 4 3. + <_> + + <_> + 11 10 8 5 -1. + <_> + 15 10 4 5 2. + <_> + + <_> + 15 11 4 2 -1. + <_> + 16 12 2 2 2. + 1 + <_> + + <_> + 15 8 4 2 -1. + <_> + 16 9 2 2 2. + 1 + <_> + + <_> + 5 13 2 1 -1. + <_> + 6 13 1 1 2. + <_> + + <_> + 12 13 2 2 -1. + <_> + 13 13 1 2 2. + <_> + + <_> + 11 12 8 8 -1. + <_> + 13 12 4 8 2. + <_> + + <_> + 3 0 6 10 -1. + <_> + 5 0 2 10 3. + <_> + + <_> + 6 14 2 2 -1. + <_> + 6 14 1 2 2. + 1 + <_> + + <_> + 0 5 19 4 -1. + <_> + 0 7 19 2 2. + <_> + + <_> + 17 4 3 2 -1. + <_> + 18 5 1 2 3. + 1 + <_> + + <_> + 17 3 3 4 -1. + <_> + 18 4 1 4 3. + 1 + <_> + + <_> + 5 13 8 2 -1. + <_> + 7 13 4 2 2. + <_> + + <_> + 0 0 2 8 -1. + <_> + 0 4 2 4 2. + <_> + + <_> + 0 9 15 6 -1. + <_> + 0 11 15 2 3. + <_> + + <_> + 18 14 2 1 -1. + <_> + 18 14 1 1 2. + 1 + <_> + + <_> + 0 0 4 8 -1. + <_> + 2 0 2 8 2. + <_> + + <_> + 0 13 6 2 -1. + <_> + 2 13 2 2 3. + <_> + + <_> + 3 18 3 2 -1. + <_> + 3 19 3 1 2. + <_> + + <_> + 2 11 15 6 -1. + <_> + 7 13 5 2 9. + <_> + + <_> + 7 14 3 3 -1. + <_> + 8 15 1 3 3. + 1 + <_> + + <_> + 7 8 2 2 -1. + <_> + 8 8 1 2 2. + <_> + + <_> + 6 9 6 3 -1. + <_> + 6 10 6 1 3. + <_> + + <_> + 5 8 7 3 -1. + <_> + 5 9 7 1 3. + <_> + + <_> + 17 9 3 1 -1. + <_> + 18 10 1 1 3. + 1 + <_> + + <_> + 17 9 3 2 -1. + <_> + 18 10 1 2 3. + 1 + <_> + + <_> + 11 9 1 3 -1. + <_> + 11 10 1 1 3. + <_> + + <_> + 12 11 2 2 -1. + <_> + 12 11 1 1 2. + <_> + 13 12 1 1 2. + <_> + + <_> + 3 6 4 5 -1. + <_> + 4 6 2 5 2. + <_> + + <_> + 5 6 4 3 -1. + <_> + 6 6 2 3 2. + <_> + + <_> + 0 3 1 6 -1. + <_> + 0 5 1 2 3. + <_> + + <_> + 14 12 2 2 -1. + <_> + 14 12 1 1 2. + <_> + 15 13 1 1 2. + <_> + + <_> + 3 16 3 3 -1. + <_> + 4 16 1 3 3. + <_> + + <_> + 3 1 14 4 -1. + <_> + 3 3 14 2 2. + <_> + + <_> + 6 0 14 8 -1. + <_> + 6 0 7 4 2. + <_> + 13 4 7 4 2. + <_> + + <_> + 4 0 4 8 -1. + <_> + 4 2 4 4 2. + <_> + + <_> + 9 0 8 1 -1. + <_> + 13 0 4 1 2. + <_> + + <_> + 14 1 6 1 -1. + <_> + 17 1 3 1 2. + <_> + + <_> + 18 18 2 2 -1. + <_> + 18 19 2 1 2. + <_> + + <_> + 5 16 2 2 -1. + <_> + 5 16 1 2 2. + 1 + <_> + + <_> + 2 8 11 3 -1. + <_> + 2 9 11 1 3. + <_> + + <_> + 1 8 2 3 -1. + <_> + 1 9 2 1 3. + <_> + + <_> + 18 12 2 5 -1. + <_> + 19 12 1 5 2. + <_> + + <_> + 19 16 1 3 -1. + <_> + 18 17 1 1 3. + 1 + <_> + + <_> + 14 9 2 2 -1. + <_> + 14 9 1 2 2. + 1 + <_> + + <_> + 13 11 2 2 -1. + <_> + 13 11 1 1 2. + <_> + 14 12 1 1 2. + <_> + + <_> + 13 12 4 4 -1. + <_> + 14 12 2 4 2. + <_> + + <_> + 19 11 1 3 -1. + <_> + 19 12 1 1 3. + <_> + + <_> + 0 1 1 4 -1. + <_> + 0 3 1 2 2. + <_> + + <_> + 0 0 20 20 -1. + <_> + 0 0 10 10 2. + <_> + 10 10 10 10 2. + <_> + + <_> + 11 12 3 3 -1. + <_> + 10 13 3 1 3. + 1 + <_> + + <_> + 16 17 1 2 -1. + <_> + 16 17 1 1 2. + 1 + <_> + + <_> + 13 10 4 2 -1. + <_> + 13 10 2 1 2. + <_> + 15 11 2 1 2. + <_> + + <_> + 15 11 2 2 -1. + <_> + 15 11 1 1 2. + <_> + 16 12 1 1 2. + <_> + + <_> + 2 10 3 6 -1. + <_> + 3 10 1 6 3. + <_> + + <_> + 0 0 6 9 -1. + <_> + 2 0 2 9 3. + <_> + + <_> + 8 17 2 1 -1. + <_> + 8 17 1 1 2. + 1 + <_> + + <_> + 4 18 8 1 -1. + <_> + 8 18 4 1 2. + <_> + + <_> + 4 11 1 4 -1. + <_> + 3 12 1 2 2. + 1 + <_> + + <_> + 7 11 3 3 -1. + <_> + 6 12 3 1 3. + 1 + <_> + + <_> + 9 18 4 1 -1. + <_> + 10 18 2 1 2. + <_> + + <_> + 0 19 2 1 -1. + <_> + 1 19 1 1 2. + <_> + + <_> + 11 6 3 5 -1. + <_> + 12 6 1 5 3. + <_> + + <_> + 8 0 12 20 -1. + <_> + 8 0 6 10 2. + <_> + 14 10 6 10 2. + <_> + + <_> + 4 0 1 4 -1. + <_> + 3 1 1 2 2. + 1 + <_> + + <_> + 4 14 16 4 -1. + <_> + 8 14 8 4 2. + <_> + + <_> + 7 9 5 4 -1. + <_> + 6 10 5 2 2. + 1 + <_> + + <_> + 5 12 6 2 -1. + <_> + 5 12 3 2 2. + 1 + <_> + + <_> + 1 14 4 1 -1. + <_> + 1 14 2 1 2. + 1 + <_> + + <_> + 4 10 1 3 -1. + <_> + 3 11 1 1 3. + 1 + <_> + + <_> + 3 10 3 9 -1. + <_> + 4 10 1 9 3. + <_> + + <_> + 4 11 3 4 -1. + <_> + 5 11 1 4 3. + <_> + + <_> + 5 12 3 2 -1. + <_> + 6 12 1 2 3. + <_> + + <_> + 7 12 3 2 -1. + <_> + 8 12 1 2 3. + <_> + + <_> + 1 2 12 6 -1. + <_> + 5 2 4 6 3. + <_> + + <_> + 9 0 8 3 -1. + <_> + 11 2 4 3 2. + 1 + <_> + + <_> + 8 1 6 2 -1. + <_> + 8 1 3 2 2. + 1 + <_> + + <_> + 4 4 15 9 -1. + <_> + 4 7 15 3 3. + <_> + + <_> + 5 10 8 6 -1. + <_> + 7 10 4 6 2. + <_> + + <_> + 11 8 9 9 -1. + <_> + 11 11 9 3 3. + <_> + + <_> + 7 0 6 4 -1. + <_> + 9 2 2 4 3. + 1 + <_> + + <_> + 3 11 6 3 -1. + <_> + 2 12 6 1 3. + 1 + <_> + + <_> + 16 12 4 3 -1. + <_> + 18 12 2 3 2. + <_> + + <_> + 10 10 2 10 -1. + <_> + 10 15 2 5 2. + <_> + + <_> + 5 7 3 4 -1. + <_> + 4 8 3 2 2. + 1 + <_> + + <_> + 1 9 6 1 -1. + <_> + 3 11 2 1 3. + 1 + <_> + + <_> + 0 0 1 6 -1. + <_> + 0 3 1 3 2. + <_> + + <_> + 8 10 10 2 -1. + <_> + 8 10 5 1 2. + <_> + 13 11 5 1 2. + <_> + + <_> + 5 2 5 6 -1. + <_> + 5 5 5 3 2. + <_> + + <_> + 6 1 6 1 -1. + <_> + 6 1 3 1 2. + 1 + <_> + + <_> + 0 3 1 12 -1. + <_> + 0 7 1 4 3. + <_> + + <_> + 0 7 2 1 -1. + <_> + 1 7 1 1 2. + <_> + + <_> + 3 5 1 3 -1. + <_> + 2 6 1 1 3. + 1 + <_> + + <_> + 11 12 2 3 -1. + <_> + 10 13 2 1 3. + 1 + <_> + + <_> + 10 12 3 3 -1. + <_> + 11 12 1 3 3. + <_> + + <_> + 9 11 3 3 -1. + <_> + 10 12 1 1 9. + <_> + + <_> + 6 17 4 2 -1. + <_> + 7 17 2 2 2. + <_> + + <_> + 12 18 6 2 -1. + <_> + 15 18 3 2 2. + <_> + + <_> + 3 17 2 1 -1. + <_> + 3 17 1 1 2. + 1 + <_> + + <_> + 1 15 4 1 -1. + <_> + 2 16 2 1 2. + 1 + <_> + + <_> + 18 0 2 2 -1. + <_> + 18 1 2 1 2. + <_> + + <_> + 19 0 1 3 -1. + <_> + 19 1 1 1 3. + <_> + + <_> + 16 11 3 2 -1. + <_> + 16 11 3 1 2. + 1 + <_> + + <_> + 16 12 2 3 -1. + <_> + 15 13 2 1 3. + 1 + <_> + + <_> + 12 0 8 1 -1. + <_> + 16 0 4 1 2. + <_> + + <_> + 2 1 9 6 -1. + <_> + 2 4 9 3 2. + <_> + + <_> + 17 1 3 2 -1. + <_> + 17 1 3 1 2. + 1 + <_> + + <_> + 7 5 6 4 -1. + <_> + 7 6 6 2 2. + <_> + + <_> + 4 6 6 2 -1. + <_> + 7 6 3 2 2. + <_> + + <_> + 11 4 6 6 -1. + <_> + 13 4 2 6 3. + <_> + + <_> + 5 7 9 3 -1. + <_> + 5 8 9 1 3. + <_> + + <_> + 5 8 9 3 -1. + <_> + 5 9 9 1 3. + <_> + + <_> + 1 0 4 3 -1. + <_> + 2 0 2 3 2. + <_> + + <_> + 9 9 5 4 -1. + <_> + 9 10 5 2 2. + <_> + + <_> + 1 0 6 7 -1. + <_> + 3 0 2 7 3. + <_> + + <_> + 16 9 3 2 -1. + <_> + 17 10 1 2 3. + 1 + <_> + + <_> + 14 12 2 2 -1. + <_> + 14 12 1 1 2. + <_> + 15 13 1 1 2. + <_> + + <_> + 0 0 14 1 -1. + <_> + 7 0 7 1 2. + <_> + + <_> + 15 11 2 2 -1. + <_> + 15 11 1 2 2. + 1 + <_> + + <_> + 3 14 12 4 -1. + <_> + 3 14 6 2 2. + <_> + 9 16 6 2 2. + <_> + + <_> + 5 2 1 3 -1. + <_> + 4 3 1 1 3. + 1 + <_> + + <_> + 8 12 3 2 -1. + <_> + 9 13 1 2 3. + 1 + <_> + + <_> + 14 11 2 2 -1. + <_> + 14 11 1 1 2. + <_> + 15 12 1 1 2. + <_> + + <_> + 13 10 7 2 -1. + <_> + 13 11 7 1 2. + <_> + + <_> + 7 13 1 2 -1. + <_> + 7 13 1 1 2. + 1 + <_> + + <_> + 5 12 4 3 -1. + <_> + 6 12 2 3 2. + <_> + + <_> + 8 2 2 5 -1. + <_> + 9 2 1 5 2. + <_> + + <_> + 1 17 4 2 -1. + <_> + 3 17 2 2 2. + <_> + + <_> + 12 17 4 3 -1. + <_> + 13 17 2 3 2. + <_> + + <_> + 15 16 5 3 -1. + <_> + 15 17 5 1 3. + <_> + + <_> + 15 16 4 3 -1. + <_> + 15 17 4 1 3. + <_> + + <_> + 0 17 16 3 -1. + <_> + 4 17 8 3 2. + <_> + + <_> + 0 14 2 2 -1. + <_> + 0 14 1 1 2. + <_> + 1 15 1 1 2. + <_> + + <_> + 7 2 6 6 -1. + <_> + 7 4 6 2 3. + <_> + + <_> + 3 5 1 3 -1. + <_> + 2 6 1 1 3. + 1 + <_> + + <_> + 2 7 2 2 -1. + <_> + 2 7 2 1 2. + 1 + <_> + + <_> + 6 11 5 3 -1. + <_> + 5 12 5 1 3. + 1 + <_> + + <_> + 16 14 4 6 -1. + <_> + 16 17 4 3 2. + <_> + + <_> + 6 13 6 7 -1. + <_> + 8 13 2 7 3. + <_> + + <_> + 0 1 12 11 -1. + <_> + 3 1 6 11 2. + <_> + + <_> + 6 10 7 3 -1. + <_> + 6 11 7 1 3. + <_> + + <_> + 8 0 9 4 -1. + <_> + 8 2 9 2 2. + <_> + + <_> + 10 14 10 2 -1. + <_> + 10 15 10 1 2. + <_> + + <_> + 0 0 1 18 -1. + <_> + 0 6 1 6 3. + <_> + + <_> + 4 13 2 2 -1. + <_> + 4 13 1 1 2. + <_> + 5 14 1 1 2. + <_> + + <_> + 8 11 3 6 -1. + <_> + 9 12 1 6 3. + 1 + <_> + + <_> + 6 7 2 3 -1. + <_> + 5 8 2 1 3. + 1 + <_> + + <_> + 4 8 3 3 -1. + <_> + 5 8 1 3 3. + <_> + + <_> + 1 4 14 1 -1. + <_> + 1 4 7 1 2. + 1 + <_> + + <_> + 12 13 8 3 -1. + <_> + 14 13 4 3 2. + <_> + + <_> + 4 17 2 1 -1. + <_> + 4 17 1 1 2. + 1 + <_> + + <_> + 6 16 2 2 -1. + <_> + 6 16 1 2 2. + 1 + <_> + + <_> + 3 17 4 2 -1. + <_> + 4 17 2 2 2. + <_> + + <_> + 0 7 20 2 -1. + <_> + 5 7 10 2 2. + <_> + + <_> + 15 9 2 2 -1. + <_> + 15 9 1 2 2. + 1 + <_> + + <_> + 3 12 2 2 -1. + <_> + 3 12 1 1 2. + <_> + 4 13 1 1 2. + <_> + + <_> + 0 5 2 1 -1. + <_> + 1 5 1 1 2. + <_> + + <_> + 17 0 3 2 -1. + <_> + 18 1 1 2 3. + 1 + <_> + + <_> + 2 8 3 9 -1. + <_> + 3 11 1 3 9. + <_> + + <_> + 15 7 4 2 -1. + <_> + 16 8 2 2 2. + 1 + <_> + + <_> + 4 16 3 3 -1. + <_> + 5 16 1 3 3. + <_> + + <_> + 8 14 6 1 -1. + <_> + 10 14 2 1 3. + <_> + + <_> + 14 0 6 6 -1. + <_> + 14 0 3 3 2. + <_> + 17 3 3 3 2. + <_> + + <_> + 17 2 2 1 -1. + <_> + 17 2 1 1 2. + 1 + <_> + + <_> + 0 19 20 1 -1. + <_> + 10 19 10 1 2. + <_> + + <_> + 0 19 6 1 -1. + <_> + 3 19 3 1 2. + <_> + + <_> + 9 17 4 3 -1. + <_> + 10 17 2 3 2. + <_> + + <_> + 4 11 3 3 -1. + <_> + 5 12 1 1 9. + <_> + + <_> + 17 7 3 3 -1. + <_> + 18 8 1 3 3. + 1 + <_> + + <_> + 19 1 1 4 -1. + <_> + 18 2 1 2 2. + 1 + <_> + + <_> + 6 8 2 1 -1. + <_> + 7 8 1 1 2. + <_> + + <_> + 5 4 4 4 -1. + <_> + 6 5 2 4 2. + 1 + <_> + + <_> + 5 0 8 7 -1. + <_> + 9 0 4 7 2. + <_> + + <_> + 0 7 5 9 -1. + <_> + 0 10 5 3 3. + <_> + + <_> + 14 10 2 2 -1. + <_> + 14 10 1 1 2. + <_> + 15 11 1 1 2. + <_> + + <_> + 15 11 2 2 -1. + <_> + 15 11 1 1 2. + <_> + 16 12 1 1 2. + <_> + + <_> + 9 2 6 4 -1. + <_> + 11 2 2 4 3. + <_> + + <_> + 0 12 12 8 -1. + <_> + 6 12 6 8 2. + <_> + + <_> + 1 0 6 2 -1. + <_> + 3 0 2 2 3. + <_> + + <_> + 0 12 4 5 -1. + <_> + 1 12 2 5 2. + <_> + + <_> + 2 12 4 4 -1. + <_> + 3 12 2 4 2. + <_> + + <_> + 12 11 2 4 -1. + <_> + 13 11 1 4 2. + <_> + + <_> + 2 0 1 4 -1. + <_> + 2 2 1 2 2. + <_> + + <_> + 6 1 4 9 -1. + <_> + 7 1 2 9 2. + <_> + + <_> + 13 10 2 3 -1. + <_> + 13 11 2 1 3. + <_> + + <_> + 3 9 15 3 -1. + <_> + 8 10 5 1 9. + <_> + + <_> + 15 10 3 1 -1. + <_> + 16 11 1 1 3. + 1 + <_> + + <_> + 1 0 15 8 -1. + <_> + 1 2 15 4 2. + <_> + + <_> + 2 3 15 6 -1. + <_> + 2 6 15 3 2. + <_> + + <_> + 6 0 6 6 -1. + <_> + 6 2 6 2 3. + <_> + + <_> + 16 9 4 3 -1. + <_> + 16 10 4 1 3. + <_> + + <_> + 16 7 4 3 -1. + <_> + 16 8 4 1 3. + <_> + + <_> + 15 10 2 2 -1. + <_> + 15 10 1 1 2. + <_> + 16 11 1 1 2. + <_> + + <_> + 13 11 2 3 -1. + <_> + 13 12 2 1 3. + <_> + + <_> + 2 16 2 2 -1. + <_> + 2 16 1 2 2. + 1 + <_> + + <_> + 3 0 4 7 -1. + <_> + 4 0 2 7 2. + <_> + + <_> + 0 16 2 2 -1. + <_> + 0 16 1 1 2. + <_> + 1 17 1 1 2. + <_> + + <_> + 2 0 18 3 -1. + <_> + 8 0 6 3 3. + <_> + + <_> + 0 1 1 3 -1. + <_> + 0 2 1 1 3. + <_> + + <_> + 10 6 4 4 -1. + <_> + 10 7 4 2 2. + <_> + + <_> + 16 4 4 6 -1. + <_> + 16 4 2 3 2. + <_> + 18 7 2 3 2. + <_> + + <_> + 11 12 4 2 -1. + <_> + 11 12 2 1 2. + <_> + 13 13 2 1 2. + diff --git a/projects/Drowsiness detection/haar cascade files/haarcascade_righteye_2splits.xml b/projects/Drowsiness detection/haar cascade files/haarcascade_righteye_2splits.xml new file mode 100644 index 000000000..db4571cde --- /dev/null +++ b/projects/Drowsiness detection/haar cascade files/haarcascade_righteye_2splits.xml @@ -0,0 +1,7407 @@ + + + +BOOST + HAAR + 20 + 20 + + 34 + + 0 + 20 + + <_> + 5 + -2.2325520515441895e+00 + + <_> + + 1 0 0 -4.8210550099611282e-02 -1 -2 1 + -4.1576199233531952e-02 + + -8.6140447854995728e-01 9.1769057512283325e-01 + -2.1284009516239166e-01 + <_> + + 0 1 2 9.3528684228658676e-03 -1 -2 3 -2.2144919785205275e-04 + + -6.9785767793655396e-01 7.9523372650146484e-01 + -4.8948091268539429e-01 + <_> + + 0 1 4 -2.1853350102901459e-02 -1 -2 5 9.9672928452491760e-02 + + 7.0574641227722168e-01 -7.0666241645812988e-01 + 7.9210978746414185e-01 + <_> + + 1 0 6 -2.1664820611476898e-02 -1 -2 7 + -7.5680727604776621e-04 + + -6.0898607969284058e-01 7.1685701608657837e-01 + -3.0464568734169006e-01 + <_> + + 1 0 8 -1.3333049602806568e-02 -1 -2 9 9.2925298959016800e-03 + + -4.6844691038131714e-01 6.4235931634902954e-01 + -5.1180428266525269e-01 + <_> + 5 + -2.1598019599914551e+00 + + <_> + + 0 1 10 -3.3948719501495361e-01 -1 -2 11 + -1.3672479987144470e-01 + + 7.7913260459899902e-01 2.6421278715133667e-01 + -8.7910091876983643e-01 + <_> + + 0 1 12 3.1394500285387039e-02 -1 -2 13 + -1.0828140191733837e-02 + + -6.9956701993942261e-01 7.6504492759704590e-01 + -4.3719211220741272e-01 + <_> + + 1 0 14 -4.2506768368184566e-03 -1 -2 15 + -2.2675469517707825e-02 + + -5.7561582326889038e-01 7.4080592393875122e-01 + -3.6677250266075134e-01 + <_> + + 1 0 16 3.9161480963230133e-02 -1 -2 17 + -3.1934089493006468e-03 + + 6.4045161008834839e-01 1.6047589480876923e-01 + -7.1010977029800415e-01 + <_> + + 1 0 18 2.5321990251541138e-02 -1 -2 19 + 7.7583367237821221e-04 + + 4.9574860930442810e-01 -7.1737897396087646e-01 + -1.8581770360469818e-02 + <_> + 8 + -2.3451159000396729e+00 + + <_> + + 1 0 20 -2.6554059982299805e-01 -1 -2 21 + -2.2532779723405838e-02 + + -8.4712451696395874e-01 8.7977188825607300e-01 + -3.3394691348075867e-01 + <_> + + 0 1 22 8.5310067515820265e-04 -1 -2 23 + 1.5820249973330647e-04 + + -8.2032448053359985e-01 -7.5176358222961426e-01 + 6.7769712209701538e-01 + <_> + + 1 0 24 -1.0837490117410198e-04 -1 -2 25 + 2.6810260023921728e-03 + + -8.3314001560211182e-01 5.3844749927520752e-01 + -7.6534157991409302e-01 + <_> + + 0 1 26 8.5202371701598167e-04 -1 -2 27 + -1.2241739779710770e-02 + + -7.7514898777008057e-01 6.3240152597427368e-01 + -6.3395208120346069e-01 + <_> + + 1 0 28 6.2314196838997304e-05 -1 -2 29 + -7.1911108493804932e-01 + + 4.4290411472320557e-01 8.0135929584503174e-01 + -5.3431099653244019e-01 + <_> + + 1 0 30 -2.4280339479446411e-02 -1 -2 31 + 3.4558640327304602e-03 + + -6.7797917127609253e-01 4.9030610918998718e-01 + -8.8447982072830200e-01 + <_> + + 1 0 32 -6.2993327446747571e-05 -1 -2 33 + -4.6443562023341656e-03 + + -5.7883417606353760e-01 -8.5878807306289673e-01 + 5.2454602718353271e-01 + <_> + + 1 0 34 -4.0299328247783706e-05 -1 -2 35 + -3.7485519424080849e-03 + + -5.2713459730148315e-01 -8.5626190900802612e-01 + 4.8944610357284546e-01 + <_> + 10 + -2.3431489467620850e+00 + + <_> + + 0 1 36 -3.8377079367637634e-01 -1 -2 37 + -1.3837030529975891e-01 + + 7.1715021133422852e-01 3.4392359852790833e-01 + -7.9931277036666870e-01 + <_> + + 0 1 38 3.3107071067206562e-04 -1 -2 39 + -5.1273438148200512e-03 + + -6.8352431058883667e-01 5.8250617980957031e-01 + -4.0955001115798950e-01 + <_> + + 1 0 40 -2.6100680232048035e-02 -1 -2 41 + -1.0628979653120041e-03 + + -4.3713301420211792e-01 7.0680737495422363e-01 + -2.6817938685417175e-01 + <_> + + 0 1 42 -9.7854852676391602e-02 -1 -2 43 + -1.1829820275306702e-01 + + 7.3940038681030273e-01 6.3814181089401245e-01 + -3.8721871376037598e-01 + <_> + + 1 0 44 -7.5409049168229103e-03 -1 -2 45 + 2.6851659640669823e-03 + + -4.8803019523620605e-01 3.9083468914031982e-01 + -6.5561538934707642e-01 + <_> + + 0 1 46 1.6870240215212107e-03 -1 -2 47 + -3.8136160001158714e-03 + + -4.9891749024391174e-01 -6.6405588388442993e-01 + 4.0650749206542969e-01 + <_> + + 1 0 48 2.0289309322834015e-03 -1 -2 49 + -7.6308869756758213e-03 + + -6.9989210367202759e-01 4.3206840753555298e-01 + -2.9664969444274902e-01 + <_> + + 1 0 50 -3.3815231290645897e-04 -1 -2 51 + 7.5163291767239571e-03 + + -4.6808540821075439e-01 3.6521491408348083e-01 + -7.6014542579650879e-01 + <_> + + 1 0 52 6.1479508876800537e-02 -1 -2 53 + -4.6286579221487045e-02 + + 5.6990629434585571e-01 2.2625060379505157e-01 + -4.5330780744552612e-01 + <_> + + 1 0 54 4.6903551556169987e-03 -1 -2 55 + 1.8803169950842857e-03 + + -7.7286708354949951e-01 2.7349120378494263e-01 + -6.6667830944061279e-01 + <_> + 8 + -2.1268370151519775e+00 + + <_> + + 1 0 56 -5.5420672893524170e-01 -1 -2 57 + -6.9329799152910709e-03 + + -6.0620260238647461e-01 7.8542029857635498e-01 + -3.5522121191024780e-01 + <_> + + 0 1 58 -2.1169960498809814e-02 -1 -2 59 + -6.7428398132324219e-01 + + 5.2947688102722168e-01 4.6065220236778259e-01 + -7.0058208703994751e-01 + <_> + + 1 0 60 -4.2725078761577606e-02 -1 -2 61 + -1.0109329596161842e-02 + + -5.9904807806015015e-01 6.8109220266342163e-01 + -2.0731879770755768e-01 + <_> + + 0 1 62 6.5861130133271217e-03 -1 -2 63 + -7.6380418613553047e-03 + + -5.2420848608016968e-01 -7.0169782638549805e-01 + 4.4100138545036316e-01 + <_> + + 0 1 64 -9.7681581974029541e-02 -1 -2 65 + 1.0197360068559647e-02 + + 5.7708740234375000e-01 -9.8518550395965576e-02 + -8.8111698627471924e-01 + <_> + + 0 1 66 -2.5724549777805805e-03 -1 -2 67 + 2.6594230439513922e-03 + + -8.3233338594436646e-01 3.0995351076126099e-01 + -8.1609177589416504e-01 + <_> + + 1 0 68 -1.0042720241472125e-03 -1 -2 69 + 2.6080000679939985e-03 + + -4.3558520078659058e-01 3.3566600084304810e-01 + -8.1889331340789795e-01 + <_> + + 1 0 70 4.9724509008228779e-03 -1 -2 71 + 1.2243240140378475e-02 + + -7.7048182487487793e-01 2.2534200549125671e-01 + -6.8695551156997681e-01 + <_> + 10 + -2.0604379177093506e+00 + + <_> + + 1 0 72 -5.7784929871559143e-02 -1 -2 73 + -1.7517809756100178e-03 + + -7.0516008138656616e-01 8.5655921697616577e-01 + -9.2403419315814972e-02 + <_> + + 1 0 74 -1.1522379703819752e-02 -1 -2 75 + -3.8323760963976383e-03 + + -4.2749640345573425e-01 7.5913530588150024e-01 + -1.0894049704074860e-01 + <_> + + 1 0 76 -8.0922387540340424e-02 -1 -2 77 + -6.2537011690437794e-03 + + -3.1364768743515015e-01 6.9995921850204468e-01 + -1.1805690079927444e-01 + <_> + + 0 1 78 -1.2227860093116760e-01 -1 -2 79 + -6.4168110489845276e-02 + + 5.2072501182556152e-01 3.9272749423980713e-01 + -4.2194411158561707e-01 + <_> + + 1 0 80 -5.3712888620793819e-04 -1 -2 81 + -2.8175620827823877e-03 + + -4.9524548649787903e-01 4.1350141167640686e-01 + -3.8919278979301453e-01 + <_> + + 0 1 82 -3.6368549335747957e-03 -1 -2 83 + -1.3223909772932529e-03 + + 6.7615020275115967e-01 4.3426999449729919e-01 + -3.7642130255699158e-01 + <_> + + 0 1 84 3.7143539520911872e-04 -1 -2 85 + -5.0255712121725082e-03 + + -5.5630880594253540e-01 -5.2328592538833618e-01 + 3.4646821022033691e-01 + <_> + + 1 0 86 -9.2711612523999065e-05 -1 -2 87 + 1.9847028888761997e-03 + + -4.9652668833732605e-01 3.3401641249656677e-01 + -6.2446892261505127e-01 + <_> + + 1 0 88 4.7203440219163895e-02 -1 -2 89 + -6.8562600063160062e-05 + + 5.7562619447708130e-01 2.6172660291194916e-02 + -6.0849070549011230e-01 + <_> + + 1 0 90 7.5034219771623611e-03 -1 -2 91 + 6.3834791071712971e-03 + + -6.8576759099960327e-01 -1.7312510311603546e-01 + 3.8560429215431213e-01 + <_> + 12 + -2.3187489509582520e+00 + + <_> + + 1 0 92 -1.5584450215101242e-02 -1 -2 93 + 1.4557019807398319e-02 + + -6.6648960113525391e-01 -4.3745130300521851e-01 + 7.2227817773818970e-01 + <_> + + 1 0 94 -5.7889888994395733e-03 -1 -2 95 + -8.1936769187450409e-02 + + -4.3183240294456482e-01 6.8467652797698975e-01 + -2.2546729445457458e-01 + <_> + + 1 0 96 -4.2995368130505085e-03 -1 -2 97 + -1.3736640103161335e-02 + + -5.2409631013870239e-01 6.1626207828521729e-01 + -3.5893160104751587e-01 + <_> + + 1 0 98 -4.8069912008941174e-03 -1 -2 99 + -7.7131099998950958e-02 + + -4.2382389307022095e-01 6.0599362850189209e-01 + -3.1555330753326416e-01 + <_> + + 0 1 100 4.4640208943746984e-04 -1 -2 101 + 3.4841578453779221e-02 + + -4.9206110835075378e-01 -4.1017889976501465e-02 + 6.1330878734588623e-01 + <_> + + 0 1 102 8.2969048526138067e-04 -1 -2 103 + -7.8510129242204130e-05 + + -4.5479419827461243e-01 4.0007328987121582e-01 + -2.0888769626617432e-01 + <_> + + 1 0 104 4.6054688282310963e-03 -1 -2 105 + -7.1904482319951057e-03 + + -6.7931377887725830e-01 4.7060671448707581e-01 + -1.4138610661029816e-01 + <_> + + 0 1 106 -5.5724480189383030e-03 -1 -2 107 + -7.0458237314596772e-04 + + -7.0525509119033813e-01 3.6097851395606995e-01 + -1.8361540138721466e-01 + <_> + + 1 0 108 1.8595060333609581e-02 -1 -2 109 + 5.0072550773620605e-02 + + 4.1765761375427246e-01 -4.1869449615478516e-01 + 2.8186509013175964e-01 + <_> + + 1 0 110 -2.0355919376015663e-02 -1 -2 111 + -2.8686519712209702e-02 + + -3.6494150757789612e-01 -5.3867787122726440e-01 + 3.4767881035804749e-01 + <_> + + 1 0 112 -7.1101690991781652e-05 -1 -2 113 + 2.0686469506472349e-03 + + -4.0156790614128113e-01 3.2963660359382629e-01 + -7.0951050519943237e-01 + <_> + + 1 0 114 1.1430920567363501e-03 -1 -2 115 + -8.8636036962270737e-03 + + 4.4172981381416321e-01 1.8426130712032318e-01 + -4.1275170445442200e-01 + <_> + 15 + -2.2203750610351562e+00 + + <_> + + 1 0 116 -7.7637642621994019e-02 -1 -2 117 + -8.4830820560455322e-03 + + -4.9321529269218445e-01 7.8138542175292969e-01 + -3.6062291264533997e-01 + <_> + + 1 0 118 -1.7180460272356868e-03 -1 -2 119 + 2.4740949273109436e-02 + + -4.7690048813819885e-01 -3.2420080900192261e-01 + 5.9280002117156982e-01 + <_> + + 0 1 120 3.3028100151568651e-03 -1 -2 121 + -3.4622039645910263e-02 + + -5.3991597890853882e-01 5.2076727151870728e-01 + -3.3530798554420471e-01 + <_> + + 1 0 122 -7.1505777304992080e-04 -1 -2 123 + -9.0145105496048927e-03 + + -4.8981699347496033e-01 -7.7969801425933838e-01 + 3.6586359143257141e-01 + <_> + + 1 0 124 -1.0250939521938562e-03 -1 -2 125 + -5.5693178437650204e-03 + + -4.6970510482788086e-01 -6.9695621728897095e-01 + 3.5025438666343689e-01 + <_> + + 0 1 126 1.3235070509836078e-03 -1 -2 127 + -3.3737940248101950e-03 + + -4.4707980751991272e-01 -5.6195151805877686e-01 + 3.1833809614181519e-01 + <_> + + 1 0 128 -6.4095242123585194e-05 -1 -2 129 + -2.7294119354337454e-03 + + -3.5473638772964478e-01 4.1285240650177002e-01 + -3.1416821479797363e-01 + <_> + + 0 1 130 6.3087652961257845e-05 -1 -2 131 + -1.5436099842190742e-02 + + -3.5946568846702576e-01 -6.1329078674316406e-01 + 3.4301999211311340e-01 + <_> + + 0 1 132 -2.1025019232183695e-03 -1 -2 133 + -1.6849569976329803e-02 + + -7.6962250471115112e-01 3.6569809913635254e-01 + -2.1210379898548126e-01 + <_> + + 0 1 134 5.6847798987291753e-05 -1 -2 135 + 5.9984489344060421e-03 + + -4.0466558933258057e-01 2.8503778576850891e-01 + -5.8756178617477417e-01 + <_> + + 1 0 136 6.1389962211251259e-03 -1 -2 137 + -2.8117469628341496e-04 + + -8.7189829349517822e-01 2.5182509422302246e-01 + -3.1868219375610352e-01 + <_> + + 1 0 138 -4.5429798774421215e-03 -1 -2 139 + -3.2167110592126846e-02 + + -3.6724218726158142e-01 -7.9481202363967896e-01 + 2.8887200355529785e-01 + <_> + + 1 0 140 5.0912089645862579e-03 -1 -2 141 + -1.5173070132732391e-03 + + -7.1477490663528442e-01 4.4514629244804382e-01 + -9.5207341015338898e-02 + <_> + + 1 0 142 -6.0079508693888783e-04 -1 -2 143 + 4.4868541881442070e-03 + + -3.6021450161933899e-01 2.8276360034942627e-01 + -7.2084128856658936e-01 + <_> + + 1 0 144 -3.7957848981022835e-03 -1 -2 145 + -9.1829998418688774e-03 + + -2.8717440366744995e-01 5.0479042530059814e-01 + -7.0781037211418152e-02 + <_> + 17 + -2.1757249832153320e+00 + + <_> + + 1 0 146 -5.5760249495506287e-02 -1 -2 147 + -5.9436690062284470e-02 + + -5.5854648351669312e-01 6.8943697214126587e-01 + -3.7195080518722534e-01 + <_> + + 0 1 148 -5.4637178778648376e-02 -1 -2 149 + 2.3608359694480896e-01 + + 5.3040331602096558e-01 -4.7355309128761292e-01 + 4.6322488784790039e-01 + <_> + + 1 0 150 -9.4560505822300911e-03 -1 -2 151 + -5.3182709962129593e-02 + + -3.2544779777526855e-01 6.3468569517135620e-01 + -2.8268361091613770e-01 + <_> + + 1 0 152 -1.0638199746608734e-02 -1 -2 153 + -2.1207019686698914e-02 + + -5.5776351690292358e-01 3.9049190282821655e-01 + -4.2111930251121521e-01 + <_> + + 1 0 154 -5.6731878430582583e-05 -1 -2 155 + -4.4976451317779720e-04 + + -4.1803309321403503e-01 3.7355789542198181e-01 + -3.9199641346931458e-01 + <_> + + 1 0 156 2.7574670966714621e-03 -1 -2 157 + 2.5649419985711575e-03 + + -7.9104632139205933e-01 1.9258180260658264e-01 + -7.5344461202621460e-01 + <_> + + 0 1 158 -9.4359368085861206e-03 -1 -2 159 + 1.4136210083961487e-03 + + 4.4834750890731812e-01 -3.3878430724143982e-01 + 4.4291919469833374e-01 + <_> + + 1 0 160 3.9976350963115692e-03 -1 -2 161 + -1.5278969658538699e-03 + + -6.6637581586837769e-01 3.1292399764060974e-01 + -2.8027990460395813e-01 + <_> + + 1 0 162 -3.2376639865105972e-05 -1 -2 163 + 1.6323389718309045e-03 + + -4.6672090888023376e-01 2.7995559573173523e-01 + -6.1321508884429932e-01 + <_> + + 1 0 164 7.7096219174563885e-03 -1 -2 165 + -7.8599318861961365e-02 + + 2.0352549850940704e-01 7.2726912796497345e-02 + -6.8677097558975220e-01 + <_> + + 0 1 166 -3.6581400781869888e-03 -1 -2 167 + -4.2612198740243912e-02 + + -6.8079459667205811e-01 -8.4551781415939331e-01 + 1.5990570187568665e-01 + <_> + + 1 0 168 -4.8822778626345098e-04 -1 -2 169 + -4.6951142139732838e-03 + + -4.7945699095726013e-01 -8.2234281301498413e-01 + 2.0431579649448395e-01 + <_> + + 0 1 170 6.1706348787993193e-05 -1 -2 171 + 1.3809910044074059e-02 + + -3.1742820143699646e-01 3.0769300460815430e-01 + -4.3544968962669373e-01 + <_> + + 0 1 172 -4.2187729850411415e-03 -1 -2 173 + -3.9540808647871017e-03 + + 6.2499982118606567e-01 1.3225209712982178e-01 + -3.9745101332664490e-01 + <_> + + 1 0 174 2.2203531116247177e-03 -1 -2 175 + 6.2806582718621939e-05 + + -6.0045331716537476e-01 -2.2429980337619781e-01 + 2.9768520593643188e-01 + <_> + + 1 0 176 2.3292789701372385e-03 -1 -2 177 + -5.3711822256445885e-03 + + -7.5982081890106201e-01 2.6484918594360352e-01 + -2.6005539298057556e-01 + <_> + + 0 1 178 6.4782587287481874e-05 -1 -2 179 + 7.6606678776443005e-03 + + -3.2119300961494446e-01 2.4176409840583801e-01 + -8.3822727203369141e-01 + <_> + 19 + -2.2618789672851562e+00 + + <_> + + 1 0 180 -1.4848279766738415e-02 -1 -2 181 + -1.6066679963842034e-03 + + -5.3391128778457642e-01 7.6002711057662964e-01 + -2.1091739833354950e-01 + <_> + + 1 0 182 -1.5651920437812805e-01 -1 -2 183 + -5.5439779534935951e-03 + + -4.2818549275398254e-01 6.5620750188827515e-01 + -2.2949840128421783e-01 + <_> + + 1 0 184 -1.9448339939117432e-02 -1 -2 185 + 7.6653067953884602e-03 + + -4.4212520122528076e-01 -3.3950591087341309e-01 + 4.6587219834327698e-01 + <_> + + 0 1 186 -2.1142010390758514e-01 -1 -2 187 + -1.0628429800271988e-01 + + 5.5007970333099365e-01 6.8280947208404541e-01 + -3.0987739562988281e-01 + <_> + + 1 0 188 -5.2653599530458450e-02 -1 -2 189 + -5.3522300731856376e-05 + + -3.4818819165229797e-01 5.0566762685775757e-01 + -2.5229519605636597e-01 + <_> + + 0 1 190 -5.7972650974988937e-03 -1 -2 191 + -3.7428899668157101e-03 + + 3.0238011479377747e-01 2.2873230278491974e-01 + -4.8366579413414001e-01 + <_> + + 1 0 192 -5.2694038458866999e-05 -1 -2 193 + -1.1983739677816629e-03 + + -3.7988960742950439e-01 -6.7442452907562256e-01 + 2.8611260652542114e-01 + <_> + + 1 0 194 2.2544799372553825e-02 -1 -2 195 + 3.1783939339220524e-03 + + 4.7565719485282898e-01 -2.8893348574638367e-01 + 5.5509638786315918e-01 + <_> + + 1 0 196 3.4742769785225391e-03 -1 -2 197 + -8.1408787518739700e-03 + + -5.9826552867889404e-01 -5.5933791399002075e-01 + 2.2349210083484650e-01 + <_> + + 0 1 198 -3.0238809995353222e-03 -1 -2 199 + -5.9159598313271999e-03 + + 4.5917978882789612e-01 6.2234902381896973e-01 + -2.4468150734901428e-01 + <_> + + 1 0 200 2.3184430319815874e-03 -1 -2 201 + 7.7198208309710026e-03 + + -6.0478079319000244e-01 2.1004509925842285e-01 + -6.4331281185150146e-01 + <_> + + 0 1 202 -5.5973320268094540e-03 -1 -2 203 + 2.0320380281191319e-04 + + -7.1625810861587524e-01 -3.8018029928207397e-01 + 2.1336899697780609e-01 + <_> + + 1 0 204 -3.8205389864742756e-03 -1 -2 205 + 4.8883338458836079e-03 + + -3.5957258939743042e-01 2.6471930742263794e-01 + -5.8996689319610596e-01 + <_> + + 0 1 206 -1.3334590476006269e-03 -1 -2 207 + -1.5447080368176103e-03 + + 3.2258489727973938e-01 3.6971050500869751e-01 + -3.1308570504188538e-01 + <_> + + 0 1 208 7.5150746852159500e-05 -1 -2 209 + -1.1108840117231011e-03 + + -3.4674531221389771e-01 -5.7477539777755737e-01 + 2.9201140999794006e-01 + <_> + + 1 0 210 -1.6881119518075138e-04 -1 -2 211 + -1.2814450019504875e-04 + + -3.6041781306266785e-01 3.5043209791183472e-01 + -2.2014050185680389e-01 + <_> + + 1 0 212 1.9546970725059509e-02 -1 -2 213 + -1.1061180382966995e-02 + + 4.1295918822288513e-01 2.5962719321250916e-01 + -3.4875950217247009e-01 + <_> + + 1 0 214 1.8147419905290008e-03 -1 -2 215 + -7.1724010631442070e-03 + + -5.2019888162612915e-01 2.7452668547630310e-01 + -2.6828849315643311e-01 + <_> + + 1 0 216 2.2158189676702023e-03 -1 -2 217 + -9.6856858581304550e-03 + + -5.7340908050537109e-01 -5.8028572797775269e-01 + 1.8564410507678986e-01 + <_> + 19 + -2.0994780063629150e+00 + + <_> + + 0 1 218 -1.2065219692885876e-02 -1 -2 219 + -4.9067771434783936e-01 + + 6.1679571866989136e-01 1.4063939452171326e-01 + -5.5357742309570312e-01 + <_> + + 1 0 220 -6.6585717722773552e-03 -1 -2 221 + 1.5827560797333717e-02 + + -5.1332288980484009e-01 -3.6301520466804504e-01 + 4.3343341350555420e-01 + <_> + + 0 1 222 -1.4081180095672607e-02 -1 -2 223 + -1.2139449827373028e-02 + + 5.4223722219467163e-01 4.4281288981437683e-01 + -3.4171119332313538e-01 + <_> + + 0 1 224 7.8055798076093197e-03 -1 -2 225 + -7.0759910158813000e-05 + + -4.8659759759902954e-01 3.4818679094314575e-01 + -3.2806739211082458e-01 + <_> + + 0 1 226 -1.8199630081653595e-02 -1 -2 227 + -2.5289389304816723e-03 + + 5.6594151258468628e-01 1.1310060322284698e-01 + -4.0772381424903870e-01 + <_> + + 1 0 228 1.0156990028917789e-03 -1 -2 229 + 2.9432660085149109e-04 + + -5.9842979907989502e-01 2.8439450263977051e-01 + -3.2190230488777161e-01 + <_> + + 1 0 230 2.0865290425717831e-03 -1 -2 231 + -1.7371569992974401e-03 + + -7.8285712003707886e-01 3.3585301041603088e-01 + -2.0582370460033417e-01 + <_> + + 1 0 232 -7.0026202592998743e-05 -1 -2 233 + -1.4891549944877625e-03 + + -3.9109349250793457e-01 -4.6953418850898743e-01 + 2.7609241008758545e-01 + <_> + + 1 0 234 -1.1788429692387581e-02 -1 -2 235 + -1.5155089786276221e-03 + + -4.0114149451255798e-01 -7.4290478229522705e-01 + 2.7695629000663757e-01 + <_> + + 1 0 236 6.8396717309951782e-02 -1 -2 237 + -7.6441407203674316e-02 + + 4.5235648751258850e-01 4.2848169803619385e-01 + -3.1636309623718262e-01 + <_> + + 1 0 238 6.8310201168060303e-02 -1 -2 239 + -6.4508013427257538e-02 + + 5.1404279470443726e-01 1.8081870675086975e-01 + -3.4217950701713562e-01 + <_> + + 0 1 240 -2.8335719835013151e-03 -1 -2 241 + -9.9732237868010998e-04 + + -6.9509768486022949e-01 -4.3724590539932251e-01 + 2.0226080715656281e-01 + <_> + + 0 1 242 -2.2869910299777985e-01 -1 -2 243 + 2.9855249449610710e-03 + + 6.4662200212478638e-01 8.1149758771061897e-03 + -6.0210299491882324e-01 + <_> + + 0 1 244 -2.9535989742726088e-03 -1 -2 245 + -2.1225619129836559e-03 + + -7.2013127803802490e-01 5.0875622034072876e-01 + -5.9366609901189804e-02 + <_> + + 0 1 246 -2.9382819775491953e-03 -1 -2 247 + -5.8961478061974049e-03 + + 3.9287531375885010e-01 4.1866040229797363e-01 + -2.5405511260032654e-01 + <_> + + 1 0 248 2.5730929337441921e-03 -1 -2 249 + 1.6647739335894585e-02 + + -5.8707278966903687e-01 1.9208480417728424e-01 + -6.0388940572738647e-01 + <_> + + 1 0 250 2.4041840806603432e-03 -1 -2 251 + -9.0452830772846937e-04 + + -5.7192337512969971e-01 3.4860768914222717e-01 + -1.3049240410327911e-01 + <_> + + 1 0 252 4.0814210660755634e-03 -1 -2 253 + 3.3811479806900024e-03 + + 5.1778018474578857e-01 -6.3828541897237301e-03 + -6.1447817087173462e-01 + <_> + + 0 1 254 -2.7499340940266848e-03 -1 -2 255 + -4.8207710497081280e-03 + + -6.5407788753509521e-01 -6.0029619932174683e-01 + 1.4374589920043945e-01 + <_> + 21 + -2.1254189014434814e+00 + + <_> + + 0 1 256 7.9710120335221291e-03 -1 -2 257 + -9.7160867881029844e-04 + + -6.1992239952087402e-01 5.4877161979675293e-01 + -4.0606960654258728e-01 + <_> + + 0 1 258 -1.0945869609713554e-02 -1 -2 259 + -6.1174821108579636e-02 + + 4.6936869621276855e-01 3.0570849776268005e-01 + -4.4459891319274902e-01 + <_> + + 1 0 260 -2.3100150283426046e-03 -1 -2 261 + -4.7585051506757736e-02 + + -3.7816441059112549e-01 4.8865839838981628e-01 + -2.9728868603706360e-01 + <_> + + 1 0 262 -2.5944279041141272e-03 -1 -2 263 + -3.9469371549785137e-03 + + -5.4405367374420166e-01 3.6382490396499634e-01 + -3.0469849705696106e-01 + <_> + + 0 1 264 3.1871569808572531e-04 -1 -2 265 + -2.6655721012502909e-03 + + -4.6822971105575562e-01 3.3131968975067139e-01 + -2.9918238520622253e-01 + <_> + + 1 0 266 -3.9534650743007660e-02 -1 -2 267 + -9.4085611635819077e-04 + + -3.5316830873489380e-01 4.4447100162506104e-01 + -1.1088660359382629e-01 + <_> + + 0 1 268 6.9526307925116271e-05 -1 -2 269 + -9.6976682543754578e-03 + + -3.9403268694877625e-01 5.7181888818740845e-01 + -1.6370950266718864e-02 + <_> + + 1 0 270 3.9469040930271149e-02 -1 -2 271 + -8.2811042666435242e-03 + + 6.9152122735977173e-01 1.3349990546703339e-01 + -4.7064480185508728e-01 + <_> + + 0 1 272 -4.3219728395342827e-03 -1 -2 273 + -5.5436040274798870e-03 + + 3.8239258527755737e-01 1.5645879507064819e-01 + -4.1088208556175232e-01 + <_> + + 1 0 274 -5.9953341406071559e-05 -1 -2 275 + -5.9089371934533119e-03 + + -3.9221799373626709e-01 -5.9083867073059082e-01 + 2.7924481034278870e-01 + <_> + + 0 1 276 -4.4721391052007675e-02 -1 -2 277 + 4.1267018765211105e-02 + + 4.1454491019248962e-01 -3.2242009043693542e-01 + 3.7849879264831543e-01 + <_> + + 0 1 278 5.6728709751041606e-05 -1 -2 279 + -6.2427870929241180e-02 + + -3.2228040695190430e-01 -5.9666448831558228e-01 + 2.8915780782699585e-01 + <_> + + 0 1 280 -5.6994128972291946e-03 -1 -2 281 + 7.5202910229563713e-03 + + 3.7499341368675232e-01 -2.8132459521293640e-01 + 5.0988858938217163e-01 + <_> + + 0 1 282 -3.3640549518167973e-03 -1 -2 283 + -6.8076648749411106e-03 + + -6.3978207111358643e-01 -7.3105818033218384e-01 + 1.4475250244140625e-01 + <_> + + 1 0 284 1.2633459642529488e-02 -1 -2 285 + -2.9199919663369656e-03 + + -7.7725297212600708e-01 2.3258599638938904e-01 + -2.0490600168704987e-01 + <_> + + 0 1 286 -3.0582249164581299e-02 -1 -2 287 + -2.7796169742941856e-03 + + -6.5738821029663086e-01 -5.4888349771499634e-01 + 1.3837890326976776e-01 + <_> + + 0 1 288 -7.6163080520927906e-03 -1 -2 289 + -1.8409560434520245e-03 + + -3.5912349820137024e-01 2.2404469549655914e-01 + -3.7881860136985779e-01 + <_> + + 0 1 290 -3.9200261235237122e-02 -1 -2 291 + -2.2543789818882942e-03 + + 5.0090551376342773e-01 3.1364008784294128e-01 + -2.2131860256195068e-01 + <_> + + 1 0 292 2.3894659243524075e-03 -1 -2 293 + -1.0725490283221006e-03 + + -5.8699512481689453e-01 4.7141209244728088e-01 + -3.2570488750934601e-02 + <_> + + 0 1 294 8.9095337898470461e-05 -1 -2 295 + 1.6920049674808979e-03 + + -3.0444309115409851e-01 3.0280891060829163e-01 + -3.8902729749679565e-01 + <_> + + 1 0 296 1.1784000322222710e-02 -1 -2 297 + 3.9335917681455612e-03 + + -6.8993437290191650e-01 -6.7763939499855042e-02 + 4.6499788761138916e-01 + <_> + 22 + -2.0614759922027588e+00 + + <_> + + 0 1 298 1.1430840007960796e-02 -1 -2 299 + -3.2242920249700546e-02 + + -3.9274570345878601e-01 6.5568798780441284e-01 + -3.1068810820579529e-01 + <_> + + 1 0 300 -1.8382760463282466e-03 -1 -2 301 + -1.0764399915933609e-01 + + -4.0825068950653076e-01 4.3280079960823059e-01 + -4.2263451218605042e-01 + <_> + + 1 0 302 -2.3866090923547745e-03 -1 -2 303 + 8.6586214601993561e-03 + + -4.6435201168060303e-01 -4.0673071146011353e-01 + 4.1267868876457214e-01 + <_> + + 1 0 304 -1.6437229933217168e-03 -1 -2 305 + -9.8511137068271637e-02 + + -2.1344049274921417e-01 6.8432319164276123e-01 + -9.7035013139247894e-02 + <_> + + 0 1 306 4.4292360544204712e-03 -1 -2 307 + 4.6966210938990116e-03 + + -3.9498910307884216e-01 -1.1345980316400528e-01 + 4.9681991338729858e-01 + <_> + + 1 0 308 -8.8480701670050621e-03 -1 -2 309 + -6.7258379422128201e-03 + + -3.1293100118637085e-01 -6.1635792255401611e-01 + 3.1764769554138184e-01 + <_> + + 1 0 310 2.0052040927112103e-03 -1 -2 311 + -1.3407340273261070e-02 + + 3.1724271178245544e-01 1.9735060632228851e-01 + -3.7199181318283081e-01 + <_> + + 0 1 312 -4.4199679978191853e-03 -1 -2 313 + -3.2800938934087753e-02 + + -5.7164478302001953e-01 3.0599930882453918e-01 + -1.7397969961166382e-01 + <_> + + 0 1 314 4.9407979531679302e-05 -1 -2 315 + 4.1550169698894024e-03 + + -2.8270530700683594e-01 2.9686808586120605e-01 + -4.8494309186935425e-01 + <_> + + 1 0 316 -7.5589967309497297e-05 -1 -2 317 + -3.2147730235010386e-03 + + -3.8531139492988586e-01 -6.3306808471679688e-01 + 2.3434750735759735e-01 + <_> + + 0 1 318 1.6021779738366604e-03 -1 -2 319 + -1.9478019326925278e-02 + + -2.9579049348831177e-01 -4.9625208973884583e-01 + 2.6092579960823059e-01 + <_> + + 0 1 320 -2.5193750858306885e-02 -1 -2 321 + -4.6487729996442795e-02 + + 3.9384880661964417e-01 2.2168830037117004e-01 + -2.9691740870475769e-01 + <_> + + 1 0 322 4.3414267711341381e-03 -1 -2 323 + -2.4886759929358959e-03 + + -6.7661178112030029e-01 2.0509929955005646e-01 + -2.9771140217781067e-01 + <_> + + 0 1 324 -5.8827269822359085e-03 -1 -2 325 + 9.0498890494927764e-04 + + -6.1301797628402710e-01 -3.4023219347000122e-01 + 1.8168209493160248e-01 + <_> + + 0 1 326 -9.8338901996612549e-02 -1 -2 327 + 5.6141808629035950e-02 + + 4.7729569673538208e-01 -2.2904439270496368e-01 + 3.4410089254379272e-01 + <_> + + 1 0 328 -5.5787130258977413e-03 -1 -2 329 + 1.5108759980648756e-03 + + -3.5910171270370483e-01 2.4900430440902710e-01 + -4.3798071146011353e-01 + <_> + + 0 1 330 -6.0129738412797451e-03 -1 -2 331 + -7.9341192031279206e-04 + + 3.1164181232452393e-01 2.6759660243988037e-01 + -3.6802908778190613e-01 + <_> + + 1 0 332 6.1855330131947994e-03 -1 -2 333 + -7.3785060085356236e-03 + + -7.2153317928314209e-01 -5.3714382648468018e-01 + 1.3824890553951263e-01 + <_> + + 0 1 334 -6.7488732747733593e-04 -1 -2 335 + -1.3102099765092134e-03 + + 3.7406051158905029e-01 1.9003790616989136e-01 + -3.1632271409034729e-01 + <_> + + 0 1 336 4.9453211249783635e-04 -1 -2 337 + 1.2824690202251077e-03 + + -2.3283170163631439e-01 3.0463808774948120e-01 + -4.8092108964920044e-01 + <_> + + 0 1 338 -2.2624820470809937e-02 -1 -2 339 + 4.3685249984264374e-03 + + -6.8783479928970337e-01 1.2403090298175812e-01 + -7.9220730066299438e-01 + <_> + + 1 0 340 5.6756488047540188e-03 -1 -2 341 + -8.1769213080406189e-02 + + 1.7611420154571533e-01 3.8942161202430725e-01 + -4.5094010233879089e-01 + <_> + 24 + -1.9795049428939819e+00 + + <_> + + 1 0 342 -2.0003549754619598e-02 -1 -2 343 + -3.2621208578348160e-02 + + -5.6650751829147339e-01 5.0807082653045654e-01 + -4.5345708727836609e-01 + <_> + + 0 1 344 1.0668139904737473e-02 -1 -2 345 + -1.6276689246296883e-02 + + -3.2316839694976807e-01 6.0189497470855713e-01 + -2.4059510231018066e-01 + <_> + + 1 0 346 -2.8211208991706371e-03 -1 -2 347 + -1.4291180297732353e-02 + + -4.7181150317192078e-01 5.1280087232589722e-01 + -1.0744000226259232e-01 + <_> + + 0 1 348 1.0120410006493330e-03 -1 -2 349 + -5.9822672046720982e-03 + + -3.8844698667526245e-01 4.6928858757019043e-01 + -9.1355919837951660e-02 + <_> + + 1 0 350 -2.4705699179321527e-03 -1 -2 351 + 2.4079859722405672e-03 + + -4.5964410901069641e-01 2.1830670535564423e-01 + -5.9373402595520020e-01 + <_> + + 1 0 352 -1.4312269631773233e-03 -1 -2 353 + 2.9141810955479741e-04 + + -2.4731670320034027e-01 -2.5972241163253784e-01 + 3.8206368684768677e-01 + <_> + + 0 1 354 -3.2818811014294624e-03 -1 -2 355 + -1.0365940397605300e-03 + + -7.7180129289627075e-01 2.3569859564304352e-01 + -2.2067700326442719e-01 + <_> + + 0 1 356 -2.2078400943428278e-03 -1 -2 357 + 3.5239339340478182e-03 + + 3.0886119604110718e-01 -2.8496000170707703e-01 + 4.7544300556182861e-01 + <_> + + 0 1 358 -6.1774807982146740e-03 -1 -2 359 + -3.2023619860410690e-03 + + -7.0318382978439331e-01 -5.1361310482025146e-01 + 1.5656259655952454e-01 + <_> + + 1 0 360 -8.7003601947799325e-04 -1 -2 361 + -3.8079950027167797e-03 + + -2.9925128817558289e-01 5.5215638875961304e-01 + -8.0608041025698185e-04 + <_> + + 1 0 362 4.9994210712611675e-03 -1 -2 363 + -1.0323170572519302e-03 + + -4.3541741371154785e-01 5.4992151260375977e-01 + -5.0770761445164680e-03 + <_> + + 1 0 364 6.9215619005262852e-03 -1 -2 365 + -8.1578325480222702e-03 + + 3.3900010585784912e-01 3.4354889392852783e-01 + -2.4483889341354370e-01 + <_> + + 0 1 366 -1.6159559600055218e-03 -1 -2 367 + 4.7165839932858944e-03 + + -7.4653702974319458e-01 1.1855059862136841e-01 + -7.1803867816925049e-01 + <_> + + 1 0 368 -1.6093119978904724e-02 -1 -2 369 + -5.9861610643565655e-03 + + -3.2987210154533386e-01 3.1263980269432068e-01 + -2.3194029927253723e-01 + <_> + + 1 0 370 6.4122617244720459e-02 -1 -2 371 + 2.1518159657716751e-02 + + 4.6239149570465088e-01 -2.4277320504188538e-01 + 4.0963909029960632e-01 + <_> + + 0 1 372 -2.8541380167007446e-01 -1 -2 373 + 2.7372559998184443e-04 + + 4.4521799683570862e-01 -4.7307610511779785e-01 + 7.6739721000194550e-02 + <_> + + 0 1 374 -6.4039281569421291e-03 -1 -2 375 + 1.4279670082032681e-02 + + -5.6167787313461304e-01 -6.7311890423297882e-02 + 4.3806758522987366e-01 + <_> + + 0 1 376 -1.3179860077798367e-02 -1 -2 377 + 6.6828072071075439e-02 + + -6.7672669887542725e-01 -3.2182909548282623e-02 + 5.1308721303939819e-01 + <_> + + 0 1 378 6.3021448440849781e-03 -1 -2 379 + -1.6806010389700532e-03 + + -2.0082660019397736e-01 -5.1767241954803467e-01 + 3.8576510548591614e-01 + <_> + + 0 1 380 -1.5057720011100173e-03 -1 -2 381 + 1.1699240421876311e-03 + + 3.9358091354370117e-01 -2.5579568743705750e-01 + 3.1927299499511719e-01 + <_> + + 1 0 382 7.2735180146992207e-03 -1 -2 383 + 7.8693883551750332e-05 + + -7.1667242050170898e-01 -1.8908829987049103e-01 + 2.3849080502986908e-01 + <_> + + 1 0 384 1.9624589476734400e-03 -1 -2 385 + -3.1472831033170223e-03 + + -5.1583772897720337e-01 4.8033049702644348e-01 + -3.6237910389900208e-02 + <_> + + 1 0 386 5.0133569166064262e-03 -1 -2 387 + -6.5994369797408581e-03 + + -5.2729338407516479e-01 -6.9400531053543091e-01 + 1.2275890260934830e-01 + <_> + + 0 1 388 -4.2700361460447311e-02 -1 -2 389 + -3.5096149076707661e-05 + + -6.8218547105789185e-01 1.2160310149192810e-01 + -4.2142289876937866e-01 + <_> + 24 + -1.9048260450363159e+00 + + <_> + + 0 1 390 8.7128365412354469e-03 -1 -2 391 + -4.0675927884876728e-03 + + -4.4048839807510376e-01 6.0030102729797363e-01 + -2.6042649149894714e-01 + <_> + + 1 0 392 -8.3933398127555847e-02 -1 -2 393 + -2.2626180201768875e-02 + + -3.7943989038467407e-01 5.2529489994049072e-01 + -3.2733321189880371e-01 + <_> + + 1 0 394 -3.5725389607250690e-03 -1 -2 395 + -1.6297569964081049e-03 + + -2.6030939817428589e-01 4.8434230685234070e-01 + -3.8363268971443176e-01 + <_> + + 0 1 396 -8.0011576414108276e-02 -1 -2 397 + -9.6061453223228455e-02 + + 3.9579561352729797e-01 4.2874181270599365e-01 + -2.9096639156341553e-01 + <_> + + 1 0 398 -9.3183852732181549e-03 -1 -2 399 + 9.2205153778195381e-03 + + -3.9325499534606934e-01 -2.9857379198074341e-01 + 3.1733301281929016e-01 + <_> + + 1 0 400 2.3208750411868095e-02 -1 -2 401 + 1.6389730153605342e-03 + + 3.9295229315757751e-01 -5.4035997390747070e-01 + -2.1836880594491959e-02 + <_> + + 1 0 402 2.8872499242424965e-03 -1 -2 403 + 4.7465260140597820e-03 + + -7.8172737360000610e-01 1.4474189281463623e-01 + -6.4237701892852783e-01 + <_> + + 0 1 404 -5.7432148605585098e-03 -1 -2 405 + -8.5324952378869057e-03 + + -6.5556287765502930e-01 2.2090309858322144e-01 + -2.5790300965309143e-01 + <_> + + 0 1 406 -8.8752172887325287e-03 -1 -2 407 + -7.7129527926445007e-03 + + 4.6596860885620117e-01 2.5279781222343445e-01 + -2.6170450448989868e-01 + <_> + + 1 0 408 7.6909800991415977e-03 -1 -2 409 + 2.6657560374587774e-03 + + -5.9350818395614624e-01 1.6969729959964752e-01 + -5.4123950004577637e-01 + <_> + + 1 0 410 -4.4685939792543650e-04 -1 -2 411 + -1.5998890157788992e-03 + + -3.0383870005607605e-01 -5.4817748069763184e-01 + 2.4971559643745422e-01 + <_> + + 1 0 412 1.9368670182302594e-03 -1 -2 413 + -2.4878541007637978e-03 + + -6.3200348615646362e-01 4.7051379084587097e-01 + -4.5187219977378845e-02 + <_> + + 0 1 414 -2.8134910389780998e-03 -1 -2 415 + -1.4107710449025035e-03 + + 3.9270851016044617e-01 1.8017080426216125e-01 + -2.5714579224586487e-01 + <_> + + 0 1 416 -6.9013070315122604e-03 -1 -2 417 + -1.1458620429039001e-03 + + -5.3386241197586060e-01 2.8174358606338501e-01 + -1.6080249845981598e-01 + <_> + + 0 1 418 9.2800445854663849e-03 -1 -2 419 + -4.1281301528215408e-02 + + -3.0028960108757019e-01 -6.2409067153930664e-01 + 2.0549909770488739e-01 + <_> + + 0 1 420 -3.5625360906124115e-02 -1 -2 421 + -4.1647539474070072e-03 + + -5.2529340982437134e-01 -6.3538008928298950e-01 + 1.2846650183200836e-01 + <_> + + 0 1 422 -9.5598259940743446e-04 -1 -2 423 + -8.9347851462662220e-04 + + 2.6505509018898010e-01 1.8266810476779938e-01 + -3.7531790137290955e-01 + <_> + + 1 0 424 2.5431478861719370e-03 -1 -2 425 + -1.5853889286518097e-02 + + -6.1057221889495850e-01 3.0754768848419189e-01 + -9.8143920302391052e-02 + <_> + + 0 1 426 -4.1315760463476181e-02 -1 -2 427 + -6.8226549774408340e-04 + + 4.9247589707374573e-01 6.2975943088531494e-02 + -4.2634299397468567e-01 + <_> + + 1 0 428 6.3098431564867496e-04 -1 -2 429 + -2.8946860693395138e-03 + + 3.1397339701652527e-01 2.8590971231460571e-01 + -2.5623229146003723e-01 + <_> + + 0 1 430 -1.0244140401482582e-02 -1 -2 431 + -1.6979850828647614e-02 + + -6.9737482070922852e-01 -7.3125731945037842e-01 + 1.0389179736375809e-01 + <_> + + 1 0 432 -7.0198569446802139e-03 -1 -2 433 + -6.0688778758049011e-03 + + -3.5070639848709106e-01 -5.3395807743072510e-01 + 1.7334850132465363e-01 + <_> + + 0 1 434 -9.6911415457725525e-03 -1 -2 435 + 8.5460003465414047e-03 + + 5.6399798393249512e-01 -2.4716490507125854e-01 + 1.8216520547866821e-01 + <_> + + 1 0 436 -4.9479231238365173e-03 -1 -2 437 + 1.9269150216132402e-03 + + -2.8333988785743713e-01 -6.8196073174476624e-02 + 3.7787199020385742e-01 + <_> + 28 + -1.9407349824905396e+00 + + <_> + + 1 0 438 -2.8639819473028183e-02 -1 -2 439 + -4.2176660150289536e-02 + + -3.7718260288238525e-01 7.2298699617385864e-01 + -7.6141163706779480e-02 + <_> + + 1 0 440 -2.2537210024893284e-03 -1 -2 441 + -3.0683329328894615e-02 + + -3.2727459073066711e-01 5.1505237817764282e-01 + -2.2235199809074402e-01 + <_> + + 0 1 442 -1.2341269850730896e-01 -1 -2 443 + -2.3674150928854942e-02 + + 4.4699010252952576e-01 3.4708538651466370e-01 + -3.1773900985717773e-01 + <_> + + 0 1 444 3.1951239798218012e-03 -1 -2 445 + -1.4915530337020755e-03 + + -4.9775049090385437e-01 2.6384419202804565e-01 + -3.8912549614906311e-01 + <_> + + 0 1 446 8.8097527623176575e-04 -1 -2 447 + -5.8355771005153656e-02 + + -4.0939790010452271e-01 3.2287618517875671e-01 + -2.3045599460601807e-01 + <_> + + 1 0 448 5.1132370717823505e-03 -1 -2 449 + -4.5418320223689079e-03 + + -5.1353681087493896e-01 5.3011757135391235e-01 + -3.0649330466985703e-02 + <_> + + 1 0 450 1.6811339883133769e-03 -1 -2 451 + 2.8129699639976025e-03 + + -5.3161472082138062e-01 -6.7524053156375885e-02 + 3.8542249798774719e-01 + <_> + + 1 0 452 2.1835418883711100e-03 -1 -2 453 + -2.4335379712283611e-03 + + -6.4298832416534424e-01 -6.6313308477401733e-01 + 1.3882370293140411e-01 + <_> + + 1 0 454 3.0736608896404505e-03 -1 -2 455 + -9.6425544470548630e-03 + + -6.3433158397674561e-01 3.8696160912513733e-01 + -6.8737797439098358e-02 + <_> + + 0 1 456 -7.2082108817994595e-03 -1 -2 457 + -8.0191977322101593e-03 + + 1.6121250391006470e-01 3.8011130690574646e-01 + -4.1397979855537415e-01 + <_> + + 0 1 458 -7.2479159571230412e-03 -1 -2 459 + -2.2631640732288361e-01 + + 2.4351879954338074e-01 6.0667949914932251e-01 + -2.2521880269050598e-01 + <_> + + 0 1 460 -7.0091613451950252e-05 -1 -2 461 + -1.8161399662494659e-01 + + 1.7115320265293121e-01 5.2725982666015625e-01 + -3.5247540473937988e-01 + <_> + + 0 1 462 -9.4038434326648712e-03 -1 -2 463 + -2.1289030555635691e-03 + + 3.4970518946647644e-01 5.5878698825836182e-02 + -4.9816590547561646e-01 + <_> + + 0 1 464 -5.1798550412058830e-03 -1 -2 465 + -6.5030192490667105e-04 + + -6.3095641136169434e-01 3.5856458544731140e-01 + -7.8281052410602570e-02 + <_> + + 0 1 466 -1.0555930435657501e-02 -1 -2 467 + -5.1852981559932232e-03 + + -5.5502831935882568e-01 3.5548681020736694e-01 + -6.8892292678356171e-02 + <_> + + 0 1 468 -7.8725479543209076e-03 -1 -2 469 + -6.5342970192432404e-03 + + -4.8596179485321045e-01 2.1178959310054779e-01 + -2.3174080252647400e-01 + <_> + + 0 1 470 -1.3909920118749142e-02 -1 -2 471 + 1.5418450348079205e-03 + + 5.9936982393264771e-01 -9.5086917281150818e-03 + -6.4796131849288940e-01 + <_> + + 1 0 472 -1.1549900518730283e-03 -1 -2 473 + -3.2687030732631683e-02 + + -2.7501720190048218e-01 -6.7336207628250122e-01 + 1.9520400464534760e-01 + <_> + + 0 1 474 -2.6422590017318726e-01 -1 -2 475 + 6.9438670761883259e-03 + + 3.6986869573593140e-01 -3.0029740929603577e-01 + 1.4998969435691833e-01 + <_> + + 0 1 476 -1.2077920138835907e-02 -1 -2 477 + -1.3986700214445591e-03 + + 4.1644129157066345e-01 4.1248729825019836e-01 + -1.9533659517765045e-01 + <_> + + 1 0 478 1.3138339854776859e-02 -1 -2 479 + 7.2417110204696655e-03 + + -6.4204931259155273e-01 1.1359360069036484e-01 + -7.3838871717453003e-01 + <_> + + 0 1 480 -7.4837901629507542e-03 -1 -2 481 + 6.8022231571376324e-03 + + -6.9246298074722290e-01 9.2873439192771912e-02 + -6.0047471523284912e-01 + <_> + + 1 0 482 4.5322909951210022e-01 -1 -2 483 + -5.5721630342304707e-03 + + 5.6260532140731812e-01 7.7820159494876862e-02 + -3.3990600705146790e-01 + <_> + + 1 0 484 3.1583961099386215e-02 -1 -2 485 + -5.7926177978515625e-03 + + 3.2292670011520386e-01 1.5534450113773346e-01 + -3.5717839002609253e-01 + <_> + + 0 1 486 -7.6025379821658134e-03 -1 -2 487 + 9.5151038840413094e-04 + + -5.1859498023986816e-01 -2.9570670798420906e-02 + 4.6027511358261108e-01 + <_> + + 1 0 488 1.9723300356417894e-03 -1 -2 489 + 2.3158260155469179e-03 + + 3.6926651000976562e-01 -2.1299740672111511e-01 + 2.6948541402816772e-01 + <_> + + 1 0 490 2.1179600153118372e-03 -1 -2 491 + -2.6946600992232561e-03 + + -4.8369500041007996e-01 1.8545660376548767e-01 + -2.9411968588829041e-01 + <_> + + 1 0 492 5.8865409344434738e-02 -1 -2 493 + -6.8408921360969543e-03 + + -4.6770378947257996e-01 -6.6371321678161621e-01 + 1.2721349298954010e-01 + <_> + 26 + -1.8931059837341309e+00 + + <_> + + 1 0 494 -1.2766489759087563e-02 -1 -2 495 + 3.7821640726178885e-03 + + -3.7968099117279053e-01 -1.6001829504966736e-01 + 6.1953288316726685e-01 + <_> + + 1 0 496 -3.3049881458282471e-02 -1 -2 497 + 4.5050241053104401e-02 + + -3.6825481057167053e-01 9.3770343810319901e-03 + 7.1570581197738647e-01 + <_> + + 1 0 498 -3.5275409463793039e-03 -1 -2 499 + 2.2250709589570761e-03 + + -3.7336608767509460e-01 -6.6712491214275360e-02 + 4.9906119704246521e-01 + <_> + + 1 0 500 1.3609490124508739e-03 -1 -2 501 + -2.9087859392166138e-01 + + 1.7162929475307465e-01 3.6158901453018188e-01 + -5.0871372222900391e-01 + <_> + + 1 0 502 3.3148950897157192e-03 -1 -2 503 + -8.8641437469050288e-04 + + -7.1788138151168823e-01 2.5713619589805603e-01 + -1.7978949844837189e-01 + <_> + + 1 0 504 1.1313590221107006e-03 -1 -2 505 + -3.0621800106018782e-03 + + 3.5387420654296875e-01 3.0790808796882629e-01 + -3.1217241287231445e-01 + <_> + + 1 0 506 2.5443620979785919e-03 -1 -2 507 + -6.7088878713548183e-03 + + -5.6788551807403564e-01 2.1222899854183197e-01 + -2.6821109652519226e-01 + <_> + + 0 1 508 -1.6446809470653534e-01 -1 -2 509 + 4.0828108787536621e-02 + + 4.9016961455345154e-01 -3.1217470765113831e-01 + 2.4748149514198303e-01 + <_> + + 0 1 510 -3.6051510833203793e-03 -1 -2 511 + -2.3608640767633915e-03 + + 3.4355860948562622e-01 2.6566460728645325e-01 + -2.8644719719886780e-01 + <_> + + 0 1 512 1.2965350179001689e-03 -1 -2 513 + 6.0111000202596188e-03 + + -2.9317760467529297e-01 2.1941700577735901e-01 + -6.0014218091964722e-01 + <_> + + 1 0 514 -6.1628420371562243e-04 -1 -2 515 + 2.0573718938976526e-03 + + -3.1292331218719482e-01 2.8763169050216675e-01 + -3.7320709228515625e-01 + <_> + + 0 1 516 -7.7166007831692696e-03 -1 -2 517 + -2.8222459368407726e-03 + + -7.1683251857757568e-01 4.2501831054687500e-01 + -5.3294889628887177e-02 + <_> + + 0 1 518 -7.3861207056324929e-05 -1 -2 519 + 5.8680498041212559e-03 + + 1.4903450012207031e-01 -5.8436650037765503e-01 + 1.0724759846925735e-01 + <_> + + 1 0 520 -7.9013723880052567e-03 -1 -2 521 + 2.7825690340250731e-03 + + -3.4319949150085449e-01 1.7655360698699951e-01 + -6.1473757028579712e-01 + <_> + + 0 1 522 3.2751538674347103e-04 -1 -2 523 + 3.0700899660587311e-02 + + -3.3837568759918213e-01 1.8566130101680756e-01 + -5.3450268507003784e-01 + <_> + + 1 0 524 5.6932470761239529e-03 -1 -2 525 + 2.1375140547752380e-01 + + -5.1750451326370239e-01 1.2332399934530258e-01 + -6.4288139343261719e-01 + <_> + + 0 1 526 -4.4024959206581116e-03 -1 -2 527 + -4.5719969784840941e-04 + + 5.8535677194595337e-01 2.3368820548057556e-01 + -1.9039009511470795e-01 + <_> + + 0 1 528 -4.2587839998304844e-03 -1 -2 529 + -2.3462621029466391e-03 + + -5.1190847158432007e-01 -4.7164770960807800e-01 + 1.4783400297164917e-01 + <_> + + 1 0 530 -6.5065571106970310e-05 -1 -2 531 + -5.5082160979509354e-03 + + -2.9886341094970703e-01 -4.8508960008621216e-01 + 2.0014910399913788e-01 + <_> + + 1 0 532 1.8942790105938911e-02 -1 -2 533 + 6.9123771972954273e-03 + + 3.1028950214385986e-01 -2.8701239824295044e-01 + 2.0534069836139679e-01 + <_> + + 1 0 534 8.1696882843971252e-03 -1 -2 535 + 1.0069769807159901e-02 + + 4.5810830593109131e-01 -2.4175919592380524e-01 + 1.7593820393085480e-01 + <_> + + 1 0 536 2.1663580555468798e-03 -1 -2 537 + 1.0505730286240578e-02 + + -4.9877908825874329e-01 1.6231280565261841e-01 + -4.2988869547843933e-01 + <_> + + 1 0 538 5.7576788822188973e-04 -1 -2 539 + -3.0608899891376495e-02 + + -3.1012570858001709e-01 -7.4064302444458008e-01 + 1.6217179596424103e-01 + <_> + + 0 1 540 -1.3430659659206867e-02 -1 -2 541 + 1.1859040241688490e-03 + + 4.5505639910697937e-01 -2.7227258682250977e-01 + 2.2475010156631470e-01 + <_> + + 0 1 542 -4.9311347538605332e-04 -1 -2 543 + -2.4509918875992298e-03 + + -3.9598318934440613e-01 2.5004211068153381e-01 + -1.6140510141849518e-01 + <_> + + 1 0 544 1.3641949743032455e-02 -1 -2 545 + -3.6733329296112061e-02 + + -6.4525490999221802e-01 3.4197059273719788e-01 + -6.5968327224254608e-02 + <_> + 29 + -1.9677840471267700e+00 + + <_> + + 0 1 546 1.3613830087706447e-03 -1 -2 547 + 1.2211060151457787e-02 + + -3.4383928775787354e-01 -4.0358600020408630e-01 + 5.7873630523681641e-01 + <_> + + 0 1 548 3.2929528970271349e-03 -1 -2 549 + -2.4831980466842651e-02 + + -2.2164349257946014e-01 5.4256910085678101e-01 + -4.7585600614547729e-01 + <_> + + 0 1 550 -3.4081530570983887e-01 -1 -2 551 + 6.0929641127586365e-02 + + 5.3438740968704224e-01 -2.6015359163284302e-01 + 3.7626558542251587e-01 + <_> + + 1 0 552 -1.4399300562217832e-03 -1 -2 553 + -7.5711178779602051e-01 + + -4.1635149717330933e-01 4.7764539718627930e-01 + -1.2374229729175568e-01 + <_> + + 0 1 554 -5.9891431592404842e-03 -1 -2 555 + -8.9398561976850033e-04 + + 2.1848620474338531e-01 1.7726029455661774e-01 + -5.4815018177032471e-01 + <_> + + 1 0 556 2.9013510793447495e-03 -1 -2 557 + 4.4361278414726257e-03 + + -5.6709182262420654e-01 1.4183780550956726e-01 + -5.8784419298171997e-01 + <_> + + 1 0 558 -5.3319290600484237e-05 -1 -2 559 + 2.5481029879301786e-03 + + -3.4821888804435730e-01 1.9745320081710815e-01 + -5.5979222059249878e-01 + <_> + + 1 0 560 7.4882939457893372e-02 -1 -2 561 + 4.8816308379173279e-02 + + 4.6647951006889343e-01 -2.2575210034847260e-01 + 3.2325819134712219e-01 + <_> + + 0 1 562 -3.9128339849412441e-03 -1 -2 563 + -1.3820629566907883e-02 + + -5.9772872924804688e-01 2.6031211018562317e-01 + -2.0211410522460938e-01 + <_> + + 0 1 564 9.4047200400382280e-04 -1 -2 565 + -4.6419431455433369e-03 + + -3.4005248546600342e-01 -4.5187801122665405e-01 + 2.1054859459400177e-01 + <_> + + 1 0 566 -3.1960941851139069e-02 -1 -2 567 + -1.2651160068344325e-04 + + -2.0826019346714020e-01 3.8553190231323242e-01 + -2.3116420209407806e-01 + <_> + + 0 1 568 -5.0413709133863449e-02 -1 -2 569 + -2.0950778853148222e-03 + + 2.2846159338951111e-01 3.2639551162719727e-01 + -3.4385430812835693e-01 + <_> + + 0 1 570 -1.1017880402505398e-02 -1 -2 571 + -9.7415763884782791e-03 + + -7.7388781309127808e-01 3.6731991171836853e-01 + -6.5746001899242401e-02 + <_> + + 0 1 572 5.3386680519906804e-05 -1 -2 573 + 5.9820311143994331e-03 + + -3.5571750998497009e-01 1.7653119564056396e-01 + -4.6110078692436218e-01 + <_> + + 1 0 574 -1.9558269996196032e-03 -1 -2 575 + 7.6739699579775333e-03 + + -3.6172690987586975e-01 1.8038579821586609e-01 + -4.0452030301094055e-01 + <_> + + 1 0 576 4.2935381643474102e-03 -1 -2 577 + 1.4181300066411495e-03 + + 5.2086359262466431e-01 -2.2085809707641602e-01 + 2.7357560396194458e-01 + <_> + + 0 1 578 -2.8263099491596222e-02 -1 -2 579 + 6.3434068579226732e-04 + + -6.3833731412887573e-01 1.5636380016803741e-01 + -3.2148900628089905e-01 + <_> + + 0 1 580 -7.2387307882308960e-03 -1 -2 581 + -9.9928081035614014e-03 + + 2.3126259446144104e-01 3.0397319793701172e-01 + -2.4478439986705780e-01 + <_> + + 1 0 582 6.4995248976629227e-05 -1 -2 583 + -5.3049270063638687e-03 + + 1.5132980048656464e-01 2.0417870581150055e-01 + -4.6260431408882141e-01 + <_> + + 0 1 584 -1.6613099724054337e-02 -1 -2 585 + -1.1630290187895298e-02 + + 3.3399769663810730e-01 3.7053430080413818e-01 + -1.9361549615859985e-01 + <_> + + 1 0 586 1.9068180117756128e-03 -1 -2 587 + -5.6926468387246132e-03 + + -3.8105058670043945e-01 5.0645208358764648e-01 + 6.5170922316610813e-03 + <_> + + 1 0 588 -2.2453670680988580e-04 -1 -2 589 + 9.5565039664506912e-03 + + -3.1526011228561401e-01 -5.3035598993301392e-01 + 2.0532760024070740e-01 + <_> + + 1 0 590 3.1540619675070047e-03 -1 -2 591 + -3.0681329965591431e-01 + + -4.5928329229354858e-01 5.0717717409133911e-01 + -1.4439250342547894e-02 + <_> + + 0 1 592 2.8239809907972813e-03 -1 -2 593 + -3.3063529990613461e-03 + + -1.5437939763069153e-01 -4.3571388721466064e-01 + 3.9342719316482544e-01 + <_> + + 1 0 594 3.7848789361305535e-04 -1 -2 595 + -3.0488630291074514e-03 + + 2.5212600827217102e-01 4.6662339568138123e-01 + -2.2792230546474457e-01 + <_> + + 0 1 596 -1.4724380336701870e-02 -1 -2 597 + 3.6062300205230713e-02 + + -7.8602111339569092e-01 -6.8571321666240692e-02 + 3.6698839068412781e-01 + <_> + + 0 1 598 -2.2327410988509655e-03 -1 -2 599 + -7.8541820403188467e-04 + + -5.9740197658538818e-01 2.0273469388484955e-01 + -1.7221680283546448e-01 + <_> + + 1 0 600 7.8553898492828012e-04 -1 -2 601 + 1.0078109800815582e-02 + + -4.3407449126243591e-01 1.2464140355587006e-01 + -4.8391419649124146e-01 + <_> + + 1 0 602 2.0928790792822838e-02 -1 -2 603 + 1.3340089935809374e-03 + + 5.6864207983016968e-01 1.4524639584124088e-02 + -4.6003210544586182e-01 + <_> + 34 + -1.9657919406890869e+00 + + <_> + + 1 0 604 -1.5313959680497646e-02 -1 -2 605 + -1.4265860430896282e-02 + + -3.4347689151763916e-01 5.8209532499313354e-01 + -3.5527399182319641e-01 + <_> + + 0 1 606 1.2652979930862784e-03 -1 -2 607 + -7.3807648732326925e-05 + + -3.1498318910598755e-01 4.7249591350555420e-01 + -2.6380801200866699e-01 + <_> + + 0 1 608 -3.8527030497789383e-02 -1 -2 609 + -1.4758770354092121e-02 + + 4.1556850075721741e-01 1.5677249431610107e-01 + -3.7650239467620850e-01 + <_> + + 1 0 610 -1.5448270132765174e-03 -1 -2 611 + 6.4564580097794533e-03 + + -3.5932019352912903e-01 2.1276639401912689e-01 + -7.2287178039550781e-01 + <_> + + 0 1 612 1.0267349891364574e-02 -1 -2 613 + -8.6422899039462209e-04 + + -4.6045809984207153e-01 2.4920259416103363e-01 + -2.6721361279487610e-01 + <_> + + 0 1 614 3.2311889808624983e-03 -1 -2 615 + 1.3676529750227928e-02 + + -4.0939199924468994e-01 -2.7391690760850906e-02 + 4.5259070396423340e-01 + <_> + + 1 0 616 3.2787120435386896e-03 -1 -2 617 + -1.4256529975682497e-03 + + -7.0025652647018433e-01 2.5787800550460815e-01 + -1.5093439817428589e-01 + <_> + + 0 1 618 -2.2095029707998037e-03 -1 -2 619 + -8.7701372802257538e-02 + + 3.5148110985755920e-01 4.1978740692138672e-01 + -2.3600180447101593e-01 + <_> + + 0 1 620 -2.8805620968341827e-03 -1 -2 621 + -2.5028509553521872e-03 + + 3.0479869246482849e-01 1.3316699862480164e-01 + -3.1691300868988037e-01 + <_> + + 1 0 622 -5.1710562547668815e-04 -1 -2 623 + 6.7088729701936245e-03 + + -3.5199090838432312e-01 2.0163150131702423e-01 + -6.0948008298873901e-01 + <_> + + 0 1 624 -7.6058752834796906e-02 -1 -2 625 + -3.0889140907675028e-03 + + -6.3694208860397339e-01 -7.9025340080261230e-01 + 1.0366079956293106e-01 + <_> + + 1 0 626 2.5740528944879770e-03 -1 -2 627 + -5.4877097718417645e-03 + + -4.5424199104309082e-01 2.1481299400329590e-01 + -1.9329510629177094e-01 + <_> + + 1 0 628 -1.2507289648056030e-03 -1 -2 629 + -4.3231048621237278e-03 + + -2.1651449799537659e-01 -6.2799078226089478e-01 + 2.4270740151405334e-01 + <_> + + 1 0 630 4.3724630959331989e-03 -1 -2 631 + 7.4632692849263549e-04 + + -5.1889377832412720e-01 -1.1378680169582367e-01 + 2.8224378824234009e-01 + <_> + + 0 1 632 -1.3375070411711931e-03 -1 -2 633 + -2.9367550741881132e-03 + + 2.4589119851589203e-01 2.4335819482803345e-01 + -2.9112818837165833e-01 + <_> + + 0 1 634 6.3193867390509695e-05 -1 -2 635 + -5.1338938064873219e-03 + + -2.5806590914726257e-01 -4.6110409498214722e-01 + 2.4333980679512024e-01 + <_> + + 1 0 636 4.9400608986616135e-03 -1 -2 637 + -5.6112580932676792e-03 + + -3.9632990956306458e-01 2.4502380192279816e-01 + -1.5639010071754456e-01 + <_> + + 1 0 638 4.2950599454343319e-03 -1 -2 639 + 4.5142881572246552e-03 + + -4.7671678662300110e-01 1.0698430240154266e-01 + -9.0471321344375610e-01 + <_> + + 1 0 640 7.5297639705240726e-03 -1 -2 641 + -1.2225280515849590e-03 + + 4.1239809989929199e-01 2.8488171100616455e-01 + -1.9815699756145477e-01 + <_> + + 0 1 642 -3.4703810233622789e-03 -1 -2 643 + 8.3724651485681534e-03 + + -4.4967961311340332e-01 1.5324249863624573e-01 + -3.8666850328445435e-01 + <_> + + 1 0 644 -3.3934618841158226e-05 -1 -2 645 + -2.7241709828376770e-01 + + -3.1429070234298706e-01 -5.5842101573944092e-01 + 1.6627819836139679e-01 + <_> + + 0 1 646 -2.7582740876823664e-03 -1 -2 647 + 2.5530489161610603e-02 + + 2.7189570665359497e-01 -1.9172009825706482e-01 + 4.3780499696731567e-01 + <_> + + 1 0 648 4.2080380953848362e-03 -1 -2 649 + -8.2151442766189575e-03 + + -4.4684138894081116e-01 2.2786709666252136e-01 + -1.7441789805889130e-01 + <_> + + 0 1 650 -2.9405429959297180e-03 -1 -2 651 + -9.4840265810489655e-03 + + -7.2643548250198364e-01 2.0794290304183960e-01 + -1.5239919722080231e-01 + <_> + + 1 0 652 4.2596450075507164e-03 -1 -2 653 + -1.7117479583248496e-03 + + 6.1772680282592773e-01 -7.1106612682342529e-01 + -6.1875251121819019e-03 + <_> + + 0 1 654 -1.3266160385683179e-03 -1 -2 655 + 9.1314306482672691e-03 + + 1.7181269824504852e-01 -4.1138759255409241e-01 + 1.8124279379844666e-01 + <_> + + 1 0 656 6.8382360041141510e-03 -1 -2 657 + 7.5181988067924976e-03 + + -5.7601082324981689e-01 -1.0819079726934433e-01 + 2.9561421275138855e-01 + <_> + + 0 1 658 -7.2788819670677185e-03 -1 -2 659 + -1.8039470538496971e-02 + + -5.8113521337509155e-01 4.5183068513870239e-01 + -2.7083089575171471e-02 + <_> + + 0 1 660 -1.0126599809154868e-03 -1 -2 661 + -6.7263199016451836e-03 + + 2.4344119429588318e-01 1.6870440542697906e-01 + -2.7007728815078735e-01 + <_> + + 0 1 662 -3.2334970310330391e-03 -1 -2 663 + -7.7852200774941593e-05 + + -6.0048222541809082e-01 2.4241769313812256e-01 + -1.2413249909877777e-01 + <_> + + 0 1 664 -6.7774722992908210e-05 -1 -2 665 + 7.1789676439948380e-05 + + 1.5729150176048279e-01 -5.2893507480621338e-01 + -3.1665571033954620e-02 + <_> + + 1 0 666 1.0024299845099449e-02 -1 -2 667 + 9.4298496842384338e-03 + + -4.8646959662437439e-01 1.1240869760513306e-01 + -4.2570489645004272e-01 + <_> + + 0 1 668 -7.4433721601963043e-04 -1 -2 669 + 1.1660560034215450e-02 + + 2.7540761232376099e-01 -2.3117260634899139e-01 + 2.2442330420017242e-01 + <_> + + 1 0 670 3.9079408161342144e-03 -1 -2 671 + 1.6550149768590927e-02 + + -6.3519638776779175e-01 1.0619100183248520e-01 + -4.7654989361763000e-01 + <_> + 32 + -1.7649420499801636e+00 + + <_> + + 1 0 672 -1.8439030274748802e-02 -1 -2 673 + -5.3364519029855728e-02 + + -4.8745709657669067e-01 5.1037812232971191e-01 + -2.2670130431652069e-01 + <_> + + 0 1 674 -7.5706318020820618e-02 -1 -2 675 + -1.5329009620472789e-03 + + 4.1487750411033630e-01 8.5764937102794647e-02 + -4.3470910191535950e-01 + <_> + + 1 0 676 -2.4494890123605728e-02 -1 -2 677 + -3.8144161226227880e-04 + + -2.7532699704170227e-01 3.8043969869613647e-01 + -4.3967849016189575e-01 + <_> + + 1 0 678 -8.8816778734326363e-03 -1 -2 679 + -3.9625130593776703e-02 + + -4.3258818984031677e-01 2.4481220543384552e-01 + -2.6193639636039734e-01 + <_> + + 1 0 680 -3.5907390993088484e-03 -1 -2 681 + 3.7008870393037796e-02 + + -3.6199480295181274e-01 2.2637460380792618e-02 + 5.5778437852859497e-01 + <_> + + 0 1 682 7.8503930126316845e-05 -1 -2 683 + -4.7969701699912548e-03 + + -3.3861130475997925e-01 3.1856098771095276e-01 + -1.6600249707698822e-01 + <_> + + 0 1 684 -1.1298010125756264e-02 -1 -2 685 + -4.4886539690196514e-03 + + 3.7305471301078796e-01 2.9692959785461426e-01 + -2.5235760211944580e-01 + <_> + + 0 1 686 -2.2497780155390501e-03 -1 -2 687 + 2.9247230850160122e-03 + + 3.4263029694557190e-01 -5.6593239307403564e-02 + -7.0626032352447510e-01 + <_> + + 1 0 688 1.7976630479097366e-03 -1 -2 689 + 1.9808609504252672e-03 + + -5.4180228710174561e-01 -2.5643008947372437e-01 + 1.8446870148181915e-01 + <_> + + 0 1 690 -4.7688339836895466e-03 -1 -2 691 + -1.5755610540509224e-02 + + -2.9698228836059570e-01 2.8959378600120544e-01 + -1.6480749845504761e-01 + <_> + + 0 1 692 -1.1919640004634857e-02 -1 -2 693 + 4.2308131232857704e-03 + + -5.8567219972610474e-01 1.3601270318031311e-01 + -4.8162451386451721e-01 + <_> + + 1 0 694 2.0548550412058830e-02 -1 -2 695 + -7.3943338356912136e-03 + + 3.0143499374389648e-01 4.6367760747671127e-02 + -4.2379519343376160e-01 + <_> + + 0 1 696 -6.2137800268828869e-03 -1 -2 697 + 1.4182809973135591e-03 + + 4.5724278688430786e-01 -3.0143639445304871e-01 + 1.8204510211944580e-01 + <_> + + 1 0 698 4.1609420441091061e-03 -1 -2 699 + -3.7915320135653019e-03 + + -5.2654838562011719e-01 -5.8677071332931519e-01 + 1.1703660339117050e-01 + <_> + + 1 0 700 2.0879150833934546e-03 -1 -2 701 + 1.5018540434539318e-03 + + -3.5307729244232178e-01 1.8624800443649292e-01 + -3.2729730010032654e-01 + <_> + + 1 0 702 2.1248809993267059e-02 -1 -2 703 + -5.5249751312658191e-04 + + -3.1979259848594666e-01 2.3370230197906494e-01 + -1.7386199533939362e-01 + <_> + + 0 1 704 -3.0085169710218906e-03 -1 -2 705 + -1.1611919617280364e-03 + + 1.7596049606800079e-01 1.6033430397510529e-01 + -3.9680978655815125e-01 + <_> + + 0 1 706 -3.9655580185353756e-03 -1 -2 707 + -6.5836100839078426e-03 + + 3.6691769957542419e-01 -6.2966358661651611e-01 + -2.4926450103521347e-02 + <_> + + 0 1 708 -9.0950471349060535e-04 -1 -2 709 + -5.7984529994428158e-03 + + 3.9574980735778809e-01 1.7492240667343140e-01 + -2.6837408542633057e-01 + <_> + + 0 1 710 -5.7758802175521851e-01 -1 -2 711 + -1.5161310322582722e-02 + + 5.9611392021179199e-01 -6.6131639480590820e-01 + 3.3608361263759434e-04 + <_> + + 1 0 712 7.6604672358371317e-05 -1 -2 713 + 2.7769979089498520e-02 + + 2.0401589572429657e-01 -3.2097330689430237e-01 + 2.2317400574684143e-01 + <_> + + 0 1 714 -2.6336179580539465e-03 -1 -2 715 + 8.3722146227955818e-03 + + -3.9656499028205872e-01 1.3883970677852631e-01 + -5.8006221055984497e-01 + <_> + + 0 1 716 -7.0203031646087766e-04 -1 -2 717 + -4.8448870074935257e-04 + + 2.7777281403541565e-01 2.1628519892692566e-01 + -2.9692250490188599e-01 + <_> + + 0 1 718 -3.3638171851634979e-02 -1 -2 719 + 4.4241230934858322e-03 + + 3.5791969299316406e-01 -8.6632027523592114e-04 + -5.5872720479965210e-01 + <_> + + 1 0 720 1.1545260436832905e-02 -1 -2 721 + -1.5816639643162489e-03 + + 3.3837619423866272e-01 2.8660699725151062e-02 + -3.5041970014572144e-01 + <_> + + 1 0 722 1.3838140293955803e-02 -1 -2 723 + 2.8327409178018570e-02 + + -7.7886807918548584e-01 -1.8604910001158714e-02 + 6.2147867679595947e-01 + <_> + + 0 1 724 -8.8482163846492767e-03 -1 -2 725 + -1.1661020107567310e-03 + + 2.6369819045066833e-01 1.0302580147981644e-01 + -3.2680010795593262e-01 + <_> + + 0 1 726 -3.2252211123704910e-02 -1 -2 727 + -9.4921119511127472e-02 + + -5.0046241283416748e-01 -7.2761011123657227e-01 + 1.0330100357532501e-01 + <_> + + 1 0 728 2.5177269708365202e-03 -1 -2 729 + -4.0892168879508972e-02 + + -6.3938027620315552e-01 -5.7345229387283325e-01 + 8.1502526998519897e-02 + <_> + + 0 1 730 -1.9293189980089664e-03 -1 -2 731 + -1.4116390375420451e-03 + + 2.4177229404449463e-01 8.0363817512989044e-02 + -3.6146539449691772e-01 + <_> + + 0 1 732 -3.8812779821455479e-03 -1 -2 733 + 4.4630360789597034e-03 + + -5.7638782262802124e-01 9.1835789382457733e-02 + -6.8039101362228394e-01 + <_> + + 0 1 734 2.9870839789509773e-03 -1 -2 735 + 9.4975335523486137e-03 + + -1.0236640274524689e-01 4.9150609970092773e-01 + -3.8011389970779419e-01 + + <_> + + <_> + 8 7 3 12 -1. + <_> + 8 11 3 4 3. + <_> + + <_> + 8 7 8 3 -1. + <_> + 10 9 4 3 2. + 1 + <_> + + <_> + 9 13 2 6 -1. + <_> + 9 16 2 3 2. + <_> + + <_> + 8 2 12 8 -1. + <_> + 11 2 6 8 2. + <_> + + <_> + 14 0 6 6 -1. + <_> + 14 3 6 3 2. + <_> + + <_> + 8 1 5 12 -1. + <_> + 8 4 5 6 2. + <_> + + <_> + 1 8 3 12 -1. + <_> + 1 12 3 4 3. + <_> + + <_> + 0 11 2 7 -1. + <_> + 1 11 1 7 2. + <_> + + <_> + 6 12 9 7 -1. + <_> + 9 12 3 7 3. + <_> + + <_> + 13 4 6 9 -1. + <_> + 15 4 2 9 3. + <_> + + <_> + 4 7 12 12 -1. + <_> + 8 11 4 4 9. + <_> + + <_> + 15 0 4 20 -1. + <_> + 15 5 4 10 2. + <_> + + <_> + 0 12 5 8 -1. + <_> + 0 16 5 4 2. + <_> + + <_> + 8 2 12 8 -1. + <_> + 12 2 4 8 3. + <_> + + <_> + 19 0 1 8 -1. + <_> + 19 4 1 4 2. + <_> + + <_> + 9 7 3 12 -1. + <_> + 9 11 3 4 3. + <_> + + <_> + 1 2 8 8 -1. + <_> + 1 6 8 4 2. + <_> + + <_> + 0 12 4 4 -1. + <_> + 2 12 2 4 2. + <_> + + <_> + 9 7 6 8 -1. + <_> + 9 7 3 4 2. + <_> + 12 11 3 4 2. + <_> + + <_> + 13 18 7 2 -1. + <_> + 13 19 7 1 2. + <_> + + <_> + 4 7 12 12 -1. + <_> + 8 11 4 4 9. + <_> + + <_> + 0 8 5 12 -1. + <_> + 0 12 5 4 3. + <_> + + <_> + 16 0 4 8 -1. + <_> + 18 0 2 8 2. + <_> + + <_> + 16 12 1 8 -1. + <_> + 16 16 1 4 2. + <_> + + <_> + 9 1 9 9 -1. + <_> + 12 1 3 9 3. + <_> + + <_> + 16 16 1 3 -1. + <_> + 15 17 1 1 3. + 1 + <_> + + <_> + 2 14 2 4 -1. + <_> + 2 16 2 2 2. + <_> + + <_> + 6 12 9 3 -1. + <_> + 9 12 3 3 3. + <_> + + <_> + 0 18 5 2 -1. + <_> + 0 19 5 1 2. + <_> + + <_> + 1 7 18 12 -1. + <_> + 7 11 6 4 9. + <_> + + <_> + 4 0 16 12 -1. + <_> + 4 0 8 6 2. + <_> + 12 6 8 6 2. + <_> + + <_> + 8 3 2 5 -1. + <_> + 9 3 1 5 2. + <_> + + <_> + 17 17 1 2 -1. + <_> + 17 17 1 1 2. + 1 + <_> + + <_> + 18 16 1 3 -1. + <_> + 17 17 1 1 3. + 1 + <_> + + <_> + 0 9 2 6 -1. + <_> + 1 9 1 6 2. + <_> + + <_> + 3 3 3 4 -1. + <_> + 4 3 1 4 3. + <_> + + <_> + 4 7 12 12 -1. + <_> + 8 11 4 4 9. + <_> + + <_> + 10 0 7 8 -1. + <_> + 10 4 7 4 2. + <_> + + <_> + 18 0 2 9 -1. + <_> + 19 0 1 9 2. + <_> + + <_> + 4 13 1 4 -1. + <_> + 4 13 1 2 2. + 1 + <_> + + <_> + 10 8 6 2 -1. + <_> + 12 10 2 2 3. + 1 + <_> + + <_> + 14 11 4 7 -1. + <_> + 15 11 2 7 2. + <_> + + <_> + 4 0 13 8 -1. + <_> + 4 2 13 4 2. + <_> + + <_> + 9 1 7 8 -1. + <_> + 9 5 7 4 2. + <_> + + <_> + 7 0 12 9 -1. + <_> + 10 0 6 9 2. + <_> + + <_> + 14 3 4 4 -1. + <_> + 15 3 2 4 2. + <_> + + <_> + 0 16 4 4 -1. + <_> + 0 18 4 2 2. + <_> + + <_> + 3 17 2 1 -1. + <_> + 3 17 1 1 2. + 1 + <_> + + <_> + 17 16 1 3 -1. + <_> + 16 17 1 1 3. + 1 + <_> + + <_> + 11 10 6 4 -1. + <_> + 10 11 6 2 2. + 1 + <_> + + <_> + 19 0 1 4 -1. + <_> + 19 2 1 2 2. + <_> + + <_> + 17 0 3 3 -1. + <_> + 18 1 1 1 9. + <_> + + <_> + 2 1 12 6 -1. + <_> + 2 4 12 3 2. + <_> + + <_> + 19 2 1 16 -1. + <_> + 15 6 1 8 2. + 1 + <_> + + <_> + 12 2 4 6 -1. + <_> + 13 2 2 6 2. + <_> + + <_> + 11 3 3 3 -1. + <_> + 12 3 1 3 3. + <_> + + <_> + 1 7 18 12 -1. + <_> + 7 11 6 4 9. + <_> + + <_> + 8 1 12 9 -1. + <_> + 12 1 4 9 3. + <_> + + <_> + 18 0 2 10 -1. + <_> + 18 5 2 5 2. + <_> + + <_> + 4 5 12 15 -1. + <_> + 8 10 4 5 9. + <_> + + <_> + 1 8 4 12 -1. + <_> + 1 12 4 4 3. + <_> + + <_> + 6 13 8 2 -1. + <_> + 8 13 4 2 2. + <_> + + <_> + 16 0 4 15 -1. + <_> + 18 0 2 15 2. + <_> + + <_> + 14 0 4 8 -1. + <_> + 15 0 2 8 2. + <_> + + <_> + 5 0 8 9 -1. + <_> + 5 3 8 3 3. + <_> + + <_> + 8 0 6 6 -1. + <_> + 10 0 2 6 3. + <_> + + <_> + 10 17 3 3 -1. + <_> + 11 17 1 3 3. + <_> + + <_> + 10 17 4 3 -1. + <_> + 11 17 2 3 2. + <_> + + <_> + 14 12 4 4 -1. + <_> + 15 12 2 4 2. + <_> + + <_> + 8 18 4 2 -1. + <_> + 9 18 2 2 2. + <_> + + <_> + 6 1 4 5 -1. + <_> + 7 1 2 5 2. + <_> + + <_> + 2 0 6 5 -1. + <_> + 4 0 2 5 3. + <_> + + <_> + 8 7 8 3 -1. + <_> + 10 9 4 3 2. + 1 + <_> + + <_> + 14 12 4 3 -1. + <_> + 15 12 2 3 2. + <_> + + <_> + 10 10 3 4 -1. + <_> + 9 11 3 2 2. + 1 + <_> + + <_> + 17 0 2 6 -1. + <_> + 17 3 2 3 2. + <_> + + <_> + 1 9 6 9 -1. + <_> + 3 12 2 3 9. + <_> + + <_> + 5 11 8 4 -1. + <_> + 9 11 4 4 2. + <_> + + <_> + 1 0 16 6 -1. + <_> + 1 3 16 3 2. + <_> + + <_> + 2 0 14 6 -1. + <_> + 2 2 14 2 3. + <_> + + <_> + 0 11 2 9 -1. + <_> + 1 11 1 9 2. + <_> + + <_> + 18 11 1 8 -1. + <_> + 18 11 1 4 2. + 1 + <_> + + <_> + 10 12 3 2 -1. + <_> + 11 12 1 2 3. + <_> + + <_> + 11 13 3 1 -1. + <_> + 12 13 1 1 3. + <_> + + <_> + 15 0 4 8 -1. + <_> + 17 0 2 8 2. + <_> + + <_> + 12 17 4 3 -1. + <_> + 14 17 2 3 2. + <_> + + <_> + 15 17 1 2 -1. + <_> + 15 17 1 1 2. + 1 + <_> + + <_> + 15 16 1 3 -1. + <_> + 14 17 1 1 3. + 1 + <_> + + <_> + 3 0 14 8 -1. + <_> + 3 2 14 4 2. + <_> + + <_> + 18 1 1 2 -1. + <_> + 18 2 1 1 2. + <_> + + <_> + 6 0 8 3 -1. + <_> + 8 0 4 3 2. + <_> + + <_> + 9 4 1 9 -1. + <_> + 9 7 1 3 3. + <_> + + <_> + 6 13 9 2 -1. + <_> + 9 13 3 2 3. + <_> + + <_> + 0 13 5 6 -1. + <_> + 0 16 5 3 2. + <_> + + <_> + 13 12 6 4 -1. + <_> + 15 12 2 4 3. + <_> + + <_> + 4 6 12 2 -1. + <_> + 8 10 4 2 3. + 1 + <_> + + <_> + 19 0 1 8 -1. + <_> + 19 4 1 4 2. + <_> + + <_> + 8 2 12 8 -1. + <_> + 11 2 6 8 2. + <_> + + <_> + 0 12 4 4 -1. + <_> + 2 12 2 4 2. + <_> + + <_> + 7 8 13 9 -1. + <_> + 7 11 13 3 3. + <_> + + <_> + 18 1 2 6 -1. + <_> + 19 1 1 6 2. + <_> + + <_> + 7 4 5 8 -1. + <_> + 7 6 5 4 2. + <_> + + <_> + 11 18 9 2 -1. + <_> + 11 19 9 1 2. + <_> + + <_> + 10 7 2 3 -1. + <_> + 11 7 1 3 2. + <_> + + <_> + 4 18 6 2 -1. + <_> + 6 18 2 2 3. + <_> + + <_> + 6 13 6 7 -1. + <_> + 8 13 2 7 3. + <_> + + <_> + 5 18 6 2 -1. + <_> + 7 18 2 2 3. + <_> + + <_> + 18 5 2 2 -1. + <_> + 18 6 2 1 2. + <_> + + <_> + 6 2 9 4 -1. + <_> + 6 4 9 2 2. + <_> + + <_> + 13 0 7 4 -1. + <_> + 13 0 7 2 2. + 1 + <_> + + <_> + 13 9 3 6 -1. + <_> + 11 11 3 2 3. + 1 + <_> + + <_> + 16 8 4 6 -1. + <_> + 16 11 4 3 2. + <_> + + <_> + 19 2 1 2 -1. + <_> + 19 3 1 1 2. + <_> + + <_> + 19 1 1 3 -1. + <_> + 19 2 1 1 3. + <_> + + <_> + 13 12 2 4 -1. + <_> + 13 12 1 2 2. + <_> + 14 14 1 2 2. + <_> + + <_> + 14 9 3 5 -1. + <_> + 15 10 1 5 3. + 1 + <_> + + <_> + 8 7 8 3 -1. + <_> + 10 9 4 3 2. + 1 + <_> + + <_> + 7 7 9 4 -1. + <_> + 6 8 9 2 2. + 1 + <_> + + <_> + 0 11 2 6 -1. + <_> + 1 11 1 6 2. + <_> + + <_> + 0 13 5 6 -1. + <_> + 0 16 5 3 2. + <_> + + <_> + 16 2 4 6 -1. + <_> + 18 2 2 6 2. + <_> + + <_> + 13 5 6 7 -1. + <_> + 15 7 2 7 3. + 1 + <_> + + <_> + 19 2 1 4 -1. + <_> + 19 4 1 2 2. + <_> + + <_> + 14 1 6 2 -1. + <_> + 16 1 2 2 3. + <_> + + <_> + 14 12 4 5 -1. + <_> + 15 12 2 5 2. + <_> + + <_> + 18 15 2 3 -1. + <_> + 17 16 2 1 3. + 1 + <_> + + <_> + 14 16 3 4 -1. + <_> + 14 18 3 2 2. + <_> + + <_> + 16 16 1 2 -1. + <_> + 16 16 1 1 2. + 1 + <_> + + <_> + 18 0 1 2 -1. + <_> + 18 1 1 1 2. + <_> + + <_> + 9 8 1 6 -1. + <_> + 9 11 1 3 2. + <_> + + <_> + 18 5 2 1 -1. + <_> + 19 5 1 1 2. + <_> + + <_> + 14 3 6 4 -1. + <_> + 16 3 2 4 3. + <_> + + <_> + 8 18 4 2 -1. + <_> + 9 18 2 2 2. + <_> + + <_> + 6 13 9 7 -1. + <_> + 9 13 3 7 3. + <_> + + <_> + 1 16 2 2 -1. + <_> + 1 17 2 1 2. + <_> + + <_> + 0 16 3 4 -1. + <_> + 0 17 3 2 2. + <_> + + <_> + 8 1 4 5 -1. + <_> + 9 1 2 5 2. + <_> + + <_> + 10 1 6 9 -1. + <_> + 12 1 2 9 3. + <_> + + <_> + 10 8 10 4 -1. + <_> + 10 10 10 2 2. + <_> + + <_> + 15 8 5 4 -1. + <_> + 15 10 5 2 2. + <_> + + <_> + 17 1 3 2 -1. + <_> + 18 2 1 2 3. + 1 + <_> + + <_> + 13 11 3 5 -1. + <_> + 14 11 1 5 3. + <_> + + <_> + 8 7 4 3 -1. + <_> + 10 7 2 3 2. + <_> + + <_> + 3 0 8 1 -1. + <_> + 5 0 4 1 2. + <_> + + <_> + 1 13 6 5 -1. + <_> + 3 13 2 5 3. + <_> + + <_> + 13 9 3 5 -1. + <_> + 14 10 1 5 3. + 1 + <_> + + <_> + 11 8 4 6 -1. + <_> + 9 10 4 2 3. + 1 + <_> + + <_> + 11 7 6 6 -1. + <_> + 13 9 2 6 3. + 1 + <_> + + <_> + 7 0 7 6 -1. + <_> + 7 3 7 3 2. + <_> + + <_> + 3 1 10 12 -1. + <_> + 3 5 10 4 3. + <_> + + <_> + 13 12 6 4 -1. + <_> + 15 12 2 4 3. + <_> + + <_> + 0 9 6 9 -1. + <_> + 2 12 2 3 9. + <_> + + <_> + 8 0 12 11 -1. + <_> + 12 0 4 11 3. + <_> + + <_> + 13 11 1 8 -1. + <_> + 13 11 1 4 2. + 1 + <_> + + <_> + 19 4 1 2 -1. + <_> + 19 5 1 1 2. + <_> + + <_> + 2 15 1 2 -1. + <_> + 2 15 1 1 2. + 1 + <_> + + <_> + 17 16 2 2 -1. + <_> + 17 16 2 1 2. + 1 + <_> + + <_> + 16 16 1 3 -1. + <_> + 15 17 1 1 3. + 1 + <_> + + <_> + 5 11 3 2 -1. + <_> + 6 12 1 2 3. + 1 + <_> + + <_> + 4 11 2 2 -1. + <_> + 4 11 1 1 2. + <_> + 5 12 1 1 2. + <_> + + <_> + 17 7 3 2 -1. + <_> + 18 8 1 2 3. + 1 + <_> + + <_> + 16 9 3 8 -1. + <_> + 16 11 3 4 2. + <_> + + <_> + 19 0 1 4 -1. + <_> + 19 2 1 2 2. + <_> + + <_> + 19 0 1 3 -1. + <_> + 19 1 1 1 3. + <_> + + <_> + 9 0 10 3 -1. + <_> + 14 0 5 3 2. + <_> + + <_> + 3 3 15 17 -1. + <_> + 8 3 5 17 3. + <_> + + <_> + 8 0 4 4 -1. + <_> + 9 0 2 4 2. + <_> + + <_> + 1 11 8 1 -1. + <_> + 1 11 4 1 2. + 1 + <_> + + <_> + 4 10 2 4 -1. + <_> + 3 11 2 2 2. + 1 + <_> + + <_> + 4 17 4 3 -1. + <_> + 5 17 2 3 2. + <_> + + <_> + 18 7 2 1 -1. + <_> + 19 7 1 1 2. + <_> + + <_> + 2 7 18 3 -1. + <_> + 11 7 9 3 2. + <_> + + <_> + 4 11 4 2 -1. + <_> + 4 11 2 1 2. + <_> + 6 12 2 1 2. + <_> + + <_> + 4 9 2 4 -1. + <_> + 4 11 2 2 2. + <_> + + <_> + 16 1 3 1 -1. + <_> + 17 2 1 1 3. + 1 + <_> + + <_> + 4 18 1 2 -1. + <_> + 4 19 1 1 2. + <_> + + <_> + 9 18 4 2 -1. + <_> + 10 18 2 2 2. + <_> + + <_> + 12 11 5 4 -1. + <_> + 11 12 5 2 2. + 1 + <_> + + <_> + 18 2 2 1 -1. + <_> + 19 2 1 1 2. + <_> + + <_> + 7 0 6 2 -1. + <_> + 9 0 2 2 3. + <_> + + <_> + 6 13 8 2 -1. + <_> + 8 13 4 2 2. + <_> + + <_> + 14 12 4 4 -1. + <_> + 15 12 2 4 2. + <_> + + <_> + 3 8 17 9 -1. + <_> + 3 11 17 3 3. + <_> + + <_> + 0 12 4 3 -1. + <_> + 2 12 2 3 2. + <_> + + <_> + 8 3 12 6 -1. + <_> + 12 3 4 6 3. + <_> + + <_> + 0 14 3 6 -1. + <_> + 0 17 3 3 2. + <_> + + <_> + 3 0 13 9 -1. + <_> + 3 3 13 3 3. + <_> + + <_> + 8 2 8 6 -1. + <_> + 8 5 8 3 2. + <_> + + <_> + 1 11 18 3 -1. + <_> + 7 11 6 3 3. + <_> + + <_> + 16 17 1 2 -1. + <_> + 16 17 1 1 2. + 1 + <_> + + <_> + 14 12 6 4 -1. + <_> + 16 12 2 4 3. + <_> + + <_> + 13 11 4 5 -1. + <_> + 14 11 2 5 2. + <_> + + <_> + 19 3 1 2 -1. + <_> + 19 4 1 1 2. + <_> + + <_> + 19 0 1 3 -1. + <_> + 19 1 1 1 3. + <_> + + <_> + 7 2 8 4 -1. + <_> + 7 4 8 2 2. + <_> + + <_> + 9 12 3 2 -1. + <_> + 10 12 1 2 3. + <_> + + <_> + 15 8 3 2 -1. + <_> + 16 9 1 2 3. + 1 + <_> + + <_> + 16 15 3 2 -1. + <_> + 16 15 3 1 2. + 1 + <_> + + <_> + 6 12 3 3 -1. + <_> + 7 12 1 3 3. + <_> + + <_> + 13 12 3 1 -1. + <_> + 14 13 1 1 3. + 1 + <_> + + <_> + 4 0 1 3 -1. + <_> + 3 1 1 1 3. + 1 + <_> + + <_> + 8 2 6 4 -1. + <_> + 10 2 2 4 3. + <_> + + <_> + 15 15 2 3 -1. + <_> + 14 16 2 1 3. + 1 + <_> + + <_> + 12 18 8 2 -1. + <_> + 12 19 8 1 2. + <_> + + <_> + 7 12 6 7 -1. + <_> + 9 12 2 7 3. + <_> + + <_> + 4 18 6 2 -1. + <_> + 6 18 2 2 3. + <_> + + <_> + 11 12 3 3 -1. + <_> + 12 12 1 3 3. + <_> + + <_> + 12 12 2 2 -1. + <_> + 13 12 1 2 2. + <_> + + <_> + 18 5 2 1 -1. + <_> + 19 5 1 1 2. + <_> + + <_> + 5 19 4 1 -1. + <_> + 6 19 2 1 2. + <_> + + <_> + 0 11 5 2 -1. + <_> + 0 12 5 1 2. + <_> + + <_> + 18 0 2 2 -1. + <_> + 18 1 2 1 2. + <_> + + <_> + 1 0 12 6 -1. + <_> + 1 2 12 2 3. + <_> + + <_> + 1 1 6 1 -1. + <_> + 3 3 2 1 3. + 1 + <_> + + <_> + 16 9 3 1 -1. + <_> + 17 10 1 1 3. + 1 + <_> + + <_> + 14 10 1 6 -1. + <_> + 12 12 1 2 3. + 1 + <_> + + <_> + 3 1 1 3 -1. + <_> + 2 2 1 1 3. + 1 + <_> + + <_> + 3 0 4 3 -1. + <_> + 2 1 4 1 3. + 1 + <_> + + <_> + 6 14 8 1 -1. + <_> + 8 14 4 1 2. + <_> + + <_> + 1 8 18 9 -1. + <_> + 7 11 6 3 9. + <_> + + <_> + 19 0 1 18 -1. + <_> + 19 6 1 6 3. + <_> + + <_> + 1 13 3 6 -1. + <_> + 1 16 3 3 2. + <_> + + <_> + 6 10 7 3 -1. + <_> + 6 11 7 1 3. + <_> + + <_> + 6 9 7 3 -1. + <_> + 6 10 7 1 3. + <_> + + <_> + 14 1 6 8 -1. + <_> + 17 1 3 8 2. + <_> + + <_> + 9 6 2 4 -1. + <_> + 10 6 1 4 2. + <_> + + <_> + 6 11 7 2 -1. + <_> + 6 12 7 1 2. + <_> + + <_> + 17 11 3 6 -1. + <_> + 18 12 1 6 3. + 1 + <_> + + <_> + 19 17 1 2 -1. + <_> + 19 17 1 1 2. + 1 + <_> + + <_> + 16 9 4 2 -1. + <_> + 17 10 2 2 2. + 1 + <_> + + <_> + 6 18 4 2 -1. + <_> + 7 18 2 2 2. + <_> + + <_> + 2 12 4 4 -1. + <_> + 3 12 2 4 2. + <_> + + <_> + 19 2 1 2 -1. + <_> + 19 3 1 1 2. + <_> + + <_> + 19 2 1 3 -1. + <_> + 19 3 1 1 3. + <_> + + <_> + 1 12 12 3 -1. + <_> + 7 12 6 3 2. + <_> + + <_> + 6 18 4 1 -1. + <_> + 7 18 2 1 2. + <_> + + <_> + 5 2 12 6 -1. + <_> + 5 5 12 3 2. + <_> + + <_> + 9 1 6 6 -1. + <_> + 9 4 6 3 2. + <_> + + <_> + 7 0 11 9 -1. + <_> + 7 3 11 3 3. + <_> + + <_> + 2 0 8 9 -1. + <_> + 2 3 8 3 3. + <_> + + <_> + 5 3 4 3 -1. + <_> + 6 3 2 3 2. + <_> + + <_> + 0 18 3 2 -1. + <_> + 0 19 3 1 2. + <_> + + <_> + 1 0 10 19 -1. + <_> + 6 0 5 19 2. + <_> + + <_> + 3 8 2 3 -1. + <_> + 2 9 2 1 3. + 1 + <_> + + <_> + 10 17 4 3 -1. + <_> + 11 17 2 3 2. + <_> + + <_> + 11 13 3 2 -1. + <_> + 12 13 1 2 3. + <_> + + <_> + 10 12 3 2 -1. + <_> + 11 12 1 2 3. + <_> + + <_> + 9 11 3 3 -1. + <_> + 10 11 1 3 3. + <_> + + <_> + 17 2 3 1 -1. + <_> + 18 3 1 1 3. + 1 + <_> + + <_> + 12 0 6 13 -1. + <_> + 14 0 2 13 3. + <_> + + <_> + 16 0 3 1 -1. + <_> + 17 1 1 1 3. + 1 + <_> + + <_> + 5 11 1 2 -1. + <_> + 5 12 1 1 2. + <_> + + <_> + 2 11 4 2 -1. + <_> + 2 11 2 1 2. + <_> + 4 12 2 1 2. + <_> + + <_> + 16 15 2 3 -1. + <_> + 15 16 2 1 3. + 1 + <_> + + <_> + 8 17 4 2 -1. + <_> + 9 17 2 2 2. + <_> + + <_> + 0 16 4 3 -1. + <_> + 0 17 4 1 3. + <_> + + <_> + 9 13 6 2 -1. + <_> + 12 13 3 2 2. + <_> + + <_> + 2 14 1 2 -1. + <_> + 2 14 1 1 2. + 1 + <_> + + <_> + 5 10 8 3 -1. + <_> + 5 11 8 1 3. + <_> + + <_> + 15 0 3 8 -1. + <_> + 13 2 3 4 2. + 1 + <_> + + <_> + 14 11 4 7 -1. + <_> + 15 11 2 7 2. + <_> + + <_> + 3 11 15 4 -1. + <_> + 8 11 5 4 3. + <_> + + <_> + 9 1 9 9 -1. + <_> + 12 1 3 9 3. + <_> + + <_> + 0 11 4 7 -1. + <_> + 2 11 2 7 2. + <_> + + <_> + 0 16 1 4 -1. + <_> + 0 18 1 2 2. + <_> + + <_> + 19 0 1 6 -1. + <_> + 19 3 1 3 2. + <_> + + <_> + 11 8 9 9 -1. + <_> + 11 11 9 3 3. + <_> + + <_> + 9 17 8 3 -1. + <_> + 11 17 4 3 2. + <_> + + <_> + 18 4 2 2 -1. + <_> + 19 4 1 2 2. + <_> + + <_> + 8 11 3 3 -1. + <_> + 9 12 1 1 9. + <_> + + <_> + 13 2 3 4 -1. + <_> + 13 2 3 2 2. + 1 + <_> + + <_> + 4 6 16 3 -1. + <_> + 12 6 8 3 2. + <_> + + <_> + 10 12 1 3 -1. + <_> + 9 13 1 1 3. + 1 + <_> + + <_> + 8 12 3 3 -1. + <_> + 9 13 1 1 9. + <_> + + <_> + 17 17 1 2 -1. + <_> + 17 17 1 1 2. + 1 + <_> + + <_> + 16 16 2 2 -1. + <_> + 16 16 2 1 2. + 1 + <_> + + <_> + 6 0 9 6 -1. + <_> + 6 2 9 2 3. + <_> + + <_> + 5 0 10 8 -1. + <_> + 5 2 10 4 2. + <_> + + <_> + 17 5 2 1 -1. + <_> + 18 5 1 1 2. + <_> + + <_> + 11 0 9 9 -1. + <_> + 14 0 3 9 3. + <_> + + <_> + 6 9 7 3 -1. + <_> + 6 10 7 1 3. + <_> + + <_> + 3 12 6 2 -1. + <_> + 3 12 3 1 2. + <_> + 6 13 3 1 2. + <_> + + <_> + 2 10 1 2 -1. + <_> + 2 10 1 1 2. + 1 + <_> + + <_> + 13 15 2 3 -1. + <_> + 12 16 2 1 3. + 1 + <_> + + <_> + 7 2 6 5 -1. + <_> + 9 2 2 5 3. + <_> + + <_> + 13 13 6 3 -1. + <_> + 15 13 2 3 3. + <_> + + <_> + 17 9 3 8 -1. + <_> + 17 11 3 4 2. + <_> + + <_> + 8 3 4 3 -1. + <_> + 9 3 2 3 2. + <_> + + <_> + 15 6 2 12 -1. + <_> + 15 6 1 12 2. + 1 + <_> + + <_> + 11 14 4 2 -1. + <_> + 11 14 4 1 2. + 1 + <_> + + <_> + 9 2 5 4 -1. + <_> + 9 4 5 2 2. + <_> + + <_> + 13 12 3 3 -1. + <_> + 14 12 1 3 3. + <_> + + <_> + 18 1 2 3 -1. + <_> + 18 2 2 1 3. + <_> + + <_> + 5 13 4 1 -1. + <_> + 6 13 2 1 2. + <_> + + <_> + 5 10 2 2 -1. + <_> + 5 10 2 1 2. + 1 + <_> + + <_> + 2 11 1 2 -1. + <_> + 2 11 1 1 2. + 1 + <_> + + <_> + 18 3 2 6 -1. + <_> + 18 5 2 2 3. + <_> + + <_> + 10 4 6 2 -1. + <_> + 10 5 6 1 2. + <_> + + <_> + 11 13 6 2 -1. + <_> + 13 13 2 2 3. + <_> + + <_> + 9 11 3 4 -1. + <_> + 9 11 3 2 2. + 1 + <_> + + <_> + 0 11 2 5 -1. + <_> + 1 11 1 5 2. + <_> + + <_> + 0 8 20 9 -1. + <_> + 0 11 20 3 3. + <_> + + <_> + 18 0 1 6 -1. + <_> + 18 3 1 3 2. + <_> + + <_> + 14 1 6 7 -1. + <_> + 17 1 3 7 2. + <_> + + <_> + 4 13 2 4 -1. + <_> + 4 13 1 2 2. + <_> + 5 15 1 2 2. + <_> + + <_> + 1 9 18 6 -1. + <_> + 7 9 6 6 3. + <_> + + <_> + 0 16 5 4 -1. + <_> + 0 18 5 2 2. + <_> + + <_> + 8 14 3 4 -1. + <_> + 8 15 3 2 2. + <_> + + <_> + 7 7 8 3 -1. + <_> + 11 7 4 3 2. + <_> + + <_> + 12 3 4 7 -1. + <_> + 13 3 2 7 2. + <_> + + <_> + 13 12 2 8 -1. + <_> + 13 12 1 4 2. + <_> + 14 16 1 4 2. + <_> + + <_> + 13 10 3 5 -1. + <_> + 14 11 1 5 3. + 1 + <_> + + <_> + 10 5 4 5 -1. + <_> + 11 5 2 5 2. + <_> + + <_> + 2 11 18 2 -1. + <_> + 8 11 6 2 3. + <_> + + <_> + 2 0 1 2 -1. + <_> + 2 0 1 1 2. + 1 + <_> + + <_> + 2 0 1 2 -1. + <_> + 2 0 1 1 2. + 1 + <_> + + <_> + 15 17 1 2 -1. + <_> + 15 17 1 1 2. + 1 + <_> + + <_> + 17 16 1 3 -1. + <_> + 16 17 1 1 3. + 1 + <_> + + <_> + 18 0 2 10 -1. + <_> + 19 0 1 10 2. + <_> + + <_> + 14 2 6 7 -1. + <_> + 16 2 2 7 3. + <_> + + <_> + 12 0 4 4 -1. + <_> + 12 0 4 2 2. + 1 + <_> + + <_> + 0 3 15 6 -1. + <_> + 0 5 15 2 3. + <_> + + <_> + 5 1 4 4 -1. + <_> + 6 1 2 4 2. + <_> + + <_> + 7 13 6 7 -1. + <_> + 9 13 2 7 3. + <_> + + <_> + 6 18 6 2 -1. + <_> + 8 18 2 2 3. + <_> + + <_> + 0 15 5 2 -1. + <_> + 0 16 5 1 2. + <_> + + <_> + 4 1 12 6 -1. + <_> + 4 3 12 2 3. + <_> + + <_> + 5 0 13 8 -1. + <_> + 5 2 13 4 2. + <_> + + <_> + 13 10 6 6 -1. + <_> + 15 12 2 2 9. + <_> + + <_> + 15 9 3 1 -1. + <_> + 16 10 1 1 3. + 1 + <_> + + <_> + 5 11 3 3 -1. + <_> + 6 12 1 1 9. + <_> + + <_> + 6 11 2 2 -1. + <_> + 6 11 1 1 2. + <_> + 7 12 1 1 2. + <_> + + <_> + 17 3 3 2 -1. + <_> + 18 4 1 2 3. + 1 + <_> + + <_> + 16 3 3 3 -1. + <_> + 17 4 1 3 3. + 1 + <_> + + <_> + 12 13 3 1 -1. + <_> + 13 13 1 1 3. + <_> + + <_> + 11 12 3 2 -1. + <_> + 12 12 1 2 3. + <_> + + <_> + 10 0 1 2 -1. + <_> + 10 0 1 1 2. + 1 + <_> + + <_> + 17 13 1 6 -1. + <_> + 17 13 1 3 2. + 1 + <_> + + <_> + 16 14 2 4 -1. + <_> + 16 14 2 2 2. + 1 + <_> + + <_> + 3 0 4 3 -1. + <_> + 4 0 2 3 2. + <_> + + <_> + 6 0 14 1 -1. + <_> + 13 0 7 1 2. + <_> + + <_> + 2 15 18 5 -1. + <_> + 8 15 6 5 3. + <_> + + <_> + 6 11 8 5 -1. + <_> + 8 11 4 5 2. + <_> + + <_> + 0 8 5 12 -1. + <_> + 0 11 5 6 2. + <_> + + <_> + 14 0 6 2 -1. + <_> + 14 0 6 1 2. + 1 + <_> + + <_> + 13 8 4 5 -1. + <_> + 14 9 2 5 2. + 1 + <_> + + <_> + 0 11 4 9 -1. + <_> + 2 11 2 9 2. + <_> + + <_> + 6 9 2 6 -1. + <_> + 6 11 2 2 3. + <_> + + <_> + 12 18 4 2 -1. + <_> + 12 19 4 1 2. + <_> + + <_> + 14 13 6 2 -1. + <_> + 16 13 2 2 3. + <_> + + <_> + 19 9 1 10 -1. + <_> + 19 9 1 5 2. + 1 + <_> + + <_> + 11 5 4 4 -1. + <_> + 12 5 2 4 2. + <_> + + <_> + 14 12 3 5 -1. + <_> + 15 12 1 5 3. + <_> + + <_> + 17 0 2 6 -1. + <_> + 18 0 1 6 2. + <_> + + <_> + 13 16 3 3 -1. + <_> + 14 16 1 3 3. + <_> + + <_> + 19 0 1 4 -1. + <_> + 19 2 1 2 2. + <_> + + <_> + 6 13 4 2 -1. + <_> + 7 13 2 2 2. + <_> + + <_> + 9 11 3 3 -1. + <_> + 10 11 1 3 3. + <_> + + <_> + 14 15 2 3 -1. + <_> + 13 16 2 1 3. + 1 + <_> + + <_> + 11 7 3 4 -1. + <_> + 12 7 1 4 3. + <_> + + <_> + 5 12 1 3 -1. + <_> + 4 13 1 1 3. + 1 + <_> + + <_> + 1 11 6 2 -1. + <_> + 1 11 3 1 2. + <_> + 4 12 3 1 2. + <_> + + <_> + 5 7 2 3 -1. + <_> + 4 8 2 1 3. + 1 + <_> + + <_> + 5 12 2 2 -1. + <_> + 5 12 1 1 2. + <_> + 6 13 1 1 2. + <_> + + <_> + 8 8 4 3 -1. + <_> + 8 9 4 1 3. + <_> + + <_> + 7 8 5 3 -1. + <_> + 7 9 5 1 3. + <_> + + <_> + 6 19 4 1 -1. + <_> + 7 19 2 1 2. + <_> + + <_> + 5 0 4 4 -1. + <_> + 6 0 2 4 2. + <_> + + <_> + 4 0 16 8 -1. + <_> + 8 0 8 8 2. + <_> + + <_> + 12 11 3 4 -1. + <_> + 11 12 3 2 2. + 1 + <_> + + <_> + 0 4 20 6 -1. + <_> + 5 4 10 6 2. + <_> + + <_> + 13 2 2 4 -1. + <_> + 13 2 2 2 2. + 1 + <_> + + <_> + 0 5 14 15 -1. + <_> + 7 5 7 15 2. + <_> + + <_> + 1 18 3 2 -1. + <_> + 1 19 3 1 2. + <_> + + <_> + 3 6 3 3 -1. + <_> + 2 7 3 1 3. + 1 + <_> + + <_> + 0 1 6 8 -1. + <_> + 0 1 3 4 2. + <_> + 3 5 3 4 2. + <_> + + <_> + 5 0 6 6 -1. + <_> + 7 0 2 6 3. + <_> + + <_> + 1 1 15 8 -1. + <_> + 1 3 15 4 2. + <_> + + <_> + 0 0 16 1 -1. + <_> + 8 0 8 1 2. + <_> + + <_> + 3 0 1 2 -1. + <_> + 3 0 1 1 2. + 1 + <_> + + <_> + 3 13 4 1 -1. + <_> + 4 13 2 1 2. + <_> + + <_> + 4 11 2 2 -1. + <_> + 4 11 1 1 2. + <_> + 5 12 1 1 2. + <_> + + <_> + 17 2 3 3 -1. + <_> + 18 3 1 1 9. + <_> + + <_> + 16 3 2 1 -1. + <_> + 17 3 1 1 2. + <_> + + <_> + 0 11 3 2 -1. + <_> + 0 12 3 1 2. + <_> + + <_> + 4 11 4 2 -1. + <_> + 4 11 2 1 2. + <_> + 6 12 2 1 2. + <_> + + <_> + 10 0 4 11 -1. + <_> + 11 0 2 11 2. + <_> + + <_> + 18 15 2 3 -1. + <_> + 17 16 2 1 3. + 1 + <_> + + <_> + 2 11 8 1 -1. + <_> + 2 11 4 1 2. + 1 + <_> + + <_> + 17 13 1 6 -1. + <_> + 17 13 1 3 2. + 1 + <_> + + <_> + 11 13 6 2 -1. + <_> + 13 13 2 2 3. + <_> + + <_> + 19 0 1 10 -1. + <_> + 19 5 1 5 2. + <_> + + <_> + 2 8 7 9 -1. + <_> + 2 11 7 3 3. + <_> + + <_> + 0 11 20 2 -1. + <_> + 5 11 10 2 2. + <_> + + <_> + 6 14 6 1 -1. + <_> + 8 14 2 1 3. + <_> + + <_> + 10 3 8 7 -1. + <_> + 12 3 4 7 2. + <_> + + <_> + 7 0 5 9 -1. + <_> + 7 3 5 3 3. + <_> + + <_> + 0 0 16 6 -1. + <_> + 0 2 16 2 3. + <_> + + <_> + 6 10 2 6 -1. + <_> + 4 12 2 2 3. + 1 + <_> + + <_> + 16 0 4 14 -1. + <_> + 18 0 2 14 2. + <_> + + <_> + 6 0 9 6 -1. + <_> + 6 2 9 2 3. + <_> + + <_> + 8 18 12 2 -1. + <_> + 8 19 12 1 2. + <_> + + <_> + 10 17 4 3 -1. + <_> + 11 17 2 3 2. + <_> + + <_> + 5 0 1 4 -1. + <_> + 4 1 1 2 2. + 1 + <_> + + <_> + 18 6 2 2 -1. + <_> + 18 6 1 2 2. + 1 + <_> + + <_> + 12 10 3 4 -1. + <_> + 11 11 3 2 2. + 1 + <_> + + <_> + 9 9 4 3 -1. + <_> + 9 10 4 1 3. + <_> + + <_> + 9 10 4 3 -1. + <_> + 9 11 4 1 3. + <_> + + <_> + 17 4 3 4 -1. + <_> + 18 5 1 4 3. + 1 + <_> + + <_> + 18 0 2 3 -1. + <_> + 18 1 2 1 3. + <_> + + <_> + 18 1 2 2 -1. + <_> + 18 2 2 1 2. + <_> + + <_> + 19 1 1 3 -1. + <_> + 19 2 1 1 3. + <_> + + <_> + 8 18 4 2 -1. + <_> + 9 18 2 2 2. + <_> + + <_> + 2 13 4 2 -1. + <_> + 2 13 2 1 2. + <_> + 4 14 2 1 2. + <_> + + <_> + 3 11 4 2 -1. + <_> + 3 11 2 1 2. + <_> + 5 12 2 1 2. + <_> + + <_> + 2 10 4 2 -1. + <_> + 2 10 2 1 2. + <_> + 4 11 2 1 2. + <_> + + <_> + 5 9 2 3 -1. + <_> + 4 10 2 1 3. + 1 + <_> + + <_> + 2 10 4 6 -1. + <_> + 3 10 2 6 2. + <_> + + <_> + 13 0 6 8 -1. + <_> + 16 0 3 8 2. + <_> + + <_> + 10 0 8 9 -1. + <_> + 12 0 4 9 2. + <_> + + <_> + 1 11 8 1 -1. + <_> + 1 11 4 1 2. + 1 + <_> + + <_> + 3 0 1 3 -1. + <_> + 2 1 1 1 3. + 1 + <_> + + <_> + 13 13 2 2 -1. + <_> + 14 13 1 2 2. + <_> + + <_> + 4 12 3 4 -1. + <_> + 5 12 1 4 3. + <_> + + <_> + 6 17 4 3 -1. + <_> + 7 17 2 3 2. + <_> + + <_> + 14 1 2 6 -1. + <_> + 14 1 2 3 2. + 1 + <_> + + <_> + 8 4 8 4 -1. + <_> + 8 6 8 2 2. + <_> + + <_> + 8 3 4 5 -1. + <_> + 10 3 2 5 2. + <_> + + <_> + 13 12 2 2 -1. + <_> + 13 12 1 1 2. + <_> + 14 13 1 1 2. + <_> + + <_> + 6 12 3 3 -1. + <_> + 7 12 1 3 3. + <_> + + <_> + 5 7 3 3 -1. + <_> + 4 8 3 1 3. + 1 + <_> + + <_> + 15 10 5 4 -1. + <_> + 15 11 5 2 2. + <_> + + <_> + 14 8 4 9 -1. + <_> + 14 11 4 3 3. + <_> + + <_> + 16 9 4 3 -1. + <_> + 16 10 4 1 3. + <_> + + <_> + 18 7 2 13 -1. + <_> + 19 7 1 13 2. + <_> + + <_> + 0 0 16 1 -1. + <_> + 8 0 8 1 2. + <_> + + <_> + 12 11 5 4 -1. + <_> + 11 12 5 2 2. + 1 + <_> + + <_> + 17 13 2 4 -1. + <_> + 18 13 1 4 2. + <_> + + <_> + 6 13 9 2 -1. + <_> + 9 13 3 2 3. + <_> + + <_> + 3 8 6 8 -1. + <_> + 3 10 6 4 2. + <_> + + <_> + 14 12 4 3 -1. + <_> + 15 12 2 3 2. + <_> + + <_> + 12 6 6 4 -1. + <_> + 14 8 2 4 3. + 1 + <_> + + <_> + 4 0 12 6 -1. + <_> + 4 3 12 3 2. + <_> + + <_> + 0 0 17 2 -1. + <_> + 0 1 17 1 2. + <_> + + <_> + 2 14 1 6 -1. + <_> + 2 17 1 3 2. + <_> + + <_> + 3 10 3 3 -1. + <_> + 2 11 3 1 3. + 1 + <_> + + <_> + 18 2 2 9 -1. + <_> + 19 2 1 9 2. + <_> + + <_> + 7 9 13 8 -1. + <_> + 7 11 13 4 2. + <_> + + <_> + 17 6 3 4 -1. + <_> + 18 7 1 4 3. + 1 + <_> + + <_> + 6 13 2 2 -1. + <_> + 7 13 1 2 2. + <_> + + <_> + 15 16 1 3 -1. + <_> + 14 17 1 1 3. + 1 + <_> + + <_> + 11 16 6 4 -1. + <_> + 11 16 3 2 2. + <_> + 14 18 3 2 2. + <_> + + <_> + 19 0 1 4 -1. + <_> + 19 1 1 2 2. + <_> + + <_> + 19 0 1 2 -1. + <_> + 19 1 1 1 2. + <_> + + <_> + 12 3 3 6 -1. + <_> + 13 3 1 6 3. + <_> + + <_> + 8 10 4 3 -1. + <_> + 8 11 4 1 3. + <_> + + <_> + 19 0 1 8 -1. + <_> + 19 4 1 4 2. + <_> + + <_> + 14 0 6 6 -1. + <_> + 14 0 3 3 2. + <_> + 17 3 3 3 2. + <_> + + <_> + 8 11 3 3 -1. + <_> + 9 12 1 1 9. + <_> + + <_> + 1 6 10 12 -1. + <_> + 6 6 5 12 2. + <_> + + <_> + 10 6 2 1 -1. + <_> + 11 6 1 1 2. + <_> + + <_> + 8 1 7 10 -1. + <_> + 8 6 7 5 2. + <_> + + <_> + 13 11 3 3 -1. + <_> + 14 12 1 3 3. + 1 + <_> + + <_> + 10 13 4 4 -1. + <_> + 10 13 2 2 2. + <_> + 12 15 2 2 2. + <_> + + <_> + 15 15 2 3 -1. + <_> + 14 16 2 1 3. + 1 + <_> + + <_> + 13 13 3 1 -1. + <_> + 14 13 1 1 3. + <_> + + <_> + 10 4 6 3 -1. + <_> + 12 4 2 3 3. + <_> + + <_> + 1 7 6 4 -1. + <_> + 1 7 3 2 2. + <_> + 4 9 3 2 2. + <_> + + <_> + 15 7 4 2 -1. + <_> + 16 8 2 2 2. + 1 + <_> + + <_> + 10 4 9 6 -1. + <_> + 13 4 3 6 3. + <_> + + <_> + 14 2 6 2 -1. + <_> + 14 2 6 1 2. + 1 + <_> + + <_> + 5 18 4 2 -1. + <_> + 6 18 2 2 2. + <_> + + <_> + 0 12 2 8 -1. + <_> + 1 12 1 8 2. + <_> + + <_> + 1 19 18 1 -1. + <_> + 10 19 9 1 2. + <_> + + <_> + 2 0 12 20 -1. + <_> + 8 0 6 20 2. + <_> + + <_> + 2 0 14 1 -1. + <_> + 9 0 7 1 2. + <_> + + <_> + 7 9 8 3 -1. + <_> + 7 10 8 1 3. + <_> + + <_> + 3 11 2 2 -1. + <_> + 3 11 1 1 2. + <_> + 4 12 1 1 2. + <_> + + <_> + 11 0 9 2 -1. + <_> + 14 0 3 2 3. + <_> + + <_> + 6 0 9 1 -1. + <_> + 9 0 3 1 3. + <_> + + <_> + 4 8 1 4 -1. + <_> + 3 9 1 2 2. + 1 + <_> + + <_> + 0 9 3 3 -1. + <_> + 0 10 3 1 3. + <_> + + <_> + 3 4 15 12 -1. + <_> + 8 8 5 4 9. + <_> + + <_> + 7 13 6 6 -1. + <_> + 9 13 2 6 3. + <_> + + <_> + 2 1 12 6 -1. + <_> + 2 3 12 2 3. + <_> + + <_> + 1 1 6 1 -1. + <_> + 3 3 2 1 3. + 1 + <_> + + <_> + 3 4 5 3 -1. + <_> + 2 5 5 1 3. + 1 + <_> + + <_> + 2 12 2 2 -1. + <_> + 2 12 1 1 2. + <_> + 3 13 1 1 2. + <_> + + <_> + 8 11 3 3 -1. + <_> + 9 11 1 3 3. + <_> + + <_> + 9 11 3 4 -1. + <_> + 10 11 1 4 3. + <_> + + <_> + 17 2 3 1 -1. + <_> + 18 3 1 1 3. + 1 + <_> + + <_> + 5 11 6 3 -1. + <_> + 8 11 3 3 2. + <_> + + <_> + 2 12 12 8 -1. + <_> + 2 12 6 4 2. + <_> + 8 16 6 4 2. + <_> + + <_> + 13 15 2 3 -1. + <_> + 12 16 2 1 3. + 1 + <_> + + <_> + 5 14 9 1 -1. + <_> + 8 14 3 1 3. + <_> + + <_> + 13 13 4 6 -1. + <_> + 13 13 2 3 2. + <_> + 15 16 2 3 2. + <_> + + <_> + 8 7 9 1 -1. + <_> + 11 10 3 1 3. + 1 + <_> + + <_> + 16 0 4 4 -1. + <_> + 16 0 4 2 2. + 1 + <_> + + <_> + 2 13 2 2 -1. + <_> + 2 13 2 1 2. + 1 + <_> + + <_> + 5 12 2 2 -1. + <_> + 5 13 2 1 2. + <_> + + <_> + 0 16 2 4 -1. + <_> + 0 18 2 2 2. + <_> + + <_> + 0 8 14 11 -1. + <_> + 7 8 7 11 2. + <_> + + <_> + 4 17 4 3 -1. + <_> + 5 17 2 3 2. + <_> + + <_> + 3 12 3 5 -1. + <_> + 4 12 1 5 3. + <_> + + <_> + 5 11 1 3 -1. + <_> + 5 12 1 1 3. + <_> + + <_> + 4 10 4 2 -1. + <_> + 4 10 2 1 2. + <_> + 6 11 2 1 2. + <_> + + <_> + 15 9 3 1 -1. + <_> + 16 10 1 1 3. + 1 + <_> + + <_> + 3 0 16 7 -1. + <_> + 7 0 8 7 2. + <_> + + <_> + 2 2 17 6 -1. + <_> + 2 5 17 3 2. + <_> + + <_> + 2 4 14 6 -1. + <_> + 2 6 14 2 3. + <_> + + <_> + 2 9 6 2 -1. + <_> + 2 9 3 1 2. + <_> + 5 10 3 1 2. + <_> + + <_> + 3 11 4 2 -1. + <_> + 3 11 2 1 2. + <_> + 5 12 2 1 2. + <_> + + <_> + 16 13 4 2 -1. + <_> + 18 13 2 2 2. + <_> + + <_> + 15 7 3 2 -1. + <_> + 16 8 1 2 3. + 1 + <_> + + <_> + 0 11 4 2 -1. + <_> + 0 12 4 1 2. + <_> + + <_> + 4 9 2 3 -1. + <_> + 3 10 2 1 3. + 1 + <_> + + <_> + 3 18 6 2 -1. + <_> + 5 18 2 2 3. + <_> + + <_> + 11 12 3 2 -1. + <_> + 12 12 1 2 3. + <_> + + <_> + 19 0 1 2 -1. + <_> + 19 1 1 1 2. + <_> + + <_> + 0 0 14 1 -1. + <_> + 7 0 7 1 2. + <_> + + <_> + 11 10 3 4 -1. + <_> + 10 11 3 2 2. + 1 + <_> + + <_> + 14 16 1 3 -1. + <_> + 13 17 1 1 3. + 1 + <_> + + <_> + 18 1 2 4 -1. + <_> + 19 1 1 4 2. + <_> + + <_> + 15 13 5 6 -1. + <_> + 15 15 5 2 3. + <_> + + <_> + 16 4 3 3 -1. + <_> + 17 5 1 3 3. + 1 + <_> + + <_> + 4 6 16 14 -1. + <_> + 12 6 8 14 2. + <_> + + <_> + 10 12 3 1 -1. + <_> + 11 12 1 1 3. + <_> + + <_> + 5 12 2 2 -1. + <_> + 5 12 1 1 2. + <_> + 6 13 1 1 2. + <_> + + <_> + 9 3 4 5 -1. + <_> + 10 3 2 5 2. + <_> + + <_> + 18 1 2 3 -1. + <_> + 18 2 2 1 3. + <_> + + <_> + 19 17 1 2 -1. + <_> + 19 17 1 1 2. + 1 + <_> + + <_> + 17 16 2 2 -1. + <_> + 17 16 2 1 2. + 1 + <_> + + <_> + 10 2 7 6 -1. + <_> + 10 4 7 2 3. + <_> + + <_> + 2 0 13 4 -1. + <_> + 2 1 13 2 2. + <_> + + <_> + 2 0 2 2 -1. + <_> + 2 0 1 2 2. + 1 + <_> + + <_> + 0 3 6 8 -1. + <_> + 3 3 3 8 2. + <_> + + <_> + 3 0 1 3 -1. + <_> + 2 1 1 1 3. + 1 + <_> + + <_> + 8 0 6 9 -1. + <_> + 10 0 2 9 3. + <_> + + <_> + 17 9 3 2 -1. + <_> + 18 10 1 2 3. + 1 + <_> + + <_> + 16 8 4 6 -1. + <_> + 16 10 4 2 3. + <_> + + <_> + 6 9 7 3 -1. + <_> + 6 10 7 1 3. + <_> + + <_> + 2 10 3 4 -1. + <_> + 2 11 3 2 2. + <_> + + <_> + 15 8 1 6 -1. + <_> + 15 8 1 3 2. + 1 + <_> + + <_> + 19 3 1 12 -1. + <_> + 19 7 1 4 3. + <_> + + <_> + 2 0 5 2 -1. + <_> + 2 0 5 1 2. + 1 + <_> + + <_> + 1 3 11 6 -1. + <_> + 1 5 11 2 3. + <_> + + <_> + 14 13 2 4 -1. + <_> + 14 13 1 2 2. + <_> + 15 15 1 2 2. + <_> + + <_> + 8 11 10 3 -1. + <_> + 13 11 5 3 2. + <_> + + <_> + 6 11 1 4 -1. + <_> + 6 13 1 2 2. + <_> + + <_> + 2 9 3 9 -1. + <_> + 3 12 1 3 9. + <_> + + <_> + 4 0 15 9 -1. + <_> + 9 3 5 3 9. + <_> + + <_> + 12 0 6 4 -1. + <_> + 12 0 6 2 2. + 1 + <_> + + <_> + 10 5 4 5 -1. + <_> + 12 5 2 5 2. + <_> + + <_> + 1 7 18 12 -1. + <_> + 7 11 6 4 9. + <_> + + <_> + 14 12 6 4 -1. + <_> + 16 12 2 4 3. + <_> + + <_> + 13 12 3 3 -1. + <_> + 14 12 1 3 3. + <_> + + <_> + 14 9 4 1 -1. + <_> + 15 10 2 1 2. + 1 + <_> + + <_> + 17 7 3 2 -1. + <_> + 18 8 1 2 3. + 1 + <_> + + <_> + 19 3 1 2 -1. + <_> + 19 4 1 1 2. + <_> + + <_> + 19 1 1 4 -1. + <_> + 19 2 1 2 2. + <_> + + <_> + 3 2 12 8 -1. + <_> + 3 4 12 4 2. + <_> + + <_> + 1 0 16 6 -1. + <_> + 1 2 16 2 3. + <_> + + <_> + 16 8 3 1 -1. + <_> + 17 9 1 1 3. + 1 + <_> + + <_> + 7 13 6 3 -1. + <_> + 9 14 2 1 9. + <_> + + <_> + 11 18 6 2 -1. + <_> + 11 19 6 1 2. + <_> + + <_> + 15 17 5 3 -1. + <_> + 15 18 5 1 3. + <_> + + <_> + 2 1 18 4 -1. + <_> + 8 1 6 4 3. + <_> + + <_> + 5 0 1 2 -1. + <_> + 5 1 1 1 2. + <_> + + <_> + 1 11 6 6 -1. + <_> + 3 13 2 2 9. + <_> + + <_> + 3 12 4 2 -1. + <_> + 3 12 2 1 2. + <_> + 5 13 2 1 2. + <_> + + <_> + 3 0 3 3 -1. + <_> + 2 1 3 1 3. + 1 + <_> + + <_> + 8 10 3 3 -1. + <_> + 9 11 1 1 9. + <_> + + <_> + 0 16 2 2 -1. + <_> + 0 17 2 1 2. + <_> + + <_> + 0 16 4 3 -1. + <_> + 0 17 4 1 3. + <_> + + <_> + 0 13 12 1 -1. + <_> + 6 13 6 1 2. + <_> + + <_> + 13 2 6 9 -1. + <_> + 15 2 2 9 3. + <_> + + <_> + 8 11 3 3 -1. + <_> + 9 11 1 3 3. + <_> + + <_> + 9 11 3 4 -1. + <_> + 10 11 1 4 3. + <_> + + <_> + 13 0 6 10 -1. + <_> + 15 0 2 10 3. + <_> + + <_> + 4 10 1 4 -1. + <_> + 3 11 1 2 2. + 1 + <_> + + <_> + 9 11 3 3 -1. + <_> + 10 12 1 1 9. + <_> + + <_> + 6 12 3 3 -1. + <_> + 5 13 3 1 3. + 1 + <_> + + <_> + 17 6 2 1 -1. + <_> + 18 6 1 1 2. + <_> + + <_> + 16 2 1 4 -1. + <_> + 16 2 1 2 2. + 1 + <_> + + <_> + 2 5 13 4 -1. + <_> + 2 6 13 2 2. + <_> + + <_> + 14 4 6 2 -1. + <_> + 14 4 6 1 2. + 1 + <_> + + <_> + 3 8 1 3 -1. + <_> + 2 9 1 1 3. + 1 + <_> + + <_> + 7 7 8 3 -1. + <_> + 7 8 8 1 3. + <_> + + <_> + 8 8 4 3 -1. + <_> + 10 8 2 3 2. + <_> + + <_> + 10 11 3 8 -1. + <_> + 10 15 3 4 2. + <_> + + <_> + 13 15 2 3 -1. + <_> + 12 16 2 1 3. + 1 + <_> + + <_> + 0 0 12 20 -1. + <_> + 6 0 6 20 2. + <_> + + <_> + 0 0 10 1 -1. + <_> + 5 0 5 1 2. + <_> + + <_> + 0 0 6 3 -1. + <_> + 0 1 6 1 3. + <_> + + <_> + 14 13 2 2 -1. + <_> + 14 13 1 1 2. + <_> + 15 14 1 1 2. + <_> + + <_> + 12 10 4 2 -1. + <_> + 12 10 2 1 2. + <_> + 14 11 2 1 2. + <_> + + <_> + 7 0 6 4 -1. + <_> + 9 0 2 4 3. + <_> + + <_> + 0 0 10 10 -1. + <_> + 0 0 5 5 2. + <_> + 5 5 5 5 2. + <_> + + <_> + 6 3 4 2 -1. + <_> + 7 3 2 2 2. + <_> + + <_> + 1 5 4 11 -1. + <_> + 2 5 2 11 2. + <_> + + <_> + 12 8 3 1 -1. + <_> + 13 8 1 1 3. + <_> + + <_> + 2 2 6 2 -1. + <_> + 2 2 6 1 2. + 1 + <_> + + <_> + 13 5 7 3 -1. + <_> + 12 6 7 1 3. + 1 + <_> + + <_> + 13 7 3 4 -1. + <_> + 14 7 1 4 3. + <_> + + <_> + 8 12 3 2 -1. + <_> + 8 12 3 1 2. + 1 + <_> + + <_> + 0 10 4 8 -1. + <_> + 0 12 4 4 2. + <_> + + <_> + 14 13 2 6 -1. + <_> + 14 13 1 3 2. + <_> + 15 16 1 3 2. + <_> + + <_> + 16 17 1 2 -1. + <_> + 16 17 1 1 2. + 1 + <_> + + <_> + 12 0 3 6 -1. + <_> + 10 2 3 2 3. + 1 + <_> + + <_> + 4 10 14 3 -1. + <_> + 4 11 14 1 3. + <_> + + <_> + 19 4 1 12 -1. + <_> + 19 8 1 4 3. + <_> + + <_> + 19 2 1 6 -1. + <_> + 19 4 1 2 3. + <_> + + <_> + 8 12 12 3 -1. + <_> + 14 12 6 3 2. + <_> + + <_> + 0 13 2 3 -1. + <_> + 1 13 1 3 2. + <_> + + <_> + 16 0 4 9 -1. + <_> + 18 0 2 9 2. + <_> + + <_> + 9 2 6 4 -1. + <_> + 9 4 6 2 2. + <_> + + <_> + 16 2 3 1 -1. + <_> + 17 3 1 1 3. + 1 + <_> + + <_> + 15 12 3 6 -1. + <_> + 16 12 1 6 3. + <_> + + <_> + 13 12 3 3 -1. + <_> + 14 12 1 3 3. + <_> + + <_> + 3 3 15 4 -1. + <_> + 3 5 15 2 2. + <_> + + <_> + 11 11 3 4 -1. + <_> + 12 11 1 4 3. + <_> + + <_> + 10 11 3 3 -1. + <_> + 11 11 1 3 3. + <_> + + <_> + 19 0 1 4 -1. + <_> + 19 2 1 2 2. + <_> + + <_> + 14 0 3 3 -1. + <_> + 15 1 1 3 3. + 1 + <_> + + <_> + 2 10 8 2 -1. + <_> + 2 10 4 2 2. + 1 + <_> + + <_> + 9 18 4 2 -1. + <_> + 10 18 2 2 2. + <_> + + <_> + 10 0 4 9 -1. + <_> + 11 0 2 9 2. + <_> + + <_> + 15 10 5 6 -1. + <_> + 15 12 5 2 3. + <_> + + <_> + 2 13 4 2 -1. + <_> + 3 13 2 2 2. + <_> + + <_> + 2 15 4 1 -1. + <_> + 3 16 2 1 2. + 1 + <_> + + <_> + 15 8 3 2 -1. + <_> + 16 9 1 2 3. + 1 + <_> + + <_> + 0 6 4 2 -1. + <_> + 2 6 2 2 2. + <_> + + <_> + 9 17 6 1 -1. + <_> + 12 17 3 1 2. + <_> + + <_> + 14 19 6 1 -1. + <_> + 17 19 3 1 2. + <_> + + <_> + 17 18 1 2 -1. + <_> + 17 19 1 1 2. + <_> + + <_> + 17 16 2 2 -1. + <_> + 17 16 2 1 2. + 1 + <_> + + <_> + 19 3 1 9 -1. + <_> + 19 6 1 3 3. + <_> + + <_> + 10 10 3 3 -1. + <_> + 9 11 3 1 3. + 1 + <_> + + <_> + 3 0 3 3 -1. + <_> + 2 1 3 1 3. + 1 + <_> + + <_> + 17 16 2 2 -1. + <_> + 17 16 2 1 2. + 1 + <_> + + <_> + 5 11 3 3 -1. + <_> + 6 12 1 3 3. + 1 + <_> + + <_> + 3 11 2 2 -1. + <_> + 3 11 1 1 2. + <_> + 4 12 1 1 2. + <_> + + <_> + 16 9 2 2 -1. + <_> + 16 9 1 2 2. + 1 + <_> + + <_> + 4 9 2 2 -1. + <_> + 4 9 2 1 2. + 1 + <_> + + <_> + 3 10 2 3 -1. + <_> + 2 11 2 1 3. + 1 + <_> + + <_> + 0 0 20 20 -1. + <_> + 0 0 10 10 2. + <_> + 10 10 10 10 2. + <_> + + <_> + 7 16 5 3 -1. + <_> + 7 17 5 1 3. + <_> + + <_> + 14 1 3 6 -1. + <_> + 12 3 3 2 3. + 1 + <_> + + <_> + 6 0 4 7 -1. + <_> + 7 0 2 7 2. + <_> + + <_> + 9 5 9 6 -1. + <_> + 12 5 3 6 3. + <_> + + <_> + 5 18 4 2 -1. + <_> + 6 18 2 2 2. + <_> + + <_> + 7 7 6 8 -1. + <_> + 9 7 2 8 3. + <_> + + <_> + 18 16 2 4 -1. + <_> + 18 16 1 2 2. + <_> + 19 18 1 2 2. + <_> + + <_> + 11 18 2 2 -1. + <_> + 12 18 1 2 2. + <_> + + <_> + 3 2 5 2 -1. + <_> + 3 3 5 1 2. + <_> + + <_> + 7 1 6 4 -1. + <_> + 7 3 6 2 2. + <_> + + <_> + 2 0 2 2 -1. + <_> + 2 0 2 1 2. + 1 + <_> + + <_> + 0 1 16 1 -1. + <_> + 8 1 8 1 2. + <_> + + <_> + 11 1 3 10 -1. + <_> + 12 1 1 10 3. + <_> + + <_> + 4 0 4 4 -1. + <_> + 5 1 2 4 2. + 1 + <_> + + <_> + 4 13 3 2 -1. + <_> + 5 13 1 2 3. + <_> + + <_> + 8 11 4 3 -1. + <_> + 7 12 4 1 3. + 1 + <_> + + <_> + 7 17 4 3 -1. + <_> + 8 17 2 3 2. + <_> + + <_> + 5 19 2 1 -1. + <_> + 6 19 1 1 2. + <_> + + <_> + 0 9 2 2 -1. + <_> + 0 9 1 1 2. + <_> + 1 10 1 1 2. + <_> + + <_> + 0 9 2 2 -1. + <_> + 0 9 1 1 2. + <_> + 1 10 1 1 2. + <_> + + <_> + 6 9 2 2 -1. + <_> + 6 9 2 1 2. + 1 + <_> + + <_> + 0 10 5 3 -1. + <_> + 0 11 5 1 3. + <_> + + <_> + 3 10 2 2 -1. + <_> + 3 10 1 1 2. + <_> + 4 11 1 1 2. + <_> + + <_> + 0 10 18 1 -1. + <_> + 6 10 6 1 3. + <_> + + <_> + 17 4 3 1 -1. + <_> + 18 5 1 1 3. + 1 + <_> + + <_> + 17 1 2 7 -1. + <_> + 17 1 1 7 2. + 1 + <_> + + <_> + 6 13 9 2 -1. + <_> + 9 13 3 2 3. + <_> + + <_> + 4 9 16 6 -1. + <_> + 4 11 16 2 3. + <_> + + <_> + 1 1 16 4 -1. + <_> + 1 3 16 2 2. + <_> + + <_> + 14 12 3 3 -1. + <_> + 15 12 1 3 3. + <_> + + <_> + 2 9 6 2 -1. + <_> + 4 11 2 2 3. + 1 + <_> + + <_> + 10 0 8 10 -1. + <_> + 12 0 4 10 2. + <_> + + <_> + 1 12 16 4 -1. + <_> + 5 12 8 4 2. + <_> + + <_> + 13 8 6 9 -1. + <_> + 15 11 2 3 9. + <_> + + <_> + 19 0 1 8 -1. + <_> + 19 4 1 4 2. + <_> + + <_> + 8 2 10 6 -1. + <_> + 8 5 10 3 2. + <_> + + <_> + 18 7 2 1 -1. + <_> + 19 7 1 1 2. + <_> + + <_> + 19 4 1 12 -1. + <_> + 19 7 1 6 2. + <_> + + <_> + 8 11 3 3 -1. + <_> + 9 12 1 1 9. + <_> + + <_> + 7 12 3 3 -1. + <_> + 8 12 1 3 3. + <_> + + <_> + 6 13 3 2 -1. + <_> + 7 13 1 2 3. + <_> + + <_> + 17 15 3 2 -1. + <_> + 17 15 3 1 2. + 1 + <_> + + <_> + 11 6 3 3 -1. + <_> + 12 6 1 3 3. + <_> + + <_> + 0 15 2 4 -1. + <_> + 0 17 2 2 2. + <_> + + <_> + 12 9 7 2 -1. + <_> + 12 9 7 1 2. + 1 + <_> + + <_> + 6 5 8 7 -1. + <_> + 10 5 4 7 2. + <_> + + <_> + 6 17 8 3 -1. + <_> + 8 17 4 3 2. + <_> + + <_> + 0 17 4 3 -1. + <_> + 0 18 4 1 3. + <_> + + <_> + 5 1 10 6 -1. + <_> + 5 3 10 2 3. + <_> + + <_> + 0 2 18 2 -1. + <_> + 6 2 6 2 3. + <_> + + <_> + 7 8 6 3 -1. + <_> + 7 9 6 1 3. + <_> + + <_> + 10 8 1 3 -1. + <_> + 10 9 1 1 3. + <_> + + <_> + 16 1 3 2 -1. + <_> + 17 2 1 2 3. + 1 + <_> + + <_> + 2 10 1 2 -1. + <_> + 2 10 1 1 2. + 1 + <_> + + <_> + 2 9 1 2 -1. + <_> + 2 9 1 1 2. + 1 + <_> + + <_> + 3 9 2 3 -1. + <_> + 2 10 2 1 3. + 1 + <_> + + <_> + 2 14 12 6 -1. + <_> + 2 14 6 3 2. + <_> + 8 17 6 3 2. + <_> + + <_> + 15 17 1 2 -1. + <_> + 15 17 1 1 2. + 1 + <_> + + <_> + 17 11 3 3 -1. + <_> + 18 12 1 3 3. + 1 + <_> + + <_> + 13 12 3 2 -1. + <_> + 14 12 1 2 3. + <_> + + <_> + 16 18 4 2 -1. + <_> + 18 18 2 2 2. + <_> + + <_> + 18 14 2 4 -1. + <_> + 17 15 2 2 2. + 1 + <_> + + <_> + 12 13 3 1 -1. + <_> + 13 13 1 1 3. + <_> + + <_> + 11 12 3 3 -1. + <_> + 12 13 1 1 9. + <_> + + <_> + 0 0 16 20 -1. + <_> + 8 0 8 20 2. + <_> + + <_> + 3 0 8 5 -1. + <_> + 5 0 4 5 2. + <_> + + <_> + 0 0 2 1 -1. + <_> + 1 0 1 1 2. + <_> + + <_> + 1 2 19 4 -1. + <_> + 1 4 19 2 2. + <_> + + <_> + 12 7 3 4 -1. + <_> + 13 7 1 4 3. + <_> + + <_> + 15 6 3 3 -1. + <_> + 16 7 1 3 3. + 1 + <_> + + <_> + 3 13 2 2 -1. + <_> + 3 13 1 1 2. + <_> + 4 14 1 1 2. + <_> + + <_> + 2 12 2 2 -1. + <_> + 2 12 1 1 2. + <_> + 3 13 1 1 2. + <_> + + <_> + 0 3 19 4 -1. + <_> + 0 4 19 2 2. + <_> + + <_> + 17 7 3 4 -1. + <_> + 18 8 1 4 3. + 1 + <_> + + <_> + 4 8 3 4 -1. + <_> + 5 9 1 4 3. + 1 + <_> + + <_> + 14 11 4 6 -1. + <_> + 15 11 2 6 2. + <_> + + <_> + 18 3 2 6 -1. + <_> + 18 5 2 2 3. + <_> + + <_> + 14 3 2 4 -1. + <_> + 14 3 2 2 2. + 1 + <_> + + <_> + 7 9 5 4 -1. + <_> + 7 10 5 2 2. + <_> + + <_> + 12 11 8 2 -1. + <_> + 12 12 8 1 2. + <_> + + <_> + 16 13 3 4 -1. + <_> + 16 13 3 2 2. + 1 + <_> + + <_> + 14 7 5 9 -1. + <_> + 14 10 5 3 3. + <_> + + <_> + 0 12 1 3 -1. + <_> + 0 13 1 1 3. + <_> + + <_> + 6 6 3 6 -1. + <_> + 4 8 3 2 3. + 1 + <_> + + <_> + 0 9 9 1 -1. + <_> + 3 9 3 1 3. + <_> + + <_> + 0 9 6 2 -1. + <_> + 0 9 3 1 2. + <_> + 3 10 3 1 2. + <_> + + <_> + 3 2 4 4 -1. + <_> + 4 2 2 4 2. + <_> + + <_> + 18 3 2 3 -1. + <_> + 18 4 2 1 3. + <_> + + <_> + 6 16 3 3 -1. + <_> + 6 17 3 1 3. + <_> + + <_> + 1 16 6 3 -1. + <_> + 1 17 6 1 3. + diff --git a/projects/Drowsiness detection/model.py b/projects/Drowsiness detection/model.py new file mode 100644 index 000000000..614cec4d6 --- /dev/null +++ b/projects/Drowsiness detection/model.py @@ -0,0 +1,57 @@ +import os +from keras.preprocessing import image +import matplotlib.pyplot as plt +import numpy as np +from keras.utils.np_utils import to_categorical +import random,shutil +from keras.models import Sequential +from keras.layers import Dropout,Conv2D,Flatten,Dense, MaxPooling2D, BatchNormalization +from keras.models import load_model + + +def generator(dir, gen=image.ImageDataGenerator(rescale=1./255), shuffle=True,batch_size=1,target_size=(24,24),class_mode='categorical' ): + + return gen.flow_from_directory(dir,batch_size=batch_size,shuffle=shuffle,color_mode='grayscale',class_mode=class_mode,target_size=target_size) + +BS= 32 +TS=(24,24) +train_batch= generator('data/train',shuffle=True, batch_size=BS,target_size=TS) +valid_batch= generator('data/valid',shuffle=True, batch_size=BS,target_size=TS) +SPE= len(train_batch.classes)//BS +VS = len(valid_batch.classes)//BS +print(SPE,VS) + + +# img,labels= next(train_batch) +# print(img.shape) + +model = Sequential([ + Conv2D(32, kernel_size=(3, 3), activation='relu', input_shape=(24,24,1)), + MaxPooling2D(pool_size=(1,1)), + Conv2D(32,(3,3),activation='relu'), + MaxPooling2D(pool_size=(1,1)), +#32 convolution filters used each of size 3x3 +#again + Conv2D(64, (3, 3), activation='relu'), + MaxPooling2D(pool_size=(1,1)), + +#64 convolution filters used each of size 3x3 +#choose the best features via pooling + +#randomly turn neurons on and off to improve convergence + Dropout(0.25), +#flatten since too many dimensions, we only want a classification output + Flatten(), +#fully connected to get all relevant data + Dense(128, activation='relu'), +#one more dropout for convergence' sake :) + Dropout(0.5), +#output a softmax to squash the matrix into output probabilities + Dense(2, activation='softmax') +]) + +model.compile(optimizer='adam',loss='categorical_crossentropy',metrics=['accuracy']) + +model.fit_generator(train_batch, validation_data=valid_batch,epochs=15,steps_per_epoch=SPE ,validation_steps=VS) + +model.save('models/cnnCat2.h5', overwrite=True) \ No newline at end of file diff --git a/projects/Duplicate files remover/README.md b/projects/Duplicate files remover/README.md new file mode 100644 index 000000000..acbbca5e0 --- /dev/null +++ b/projects/Duplicate files remover/README.md @@ -0,0 +1,20 @@ +# Duplicate Files Remover +This script removes duplicate files in the directory where the script runs. + +### Prerequisites +* No external libraries are used +* os +* hashlib + +### How to run the script +Execute `python3 duplicatefileremover.py` + +### Screenshot/GIF showing the sample use of the script + +![Screenshot of the Output](Screenshot.png) + +## Working +The script first lists all the files in the directory. It takes MD5 hash of each file, when hash of 2 files become same it deletes the file. + +## Author Name +[Anandha Krishnan Aji](https://github.com/anandhakrishnanaji) diff --git a/projects/Duplicate files remover/Screenshot.png b/projects/Duplicate files remover/Screenshot.png new file mode 100644 index 000000000..c69aefaa0 Binary files /dev/null and b/projects/Duplicate files remover/Screenshot.png differ diff --git a/projects/Duplicate files remover/duplicatefileremover.py b/projects/Duplicate files remover/duplicatefileremover.py new file mode 100644 index 000000000..7dd9dcd10 --- /dev/null +++ b/projects/Duplicate files remover/duplicatefileremover.py @@ -0,0 +1,40 @@ +import hashlib +import os + +# Returns the hash string of the given file name + + +def hashFile(filename): + # For large files, if we read it all together it can lead to memory overflow, So we take a blocksize to read at a time + BLOCKSIZE = 65536 + hasher = hashlib.md5() + with open(filename, 'rb') as file: + # Reads the particular blocksize from file + buf = file.read(BLOCKSIZE) + while(len(buf) > 0): + hasher.update(buf) + buf = file.read(BLOCKSIZE) + return hasher.hexdigest() + + +if __name__ == "__main__": + # Dictionary to store the hash and filename + hashMap = {} + + # List to store deleted files + deletedFiles = [] + filelist = [f for f in os.listdir() if os.path.isfile(f)] + for f in filelist: + key = hashFile(f) + # If key already exists, it deletes the file + if key in hashMap.keys(): + deletedFiles.append(f) + os.remove(f) + else: + hashMap[key] = f + if len(deletedFiles) != 0: + print('Deleted Files') + for i in deletedFiles: + print(i) + else: + print('No duplicate files found') diff --git a/projects/EasyVideoPlayer/EasyVideoPlayer.py b/projects/EasyVideoPlayer/EasyVideoPlayer.py new file mode 100644 index 000000000..ddd36f01c --- /dev/null +++ b/projects/EasyVideoPlayer/EasyVideoPlayer.py @@ -0,0 +1,60 @@ +import cv2 +import os +from pathlib import Path +from ffpyplayer.player import MediaPlayer + + +# User input for the name of the image file. +video_name = input("Name of the video file that you want to play: ") + +# User input for the path of the image file. +video_directory_guess = input("Directory that may contain the video: ") + + +# This function finds your file. If you don't know the directory just type '/' +def find_the_video(file_name, directory_name): + files_found = [] + for path, subdirs, files in os.walk(directory_name): + for name in files: + if(file_name == name): + file_path = os.path.join(path, name) + files_found.append(file_path) + + print(files_found) + return files_found[0] # Return the path. + + +# Initialize the path of the image file. +video_directory = Path(find_the_video(video_name, video_directory_guess)) + +# Initialize the parent directory of the image path. +new_working_directory = video_directory.parent + +# Change the working directory of the script. +os.chdir(new_working_directory) + + +video_path = find_the_video(video_name, video_directory_guess) + + +def PlayVideo(video_path): + + video = cv2.VideoCapture(video_path) + player = MediaPlayer(video_path) + + while True: + grabbed, frame = video.read() + audio_frame, val = player.get_frame() + if not grabbed: + print("End of video") + break + if cv2.waitKey(28) & 0xFF == ord("q"): + break + cv2.imshow("Video", frame) + if val != 'eof' and audio_frame is not None: + img, t = audio_frame + video.release() + cv2.destroyAllWindows() + + +PlayVideo(video_path) diff --git a/projects/EasyVideoPlayer/README.md b/projects/EasyVideoPlayer/README.md new file mode 100644 index 000000000..c361981fc --- /dev/null +++ b/projects/EasyVideoPlayer/README.md @@ -0,0 +1,11 @@ +# EasyVideoPlayer + EasyVideoPlayer script is a video player based on the terminal. It can find the video in a pc, change its working directory and play the video file. + +### Prerequisites + cv2, os, pathlib and ffpyplayer.player libraries are needed to run this script, all of which can be installed using "pip3 install 'library name'". + +### How to run the script + 'cd' to the directory that contains the script and type "python3 EasyVideoPlayer.py". When you are done with the video, use "keyboard interrupt" (Ctrl + C) to exit the player. + +## *Author Name* +[Bartu Yaman](https://github.com/brtymn) diff --git a/projects/EasyVideoPlayer/requirements.txt b/projects/EasyVideoPlayer/requirements.txt new file mode 100644 index 000000000..7f7aa141d --- /dev/null +++ b/projects/EasyVideoPlayer/requirements.txt @@ -0,0 +1,3 @@ +opencv-python==4.4.0.42 +pathlib==1.0.1 +ffpyplayer==4.3.1 diff --git a/projects/Easy_cartoonify/README.md b/projects/Easy_cartoonify/README.md new file mode 100644 index 000000000..37f72e79e --- /dev/null +++ b/projects/Easy_cartoonify/README.md @@ -0,0 +1,11 @@ +# OpenCV Cartoonify + +This script uses the OpenCV library to process images and outputs cartoon-like images and allows the user to process images without worrying about the directory of the image with a terminal based basic UI. + +### The Significance of This Particular Cartoon Converter Script + +This script finds your image file in your pc and automatically changes its the working directory before it starts processing the image. This operation saves the time and energy of the user. + +#### Future Of This Project + +Please keep in mind that this is the first version of the project and currenty only has 2 options for the cartoon styles. I will add much more depth to the cartoonify-ing process later on. diff --git a/projects/Easy_cartoonify/easy_cartoonify.py b/projects/Easy_cartoonify/easy_cartoonify.py new file mode 100644 index 000000000..7f4365dd5 --- /dev/null +++ b/projects/Easy_cartoonify/easy_cartoonify.py @@ -0,0 +1,45 @@ +import cv2 +import os +from pathlib import Path + +image_name = input("Please enter the name of the image file that you want to process: ") ## User input for the name of the image file. +image_directory = input("Please enter the directory that may contain the image: ") ## User input for the path of the image file. + +## This function looks for and finds the desired file. You can specify a parent directory for the fundtion to look for, however if you have no idea where a file is; this functio will find it for you, just slower. If you have no idea where a file is, just type "/". +def find_the_image(file_name, directory_name): + files_found = [] + for path, subdirs, files in os.walk(directory_name): + for name in files: + if(file_name == name): + file_path = os.path.join(path,name) + files_found.append(file_path) + + print(files_found[0]) + return files_found[0] ## Return the path. + + +image_path = Path(find_the_image(image_name, image_directory)) ## Inıtialize the path of the image file. +new_working_directory = image_path.parent ## Initialize the parent directory of the image path. +os.chdir(new_working_directory) ## Change the working directory of the script to the parent directory of the image path. + + +color_image = cv2.imread(find_the_image(image_name, image_directory)) +##cv2.imshow("image_not_processed",color_image) ## Uncomment this to see the image without the process. +##cv2.waitKey() +##cv2.destroyAllWindows() + +cartoon_style_selection = input("This script currently has 2 sytles. Please type 1 or 2. ") + +if (cartoon_style_selection == "1"): + cartoon_image_style_1 = cv2.stylization(color_image, sigma_s=150, sigma_r=0.25) ## Cartoonify process. + cv2.imshow('cartoon_1', cartoon_image_style_1) + cv2.waitKey() + cv2.destroyAllWindows() +elif (cartoon_style_selection == "2"): + cartoon_image_style_2 = cv2.stylization(color_image, sigma_s=60, sigma_r=0.5) ## Cartoonify process. + cv2.imshow('cartoon_2', cartoon_image_style_2) + cv2.waitKey() + cv2.destroyAllWindows() + +else: + print("Invalid style selection.") diff --git a/projects/Encrypt_and_decrypt_text/README.md b/projects/Encrypt_and_decrypt_text/README.md new file mode 100644 index 000000000..373ac8934 --- /dev/null +++ b/projects/Encrypt_and_decrypt_text/README.md @@ -0,0 +1,27 @@ +# aes_encode + +A small python program that encodes and decodes text. + +### Prerequisites + +- pycryptodome 3.9.8 +- Python 3 + +### How to run the script + +> python aes_encode.py "a text" + +Example: +``` +python aes_encode.py "hello world" +``` +An encrypted file (`encrypted.bin`) will be generated +when the program has finished running. + +### Screenshot/GIF showing the sample use of the script + +![Screen shot](https://github.com/Python-World/python-mini-projects/blob/master/projects/Create_script_to_encode_and_decode_text/output.png) + +### Author Name + +[Gaodong](https://github.com/xlgd) diff --git a/projects/create script to encode and decode text/aes_encode.py b/projects/Encrypt_and_decrypt_text/aes_encode.py similarity index 80% rename from projects/create script to encode and decode text/aes_encode.py rename to projects/Encrypt_and_decrypt_text/aes_encode.py index 94f847590..4f31d5605 100644 --- a/projects/create script to encode and decode text/aes_encode.py +++ b/projects/Encrypt_and_decrypt_text/aes_encode.py @@ -1,22 +1,23 @@ -from Cryptodome.Cipher import AES -from Cryptodome import Random +from Crypto.Cipher import AES +from Crypto import Random from binascii import b2a_hex import sys # get the plaintext -f = open(sys.argv[1]) -plain_text = f.read() +plain_text = sys.argv[1] # The key length must be 16 (AES-128), 24 (AES-192), or 32 (AES-256) Bytes. key = b'this is a 16 key' -# Generate a non-repeatable key vector with a length equal to the size of the AES block +# Generate a non-repeatable key vector with a length +# equal to the size of the AES block iv = Random.new().read(AES.block_size) # Use key and iv to initialize AES object, use MODE_CFB mode mycipher = AES.new(key, AES.MODE_CFB, iv) -# Add iv (key vector) to the beginning of the encrypted ciphertext and transmit it together +# Add iv (key vector) to the beginning of the encrypted ciphertext +# and transmit it together ciphertext = iv + mycipher.encrypt(plain_text.encode()) @@ -35,5 +36,3 @@ print("iv is: ", b2a_hex(ciphertext)[:16]) print("The encrypted data is: ", b2a_hex(ciphertext)[16:]) print("The decrypted data is: ", decrypttext.decode()) - -f.close() diff --git a/projects/Encrypt_and_decrypt_text/output.png b/projects/Encrypt_and_decrypt_text/output.png new file mode 100644 index 000000000..95f851592 Binary files /dev/null and b/projects/Encrypt_and_decrypt_text/output.png differ diff --git a/projects/Encrypt_and_decrypt_text/requirements.txt b/projects/Encrypt_and_decrypt_text/requirements.txt new file mode 100644 index 000000000..527b2e138 --- /dev/null +++ b/projects/Encrypt_and_decrypt_text/requirements.txt @@ -0,0 +1 @@ +pycryptodome==3.9.8 diff --git a/projects/Extract_zip_files/README.md b/projects/Extract_zip_files/README.md new file mode 100644 index 000000000..89f3cf6c4 --- /dev/null +++ b/projects/Extract_zip_files/README.md @@ -0,0 +1,13 @@ +## Extract zip files + +This script takes a zip file as input and extracts its content into a separate folder. +The folder is named same as the input zip file and is saved in the current directory + +### How to use this? +Just type the following in the command prompt: + +python extract_zip_files.py -l + +Example: + +python extract_zip_files.py -l Amazing_Spiderman_subtitles.zip diff --git a/projects/Extract_zip_files/extract_zip_files.py b/projects/Extract_zip_files/extract_zip_files.py new file mode 100644 index 000000000..238839545 --- /dev/null +++ b/projects/Extract_zip_files/extract_zip_files.py @@ -0,0 +1,35 @@ +import os +import zipfile +import sys +import argparse + +# Code to add the cli +parser = argparse.ArgumentParser() +parser.add_argument("-l", "--zippedfile", required=True, help="Zipped file") +args = vars(parser.parse_args()) + +#Catching the user defined zip file +zip_file = args['zippedfile'] + +file_name = zip_file + +#To check if the entered zip file is present in the directory +if os.path.exists(zip_file) == False: + sys.exit("No such file present in the directory") + +#Function to extract the zip file +def extract(zip_file): + file_name = zip_file.split(".zip")[0] + if zip_file.endswith(".zip"): + + #Will use this to save the unzipped file in the current directory + current_working_directory = os.getcwd() + new_directory = current_working_directory + "/" + file_name + #Logic to unzip the file + with zipfile.ZipFile(zip_file, 'r') as zip_object: + zip_object.extractall(new_directory) + print("Extracted successfully!!!") + else: + print("Not a zip file") + +extract(zip_file) diff --git a/projects/Fetch HTTP status code/README.md b/projects/Fetch HTTP status code/README.md new file mode 100644 index 000000000..74e8c37cf --- /dev/null +++ b/projects/Fetch HTTP status code/README.md @@ -0,0 +1,24 @@ +## Program to fetch the HTTP status code + +This script is used to fetch the status code of any request. + +Input: +-> URL of a website or an API + +Output: +-> Line 1 : Status code of the response followed by emoji (thumbsup/thumbsdown) +-> Line 2 : Relevant message about the status code. +i.e. If status code corresponds to failure, then reason of failure would be shown in the message field. + +## Prerequisites + +This program uses and external dependency of "emoji" library to display the emojis in output. +This library can be installed easily by using the following command: +pip install -r requirements.txt + +## How to use this script? + +-> Install the requirements. +->Type the following command: +python fetch_http_status_code.py +->A message asking URL/API would be displayed : Enter any url of choice and check the output diff --git a/projects/Fetch HTTP status code/fetch_http_status_code.py b/projects/Fetch HTTP status code/fetch_http_status_code.py new file mode 100644 index 000000000..a0da31c17 --- /dev/null +++ b/projects/Fetch HTTP status code/fetch_http_status_code.py @@ -0,0 +1,22 @@ +#Program to fetch the http status code give the url/api +from urllib.request import urlopen +from urllib.error import URLError, HTTPError +import emoji + +#Taking input url from user +requestURL = input("Enter the URL to be invoked: ") + +#Gets the response from URL and prints the status code, corresponding emoji and message accordingly +try: + response = urlopen(requestURL) + #In case of success, prints success status code and thumbs_up emoji + print('Status code : ' + str(response.code) + ' ' + emoji.emojize(':thumbs_up:')) + print('Message : ' + 'Request succeeded. Request returned message - ' + response.reason) +except HTTPError as e: + #In case of request failure, prints HTTP error status code and thumbs_down emoji + print('Status : ' + str(e.code) + ' ' + emoji.emojize(':thumbs_down:')) + print('Message : Request failed. Request returned reason - ' + e.reason) +except URLError as e: + #In case of bad URL or connection failure, prints Win Error and thumbs_down emoji + print('Status :', str(e.reason).split(']')[0].replace('[','') + ' ' + emoji.emojize(':thumbs_down:')) + print('Message : '+ str(e.reason).split(']')[1]) diff --git a/projects/Fetch HTTP status code/requirements.txt b/projects/Fetch HTTP status code/requirements.txt new file mode 100644 index 000000000..bcb84ff69 --- /dev/null +++ b/projects/Fetch HTTP status code/requirements.txt @@ -0,0 +1 @@ +emoji==0.6.0 \ No newline at end of file diff --git a/projects/Fetch_and_store_tweets/README.md b/projects/Fetch_and_store_tweets/README.md new file mode 100644 index 000000000..fc07daad8 --- /dev/null +++ b/projects/Fetch_and_store_tweets/README.md @@ -0,0 +1,90 @@ +# Fetch and Store Tweets +This python script is used to fetch the required number of tweets of a particular Hashtag through your twitter account and generates an `.csv` file. + +## Prerequisites + +1. You need any Python IDE to run this script. You can visit [here](https://www.python.org/downloads/) to download the latest version of Python based on your operating System. + +2. Next to execute this script you have to get the API keys from twitter developer account by creating an app at [Twitter developer account](https://developer.twitter.com/apps). For creating an app at [Twitter developer account](https://developer.twitter.com/apps) you have to follow the below steps + + ### Step1: + + Visit [Twitter Developer Account Website](https://developer.twitter.com/apps) and click on Create app as shown below + + step-1 + + ### Step2: + + Click on Apply + + step-2 + + ### Step3: + + Based on your choice select the Reason for using twitter developer tools and Click on Next + +step-3 + +### Step4: + +Enter your country and what you would you call and Click on Next + +step-4 + +### Step5: + +Now Carefully read the questions and answer all the questions as per the requirement. Because based on you answer only the account approval will be taken place + +step-5 + +### Step6: + +If your account successfully approved you can come to homepage [Twitter developer account](https://developer.twitter.com/apps) and now click on Create an app icon on the right top. + +**Note:** sometimes it takes time to approval of the developer account based on step-5 answers + +step-6 + +### Step7: + +Fill the require fields and click on Create + +step-7 + +### Step8: + +After creating the App click on **Keys and tokens** option you will observe Consumer and Access token keys. Copy them and paste them in the python script + +step-8 + +## How to run the script + +1. Save the script in the local machine. + +2. Update the API and Access token Keys in the Python script which generated in step8 + +3. Open a terminal/command prompt and change directory location to the folder where your script is located and run the below commands + + 1. To install required packages run the below command + + ```python + pip install -r requirements.txt + ``` + + 2. To execute the script run the following command + + ```python + python fetch_store_tweet.py + ``` + + After successful execution of the script you should observe the below output in command prompt/terminal as well as one `.csv` file with the required number of tweets will be generated. + + output + + Final generated tweets in`.csv` file output + + output2 + +## Author Name + +[Kushal Agrawal](https://github.com/kushal98) diff --git a/projects/Fetch_and_store_tweets/fetch_store_tweet.py b/projects/Fetch_and_store_tweets/fetch_store_tweet.py new file mode 100644 index 000000000..088792a32 --- /dev/null +++ b/projects/Fetch_and_store_tweets/fetch_store_tweet.py @@ -0,0 +1,24 @@ +import tweepy +import csv + +# input your credentials here +consumer_key = '' +consumer_secret = '' +access_token = '' +access_token_secret = '' +hastag = '' + +auth = tweepy.OAuthHandler(consumer_key, consumer_secret) +auth.set_access_token(access_token, access_token_secret) +api = tweepy.API(auth,wait_on_rate_limit=True) + +# Open/Create a file to append data +csvFile = open('tweets.csv', 'a') +#Use csv Writer +csvWriter = csv.writer(csvFile) + +for tweet in tweepy.Cursor(api.search,q=hastag,count=100, + lang="en", + since="2017-04-03").items(): + print (tweet.created_at, tweet.text) + csvWriter.writerow([tweet.created_at, tweet.text.encode('utf-8')]) \ No newline at end of file diff --git a/projects/Fetch_and_store_tweets/img/output-2.PNG b/projects/Fetch_and_store_tweets/img/output-2.PNG new file mode 100644 index 000000000..f8328b787 Binary files /dev/null and b/projects/Fetch_and_store_tweets/img/output-2.PNG differ diff --git a/projects/Fetch_and_store_tweets/img/output-2.png b/projects/Fetch_and_store_tweets/img/output-2.png new file mode 100644 index 000000000..f8328b787 Binary files /dev/null and b/projects/Fetch_and_store_tweets/img/output-2.png differ diff --git a/projects/Fetch_and_store_tweets/img/output.PNG b/projects/Fetch_and_store_tweets/img/output.PNG new file mode 100644 index 000000000..682bcf235 Binary files /dev/null and b/projects/Fetch_and_store_tweets/img/output.PNG differ diff --git a/projects/Fetch_and_store_tweets/img/output.png b/projects/Fetch_and_store_tweets/img/output.png new file mode 100644 index 000000000..682bcf235 Binary files /dev/null and b/projects/Fetch_and_store_tweets/img/output.png differ diff --git a/projects/Fetch_and_store_tweets/img/step-1.PNG b/projects/Fetch_and_store_tweets/img/step-1.PNG new file mode 100644 index 000000000..a11cf5597 Binary files /dev/null and b/projects/Fetch_and_store_tweets/img/step-1.PNG differ diff --git a/projects/Fetch_and_store_tweets/img/step-1.png b/projects/Fetch_and_store_tweets/img/step-1.png new file mode 100644 index 000000000..a11cf5597 Binary files /dev/null and b/projects/Fetch_and_store_tweets/img/step-1.png differ diff --git a/projects/Fetch_and_store_tweets/img/step-2.PNG b/projects/Fetch_and_store_tweets/img/step-2.PNG new file mode 100644 index 000000000..d902378cd Binary files /dev/null and b/projects/Fetch_and_store_tweets/img/step-2.PNG differ diff --git a/projects/Fetch_and_store_tweets/img/step-2.png b/projects/Fetch_and_store_tweets/img/step-2.png new file mode 100644 index 000000000..d902378cd Binary files /dev/null and b/projects/Fetch_and_store_tweets/img/step-2.png differ diff --git a/projects/Fetch_and_store_tweets/img/step-3.PNG b/projects/Fetch_and_store_tweets/img/step-3.PNG new file mode 100644 index 000000000..532b31bb6 Binary files /dev/null and b/projects/Fetch_and_store_tweets/img/step-3.PNG differ diff --git a/projects/Fetch_and_store_tweets/img/step-3.png b/projects/Fetch_and_store_tweets/img/step-3.png new file mode 100644 index 000000000..532b31bb6 Binary files /dev/null and b/projects/Fetch_and_store_tweets/img/step-3.png differ diff --git a/projects/Fetch_and_store_tweets/img/step-4.PNG b/projects/Fetch_and_store_tweets/img/step-4.PNG new file mode 100644 index 000000000..31a95d33d Binary files /dev/null and b/projects/Fetch_and_store_tweets/img/step-4.PNG differ diff --git a/projects/Fetch_and_store_tweets/img/step-4.png b/projects/Fetch_and_store_tweets/img/step-4.png new file mode 100644 index 000000000..31a95d33d Binary files /dev/null and b/projects/Fetch_and_store_tweets/img/step-4.png differ diff --git a/projects/Fetch_and_store_tweets/img/step-5.PNG b/projects/Fetch_and_store_tweets/img/step-5.PNG new file mode 100644 index 000000000..c4436f9fb Binary files /dev/null and b/projects/Fetch_and_store_tweets/img/step-5.PNG differ diff --git a/projects/Fetch_and_store_tweets/img/step-5.png b/projects/Fetch_and_store_tweets/img/step-5.png new file mode 100644 index 000000000..c4436f9fb Binary files /dev/null and b/projects/Fetch_and_store_tweets/img/step-5.png differ diff --git a/projects/Fetch_and_store_tweets/img/step-6.PNG b/projects/Fetch_and_store_tweets/img/step-6.PNG new file mode 100644 index 000000000..ab5450a38 Binary files /dev/null and b/projects/Fetch_and_store_tweets/img/step-6.PNG differ diff --git a/projects/Fetch_and_store_tweets/img/step-6.png b/projects/Fetch_and_store_tweets/img/step-6.png new file mode 100644 index 000000000..ab5450a38 Binary files /dev/null and b/projects/Fetch_and_store_tweets/img/step-6.png differ diff --git a/projects/Fetch_and_store_tweets/img/step-7.png b/projects/Fetch_and_store_tweets/img/step-7.png new file mode 100644 index 000000000..3cc10c98d Binary files /dev/null and b/projects/Fetch_and_store_tweets/img/step-7.png differ diff --git a/projects/Fetch_and_store_tweets/img/step-9.png b/projects/Fetch_and_store_tweets/img/step-9.png new file mode 100644 index 000000000..00e428943 Binary files /dev/null and b/projects/Fetch_and_store_tweets/img/step-9.png differ diff --git a/projects/Fetch_and_store_tweets/requirements.txt b/projects/Fetch_and_store_tweets/requirements.txt new file mode 100644 index 000000000..b7b86914c --- /dev/null +++ b/projects/Fetch_and_store_tweets/requirements.txt @@ -0,0 +1 @@ +tweepy==3.9.0 diff --git a/projects/Fetch_current_weather/README.md b/projects/Fetch_current_weather/README.md new file mode 100644 index 000000000..aaccc3606 --- /dev/null +++ b/projects/Fetch_current_weather/README.md @@ -0,0 +1,16 @@ +# Current Weather + +This Script will help you to find current weather of any entered place. +This script is using openweathermap.org to find the current weather. + +# Requirement + +To run this script you need to have api key, to get an API key you first [signup here](https://home.openweathermap.org/api_keys) + +After getting the api key add in the code +``` +api_key = "Your_API_Key" +``` + +# Result +The output this script will generate diff --git a/projects/Fetch_current_weather/fetch_current_weather.py b/projects/Fetch_current_weather/fetch_current_weather.py new file mode 100644 index 000000000..606149c96 --- /dev/null +++ b/projects/Fetch_current_weather/fetch_current_weather.py @@ -0,0 +1,35 @@ +# Python program to find current weather details of any city using openweathermap api +import requests + +# Enter your API key here +api_key = "Your_API_Key" + +# base_url variable to store url +base_url = "http://api.openweathermap.org/data/2.5/weather?" + +# Give city name +city_name = input("Enter city name : ") + +complete_url = base_url + "appid=" + api_key + "&q=" + city_name +response = requests.get(complete_url) +x = response.json() + +if x["cod"] != "404": + + y = x["main"] + current_temperature = y["temp"] + current_pressure = y["pressure"] + current_humidiy = y["humidity"] + z = x["weather"] + weather_description = z[0]["description"] + print(" Temperature (in kelvin unit) = " + + str(current_temperature) + + "\n atmospheric pressure (in hPa unit) = " + + str(current_pressure) + + "\n humidity (in percentage) = " + + str(current_humidiy) + + "\n description = " + + str(weather_description)) + +else: + print(" City Not Found ") \ No newline at end of file diff --git a/projects/Fetch_open_ports/README.md b/projects/Fetch_open_ports/README.md new file mode 100644 index 000000000..235b2140f --- /dev/null +++ b/projects/Fetch_open_ports/README.md @@ -0,0 +1,30 @@ +# Fetch open port + +This script finds open port for web address. + +### Prerequisites + +No need for additional installations. + +### How to run the script + +1. Clone repo on your local machine and switch to script folder +``` + git clone https://github.com/chavarera/python-mini-projects.git + cd python-mini-projects/projects/Fetch_open_ports/ +``` + +2. Run following command +``` + python3 fetch_open_port.py +``` + +3. Once script is running, you can write any website you want, and it will print all open ports in range 50-500. + +### Screenshot/GIF showing the sample use of the script + +![Example of script usage](Screenshot.png) + +## *Author Name* + +[Kushal Agrawal](https://github.com/kushal98) diff --git a/projects/Fetch_open_ports/Screenshot.png b/projects/Fetch_open_ports/Screenshot.png new file mode 100644 index 000000000..e0747a91a Binary files /dev/null and b/projects/Fetch_open_ports/Screenshot.png differ diff --git a/projects/Fetch_open_ports/fetch_open_port.py b/projects/Fetch_open_ports/fetch_open_port.py new file mode 100644 index 000000000..51a7e0588 --- /dev/null +++ b/projects/Fetch_open_ports/fetch_open_port.py @@ -0,0 +1,17 @@ +from socket import * +import time +startTime = time.time() + +if __name__ == '__main__': + target = input('Enter the host to be scanned: ') + t_IP = gethostbyname(target) + print ('Starting scan on host: ', t_IP) + + for i in range(50, 500): + s = socket(AF_INET, SOCK_STREAM) + + conn = s.connect_ex((t_IP, i)) + if(conn == 0) : + print ('Port %d: OPEN' % (i,)) + s.close() +print('Time taken:', time.time() - startTime) \ No newline at end of file diff --git a/projects/Find_imdb_rating/.gitignore b/projects/Find_imdb_rating/.gitignore new file mode 100644 index 000000000..e43b0f988 --- /dev/null +++ b/projects/Find_imdb_rating/.gitignore @@ -0,0 +1 @@ +.DS_Store diff --git a/projects/Find_imdb_rating/README.md b/projects/Find_imdb_rating/README.md new file mode 100644 index 000000000..d991a0c8d --- /dev/null +++ b/projects/Find_imdb_rating/README.md @@ -0,0 +1,33 @@ +# Find IMDB Ratings + +This script is used to fetch the Ratings and Genre of the films in your films folder that match with ones on IMDb, the data is scraped from IMDB's official website and store in a csv file. The csv file can be used for analysis then, sorting acc to rating etc. + +Input: -> Path of the directory which contains the films. + +Output: -> A new csv file is made - 'film_ratings.csv' which contains the ratings for the films in your directory. + +### Prerequisites + +This program uses and external dependency of 'BeautifulSoup' (for web scraping), 'requests' (for fetching content of the webpage), 'pandas' (to make the csv file), 'os' (to get data from directory).
    +These libraries can be installed easily by using the following command: pip install -r requirements.txt + +### How to run the script + +-> Install the requirements.
    +-> Inside the find_IMDb_rating.py, update the directory path.
    +-> Type the following command: python find_IMDb_rating.py
    +-> A csv file with rating will be created in the same directory as the python file.
    + +### Screenshot/GIF showing the sample use of the script + +Folder : + +![Screenshot 2020-09-15 at 6 20 55 PM](https://user-images.githubusercontent.com/44445191/93214776-375f7280-f783-11ea-90a3-dcd29a84d7fc.png) + +CSV File: +![Screenshot 2020-09-15 at 6 28 24 PM](https://user-images.githubusercontent.com/44445191/93214767-32022800-f783-11ea-893d-7f45240b6dc5.png) + + +## *Author Name* + +[Utkarsh Bajaj](https://github.com/utkarshbajaj) diff --git a/projects/Find_imdb_rating/find_IMDb_rating.py b/projects/Find_imdb_rating/find_IMDb_rating.py new file mode 100644 index 000000000..0ebe199d0 --- /dev/null +++ b/projects/Find_imdb_rating/find_IMDb_rating.py @@ -0,0 +1,79 @@ +from bs4 import BeautifulSoup +import requests +import pandas as pd +import os + +# Setting up session +s = requests.session() + +# List contaiting all the films for which data has to be scraped from IMDB +films = [] + +# Lists contaiting web scraped data +names = [] +ratings = [] +genres = [] + +# Define path where your films are present +# For eg: "/Users/utkarsh/Desktop/films" +path = input("Enter the path where your films are: ") + +# Films with extensions +filmswe = os.listdir(path) + +for film in filmswe: + # Append into my films list (without extensions) + films.append(os.path.splitext(film)[0]) + # print(os.path.splitext(film)[0]) + +for line in films: + # x = line.split(", ") + title = line.lower() + # release = x[1] + query = "+".join(title.split()) + URL = "https://www.imdb.com/search/title/?title=" + query + print(URL) + # print(release) + try: + response = s.get(URL) + + #getting contect from IMDB Website + content = response.content + + # print(response.status_code) + + soup = BeautifulSoup(response.content, features="html.parser") + #searching all films containers found + containers = soup.find_all("div", class_="lister-item-content") + for result in containers: + name1 = result.h3.a.text + name = result.h3.a.text.lower() + + # Uncomment below lines if you want year specific as well, define year variable before this + # year = result.h3.find( + # "span", class_="lister-item-year text-muted unbold" + # ).text.lower() + + #if film found (searching using name) + if title in name: + #scraping rating + rating = result.find("div",class_="inline-block ratings-imdb-rating")["data-value"] + #scraping genre + genre = result.p.find("span", class_="genre") + genre = genre.contents[0] + + #appending name, rating and genre to individual lists + names.append(name1) + ratings.append(rating) + genres.append(genre) + + + + except Exception: + print("Try again with valid combination of tile and release year") + +#storing in pandas dataframe +df = pd.DataFrame({'Film Name':names,'Rating':ratings,'Genre':genres}) + +#making csv using pandas +df.to_csv('film_ratings.csv', index=False, encoding='utf-8') diff --git a/projects/Find_imdb_rating/requirements.txt b/projects/Find_imdb_rating/requirements.txt new file mode 100644 index 000000000..584c85b04 --- /dev/null +++ b/projects/Find_imdb_rating/requirements.txt @@ -0,0 +1,11 @@ +beautifulsoup4==4.9.1 +certifi==2020.6.20 +chardet==3.0.4 +idna==2.10 +pandas==1.1.2 +python-dateutil==2.8.1 +pytz==2020.1 +requests==2.24.0 +six==1.15.0 +soupsieve==2.0.1 +urllib3==1.26.5 diff --git a/projects/Find Out Hostname and IP address/Hostname_IPaddress.py b/projects/Find_out_hostname_and_ip_address/Hostname_IPaddress.py similarity index 100% rename from projects/Find Out Hostname and IP address/Hostname_IPaddress.py rename to projects/Find_out_hostname_and_ip_address/Hostname_IPaddress.py diff --git a/projects/Find_out_hostname_and_ip_address/README.md b/projects/Find_out_hostname_and_ip_address/README.md new file mode 100644 index 000000000..dfacf5db3 --- /dev/null +++ b/projects/Find_out_hostname_and_ip_address/README.md @@ -0,0 +1,19 @@ +# Get Ipaddress and Hostname of Website + +Get the ip address and hostname of a website + +### Prerequisites + +None + +### How to run the script + +Execute `python3 Hostname_IPaddress.py` + +### Screenshot/GIF showing the sample use of the script + +![Screenshot of the Hostname_IPaddress.py file](Screenshot.png) + +## *Author Name* + +[Nuh Mohammed](https://github.com/NuhMohammed) diff --git a/projects/Find_out_hostname_and_ip_address/Screenshot.png b/projects/Find_out_hostname_and_ip_address/Screenshot.png new file mode 100644 index 000000000..d4e4ba17b Binary files /dev/null and b/projects/Find_out_hostname_and_ip_address/Screenshot.png differ diff --git a/projects/GUI Rock-Paper-Scissors Game/Rock-Paper-Scissors Game.py b/projects/GUI Rock-Paper-Scissors Game/Rock-Paper-Scissors Game.py new file mode 100644 index 000000000..b344ce9fd --- /dev/null +++ b/projects/GUI Rock-Paper-Scissors Game/Rock-Paper-Scissors Game.py @@ -0,0 +1,74 @@ +# Import Required Library +from tkinter import * +from tkinter import ttk +from random import * + +# Create Object +root = Tk() + +# Set geometry +root.geometry("500x500") + +root.title("Rock-Paper-Scissors-Game") + +# List of players +list = ["rock","paper","scissors"] + +choose_number = randint(0,2) +print(choose_number) # For testing if it works + +label = Label(root,text="Computer ",width = 20,height=4,font=("algerian",15)) +label.pack() + +def spin(): + choose_number = randint(0,2) + label.config(text=list[choose_number]) + if user_select.get() == "Rock": + user_select_value = 0 + print(user_select_value) + elif user_select.get() == "Paper": + user_select_value = 1 + print(user_select_value) + elif user_select.get() == "Scissors": + user_select_value = 2 + print(user_select_value) + + if user_select_value == 0: + if choose_number == 0: + wl_label.config(text="Tie! - "+" Computer:Bad luck") + elif choose_number == 1: + wl_label.config(text="YOU Loose - "+" Computer: I am better ") + elif choose_number == 2 : + wl_label.config(text="YOU Won - "+" Computer: You won by luck") + + elif user_select_value == 1: + if choose_number == 1: + wl_label.config(text="Tie! - "+" Computer: Nice game") + elif choose_number == 0: + wl_label.config(text="YOU Won - "+" Computer: Shit how you are better") + elif choose_number == 2 : + wl_label.config(text="YOU Loose - "+" Computer: booo") + + elif user_select_value == 2: + if choose_number == 2: + wl_label.config(text="Tie!") + elif choose_number == 0: + wl_label.config(text="YOU Loose - "+" Computer: I am playing this game since i was born") + elif choose_number == 1 : + wl_label.config(text="YOU Won") + + + +# Adding dropdown box for Rock,Paper,Scissors +user_select = ttk.Combobox(root,value=["Rock","Paper","Scissors"]) +user_select.current(0) +user_select.pack() + +# Add Labels,Button +wl_label = Label(root,text="",font=("arial",10),width=50,height=4) +wl_label.pack() + +button = Button(root,text="Spin!",font=("bell mt",10),command=spin) +button.pack() + +root.mainloop() diff --git a/projects/Games/QuizGame.py b/projects/Games/QuizGame.py new file mode 100644 index 000000000..bc4536ddc --- /dev/null +++ b/projects/Games/QuizGame.py @@ -0,0 +1,49 @@ +print(" Welcome To My Quiz Game \n Interesting Game to Play") +Player = input(" Do you want to play the game? \n" ) +if Player.lower() != 'yes': + print("Good Bye") + quit() + +name_player = input("Enter Your Name: ") + +print("Let's Start the Game :) ",name_player) + +score = 0 + +answer = input(' What is CPU stands for? \n ') +if answer.lower() == 'central processing unit': + print("Correct") + score += 1 +else: + print('Wrong') + +answer = input(' What is GPU stands for? \n ') +if answer.lower() == 'graphical processing unit': + print("Correct") + score += 1 +else: + print('Wrong') + +answer = input(' What is RAM stands for? \n ') +if answer.lower() == 'random access memory': + print("Correct") + score += 1 +else: + print('Wrong') + +answer = input(' What is ROM stands for? \n ') +if answer.lower() == 'read only memory': + print("Correct") + score += 1 +else: + print('Wrong') + +answer = input(' Mouse is an input device or output device? \n ') +if answer.lower() == 'input device': + print("Correct") + score += 1 +else: + print('Wrong') + +print("You got the " + str(score)+ " correct answers") +print("You got the " + str((score/5) *100)+ " correct answers") diff --git a/projects/Geocoding/README.md b/projects/Geocoding/README.md new file mode 100644 index 000000000..7c9bc8ed2 --- /dev/null +++ b/projects/Geocoding/README.md @@ -0,0 +1,9 @@ +## Geocoding Script + +### This script takes an address and return its latitude and longitude.This process is called geocoding + +#### I have used the locationiq website's geocoding api inorder to solve this problem. + +#### To be able to use this script you have to create a *free account* at https://locationiq.com/ and obtain your *private token*. + +#### Remember, *don't share* your private token with anyone. diff --git a/projects/Geocoding/geocoding.py b/projects/Geocoding/geocoding.py new file mode 100644 index 000000000..c923eec0e --- /dev/null +++ b/projects/Geocoding/geocoding.py @@ -0,0 +1,25 @@ +import requests + +# Base Url for geocoding +url = "https://us1.locationiq.com/v1/search.php" + +address = input("Input the address: ") + +#Your unique private_token should replace value of the private_token variable. +#To know how to obtain a unique private_token please refer the README file for this script. +private_token = "Your_private_token" + +data = { + 'key': private_token, + 'q': address, + 'format': 'json' +} + +response = requests.get(url, params=data) + +latitude = response.json()[0]['lat'] +longitude = response.json()[0]['lon'] + +print(f"The latitude of the given address is: {latitude}") +print(f"The longitude of the given address is: {longitude}") +print("Thanks for using this script") diff --git a/projects/Geocoding/requirements.txt b/projects/Geocoding/requirements.txt new file mode 100644 index 000000000..41e6aa31e --- /dev/null +++ b/projects/Geocoding/requirements.txt @@ -0,0 +1,5 @@ +certifi==2020.6.20 +chardet==3.0.4 +idna==2.10 +requests==2.24.0 +urllib3==1.26.5 diff --git a/projects/Get meta information of images/README.md b/projects/Get_meta_information_of_images/README.md similarity index 98% rename from projects/Get meta information of images/README.md rename to projects/Get_meta_information_of_images/README.md index 2ee65c016..705e39b98 100644 --- a/projects/Get meta information of images/README.md +++ b/projects/Get_meta_information_of_images/README.md @@ -11,4 +11,4 @@ Make sure the picture contains location information, otherwise the location cann you need fill in your email address to use the function in gps_utils.py: ```python geolocator = Nominatim(user_agent = "your email") -``` \ No newline at end of file +``` diff --git a/projects/Get meta information of images/author_utils.py b/projects/Get_meta_information_of_images/author_utils.py similarity index 100% rename from projects/Get meta information of images/author_utils.py rename to projects/Get_meta_information_of_images/author_utils.py diff --git a/projects/Get meta information of images/get_meta_from_pic.py b/projects/Get_meta_information_of_images/get_meta_from_pic.py similarity index 100% rename from projects/Get meta information of images/get_meta_from_pic.py rename to projects/Get_meta_information_of_images/get_meta_from_pic.py diff --git a/projects/Get meta information of images/gps_utils.py b/projects/Get_meta_information_of_images/gps_utils.py similarity index 97% rename from projects/Get meta information of images/gps_utils.py rename to projects/Get_meta_information_of_images/gps_utils.py index d89b4964c..3db3ac3d2 100644 --- a/projects/Get meta information of images/gps_utils.py +++ b/projects/Get_meta_information_of_images/gps_utils.py @@ -1,5 +1,5 @@ import exifread -import requests,json +import requests from geopy.geocoders import Nominatim def format_lati_long(data): diff --git a/projects/Get_meta_information_of_images/requirements.txt b/projects/Get_meta_information_of_images/requirements.txt new file mode 100644 index 000000000..05736ca0d --- /dev/null +++ b/projects/Get_meta_information_of_images/requirements.txt @@ -0,0 +1,3 @@ +PIL==1.1.6 +ExifRead==2.3.1 +geopy==2.0.0 diff --git a/projects/Get_wifi_password/README.md b/projects/Get_wifi_password/README.md new file mode 100644 index 000000000..25ee25e3d --- /dev/null +++ b/projects/Get_wifi_password/README.md @@ -0,0 +1,9 @@ +## WIFI PASSWORD EJECTOR +# Description +a simple python script that tells you the password of the wifi you're connected with + +# Requirements +just need to install python in your system. + +# How to run +run the file from your code editor or Ide or u can also run it from the command line diff --git a/projects/Get Wifi password/wifi.py b/projects/Get_wifi_password/wifi.py similarity index 96% rename from projects/Get Wifi password/wifi.py rename to projects/Get_wifi_password/wifi.py index ba9c5ad9a..6d44e4d6a 100644 --- a/projects/Get Wifi password/wifi.py +++ b/projects/Get_wifi_password/wifi.py @@ -1,20 +1,20 @@ -import subprocess - -data = ( - subprocess.check_output(["netsh", "wlan", "show", "profiles"]) - .decode("utf-8") - .split("\n") -) -profiles = [i.split(":")[1][1:-1] for i in data if "All User Profile" in i] -for i in profiles: - results = ( - subprocess - .check_output(["netsh", "wlan", "show", "profile", i, "key=clear"]) - .decode("utf-8") - .split("\n") - ) - results = [b.split(":")[1][1:-1] for b in results if "Key Content" in b] - try: - print("{:<30}| {:<}".format(i, results[0])) - except IndexError: - print("{:<30}| {:<}".format(i, "")) +import subprocess + +data = ( + subprocess.check_output(["netsh", "wlan", "show", "profiles"]) + .decode("utf-8") + .split("\n") +) +profiles = [i.split(":")[1][1:-1] for i in data if "All User Profile" in i] +for i in profiles: + results = ( + subprocess + .check_output(["netsh", "wlan", "show", "profile", i, "key=clear"]) + .decode("utf-8") + .split("\n") + ) + results = [b.split(":")[1][1:-1] for b in results if "Key Content" in b] + try: + print("{:<30}| {:<}".format(i, results[0])) + except IndexError: + print("{:<30}| {:<}".format(i, "")) diff --git a/projects/hashing passwords/README.md b/projects/Hashing_passwords/README.md similarity index 100% rename from projects/hashing passwords/README.md rename to projects/Hashing_passwords/README.md diff --git a/projects/hashing passwords/hashing_passwords.py b/projects/Hashing_passwords/hashing_passwords.py similarity index 100% rename from projects/hashing passwords/hashing_passwords.py rename to projects/Hashing_passwords/hashing_passwords.py diff --git a/projects/Hello/README.md b/projects/Hello/README.md new file mode 100644 index 000000000..095aca2d4 --- /dev/null +++ b/projects/Hello/README.md @@ -0,0 +1,23 @@ +# Hello + +This script is a good way to show how the print function work and it's usually every programmer's first line of code. The print() function prints the specified message to the screen. + +### Prerequisites + +Python installed locally. Check [here](https://www.python.org/downloads/) to install depending on your OS + +### How to run the script + +``` +python Hello.py +``` + +The final result will be printed on the screen as: + +``` +Hello Python World +``` + +## *Author Name* + +[Ravi Chavare](https://github.com/chavarera) diff --git a/projects/Image_watermark/README.md b/projects/Image_watermark/README.md new file mode 100644 index 000000000..350bae4e2 --- /dev/null +++ b/projects/Image_watermark/README.md @@ -0,0 +1,22 @@ +# Image-Watermark + +## Description + +This Project will take an image and add desired watermark to it. + +## About this Project + +This project uses PIL module and OS module to add the watermark. PIL, the Python Imaging Library, is an open source libary that enables the users to add, manipulate and save different file formats. + +## Usage + +Use the Script [watermark.py](https://github.com/Python-World/python-mini-projects/blob/master/projects/Image_watermark/watermark.py) . In the command line, Enter + +`python3 watermark.py [image_path]` + +Replace the `[image_path]` with the image you want to add watermark to. + +The output will be the image with desired watermark. + +## Author +[Mitesh](https://github.com/Mitesh2499) diff --git a/projects/Image_watermark/requirements.txt b/projects/Image_watermark/requirements.txt new file mode 100644 index 000000000..4bc341572 --- /dev/null +++ b/projects/Image_watermark/requirements.txt @@ -0,0 +1 @@ +PIL==1.1.6 diff --git a/projects/Image_watermark/watermark.py b/projects/Image_watermark/watermark.py new file mode 100644 index 000000000..7e329a77c --- /dev/null +++ b/projects/Image_watermark/watermark.py @@ -0,0 +1,45 @@ +import os +from PIL import Image + +def watermark_photo(input_image_path,watermark_image_path,output_image_path): + base_image = Image.open(input_image_path) + watermark = Image.open(watermark_image_path).convert("RGBA") + # add watermark to your image + position = base_image.size + newsize = (int(position[0]*8/100),int(position[0]*8/100)) + # print(position) + watermark = watermark.resize(newsize) + # print(newsize) + # return watermark + + new_position = position[0]-newsize[0]-20,position[1]-newsize[1]-20 + # create a new transparent image + transparent = Image.new(mode='RGBA',size=position,color=(0,0,0,0)) + # paste the original image + transparent.paste(base_image,(0,0)) + # paste the watermark image + transparent.paste(watermark,new_position,watermark) + image_mode = base_image.mode + print(image_mode) + if image_mode == 'RGB': + transparent = transparent.convert(image_mode) + else: + transparent = transparent.convert('P') + transparent.save(output_image_path,optimize=True,quality=100) + print("Saving"+output_image_path+"...") + +folder = input("Enter Folder Path:") +watermark = input("Enter Watermark Path:") +os.chdir(folder) +files = os.listdir(os.getcwd()) +print(files) + +if not os.path.isdir("output"): + os.mkdir("output") + +c = 1 +for f in files: + if os.path.isfile(os.path.abspath(f)): + if f.endswith(".png") or f.endswith(".jpg"): + watermark_photo(f,watermark,"output/"+f) + diff --git a/projects/InstagramProfile/InstgramProfile.py b/projects/Instagram_profile/InstgramProfile.py similarity index 100% rename from projects/InstagramProfile/InstgramProfile.py rename to projects/Instagram_profile/InstgramProfile.py diff --git a/projects/InstagramProfile/Readme.md b/projects/Instagram_profile/Readme.md similarity index 76% rename from projects/InstagramProfile/Readme.md rename to projects/Instagram_profile/Readme.md index a8a72998a..5375b9c9f 100644 --- a/projects/InstagramProfile/Readme.md +++ b/projects/Instagram_profile/Readme.md @@ -8,4 +8,9 @@ pip install -r requirements.txt ### Execute Program ``` python InstgramProfile.py -``` \ No newline at end of file +``` + +### Sample run + + + diff --git a/projects/Instagram_profile/main.py b/projects/Instagram_profile/main.py new file mode 100644 index 000000000..d39b4ee34 --- /dev/null +++ b/projects/Instagram_profile/main.py @@ -0,0 +1,62 @@ +import requests +from lxml import html +import re +import sys +import pprint +from profilepic import pp_download + +def banner(): + print('\t""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""') + print('\t InstgramProfile data graber ') + print('\t""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""') + + +def main(username): + banner() + '''main function accept instagram username + return an dictionary object containging profile deatils + ''' + + url = "https://www.instagram.com/{}/?hl=en".format(username) + page = requests.get(url) + tree = html.fromstring(page.content) + data = tree.xpath('//meta[starts-with(@name,"description")]/@content') + + if data: + data = tree.xpath('//meta[starts-with(@name,"description")]/@content') + data = data[0].split(', ') + followers = data[0][:-9].strip() + following = data[1][:-9].strip() + posts = re.findall(r'\d+[,]*', data[2])[0] + name = re.findall(r'name":"([^"]+)"', page.text)[0] + aboutinfo = re.findall(r'"description":"([^"]+)"', page.text)[0] + instagram_profile = { + 'success': True, + 'profile': { + 'name': name, + 'profileurl': url, + 'username': username, + 'followers': followers, + 'following': following, + 'posts': posts, + 'aboutinfo': aboutinfo + } + } + else: + instagram_profile = { + 'success': False, + 'profile': {} + } + return instagram_profile + + +# python main.py username +if __name__ == "__main__": + + if len(sys.argv) == 2: + output = main(sys.argv[-1]) + pp_download(sys.argv[-1]) + pprint.pprint(output) + + else: + print('Invalid paramaters Valid Command \n\tUsage : python main.py username') diff --git a/projects/Instagram_profile/output.png b/projects/Instagram_profile/output.png new file mode 100644 index 000000000..253e2e17b Binary files /dev/null and b/projects/Instagram_profile/output.png differ diff --git a/projects/Instagram_profile/profilepic.py b/projects/Instagram_profile/profilepic.py new file mode 100644 index 000000000..b5061d9b4 --- /dev/null +++ b/projects/Instagram_profile/profilepic.py @@ -0,0 +1,59 @@ +from tqdm import tqdm +import requests +import re +from PIL import Image + + +#Function to download profile picture of instagram accounts +def pp_download(username): + + url = "https://www.instagram.com/{}/".format(username) + x = re.match(r'^(https:)[/][/]www.([^/]+[.])*instagram.com', url) + + if x: + check_url1 = re.match(r'^(https:)[/][/]www.([^/]+[.])*instagram.com[/].*\?hl=[a-z-]{2,5}', url) + check_url2 = re.match(r'^(https:)[/][/]www.([^/]+[.])*instagram.com$|^(https:)[/][/]www.([^/]+[.])*instagram.com/$', url) + check_url3 = re.match(r'^(https:)[/][/]www.([^/]+[.])*instagram.com[/][a-zA-Z0-9_]{1,}$', url) + check_url4 = re.match(r'^(https:)[/][/]www.([^/]+[.])*instagram.com[/][a-zA-Z0-9_]{1,}[/]$', url) + + if check_url3: + final_url = url + '/?__a=1' + + if check_url4: + final_url = url + '?__a=1' + + if check_url2: + final_url = print("Please enter an URL related to a profile") + exit() + + if check_url1: + alpha = check_url1.group() + final_url = re.sub('\\?hl=[a-z-]{2,5}', '?__a=1', alpha) + + try: + if check_url3 or check_url4 or check_url2 or check_url1: + req = requests.get(final_url) + get_status = requests.get(final_url).status_code + get_content = req.content.decode('utf-8') + + if get_status == 200: + print("\nDownloading the image...") + find_pp = re.search(r'profile_pic_url_hd\":\"([^\'\" >]+)', get_content) + pp_link = find_pp.group() + pp_final = re.sub('profile_pic_url_hd":"', '', pp_link) + file_size_request = requests.get(pp_final, stream=True) + file_size = int(file_size_request.headers['Content-Length']) + block_size = 1024 + t=tqdm(total=file_size, unit='B', unit_scale=True, desc=username, ascii=True) + with open(username + '.jpg', 'wb') as f: + for data in file_size_request.iter_content(block_size): + t.update(len(data)) + f.write(data) + t.close() + #Show image + im = Image.open(username +".jpg") + im.show() + print("Profile picture downloaded successfully") + + except Exception: + print('error') \ No newline at end of file diff --git a/projects/Instagram_profile/requirements.txt b/projects/Instagram_profile/requirements.txt new file mode 100644 index 000000000..37b743900 --- /dev/null +++ b/projects/Instagram_profile/requirements.txt @@ -0,0 +1,29 @@ +appdirs==1.4.3 +beautifulsoup4==4.9.2 +bs4==0.0.1 +CacheControl==0.12.6 +certifi==2019.11.28 +chardet==3.0.4 +colorama==0.4.3 +contextlib2==0.6.0 +distlib==0.3.0 +distro==1.4.0 +html5lib==1.0.1 +idna==2.8 +ipaddr==2.2.0 +lockfile==0.12.2 +lxml==4.6.3 +msgpack==0.6.2 +packaging==20.3 +pep517==0.8.2 +Pillow==8.3.2 +progress==1.5 +pyparsing==2.4.6 +pytoml==0.1.21 +requests==2.22.0 +retrying==1.3.3 +six==1.14.0 +soupsieve==2.0.1 +tqdm==4.50.0 +urllib3==1.26.5 +webencodings==0.5.1 diff --git a/projects/Internet_connection_check/README.md b/projects/Internet_connection_check/README.md new file mode 100644 index 000000000..fd6e5cb69 --- /dev/null +++ b/projects/Internet_connection_check/README.md @@ -0,0 +1,20 @@ +# Internet Connection Check + +A small python script to check internet connectivity. + +### Prerequisites + +Python3 + +### How to run the script + +> python3 internet_connection_check.py + +### Screenshot/GIF showing the sample use of the script + +![output](https://github.com/AshuSharma7/python-mini-projects/raw/master/projects/Internet_connection_check/output.png) + +## *Author Name* + +[Ashu Sharma](https://github.com/AshuSharma7) +[Jacob Ogle](https://github.com/JakeOgle94) diff --git a/projects/Internet_connection_check/internet_connection_check.py b/projects/Internet_connection_check/internet_connection_check.py new file mode 100644 index 000000000..d6b08790d --- /dev/null +++ b/projects/Internet_connection_check/internet_connection_check.py @@ -0,0 +1,23 @@ +import requests +from requests.exceptions import ConnectionError + +def internet_connection_test(): + url = 'https://www.google.com/' + print(f'Attempting to connect to {url} to determine internet connection status.') + + try: + print(url) + resp = requests.get(url, timeout = 10) + resp.text + resp.status_code + print(f'Connection to {url} was successful.') + return True + except ConnectionError as e: + requests.ConnectionError + print(f'Failed to connect to {url}.') + return False + except: + print(f'Failed with unparsed reason.') + return False + +internet_connection_test() diff --git a/projects/Internet_connection_check/output.png b/projects/Internet_connection_check/output.png new file mode 100644 index 000000000..09edf6d21 Binary files /dev/null and b/projects/Internet_connection_check/output.png differ diff --git a/projects/Language_translator/README.md b/projects/Language_translator/README.md new file mode 100644 index 000000000..1ab14cae7 --- /dev/null +++ b/projects/Language_translator/README.md @@ -0,0 +1,41 @@ +# Google Translater Scripts + +Transalte one language to another language + +### Requirements +- you need to install below library using pip +- $ pip install googletrans +### Description +- There are 16 languages you can translate into. + +### How to run the script +Execute `python3 python translator.py` +- After then you have choices to select language by their code +- Enter Sentence and you will get translated language + +### Language options and their code +| Code | Language | +| ----------- | ----------- | +| bn | Bangla | +| en | English | +| ko | Koren | +| fr | French | +| de | German | +| he | Hebrew | +| hi | Hindi | +| it | Italian | +| ja | Japanese | +| la | Latin | +| ms | Malay | +| ne | Nepali | +| ru | Russian | +| ar | Arabic | +| zh | Chinese | +| es | Spanish | + + +### Screenshot shows how to use the script +![Screenshot of the Language_translator.py file](https://github.com/Python-World/python-mini-projects/blob/master/projects/Language_translator/Shot.png) + +## *Author Name* +[Ashiqur Rahman Tusher](https://github.com/ashikurt77) diff --git a/projects/Language_translator/Shot.png b/projects/Language_translator/Shot.png new file mode 100644 index 000000000..bf9843517 Binary files /dev/null and b/projects/Language_translator/Shot.png differ diff --git a/projects/Language_translator/requirements.txt b/projects/Language_translator/requirements.txt new file mode 100644 index 000000000..82ab20173 --- /dev/null +++ b/projects/Language_translator/requirements.txt @@ -0,0 +1 @@ +googletrans==3.0.0 diff --git a/projects/Language_translator/translator.py b/projects/Language_translator/translator.py new file mode 100644 index 000000000..e0c7cb4ac --- /dev/null +++ b/projects/Language_translator/translator.py @@ -0,0 +1,62 @@ +from googletrans import Translator + +translator = Translator() + +language = {"bn": "Bangla", + "en": "English", + "ko": "Koren", + "fr": "French", + "de": "German", + "he": "Hebrew", + "hi": "Hindi", + "it": "Italian", + "ja": "Japanese", + 'la': "Latin", + "ms": "Malay", + "ne": "Nepali", + "ru": "Russian", + "ar": "Arabic", + "zh": "Chinese", + "es": "Spanish" + } + +allow = True # variable to control correct language code input + +while allow: # checking if language code is valid + + user_code = input( + f"Please input desired language code. To see the language code list enter 'options' \n") + + if user_code == "options": # showing language options + print("Code : Language") # Heading of language option menu + for i in language.items(): + print(f"{i[0]} => {i[1]}") + print() # adding an empty space + + else: # validating user input + for lan_code in language.keys(): + if lan_code == user_code: + print(f"You have selected {language[lan_code]}") + allow = False + if allow: + print("It's not a valid language code!") + +while True: # starting translation loop + string = input( + "\nWrite the text you want to translate: \nTo exit the program write 'close'\n") + + if string == "close": # exit program command + print(f"\nHave a nice Day!") + break + + # translating method from googletrans + translated = translator.translate(string, dest=user_code) + + # printing translation + print(f"\n{language[user_code]} translation: {translated.text}") + # printing pronunciation + print(f"Pronunciation : {translated.pronunciation}") + + for i in language.items(): # checking if the source language is listed on language dict and printing it + if translated.src == i[0]: + print(f"Translated from : {i[1]}") diff --git a/projects/Leap_Year_Checker/README.md b/projects/Leap_Year_Checker/README.md new file mode 100644 index 000000000..636aa2092 --- /dev/null +++ b/projects/Leap_Year_Checker/README.md @@ -0,0 +1,13 @@ +# Script Title + +With the help of this program, you can check whether a year is leap year or not. +### Prerequisites + +No pre-requisites are required...😀😀 +### How to run the script + +You can run this on any ide or online compiler. + +## *Author Name* + +[Hariom1509](https://github.com/Hariom1509) diff --git a/projects/Leap_Year_Checker/leapyear.py b/projects/Leap_Year_Checker/leapyear.py new file mode 100644 index 000000000..4b1fb3470 --- /dev/null +++ b/projects/Leap_Year_Checker/leapyear.py @@ -0,0 +1,12 @@ +year = int(input("Enter a year:- ")) # Here, you take the input from the user + +if(((year % 4 == 0) and (year % 100 != 0)) or (year % 400 == 0)): + """ + if a year is a multiple of four and a multiple of 100 i.e. if it is a multiple of 400 it is not a leap year + """ + print("{0} is a leap year!!".format(year)) + """ + printing the output + """ +else: + print("{0} is not a leap year!!".format(year)) diff --git a/projects/MasterMind/Mastermind_GUIinterface.py b/projects/MasterMind/Mastermind_GUIinterface.py new file mode 100644 index 000000000..53ec32c2f --- /dev/null +++ b/projects/MasterMind/Mastermind_GUIinterface.py @@ -0,0 +1,99 @@ +from tkinter import * +class medium: + def user(self,color): # takes user' choice + self.color=color + def __init__(self): # generates random palette + a=['#270101', '#F08B33', '#776B04', '#F1B848', '#8F715B', '#0486DB', '#C1403D', '#F3D4A0'] + import random + self.b=[];n=4; + while n!=0: + p=random.choice(a) + if p not in self.b: + self.b.append(p) + n-=1 + def compare(self,g,l1): + l=[] # hints + for x in range(4): + if l1[x]==g[x]: + l.append('red') + elif l1[x]in g: + l.append('gray') + return l +class MasterMind(): + def __init__(self, root): + obj=medium() + self.gen=obj.b # generated color combo + self.colors = ['#270101', '#F08B33', '#776B04', '#F1B848', '#8F715B', '#0486DB', '#C1403D', '#F3D4A0'] + root.geometry('390x600') + for y in range(20): + Grid.rowconfigure(root, y, weight=1) + for x in range(8): + Grid.columnconfigure(root, x, weight=1) + self.palette = [] # display of palette + n,c=0,0 + for i in self.colors: + self.palette.append(Button(root, bg=i, height=1, width=5, relief=SUNKEN)) + self.palette[n].grid(row=20, column=c) + n+=1;c+=1; + self.palette[0].config(command=lambda: self.guess(root, self.palette[0]['bg'],obj)) # binding function to palette + self.palette[1].config(command=lambda: self.guess(root, self.palette[1]['bg'],obj)) + self.palette[2].config(command=lambda: self.guess(root, self.palette[2]['bg'],obj)) + self.palette[3].config(command=lambda: self.guess(root, self.palette[3]['bg'],obj)) + self.palette[4].config(command=lambda: self.guess(root, self.palette[4]['bg'],obj)) + self.palette[5].config(command=lambda: self.guess(root, self.palette[5]['bg'],obj)) + self.palette[6].config(command=lambda: self.guess(root, self.palette[6]['bg'],obj)) + self.palette[7].config(command=lambda: self.guess(root, self.palette[7]['bg'],obj)) + self.user_choice = [] # stores the widget + self.code = [] # stores the colors + self.key = [] # stores the hints + global ccol, cro + ccol,cro = 2,19 + def guess(self, root, choice,obj): + global ccol + global cro + f=True # boolean flag + if cro != 1: + self.user_choice.append(Button(root, bg=choice, height=1, width=5, relief=RAISED)) + if len(self.user_choice) < 4: + self.user_choice[-1].grid(row=cro, column=ccol) + self.code.append(self.user_choice[-1]['bg']) + ccol += 1 + elif len(self.user_choice) == 4: + self.user_choice[-1].grid(row=cro, column=ccol) + self.code.append(self.user_choice[-1]['bg']) + ccol += 1 + ccol = 2 + cro = cro-1 + obj.user(self.code) # send the user's choice + self.key=obj.compare(self.code,self.gen) #get the hints + if self.key==['red','red','red','red']: + f=False + self.hint(root, self.key) + l=Label(root,text="CONGRATULATIONS!!!") + l.grid(row=0,columnspan=8) + else: + self.hint(root, self.key) + self.code = [] + self.user_choice = [] + else: + if f: + l=Label(root,text="You are a LOSER!!!! ANSWER:") + l.grid(row=0,columnspan=4) + c=5 + for i in self.gen: + b=Button(root,bg=i,height=1, width=5, relief=SUNKEN) + b.grid(row=0,column=c) + c+=1 + global hcol, hro + hcol,hro = 8,19 + def hint(self, root, key): + global hcol, hro + a = [] + for i in key: + a.append(Label(root, bg=i,relief=SUNKEN)) + a[-1].grid(row=hro, column=hcol, sticky=E) + hcol += 1 + hro -= 1;hcol = 8; +master = Tk() +M = MasterMind(master) +master.mainloop() diff --git a/projects/MasterMind/README.md b/projects/MasterMind/README.md new file mode 100644 index 000000000..e37e4c71e --- /dev/null +++ b/projects/MasterMind/README.md @@ -0,0 +1,18 @@ +#100LinesOfCode +----------------------------- + +**MASTERMIND GAME** + +The Python program uses tkinter interface to create a GUI-based simulation of the MasterMind game. + +Refer to the link to understand the rules of the game: +https://www.wikihow.com/Play-Mastermind + +System Specifications: python3.8, Ubuntu 20.04 + +Dependencies: tkinter (*$ sudo apt-get install python3-tk*) + +![Mastermind](https://user-images.githubusercontent.com/48058736/130399281-0d43b5d3-82b7-4ad1-97d9-3dd71e60aa7c.png) + +## Author Name +[Akshaya Visvanathan](https://github.com/aksvisu) \ No newline at end of file diff --git a/projects/Merge_csv_files/README.md b/projects/Merge_csv_files/README.md new file mode 100644 index 000000000..198408973 --- /dev/null +++ b/projects/Merge_csv_files/README.md @@ -0,0 +1,16 @@ +# Merge CSV files +With the help of the following simple python script, one would be able to merge CSV files present in the directory. + +## Dependencies +Requires Python 3 and `pandas` + +Install requirements: `pip install -r "requirements.txt"` +OR +Install pandas: `pip install pandas` + +## How to use +### Running +Put all the CSVs which are to be merged in a directory containing the script. +either run it from your code editor or IDE or type `python merge_csv_files.py` in your command line. + +The final output would be a `combined_csv.csv` file in the same directory. diff --git a/projects/Merge_csv_files/merge_csv_files.py b/projects/Merge_csv_files/merge_csv_files.py new file mode 100644 index 000000000..6b12e3e0e --- /dev/null +++ b/projects/Merge_csv_files/merge_csv_files.py @@ -0,0 +1,8 @@ +import glob +import pandas as pd + +extension = 'csv' +all_filenames = [i for i in glob.glob('*.{}'.format(extension))] + +combined_csv = pd.concat([pd.read_csv(f) for f in all_filenames ]) +combined_csv.to_csv( "combined_csv.csv", index=False, encoding='utf-8-sig') diff --git a/projects/Merge_csv_files/requirements.txt b/projects/Merge_csv_files/requirements.txt new file mode 100644 index 000000000..684864f2b --- /dev/null +++ b/projects/Merge_csv_files/requirements.txt @@ -0,0 +1 @@ +pandas==1.1.0 diff --git a/projects/Merge_pdfs/README.md b/projects/Merge_pdfs/README.md new file mode 100644 index 000000000..5fd73297f --- /dev/null +++ b/projects/Merge_pdfs/README.md @@ -0,0 +1,15 @@ +## Merge_pdfs + +A simple python script which when executed merges two pdfs + +## Prerequisites + +Run - "pip install PyPDF2" + +## How to run the script + +It can be executed by running "python merge_pdfs.py" + +## Author Name + +[ShivSt](https://github.com/ShivSt) diff --git a/projects/Merge_pdfs/merge_pdfs.py b/projects/Merge_pdfs/merge_pdfs.py new file mode 100644 index 000000000..ff732968b --- /dev/null +++ b/projects/Merge_pdfs/merge_pdfs.py @@ -0,0 +1,28 @@ +#!/usr/bin/env python + +from PyPDF2 import PdfFileMerger + + +# By appending in the end +def by_appending(): + merger = PdfFileMerger() + # Either provide file stream + f1 = open("samplePdf1.pdf", "rb") + merger.append(f1) + # Or direct file path + merger.append("samplePdf2.pdf") + + merger.write("mergedPdf.pdf") + + +# By inserting at after an specified page no. +def by_inserting(): + merger = PdfFileMerger() + merger.append("samplePdf1.pdf") + merger.merge(0, "samplePdf2.pdf") + merger.write("mergedPdf1.pdf") + + +if __name__ == "__main__": + by_appending() + by_inserting() diff --git a/projects/Merge_pdfs/mergedPdf.pdf b/projects/Merge_pdfs/mergedPdf.pdf new file mode 100644 index 000000000..f2f046d1b Binary files /dev/null and b/projects/Merge_pdfs/mergedPdf.pdf differ diff --git a/projects/Merge_pdfs/mergedPdf1.pdf b/projects/Merge_pdfs/mergedPdf1.pdf new file mode 100644 index 000000000..b26a95829 Binary files /dev/null and b/projects/Merge_pdfs/mergedPdf1.pdf differ diff --git a/projects/Merge_pdfs/requirements.txt b/projects/Merge_pdfs/requirements.txt new file mode 100644 index 000000000..eed5b3f3e --- /dev/null +++ b/projects/Merge_pdfs/requirements.txt @@ -0,0 +1 @@ +PyPDF2==1.26.0 diff --git a/projects/Merge_pdfs/samplePdf1.pdf b/projects/Merge_pdfs/samplePdf1.pdf new file mode 100644 index 000000000..a7ea0027c Binary files /dev/null and b/projects/Merge_pdfs/samplePdf1.pdf differ diff --git a/projects/Merge_pdfs/samplePdf2.pdf b/projects/Merge_pdfs/samplePdf2.pdf new file mode 100644 index 000000000..f698ff53d Binary files /dev/null and b/projects/Merge_pdfs/samplePdf2.pdf differ diff --git a/projects/Movie Information Scraper/README.md b/projects/Movie Information Scraper/README.md new file mode 100644 index 000000000..3db07cfd1 --- /dev/null +++ b/projects/Movie Information Scraper/README.md @@ -0,0 +1,17 @@ +# Movie Information Scraper +This script obtains movie details by scraping IMDB website. + +### Prerequisites +* beautifulsoup4 +* requests +* Run `pip install -r requirements.txt` to install required external modules. + +### How to run the script +Execute `python3 movieInfoScraper.py` and type in the movie name when prompted. + +### Screenshot/GIF showing the sample use of the script + +![Screenshot of the Output](Screenshot.png) + +## Author Name +[Anandha Krishnan Aji](https://github.com/anandhakrishnanaji) diff --git a/projects/Movie Information Scraper/Screenshot.png b/projects/Movie Information Scraper/Screenshot.png new file mode 100644 index 000000000..1ab62f30a Binary files /dev/null and b/projects/Movie Information Scraper/Screenshot.png differ diff --git a/projects/Movie Information Scraper/movieInfoScraper.py b/projects/Movie Information Scraper/movieInfoScraper.py new file mode 100644 index 000000000..a822b37bf --- /dev/null +++ b/projects/Movie Information Scraper/movieInfoScraper.py @@ -0,0 +1,100 @@ +from bs4 import BeautifulSoup +import requests + +# Function to get Movie Details + + +def getMovieDetails(movieName): + # Base URL of IMDB website + url = 'https://www.imdb.com' + + # Query to find movie title + query = '/search/title?title=' + + # Empty dictionary to store movie Details + movieDetails = {} + + # Query formed + movienamequery = query+'+'.join(movieName.strip().split(' ')) + + # WebPage is obtained and parsed + html = requests.get(url+movienamequery+'&title_type=feature') + bs = BeautifulSoup(html.text, 'html.parser') + + # Gets the first movie that appears in title section + result = bs.find('h3', {'class': 'lister-item-header'}) + + if result is None: + return None + + movielink = url+result.a.attrs['href'] + movieDetails['name'] = result.a.text + + # Gets the page with movie details + html = requests.get(movielink) + bs = BeautifulSoup(html.text, 'html.parser') + # Year + try: + movieDetails['year'] = bs.find('span', {'id': 'titleYear'}).a.text + except AttributeError: + movieDetails['year'] = 'Not available' + subtext = bs.find('div', {'class': 'subtext'}) + + # Rating,Genres,Runtime,Release Date, + + movieDetails['genres'] = [ + i.text for i in subtext.findAll('a', {'title': None})] + try: + movieDetails['rating'] = bs.find( + 'div', {'class': 'ratingValue'}).span.text + movieDetails['runtime'] = subtext.time.text.strip() + except AttributeError: + movieDetails['rating'] = 'Not yet rated' + movieDetails['runtime'] = 'Not available' + movieDetails['release_date'] = subtext.find( + 'a', {'title': 'See more release dates'}).text.strip() + + # Gets the credit section of the page + creditSummary = bs.findAll('div', {'class': 'credit_summary_item'}) + + # Directors,Writers and Cast + movieDetails['directors'] = [i.text for i in creditSummary[0].findAll('a')] + movieDetails['writers'] = [i.text for i in creditSummary[1].findAll( + 'a') if 'name' in i.attrs['href']] + try: + movieDetails['cast'] = [i.text for i in creditSummary[2].findAll( + 'a') if 'name' in i.attrs['href']] + + # For some films, writer details are not provided + except IndexError: + movieDetails['cast']=movieDetails['writers'] + movieDetails['writers']='Not found' + + # The plot is seperate AJAX call and does not come in the html page, So one more request to plotsummary page + html = requests.get(movielink+'plotsummary') + bs = BeautifulSoup(html.text, 'html.parser') + + # Plot + movieDetails['plot'] = bs.find( + 'li', {'class': 'ipl-zebra-list__item'}).p.text.strip() + + # Returns the dictionary with movie details + return movieDetails + + +if __name__ == "__main__": + movieName = input('Enter the movie name whose details are to be fetched\n') + movieDetails = getMovieDetails(movieName) + if movieDetails is None: + print('No movie of this name found !!!!!') + quit() + print('\n{movie} ({year})'.format( + movie=movieDetails['name'], year=movieDetails['year'])) + print('Rating:', movieDetails['rating']) + print('Runtime:', movieDetails['runtime']) + print('Release Date:', movieDetails['release_date']) + print('Genres:', ', '.join(movieDetails['genres'])) + print('Director:', ', '.join(movieDetails['directors'])) + print('Writer:', ', '.join(movieDetails['writers'])) + print('Cast:', ', '.join(movieDetails['cast'])) + print('Plot Summary:\n', movieDetails['plot']) diff --git a/projects/Movie Information Scraper/requirements.txt b/projects/Movie Information Scraper/requirements.txt new file mode 100644 index 000000000..e12350e27 --- /dev/null +++ b/projects/Movie Information Scraper/requirements.txt @@ -0,0 +1,2 @@ +beautifulsoup4 +requests==2.23.0 diff --git a/projects/Multi_language_OCR/README.MD b/projects/Multi_language_OCR/README.MD new file mode 100644 index 000000000..ba77dab0c --- /dev/null +++ b/projects/Multi_language_OCR/README.MD @@ -0,0 +1,27 @@ +# Script Title + +Multi language OCR example + +### Prerequisites + +```shell +pip install agentocr==1.3.0 +pip install onnxruntime==1.8.1 +``` +or +```shell +pip install -r ./projects/Multi_language_OCR/requirements.txt +``` +### How to run the script + +Execute `python3 multi_language_OCR.py` + +If you need complete operation documents, you can refer to [AgentOCR advanced tutorial](https://github.com/AgentMaker/AgentOCR) + +### Screenshot/GIF showing the sample use of the script + +![Screenshot of the Output](Screenshot.png) + +## *Author Name* + +[GT-ZhangAcer](https://github.com/GT-ZhangAcer) diff --git a/projects/Multi_language_OCR/multi_language_OCR.py b/projects/Multi_language_OCR/multi_language_OCR.py new file mode 100644 index 000000000..3ef4dbde2 --- /dev/null +++ b/projects/Multi_language_OCR/multi_language_OCR.py @@ -0,0 +1,63 @@ +# Author: Acer Zhang +# Datetime: 2021/9/14 +# Copyright belongs to the author. +# Please indicate the source for reprinting. + +language = """ +Language Abbreviation Language Abbreviation +Chinese & English ch Arabic ar +English en Hindi hi +French fr Uyghur ug +German german Persian fa +Japan japan Urdu ur +Korean korean Serbian(latin) rs_latin +Chinese Traditional chinese_cht Occitan oc +Italian it Marathi mr +Spanish es Nepali ne +Portuguese pt Serbian(cyrillic) rs_cyrillic +Russia ru Bulgarian bg +Ukranian uk Estonian et +Belarusian be Irish ga +Telugu te Croatian hr +Saudi Arabia sa Hungarian hu +Tamil ta Indonesian id +Afrikaans af Icelandic is +Azerbaijani az Kurdish ku +Bosnian bs Lithuanian lt +Czech cs Latvian lv +Welsh cy Maori mi +Danish da Malay ms +Maltese mt Adyghe ady +Dutch nl Kabardian kbd +Norwegian no Avar ava +Polish pl Dargwa dar +Romanian ro Ingush inh +Slovak sk Lak lbe +Slovenian sl Lezghian lez +Albanian sq Tabassaran tab +Swedish sv Bihari bh +Swahili sw Maithili mai +Tagalog tl Angika ang +Turkish tr Bhojpuri bho +Uzbek uz Magahi mah +Vietnamese vi Nagpur sck +Mongolian mn Newari new +Abaza abq Goan Konkani gom +""" + +# Import AgentOCR python module +from agentocr import OCRSystem + +# Choose OCR language +print(language) +config = input("Please enter the language you want to recognize:") +# Init OCRSystem +ocr = OCRSystem(config=config) +print("OCR system Initialization complete!") + +# Start OCR! +while True: + img = input("Please enter the path where the picture file is located:") + results = ocr.ocr(img) + for info in results: + print(info) \ No newline at end of file diff --git a/projects/Multi_language_OCR/requirements.txt b/projects/Multi_language_OCR/requirements.txt new file mode 100644 index 000000000..8bc1defe5 --- /dev/null +++ b/projects/Multi_language_OCR/requirements.txt @@ -0,0 +1,2 @@ +agentocr==1.3.0 +onnxruntime==1.8.1 diff --git a/projects/Network Usage Tracker/Images/1.jpg b/projects/Network Usage Tracker/Images/1.jpg new file mode 100644 index 000000000..001495bf6 Binary files /dev/null and b/projects/Network Usage Tracker/Images/1.jpg differ diff --git a/projects/Network Usage Tracker/Images/2.jpg b/projects/Network Usage Tracker/Images/2.jpg new file mode 100644 index 000000000..a271024d7 Binary files /dev/null and b/projects/Network Usage Tracker/Images/2.jpg differ diff --git a/projects/Network Usage Tracker/Images/3.jpg b/projects/Network Usage Tracker/Images/3.jpg new file mode 100644 index 000000000..7049c907e Binary files /dev/null and b/projects/Network Usage Tracker/Images/3.jpg differ diff --git a/projects/Network Usage Tracker/Images/4.jpg b/projects/Network Usage Tracker/Images/4.jpg new file mode 100644 index 000000000..d6337a20c Binary files /dev/null and b/projects/Network Usage Tracker/Images/4.jpg differ diff --git a/projects/Network Usage Tracker/Images/5.jpg b/projects/Network Usage Tracker/Images/5.jpg new file mode 100644 index 000000000..e416d1f0d Binary files /dev/null and b/projects/Network Usage Tracker/Images/5.jpg differ diff --git a/projects/Network Usage Tracker/Images/6.jpg b/projects/Network Usage Tracker/Images/6.jpg new file mode 100644 index 000000000..974321ebf Binary files /dev/null and b/projects/Network Usage Tracker/Images/6.jpg differ diff --git a/projects/Network Usage Tracker/Images/7.jpg b/projects/Network Usage Tracker/Images/7.jpg new file mode 100644 index 000000000..a667c44e6 Binary files /dev/null and b/projects/Network Usage Tracker/Images/7.jpg differ diff --git a/projects/Network Usage Tracker/Images/8.jpg b/projects/Network Usage Tracker/Images/8.jpg new file mode 100644 index 000000000..e1aa1c501 Binary files /dev/null and b/projects/Network Usage Tracker/Images/8.jpg differ diff --git a/projects/Network Usage Tracker/Images/front.png b/projects/Network Usage Tracker/Images/front.png new file mode 100644 index 000000000..853e2f377 Binary files /dev/null and b/projects/Network Usage Tracker/Images/front.png differ diff --git a/projects/Network Usage Tracker/README.md b/projects/Network Usage Tracker/README.md new file mode 100644 index 000000000..8f5421f46 --- /dev/null +++ b/projects/Network Usage Tracker/README.md @@ -0,0 +1,26 @@ +# Script Title +- A "Network Usage Tracker" is an application created in python with tkinter gui. +- In this application, user gets the usage of network in his/her PC or computer at every instant. +- Here user will be given a MAX LIMIT of network usage, and if user crosses that max limit, user willl be notified for the same. +- Also user will be able to see the connection status and the IP address related to the same. + +### Prerequisites +```pip install -r requirements.txt``` + +### How to run the script +- Just clone the code file, and network_usage_tracker.py on local system. +- Then the script will start running and user can monitor the network usage and check if it exceeds the max limit or not. + +### Screenshot/GIF showing the sample use of the script +

    +
    +
    +
    +
    +
    +
    +
    +
    +

    +## *Author Name* +Akash Rajak \ No newline at end of file diff --git a/projects/Network Usage Tracker/network_usage_tracker.py b/projects/Network Usage Tracker/network_usage_tracker.py new file mode 100644 index 000000000..9b860f507 --- /dev/null +++ b/projects/Network Usage Tracker/network_usage_tracker.py @@ -0,0 +1,114 @@ + +# NETWORK USAGE TRACKER + +# imported necessary library +from tkinter import * +import tkinter as tk +import tkinter.messagebox as mbox +from pil import ImageTk, Image +import time +import psutil +import socket + +# Main Window & Configuration +window1 = tk.Tk() # created a tkinter gui window frame +window1.title("Network Usage Tracker") # title given is "DICTIONARY" +window1.geometry('1000x700') + +# top label +start1 = tk.Label(text = "NETWORK USAGE\nTRACKER", font=("Arial", 55,"underline"), fg="magenta") # same way bg +start1.place(x = 150, y = 10) + +def start_fun(): + window1.destroy() + +# start button created +startb = Button(window1, text="START",command=start_fun,font=("Arial", 25), bg = "orange", fg = "blue", borderwidth=3, relief="raised") +startb.place(x =130 , y =590 ) + +# image on the main window +path = "Images/front.png" +# Creates a Tkinter-compatible photo image, which can be used everywhere Tkinter expects an image object. +img1 = ImageTk.PhotoImage(Image.open(path)) +# The Label widget is a standard Tkinter widget used to display a text or image on the screen. +panel = tk.Label(window1, image = img1) +panel.place(x = 320, y = 200) + +# function created for exiting +def exit_win(): + if mbox.askokcancel("Exit", "Do you want to exit?"): + window1.destroy() + +# exit button created +exitb = Button(window1, text="EXIT",command=exit_win,font=("Arial", 25), bg = "red", fg = "blue", borderwidth=3, relief="raised") +exitb.place(x =730 , y = 590 ) +window1.protocol("WM_DELETE_WINDOW", exit_win) +window1.mainloop() + +# main window created +window = Tk() +window.title("Network Usage Tracker") +window.geometry("1000x700") + +# top label +top1 = Label(window, text="NETWORK USAGE\nTRACKER", font=("Arial", 50,'underline'), fg="magenta") +top1.place(x = 190, y = 10) + +top1 = Label(window, text="MAX LIMIT : 1 MB/sec", font=("Arial", 50), fg="green") +top1.place(x = 130, y = 180) + +# text area +path_text = Text(window, height=1, width=24, font=("Arial", 50), bg="white", fg="blue",borderwidth=2, relief="solid") +path_text.place(x=50, y = 300) + +# l1 = Label(window, fg='blue', font=("Arial", 50)) +# l1.place(x = 80, y = 300) + +top1 = Label(window, text="Connection Status :", font=("Arial", 50), fg="green") +top1.place(x = 200, y = 450) + +l2 = Label(window, fg='blue', font=("Arial", 30)) +l2.place(x = 200, y = 530) + +def convert_to_gbit(value): + return value/1024./1024./1024.*8 + +# function defined to update the usage instantly +old_value = 0 +def update_label(): + global old_value + new_value = psutil.net_io_counters().bytes_sent + psutil.net_io_counters().bytes_recv + # if old_value: + # send_stat(new_value - old_value) + x = "{0:.3f}".format(new_value - old_value) + # l1.configure(text="") + # l1.configure(text= "Usage : " + str(x) + " bytes/sec") + path_text.delete("1.0", "end") + path_text.insert(END, "Usage : " + str(x) + " bytes/sec") + + # for updating connection status + IPaddress = socket.gethostbyname(socket.gethostname()) + if IPaddress == "127.0.0.1": + l2.configure(text="No internet, your localhost is\n" + IPaddress) + else: + l2.configure(text="Connected, with the IP address\n" + IPaddress) + + # for checking max limit exceeded + if(new_value - old_value>1000000): + mbox.showinfo("Exceed Status", "Max Limit Usage Exceeded.") + + old_value = new_value + + time.sleep(0.5) + window.after(1, update_label) + +update_label() + + +# function for exiting window +def exit_win(): + if mbox.askokcancel("Exit", "Do you want to exit?"): + window.destroy() + +window.protocol("WM_DELETE_WINDOW", exit_win) +window.mainloop() \ No newline at end of file diff --git a/projects/Network Usage Tracker/requirements.txt b/projects/Network Usage Tracker/requirements.txt new file mode 100644 index 000000000..d82fea233 --- /dev/null +++ b/projects/Network Usage Tracker/requirements.txt @@ -0,0 +1,5 @@ +tkinter +pillow +time +psutil +socket diff --git a/projects/News_website_scraper/README.md b/projects/News_website_scraper/README.md new file mode 100644 index 000000000..170e1f314 --- /dev/null +++ b/projects/News_website_scraper/README.md @@ -0,0 +1,11 @@ +# Financial-news-scraper +A scraper made using beautiful soup 4 in python. Tailor made for extracting news from moneycontrol.com. Issue pull request for different scrapers. + +__The main page to start scraping from: https://www.moneycontrol.com/news/technical-call-221.html__ +![](images/home.JPG) + +__The program scrapes news from next pages too by extracting website link in these buttons__ +![](images/nextpage.JPG) + +__Resulting JSON file includes heading, date and image link, indexed by page number__ +![](images/result.JPG) diff --git a/projects/News_website_scraper/images/README.md b/projects/News_website_scraper/images/README.md new file mode 100644 index 000000000..81c7c3f9b --- /dev/null +++ b/projects/News_website_scraper/images/README.md @@ -0,0 +1,5 @@ +home.jpg - main news page + +nextpage.jpg - links to next pages + +result.jpg - Snapshot of result json file diff --git a/projects/News_website_scraper/images/home.JPG b/projects/News_website_scraper/images/home.JPG new file mode 100644 index 000000000..d41c53a68 Binary files /dev/null and b/projects/News_website_scraper/images/home.JPG differ diff --git a/projects/News_website_scraper/images/nextpage.JPG b/projects/News_website_scraper/images/nextpage.JPG new file mode 100644 index 000000000..ab132e367 Binary files /dev/null and b/projects/News_website_scraper/images/nextpage.JPG differ diff --git a/projects/News_website_scraper/images/result.JPG b/projects/News_website_scraper/images/result.JPG new file mode 100644 index 000000000..2b458c583 Binary files /dev/null and b/projects/News_website_scraper/images/result.JPG differ diff --git a/projects/News_website_scraper/moneycontrol_scrapper.py b/projects/News_website_scraper/moneycontrol_scrapper.py new file mode 100644 index 000000000..8ed2a8909 --- /dev/null +++ b/projects/News_website_scraper/moneycontrol_scrapper.py @@ -0,0 +1,52 @@ +import re +import json +import requests +import datetime +from tqdm import tqdm +from bs4 import BeautifulSoup +from collections import defaultdict + +submission = defaultdict(list) +#main url +src_url = 'https://www.moneycontrol.com/news/technical-call-221.html' + +#get next page links and call scrap() on each link +def setup(url): + nextlinks = [] + src_page = requests.get(url).text + src = BeautifulSoup(src_page, 'lxml') + + #ignore with void js as href + anchors = src.find("div", attrs={"class": "pagenation"}).findAll( + 'a', {'href': re.compile('^((?!void).)*$')}) + nextlinks = [i.attrs['href'] for i in anchors] + for idx, link in enumerate(tqdm(nextlinks)): + scrap('https://www.moneycontrol.com'+link, idx) + +#scraps passed page url +def scrap(url, idx): + src_page = requests.get(url).text + src = BeautifulSoup(src_page, 'lxml') + + span = src.find("ul", {"id": "cagetory"}).findAll('span') + img = src.find("ul", {"id": "cagetory"}).findAll('img') + + # has alt text attr set as heading of news, therefore get img link and heading from same tag + imgs = [i.attrs['src'] for i in img] + titles = [i.attrs['alt'] for i in img] + date = [i.get_text() for i in span] + + #list of dicts as values and indexed by page number + submission[str(idx)].append({'title': titles}) + submission[str(idx)].append({'date': date}) + submission[str(idx)].append({'img_src': imgs}) + +#save data as json named by current date +def json_dump(data): + date = datetime.date.today().strftime("%B %d, %Y") + with open('moneycontrol_'+str(date)+'.json', 'w') as outfile: + json.dump(submission, outfile) + +setup(src_url) +json_dump(submission) + diff --git a/projects/Number_guessing_game/README.md b/projects/Number_guessing_game/README.md new file mode 100644 index 000000000..50f8b1365 --- /dev/null +++ b/projects/Number_guessing_game/README.md @@ -0,0 +1,14 @@ +# Number Guessing Game + +This game allows you to check your luck and intuition :) +You should find the number computer guessed + +### Usage +Just run "python main.py" in cmd command line after setting the project directory + +### Here you can see sample +![Image](./image.png) + +## *Author Name* + +[Javokhir](https://github.com/leader2one/) diff --git a/projects/Number_guessing_game/image.png b/projects/Number_guessing_game/image.png new file mode 100644 index 000000000..401d5dc4f Binary files /dev/null and b/projects/Number_guessing_game/image.png differ diff --git a/projects/Number_guessing_game/main.py b/projects/Number_guessing_game/main.py new file mode 100644 index 000000000..56ce997f2 --- /dev/null +++ b/projects/Number_guessing_game/main.py @@ -0,0 +1,54 @@ +import random + +print("Number guessing game") + +# randint function to generate the +# random number b/w 1 to 9 +number = random.randint(1, 9) + +# number of chances to be given +# to the user to guess the number +# or it is the inputs given by user +# into input box here number of +# chances are 5 +chances = 0 + +print("Guess a number (between 1 and 9):") + +# While loop to count the number +# of chances +while True: + + # Enter a number between 1 to 9 + guess = int(input()) + + # Compare the user entered number + # with the number to be guessed + if guess == number: + + # if number entered by user + # is same as the generated + # number by randint function then + # break from loop using loop + # control statement "break" + print( + f'CONGRATULATIONS! YOU HAVE GUESSED THE \ + NUMBER {number} IN {chances} ATTEMPTS!') + # Printing final statement using the f-strings method; + break + + # Check if the user entered + # number is smaller than + # the generated number + elif guess < number: + print("Your guess was too low: Guess a number higher than", guess) + + # The user entered number is + # greater than the generated + # number + else: + print("Your guess was too high: Guess a number lower than", guess) + + # Increase the value of chance by 1 + chances += 1 + diff --git a/projects/organized download folder with different categories/README.md b/projects/Organized_download_folder_with_different_categories/README.md similarity index 100% rename from projects/organized download folder with different categories/README.md rename to projects/Organized_download_folder_with_different_categories/README.md diff --git a/projects/organized download folder with different categories/file-sortor.py b/projects/Organized_download_folder_with_different_categories/file-sortor.py similarity index 96% rename from projects/organized download folder with different categories/file-sortor.py rename to projects/Organized_download_folder_with_different_categories/file-sortor.py index 1f0acfa28..db4c5618c 100644 --- a/projects/organized download folder with different categories/file-sortor.py +++ b/projects/Organized_download_folder_with_different_categories/file-sortor.py @@ -1,47 +1,47 @@ -import os -import shutil -os.chdir("E:\downloads") -#print(os.getcwd()) - -#check number of files in directory -files = os.listdir() - -#list of extension (You can add more if you want) -extentions = { - "images": [".jpg", ".png", ".jpeg", ".gif"], - "videos": [".mp4", ".mkv"], - "musics": [".mp3", ".wav"], - "zip": [".zip", ".tgz", ".rar", ".tar"], - "documents": [".pdf", ".docx", ".csv", ".xlsx", ".pptx", ".doc", ".ppt", ".xls"], - "setup": [".msi", ".exe"], - "programs": [".py", ".c", ".cpp", ".php", ".C", ".CPP"], - "design": [".xd", ".psd"] - - -} - - -#sort to specific folder depend on extenstions -def sorting(file): - keys = list(extentions.keys()) - for key in keys: - for ext in extentions[key]: - # print(ext) - if file.endswith(ext): - return key - - -#iterat through each file -for file in files: - dist = sorting(file) - if dist: - try: - shutil.move(file, "../download-sorting/" + dist) - except: - print(file + " is already exist") - else: - try: - shutil.move(file, "../download-sorting/others") - except: - print(file + " is already exist") - +import os +import shutil +os.chdir("E:\downloads") +#print(os.getcwd()) + +#check number of files in directory +files = os.listdir() + +#list of extension (You can add more if you want) +extentions = { + "images": [".jpg", ".png", ".jpeg", ".gif"], + "videos": [".mp4", ".mkv"], + "musics": [".mp3", ".wav"], + "zip": [".zip", ".tgz", ".rar", ".tar"], + "documents": [".pdf", ".docx", ".csv", ".xlsx", ".pptx", ".doc", ".ppt", ".xls"], + "setup": [".msi", ".exe"], + "programs": [".py", ".c", ".cpp", ".php", ".C", ".CPP"], + "design": [".xd", ".psd"] + + +} + + +#sort to specific folder depend on extenstions +def sorting(file): + keys = list(extentions.keys()) + for key in keys: + for ext in extentions[key]: + # print(ext) + if file.endswith(ext): + return key + + +#iterat through each file +for file in files: + dist = sorting(file) + if dist: + try: + shutil.move(file, "../download-sorting/" + dist) + except: + print(file + " is already exist") + else: + try: + shutil.move(file, "../download-sorting/others") + except: + print(file + " is already exist") + diff --git a/projects/PDF to MP3/PDF__TO__MP3.py b/projects/PDF to MP3/PDF__TO__MP3.py new file mode 100644 index 000000000..f056f2519 --- /dev/null +++ b/projects/PDF to MP3/PDF__TO__MP3.py @@ -0,0 +1,47 @@ +import pyttsx3 +import PyPDF2 +from tkinter import filedialog + +location = filedialog.askopenfilename() +full_text ="" + +with open(location, 'rb') as book: + + try: + reader = PyPDF2.PdfFileReader(book) + + audio = pyttsx3.init() + + print('\n') + print('Recommended Speed ------> 115') + + set_speed = input('Please Enter Your Prefered Reading Speed --------> ') + audio.setProperty('rate',int(set_speed)) + + total_pages = reader.numPages + + print('\n') + print('Location of File -------> ' + location) + print('\n') + print('Total Number of Pages -------> ' + str(total_pages)) + + try: + for page in range(total_pages): + next_page = reader.getPage(page) + content = next_page.extractText() + full_text += content + + audio.save_to_file(full_text, 'output.mp3') + print("Converting... \n Please Wait....") + audio.runAndWait() + + except: + print('Task Failed Successfully! ') + + except: + print('\n') + print('---------> Cannot Read PDF <---------') + print('\n') + print('--------->Invalid PDF format <--------') + print('\n') + print('OR maybe there is something wrong with your brain that you are trying \n to convert a file that is not in .pdf format') \ No newline at end of file diff --git a/projects/PDF to MP3/requirements.txt b/projects/PDF to MP3/requirements.txt new file mode 100644 index 000000000..a948a8624 --- /dev/null +++ b/projects/PDF to MP3/requirements.txt @@ -0,0 +1,3 @@ +pyttsx3 +PyPDF2 +tkinter \ No newline at end of file diff --git a/projects/Password_generator/.DS_Store b/projects/Password_generator/.DS_Store new file mode 100644 index 000000000..9bf0f8ee1 Binary files /dev/null and b/projects/Password_generator/.DS_Store differ diff --git a/projects/Password_generator/README.md b/projects/Password_generator/README.md new file mode 100644 index 000000000..70ffe2a72 --- /dev/null +++ b/projects/Password_generator/README.md @@ -0,0 +1,18 @@ +# Password_generator + +This script generate a random password + +## Prerequisites + +None + +## How to run the script + + python password_generator.py + +## Screenshot/GIF showing the sample use of the script + +screenshot + +## Author Name +***lilo550*** diff --git a/projects/Password_generator/logo.ico b/projects/Password_generator/logo.ico new file mode 100644 index 000000000..01ea65ea7 Binary files /dev/null and b/projects/Password_generator/logo.ico differ diff --git a/projects/Password_generator/logo.png b/projects/Password_generator/logo.png new file mode 100644 index 000000000..31eb8ae09 Binary files /dev/null and b/projects/Password_generator/logo.png differ diff --git a/projects/Password_generator/password_generator.py b/projects/Password_generator/password_generator.py new file mode 100644 index 000000000..452abf1af --- /dev/null +++ b/projects/Password_generator/password_generator.py @@ -0,0 +1,41 @@ +from tkinter import* +from random import choice +import string + +class App: + def __init__(self): + self.window = Tk() + self.window.title('password_generator') + self.window.iconbitmap('logo.ico') + self.window.iconphoto(False, PhotoImage(file='logo.png')) + self.window.geometry('500x255') + self.window.config(bg='gray') + + #component creation + self.label() + self.entry() + self.button() + + def label(self): + label_title = Label(self.window, text='Welcome to password generator', font=('Courrier', 20), bg='gray', fg='black') + label_title.pack() + + def entry(self): + self.password_entry = Entry(self.window, font=('Courrier', 25), bg='white', fg='black', width=30, relief='solid') + self.password_entry.pack(pady=50) + + def button(self): + password_generator = Button(self.window, text="Generate_password", font=('Courrier', 12), bg='white', fg='black', width=25, command=self.generate_password) + password_generator.pack() + + def generate_password(self): + characters = string.ascii_letters + string.punctuation + string.digits + password = "" + for x in range(28): + password+=choice(characters) + self.password_entry.delete(0, END) + self.password_entry.insert(0, password) + +#display +app = App() +app.window.mainloop() diff --git a/projects/Plagarism_checker/README.md b/projects/Plagarism_checker/README.md new file mode 100644 index 000000000..fa89cc265 --- /dev/null +++ b/projects/Plagarism_checker/README.md @@ -0,0 +1,37 @@ +# Plagarism checker + + + +Python script for checking the amount of similarity between two (or more) text files. + +### Prerequisites + + + +Sklearn module +Installation: + +``` +$ pip install -U scikit-learn +``` + +### How to run the script + + + +``` +$ python plag.py +``` + +### Screenshot/GIF showing the sample use of the script + + + +# PLAG + +## _Author Name_ + + + +Darahaas Yajamanyam
    +[darahaas15](https://github.com/darahaas15) diff --git a/projects/Plagarism_checker/plag.py b/projects/Plagarism_checker/plag.py new file mode 100644 index 000000000..2b535a99f --- /dev/null +++ b/projects/Plagarism_checker/plag.py @@ -0,0 +1,36 @@ +#pip install -U scikit-learn +#Make sure all the .txt files that need to be checked are in the same directory as the script +import os +from sklearn.feature_extraction.text import TfidfVectorizer +from sklearn.metrics.pairwise import cosine_similarity + +user_files = [doc for doc in os.listdir() if doc.endswith('.txt')] +user_notes = [open(_file, encoding='utf-8').read() + for _file in user_files] + + +def vectorize(Text): return TfidfVectorizer().fit_transform(Text).toarray() +def similarity(doc1, doc2): return cosine_similarity([doc1, doc2]) + + +vectors = vectorize(user_notes) +s_vectors = list(zip(user_files, vectors)) +plagiarism_results = set() + + +def check_plagiarism(): + global s_vectors + for student_a, text_vector_a in s_vectors: + new_vectors = s_vectors.copy() + current_index = new_vectors.index((student_a, text_vector_a)) + del new_vectors[current_index] + for student_b, text_vector_b in new_vectors: + sim_score = similarity(text_vector_a, text_vector_b)[0][1] + student_pair = sorted((student_a, student_b)) + score = (student_pair[0], student_pair[1], sim_score) + plagiarism_results.add(score) + return plagiarism_results + + +for data in check_plagiarism(): + print(data) diff --git a/projects/Plagarism_checker/text1.txt b/projects/Plagarism_checker/text1.txt new file mode 100644 index 000000000..d99a481fd --- /dev/null +++ b/projects/Plagarism_checker/text1.txt @@ -0,0 +1,5 @@ +Nature is the endless expanse of life forms, beauty, resources, peace and nourishment. Every bud that grows to a flower, every caterpillar that flies with the wings of a butterfly and every infant who faces the world as a human, owes its survival and sustenance to nature. In addition to providing resources for our daily needs of food, clothing and shelter, nature also contributes to different industries and manufacturing units. Paper, furniture, oil, gemstones, petrol, diesel, the fishing industry, electrical units, etc. all derive their basic components from nature. + +It can be said that nature drives the process of converting everything that is natural on earth into most of the things that are artificial. Nature also maintains the continuity between the different spheres on Earth. Owing to the multiple elements obtained from nature, with a growing population, the need to meet demands is increasing every day. At an equal pace is rising the level of air, water, soil and noise pollution as a result of the universal dependence on technology. + +While it is necessary to keep up with industrialization, it is an urgent need now to restore stability in nature. People are trying to curb the level of pollution and stop the exhaustion of natural resources. However, more awareness and implementation is a must at the individual and community levels. We must always remember it is us who depend on nature for survival and not the other way round. \ No newline at end of file diff --git a/projects/Plagarism_checker/text2.txt b/projects/Plagarism_checker/text2.txt new file mode 100644 index 000000000..4141f6824 --- /dev/null +++ b/projects/Plagarism_checker/text2.txt @@ -0,0 +1,5 @@ +Great lengths of mountains, thriving ecosystems, the ever-spreading sky together with the lithosphere, hydrosphere and atmosphere create a saga called “Nature”. Rich both in terms of its scenic beauty and replenishing resources, nature accounts for supporting life in different shapes and forms on our planet. + +Every member of the living world obtains its life support from nature. Nature guides the cycling of air, water and life between the different constituents or spheres on Earth. The treasures in nature not only provide for our basic requirements of survival but also fuel the raw materials to support factories and industries on which the modern world primarily runs. + +Since the population is increasing at an exponential rate largely in India and many parts of the world, the “use” of resources has now turned to depletion. Adding to this, are the excessive levels of atmospheric and environmental pollution. Industrial wastes, unchecked use of vehicles, illegal cutting of trees, poaching of animals, nuclear power plants and many more are contributing to the disruption of the natural systems and global warming. \ No newline at end of file diff --git a/projects/Plagarism_checker/text3.txt b/projects/Plagarism_checker/text3.txt new file mode 100644 index 000000000..95209cc12 --- /dev/null +++ b/projects/Plagarism_checker/text3.txt @@ -0,0 +1,5 @@ +Nature includes living and non-living components that together make life on Earth possible. Some forms of nature can be seen through the lush green forests, the vast sky above us, the oceans without an end, the mountains standing tall and so on. Nature nourishes the survival needs of plants, animals and humans alike. It provides the essential components of oxygen, sunlight, soil and water. + +Several other products are obtained indirectly from nature which includes timber, paper, medicinal herbs, fibers, cotton, silk and various kinds of food. To fulfill the demand for these products, human beings have now engaged in the slaughter of trees and the destruction of nature. Different industries also poison nature with harmful gases and chemicals in addition to using excessive natural resources. + +It is the need of the hour now to reduce natural damage, reuse goods and recycle used elements to form newer ones. People from all parts of the world should come together to lessen the pressure on nature and restore its balance. \ No newline at end of file diff --git a/projects/py-carbon-clips/Readme.md b/projects/Py_carbon_clips/Readme.md similarity index 100% rename from projects/py-carbon-clips/Readme.md rename to projects/Py_carbon_clips/Readme.md diff --git a/projects/Python_auto_draw/README.md b/projects/Python_auto_draw/README.md new file mode 100644 index 000000000..a5efc5dc7 --- /dev/null +++ b/projects/Python_auto_draw/README.md @@ -0,0 +1,55 @@ +# Python Auto Draw +##### THIS SIMPLE PROJECT WAS MADE TO LEARN PYTHON LIBRARY FUNCTIONS LIKE `pyatogui` & `time`. + +### *DEMO*: + +![Demo](pyautoguidemo.gif) +![1](https://user-images.githubusercontent.com/61280281/89520553-a5676000-d7fb-11ea-8e2f-883782ddcbc6.png) + + +### To run it on your PC: +* Make sure you have Python 3.7.x or Python 3.8.x installed, if not, click [here](https://www.python.org/downloads/) to install! +* Install PyAutoGUI: `pip install pyautogui` +* Clone this into your Desktop: `git clone "https://github.com/tusharnankani/PythonAutoDraw"` +* Open Command Line or Terminal +* Change directory to a respective game: `cd "Desktop\PythonAutoDraw"` +* Run: `python python-auto-draw.py` + + +### BASICS: + +>>> import pyautogui + + + +`>>> screenWidth, screenHeight = pyautogui.size()` # Get the size of the primary monitor. + +`>>> currentMouseX, currentMouseY = pyautogui.position()` # Get the XY position of the mouse. + +`>>> pyautogui.moveTo(100, 150)` # Move the mouse to XY coordinates. + +`>>> pyautogui.click()` # Click the mouse.
    +`>>> pyautogui.click(100, 200)` # Move the mouse to XY coordinates and click it.
    +`>>> pyautogui.click('button.png')` # Find where button.png appears on the screen and click it.
    + +`>>> pyautogui.move(0, 10)` # Move mouse 10 pixels down from its current position.
    +`>>> pyautogui.doubleClick()` # Double click the mouse.
    +`>>> pyautogui.moveTo(500, 500, duration=2, tween=pyautogui.easeInOutQuad)` # Use tweening/easing function to move mouse over 2 seconds.
    + +`>>> pyautogui.write('Hello world!', interval=0.25)` # type with quarter-second pause in between each key
    +`>>> pyautogui.press('esc')` # Press the Esc key. All key names are in pyautogui.KEY_NAMES
    + +`>>> pyautogui.keyDown('shift')` # Press the Shift key down and hold it.
    +`>>> pyautogui.press(['left', 'left', 'left', 'left'])` # Press the left arrow key 4 times.
    +`>>> pyautogui.keyUp('shift')` # Let go of the Shift key.
    + +`>>> pyautogui.hotkey('ctrl', 'c')` # Press the Ctrl-C hotkey combination.
    + +`>>> pyautogui.alert('This is the message to display.')` # Make an alert box appear and pause the program until OK is clicked.
    + + + + +## *REFERENCES*: +- [PyAutoGUI Docs](https://pypi.org/project/PyAutoGUI/) +- [More about PyAutoGUI](https://pyautogui.readthedocs.io/en/latest/mouse.html#mouse-drags) diff --git a/projects/Python_auto_draw/pyautoguidemo.gif b/projects/Python_auto_draw/pyautoguidemo.gif new file mode 100644 index 000000000..980d51bc8 Binary files /dev/null and b/projects/Python_auto_draw/pyautoguidemo.gif differ diff --git a/projects/Python_auto_draw/python-auto-draw.py b/projects/Python_auto_draw/python-auto-draw.py new file mode 100644 index 000000000..748a2e274 --- /dev/null +++ b/projects/Python_auto_draw/python-auto-draw.py @@ -0,0 +1,29 @@ +import pyautogui +import time + +# time to change tabs from editor to paint; +time.sleep(10) + +# it will remain clicked till program ends; +pyautogui.click() + +# can be varied according to convininence +distance = 250 + +while distance > 0: + # right + pyautogui.dragRel(distance, 0, duration = 0.1) + + distance -= 5 + + # down + pyautogui.dragRel(0, distance, duration = 0.1) + + # left + pyautogui.dragRel(-distance, 0, duration = 0.1) + + distance -= 5 + + #up + pyautogui.dragRel(0, -distance, duration = 0.1) + diff --git a/projects/Qr_code_generator/README.md b/projects/Qr_code_generator/README.md new file mode 100644 index 000000000..d16e1051a --- /dev/null +++ b/projects/Qr_code_generator/README.md @@ -0,0 +1,16 @@ +# QR code generator using Python +This script take a link of any URL and generate a QR code corresponding to it. + +## Library Used +* [qrcode](https://github.com/lincolnloop/python-qrcode) + +### To install required external modules +* Run `pip install qrcode` + +### How to run the script +- Provide your desired URL in the script +- Execute `python3 generate_qrcode.py` + +### Screenshot/GIF showing the sample use of the script + +![QR code Output](https://github.com/Python-World/python-mini-projects/blob/master/projects/Qr_code_generator/url_qrcode.png) diff --git a/projects/Qr_code_generator/generate_qrcode.py b/projects/Qr_code_generator/generate_qrcode.py new file mode 100644 index 000000000..657479143 --- /dev/null +++ b/projects/Qr_code_generator/generate_qrcode.py @@ -0,0 +1,18 @@ +import qrcode + +input_URL = "https://www.google.com/" + +qr = qrcode.QRCode( + version=1, + error_correction=qrcode.constants.ERROR_CORRECT_L, + box_size=15, + border=4, +) + +qr.add_data(input_URL) +qr.make(fit=True) + +img = qr.make_image(fill_color="red", back_color="white") +img.save("url_qrcode.png") + +print(qr.data_list) diff --git a/projects/Qr_code_generator/url_qrcode.png b/projects/Qr_code_generator/url_qrcode.png new file mode 100644 index 000000000..d073b2f21 Binary files /dev/null and b/projects/Qr_code_generator/url_qrcode.png differ diff --git a/projects/Random_Wikipedia_Article/README.md b/projects/Random_Wikipedia_Article/README.md new file mode 100644 index 000000000..598e6e713 --- /dev/null +++ b/projects/Random_Wikipedia_Article/README.md @@ -0,0 +1,5 @@ +# Random Wikipedia Article +An application to save any random article from Wikipedia to a text file. + +Use: +``` pip install htmlparser``` and ``` pip install beautifulsoup4``` diff --git a/projects/Random_Wikipedia_Article/requirements.txt b/projects/Random_Wikipedia_Article/requirements.txt new file mode 100644 index 000000000..b7c5d44ef --- /dev/null +++ b/projects/Random_Wikipedia_Article/requirements.txt @@ -0,0 +1 @@ +HTMLParser==0.0.2 diff --git a/projects/Random_Wikipedia_Article/wiki_random.py b/projects/Random_Wikipedia_Article/wiki_random.py new file mode 100644 index 000000000..8d53a5f72 --- /dev/null +++ b/projects/Random_Wikipedia_Article/wiki_random.py @@ -0,0 +1,25 @@ +from bs4 import BeautifulSoup +import requests + +# Trying to open a random wikipedia article +# Special:Random opens random articles +res = requests.get("https://en.wikipedia.org/wiki/Special:Random") +res.raise_for_status() + +# pip install htmlparser +wiki = BeautifulSoup(res.text, "html.parser") + +r = open("random_wiki.txt", "w+", encoding='utf-8') + +# Adding the heading to the text file +heading = wiki.find("h1").text + +r.write(heading + "\n") +for i in wiki.select("p"): + # Optional Printing of text + # print(i.getText()) + r.write(i.getText()) + +r.close() +print("File Saved as random_wiki.txt") + diff --git a/projects/Random_password_generator/README.md b/projects/Random_password_generator/README.md new file mode 100644 index 000000000..be2b0671a --- /dev/null +++ b/projects/Random_password_generator/README.md @@ -0,0 +1,23 @@ +# Python Password Generator +##### THIS SIMPLE PROJECT WAS MADE USING PYTHON LIBRARY FUNCTIONS LIKE `string` & `random`. + +* `string.ascii_letters` + - The concatenation of the ascii_lowercase and ascii_uppercase constants described below. This value is not locale-dependent. + +* `string.ascii_lowercase` + - The lowercase letters abcdefghijklmnopqrstuvwxyz. This value is not locale-dependent and will not change. + +* `string.ascii_uppercase` + - The uppercase letters ABCDEFGHIJKLMNOPQRSTUVWXYZ. This value is not locale-dependent and will not change. + +* `string.digits` + - The string 0123456789. + +* `string.hexdigits` + - The string 0123456789abcdefABCDEF. + +* `string.octdigits` +The string 01234567. + +* `string.punctuation` + - String of ASCII characters which are considered punctuation characters in the C locale: `!"#$%&'()*+,-./:;<=>?@[\]^_{|}~` diff --git a/projects/Random_password_generator/python-password-generator.py b/projects/Random_password_generator/python-password-generator.py new file mode 100644 index 000000000..02ff70917 --- /dev/null +++ b/projects/Random_password_generator/python-password-generator.py @@ -0,0 +1,10 @@ +import random +import string + +total = string.ascii_letters + string.digits + string.punctuation + +length = 16 + +password = "".join(random.sample(total, length)) + +print(password) diff --git a/projects/Random password generator/random_password_gen.py b/projects/Random_password_generator/random_password_gen.py similarity index 100% rename from projects/Random password generator/random_password_gen.py rename to projects/Random_password_generator/random_password_gen.py diff --git a/projects/Random_word_from_list/README.md b/projects/Random_word_from_list/README.md new file mode 100644 index 000000000..0801cc18d --- /dev/null +++ b/projects/Random_word_from_list/README.md @@ -0,0 +1,9 @@ +# Random word from list + +This is a useful program that chooses a random word from a given list. + +#### How to run script +``` bash +python Random_word_from_list.py +``` +Make sure you have a file in the same directory you wish to choose a random word from. diff --git a/projects/Recursive_password_generator/README.md b/projects/Recursive_password_generator/README.md new file mode 100644 index 000000000..6e196fd7f --- /dev/null +++ b/projects/Recursive_password_generator/README.md @@ -0,0 +1,19 @@ +# Recursive Password Generator + +Generates a random password with the length specified using recursivity + +### Prerequisites + +None + +### How to run the script + +Execute `python3 generator.py` + +### Screenshot/GIF showing the sample use of the script + +![Screenshot of the generator.py file](Screenshot.png) + +## *Author Name* + +[Erfan Saberi](https://github.com/erfansaberi) diff --git a/projects/Recursive_password_generator/Screenshot.png b/projects/Recursive_password_generator/Screenshot.png new file mode 100644 index 000000000..d0e521ab6 Binary files /dev/null and b/projects/Recursive_password_generator/Screenshot.png differ diff --git a/projects/Recursive_password_generator/generator.py b/projects/Recursive_password_generator/generator.py new file mode 100644 index 000000000..87beb5f66 --- /dev/null +++ b/projects/Recursive_password_generator/generator.py @@ -0,0 +1,24 @@ +import random +import string + +def stretch(text,maxlength): + if len(text) < maxlength: + randomChar = get_random_char() + return stretch(text+randomChar,maxlength) + else: + return text + +def get_random_char(): + chars = string.printable + randomChar = chars[random.randint(0,len(chars)-1)] + return randomChar + +while 1: + maxlen = input(' [?] Enter a length for your password (e for exit): ') + try: + maxlength = int(maxlen) + print("'",stretch('',maxlength),"'\n") + except: + if maxlen == 'e': + break + print('Please Enter an integer') diff --git a/projects/Reduce_image_file_size/README.md b/projects/Reduce_image_file_size/README.md new file mode 100644 index 000000000..48ff501fa --- /dev/null +++ b/projects/Reduce_image_file_size/README.md @@ -0,0 +1,15 @@ +# Script Title +#### Script to reduce the size of image file using the openCV library of python. + +### Prerequisites +openCV library + +`pip install opencv-python` + +### How to run the script +- Add the image in jpg format with name as 'input.jpg' in this folder. +- Run reduce_image_size.py script. +- resized output image will be generated in this folder. + +## *Author Name* +[Vipul Verma](https://github.com/VIPverma01) diff --git a/projects/Reduce_image_file_size/input.jpg b/projects/Reduce_image_file_size/input.jpg new file mode 100644 index 000000000..c07ddd7d9 Binary files /dev/null and b/projects/Reduce_image_file_size/input.jpg differ diff --git a/projects/Reduce_image_file_size/reduce_image_size.py b/projects/Reduce_image_file_size/reduce_image_size.py new file mode 100644 index 000000000..668595a60 --- /dev/null +++ b/projects/Reduce_image_file_size/reduce_image_size.py @@ -0,0 +1,23 @@ +# import openCV library for image handling +import cv2 + +# read image to be resized by imread() function of openCV library +img = cv2.imread('input.jpg') +print(img.shape) + +# set the ratio of resized image +k = 5 +width = int((img.shape[1])/k) +height = int((img.shape[0])/k) + +# resize the image by resize() function of openCV library +scaled = cv2.resize(img, (width, height), interpolation=cv2.INTER_AREA) +print(scaled.shape) + +# show the resized image using imshow() function of openCV library +cv2.imshow("Output", scaled) +cv2.waitKey(500) +cv2.destroyAllWindows() + +# get the resized image output by imwrite() function of openCV library +cv2.imwrite('resized_output_image.jpg', scaled) diff --git a/projects/Reduce_image_file_size/resized_output_image.jpg b/projects/Reduce_image_file_size/resized_output_image.jpg new file mode 100644 index 000000000..cfe0bac81 Binary files /dev/null and b/projects/Reduce_image_file_size/resized_output_image.jpg differ diff --git a/projects/RockPaperScissors_Game/README.md b/projects/RockPaperScissors_Game/README.md new file mode 100644 index 000000000..168a59d4a --- /dev/null +++ b/projects/RockPaperScissors_Game/README.md @@ -0,0 +1,7 @@ +## A Simple Rock Paper Scissors Game: +##### To be Played with a Computer. +* You can enter the number of games you want to play. +* There is also a score window which is displayed after every turn. + +### Example Game: +![Game](https://i.postimg.cc/7Y2TJsVJ/Capture.png) diff --git a/projects/RockPaperScissors_Game/Rock_Paper_Scissors_Game.py b/projects/RockPaperScissors_Game/Rock_Paper_Scissors_Game.py new file mode 100644 index 000000000..f3b8abd49 --- /dev/null +++ b/projects/RockPaperScissors_Game/Rock_Paper_Scissors_Game.py @@ -0,0 +1,60 @@ +#START; + +import random + +#DEFAULT; +my_dict={'R':"Rock",'P':"Paper",'S':"Scissors"} +user_count=0 +comp_count=0 + +#INPUT; +games=int(input("\nEnter the number of games you want to play: ")) + +while(comp_count+user_countcomp_count: + print("\n\tCONGRATULATIONS! YOU WON!") +elif user_count + +### How to run the script +- Specify both ACCESS_KEY and SECRET_KEY. You can get them both on your AWS account in "My Security Credentials" section.
    +- Specify the local file name, bucket name and the name that you want the file to have inside s3 bucket using LOCAL_FILE, BUCKET_NAME and S3_FILE_NAME variables.
    +- Run "python main.py"
    + +### Author Name +Miguel Wychovaniec - https://github.com/miguelwy diff --git a/projects/S3_File_Upload/main.py b/projects/S3_File_Upload/main.py new file mode 100644 index 000000000..cec9cd978 --- /dev/null +++ b/projects/S3_File_Upload/main.py @@ -0,0 +1,26 @@ +import boto3 +from botocore.exceptions import NoCredentialsError + +ACCESS_KEY = 'XXXXXXXXXXXXXXXXX' +SECRET_KEY = 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXX' +LOCAL_FILE = 'local_file_name' +BUCKET_NAME = 'bucket_name' +S3_FILE_NAME = 'file_name_on_s3' + +def upload_to_s3(local_file, bucket, s3_file): + ## This function is responsible for uploading the file into the S3 bucket using the specified credentials. + s3 = boto3.client('s3', aws_access_key_id=ACCESS_KEY, + aws_secret_access_key=SECRET_KEY) + try: + s3.upload_file(local_file, bucket, s3_file) + print("Upload Successful") + return True + except FileNotFoundError: + print("The file was not found") + return False + except NoCredentialsError: + print("Credentials not available") + return False + + +result = upload_to_s3(LOCAL_FILE, BUCKET_NAME, S3_FILE_NAME) \ No newline at end of file diff --git a/projects/S3_File_Upload/requirements.txt b/projects/S3_File_Upload/requirements.txt new file mode 100644 index 000000000..1b2c12961 --- /dev/null +++ b/projects/S3_File_Upload/requirements.txt @@ -0,0 +1,2 @@ +boto3==1.20.4 +botocore==1.23.4 diff --git a/projects/Scrape_Hacker_News/README.md b/projects/Scrape_Hacker_News/README.md new file mode 100644 index 000000000..3d0d6e2fd --- /dev/null +++ b/projects/Scrape_Hacker_News/README.md @@ -0,0 +1,11 @@ +Scrape News From HackerNews website + +A script that scrapes a number of pages from HackerNews + + +### How to run the script +In command go to the file directory, and "run python main.py" in commandline + + +## *Author Name* +[Javokhirbek](https://github.com/leader2one) diff --git a/projects/Scrape_Hacker_News/main.py b/projects/Scrape_Hacker_News/main.py new file mode 100644 index 000000000..3bcdea575 --- /dev/null +++ b/projects/Scrape_Hacker_News/main.py @@ -0,0 +1,99 @@ +import requests +import os +from bs4 import BeautifulSoup, SoupStrainer +# Makes Output Directory if it does not exist +if not os.path.exists(os.path.join(os.getcwd(), 'HackerNews')): + os.makedirs(os.path.join(os.getcwd(), 'HackerNews')) +''' +@params page_no: The page number of HackerNews to fetch. +Adding only page number in order to add multiprocess support in future. +@params verbose: Adds verbose output to screen instead +of running the program silently. +''' + + +def fetch(page_no, verbose=False): + # Should be unreachable, but just in case + if page_no <= 0: + raise ValueError('Number of Pages must be greater than zero') + page_no = min(page_no, 20) + i = page_no + if verbose: + print('Fetching Page {}...'.format(i)) + try: + res = requests.get('https://news.ycombinator.com/?p=' + str(i)) + only_td = SoupStrainer('td') + soup = BeautifulSoup(res.content, 'html.parser', parse_only=only_td) + tdtitle = soup.find_all('td', attrs={'class': 'title'}) + tdmetrics = soup.find_all('td', attrs={'class': 'subtext'}) + with open(os.path.join('HackerNews', 'NewsPage{}.txt'.format(i)), 'w+') as f: + f.write('-' * 80) + f.write('\n') + f.write('Page {}'.format(i)) + tdtitle = soup.find_all('td', attrs={'class': 'title'}) + tdrank = soup.find_all( + 'td', + attrs={ + 'class': 'title', + 'align': 'right'}) + tdtitleonly = [t for t in tdtitle if t not in tdrank] + tdmetrics = soup.find_all('td', attrs={'class': 'subtext'}) + tdt = tdtitleonly + tdr = tdrank + tdm = tdmetrics + num_iter = min(len(tdr), len(tdt)) + for idx in range(num_iter): + f.write('\n' + '-' * 80 + '\n') + rank = tdr[idx].find('span', attrs={'class': 'rank'}) + titl = tdt[idx].find('a', attrs={'class': 'storylink'}) + url = titl['href'] if titl and titl['href'].startswith( + 'https') else 'https://news.ycombinator.com/' + titl['href'] + site = tdt[idx].find('span', attrs={'class': 'sitestr'}) + score = tdm[idx].find('span', attrs={'class': 'score'}) + time = tdm[idx].find('span', attrs={'class': 'age'}) + author = tdm[idx].find('a', attrs={'class': 'hnuser'}) + f.write( + '\nArticle Number: ' + + rank.text.replace( + '.', + '') if rank else '\nArticle Number: Could not get article number') + f.write( + '\nArticle Title: ' + + titl.text if titl else '\nArticle Title: Could not get article title') + f.write( + '\nSource Website: ' + + site.text if site else '\nSource Website: https://news.ycombinator.com') + f.write( + '\nSource URL: ' + + url if url else '\nSource URL: No URL found for this article') + f.write( + '\nArticle Author: ' + + author.text if author else '\nArticle Author: Could not get article author') + f.write( + '\nArticle Score: ' + + score.text if score else '\nArticle Score: Not Scored') + f.write( + '\nPosted: ' + + time.text if time else '\nPosted: Could not find when the article was posted') + f.write('\n' + '-' * 80 + '\n') + except (requests.ConnectionError, requests.packages.urllib3.exceptions.ConnectionError) as e: + print('Connection Failed for page {}'.format(i)) + except requests.RequestException as e: + print("Some ambiguous Request Exception occurred. The exception is " + str(e)) + + +while(True): + try: + pages = int( + input('Enter number of pages that you want the HackerNews for (max 20): ')) + v = input('Want verbose output y/[n] ?') + verbose = v.lower().startswith('y') + if pages > 20: + print('A maximum of only 20 pages can be fetched') + pages = min(pages, 20) + for page_no in range(1, pages + 1): + fetch(page_no, verbose) + break + except ValueError: + print('\nInvalid input, probably not a positive integer\n') + continue diff --git a/projects/Scrape_quotes/README.md b/projects/Scrape_quotes/README.md new file mode 100644 index 000000000..4f331b740 --- /dev/null +++ b/projects/Scrape_quotes/README.md @@ -0,0 +1,17 @@ +# Quote Scraper +This script scrapes quotes from [Quotes to Scrape](http://quotes.toscrape.com) + +### Prerequisites +* beautifulsoup4 +* requests + Run `pip install -r requirements.txt` to install required external modules. + +### How to run the script +Execute `python3 quote_scraper.py` + +### Screenshot/GIF showing the sample use of the script + +![Screenshot of the CSV file](Screenshot.png) + +## Author Name +[Anandha Krishnan Aji](https://github.com/anandhakrishnanaji) diff --git a/projects/Scrape_quotes/Screenshot.png b/projects/Scrape_quotes/Screenshot.png new file mode 100644 index 000000000..21c846f97 Binary files /dev/null and b/projects/Scrape_quotes/Screenshot.png differ diff --git a/projects/Scrape_quotes/quote_scraper.py b/projects/Scrape_quotes/quote_scraper.py new file mode 100644 index 000000000..014f8b2e0 --- /dev/null +++ b/projects/Scrape_quotes/quote_scraper.py @@ -0,0 +1,49 @@ +from bs4 import BeautifulSoup +import requests +import csv + +# URL to the website +url='http://quotes.toscrape.com' + +# Getting the html file and parsing with html.parser +html=requests.get(url) +bs=BeautifulSoup(html.text,'html.parser') + +# Tries to open the file +try: + csv_file=open('quote_list.csv','w') + fieldnames=['quote','author','tags'] + dictwriter=csv.DictWriter(csv_file,fieldnames=fieldnames) + + # Writes the headers + dictwriter.writeheader() + + #While next button is found in the page the loop runs + while True: + # Loops through quote in the page + for quote in bs.findAll('div',{'class':'quote'}): + #Extract the text part of quote, author and tags + text=quote.find('span',{'class':'text'}).text + author=quote.find('small',{'class':'author'}).text + tags=[] + for tag in quote.findAll('a',{'class':'tag'}): + tags.append(tag.text) + #Writes the current quote,author and tags to a csv file + dictwriter.writerow({'quote':text,'author':author,'tags':tags}) + + #Finds the link to next page + next=bs.find('li',{'class':'next'}) + if not next: + break + + #Gets and parses the html file of next page + html=requests.get(url+next.a.attrs['href']) + bs=BeautifulSoup(html.text,'html.parser') +except: + print('Unknown Error!!!') +finally: + csv_file.close() + + + + diff --git a/projects/Scrape_quotes/requirements.txt b/projects/Scrape_quotes/requirements.txt new file mode 100644 index 000000000..e12350e27 --- /dev/null +++ b/projects/Scrape_quotes/requirements.txt @@ -0,0 +1,2 @@ +beautifulsoup4 +requests==2.23.0 diff --git a/projects/Scraping Medium Articles/README.md b/projects/Scraping Medium Articles/README.md new file mode 100644 index 000000000..a18fa9fcc --- /dev/null +++ b/projects/Scraping Medium Articles/README.md @@ -0,0 +1,14 @@ +# Scraping Medium Articles +Well [Medium](https://medium.com/) is a website containing great articles and used by many programmers. +
    This script asks the user for the url of a medium article, scrapes it's text and saves it to a text file into a folder named scraped_articles in the same directory. +
    There are 3 text files in the folder scraped_articles as an example of how the article is scraped. + +### Prerequisites +`pip` install the modules given in requirements.txt +
    Have a working network connection on the device + +### How to run the script +Run it like any other python file + +## *Author Name* +[Naman Shah](https://github.com/namanshah01) diff --git a/projects/Scraping Medium Articles/requirements.txt b/projects/Scraping Medium Articles/requirements.txt new file mode 100644 index 000000000..7b19ef560 --- /dev/null +++ b/projects/Scraping Medium Articles/requirements.txt @@ -0,0 +1,2 @@ +beautifulsoup4==4.9.1 +requests==2.23.0 diff --git a/projects/Scraping Medium Articles/scraped_articles/One_month_into_the_MLH_Fellowship.txt b/projects/Scraping Medium Articles/scraped_articles/One_month_into_the_MLH_Fellowship.txt new file mode 100644 index 000000000..a20d7aa50 --- /dev/null +++ b/projects/Scraping Medium Articles/scraped_articles/One_month_into_the_MLH_Fellowship.txt @@ -0,0 +1,58 @@ +url: https://medium.com/code-for-cause/one-month-into-the-mlh-fellowship-448249f61590 + +Title: ONE MONTH INTO THE MLH FELLOWSHIP +by Kunal Kushwaha + +INTRODUCTION + +One month into the MLH FellowshipKunal KushwahaFollowJul 5 · 8 min read + +“In real open source, you have the right to control your own destiny.” +— Linus Torvalds +What is the MLH Fellowship? +The MLH Fellowship is an internship alternative for software engineers, with a focus on Open Source projects. Instead of working on a project for just one company, students contribute to Open Source projects that are used by companies around the world. At the beginning of the program, fellows are placed into small groups called “pods” that collectively contribute to the assigned projects as a team under the educational mentorship of a professional software engineer. +Open source is a great way to get real-world software development experience from the comfort of your home. The open source community is very helpful and encourages new developers to take part in their organizations. One gains exposure, can test their skills, gain knowledge and bond with the community in order to produce quality code that helps people around the world. +The Process +I found out about the program via the MLH mailing list. Being an Open Source enthusiast, I was impressed by the structure of the program. Having attended past MLH events, I knew I had to sign up for this. The initial phase was the shortlisting of applications followed by a technical interview. Apart from work, the fellowship program also provides opportunities to build a network and have fun while doing so! +Result of my application +Students get to work on the latest Open Source technologies and are matched with projects according to their skills and interest, providing students with a learning opportunity while contributing to real-world projects. But, it’s not just about coding. Soft-skills and team-building exercises are conducted by MLH regularly, in addition to technical hands-on workshops! It’s a remote opprtunity but provides a global platform for students to showcase their skills. +Students are also provided with a monthly stipend to help cover the basic living expenses during their participation in the program. +Source: https://github.blog/2020-06-24-welcome-to-the-inaugural-class-of-mlh-fellows/ + +WEEK 1 +Alright, so the first week. This week was spent getting acquainted with the Fellowship system as well as getting to know the team members. I got introduced to some amazing community members during this time. Being an open-source enthusiast, I believe that diversity in the workplace and participation from people hailing from different cultures is necessary as well as instrumental for the growth of the IT sector. It exposes one to the multitude of values and principles that people from varying ethnicities hold. Meeting people from around the world teaches people to respect opposing perspectives and opinions, and ingrains in them respect for their peers. +We followed an exercise in which each fellow had to have a 1-on-1 get to know meeting with each of their Pod members which I believe this was a great way to get to know each other. We also got introduced to our mentor Jani, who has been a great motivation throughout the program and is helping each and every one of us achieve more, both in terms of technical as well as soft skills. During one of our first stand-ups, we decided on the name of our Pod together as a Team. I remember Jessie (my Podmate) suggested Reactive Sharks and I suggested Hackathon Sea-Son (as the theme was marine), and that’s how we ended up with Reactive Sea-Son (the best pod). +Reactive Sea-Son Logo +The first week ended with an Orientation Hackathon where we were divided into groups of 3–4. I got to see so many amazing projects presented by my fellow fellows. Our team Quarantime (pun intended) built a social media platform using MERNG stack, for students to use during the quarantine. + +These are the projects that I really thought went out of the box! +MLH-Fellowship/0.4.2-cssifyTired of using Bootstrap/Bulma, but don't want to scaffold a whole bunch of CSS on your own? CSSify to the rescue …github.com +MLH-Fellowship/0.4.1-Execute.ly-serverServer: Edit and execute handwritten or any code in an image right in your browser. …github.com + +WEEK 2 +This week started with the announcement of hackathon results and team Execute.ly from our Pod bagged the first prize! We all were really proud of our team, also because everyone in the winning team’s Pod was going to get prizes xD. I also spent some time this week to design our Pod’s logo. +We were excited for week 2 as this was the week during which our mentor was going to assign us projects. I found out that I will be contributing to Jest this summer. Jest is a JavaScript testing framework maintained by Facebook. It felt amazing that the code that I am going to write is going to be used by people around the world. Plus getting involved in the community of experienced developers is itself a huge learning opportunity. +After having a much project kickoff call with the Jest maintainers, the rest of the week was spent into learning more about the projects. I believe that writing blogs is a great way to show what you have learned to the community and help other newcomers in the projects as well. Keeping that in mind I wrote a blog on the architecture of Jest, provided below. +Jest ArchitectureWhy is Testing important?medium.com + +WEEK 3 +Week 3 started on a Monday with our daily standup. This was the week of coding and exploring more about the projects assigned to us. We also got introduced to weekly retrospectives and show and tells. Weekly retrospectives are a way to communicate with your team and let them know about your progress, shoutouts, and any blockers they might be facing. It’s divided into sub-points like: +Shoutouts (Optional Thank You’s / Recognition) — If anyone went above and beyond, let them know!Red (Stop / need help) — List out areas that have been challenging. This could include projects, tasks, workload, or challenges with Podmates. What didn’t work well this week? What can be done differently next week?Yellow (Use caution) — Provide context on areas of improvement. This could include projects, tasks, workload, or challenges with Podmates. What can be improved upon for next week? What resources and tools could you use to reach success?Green (All Good!) — Highlight What some of your successes were. What has gone well this week? Give examples of your weekly wins! This could include projects, tasks, or successes in teamwork. +Pod Retrospective +This is the week we started conducting show and tells. I had never been a part of such activity before where a person publicly presents what they have learned to a group of people and then they all have discussions over it. It seemed like a great learning opportunity for everyone and I highly recommend it. I volunteered for our first show and tell to give a demo on Docker, Kubernetes, and Red Hat’s Java K8s client. And I must say, it went amazing! Everyone, including me, learned a lot. I started with an introduction to the topics following a hands-on demo. Whatever discussion we have as a team, one of the best parts is the guidance and perspective we receive from our mentor, Jani, on the topics of discussion to relate it to the real-world. Shout to everyone on our team for being an amazing audience and for their active participation ☀️ +Kubernetes Made EasyWhat is Kubernetes?medium.com +This was also the week when we got some PRs flowing to Jest. Shout out to Saurav, who is an amazing teammate and it has been an amazing experience contributing to Jest with him. I also got to attend various workshops this week conducted by MLH. My favourite one this week was an Introduction to Network Security by Kyle 👨‍💻 + +WEEK 4 +E-Liang’s show and tell +Week 4, better known as the week of PRs. The highlight of this week was the show and tell by E-Liang and the launch of Foam by Jani. For our second show and tell this week, we had E-Liang as a volunteer. This was hands-down my favorite personal project by a person. We got to know about Gent, which is a lightweight, reusable business logic layer that makes it easy to build GraphQL servers in Node.js and TypeScript, which is heavily inspired by Ent, a Facebook Open Source project. +taneliang/gentGent is a lightweight, reusable business logic layer that makes it easy to build GraphQL servers in Node.js and…github.com +I also got to attend a lot of sessions this week such as the React-Native session by our mentor Jani, webinar on working remotely by Joe Nash, and a discussion about “Designing Your Life” by John Britton who shared his inspiring journey with the Fellows and other community members. I also had a one-on-one mentorship session with Jani which was really educational. I got several life lessons and pointers on how to be a better developer and get the most out of my learning experience. +By far the most impressive thing this week was the release of Foam, a personal knowledge management and sharing system, by Jani. The project blew up in a matter of days and now has more than 4.4k stars on GitHub!! That’s a big number. Check it out: +foambubble/foam👋 Hello friend! Looks like you're reading this page on GitHub. Please go to the 👉 rendered Foam Workspace for an…github.com +So far the journey has been amazing, unlike any other program that I’ve been a part of. It’s a perfect balance between education and contributions + having fun while doing so. +The end of the week was followed by a delightful session of pictionary with the MLH fellows. 🖼 + +CONTACT: +Twitter: https://twitter.com/kush_kunal +Thanks for reading!Gonna clap this one out like we do in standups 👏 \ No newline at end of file diff --git a/projects/Scraping Medium Articles/scraped_articles/One_stop_guide_to_Google_Summer_of_Code.txt b/projects/Scraping Medium Articles/scraped_articles/One_stop_guide_to_Google_Summer_of_Code.txt new file mode 100644 index 000000000..5f08c3e63 --- /dev/null +++ b/projects/Scraping Medium Articles/scraped_articles/One_stop_guide_to_Google_Summer_of_Code.txt @@ -0,0 +1,65 @@ +url: https://medium.com/coding-blocks/one-stop-guide-to-google-summer-of-code-a9e803beeda7 + +Title: ONE STOP GUIDE TO GOOGLE SUMMER OF CODE +by Harshit Dwivedi + +INTRODUCTION + +One stop guide to Google Summer of CodeHarshit DwivediFollowJul 18, 2018 · 9 min read +Getting bombarded with tons of messages and requests on the same topic over and over again, I was about to post a “If I had a penny for …” joke on my social media handles. +But instead, why not write a blog instead containing all the ifs, buts, whys and hows on Google Summer of Code. +So if you are a student who is wondering about getting into Google Summer of Code or someone who has been pestered with questions regarding GSoC, hang on tight, while this is going to be a long one, I can assure you that this is going to helpful. +Let’s first get the basics out of the way : + +WHAT IS GOOGLE SUMMER OF CODE? +Simply put, it’s a 16 week long program by Google aimed at promoting Open Source Software development among college and university students. +You work with one of the many Open Source Organizations on a language/framework of your own choice. +In return you get : +1. An excellent experience of working on a real world project +2. A chance to get mentored by some of the best software developers from tech giants like Facebook and Google +3. The Google Summer of Code Tag, that will benefit you immensely with all your job hunts and not to mention a Golden referral to apply for any role at Google! +4. Of course the money and the bragging rights! 😎 💰 + +WHAT GOOGLE SUMMER OF CODE IS NOT? +An Internship! +Google Summer of Code isn’t an internship and it definitely isn’t you interning at Google. +It’s merely Google providing you and the Open Source Organizations a platform to work together.A direct entry into Google +While it’s true that you get a referral to apply at any opening in Google, GSoC does not give you a direct pass into Google. +You still have to go through all the interview rounds, it just gives you an extra edge over the competition.A trend that you **have to** be a part of +Please, don’t treat GSoC as an IIT JEE entrance exam that you have to crack in order to be successful. +I’ve seen folks achieve wonderful things without even doing GSoC and vice versa, so preparing for and applying into GSoC just because every other Tom, Dick and Harry is doing so it ridiculous. +Students, especially Indian students need to understand the essence and the deeper meaning behind the program and only go for it if it’s something you truly resonate with and are willing to continue long after the program ends and you are not getting paid for it. + +WHEN DOES GOOGLE SUMMER OF CODE HAPPEN? +The application process officially starts sometime around March, but the selected organizations are announced sometime in February first week. +So students can start looking into the selected organizations and shortlist projects which interest them. + +HOW DO I GET INTO GOOGLE SUMMER OF CODE? +Getting into GSoC is not a one step process; rather it’s a multi-step process ranging from February - April and you need to perfect each and every step to maximize your chances. +I’ll outline the major steps below : +1. Start early! +Since GSoC isn’t a one step process as mentioned beforehand, you need to get started as early as possible which means shortlist the organization(s) and project(s) which interest you and start contributing to them as soon as they are announced by google. +However, some students also start way early on in November/December. Instead of waiting for new organizations to be announced, they shortlist few organizations which have been selected continuously for the past few years. +While this is risky, if done properly and carefully, it does give you an edge over others, since the number of contributions and interactions you’ve had with the organization factors in a lot while applying for GSoC under that organization. +P.S. While you have to work with one, to maximize your chances, you can apply for 3 organizations/projects, so select them carefully. +2. Contribute +This is probably the most important phase of GSoC. +Once you’ve shortlisted, you have to focus on contributing as much as possible to the organization(s) you’ve selected. +Pro Tip : Don’t select more than 3 organizations, it’ll only diminish your chances since you won’t be able to focus properly on any one of those. +What does a contribution mean? +Anything from fixing/reporting an issue in the project or implementing a new feature to writing documentation for setting up and using the project counts as a contribution. +Granted each of them has a different weight attached with them, for example fixing an issue/adding a new feature is generally contains more weightage than reporting an issue or writing documentation. +But as someone newly exploring to a project, starting off with filing issues and writing documentation is a good idea. +3. A good proposal will help you hit it home +A proposal is a document which you submit to the organization(s) you’ve selected in the above step which outlines a detailed breakdown on how you plan on enhancing/building the project in the 16 week coding period of Google Summer of Code. +Your proposal is going to be the secret key towards ensuring your selection so ensure that you are putting in extra efforts towards making it as detailed and informative as proposal. +P.S. Please do not float the same proposal across multiple projects/organizations, each project should have a separate proposal of its own. +I won’t be outlining the best practices on writing a good proposal as I believe the following blog does a fantastic job at it, so I encourage you to go through it before starting off with your proposal. +Also, here’s my proposal, in case you want to refer to it and get a general sense of how a proposal should be made. ;) +https://drive.google.com/file/d/0B6OtIpAL6oa6U3JURDA2cjVZVlZ5UUVqcXRBTGlrY0hmUkVV/view?usp=sharing +4. Repeat +After you’re done with submitting your proposal, don’t sit idle. +You get a window of 1 month from the day when you submit the proposal to the day when the selected students are announced. +Make the best of this opportunity to contribute even more to maximize the chances. +P.S. Interacting with the organization members publicly and giving them your feedback on upcoming features and releases is also a potential contribution that can be done. +You can generally find the contact link for an Organization at it’s page in the GSoC website. \ No newline at end of file diff --git a/projects/Scraping Medium Articles/scraped_articles/The_Pros_and_Cons_of_Open_Source_Software.txt b/projects/Scraping Medium Articles/scraped_articles/The_Pros_and_Cons_of_Open_Source_Software.txt new file mode 100644 index 000000000..ea7dacab6 --- /dev/null +++ b/projects/Scraping Medium Articles/scraped_articles/The_Pros_and_Cons_of_Open_Source_Software.txt @@ -0,0 +1,42 @@ +url: https://medium.com/4thought-studios/the-pros-and-cons-of-open-source-software-d498304f2a95 + +Title: THE PROS AND CONS OF OPEN SOURCE SOFTWARE +by Khalil Khalaf + +INTRODUCTION + +The Pros and Cons of Open Source Software +Is open source software right for your business? +Khalil KhalafFollowJul 11, 2017 · 6 min read + +The term “open source” refers to products designed to be publicly accessible for people to use, modify and share. Open source software is software that anyone can access, inspect and enhance the source code that most users don’t ever see in normal circumstances. A source code is a list of text commands that is written by computer programmers, to be compiled or assembled into an executable computer program. +You might have heard of open source software and may have been encouraged to give it a try. After all, why pay for Autocad when you can use Qcad to create blueprints for your building, computer chips and car parts? Why pay for Photoshop when you can use Gimp to edit and enhance your images? Why pay for Microsoft Office while you can use LibreOffice to write, calculate and do excellent presentations? +There are many legitimate advantages to using open source software. However, there are downsides to using them, especially from the standpoint of day to day business life and development. Before committing to open source software, you should consider the following advantages and disadvantages. + +ADVANTAGES: + +Free and/or Cheaper than Commercial Products. +Open source software comes with a great advantage since it can be installed for free. Furthermore, it can be used and deployed again and again on multiple machines without the need of tracking the license compliance and terms of use. For example, according to Kate Rockwood, “…Instead of sinking 375 days — and $500,000 — into developing a proprietary code, Pendo went in the completely opposite direction: It down­loaded an open-source software engine coded entirely by volunteer[s].” +Open source software help companies save the time and money by providing ready to use software as a whole. This software could be plugins (features to be added to existing software), Front ends and interfaces that are easy to integrate, or Back ends and easy to use engines. This might sound unbelievable, but open source programs are developed with the intention to be available to anyone, even those who can’t afford commercial software. Furthermore, many of these programs are created to work with almost any type of platform, which helps extend your hardware life and avoids the need to constantly replace them. +In the Software Development Life Cycle, there are three stages that are often underestimated by project managers: Testing, Debugging and Integration. If you are a software development company, you likely know now — after disappointing your clients — that these three stages consume almost the same time as time dedicated to other stages of the software project. Open source software is good at cutting down on the development and reduces the pain and time of development planning and stages. +Highly Reliable. +Open source software is usually developed by a group of talented and skillful experts. Sometimes, they are developed by tens or hundreds of volunteers that simply love what they do for the community. Hence why most of the open source software are high-quality programs. Also, since anyone can access the code and fix a bug, you will notice continuous improvement and new versions or features added to the software every now and then. This improvement and the code itself will always exist even if it was originally developed by a current dissolved company. +Also, you should know that any open source software can be customized and tweaked by you, which can help your company match the software with your business’s needs. You literally can do whatever you want with it and you aren’t locked into packages that are only compatible with each other. This can be especially helpful if you are a software development company. For example, if a client asked for a software with 10 features, you can download an open source with 5 features already done, and add in the missing 5 features. Or maybe an open source program with 10 features that do not match your client’s requirement but then you modify them for the perfect match. Or even an open source software with 15 features and simply remove or hide the additional 5 features. The point is, with this level of customization you can guarantee that the software could be reliable since it can be tweaked specifically by you. + +DISADVANTAGES: + +Not as User-Friendly as Commercial Software + +This cannot be generalized for all open source software. For example LibreOffice, Mozilla Firefox and Android OS are amazingly easy to use. However, while there are several open source software that solve large problems super fast, complicated computation or big data, but sometimes not much attention is given to its GUI (Graphical User Interface). This can make the software annoying to work with especially for nontechnical users. Nontechnical companies may need to dedicate some time to train their team and get them up to speed for every new release of these open source programs. As for technical companies, especially software development companies, they may need to build a proper GUI and integrate it with the back end which may require as much time and money as rewriting the whole software. +Lack of extensive tech support +User communities are out there and can be very responsive, but you really can’t count on the community one hundred percent of the time since it is not their job. No one is getting paid for fixing your bugs, provide you or your team the proper training, or respond to your questions and requirements. If your client or employee is suffering from a bug, you are literally on your own. The best thing to do might be to just wait for somebody in the community to face the same issue and hopefully fix it. The other option would be to hire an expert dedicated to maintaining and improving the software. +Most of the times, you will also need to get your team up to speed. This is because of the constant development and in parallel between several community developers of open source software. Due to this, there is often confusion among the team since they are uncertain which version does what and if its compatible with other software and platforms. Hence where additional cost comes with every open source software. + +FINAL THOUGHTS: +As a software developer myself, I provided the community with all the software that I wrote for personal projects. I have used open source software for personal needs and within software development jobs. I recommend using open source software since it saved me and my employer a lot of time and money, and made my clients happier. Also, looking at other developer’s codes and algorithms improved my skills in reusing codes that were written by someone else, and my experiences when reviewing others’ algorithms and logic. +As a result of all the benefits, I always contribute in online communities helping other developers and users. I consider doing that as giving back to the community. I would not have been a developer without the help of other developers who did to me in the past exactly what I am doing to others now. There is absolutely no passion for me to abandon a project and never reply to users, and I can say I never had problems in using an open source software; specifically to mention ones that got abounded. We developers love improving and fixing things. We simply love what we do. + + +FURTHER READING: +Using Open-Source Code Can Save You Half a Million Dollars — but Do It CarefullyNine thousand hours. That’s how much time financial tech firm Pendo Systems estimates it would take to write the code…www.inc.com + diff --git a/projects/Scraping Medium Articles/scraping_medium.py b/projects/Scraping Medium Articles/scraping_medium.py new file mode 100644 index 000000000..4680dca49 --- /dev/null +++ b/projects/Scraping Medium Articles/scraping_medium.py @@ -0,0 +1,71 @@ +import os +import sys +import requests +import re +from bs4 import BeautifulSoup + +# switching to current running python files directory +os.chdir('\\'.join(__file__.split('/')[:-1])) + +# function to get the html of the page +def get_page(): + global url + url = input('Enter url of a medium article: ') + # handling possible error + if not re.match(r'https?://medium.com/',url): + print('Please enter a valid website, or make sure it is a medium article') + sys.exit(1) + res = requests.get(url) + res.raise_for_status() + soup = BeautifulSoup(res.text, 'html.parser') + return soup + +# function to remove all the html tags and replace some with specific strings +def purify(text): + rep = {"
    ": "\n", "
    ": "\n", "
  • ": "\n"} + rep = dict((re.escape(k), v) for k, v in rep.items()) + pattern = re.compile("|".join(rep.keys())) + text = pattern.sub(lambda m: rep[re.escape(m.group(0))], text) + text = re.sub('\<(.*?)\>', '', text) + return text + +# function to compile all of the scraped text in one string +def collect_text(soup): + fin = f'url: {url}\n\n' + main = (soup.head.title.text).split('|') + global title + title = main[0].strip() + fin += f'Title: {title.upper()}\n{main[1].strip()}' + + header = soup.find_all('h1') + j = 1 + + try: + fin += '\n\nINTRODUCTION\n' + for elem in list(header[j].previous_siblings)[::-1]: + fin += f'\n{purify(str(elem))}' + except: + pass + + fin += f'\n\n{header[j].text.upper()}' + for elem in header[j].next_siblings: + if elem.name == 'h1': + j+=1 + fin += f'\n\n{header[j].text.upper()}' + continue + fin += f'\n{purify(str(elem))}' + return fin + +# function to save file in the current directory +def save_file(fin): + if not os.path.exists('./scraped_articles'): + os.mkdir('./scraped_articles') + fname = './scraped_articles/' + '_'.join(title.split()) + '.txt' + with open(fname, 'w', encoding='utf8') as outfile: + outfile.write(fin) + print(f'File saved in directory {fname}') + +# driver code +if __name__ == '__main__': + fin = collect_text(get_page()) + save_file(fin) diff --git a/projects/Send_email_from_csv/Readme.md b/projects/Send_email_from_csv/Readme.md new file mode 100644 index 000000000..9cef28dad --- /dev/null +++ b/projects/Send_email_from_csv/Readme.md @@ -0,0 +1,43 @@ +# Send Emails from CSV File + +This project contains a simple bulk email script +which sends the same message to a list of recipients. + + +## Dependencies + +This project only requires the Python standard library +(more specifically, the `csv`, `email`, and `smtplib` modules). + + +## Running the script + +The script requires two configuration files: + +* `emails.csv` should contain the email addresses to send the message to. +* `credentials.txt` should contain your SMTP server login credentials, + with your user name and your password on sepate lines, + with no additional whitespace or other decorations. + +The project's directory contains two example files which you'll +probably both want and need to edit. + +Once you have these files set up, simply + +``` +python Send_emails.py +``` + + +## Development ideas + +A proper email sender would use `Cc:` or `Bcc:` and send the same +message just once. + +Don't play frivolously with this; your email provider, +and/or the recipient's, +may have automatic filters which quickly block anyone who sends +multiple identical messages. + +The script simply hardcodes the conventions for Gmail.com. +Other providers may use a different port number and authentication regime. diff --git a/projects/send email from CSV/Sending_mail.py b/projects/Send_email_from_csv/Sending_mail.py similarity index 66% rename from projects/send email from CSV/Sending_mail.py rename to projects/Send_email_from_csv/Sending_mail.py index 8fcdf5722..09d050e08 100644 --- a/projects/send email from CSV/Sending_mail.py +++ b/projects/Send_email_from_csv/Sending_mail.py @@ -1,50 +1,52 @@ -import smtplib -import csv - - -def get_credentials(filepath): - with open("credentials.txt", "r") as f: - Email_Address = f.readline() - Email_Pass = f.readline() - return (Email_Address, Email_Pass) - - -def login(email_address, email_pass, s): - s.ehlo() - # start TLS for security - s.starttls() - s.ehlo() - # Authentication - s.login(email_address, email_pass) - print("login") - - - -def Send_mail(): - s = smtplib.SMTP("smtp.gmail.com", 587) - Email_Address, Email_Pass = get_credentials("./credentials.txt") - login(Email_Address, Email_Pass, s) - - - # message to be sent - subject = "Welcome to python" - body = """Python is an interpreted, high-level, - general-purpose programming language.\n - Created by Guido van Rossum and first released in 1991, - Python's design philosophy emphasizes code readability\n - with its notable use of significant whitespace""" - message = f"Subject : {subject} \n\n {body}" - - with open("emails.csv", newline="") as csvfile: - spamreader = csv.reader(csvfile, delimiter=" ", quotechar="|") - for email in spamreader: - s.sendmail(Email_Address, email[0], message) - print("Send To " + email[0]) - - # terminating the session - s.quit() - print("sent") - - -if __name__ == "__main__": - Send_mail() +import csv +from email.message import EmailMessage +import smtplib + + +def get_credentials(filepath): + with open("credentials.txt", "r") as f: + email_address = f.readline() + email_pass = f.readline() + return (email_address, email_pass) + + +def login(email_address, email_pass, s): + s.ehlo() + # start TLS for security + s.starttls() + s.ehlo() + # Authentication + s.login(email_address, email_pass) + print("login") + + +def send_mail(): + s = smtplib.SMTP("smtp.gmail.com", 587) + email_address, email_pass = get_credentials("./credentials.txt") + login(email_address, email_pass, s) + + # message to be sent + subject = "Welcome to Python" + body = """Python is an interpreted, high-level, + general-purpose programming language.\n + Created by Guido van Rossum and first released in 1991, + Python's design philosophy emphasizes code readability\n + with its notable use of significant whitespace""" + + message = EmailMessage() + message.set_content(body) + message['Subject'] = subject + + with open("emails.csv", newline="") as csvfile: + spamreader = csv.reader(csvfile, delimiter=" ", quotechar="|") + for email in spamreader: + s.send_message(email_address, email[0], message) + print("Send To " + email[0]) + + # terminating the session + s.quit() + print("sent") + + +if __name__ == "__main__": + send_mail() diff --git a/projects/send email from CSV/credentials.txt b/projects/Send_email_from_csv/credentials.txt similarity index 94% rename from projects/send email from CSV/credentials.txt rename to projects/Send_email_from_csv/credentials.txt index 787f9e3a7..2327478f6 100644 --- a/projects/send email from CSV/credentials.txt +++ b/projects/Send_email_from_csv/credentials.txt @@ -1,2 +1,2 @@ -YourEmail +YourEmail Yourpass \ No newline at end of file diff --git a/projects/send email from CSV/emails.csv b/projects/Send_email_from_csv/emails.csv similarity index 95% rename from projects/send email from CSV/emails.csv rename to projects/Send_email_from_csv/emails.csv index ceea59a10..9c21459f5 100644 --- a/projects/send email from CSV/emails.csv +++ b/projects/Send_email_from_csv/emails.csv @@ -1,4 +1,4 @@ -mithilesh24m@gmail.com -mithilesh24m@gmail.com -mithilesh24m@gmail.com -mithilesh24m@gmail.com +mithilesh24m@gmail.com +mithilesh24m@gmail.com +mithilesh24m@gmail.com +mithilesh24m@gmail.com diff --git a/projects/Set_Alarm/README.md b/projects/Set_Alarm/README.md new file mode 100644 index 000000000..e0f9aa800 --- /dev/null +++ b/projects/Set_Alarm/README.md @@ -0,0 +1,43 @@ +# Set Alarm + +This script lets you set an alarm and plays your selected music after the selected time. +**THIS SCRIPT ONLY WORKS ON WINDOWS** + +### Usage +``` +$ python alarm.py +``` + +### Sample output +``` +$ python3 alarm.py + +########################### +###### Alarm Program ###### +########################### + +Set the alarm time (e.g. 01:10): 00:01 + +Select any alarm music: + +1. The Four Seasons +2. Carnival +3. Renaissance +4. Variations +5. Dreamy Nights +6. Lakhau Hajarau +7. New Horizon +8. Crusade +9. Mozart Wakes +10. Morning Calm + + +Enter the index of the listed musics (e.g. 1): 1 +>> Alarm music has been set --> The Four Seasons + +>>> Alarm has been set successfully for 00:01! Please dont close the program! <<< +``` + +## *Author Name* + +[Kai Reichart](https://github.com/KaiReichart) diff --git a/projects/Set_Alarm/alarm.py b/projects/Set_Alarm/alarm.py new file mode 100644 index 000000000..8f8ad4c4b --- /dev/null +++ b/projects/Set_Alarm/alarm.py @@ -0,0 +1,76 @@ +import datetime +import os +import re +import subprocess + + +def rename_files_with_whitespaces(cd, files, extra_path=""): + for file in files: + if " " in file: + renamed_file = file.replace(" ", "_") + os.rename(os.path.join(cd, extra_path, file), os.path.join(cd, extra_path, renamed_file)) + + +def clean_filename(file): + return ' '.join(map(str.capitalize, file[:-4].split('_'))) + + +def set_alarm(): + stop = False + error = True + while error: + user_set_time = ":".join(map(lambda x: str(x).zfill(2), input("\nSet the alarm time (e.g. 01:10): ").split(":"))) + + if re.match(r"^[0-9]{2}:[0-9]{2}$", user_set_time): + playback_time = f"{user_set_time}:00.000000" + error = False + else: + print(">>> Error: Time format invalid! Please try again!\n") + + cd = os.path.dirname(os.path.realpath(__file__)) + musics_path = os.path.join(cd, "musics") + + rename_files_with_whitespaces(cd, os.listdir(musics_path), "musics") + + musics = os.listdir(musics_path) + if len(musics) < 1: + print(">>> Error: No music in the musics folder! Please add music first!\n") + exit() + + elif len(musics) == 1: + print(">> Alarm music has been set default --> " + clean_filename(musics[0])) + selected_music = musics[0] + + else: + error = True + while error: + try: + print("\nSelect any alarm music:\n") + for i in range(1, len(musics) + 1): + print(f"{i}. {clean_filename(musics[i - 1])}") + + user_input = int(input("\nEnter the index of the listed musics (e.g. 1): ")) + selected_music = musics[user_input - 1] + print(">> Alarm music has been set --> "+ clean_filename(selected_music)) + error = False + + except: + print(">>> Error: Invalid Index! Please try again!\n") + + print(f"\n>>> Alarm has been set successfully for {user_set_time}! Please dont close the program! <<<") + while stop == False: + current_time = str(datetime.datetime.now().time()) + if current_time >= playback_time: + stop = True + subprocess.run(('cmd', '/C', 'start', f"{cd}\\musics\\{selected_music}")) + print(">>> Alarm ringing! Closing the program!! Bye Bye!!! <<<") + +def display_header(header): + print("") + print("###########################".center(os.get_terminal_size().columns)) + print(f"###### {header} ######".center(os.get_terminal_size().columns)) + print("###########################".center(os.get_terminal_size().columns)) + +if __name__ == "__main__": + display_header("Alarm Program") + set_alarm() \ No newline at end of file diff --git a/projects/Set_Alarm/musics/Carnival.ogg b/projects/Set_Alarm/musics/Carnival.ogg new file mode 100644 index 000000000..14ed9402a Binary files /dev/null and b/projects/Set_Alarm/musics/Carnival.ogg differ diff --git a/projects/Set_Alarm/musics/Crusade.ogg b/projects/Set_Alarm/musics/Crusade.ogg new file mode 100644 index 000000000..0a0a7880a Binary files /dev/null and b/projects/Set_Alarm/musics/Crusade.ogg differ diff --git a/projects/Set_Alarm/musics/Renaissance.ogg b/projects/Set_Alarm/musics/Renaissance.ogg new file mode 100644 index 000000000..ec8a535ae Binary files /dev/null and b/projects/Set_Alarm/musics/Renaissance.ogg differ diff --git a/projects/Set_Alarm/musics/Variations.ogg b/projects/Set_Alarm/musics/Variations.ogg new file mode 100644 index 000000000..0dd80d93c Binary files /dev/null and b/projects/Set_Alarm/musics/Variations.ogg differ diff --git a/projects/Set_Alarm/musics/dreamy_nights.ogg b/projects/Set_Alarm/musics/dreamy_nights.ogg new file mode 100644 index 000000000..fba93dc55 Binary files /dev/null and b/projects/Set_Alarm/musics/dreamy_nights.ogg differ diff --git a/projects/Set_Alarm/musics/lakhau_hajarau.mp3 b/projects/Set_Alarm/musics/lakhau_hajarau.mp3 new file mode 100644 index 000000000..f783d8bc6 Binary files /dev/null and b/projects/Set_Alarm/musics/lakhau_hajarau.mp3 differ diff --git a/projects/Set_Alarm/musics/morning_calm.ogg b/projects/Set_Alarm/musics/morning_calm.ogg new file mode 100644 index 000000000..ed0d6d75e Binary files /dev/null and b/projects/Set_Alarm/musics/morning_calm.ogg differ diff --git a/projects/Set_Alarm/musics/mozart_wakes.ogg b/projects/Set_Alarm/musics/mozart_wakes.ogg new file mode 100644 index 000000000..161f23465 Binary files /dev/null and b/projects/Set_Alarm/musics/mozart_wakes.ogg differ diff --git a/projects/Set_Alarm/musics/new_horizon.ogg b/projects/Set_Alarm/musics/new_horizon.ogg new file mode 100644 index 000000000..a71806b01 Binary files /dev/null and b/projects/Set_Alarm/musics/new_horizon.ogg differ diff --git a/projects/Set_Alarm/musics/the_four_seasons.ogg b/projects/Set_Alarm/musics/the_four_seasons.ogg new file mode 100644 index 000000000..5706015ca Binary files /dev/null and b/projects/Set_Alarm/musics/the_four_seasons.ogg differ diff --git a/projects/Shutdown_or_restart_your_device/PowerOptions.py b/projects/Shutdown_or_restart_your_device/PowerOptions.py new file mode 100644 index 000000000..4d2762599 --- /dev/null +++ b/projects/Shutdown_or_restart_your_device/PowerOptions.py @@ -0,0 +1,28 @@ +import os +import platform + +def shutdown(): + if platform.system() == "Windows": + os.system('shutdown -s') + elif platform.system() == "Linux" or platform.system() == "Darwin": + os.system("shutdown -h now") + else: + print("Os not supported!") + +def restart(): + if platform.system() == "Windows": + os.system("shutdown -t 0 -r -f") + elif platform.system() == "Linux" or platform.system() == "Darwin": + os.system('reboot now') + else: + print("Os not supported!") + + +command = input("Use \'r\' for restart and \'s\' for shutdown: ").lower() + +if command == "r": + restart() +elif command == "s": + shutdown() +else: + print("Wrong letter") diff --git a/projects/Shutdown_or_restart_your_device/README.md b/projects/Shutdown_or_restart_your_device/README.md new file mode 100644 index 000000000..7f48794ec --- /dev/null +++ b/projects/Shutdown_or_restart_your_device/README.md @@ -0,0 +1,29 @@ +# Power Options + +This script shuts down or restarts your computer + +### Prerequisites + +None + +### How to run the script + +Steps on how to run the script along with suitable examples. +1. Type the following on the command line: +python PowerOptions.py + +2. Press enter and wait for prompt. Type “r” to restart or “s” to shut down + +Example: +python PowerOptions.py +Use 'r' for restart and 's' for shutdown: r + +### Screenshot/GIF showing the sample use of the script + +python PowerOptions.py +Use 'r' for restart and 's' for shutdown: r + +## *Author Name* + +[Phillibob55](https://github.com/Phillibob55) + diff --git a/projects/Sine_Wave/README.md b/projects/Sine_Wave/README.md new file mode 100644 index 000000000..a404b6697 --- /dev/null +++ b/projects/Sine_Wave/README.md @@ -0,0 +1,21 @@ +# Script Title +This script draws a sine wave using the built-in Python library Turtle. +The image below demonstrates the equation of a sine wave. +![Screenshot of the sine wave equation](equation.png) +[source](https://www.mathsisfun.com/algebra/amplitude-period-frequency-phase-shift.html) + +### Prerequisites +None + +### How to run the script +1) Open a terminal +2) Navigate to the "Sine_Wave" directory containing this python file using the command prompt. +3) **Execute:** `python sine_wave.py` + +### Screenshot/GIF showing the sample use of the script +![Screenshot of the sine_wave.py file](screenshot.png) + + +## *Author Name* +[echoaj](https://github.com/echoaj) + diff --git a/projects/Sine_Wave/equation.PNG b/projects/Sine_Wave/equation.PNG new file mode 100644 index 000000000..7056f406e Binary files /dev/null and b/projects/Sine_Wave/equation.PNG differ diff --git a/projects/Sine_Wave/screenshot.PNG b/projects/Sine_Wave/screenshot.PNG new file mode 100644 index 000000000..96bce8131 Binary files /dev/null and b/projects/Sine_Wave/screenshot.PNG differ diff --git a/projects/Sine_Wave/sine_wave.py b/projects/Sine_Wave/sine_wave.py new file mode 100644 index 000000000..81113c688 --- /dev/null +++ b/projects/Sine_Wave/sine_wave.py @@ -0,0 +1,19 @@ +from turtle import * +from math import * + + +A = 50 # Amplitude +B = 100 # WaveLength +C = 0 # Horizontal Shift +D = 0 # Vertical Shift + +penup() +# As x increases y increases and decreases as it is evaluated. +for x in range(-200, 200): + # Sine Wave Equation + y = A * sin((2 * pi / B) * (x + C)) + D + goto(x, y) + pendown() + +hideturtle() +mainloop() diff --git a/projects/Snake Game/snake_game.py b/projects/Snake Game/snake_game.py new file mode 100644 index 000000000..19bd6f0f3 --- /dev/null +++ b/projects/Snake Game/snake_game.py @@ -0,0 +1,163 @@ +from tkinter import * +import random + +GAME_WIDTH = 700 +GAME_HEIGHT = 700 +SPEED = 100 +SPACE_SIZE = 50 +BODY_PARTS = 3 +SNAKE_COLOR = "#00FF00" +FOOD_COLOR = "#FF0000" +BACKGROUND_COLOR = "#000000" + + +class Snake: + + def __init__(self): + self.body_size = BODY_PARTS + self.coordinates = [] + self.squares = [] + + for i in range(0, BODY_PARTS): + self.coordinates.append([0, 0]) + + for x, y in self.coordinates: + square = canvas.create_rectangle(x, y, x + SPACE_SIZE, y + SPACE_SIZE, fill=SNAKE_COLOR, tag="snake") + self.squares.append(square) + + +class Food: + + def __init__(self): + + x = random.randint(0, (GAME_WIDTH / SPACE_SIZE)-1) * SPACE_SIZE + y = random.randint(0, (GAME_HEIGHT / SPACE_SIZE) - 1) * SPACE_SIZE + + self.coordinates = [x, y] + + canvas.create_oval(x, y, x + SPACE_SIZE, y + SPACE_SIZE, fill=FOOD_COLOR, tag="food") + + +def next_turn(snake, food): + + x, y = snake.coordinates[0] + + if direction == "up": + y -= SPACE_SIZE + elif direction == "down": + y += SPACE_SIZE + elif direction == "left": + x -= SPACE_SIZE + elif direction == "right": + x += SPACE_SIZE + + snake.coordinates.insert(0, (x, y)) + + square = canvas.create_rectangle(x, y, x + SPACE_SIZE, y + SPACE_SIZE, fill=SNAKE_COLOR) + + snake.squares.insert(0, square) + + if x == food.coordinates[0] and y == food.coordinates[1]: + + global score + + score += 1 + + label.config(text="Score:{}".format(score)) + + canvas.delete("food") + + food = Food() + + else: + + del snake.coordinates[-1] + + canvas.delete(snake.squares[-1]) + + del snake.squares[-1] + + if check_collisions(snake): + game_over() + + else: + window.after(SPEED, next_turn, snake, food) + + +def change_direction(new_direction): + + global direction + + if new_direction == 'left': + if direction != 'right': + direction = new_direction + elif new_direction == 'right': + if direction != 'left': + direction = new_direction + elif new_direction == 'up': + if direction != 'down': + direction = new_direction + elif new_direction == 'down': + if direction != 'up': + direction = new_direction + + +def check_collisions(snake): + + x, y = snake.coordinates[0] + + if x < 0 or x >= GAME_WIDTH: + return True + elif y < 0 or y >= GAME_HEIGHT: + return True + + for body_part in snake.coordinates[1:]: + if x == body_part[0] and y == body_part[1]: + return True + + return False + + +def game_over(): + + canvas.delete(ALL) + canvas.create_text(canvas.winfo_width()/2, canvas.winfo_height()/2, + font=('consolas',70), text="GAME OVER", fill="red", tag="gameover") + + +window = Tk() +window.title("Snake game") +window.resizable(False, False) + +score = 0 +direction = 'down' + +label = Label(window, text="Score:{}".format(score), font=('consolas', 40)) +label.pack() + +canvas = Canvas(window, bg=BACKGROUND_COLOR, height=GAME_HEIGHT, width=GAME_WIDTH) +canvas.pack() + +window.update() + +window_width = window.winfo_width() +window_height = window.winfo_height() +screen_width = window.winfo_screenwidth() +screen_height = window.winfo_screenheight() + +x = int((screen_width/2) - (window_width/2)) +y = int((screen_height/2) - (window_height/2)) + +window.geometry(f"{window_width}x{window_height}+{x}+{y}") + +window.bind('', lambda event: change_direction('left')) +window.bind('', lambda event: change_direction('right')) +window.bind('', lambda event: change_direction('up')) +window.bind('', lambda event: change_direction('down')) + +snake = Snake() +food = Food() + +next_turn(snake, food) + +window.mainloop() \ No newline at end of file diff --git a/projects/snapshot of given website/README.md b/projects/Snapshot_of_given_website/README.md similarity index 100% rename from projects/snapshot of given website/README.md rename to projects/Snapshot_of_given_website/README.md diff --git a/projects/Snapshot_of_given_website/requirements.txt b/projects/Snapshot_of_given_website/requirements.txt new file mode 100644 index 000000000..a89be0062 --- /dev/null +++ b/projects/Snapshot_of_given_website/requirements.txt @@ -0,0 +1,2 @@ +selenium==3.141.0 +chromedriver-binary==85.0.4183.38.0 diff --git a/projects/snapshot of given website/snapshot_of_given_website.py b/projects/Snapshot_of_given_website/snapshot_of_given_website.py similarity index 100% rename from projects/snapshot of given website/snapshot_of_given_website.py rename to projects/Snapshot_of_given_website/snapshot_of_given_website.py diff --git a/projects/Solver_linear_equations/README.md b/projects/Solver_linear_equations/README.md new file mode 100644 index 000000000..35c3a8601 --- /dev/null +++ b/projects/Solver_linear_equations/README.md @@ -0,0 +1,25 @@ +

    Solver linear equations

    + +

    Enter values through spaces for each of the three equations, return the solution and a 3D graph.

    + +

    Prerequisites

    +
      +
    • Numpy
    • +
    • Matplotlib
    • +
    + +

    Install prerequisites

    +
      +
    • pip install numpy
    • +
    • pip install matplotlib
    • +
    + +

    How to run the script

    +

    python3 linearEquations.py

    + +

    Screenshot of the script running

    + +![screenshot1](https://user-images.githubusercontent.com/76462037/141659586-13865df9-f853-4dd5-9bae-a2e32f9ec8ef.jpeg) +![screenshot2](https://user-images.githubusercontent.com/76462037/141659827-c4bd9b90-5f45-4eba-9f3c-f5b679c07c75.png) + +

    Author Name:

    Sergio-Torres diff --git a/projects/Solver_linear_equations/linearEquations.py b/projects/Solver_linear_equations/linearEquations.py new file mode 100644 index 000000000..cb0ec723d --- /dev/null +++ b/projects/Solver_linear_equations/linearEquations.py @@ -0,0 +1,44 @@ +import numpy as np +import matplotlib.pyplot as plt +from mpl_toolkits.mplot3d import Axes3D +from matplotlib import cm + +print('The 3 equations are entered individually, each value of the equation is entered separated by a space, for example: \ninput = 6 5 -3 4 \nThis will be equal to 6x + 5y- 3z = 4') + +print('Enter values for equation 1: ') +a, b, c, d = map(float, input().split()) + +print('Enter values for equation 2: ') +e, f, g, h = map(float, input().split()) + +print('Enter values for equation 3: ') +i, j, k, l = map(float, input().split()) +#solve the linear equation +A = np.array([[a,b,c],[e,f,g],[i,j,k]]) +b_a = np.array([d,h,l]) +sol = np.linalg.solve(A,b_a) +print(sol) + + +x,y = np.linspace(0,10,10), np.linspace(0,10,10) +X,Y = np.meshgrid(x,y) + +Z1 = (d-a*X-b*Y)/c +Z2 =(h-e*X-f*Y)/g +Z3 =(l+X-Y)/k + +#create 3d graphics + +fig = plt.figure() +ax = fig.add_subplot(111,projection='3d') +ax.plot_surface(X,Y,Z1,alpha=0.5,cmap=cm.Accent,rstride=100,cstride=100) +ax.plot_surface(X,Y,Z2,alpha=0.5,cmap=cm.Paired,rstride=100,cstride=100) +ax.plot_surface(X,Y,Z3,alpha=0.5,cmap=cm.Pastel1,rstride=100,cstride=100) +ax.plot((sol[0],),(sol[1],),(sol[2],),lw=2,c='k', marker='o', markersize=7, markeredgecolor='g', markerfacecolor='white') +ax.set_xlabel('X axis') +ax.set_ylabel('Y axis') +ax.set_zlabel('Z axis') + +plt.show() + + diff --git a/projects/Solver_linear_equations/screenshot1.jpeg b/projects/Solver_linear_equations/screenshot1.jpeg new file mode 100644 index 000000000..a73bdf75c Binary files /dev/null and b/projects/Solver_linear_equations/screenshot1.jpeg differ diff --git a/projects/Solver_linear_equations/screenshot2.png b/projects/Solver_linear_equations/screenshot2.png new file mode 100644 index 000000000..92ff7bcdf Binary files /dev/null and b/projects/Solver_linear_equations/screenshot2.png differ diff --git a/projects/Space_bullet_shooter_game/bg.wav b/projects/Space_bullet_shooter_game/bg.wav new file mode 100644 index 000000000..6a9dde99e Binary files /dev/null and b/projects/Space_bullet_shooter_game/bg.wav differ diff --git a/projects/Space_bullet_shooter_game/bullet.png b/projects/Space_bullet_shooter_game/bullet.png new file mode 100644 index 000000000..5f35d6528 Binary files /dev/null and b/projects/Space_bullet_shooter_game/bullet.png differ diff --git a/projects/Space_bullet_shooter_game/bulletout.wav b/projects/Space_bullet_shooter_game/bulletout.wav new file mode 100644 index 000000000..12a12b8b4 Binary files /dev/null and b/projects/Space_bullet_shooter_game/bulletout.wav differ diff --git a/projects/Space_bullet_shooter_game/bulletshoot.wav b/projects/Space_bullet_shooter_game/bulletshoot.wav new file mode 100644 index 000000000..d896ae60f Binary files /dev/null and b/projects/Space_bullet_shooter_game/bulletshoot.wav differ diff --git a/projects/Space_bullet_shooter_game/ens.png b/projects/Space_bullet_shooter_game/ens.png new file mode 100644 index 000000000..67fbaa10f Binary files /dev/null and b/projects/Space_bullet_shooter_game/ens.png differ diff --git a/projects/Space_bullet_shooter_game/icond.png b/projects/Space_bullet_shooter_game/icond.png new file mode 100644 index 000000000..73d3d00eb Binary files /dev/null and b/projects/Space_bullet_shooter_game/icond.png differ diff --git a/projects/Space_bullet_shooter_game/img2.png b/projects/Space_bullet_shooter_game/img2.png new file mode 100644 index 000000000..444cade1c Binary files /dev/null and b/projects/Space_bullet_shooter_game/img2.png differ diff --git a/projects/Space_bullet_shooter_game/pl4.png b/projects/Space_bullet_shooter_game/pl4.png new file mode 100644 index 000000000..62625b4b4 Binary files /dev/null and b/projects/Space_bullet_shooter_game/pl4.png differ diff --git a/projects/Space_bullet_shooter_game/readme.md b/projects/Space_bullet_shooter_game/readme.md new file mode 100644 index 000000000..0d7db7199 --- /dev/null +++ b/projects/Space_bullet_shooter_game/readme.md @@ -0,0 +1,8 @@ +## A Simple Space Bullet Shooter Game: +##### To be Played with a Computer. +* Arrows to move up and down and left and right. +* Enter to shoot a bullet. + + +### Example Game: +![Game](spacegame.png) diff --git a/projects/Space_bullet_shooter_game/sample.mp3 b/projects/Space_bullet_shooter_game/sample.mp3 new file mode 100644 index 000000000..852eb3186 Binary files /dev/null and b/projects/Space_bullet_shooter_game/sample.mp3 differ diff --git a/projects/Space_bullet_shooter_game/space_bullet_shooter.py b/projects/Space_bullet_shooter_game/space_bullet_shooter.py new file mode 100644 index 000000000..5bddbc2ef --- /dev/null +++ b/projects/Space_bullet_shooter_game/space_bullet_shooter.py @@ -0,0 +1,312 @@ +""" + @Author : TheKnight + Date : 6/09/2020 + + copyright © TheKight All Right Reserved + + + +""" + +import pygame +import random +import math +import time + +from pygame import mixer + + + + +pygame.init() + +clock = pygame.time.Clock() +# bg sound +mixer.music.load("bg.wav") +mixer.music.play(-1) + + +score_value = 0 + + +# setting the display +screen = pygame.display.set_mode((800,600)) + +# background +bg = pygame.image.load("img2.png") + +icon = pygame.image.load("icond.png") +pygame.display.set_caption("Space Bullet Shooter") +# display the icon +pygame.display.set_icon(icon) + + + + +# showing the bird imageo +playeimg = pygame.image.load("pl4.png") +playerx = 370 +playery = 460 + +playerx_change = 0 + +def player(x,y): + screen.blit(playeimg,(x,y)) + + + + + + + + # moving the playerimag + # for this we will use cordinate movement + # we will pass arugument to the function + + +# for enemy +enemyimg =[] +enemyX = [] +enemyY = [] +enemyX_change = [] +enemyY_change = [] + +number_of_enemy = 6 +for i in range(number_of_enemy): + + + enemyimg.append(pygame.image.load("ens.png")) + + enemyX.append(random.randint(0,736)) + enemyY.append(random.randint(50,150)) + enemyX_change.append(4) + enemyY_change.append(30) + + +# bullet +bulletimg = pygame.image.load("bullet.png") +bulletX = 0 +bulletY = 480 +bulletX_change = 0 +bulletY_change = 20 +bullet_state = "ready" +# function for enemy + +def enemy(x,y,i): + screen.blit(enemyimg[i],(x,y)) + + +# function for fire bullet + +def fire_bullet(x,y): + global bullet_state + bullet_state = "fire" + screen.blit(bulletimg,(x+53,y+10)) + + + +# checking if collision +def is_collision(enemyX,enemyY,playerx,playery): + + distance = math.sqrt((math.pow(enemyX-bulletX,2))+(math.pow(enemyY-bulletY,2))) + if distance < 27: + return True + + else: + return False + + + +# showing score + +font = pygame.font.Font("freesansbold.ttf",35) +score_cordinate_X = 10 +Score_cordinate_Y=10 +def showscore(x,y): + score = font.render("Score : " + str(score_value),True,(255,255,255)) + screen.blit(score,(x,y)) + + + +OVER = pygame.font.Font("freesansbold.ttf",60) +# game over +def game_over(): + over = OVER.render("GAME OVER " + ,True,(0,0,255)) + screen.blit(over,(250,250)) + + +final = pygame.font.Font("freesansbold.ttf",50) +def final_score(): + finalscore = final.render("Total Score : " +str(score_value) ,True,(0,255,0)) + screen.blit(finalscore,(280,350)) + + +author = pygame.font.Font("freesansbold.ttf",16) +# showing author name + +def author_name(): + subject = author.render("Copyright ©2020 TheKnight All Right Reseved By TheKnight " + ,True,(0,255,0)) + screen.blit(subject,(170,580)) + + +# game loop +running = True + +while running: + screen.fill((0,0,0)) + screen.blit(bg,(0,0)) + + + for event in pygame.event.get(): + if event.type == pygame.QUIT: + running = False + + # controlling the bird by arrow keys + + if event.type == pygame.KEYDOWN: + if event.key == pygame.K_LEFT: + playerx_change = -5 + + if event.key == pygame.K_RIGHT: + playerx_change = 5 + + if event.key == pygame.K_SPACE: + if bullet_state == "ready": + bulletX = playerx + bulletsound = mixer.Sound("bulletout.wav") + bulletsound.play() + + fire_bullet(bulletX,bulletY) + + + + if event.type == pygame.KEYUP: + if event.key == pygame.K_LEFT or event.key == pygame.K_LEFT: + playerx_change = 0 + + + + for i in range(number_of_enemy): + + # game over + if enemyY[i] >440: + + for j in range(number_of_enemy): + enemyY[j] =2000 + game_over() + time.sleep(2) + + final_score() + + break + + + + + + + enemyX[i] += enemyX_change[i] + if enemyX[i] <=0: + enemyX_change[i]= 4 + enemyY[i] += enemyY_change[i] + + elif enemyX[i]>=736: + enemyX_change[i] = -4 + enemyY[i] += enemyY_change[i] + + + # collision + + collision = is_collision(enemyX[i],enemyY[i],bulletX,bulletY) + if collision: + bulletsound = mixer.Sound("bulletshoot.wav") + bulletsound.play() + bulletY = 480 + bullet_state = "ready" + + score_value +=1 + + + enemyX[i] = random.randint(0,736) + enemyY[i] = random.randint(50,150) + + + enemy(enemyX[i],enemyY[i],i) + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + # checking boundries of spacechip + playerx+=playerx_change + + if playerx <=0: + playerx = 0 + elif playerx>=730: + playerx = 730 + + + + # playerx -=0.2 + # playery -=.2 + + + + # bullet movement + if bulletY <=0: + bulletY=480 + bullet_state = "ready" + if bullet_state == "fire": + fire_bullet(bulletX,bulletY) + bulletY -= bulletY_change + + player(playerx,playery) + showscore(score_cordinate_X,Score_cordinate_Y) + + author_name() + + + + + + + pygame.display.update() + diff --git a/projects/Space_bullet_shooter_game/spacegame.png b/projects/Space_bullet_shooter_game/spacegame.png new file mode 100644 index 000000000..3ee30fda5 Binary files /dev/null and b/projects/Space_bullet_shooter_game/spacegame.png differ diff --git a/projects/Speaking_Dictionary/README.md b/projects/Speaking_Dictionary/README.md new file mode 100644 index 000000000..ae9f9a912 --- /dev/null +++ b/projects/Speaking_Dictionary/README.md @@ -0,0 +1,19 @@ +# Speaking Dictionary +Speaking Dictionary is Python program that allows the user to find the meaning of English word by speaking it directly to the program(device). Then, the program(device) will directly explain the definition of the word out loud. + +### Prerequisites +pyttsx3: pip install pyttsx3 +PyDictionary: pip install PyDictionary +speech recognition: pip install SpeechRecognition +gTTS: pip install gtts + ++pip install pyaudio + +### How to run the script +SpeakingDictionary.py + +### Screenshot/GIF showing the sample use of the script +[SpeakingDictionary](https://user-images.githubusercontent.com/69775935/140873415-dc79bdd7-d36e-4ca5-ae6f-4da88837f5f0.png) + +### Author Name +Yaejin Lee : 19lyaejin, https://github.com.19lyaejin diff --git a/projects/Speaking_Dictionary/SpeakingDictionary.py b/projects/Speaking_Dictionary/SpeakingDictionary.py new file mode 100644 index 000000000..bea0c2e21 --- /dev/null +++ b/projects/Speaking_Dictionary/SpeakingDictionary.py @@ -0,0 +1,83 @@ +import pyttsx3 +from PyDictionary import PyDictionary +import speech_recognition as spr +from gtts import gTTS +import os + +#Speaking class +class Speak: + def SpeakWord(self, audio): + #Having initial constructor of pyttsx3 + pSpeakEngine= pyttsx3.init('sapi5') + pVoices= pSpeakEngine.getProperty('voices') + + #Speaking audio that got as parameter + pSpeakEngine.setProperty('voices', pVoices[0].id) + pSpeakEngine.say(audio) + pSpeakEngine.runAndWait() + +#Create Recognizer, Microphone instance +sRecog= spr.Recognizer() +sMic= spr.Microphone() + +#Capture voice from microphone +with sMic as source: + print("Speak 'Hello' to initiate Speaking Dictionary!") + print("----------------------------------------------") + + sRecog.adjust_for_ambient_noise(source, duration= .2) + rAudio= sRecog.listen(source) + + szHello= sRecog.recognize_google(rAudio, language= 'en-US') + szHello= szHello.lower() + +#If you said 'Hello', initialize the speaking dictionary +if 'hello' in szHello: + sSpeak= Speak() + pDict= PyDictionary() + + print("Which word do you want to find? Please speak slowly.") + sSpeak.SpeakWord("Which word do you want to find Please speak slowly") + + try: + sRecog2= spr.Recognizer() + sMic2= spr.Microphone() + + #Capture the word that the user want to find the meaning of + with sMic2 as source2: + sRecog2.adjust_for_ambient_noise(source2, duration= .2) + rAudio2= sRecog2.listen(source2) + + szInput= sRecog2.recognize_google(rAudio2, language= 'en-US') + + try: + #Make sure that the recognizer got the correct word + print("Did you said "+ szInput+ "? Please answer with yes or no.") + sSpeak.SpeakWord("Did you said "+ szInput+ "Please answer with yes or no") + + sRecog2.adjust_for_ambient_noise(source2, duration= .2) + rAudioYN= sRecog2.listen(source2) + + szYN= sRecog2.recognize_google(rAudioYN) + szYN= szYN.lower() + + #If the user said 'yes' (When the recognizer got the correct word) + if 'yes' in szYN: + szMeaning= pDict.meaning(szInput) + + print("The meaning is ", end="") + for i in szMeaning: + print(szMeaning[i]) + sSpeak.SpeakWord("The meaning is"+ str(szMeaning[i])) + + #When the recognizer got the wrong word + else: sSpeak.SpeakWord("I am sorry Please try again") + + #When the recognizer couldn't understand the answer(yes or no) + except spr.UnknownValueError: sSpeak.SpeakWord("Unable to understand the input Please try again") + except spr.RequestError as e: sSpeak.SpeakWord("Unable to provide required output") + + #When the recognizer couldn't understand the word + except spr.UnknownValueError: sSpeak.SpeakWord("Unable to understand the input Please try again") + except spr.RequestError as e: sSpeak.SpeakWord("Unable to provide required output") + diff --git a/projects/Speaking_Dictionary/requirements.txt b/projects/Speaking_Dictionary/requirements.txt new file mode 100644 index 000000000..3bd9a3a1a --- /dev/null +++ b/projects/Speaking_Dictionary/requirements.txt @@ -0,0 +1,8 @@ +# Speaking Dictionary Requirements +### prerequisites: pyttsx3, PyDictionary, speech_recognition, gTTS, pyaudio + +pyttsx3: pip install pyttsx3 +PyDictionary: pip install PyDictionary +speech_recognition: pip install SpeechRecognition +gTTS: pip install gtts +pyaudio: pip install pyaudio diff --git a/projects/Speech_to_text/README.md b/projects/Speech_to_text/README.md new file mode 100644 index 000000000..2150f67c1 --- /dev/null +++ b/projects/Speech_to_text/README.md @@ -0,0 +1,35 @@ +# Speech-to-Text Converter + +This Python script converts the Speech input into Text using NLP (Natural Langauge Processing). + +### Requirements + +**Installation Required** : + +* Python Speech Recognition module: + + `pip install speechrecognition` + +* PyAudio: + * Use the following command for linux users + + `sudo apt-get install python3-pyaudio` + + * Windows users can install pyaudio by executing the following command in a terminal + + `pip install pyaudio` + +* Python pyttsx3 module: + + `pip install pyttsx3` + +### How to run the script + +- Enter the audio input by speaking into the microphone. +- Run converter_terminal.py script +- Output Text will be displayed + + +## *Author Name* + +[Paulo Henrique](https://github.com/chavarera/python-mini-projects diff --git a/projects/Speech_to_text/requirements.txt b/projects/Speech_to_text/requirements.txt new file mode 100644 index 000000000..cf7df4505 --- /dev/null +++ b/projects/Speech_to_text/requirements.txt @@ -0,0 +1,2 @@ +PyAudio==0.2.11 +SpeechRecognition==3.8.1 diff --git a/projects/Speech_to_text/speech_to_text.py b/projects/Speech_to_text/speech_to_text.py new file mode 100644 index 000000000..8a9ac156d --- /dev/null +++ b/projects/Speech_to_text/speech_to_text.py @@ -0,0 +1,23 @@ +import speech_recognition + +def record_voice(): + microphone = speech_recognition.Recognizer() + + with speech_recognition.Microphone() as live_phone: + microphone.adjust_for_ambient_noise(live_phone) + + print("I'm trying to hear you: ") + audio = microphone.listen(live_phone) + try: + phrase = microphone.recognize_google(audio, language='en') + return phrase + except speech_recognition.UnkownValueError: + return "I didn't understand what you said" + +if __name__ == '__main__': + phrase = record_voice() + + with open('you_said_this.txt','w') as file: + file.write(phrase) + + print('the last sentence you spoke was saved in you_said_this.txt') diff --git a/projects/Speed_Game/LICENSE b/projects/Speed_Game/LICENSE new file mode 100644 index 000000000..6d15a66d4 --- /dev/null +++ b/projects/Speed_Game/LICENSE @@ -0,0 +1,21 @@ +MIT License + +Copyright (c) 2021 songyi Kim + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. diff --git a/projects/Speed_Game/README.md b/projects/Speed_Game/README.md new file mode 100644 index 000000000..0ba1981b9 --- /dev/null +++ b/projects/Speed_Game/README.md @@ -0,0 +1,38 @@ +# Speed_Game 🕑 + +▶ PLAY + +

    + speed_game_gif +

    + +## **Introduction 📝** + +The speed game is a game that guesses the capital of various countries within a given time. + +## **Getting Started 💻** + +There was a GUI difference between mac and window in the tkinter module, so the folder was divided. + +1. install packages. +```shell +pip install -r requirements.txt +``` +2. go to directory what suits your OS. +3. run main.py + +## **How to Contribute 🌈** + +we love pull requests from everyone!❤️‍🔥 +You can contribute by adding new game category, improving current game. + +Here is a quick quide to doing code contributions. + +1. Find some issue you're interested in, or add a new category that enables speed games. Also make sure that no one else is already working on it. +2. If so, send an issue whether it is okay to fix this problem. We will answer whether it is acceptable or not. +3. Fork, then clone `https://github.com/songyi00/Speed_Game.git` +4. Create a branch with a meaningful name for the issue. +5. Make your changes and push your branch. +6. Submit a Pull Request. +7. Wait a maintainer to review your PR, make changes if it's beigin recommended, and get it merged. +8. Congraturations!🎉 diff --git a/projects/Speed_Game/macOS/.DS_Store b/projects/Speed_Game/macOS/.DS_Store new file mode 100644 index 000000000..5008ddfcf Binary files /dev/null and b/projects/Speed_Game/macOS/.DS_Store differ diff --git a/projects/Speed_Game/macOS/CountryCodeData.xlsx b/projects/Speed_Game/macOS/CountryCodeData.xlsx new file mode 100644 index 000000000..6f9f8b786 Binary files /dev/null and b/projects/Speed_Game/macOS/CountryCodeData.xlsx differ diff --git a/projects/Speed_Game/macOS/SpeedGameBgm.mp3 b/projects/Speed_Game/macOS/SpeedGameBgm.mp3 new file mode 100644 index 000000000..1644ebaab Binary files /dev/null and b/projects/Speed_Game/macOS/SpeedGameBgm.mp3 differ diff --git a/projects/Speed_Game/macOS/correct.png b/projects/Speed_Game/macOS/correct.png new file mode 100644 index 000000000..faf20d508 Binary files /dev/null and b/projects/Speed_Game/macOS/correct.png differ diff --git a/projects/Speed_Game/macOS/halloween.png b/projects/Speed_Game/macOS/halloween.png new file mode 100644 index 000000000..8f395dd01 Binary files /dev/null and b/projects/Speed_Game/macOS/halloween.png differ diff --git a/projects/Speed_Game/macOS/images/.DS_Store b/projects/Speed_Game/macOS/images/.DS_Store new file mode 100644 index 000000000..5008ddfcf Binary files /dev/null and b/projects/Speed_Game/macOS/images/.DS_Store differ diff --git a/projects/Speed_Game/macOS/images/ad.png b/projects/Speed_Game/macOS/images/ad.png new file mode 100644 index 000000000..c0656421c Binary files /dev/null and b/projects/Speed_Game/macOS/images/ad.png differ diff --git a/projects/Speed_Game/macOS/images/ae.png b/projects/Speed_Game/macOS/images/ae.png new file mode 100644 index 000000000..256597d6f Binary files /dev/null and b/projects/Speed_Game/macOS/images/ae.png differ diff --git a/projects/Speed_Game/macOS/images/af.png b/projects/Speed_Game/macOS/images/af.png new file mode 100644 index 000000000..45586b8ad Binary files /dev/null and b/projects/Speed_Game/macOS/images/af.png differ diff --git a/projects/Speed_Game/macOS/images/ag.png b/projects/Speed_Game/macOS/images/ag.png new file mode 100644 index 000000000..0a9a562bf Binary files /dev/null and b/projects/Speed_Game/macOS/images/ag.png differ diff --git a/projects/Speed_Game/macOS/images/ai.png b/projects/Speed_Game/macOS/images/ai.png new file mode 100644 index 000000000..3af01534b Binary files /dev/null and b/projects/Speed_Game/macOS/images/ai.png differ diff --git a/projects/Speed_Game/macOS/images/al.png b/projects/Speed_Game/macOS/images/al.png new file mode 100644 index 000000000..11b394875 Binary files /dev/null and b/projects/Speed_Game/macOS/images/al.png differ diff --git a/projects/Speed_Game/macOS/images/am.png b/projects/Speed_Game/macOS/images/am.png new file mode 100644 index 000000000..5dca3170c Binary files /dev/null and b/projects/Speed_Game/macOS/images/am.png differ diff --git a/projects/Speed_Game/macOS/images/ao.png b/projects/Speed_Game/macOS/images/ao.png new file mode 100644 index 000000000..97c970700 Binary files /dev/null and b/projects/Speed_Game/macOS/images/ao.png differ diff --git a/projects/Speed_Game/macOS/images/aq.png b/projects/Speed_Game/macOS/images/aq.png new file mode 100644 index 000000000..b08f70681 Binary files /dev/null and b/projects/Speed_Game/macOS/images/aq.png differ diff --git a/projects/Speed_Game/macOS/images/ar.png b/projects/Speed_Game/macOS/images/ar.png new file mode 100644 index 000000000..558cb97a3 Binary files /dev/null and b/projects/Speed_Game/macOS/images/ar.png differ diff --git a/projects/Speed_Game/macOS/images/as.png b/projects/Speed_Game/macOS/images/as.png new file mode 100644 index 000000000..2b8a82d79 Binary files /dev/null and b/projects/Speed_Game/macOS/images/as.png differ diff --git a/projects/Speed_Game/macOS/images/at.png b/projects/Speed_Game/macOS/images/at.png new file mode 100644 index 000000000..60a7c7b32 Binary files /dev/null and b/projects/Speed_Game/macOS/images/at.png differ diff --git a/projects/Speed_Game/macOS/images/au.png b/projects/Speed_Game/macOS/images/au.png new file mode 100644 index 000000000..b40a2963c Binary files /dev/null and b/projects/Speed_Game/macOS/images/au.png differ diff --git a/projects/Speed_Game/macOS/images/aw.png b/projects/Speed_Game/macOS/images/aw.png new file mode 100644 index 000000000..05a152767 Binary files /dev/null and b/projects/Speed_Game/macOS/images/aw.png differ diff --git a/projects/Speed_Game/macOS/images/ax.png b/projects/Speed_Game/macOS/images/ax.png new file mode 100644 index 000000000..7b0887a97 Binary files /dev/null and b/projects/Speed_Game/macOS/images/ax.png differ diff --git a/projects/Speed_Game/macOS/images/az.png b/projects/Speed_Game/macOS/images/az.png new file mode 100644 index 000000000..ca8a381e3 Binary files /dev/null and b/projects/Speed_Game/macOS/images/az.png differ diff --git a/projects/Speed_Game/macOS/images/ba.png b/projects/Speed_Game/macOS/images/ba.png new file mode 100644 index 000000000..58968e4da Binary files /dev/null and b/projects/Speed_Game/macOS/images/ba.png differ diff --git a/projects/Speed_Game/macOS/images/bb.png b/projects/Speed_Game/macOS/images/bb.png new file mode 100644 index 000000000..6053834fc Binary files /dev/null and b/projects/Speed_Game/macOS/images/bb.png differ diff --git a/projects/Speed_Game/macOS/images/bd.png b/projects/Speed_Game/macOS/images/bd.png new file mode 100644 index 000000000..fc18a2e1a Binary files /dev/null and b/projects/Speed_Game/macOS/images/bd.png differ diff --git a/projects/Speed_Game/macOS/images/be.png b/projects/Speed_Game/macOS/images/be.png new file mode 100644 index 000000000..c95afa677 Binary files /dev/null and b/projects/Speed_Game/macOS/images/be.png differ diff --git a/projects/Speed_Game/macOS/images/bf.png b/projects/Speed_Game/macOS/images/bf.png new file mode 100644 index 000000000..669d53fe8 Binary files /dev/null and b/projects/Speed_Game/macOS/images/bf.png differ diff --git a/projects/Speed_Game/macOS/images/bg.png b/projects/Speed_Game/macOS/images/bg.png new file mode 100644 index 000000000..88bbcaebd Binary files /dev/null and b/projects/Speed_Game/macOS/images/bg.png differ diff --git a/projects/Speed_Game/macOS/images/bh.png b/projects/Speed_Game/macOS/images/bh.png new file mode 100644 index 000000000..3fb7de48b Binary files /dev/null and b/projects/Speed_Game/macOS/images/bh.png differ diff --git a/projects/Speed_Game/macOS/images/bi.png b/projects/Speed_Game/macOS/images/bi.png new file mode 100644 index 000000000..9e83202d7 Binary files /dev/null and b/projects/Speed_Game/macOS/images/bi.png differ diff --git a/projects/Speed_Game/macOS/images/bj.png b/projects/Speed_Game/macOS/images/bj.png new file mode 100644 index 000000000..7761839bf Binary files /dev/null and b/projects/Speed_Game/macOS/images/bj.png differ diff --git a/projects/Speed_Game/macOS/images/bl.png b/projects/Speed_Game/macOS/images/bl.png new file mode 100644 index 000000000..46737bb57 Binary files /dev/null and b/projects/Speed_Game/macOS/images/bl.png differ diff --git a/projects/Speed_Game/macOS/images/bm.png b/projects/Speed_Game/macOS/images/bm.png new file mode 100644 index 000000000..48793b50e Binary files /dev/null and b/projects/Speed_Game/macOS/images/bm.png differ diff --git a/projects/Speed_Game/macOS/images/bn.png b/projects/Speed_Game/macOS/images/bn.png new file mode 100644 index 000000000..1cd991cca Binary files /dev/null and b/projects/Speed_Game/macOS/images/bn.png differ diff --git a/projects/Speed_Game/macOS/images/bo.png b/projects/Speed_Game/macOS/images/bo.png new file mode 100644 index 000000000..0a5b8025c Binary files /dev/null and b/projects/Speed_Game/macOS/images/bo.png differ diff --git a/projects/Speed_Game/macOS/images/bq.png b/projects/Speed_Game/macOS/images/bq.png new file mode 100644 index 000000000..957ab7a99 Binary files /dev/null and b/projects/Speed_Game/macOS/images/bq.png differ diff --git a/projects/Speed_Game/macOS/images/br.png b/projects/Speed_Game/macOS/images/br.png new file mode 100644 index 000000000..1dba51c07 Binary files /dev/null and b/projects/Speed_Game/macOS/images/br.png differ diff --git a/projects/Speed_Game/macOS/images/bs.png b/projects/Speed_Game/macOS/images/bs.png new file mode 100644 index 000000000..36d87627e Binary files /dev/null and b/projects/Speed_Game/macOS/images/bs.png differ diff --git a/projects/Speed_Game/macOS/images/bt.png b/projects/Speed_Game/macOS/images/bt.png new file mode 100644 index 000000000..9590b30c1 Binary files /dev/null and b/projects/Speed_Game/macOS/images/bt.png differ diff --git a/projects/Speed_Game/macOS/images/bv.png b/projects/Speed_Game/macOS/images/bv.png new file mode 100644 index 000000000..db3d73415 Binary files /dev/null and b/projects/Speed_Game/macOS/images/bv.png differ diff --git a/projects/Speed_Game/macOS/images/bw.png b/projects/Speed_Game/macOS/images/bw.png new file mode 100644 index 000000000..3e59fd3c0 Binary files /dev/null and b/projects/Speed_Game/macOS/images/bw.png differ diff --git a/projects/Speed_Game/macOS/images/by.png b/projects/Speed_Game/macOS/images/by.png new file mode 100644 index 000000000..e2cf5ee10 Binary files /dev/null and b/projects/Speed_Game/macOS/images/by.png differ diff --git a/projects/Speed_Game/macOS/images/bz.png b/projects/Speed_Game/macOS/images/bz.png new file mode 100644 index 000000000..2f6992999 Binary files /dev/null and b/projects/Speed_Game/macOS/images/bz.png differ diff --git a/projects/Speed_Game/macOS/images/ca.png b/projects/Speed_Game/macOS/images/ca.png new file mode 100644 index 000000000..e0c6b6a72 Binary files /dev/null and b/projects/Speed_Game/macOS/images/ca.png differ diff --git a/projects/Speed_Game/macOS/images/cc.png b/projects/Speed_Game/macOS/images/cc.png new file mode 100644 index 000000000..72f7f82c0 Binary files /dev/null and b/projects/Speed_Game/macOS/images/cc.png differ diff --git a/projects/Speed_Game/macOS/images/cd.png b/projects/Speed_Game/macOS/images/cd.png new file mode 100644 index 000000000..d91e8b269 Binary files /dev/null and b/projects/Speed_Game/macOS/images/cd.png differ diff --git a/projects/Speed_Game/macOS/images/cf.png b/projects/Speed_Game/macOS/images/cf.png new file mode 100644 index 000000000..3679edc15 Binary files /dev/null and b/projects/Speed_Game/macOS/images/cf.png differ diff --git a/projects/Speed_Game/macOS/images/cg.png b/projects/Speed_Game/macOS/images/cg.png new file mode 100644 index 000000000..8cf4d97a5 Binary files /dev/null and b/projects/Speed_Game/macOS/images/cg.png differ diff --git a/projects/Speed_Game/macOS/images/ch.png b/projects/Speed_Game/macOS/images/ch.png new file mode 100644 index 000000000..3358a3322 Binary files /dev/null and b/projects/Speed_Game/macOS/images/ch.png differ diff --git a/projects/Speed_Game/macOS/images/ci.png b/projects/Speed_Game/macOS/images/ci.png new file mode 100644 index 000000000..7f16b10b5 Binary files /dev/null and b/projects/Speed_Game/macOS/images/ci.png differ diff --git a/projects/Speed_Game/macOS/images/ck.png b/projects/Speed_Game/macOS/images/ck.png new file mode 100644 index 000000000..5a1f5725b Binary files /dev/null and b/projects/Speed_Game/macOS/images/ck.png differ diff --git a/projects/Speed_Game/macOS/images/cl.png b/projects/Speed_Game/macOS/images/cl.png new file mode 100644 index 000000000..2e1f15990 Binary files /dev/null and b/projects/Speed_Game/macOS/images/cl.png differ diff --git a/projects/Speed_Game/macOS/images/cm.png b/projects/Speed_Game/macOS/images/cm.png new file mode 100644 index 000000000..46f2ba974 Binary files /dev/null and b/projects/Speed_Game/macOS/images/cm.png differ diff --git a/projects/Speed_Game/macOS/images/cn.png b/projects/Speed_Game/macOS/images/cn.png new file mode 100644 index 000000000..649a67e7f Binary files /dev/null and b/projects/Speed_Game/macOS/images/cn.png differ diff --git a/projects/Speed_Game/macOS/images/co.png b/projects/Speed_Game/macOS/images/co.png new file mode 100644 index 000000000..09c669012 Binary files /dev/null and b/projects/Speed_Game/macOS/images/co.png differ diff --git a/projects/Speed_Game/macOS/images/cr.png b/projects/Speed_Game/macOS/images/cr.png new file mode 100644 index 000000000..45d4f2add Binary files /dev/null and b/projects/Speed_Game/macOS/images/cr.png differ diff --git a/projects/Speed_Game/macOS/images/cu.png b/projects/Speed_Game/macOS/images/cu.png new file mode 100644 index 000000000..911ce8f48 Binary files /dev/null and b/projects/Speed_Game/macOS/images/cu.png differ diff --git a/projects/Speed_Game/macOS/images/cv.png b/projects/Speed_Game/macOS/images/cv.png new file mode 100644 index 000000000..91bd31794 Binary files /dev/null and b/projects/Speed_Game/macOS/images/cv.png differ diff --git a/projects/Speed_Game/macOS/images/cw.png b/projects/Speed_Game/macOS/images/cw.png new file mode 100644 index 000000000..48b1830b3 Binary files /dev/null and b/projects/Speed_Game/macOS/images/cw.png differ diff --git a/projects/Speed_Game/macOS/images/cx.png b/projects/Speed_Game/macOS/images/cx.png new file mode 100644 index 000000000..6e792ad9f Binary files /dev/null and b/projects/Speed_Game/macOS/images/cx.png differ diff --git a/projects/Speed_Game/macOS/images/cy.png b/projects/Speed_Game/macOS/images/cy.png new file mode 100644 index 000000000..04415b396 Binary files /dev/null and b/projects/Speed_Game/macOS/images/cy.png differ diff --git a/projects/Speed_Game/macOS/images/cz.png b/projects/Speed_Game/macOS/images/cz.png new file mode 100644 index 000000000..52b89d7bc Binary files /dev/null and b/projects/Speed_Game/macOS/images/cz.png differ diff --git a/projects/Speed_Game/macOS/images/de.png b/projects/Speed_Game/macOS/images/de.png new file mode 100644 index 000000000..99ccd352d Binary files /dev/null and b/projects/Speed_Game/macOS/images/de.png differ diff --git a/projects/Speed_Game/macOS/images/dj.png b/projects/Speed_Game/macOS/images/dj.png new file mode 100644 index 000000000..1b5f04d52 Binary files /dev/null and b/projects/Speed_Game/macOS/images/dj.png differ diff --git a/projects/Speed_Game/macOS/images/dk.png b/projects/Speed_Game/macOS/images/dk.png new file mode 100644 index 000000000..07b090211 Binary files /dev/null and b/projects/Speed_Game/macOS/images/dk.png differ diff --git a/projects/Speed_Game/macOS/images/dm.png b/projects/Speed_Game/macOS/images/dm.png new file mode 100644 index 000000000..53eeb96ea Binary files /dev/null and b/projects/Speed_Game/macOS/images/dm.png differ diff --git a/projects/Speed_Game/macOS/images/do.png b/projects/Speed_Game/macOS/images/do.png new file mode 100644 index 000000000..d57e3a82a Binary files /dev/null and b/projects/Speed_Game/macOS/images/do.png differ diff --git a/projects/Speed_Game/macOS/images/dz.png b/projects/Speed_Game/macOS/images/dz.png new file mode 100644 index 000000000..1a53178af Binary files /dev/null and b/projects/Speed_Game/macOS/images/dz.png differ diff --git a/projects/Speed_Game/macOS/images/ec.png b/projects/Speed_Game/macOS/images/ec.png new file mode 100644 index 000000000..4ef8468c4 Binary files /dev/null and b/projects/Speed_Game/macOS/images/ec.png differ diff --git a/projects/Speed_Game/macOS/images/ee.png b/projects/Speed_Game/macOS/images/ee.png new file mode 100644 index 000000000..94cc351ee Binary files /dev/null and b/projects/Speed_Game/macOS/images/ee.png differ diff --git a/projects/Speed_Game/macOS/images/eg.png b/projects/Speed_Game/macOS/images/eg.png new file mode 100644 index 000000000..a50c693f3 Binary files /dev/null and b/projects/Speed_Game/macOS/images/eg.png differ diff --git a/projects/Speed_Game/macOS/images/eh.png b/projects/Speed_Game/macOS/images/eh.png new file mode 100644 index 000000000..466b34430 Binary files /dev/null and b/projects/Speed_Game/macOS/images/eh.png differ diff --git a/projects/Speed_Game/macOS/images/er.png b/projects/Speed_Game/macOS/images/er.png new file mode 100644 index 000000000..8dd05a1ed Binary files /dev/null and b/projects/Speed_Game/macOS/images/er.png differ diff --git a/projects/Speed_Game/macOS/images/es.png b/projects/Speed_Game/macOS/images/es.png new file mode 100644 index 000000000..80693e710 Binary files /dev/null and b/projects/Speed_Game/macOS/images/es.png differ diff --git a/projects/Speed_Game/macOS/images/et.png b/projects/Speed_Game/macOS/images/et.png new file mode 100644 index 000000000..2b585fcff Binary files /dev/null and b/projects/Speed_Game/macOS/images/et.png differ diff --git a/projects/Speed_Game/macOS/images/fi.png b/projects/Speed_Game/macOS/images/fi.png new file mode 100644 index 000000000..f0739d20b Binary files /dev/null and b/projects/Speed_Game/macOS/images/fi.png differ diff --git a/projects/Speed_Game/macOS/images/fj.png b/projects/Speed_Game/macOS/images/fj.png new file mode 100644 index 000000000..6b3425818 Binary files /dev/null and b/projects/Speed_Game/macOS/images/fj.png differ diff --git a/projects/Speed_Game/macOS/images/fk.png b/projects/Speed_Game/macOS/images/fk.png new file mode 100644 index 000000000..5094ab197 Binary files /dev/null and b/projects/Speed_Game/macOS/images/fk.png differ diff --git a/projects/Speed_Game/macOS/images/fm.png b/projects/Speed_Game/macOS/images/fm.png new file mode 100644 index 000000000..41e911a98 Binary files /dev/null and b/projects/Speed_Game/macOS/images/fm.png differ diff --git a/projects/Speed_Game/macOS/images/fo.png b/projects/Speed_Game/macOS/images/fo.png new file mode 100644 index 000000000..48eff3417 Binary files /dev/null and b/projects/Speed_Game/macOS/images/fo.png differ diff --git a/projects/Speed_Game/macOS/images/fr.png b/projects/Speed_Game/macOS/images/fr.png new file mode 100644 index 000000000..d5f30b427 Binary files /dev/null and b/projects/Speed_Game/macOS/images/fr.png differ diff --git a/projects/Speed_Game/macOS/images/ga.png b/projects/Speed_Game/macOS/images/ga.png new file mode 100644 index 000000000..0e8ed5218 Binary files /dev/null and b/projects/Speed_Game/macOS/images/ga.png differ diff --git a/projects/Speed_Game/macOS/images/gb-eng.png b/projects/Speed_Game/macOS/images/gb-eng.png new file mode 100644 index 000000000..f6aeda130 Binary files /dev/null and b/projects/Speed_Game/macOS/images/gb-eng.png differ diff --git a/projects/Speed_Game/macOS/images/gb-nir.png b/projects/Speed_Game/macOS/images/gb-nir.png new file mode 100644 index 000000000..1de5843c6 Binary files /dev/null and b/projects/Speed_Game/macOS/images/gb-nir.png differ diff --git a/projects/Speed_Game/macOS/images/gb-sct.png b/projects/Speed_Game/macOS/images/gb-sct.png new file mode 100644 index 000000000..0cff8df3c Binary files /dev/null and b/projects/Speed_Game/macOS/images/gb-sct.png differ diff --git a/projects/Speed_Game/macOS/images/gb-wls.png b/projects/Speed_Game/macOS/images/gb-wls.png new file mode 100644 index 000000000..a1343ac46 Binary files /dev/null and b/projects/Speed_Game/macOS/images/gb-wls.png differ diff --git a/projects/Speed_Game/macOS/images/gb.png b/projects/Speed_Game/macOS/images/gb.png new file mode 100644 index 000000000..3188a24c2 Binary files /dev/null and b/projects/Speed_Game/macOS/images/gb.png differ diff --git a/projects/Speed_Game/macOS/images/gd.png b/projects/Speed_Game/macOS/images/gd.png new file mode 100644 index 000000000..e96883363 Binary files /dev/null and b/projects/Speed_Game/macOS/images/gd.png differ diff --git a/projects/Speed_Game/macOS/images/ge.png b/projects/Speed_Game/macOS/images/ge.png new file mode 100644 index 000000000..262ac5e09 Binary files /dev/null and b/projects/Speed_Game/macOS/images/ge.png differ diff --git a/projects/Speed_Game/macOS/images/gf.png b/projects/Speed_Game/macOS/images/gf.png new file mode 100644 index 000000000..0dd8f9010 Binary files /dev/null and b/projects/Speed_Game/macOS/images/gf.png differ diff --git a/projects/Speed_Game/macOS/images/gg.png b/projects/Speed_Game/macOS/images/gg.png new file mode 100644 index 000000000..b2146712b Binary files /dev/null and b/projects/Speed_Game/macOS/images/gg.png differ diff --git a/projects/Speed_Game/macOS/images/gh.png b/projects/Speed_Game/macOS/images/gh.png new file mode 100644 index 000000000..7fdf73af0 Binary files /dev/null and b/projects/Speed_Game/macOS/images/gh.png differ diff --git a/projects/Speed_Game/macOS/images/gi.png b/projects/Speed_Game/macOS/images/gi.png new file mode 100644 index 000000000..eb06888b0 Binary files /dev/null and b/projects/Speed_Game/macOS/images/gi.png differ diff --git a/projects/Speed_Game/macOS/images/gl.png b/projects/Speed_Game/macOS/images/gl.png new file mode 100644 index 000000000..c9e75102b Binary files /dev/null and b/projects/Speed_Game/macOS/images/gl.png differ diff --git a/projects/Speed_Game/macOS/images/gm.png b/projects/Speed_Game/macOS/images/gm.png new file mode 100644 index 000000000..9b1008078 Binary files /dev/null and b/projects/Speed_Game/macOS/images/gm.png differ diff --git a/projects/Speed_Game/macOS/images/gn.png b/projects/Speed_Game/macOS/images/gn.png new file mode 100644 index 000000000..e54ecfeb5 Binary files /dev/null and b/projects/Speed_Game/macOS/images/gn.png differ diff --git a/projects/Speed_Game/macOS/images/gp.png b/projects/Speed_Game/macOS/images/gp.png new file mode 100644 index 000000000..c2d8120f1 Binary files /dev/null and b/projects/Speed_Game/macOS/images/gp.png differ diff --git a/projects/Speed_Game/macOS/images/gq.png b/projects/Speed_Game/macOS/images/gq.png new file mode 100644 index 000000000..f8e8d7023 Binary files /dev/null and b/projects/Speed_Game/macOS/images/gq.png differ diff --git a/projects/Speed_Game/macOS/images/gr.png b/projects/Speed_Game/macOS/images/gr.png new file mode 100644 index 000000000..71690ad85 Binary files /dev/null and b/projects/Speed_Game/macOS/images/gr.png differ diff --git a/projects/Speed_Game/macOS/images/gs 2.png b/projects/Speed_Game/macOS/images/gs 2.png new file mode 100644 index 000000000..4e5e94550 Binary files /dev/null and b/projects/Speed_Game/macOS/images/gs 2.png differ diff --git a/projects/Speed_Game/macOS/images/gs.png b/projects/Speed_Game/macOS/images/gs.png new file mode 100644 index 000000000..4e5e94550 Binary files /dev/null and b/projects/Speed_Game/macOS/images/gs.png differ diff --git a/projects/Speed_Game/macOS/images/gt 2.png b/projects/Speed_Game/macOS/images/gt 2.png new file mode 100644 index 000000000..e99752148 Binary files /dev/null and b/projects/Speed_Game/macOS/images/gt 2.png differ diff --git a/projects/Speed_Game/macOS/images/gt.png b/projects/Speed_Game/macOS/images/gt.png new file mode 100644 index 000000000..e99752148 Binary files /dev/null and b/projects/Speed_Game/macOS/images/gt.png differ diff --git a/projects/Speed_Game/macOS/images/gu 2.png b/projects/Speed_Game/macOS/images/gu 2.png new file mode 100644 index 000000000..36cf14c37 Binary files /dev/null and b/projects/Speed_Game/macOS/images/gu 2.png differ diff --git a/projects/Speed_Game/macOS/images/gu.png b/projects/Speed_Game/macOS/images/gu.png new file mode 100644 index 000000000..36cf14c37 Binary files /dev/null and b/projects/Speed_Game/macOS/images/gu.png differ diff --git a/projects/Speed_Game/macOS/images/gw 2.png b/projects/Speed_Game/macOS/images/gw 2.png new file mode 100644 index 000000000..2a5f1a0f2 Binary files /dev/null and b/projects/Speed_Game/macOS/images/gw 2.png differ diff --git a/projects/Speed_Game/macOS/images/gw.png b/projects/Speed_Game/macOS/images/gw.png new file mode 100644 index 000000000..2a5f1a0f2 Binary files /dev/null and b/projects/Speed_Game/macOS/images/gw.png differ diff --git a/projects/Speed_Game/macOS/images/gy 2.png b/projects/Speed_Game/macOS/images/gy 2.png new file mode 100644 index 000000000..89f291916 Binary files /dev/null and b/projects/Speed_Game/macOS/images/gy 2.png differ diff --git a/projects/Speed_Game/macOS/images/gy.png b/projects/Speed_Game/macOS/images/gy.png new file mode 100644 index 000000000..89f291916 Binary files /dev/null and b/projects/Speed_Game/macOS/images/gy.png differ diff --git a/projects/Speed_Game/macOS/images/hk 2.png b/projects/Speed_Game/macOS/images/hk 2.png new file mode 100644 index 000000000..c15c3cdf3 Binary files /dev/null and b/projects/Speed_Game/macOS/images/hk 2.png differ diff --git a/projects/Speed_Game/macOS/images/hk.png b/projects/Speed_Game/macOS/images/hk.png new file mode 100644 index 000000000..c15c3cdf3 Binary files /dev/null and b/projects/Speed_Game/macOS/images/hk.png differ diff --git a/projects/Speed_Game/macOS/images/hm 2.png b/projects/Speed_Game/macOS/images/hm 2.png new file mode 100644 index 000000000..b33d7359a Binary files /dev/null and b/projects/Speed_Game/macOS/images/hm 2.png differ diff --git a/projects/Speed_Game/macOS/images/hm.png b/projects/Speed_Game/macOS/images/hm.png new file mode 100644 index 000000000..b33d7359a Binary files /dev/null and b/projects/Speed_Game/macOS/images/hm.png differ diff --git a/projects/Speed_Game/macOS/images/hn 2.png b/projects/Speed_Game/macOS/images/hn 2.png new file mode 100644 index 000000000..916405502 Binary files /dev/null and b/projects/Speed_Game/macOS/images/hn 2.png differ diff --git a/projects/Speed_Game/macOS/images/hn.png b/projects/Speed_Game/macOS/images/hn.png new file mode 100644 index 000000000..916405502 Binary files /dev/null and b/projects/Speed_Game/macOS/images/hn.png differ diff --git a/projects/Speed_Game/macOS/images/hr 2.png b/projects/Speed_Game/macOS/images/hr 2.png new file mode 100644 index 000000000..e9718875a Binary files /dev/null and b/projects/Speed_Game/macOS/images/hr 2.png differ diff --git a/projects/Speed_Game/macOS/images/hr.png b/projects/Speed_Game/macOS/images/hr.png new file mode 100644 index 000000000..e9718875a Binary files /dev/null and b/projects/Speed_Game/macOS/images/hr.png differ diff --git a/projects/Speed_Game/macOS/images/ht 2.png b/projects/Speed_Game/macOS/images/ht 2.png new file mode 100644 index 000000000..10742d121 Binary files /dev/null and b/projects/Speed_Game/macOS/images/ht 2.png differ diff --git a/projects/Speed_Game/macOS/images/ht.png b/projects/Speed_Game/macOS/images/ht.png new file mode 100644 index 000000000..10742d121 Binary files /dev/null and b/projects/Speed_Game/macOS/images/ht.png differ diff --git a/projects/Speed_Game/macOS/images/hu 2.png b/projects/Speed_Game/macOS/images/hu 2.png new file mode 100644 index 000000000..744824cfd Binary files /dev/null and b/projects/Speed_Game/macOS/images/hu 2.png differ diff --git a/projects/Speed_Game/macOS/images/hu.png b/projects/Speed_Game/macOS/images/hu.png new file mode 100644 index 000000000..744824cfd Binary files /dev/null and b/projects/Speed_Game/macOS/images/hu.png differ diff --git a/projects/Speed_Game/macOS/images/id 2.png b/projects/Speed_Game/macOS/images/id 2.png new file mode 100644 index 000000000..2085f328b Binary files /dev/null and b/projects/Speed_Game/macOS/images/id 2.png differ diff --git a/projects/Speed_Game/macOS/images/id.png b/projects/Speed_Game/macOS/images/id.png new file mode 100644 index 000000000..2085f328b Binary files /dev/null and b/projects/Speed_Game/macOS/images/id.png differ diff --git a/projects/Speed_Game/macOS/images/ie 2.png b/projects/Speed_Game/macOS/images/ie 2.png new file mode 100644 index 000000000..4af13c97e Binary files /dev/null and b/projects/Speed_Game/macOS/images/ie 2.png differ diff --git a/projects/Speed_Game/macOS/images/ie.png b/projects/Speed_Game/macOS/images/ie.png new file mode 100644 index 000000000..4af13c97e Binary files /dev/null and b/projects/Speed_Game/macOS/images/ie.png differ diff --git a/projects/Speed_Game/macOS/images/il 2.png b/projects/Speed_Game/macOS/images/il 2.png new file mode 100644 index 000000000..852e65640 Binary files /dev/null and b/projects/Speed_Game/macOS/images/il 2.png differ diff --git a/projects/Speed_Game/macOS/images/il.png b/projects/Speed_Game/macOS/images/il.png new file mode 100644 index 000000000..852e65640 Binary files /dev/null and b/projects/Speed_Game/macOS/images/il.png differ diff --git a/projects/Speed_Game/macOS/images/im 2.png b/projects/Speed_Game/macOS/images/im 2.png new file mode 100644 index 000000000..59cc34a36 Binary files /dev/null and b/projects/Speed_Game/macOS/images/im 2.png differ diff --git a/projects/Speed_Game/macOS/images/im.png b/projects/Speed_Game/macOS/images/im.png new file mode 100644 index 000000000..59cc34a36 Binary files /dev/null and b/projects/Speed_Game/macOS/images/im.png differ diff --git a/projects/Speed_Game/macOS/images/in 2.png b/projects/Speed_Game/macOS/images/in 2.png new file mode 100644 index 000000000..46b99add9 Binary files /dev/null and b/projects/Speed_Game/macOS/images/in 2.png differ diff --git a/projects/Speed_Game/macOS/images/in.png b/projects/Speed_Game/macOS/images/in.png new file mode 100644 index 000000000..46b99add9 Binary files /dev/null and b/projects/Speed_Game/macOS/images/in.png differ diff --git a/projects/Speed_Game/macOS/images/io 2.png b/projects/Speed_Game/macOS/images/io 2.png new file mode 100644 index 000000000..97fc903d7 Binary files /dev/null and b/projects/Speed_Game/macOS/images/io 2.png differ diff --git a/projects/Speed_Game/macOS/images/io.png b/projects/Speed_Game/macOS/images/io.png new file mode 100644 index 000000000..97fc903d7 Binary files /dev/null and b/projects/Speed_Game/macOS/images/io.png differ diff --git a/projects/Speed_Game/macOS/images/iq 2.png b/projects/Speed_Game/macOS/images/iq 2.png new file mode 100644 index 000000000..0b57fd4b3 Binary files /dev/null and b/projects/Speed_Game/macOS/images/iq 2.png differ diff --git a/projects/Speed_Game/macOS/images/iq.png b/projects/Speed_Game/macOS/images/iq.png new file mode 100644 index 000000000..0b57fd4b3 Binary files /dev/null and b/projects/Speed_Game/macOS/images/iq.png differ diff --git a/projects/Speed_Game/macOS/images/ir 2.png b/projects/Speed_Game/macOS/images/ir 2.png new file mode 100644 index 000000000..b9dacb07d Binary files /dev/null and b/projects/Speed_Game/macOS/images/ir 2.png differ diff --git a/projects/Speed_Game/macOS/images/ir.png b/projects/Speed_Game/macOS/images/ir.png new file mode 100644 index 000000000..b9dacb07d Binary files /dev/null and b/projects/Speed_Game/macOS/images/ir.png differ diff --git a/projects/Speed_Game/macOS/images/is 2.png b/projects/Speed_Game/macOS/images/is 2.png new file mode 100644 index 000000000..2f2523798 Binary files /dev/null and b/projects/Speed_Game/macOS/images/is 2.png differ diff --git a/projects/Speed_Game/macOS/images/is.png b/projects/Speed_Game/macOS/images/is.png new file mode 100644 index 000000000..2f2523798 Binary files /dev/null and b/projects/Speed_Game/macOS/images/is.png differ diff --git a/projects/Speed_Game/macOS/images/it 2.png b/projects/Speed_Game/macOS/images/it 2.png new file mode 100644 index 000000000..2abfc6b2e Binary files /dev/null and b/projects/Speed_Game/macOS/images/it 2.png differ diff --git a/projects/Speed_Game/macOS/images/it.png b/projects/Speed_Game/macOS/images/it.png new file mode 100644 index 000000000..2abfc6b2e Binary files /dev/null and b/projects/Speed_Game/macOS/images/it.png differ diff --git a/projects/Speed_Game/macOS/images/je 2.png b/projects/Speed_Game/macOS/images/je 2.png new file mode 100644 index 000000000..910212a6e Binary files /dev/null and b/projects/Speed_Game/macOS/images/je 2.png differ diff --git a/projects/Speed_Game/macOS/images/je.png b/projects/Speed_Game/macOS/images/je.png new file mode 100644 index 000000000..910212a6e Binary files /dev/null and b/projects/Speed_Game/macOS/images/je.png differ diff --git a/projects/Speed_Game/macOS/images/jm 2.png b/projects/Speed_Game/macOS/images/jm 2.png new file mode 100644 index 000000000..63736421f Binary files /dev/null and b/projects/Speed_Game/macOS/images/jm 2.png differ diff --git a/projects/Speed_Game/macOS/images/jm.png b/projects/Speed_Game/macOS/images/jm.png new file mode 100644 index 000000000..63736421f Binary files /dev/null and b/projects/Speed_Game/macOS/images/jm.png differ diff --git a/projects/Speed_Game/macOS/images/jo 2.png b/projects/Speed_Game/macOS/images/jo 2.png new file mode 100644 index 000000000..08da5d7c3 Binary files /dev/null and b/projects/Speed_Game/macOS/images/jo 2.png differ diff --git a/projects/Speed_Game/macOS/images/jo.png b/projects/Speed_Game/macOS/images/jo.png new file mode 100644 index 000000000..08da5d7c3 Binary files /dev/null and b/projects/Speed_Game/macOS/images/jo.png differ diff --git a/projects/Speed_Game/macOS/images/jp 2.png b/projects/Speed_Game/macOS/images/jp 2.png new file mode 100644 index 000000000..1f9badaf1 Binary files /dev/null and b/projects/Speed_Game/macOS/images/jp 2.png differ diff --git a/projects/Speed_Game/macOS/images/jp.png b/projects/Speed_Game/macOS/images/jp.png new file mode 100644 index 000000000..1f9badaf1 Binary files /dev/null and b/projects/Speed_Game/macOS/images/jp.png differ diff --git a/projects/Speed_Game/macOS/images/ke.png b/projects/Speed_Game/macOS/images/ke.png new file mode 100644 index 000000000..08379eced Binary files /dev/null and b/projects/Speed_Game/macOS/images/ke.png differ diff --git a/projects/Speed_Game/macOS/images/kg 2.png b/projects/Speed_Game/macOS/images/kg 2.png new file mode 100644 index 000000000..3097fb61e Binary files /dev/null and b/projects/Speed_Game/macOS/images/kg 2.png differ diff --git a/projects/Speed_Game/macOS/images/kg.png b/projects/Speed_Game/macOS/images/kg.png new file mode 100644 index 000000000..3097fb61e Binary files /dev/null and b/projects/Speed_Game/macOS/images/kg.png differ diff --git a/projects/Speed_Game/macOS/images/kh 2.png b/projects/Speed_Game/macOS/images/kh 2.png new file mode 100644 index 000000000..cd51b9746 Binary files /dev/null and b/projects/Speed_Game/macOS/images/kh 2.png differ diff --git a/projects/Speed_Game/macOS/images/kh.png b/projects/Speed_Game/macOS/images/kh.png new file mode 100644 index 000000000..cd51b9746 Binary files /dev/null and b/projects/Speed_Game/macOS/images/kh.png differ diff --git a/projects/Speed_Game/macOS/images/ki 2.png b/projects/Speed_Game/macOS/images/ki 2.png new file mode 100644 index 000000000..38bc17567 Binary files /dev/null and b/projects/Speed_Game/macOS/images/ki 2.png differ diff --git a/projects/Speed_Game/macOS/images/ki.png b/projects/Speed_Game/macOS/images/ki.png new file mode 100644 index 000000000..38bc17567 Binary files /dev/null and b/projects/Speed_Game/macOS/images/ki.png differ diff --git a/projects/Speed_Game/macOS/images/km 2.png b/projects/Speed_Game/macOS/images/km 2.png new file mode 100644 index 000000000..0e05d31fb Binary files /dev/null and b/projects/Speed_Game/macOS/images/km 2.png differ diff --git a/projects/Speed_Game/macOS/images/km.png b/projects/Speed_Game/macOS/images/km.png new file mode 100644 index 000000000..0e05d31fb Binary files /dev/null and b/projects/Speed_Game/macOS/images/km.png differ diff --git a/projects/Speed_Game/macOS/images/kn 2.png b/projects/Speed_Game/macOS/images/kn 2.png new file mode 100644 index 000000000..96732f64f Binary files /dev/null and b/projects/Speed_Game/macOS/images/kn 2.png differ diff --git a/projects/Speed_Game/macOS/images/kn.png b/projects/Speed_Game/macOS/images/kn.png new file mode 100644 index 000000000..96732f64f Binary files /dev/null and b/projects/Speed_Game/macOS/images/kn.png differ diff --git a/projects/Speed_Game/macOS/images/kp 2.png b/projects/Speed_Game/macOS/images/kp 2.png new file mode 100644 index 000000000..9edcfe3c7 Binary files /dev/null and b/projects/Speed_Game/macOS/images/kp 2.png differ diff --git a/projects/Speed_Game/macOS/images/kp.png b/projects/Speed_Game/macOS/images/kp.png new file mode 100644 index 000000000..9edcfe3c7 Binary files /dev/null and b/projects/Speed_Game/macOS/images/kp.png differ diff --git a/projects/Speed_Game/macOS/images/kr 2.png b/projects/Speed_Game/macOS/images/kr 2.png new file mode 100644 index 000000000..2424e4c58 Binary files /dev/null and b/projects/Speed_Game/macOS/images/kr 2.png differ diff --git a/projects/Speed_Game/macOS/images/kr.png b/projects/Speed_Game/macOS/images/kr.png new file mode 100644 index 000000000..2424e4c58 Binary files /dev/null and b/projects/Speed_Game/macOS/images/kr.png differ diff --git a/projects/Speed_Game/macOS/images/kw 2.png b/projects/Speed_Game/macOS/images/kw 2.png new file mode 100644 index 000000000..ce1f32c5f Binary files /dev/null and b/projects/Speed_Game/macOS/images/kw 2.png differ diff --git a/projects/Speed_Game/macOS/images/kw.png b/projects/Speed_Game/macOS/images/kw.png new file mode 100644 index 000000000..ce1f32c5f Binary files /dev/null and b/projects/Speed_Game/macOS/images/kw.png differ diff --git a/projects/Speed_Game/macOS/images/ky 2.png b/projects/Speed_Game/macOS/images/ky 2.png new file mode 100644 index 000000000..bc6209837 Binary files /dev/null and b/projects/Speed_Game/macOS/images/ky 2.png differ diff --git a/projects/Speed_Game/macOS/images/ky.png b/projects/Speed_Game/macOS/images/ky.png new file mode 100644 index 000000000..bc6209837 Binary files /dev/null and b/projects/Speed_Game/macOS/images/ky.png differ diff --git a/projects/Speed_Game/macOS/images/kz 2.png b/projects/Speed_Game/macOS/images/kz 2.png new file mode 100644 index 000000000..bddc74c48 Binary files /dev/null and b/projects/Speed_Game/macOS/images/kz 2.png differ diff --git a/projects/Speed_Game/macOS/images/kz.png b/projects/Speed_Game/macOS/images/kz.png new file mode 100644 index 000000000..bddc74c48 Binary files /dev/null and b/projects/Speed_Game/macOS/images/kz.png differ diff --git a/projects/Speed_Game/macOS/images/la 2.png b/projects/Speed_Game/macOS/images/la 2.png new file mode 100644 index 000000000..d2a549ba1 Binary files /dev/null and b/projects/Speed_Game/macOS/images/la 2.png differ diff --git a/projects/Speed_Game/macOS/images/la.png b/projects/Speed_Game/macOS/images/la.png new file mode 100644 index 000000000..d2a549ba1 Binary files /dev/null and b/projects/Speed_Game/macOS/images/la.png differ diff --git a/projects/Speed_Game/macOS/images/lb 2.png b/projects/Speed_Game/macOS/images/lb 2.png new file mode 100644 index 000000000..bc7859e17 Binary files /dev/null and b/projects/Speed_Game/macOS/images/lb 2.png differ diff --git a/projects/Speed_Game/macOS/images/lb.png b/projects/Speed_Game/macOS/images/lb.png new file mode 100644 index 000000000..bc7859e17 Binary files /dev/null and b/projects/Speed_Game/macOS/images/lb.png differ diff --git a/projects/Speed_Game/macOS/images/lc 2.png b/projects/Speed_Game/macOS/images/lc 2.png new file mode 100644 index 000000000..9e273a56a Binary files /dev/null and b/projects/Speed_Game/macOS/images/lc 2.png differ diff --git a/projects/Speed_Game/macOS/images/lc.png b/projects/Speed_Game/macOS/images/lc.png new file mode 100644 index 000000000..9e273a56a Binary files /dev/null and b/projects/Speed_Game/macOS/images/lc.png differ diff --git a/projects/Speed_Game/macOS/images/li 2.png b/projects/Speed_Game/macOS/images/li 2.png new file mode 100644 index 000000000..8c788578e Binary files /dev/null and b/projects/Speed_Game/macOS/images/li 2.png differ diff --git a/projects/Speed_Game/macOS/images/li.png b/projects/Speed_Game/macOS/images/li.png new file mode 100644 index 000000000..8c788578e Binary files /dev/null and b/projects/Speed_Game/macOS/images/li.png differ diff --git a/projects/Speed_Game/macOS/images/lk 2.png b/projects/Speed_Game/macOS/images/lk 2.png new file mode 100644 index 000000000..ea5ae4edd Binary files /dev/null and b/projects/Speed_Game/macOS/images/lk 2.png differ diff --git a/projects/Speed_Game/macOS/images/lk.png b/projects/Speed_Game/macOS/images/lk.png new file mode 100644 index 000000000..ea5ae4edd Binary files /dev/null and b/projects/Speed_Game/macOS/images/lk.png differ diff --git a/projects/Speed_Game/macOS/images/lr 2.png b/projects/Speed_Game/macOS/images/lr 2.png new file mode 100644 index 000000000..7a76660af Binary files /dev/null and b/projects/Speed_Game/macOS/images/lr 2.png differ diff --git a/projects/Speed_Game/macOS/images/lr.png b/projects/Speed_Game/macOS/images/lr.png new file mode 100644 index 000000000..7a76660af Binary files /dev/null and b/projects/Speed_Game/macOS/images/lr.png differ diff --git a/projects/Speed_Game/macOS/images/ls 2.png b/projects/Speed_Game/macOS/images/ls 2.png new file mode 100644 index 000000000..29af93eea Binary files /dev/null and b/projects/Speed_Game/macOS/images/ls 2.png differ diff --git a/projects/Speed_Game/macOS/images/ls.png b/projects/Speed_Game/macOS/images/ls.png new file mode 100644 index 000000000..29af93eea Binary files /dev/null and b/projects/Speed_Game/macOS/images/ls.png differ diff --git a/projects/Speed_Game/macOS/images/lt 2.png b/projects/Speed_Game/macOS/images/lt 2.png new file mode 100644 index 000000000..f3362743d Binary files /dev/null and b/projects/Speed_Game/macOS/images/lt 2.png differ diff --git a/projects/Speed_Game/macOS/images/lt.png b/projects/Speed_Game/macOS/images/lt.png new file mode 100644 index 000000000..f3362743d Binary files /dev/null and b/projects/Speed_Game/macOS/images/lt.png differ diff --git a/projects/Speed_Game/macOS/images/lu 2.png b/projects/Speed_Game/macOS/images/lu 2.png new file mode 100644 index 000000000..ec1c41ad1 Binary files /dev/null and b/projects/Speed_Game/macOS/images/lu 2.png differ diff --git a/projects/Speed_Game/macOS/images/lu.png b/projects/Speed_Game/macOS/images/lu.png new file mode 100644 index 000000000..ec1c41ad1 Binary files /dev/null and b/projects/Speed_Game/macOS/images/lu.png differ diff --git a/projects/Speed_Game/macOS/images/lv 2.png b/projects/Speed_Game/macOS/images/lv 2.png new file mode 100644 index 000000000..406289ccd Binary files /dev/null and b/projects/Speed_Game/macOS/images/lv 2.png differ diff --git a/projects/Speed_Game/macOS/images/lv.png b/projects/Speed_Game/macOS/images/lv.png new file mode 100644 index 000000000..406289ccd Binary files /dev/null and b/projects/Speed_Game/macOS/images/lv.png differ diff --git a/projects/Speed_Game/macOS/images/ly 2.png b/projects/Speed_Game/macOS/images/ly 2.png new file mode 100644 index 000000000..7d4bcdf73 Binary files /dev/null and b/projects/Speed_Game/macOS/images/ly 2.png differ diff --git a/projects/Speed_Game/macOS/images/ly.png b/projects/Speed_Game/macOS/images/ly.png new file mode 100644 index 000000000..7d4bcdf73 Binary files /dev/null and b/projects/Speed_Game/macOS/images/ly.png differ diff --git a/projects/Speed_Game/macOS/images/ma 2.png b/projects/Speed_Game/macOS/images/ma 2.png new file mode 100644 index 000000000..0eb5815bd Binary files /dev/null and b/projects/Speed_Game/macOS/images/ma 2.png differ diff --git a/projects/Speed_Game/macOS/images/ma.png b/projects/Speed_Game/macOS/images/ma.png new file mode 100644 index 000000000..0eb5815bd Binary files /dev/null and b/projects/Speed_Game/macOS/images/ma.png differ diff --git a/projects/Speed_Game/macOS/images/mc 2.png b/projects/Speed_Game/macOS/images/mc 2.png new file mode 100644 index 000000000..637ca2809 Binary files /dev/null and b/projects/Speed_Game/macOS/images/mc 2.png differ diff --git a/projects/Speed_Game/macOS/images/mc.png b/projects/Speed_Game/macOS/images/mc.png new file mode 100644 index 000000000..637ca2809 Binary files /dev/null and b/projects/Speed_Game/macOS/images/mc.png differ diff --git a/projects/Speed_Game/macOS/images/md.png b/projects/Speed_Game/macOS/images/md.png new file mode 100644 index 000000000..c315bd34b Binary files /dev/null and b/projects/Speed_Game/macOS/images/md.png differ diff --git a/projects/Speed_Game/macOS/images/me 2.png b/projects/Speed_Game/macOS/images/me 2.png new file mode 100644 index 000000000..f3f629136 Binary files /dev/null and b/projects/Speed_Game/macOS/images/me 2.png differ diff --git a/projects/Speed_Game/macOS/images/me.png b/projects/Speed_Game/macOS/images/me.png new file mode 100644 index 000000000..f3f629136 Binary files /dev/null and b/projects/Speed_Game/macOS/images/me.png differ diff --git a/projects/Speed_Game/macOS/images/mf 2.png b/projects/Speed_Game/macOS/images/mf 2.png new file mode 100644 index 000000000..d5f30b427 Binary files /dev/null and b/projects/Speed_Game/macOS/images/mf 2.png differ diff --git a/projects/Speed_Game/macOS/images/mf.png b/projects/Speed_Game/macOS/images/mf.png new file mode 100644 index 000000000..d5f30b427 Binary files /dev/null and b/projects/Speed_Game/macOS/images/mf.png differ diff --git a/projects/Speed_Game/macOS/images/mg 2.png b/projects/Speed_Game/macOS/images/mg 2.png new file mode 100644 index 000000000..c98660443 Binary files /dev/null and b/projects/Speed_Game/macOS/images/mg 2.png differ diff --git a/projects/Speed_Game/macOS/images/mg.png b/projects/Speed_Game/macOS/images/mg.png new file mode 100644 index 000000000..c98660443 Binary files /dev/null and b/projects/Speed_Game/macOS/images/mg.png differ diff --git a/projects/Speed_Game/macOS/images/mh 2.png b/projects/Speed_Game/macOS/images/mh 2.png new file mode 100644 index 000000000..9a3262663 Binary files /dev/null and b/projects/Speed_Game/macOS/images/mh 2.png differ diff --git a/projects/Speed_Game/macOS/images/mh.png b/projects/Speed_Game/macOS/images/mh.png new file mode 100644 index 000000000..9a3262663 Binary files /dev/null and b/projects/Speed_Game/macOS/images/mh.png differ diff --git a/projects/Speed_Game/macOS/images/mk 2.png b/projects/Speed_Game/macOS/images/mk 2.png new file mode 100644 index 000000000..b51836a93 Binary files /dev/null and b/projects/Speed_Game/macOS/images/mk 2.png differ diff --git a/projects/Speed_Game/macOS/images/mk.png b/projects/Speed_Game/macOS/images/mk.png new file mode 100644 index 000000000..b51836a93 Binary files /dev/null and b/projects/Speed_Game/macOS/images/mk.png differ diff --git a/projects/Speed_Game/macOS/images/ml 2.png b/projects/Speed_Game/macOS/images/ml 2.png new file mode 100644 index 000000000..6148eefba Binary files /dev/null and b/projects/Speed_Game/macOS/images/ml 2.png differ diff --git a/projects/Speed_Game/macOS/images/ml.png b/projects/Speed_Game/macOS/images/ml.png new file mode 100644 index 000000000..6148eefba Binary files /dev/null and b/projects/Speed_Game/macOS/images/ml.png differ diff --git a/projects/Speed_Game/macOS/images/mm 2.png b/projects/Speed_Game/macOS/images/mm 2.png new file mode 100644 index 000000000..929c1781f Binary files /dev/null and b/projects/Speed_Game/macOS/images/mm 2.png differ diff --git a/projects/Speed_Game/macOS/images/mm.png b/projects/Speed_Game/macOS/images/mm.png new file mode 100644 index 000000000..929c1781f Binary files /dev/null and b/projects/Speed_Game/macOS/images/mm.png differ diff --git a/projects/Speed_Game/macOS/images/mn 2.png b/projects/Speed_Game/macOS/images/mn 2.png new file mode 100644 index 000000000..8c18dfb66 Binary files /dev/null and b/projects/Speed_Game/macOS/images/mn 2.png differ diff --git a/projects/Speed_Game/macOS/images/mn.png b/projects/Speed_Game/macOS/images/mn.png new file mode 100644 index 000000000..8c18dfb66 Binary files /dev/null and b/projects/Speed_Game/macOS/images/mn.png differ diff --git a/projects/Speed_Game/macOS/images/mo 2.png b/projects/Speed_Game/macOS/images/mo 2.png new file mode 100644 index 000000000..494c04b12 Binary files /dev/null and b/projects/Speed_Game/macOS/images/mo 2.png differ diff --git a/projects/Speed_Game/macOS/images/mo.png b/projects/Speed_Game/macOS/images/mo.png new file mode 100644 index 000000000..494c04b12 Binary files /dev/null and b/projects/Speed_Game/macOS/images/mo.png differ diff --git a/projects/Speed_Game/macOS/images/mp 2.png b/projects/Speed_Game/macOS/images/mp 2.png new file mode 100644 index 000000000..1c386c030 Binary files /dev/null and b/projects/Speed_Game/macOS/images/mp 2.png differ diff --git a/projects/Speed_Game/macOS/images/mp.png b/projects/Speed_Game/macOS/images/mp.png new file mode 100644 index 000000000..1c386c030 Binary files /dev/null and b/projects/Speed_Game/macOS/images/mp.png differ diff --git a/projects/Speed_Game/macOS/images/mq 2.png b/projects/Speed_Game/macOS/images/mq 2.png new file mode 100644 index 000000000..82d2f3113 Binary files /dev/null and b/projects/Speed_Game/macOS/images/mq 2.png differ diff --git a/projects/Speed_Game/macOS/images/mq.png b/projects/Speed_Game/macOS/images/mq.png new file mode 100644 index 000000000..82d2f3113 Binary files /dev/null and b/projects/Speed_Game/macOS/images/mq.png differ diff --git a/projects/Speed_Game/macOS/images/mr 2.png b/projects/Speed_Game/macOS/images/mr 2.png new file mode 100644 index 000000000..560f899d0 Binary files /dev/null and b/projects/Speed_Game/macOS/images/mr 2.png differ diff --git a/projects/Speed_Game/macOS/images/mr.png b/projects/Speed_Game/macOS/images/mr.png new file mode 100644 index 000000000..560f899d0 Binary files /dev/null and b/projects/Speed_Game/macOS/images/mr.png differ diff --git a/projects/Speed_Game/macOS/images/ms 2.png b/projects/Speed_Game/macOS/images/ms 2.png new file mode 100644 index 000000000..758b65174 Binary files /dev/null and b/projects/Speed_Game/macOS/images/ms 2.png differ diff --git a/projects/Speed_Game/macOS/images/ms.png b/projects/Speed_Game/macOS/images/ms.png new file mode 100644 index 000000000..758b65174 Binary files /dev/null and b/projects/Speed_Game/macOS/images/ms.png differ diff --git a/projects/Speed_Game/macOS/images/mt 2.png b/projects/Speed_Game/macOS/images/mt 2.png new file mode 100644 index 000000000..93d8927e5 Binary files /dev/null and b/projects/Speed_Game/macOS/images/mt 2.png differ diff --git a/projects/Speed_Game/macOS/images/mt.png b/projects/Speed_Game/macOS/images/mt.png new file mode 100644 index 000000000..93d8927e5 Binary files /dev/null and b/projects/Speed_Game/macOS/images/mt.png differ diff --git a/projects/Speed_Game/macOS/images/mu 2.png b/projects/Speed_Game/macOS/images/mu 2.png new file mode 100644 index 000000000..6d313e5a5 Binary files /dev/null and b/projects/Speed_Game/macOS/images/mu 2.png differ diff --git a/projects/Speed_Game/macOS/images/mu.png b/projects/Speed_Game/macOS/images/mu.png new file mode 100644 index 000000000..6d313e5a5 Binary files /dev/null and b/projects/Speed_Game/macOS/images/mu.png differ diff --git a/projects/Speed_Game/macOS/images/mv 2.png b/projects/Speed_Game/macOS/images/mv 2.png new file mode 100644 index 000000000..8f04da967 Binary files /dev/null and b/projects/Speed_Game/macOS/images/mv 2.png differ diff --git a/projects/Speed_Game/macOS/images/mv.png b/projects/Speed_Game/macOS/images/mv.png new file mode 100644 index 000000000..8f04da967 Binary files /dev/null and b/projects/Speed_Game/macOS/images/mv.png differ diff --git a/projects/Speed_Game/macOS/images/mw 2.png b/projects/Speed_Game/macOS/images/mw 2.png new file mode 100644 index 000000000..35672dbb6 Binary files /dev/null and b/projects/Speed_Game/macOS/images/mw 2.png differ diff --git a/projects/Speed_Game/macOS/images/mw.png b/projects/Speed_Game/macOS/images/mw.png new file mode 100644 index 000000000..35672dbb6 Binary files /dev/null and b/projects/Speed_Game/macOS/images/mw.png differ diff --git a/projects/Speed_Game/macOS/images/mx 2.png b/projects/Speed_Game/macOS/images/mx 2.png new file mode 100644 index 000000000..cd147f00f Binary files /dev/null and b/projects/Speed_Game/macOS/images/mx 2.png differ diff --git a/projects/Speed_Game/macOS/images/mx.png b/projects/Speed_Game/macOS/images/mx.png new file mode 100644 index 000000000..cd147f00f Binary files /dev/null and b/projects/Speed_Game/macOS/images/mx.png differ diff --git a/projects/Speed_Game/macOS/images/my 2.png b/projects/Speed_Game/macOS/images/my 2.png new file mode 100644 index 000000000..0c07dd052 Binary files /dev/null and b/projects/Speed_Game/macOS/images/my 2.png differ diff --git a/projects/Speed_Game/macOS/images/my.png b/projects/Speed_Game/macOS/images/my.png new file mode 100644 index 000000000..0c07dd052 Binary files /dev/null and b/projects/Speed_Game/macOS/images/my.png differ diff --git a/projects/Speed_Game/macOS/images/mz 2.png b/projects/Speed_Game/macOS/images/mz 2.png new file mode 100644 index 000000000..e6f741b34 Binary files /dev/null and b/projects/Speed_Game/macOS/images/mz 2.png differ diff --git a/projects/Speed_Game/macOS/images/mz.png b/projects/Speed_Game/macOS/images/mz.png new file mode 100644 index 000000000..e6f741b34 Binary files /dev/null and b/projects/Speed_Game/macOS/images/mz.png differ diff --git a/projects/Speed_Game/macOS/images/na 2.png b/projects/Speed_Game/macOS/images/na 2.png new file mode 100644 index 000000000..3959e2691 Binary files /dev/null and b/projects/Speed_Game/macOS/images/na 2.png differ diff --git a/projects/Speed_Game/macOS/images/na.png b/projects/Speed_Game/macOS/images/na.png new file mode 100644 index 000000000..3959e2691 Binary files /dev/null and b/projects/Speed_Game/macOS/images/na.png differ diff --git a/projects/Speed_Game/macOS/images/nc 2.png b/projects/Speed_Game/macOS/images/nc 2.png new file mode 100644 index 000000000..754b25ef7 Binary files /dev/null and b/projects/Speed_Game/macOS/images/nc 2.png differ diff --git a/projects/Speed_Game/macOS/images/nc.png b/projects/Speed_Game/macOS/images/nc.png new file mode 100644 index 000000000..754b25ef7 Binary files /dev/null and b/projects/Speed_Game/macOS/images/nc.png differ diff --git a/projects/Speed_Game/macOS/images/ne 2.png b/projects/Speed_Game/macOS/images/ne 2.png new file mode 100644 index 000000000..1181e146c Binary files /dev/null and b/projects/Speed_Game/macOS/images/ne 2.png differ diff --git a/projects/Speed_Game/macOS/images/ne.png b/projects/Speed_Game/macOS/images/ne.png new file mode 100644 index 000000000..1181e146c Binary files /dev/null and b/projects/Speed_Game/macOS/images/ne.png differ diff --git a/projects/Speed_Game/macOS/images/nf 2.png b/projects/Speed_Game/macOS/images/nf 2.png new file mode 100644 index 000000000..69b4666c9 Binary files /dev/null and b/projects/Speed_Game/macOS/images/nf 2.png differ diff --git a/projects/Speed_Game/macOS/images/nf.png b/projects/Speed_Game/macOS/images/nf.png new file mode 100644 index 000000000..69b4666c9 Binary files /dev/null and b/projects/Speed_Game/macOS/images/nf.png differ diff --git a/projects/Speed_Game/macOS/images/ng 2.png b/projects/Speed_Game/macOS/images/ng 2.png new file mode 100644 index 000000000..24459d4f2 Binary files /dev/null and b/projects/Speed_Game/macOS/images/ng 2.png differ diff --git a/projects/Speed_Game/macOS/images/ng.png b/projects/Speed_Game/macOS/images/ng.png new file mode 100644 index 000000000..24459d4f2 Binary files /dev/null and b/projects/Speed_Game/macOS/images/ng.png differ diff --git a/projects/Speed_Game/macOS/images/ni 2.png b/projects/Speed_Game/macOS/images/ni 2.png new file mode 100644 index 000000000..c13312516 Binary files /dev/null and b/projects/Speed_Game/macOS/images/ni 2.png differ diff --git a/projects/Speed_Game/macOS/images/ni.png b/projects/Speed_Game/macOS/images/ni.png new file mode 100644 index 000000000..c13312516 Binary files /dev/null and b/projects/Speed_Game/macOS/images/ni.png differ diff --git a/projects/Speed_Game/macOS/images/nl 2.png b/projects/Speed_Game/macOS/images/nl 2.png new file mode 100644 index 000000000..e633b0af5 Binary files /dev/null and b/projects/Speed_Game/macOS/images/nl 2.png differ diff --git a/projects/Speed_Game/macOS/images/nl.png b/projects/Speed_Game/macOS/images/nl.png new file mode 100644 index 000000000..e633b0af5 Binary files /dev/null and b/projects/Speed_Game/macOS/images/nl.png differ diff --git a/projects/Speed_Game/macOS/images/no 2.png b/projects/Speed_Game/macOS/images/no 2.png new file mode 100644 index 000000000..db3d73415 Binary files /dev/null and b/projects/Speed_Game/macOS/images/no 2.png differ diff --git a/projects/Speed_Game/macOS/images/no.png b/projects/Speed_Game/macOS/images/no.png new file mode 100644 index 000000000..db3d73415 Binary files /dev/null and b/projects/Speed_Game/macOS/images/no.png differ diff --git a/projects/Speed_Game/macOS/images/np 2.png b/projects/Speed_Game/macOS/images/np 2.png new file mode 100644 index 000000000..e2e82c7c6 Binary files /dev/null and b/projects/Speed_Game/macOS/images/np 2.png differ diff --git a/projects/Speed_Game/macOS/images/np.png b/projects/Speed_Game/macOS/images/np.png new file mode 100644 index 000000000..e2e82c7c6 Binary files /dev/null and b/projects/Speed_Game/macOS/images/np.png differ diff --git a/projects/Speed_Game/macOS/images/nr 2.png b/projects/Speed_Game/macOS/images/nr 2.png new file mode 100644 index 000000000..5ee1a200c Binary files /dev/null and b/projects/Speed_Game/macOS/images/nr 2.png differ diff --git a/projects/Speed_Game/macOS/images/nr.png b/projects/Speed_Game/macOS/images/nr.png new file mode 100644 index 000000000..5ee1a200c Binary files /dev/null and b/projects/Speed_Game/macOS/images/nr.png differ diff --git a/projects/Speed_Game/macOS/images/nu 2.png b/projects/Speed_Game/macOS/images/nu 2.png new file mode 100644 index 000000000..6c5b22c0a Binary files /dev/null and b/projects/Speed_Game/macOS/images/nu 2.png differ diff --git a/projects/Speed_Game/macOS/images/nu.png b/projects/Speed_Game/macOS/images/nu.png new file mode 100644 index 000000000..6c5b22c0a Binary files /dev/null and b/projects/Speed_Game/macOS/images/nu.png differ diff --git a/projects/Speed_Game/macOS/images/nz 2.png b/projects/Speed_Game/macOS/images/nz 2.png new file mode 100644 index 000000000..042446118 Binary files /dev/null and b/projects/Speed_Game/macOS/images/nz 2.png differ diff --git a/projects/Speed_Game/macOS/images/nz.png b/projects/Speed_Game/macOS/images/nz.png new file mode 100644 index 000000000..042446118 Binary files /dev/null and b/projects/Speed_Game/macOS/images/nz.png differ diff --git a/projects/Speed_Game/macOS/images/om 2.png b/projects/Speed_Game/macOS/images/om 2.png new file mode 100644 index 000000000..fd07e4fd7 Binary files /dev/null and b/projects/Speed_Game/macOS/images/om 2.png differ diff --git a/projects/Speed_Game/macOS/images/om.png b/projects/Speed_Game/macOS/images/om.png new file mode 100644 index 000000000..fd07e4fd7 Binary files /dev/null and b/projects/Speed_Game/macOS/images/om.png differ diff --git a/projects/Speed_Game/macOS/images/pa 2.png b/projects/Speed_Game/macOS/images/pa 2.png new file mode 100644 index 000000000..a7cf0284e Binary files /dev/null and b/projects/Speed_Game/macOS/images/pa 2.png differ diff --git a/projects/Speed_Game/macOS/images/pa.png b/projects/Speed_Game/macOS/images/pa.png new file mode 100644 index 000000000..a7cf0284e Binary files /dev/null and b/projects/Speed_Game/macOS/images/pa.png differ diff --git a/projects/Speed_Game/macOS/images/pe 2.png b/projects/Speed_Game/macOS/images/pe 2.png new file mode 100644 index 000000000..36b7cba74 Binary files /dev/null and b/projects/Speed_Game/macOS/images/pe 2.png differ diff --git a/projects/Speed_Game/macOS/images/pe.png b/projects/Speed_Game/macOS/images/pe.png new file mode 100644 index 000000000..36b7cba74 Binary files /dev/null and b/projects/Speed_Game/macOS/images/pe.png differ diff --git a/projects/Speed_Game/macOS/images/pf 2.png b/projects/Speed_Game/macOS/images/pf 2.png new file mode 100644 index 000000000..452db5575 Binary files /dev/null and b/projects/Speed_Game/macOS/images/pf 2.png differ diff --git a/projects/Speed_Game/macOS/images/pf.png b/projects/Speed_Game/macOS/images/pf.png new file mode 100644 index 000000000..452db5575 Binary files /dev/null and b/projects/Speed_Game/macOS/images/pf.png differ diff --git a/projects/Speed_Game/macOS/images/pg 2.png b/projects/Speed_Game/macOS/images/pg 2.png new file mode 100644 index 000000000..3ec7b0274 Binary files /dev/null and b/projects/Speed_Game/macOS/images/pg 2.png differ diff --git a/projects/Speed_Game/macOS/images/pg.png b/projects/Speed_Game/macOS/images/pg.png new file mode 100644 index 000000000..3ec7b0274 Binary files /dev/null and b/projects/Speed_Game/macOS/images/pg.png differ diff --git a/projects/Speed_Game/macOS/images/ph 2.png b/projects/Speed_Game/macOS/images/ph 2.png new file mode 100644 index 000000000..a6d2212d2 Binary files /dev/null and b/projects/Speed_Game/macOS/images/ph 2.png differ diff --git a/projects/Speed_Game/macOS/images/ph.png b/projects/Speed_Game/macOS/images/ph.png new file mode 100644 index 000000000..a6d2212d2 Binary files /dev/null and b/projects/Speed_Game/macOS/images/ph.png differ diff --git a/projects/Speed_Game/macOS/images/pk 2.png b/projects/Speed_Game/macOS/images/pk 2.png new file mode 100644 index 000000000..62bb96191 Binary files /dev/null and b/projects/Speed_Game/macOS/images/pk 2.png differ diff --git a/projects/Speed_Game/macOS/images/pk.png b/projects/Speed_Game/macOS/images/pk.png new file mode 100644 index 000000000..62bb96191 Binary files /dev/null and b/projects/Speed_Game/macOS/images/pk.png differ diff --git a/projects/Speed_Game/macOS/images/pl 2.png b/projects/Speed_Game/macOS/images/pl 2.png new file mode 100644 index 000000000..1e51f810b Binary files /dev/null and b/projects/Speed_Game/macOS/images/pl 2.png differ diff --git a/projects/Speed_Game/macOS/images/pl.png b/projects/Speed_Game/macOS/images/pl.png new file mode 100644 index 000000000..1e51f810b Binary files /dev/null and b/projects/Speed_Game/macOS/images/pl.png differ diff --git a/projects/Speed_Game/macOS/images/pm 2.png b/projects/Speed_Game/macOS/images/pm 2.png new file mode 100644 index 000000000..3a826f484 Binary files /dev/null and b/projects/Speed_Game/macOS/images/pm 2.png differ diff --git a/projects/Speed_Game/macOS/images/pm.png b/projects/Speed_Game/macOS/images/pm.png new file mode 100644 index 000000000..3a826f484 Binary files /dev/null and b/projects/Speed_Game/macOS/images/pm.png differ diff --git a/projects/Speed_Game/macOS/images/pn 2.png b/projects/Speed_Game/macOS/images/pn 2.png new file mode 100644 index 000000000..ee90c1f62 Binary files /dev/null and b/projects/Speed_Game/macOS/images/pn 2.png differ diff --git a/projects/Speed_Game/macOS/images/pn.png b/projects/Speed_Game/macOS/images/pn.png new file mode 100644 index 000000000..ee90c1f62 Binary files /dev/null and b/projects/Speed_Game/macOS/images/pn.png differ diff --git a/projects/Speed_Game/macOS/images/pr 2.png b/projects/Speed_Game/macOS/images/pr 2.png new file mode 100644 index 000000000..ee8b59420 Binary files /dev/null and b/projects/Speed_Game/macOS/images/pr 2.png differ diff --git a/projects/Speed_Game/macOS/images/pr.png b/projects/Speed_Game/macOS/images/pr.png new file mode 100644 index 000000000..ee8b59420 Binary files /dev/null and b/projects/Speed_Game/macOS/images/pr.png differ diff --git a/projects/Speed_Game/macOS/images/ps 2.png b/projects/Speed_Game/macOS/images/ps 2.png new file mode 100644 index 000000000..bf268ee7c Binary files /dev/null and b/projects/Speed_Game/macOS/images/ps 2.png differ diff --git a/projects/Speed_Game/macOS/images/ps.png b/projects/Speed_Game/macOS/images/ps.png new file mode 100644 index 000000000..bf268ee7c Binary files /dev/null and b/projects/Speed_Game/macOS/images/ps.png differ diff --git a/projects/Speed_Game/macOS/images/pt 2.png b/projects/Speed_Game/macOS/images/pt 2.png new file mode 100644 index 000000000..eb24f79b4 Binary files /dev/null and b/projects/Speed_Game/macOS/images/pt 2.png differ diff --git a/projects/Speed_Game/macOS/images/pt.png b/projects/Speed_Game/macOS/images/pt.png new file mode 100644 index 000000000..eb24f79b4 Binary files /dev/null and b/projects/Speed_Game/macOS/images/pt.png differ diff --git a/projects/Speed_Game/macOS/images/pw 2.png b/projects/Speed_Game/macOS/images/pw 2.png new file mode 100644 index 000000000..cb5694ee2 Binary files /dev/null and b/projects/Speed_Game/macOS/images/pw 2.png differ diff --git a/projects/Speed_Game/macOS/images/pw.png b/projects/Speed_Game/macOS/images/pw.png new file mode 100644 index 000000000..cb5694ee2 Binary files /dev/null and b/projects/Speed_Game/macOS/images/pw.png differ diff --git a/projects/Speed_Game/macOS/images/py 2.png b/projects/Speed_Game/macOS/images/py 2.png new file mode 100644 index 000000000..c4df0c1f9 Binary files /dev/null and b/projects/Speed_Game/macOS/images/py 2.png differ diff --git a/projects/Speed_Game/macOS/images/py.png b/projects/Speed_Game/macOS/images/py.png new file mode 100644 index 000000000..c4df0c1f9 Binary files /dev/null and b/projects/Speed_Game/macOS/images/py.png differ diff --git a/projects/Speed_Game/macOS/images/qa 2.png b/projects/Speed_Game/macOS/images/qa 2.png new file mode 100644 index 000000000..1f5bc3d09 Binary files /dev/null and b/projects/Speed_Game/macOS/images/qa 2.png differ diff --git a/projects/Speed_Game/macOS/images/qa.png b/projects/Speed_Game/macOS/images/qa.png new file mode 100644 index 000000000..1f5bc3d09 Binary files /dev/null and b/projects/Speed_Game/macOS/images/qa.png differ diff --git a/projects/Speed_Game/macOS/images/re 2.png b/projects/Speed_Game/macOS/images/re 2.png new file mode 100644 index 000000000..4817253e5 Binary files /dev/null and b/projects/Speed_Game/macOS/images/re 2.png differ diff --git a/projects/Speed_Game/macOS/images/re.png b/projects/Speed_Game/macOS/images/re.png new file mode 100644 index 000000000..4817253e5 Binary files /dev/null and b/projects/Speed_Game/macOS/images/re.png differ diff --git a/projects/Speed_Game/macOS/images/ro 2.png b/projects/Speed_Game/macOS/images/ro 2.png new file mode 100644 index 000000000..4bb28efea Binary files /dev/null and b/projects/Speed_Game/macOS/images/ro 2.png differ diff --git a/projects/Speed_Game/macOS/images/ro.png b/projects/Speed_Game/macOS/images/ro.png new file mode 100644 index 000000000..4bb28efea Binary files /dev/null and b/projects/Speed_Game/macOS/images/ro.png differ diff --git a/projects/Speed_Game/macOS/images/rs 2.png b/projects/Speed_Game/macOS/images/rs 2.png new file mode 100644 index 000000000..6ea1e68b2 Binary files /dev/null and b/projects/Speed_Game/macOS/images/rs 2.png differ diff --git a/projects/Speed_Game/macOS/images/rs.png b/projects/Speed_Game/macOS/images/rs.png new file mode 100644 index 000000000..6ea1e68b2 Binary files /dev/null and b/projects/Speed_Game/macOS/images/rs.png differ diff --git a/projects/Speed_Game/macOS/images/ru 2.png b/projects/Speed_Game/macOS/images/ru 2.png new file mode 100644 index 000000000..220d7f370 Binary files /dev/null and b/projects/Speed_Game/macOS/images/ru 2.png differ diff --git a/projects/Speed_Game/macOS/images/ru.png b/projects/Speed_Game/macOS/images/ru.png new file mode 100644 index 000000000..220d7f370 Binary files /dev/null and b/projects/Speed_Game/macOS/images/ru.png differ diff --git a/projects/Speed_Game/macOS/images/rw 2.png b/projects/Speed_Game/macOS/images/rw 2.png new file mode 100644 index 000000000..980e3cdf3 Binary files /dev/null and b/projects/Speed_Game/macOS/images/rw 2.png differ diff --git a/projects/Speed_Game/macOS/images/rw.png b/projects/Speed_Game/macOS/images/rw.png new file mode 100644 index 000000000..980e3cdf3 Binary files /dev/null and b/projects/Speed_Game/macOS/images/rw.png differ diff --git a/projects/Speed_Game/macOS/images/sa 2.png b/projects/Speed_Game/macOS/images/sa 2.png new file mode 100644 index 000000000..117003a21 Binary files /dev/null and b/projects/Speed_Game/macOS/images/sa 2.png differ diff --git a/projects/Speed_Game/macOS/images/sa.png b/projects/Speed_Game/macOS/images/sa.png new file mode 100644 index 000000000..117003a21 Binary files /dev/null and b/projects/Speed_Game/macOS/images/sa.png differ diff --git a/projects/Speed_Game/macOS/images/sb 2.png b/projects/Speed_Game/macOS/images/sb 2.png new file mode 100644 index 000000000..7ec90d30f Binary files /dev/null and b/projects/Speed_Game/macOS/images/sb 2.png differ diff --git a/projects/Speed_Game/macOS/images/sb.png b/projects/Speed_Game/macOS/images/sb.png new file mode 100644 index 000000000..7ec90d30f Binary files /dev/null and b/projects/Speed_Game/macOS/images/sb.png differ diff --git a/projects/Speed_Game/macOS/images/sc 2.png b/projects/Speed_Game/macOS/images/sc 2.png new file mode 100644 index 000000000..8f64c8c31 Binary files /dev/null and b/projects/Speed_Game/macOS/images/sc 2.png differ diff --git a/projects/Speed_Game/macOS/images/sc.png b/projects/Speed_Game/macOS/images/sc.png new file mode 100644 index 000000000..8f64c8c31 Binary files /dev/null and b/projects/Speed_Game/macOS/images/sc.png differ diff --git a/projects/Speed_Game/macOS/images/sd 2.png b/projects/Speed_Game/macOS/images/sd 2.png new file mode 100644 index 000000000..9f5c34491 Binary files /dev/null and b/projects/Speed_Game/macOS/images/sd 2.png differ diff --git a/projects/Speed_Game/macOS/images/sd.png b/projects/Speed_Game/macOS/images/sd.png new file mode 100644 index 000000000..9f5c34491 Binary files /dev/null and b/projects/Speed_Game/macOS/images/sd.png differ diff --git a/projects/Speed_Game/macOS/images/se 2.png b/projects/Speed_Game/macOS/images/se 2.png new file mode 100644 index 000000000..14e8b9aee Binary files /dev/null and b/projects/Speed_Game/macOS/images/se 2.png differ diff --git a/projects/Speed_Game/macOS/images/se.png b/projects/Speed_Game/macOS/images/se.png new file mode 100644 index 000000000..14e8b9aee Binary files /dev/null and b/projects/Speed_Game/macOS/images/se.png differ diff --git a/projects/Speed_Game/macOS/images/sg 2.png b/projects/Speed_Game/macOS/images/sg 2.png new file mode 100644 index 000000000..3c86eca18 Binary files /dev/null and b/projects/Speed_Game/macOS/images/sg 2.png differ diff --git a/projects/Speed_Game/macOS/images/sg.png b/projects/Speed_Game/macOS/images/sg.png new file mode 100644 index 000000000..3c86eca18 Binary files /dev/null and b/projects/Speed_Game/macOS/images/sg.png differ diff --git a/projects/Speed_Game/macOS/images/sh 2.png b/projects/Speed_Game/macOS/images/sh 2.png new file mode 100644 index 000000000..94a6266b1 Binary files /dev/null and b/projects/Speed_Game/macOS/images/sh 2.png differ diff --git a/projects/Speed_Game/macOS/images/sh.png b/projects/Speed_Game/macOS/images/sh.png new file mode 100644 index 000000000..94a6266b1 Binary files /dev/null and b/projects/Speed_Game/macOS/images/sh.png differ diff --git a/projects/Speed_Game/macOS/images/si 2.png b/projects/Speed_Game/macOS/images/si 2.png new file mode 100644 index 000000000..80dd781db Binary files /dev/null and b/projects/Speed_Game/macOS/images/si 2.png differ diff --git a/projects/Speed_Game/macOS/images/si.png b/projects/Speed_Game/macOS/images/si.png new file mode 100644 index 000000000..80dd781db Binary files /dev/null and b/projects/Speed_Game/macOS/images/si.png differ diff --git a/projects/Speed_Game/macOS/images/sj 2.png b/projects/Speed_Game/macOS/images/sj 2.png new file mode 100644 index 000000000..db3d73415 Binary files /dev/null and b/projects/Speed_Game/macOS/images/sj 2.png differ diff --git a/projects/Speed_Game/macOS/images/sj.png b/projects/Speed_Game/macOS/images/sj.png new file mode 100644 index 000000000..db3d73415 Binary files /dev/null and b/projects/Speed_Game/macOS/images/sj.png differ diff --git a/projects/Speed_Game/macOS/images/sk 2.png b/projects/Speed_Game/macOS/images/sk 2.png new file mode 100644 index 000000000..7883d6182 Binary files /dev/null and b/projects/Speed_Game/macOS/images/sk 2.png differ diff --git a/projects/Speed_Game/macOS/images/sk.png b/projects/Speed_Game/macOS/images/sk.png new file mode 100644 index 000000000..7883d6182 Binary files /dev/null and b/projects/Speed_Game/macOS/images/sk.png differ diff --git a/projects/Speed_Game/macOS/images/sl 2.png b/projects/Speed_Game/macOS/images/sl 2.png new file mode 100644 index 000000000..f395562cf Binary files /dev/null and b/projects/Speed_Game/macOS/images/sl 2.png differ diff --git a/projects/Speed_Game/macOS/images/sl.png b/projects/Speed_Game/macOS/images/sl.png new file mode 100644 index 000000000..f395562cf Binary files /dev/null and b/projects/Speed_Game/macOS/images/sl.png differ diff --git a/projects/Speed_Game/macOS/images/sm 2.png b/projects/Speed_Game/macOS/images/sm 2.png new file mode 100644 index 000000000..df3ffe1eb Binary files /dev/null and b/projects/Speed_Game/macOS/images/sm 2.png differ diff --git a/projects/Speed_Game/macOS/images/sm.png b/projects/Speed_Game/macOS/images/sm.png new file mode 100644 index 000000000..df3ffe1eb Binary files /dev/null and b/projects/Speed_Game/macOS/images/sm.png differ diff --git a/projects/Speed_Game/macOS/images/sn 2.png b/projects/Speed_Game/macOS/images/sn 2.png new file mode 100644 index 000000000..69fe5ae9f Binary files /dev/null and b/projects/Speed_Game/macOS/images/sn 2.png differ diff --git a/projects/Speed_Game/macOS/images/sn.png b/projects/Speed_Game/macOS/images/sn.png new file mode 100644 index 000000000..69fe5ae9f Binary files /dev/null and b/projects/Speed_Game/macOS/images/sn.png differ diff --git a/projects/Speed_Game/macOS/images/so 2.png b/projects/Speed_Game/macOS/images/so 2.png new file mode 100644 index 000000000..365e52d96 Binary files /dev/null and b/projects/Speed_Game/macOS/images/so 2.png differ diff --git a/projects/Speed_Game/macOS/images/so.png b/projects/Speed_Game/macOS/images/so.png new file mode 100644 index 000000000..365e52d96 Binary files /dev/null and b/projects/Speed_Game/macOS/images/so.png differ diff --git a/projects/Speed_Game/macOS/images/sr 2.png b/projects/Speed_Game/macOS/images/sr 2.png new file mode 100644 index 000000000..922e8af2c Binary files /dev/null and b/projects/Speed_Game/macOS/images/sr 2.png differ diff --git a/projects/Speed_Game/macOS/images/sr.png b/projects/Speed_Game/macOS/images/sr.png new file mode 100644 index 000000000..922e8af2c Binary files /dev/null and b/projects/Speed_Game/macOS/images/sr.png differ diff --git a/projects/Speed_Game/macOS/images/ss 2.png b/projects/Speed_Game/macOS/images/ss 2.png new file mode 100644 index 000000000..d217e7590 Binary files /dev/null and b/projects/Speed_Game/macOS/images/ss 2.png differ diff --git a/projects/Speed_Game/macOS/images/ss.png b/projects/Speed_Game/macOS/images/ss.png new file mode 100644 index 000000000..d217e7590 Binary files /dev/null and b/projects/Speed_Game/macOS/images/ss.png differ diff --git a/projects/Speed_Game/macOS/images/st 2.png b/projects/Speed_Game/macOS/images/st 2.png new file mode 100644 index 000000000..b4f3333aa Binary files /dev/null and b/projects/Speed_Game/macOS/images/st 2.png differ diff --git a/projects/Speed_Game/macOS/images/st.png b/projects/Speed_Game/macOS/images/st.png new file mode 100644 index 000000000..b4f3333aa Binary files /dev/null and b/projects/Speed_Game/macOS/images/st.png differ diff --git a/projects/Speed_Game/macOS/images/sv 2.png b/projects/Speed_Game/macOS/images/sv 2.png new file mode 100644 index 000000000..dd2609813 Binary files /dev/null and b/projects/Speed_Game/macOS/images/sv 2.png differ diff --git a/projects/Speed_Game/macOS/images/sv.png b/projects/Speed_Game/macOS/images/sv.png new file mode 100644 index 000000000..dd2609813 Binary files /dev/null and b/projects/Speed_Game/macOS/images/sv.png differ diff --git a/projects/Speed_Game/macOS/images/sx 2.png b/projects/Speed_Game/macOS/images/sx 2.png new file mode 100644 index 000000000..e1a8d099f Binary files /dev/null and b/projects/Speed_Game/macOS/images/sx 2.png differ diff --git a/projects/Speed_Game/macOS/images/sx.png b/projects/Speed_Game/macOS/images/sx.png new file mode 100644 index 000000000..e1a8d099f Binary files /dev/null and b/projects/Speed_Game/macOS/images/sx.png differ diff --git a/projects/Speed_Game/macOS/images/sy 2.png b/projects/Speed_Game/macOS/images/sy 2.png new file mode 100644 index 000000000..127f94735 Binary files /dev/null and b/projects/Speed_Game/macOS/images/sy 2.png differ diff --git a/projects/Speed_Game/macOS/images/sy.png b/projects/Speed_Game/macOS/images/sy.png new file mode 100644 index 000000000..127f94735 Binary files /dev/null and b/projects/Speed_Game/macOS/images/sy.png differ diff --git a/projects/Speed_Game/macOS/images/sz 2.png b/projects/Speed_Game/macOS/images/sz 2.png new file mode 100644 index 000000000..d41b6a1df Binary files /dev/null and b/projects/Speed_Game/macOS/images/sz 2.png differ diff --git a/projects/Speed_Game/macOS/images/sz.png b/projects/Speed_Game/macOS/images/sz.png new file mode 100644 index 000000000..d41b6a1df Binary files /dev/null and b/projects/Speed_Game/macOS/images/sz.png differ diff --git a/projects/Speed_Game/macOS/images/tc 2.png b/projects/Speed_Game/macOS/images/tc 2.png new file mode 100644 index 000000000..d0c131484 Binary files /dev/null and b/projects/Speed_Game/macOS/images/tc 2.png differ diff --git a/projects/Speed_Game/macOS/images/tc.png b/projects/Speed_Game/macOS/images/tc.png new file mode 100644 index 000000000..d0c131484 Binary files /dev/null and b/projects/Speed_Game/macOS/images/tc.png differ diff --git a/projects/Speed_Game/macOS/images/td 2.png b/projects/Speed_Game/macOS/images/td 2.png new file mode 100644 index 000000000..b5b590d15 Binary files /dev/null and b/projects/Speed_Game/macOS/images/td 2.png differ diff --git a/projects/Speed_Game/macOS/images/td.png b/projects/Speed_Game/macOS/images/td.png new file mode 100644 index 000000000..b5b590d15 Binary files /dev/null and b/projects/Speed_Game/macOS/images/td.png differ diff --git a/projects/Speed_Game/macOS/images/tf 2.png b/projects/Speed_Game/macOS/images/tf 2.png new file mode 100644 index 000000000..8eca2a0dd Binary files /dev/null and b/projects/Speed_Game/macOS/images/tf 2.png differ diff --git a/projects/Speed_Game/macOS/images/tf.png b/projects/Speed_Game/macOS/images/tf.png new file mode 100644 index 000000000..8eca2a0dd Binary files /dev/null and b/projects/Speed_Game/macOS/images/tf.png differ diff --git a/projects/Speed_Game/macOS/images/tg 2.png b/projects/Speed_Game/macOS/images/tg 2.png new file mode 100644 index 000000000..09ee0368b Binary files /dev/null and b/projects/Speed_Game/macOS/images/tg 2.png differ diff --git a/projects/Speed_Game/macOS/images/tg.png b/projects/Speed_Game/macOS/images/tg.png new file mode 100644 index 000000000..09ee0368b Binary files /dev/null and b/projects/Speed_Game/macOS/images/tg.png differ diff --git a/projects/Speed_Game/macOS/images/th 2.png b/projects/Speed_Game/macOS/images/th 2.png new file mode 100644 index 000000000..ff42ccf5a Binary files /dev/null and b/projects/Speed_Game/macOS/images/th 2.png differ diff --git a/projects/Speed_Game/macOS/images/th.png b/projects/Speed_Game/macOS/images/th.png new file mode 100644 index 000000000..ff42ccf5a Binary files /dev/null and b/projects/Speed_Game/macOS/images/th.png differ diff --git a/projects/Speed_Game/macOS/images/tj 2.png b/projects/Speed_Game/macOS/images/tj 2.png new file mode 100644 index 000000000..ed0db20a6 Binary files /dev/null and b/projects/Speed_Game/macOS/images/tj 2.png differ diff --git a/projects/Speed_Game/macOS/images/tj.png b/projects/Speed_Game/macOS/images/tj.png new file mode 100644 index 000000000..ed0db20a6 Binary files /dev/null and b/projects/Speed_Game/macOS/images/tj.png differ diff --git a/projects/Speed_Game/macOS/images/tk 2.png b/projects/Speed_Game/macOS/images/tk 2.png new file mode 100644 index 000000000..95c082c86 Binary files /dev/null and b/projects/Speed_Game/macOS/images/tk 2.png differ diff --git a/projects/Speed_Game/macOS/images/tk.png b/projects/Speed_Game/macOS/images/tk.png new file mode 100644 index 000000000..95c082c86 Binary files /dev/null and b/projects/Speed_Game/macOS/images/tk.png differ diff --git a/projects/Speed_Game/macOS/images/tl 2.png b/projects/Speed_Game/macOS/images/tl 2.png new file mode 100644 index 000000000..d1f48aff6 Binary files /dev/null and b/projects/Speed_Game/macOS/images/tl 2.png differ diff --git a/projects/Speed_Game/macOS/images/tl.png b/projects/Speed_Game/macOS/images/tl.png new file mode 100644 index 000000000..d1f48aff6 Binary files /dev/null and b/projects/Speed_Game/macOS/images/tl.png differ diff --git a/projects/Speed_Game/macOS/images/tm 2.png b/projects/Speed_Game/macOS/images/tm 2.png new file mode 100644 index 000000000..c0ae220b3 Binary files /dev/null and b/projects/Speed_Game/macOS/images/tm 2.png differ diff --git a/projects/Speed_Game/macOS/images/tm.png b/projects/Speed_Game/macOS/images/tm.png new file mode 100644 index 000000000..c0ae220b3 Binary files /dev/null and b/projects/Speed_Game/macOS/images/tm.png differ diff --git a/projects/Speed_Game/macOS/images/tn 2.png b/projects/Speed_Game/macOS/images/tn 2.png new file mode 100644 index 000000000..1dd76623a Binary files /dev/null and b/projects/Speed_Game/macOS/images/tn 2.png differ diff --git a/projects/Speed_Game/macOS/images/tn.png b/projects/Speed_Game/macOS/images/tn.png new file mode 100644 index 000000000..1dd76623a Binary files /dev/null and b/projects/Speed_Game/macOS/images/tn.png differ diff --git a/projects/Speed_Game/macOS/images/to 2.png b/projects/Speed_Game/macOS/images/to 2.png new file mode 100644 index 000000000..fabdc04c2 Binary files /dev/null and b/projects/Speed_Game/macOS/images/to 2.png differ diff --git a/projects/Speed_Game/macOS/images/to.png b/projects/Speed_Game/macOS/images/to.png new file mode 100644 index 000000000..fabdc04c2 Binary files /dev/null and b/projects/Speed_Game/macOS/images/to.png differ diff --git a/projects/Speed_Game/macOS/images/tr 2.png b/projects/Speed_Game/macOS/images/tr 2.png new file mode 100644 index 000000000..2e010dd3d Binary files /dev/null and b/projects/Speed_Game/macOS/images/tr 2.png differ diff --git a/projects/Speed_Game/macOS/images/tr.png b/projects/Speed_Game/macOS/images/tr.png new file mode 100644 index 000000000..2e010dd3d Binary files /dev/null and b/projects/Speed_Game/macOS/images/tr.png differ diff --git a/projects/Speed_Game/macOS/images/tt 2.png b/projects/Speed_Game/macOS/images/tt 2.png new file mode 100644 index 000000000..46e99c844 Binary files /dev/null and b/projects/Speed_Game/macOS/images/tt 2.png differ diff --git a/projects/Speed_Game/macOS/images/tt.png b/projects/Speed_Game/macOS/images/tt.png new file mode 100644 index 000000000..46e99c844 Binary files /dev/null and b/projects/Speed_Game/macOS/images/tt.png differ diff --git a/projects/Speed_Game/macOS/images/tv 2.png b/projects/Speed_Game/macOS/images/tv 2.png new file mode 100644 index 000000000..bf69cfc2f Binary files /dev/null and b/projects/Speed_Game/macOS/images/tv 2.png differ diff --git a/projects/Speed_Game/macOS/images/tv.png b/projects/Speed_Game/macOS/images/tv.png new file mode 100644 index 000000000..bf69cfc2f Binary files /dev/null and b/projects/Speed_Game/macOS/images/tv.png differ diff --git a/projects/Speed_Game/macOS/images/tw 2.png b/projects/Speed_Game/macOS/images/tw 2.png new file mode 100644 index 000000000..131bef718 Binary files /dev/null and b/projects/Speed_Game/macOS/images/tw 2.png differ diff --git a/projects/Speed_Game/macOS/images/tw.png b/projects/Speed_Game/macOS/images/tw.png new file mode 100644 index 000000000..131bef718 Binary files /dev/null and b/projects/Speed_Game/macOS/images/tw.png differ diff --git a/projects/Speed_Game/macOS/images/tz 2.png b/projects/Speed_Game/macOS/images/tz 2.png new file mode 100644 index 000000000..9ee560fd3 Binary files /dev/null and b/projects/Speed_Game/macOS/images/tz 2.png differ diff --git a/projects/Speed_Game/macOS/images/tz.png b/projects/Speed_Game/macOS/images/tz.png new file mode 100644 index 000000000..9ee560fd3 Binary files /dev/null and b/projects/Speed_Game/macOS/images/tz.png differ diff --git a/projects/Speed_Game/macOS/images/ua 2.png b/projects/Speed_Game/macOS/images/ua 2.png new file mode 100644 index 000000000..b18613c41 Binary files /dev/null and b/projects/Speed_Game/macOS/images/ua 2.png differ diff --git a/projects/Speed_Game/macOS/images/ua.png b/projects/Speed_Game/macOS/images/ua.png new file mode 100644 index 000000000..b18613c41 Binary files /dev/null and b/projects/Speed_Game/macOS/images/ua.png differ diff --git a/projects/Speed_Game/macOS/images/ug 2.png b/projects/Speed_Game/macOS/images/ug 2.png new file mode 100644 index 000000000..a370c1616 Binary files /dev/null and b/projects/Speed_Game/macOS/images/ug 2.png differ diff --git a/projects/Speed_Game/macOS/images/ug.png b/projects/Speed_Game/macOS/images/ug.png new file mode 100644 index 000000000..a370c1616 Binary files /dev/null and b/projects/Speed_Game/macOS/images/ug.png differ diff --git a/projects/Speed_Game/macOS/images/um 2.png b/projects/Speed_Game/macOS/images/um 2.png new file mode 100644 index 000000000..837ce54a0 Binary files /dev/null and b/projects/Speed_Game/macOS/images/um 2.png differ diff --git a/projects/Speed_Game/macOS/images/um.png b/projects/Speed_Game/macOS/images/um.png new file mode 100644 index 000000000..837ce54a0 Binary files /dev/null and b/projects/Speed_Game/macOS/images/um.png differ diff --git a/projects/Speed_Game/macOS/images/us 2.png b/projects/Speed_Game/macOS/images/us 2.png new file mode 100644 index 000000000..837ce54a0 Binary files /dev/null and b/projects/Speed_Game/macOS/images/us 2.png differ diff --git a/projects/Speed_Game/macOS/images/us.png b/projects/Speed_Game/macOS/images/us.png new file mode 100644 index 000000000..837ce54a0 Binary files /dev/null and b/projects/Speed_Game/macOS/images/us.png differ diff --git a/projects/Speed_Game/macOS/images/uy 2.png b/projects/Speed_Game/macOS/images/uy 2.png new file mode 100644 index 000000000..fa52ee344 Binary files /dev/null and b/projects/Speed_Game/macOS/images/uy 2.png differ diff --git a/projects/Speed_Game/macOS/images/uy.png b/projects/Speed_Game/macOS/images/uy.png new file mode 100644 index 000000000..fa52ee344 Binary files /dev/null and b/projects/Speed_Game/macOS/images/uy.png differ diff --git a/projects/Speed_Game/macOS/images/uz 2.png b/projects/Speed_Game/macOS/images/uz 2.png new file mode 100644 index 000000000..7c6388e40 Binary files /dev/null and b/projects/Speed_Game/macOS/images/uz 2.png differ diff --git a/projects/Speed_Game/macOS/images/uz.png b/projects/Speed_Game/macOS/images/uz.png new file mode 100644 index 000000000..7c6388e40 Binary files /dev/null and b/projects/Speed_Game/macOS/images/uz.png differ diff --git a/projects/Speed_Game/macOS/images/va 2.png b/projects/Speed_Game/macOS/images/va 2.png new file mode 100644 index 000000000..7e1dff4ad Binary files /dev/null and b/projects/Speed_Game/macOS/images/va 2.png differ diff --git a/projects/Speed_Game/macOS/images/va.png b/projects/Speed_Game/macOS/images/va.png new file mode 100644 index 000000000..7e1dff4ad Binary files /dev/null and b/projects/Speed_Game/macOS/images/va.png differ diff --git a/projects/Speed_Game/macOS/images/vc 2.png b/projects/Speed_Game/macOS/images/vc 2.png new file mode 100644 index 000000000..1719e7a0d Binary files /dev/null and b/projects/Speed_Game/macOS/images/vc 2.png differ diff --git a/projects/Speed_Game/macOS/images/vc.png b/projects/Speed_Game/macOS/images/vc.png new file mode 100644 index 000000000..1719e7a0d Binary files /dev/null and b/projects/Speed_Game/macOS/images/vc.png differ diff --git a/projects/Speed_Game/macOS/images/ve 2.png b/projects/Speed_Game/macOS/images/ve 2.png new file mode 100644 index 000000000..fe1521544 Binary files /dev/null and b/projects/Speed_Game/macOS/images/ve 2.png differ diff --git a/projects/Speed_Game/macOS/images/ve.png b/projects/Speed_Game/macOS/images/ve.png new file mode 100644 index 000000000..fe1521544 Binary files /dev/null and b/projects/Speed_Game/macOS/images/ve.png differ diff --git a/projects/Speed_Game/macOS/images/vg 2.png b/projects/Speed_Game/macOS/images/vg 2.png new file mode 100644 index 000000000..33e329901 Binary files /dev/null and b/projects/Speed_Game/macOS/images/vg 2.png differ diff --git a/projects/Speed_Game/macOS/images/vg.png b/projects/Speed_Game/macOS/images/vg.png new file mode 100644 index 000000000..33e329901 Binary files /dev/null and b/projects/Speed_Game/macOS/images/vg.png differ diff --git a/projects/Speed_Game/macOS/images/vi 2.png b/projects/Speed_Game/macOS/images/vi 2.png new file mode 100644 index 000000000..72222a1fc Binary files /dev/null and b/projects/Speed_Game/macOS/images/vi 2.png differ diff --git a/projects/Speed_Game/macOS/images/vi.png b/projects/Speed_Game/macOS/images/vi.png new file mode 100644 index 000000000..72222a1fc Binary files /dev/null and b/projects/Speed_Game/macOS/images/vi.png differ diff --git a/projects/Speed_Game/macOS/images/vn 2.png b/projects/Speed_Game/macOS/images/vn 2.png new file mode 100644 index 000000000..2a3c51b84 Binary files /dev/null and b/projects/Speed_Game/macOS/images/vn 2.png differ diff --git a/projects/Speed_Game/macOS/images/vn.png b/projects/Speed_Game/macOS/images/vn.png new file mode 100644 index 000000000..2a3c51b84 Binary files /dev/null and b/projects/Speed_Game/macOS/images/vn.png differ diff --git a/projects/Speed_Game/macOS/images/vu 2.png b/projects/Speed_Game/macOS/images/vu 2.png new file mode 100644 index 000000000..fa3a9f613 Binary files /dev/null and b/projects/Speed_Game/macOS/images/vu 2.png differ diff --git a/projects/Speed_Game/macOS/images/vu.png b/projects/Speed_Game/macOS/images/vu.png new file mode 100644 index 000000000..fa3a9f613 Binary files /dev/null and b/projects/Speed_Game/macOS/images/vu.png differ diff --git a/projects/Speed_Game/macOS/images/wf 2.png b/projects/Speed_Game/macOS/images/wf 2.png new file mode 100644 index 000000000..2358bc41c Binary files /dev/null and b/projects/Speed_Game/macOS/images/wf 2.png differ diff --git a/projects/Speed_Game/macOS/images/wf.png b/projects/Speed_Game/macOS/images/wf.png new file mode 100644 index 000000000..2358bc41c Binary files /dev/null and b/projects/Speed_Game/macOS/images/wf.png differ diff --git a/projects/Speed_Game/macOS/images/ws 2.png b/projects/Speed_Game/macOS/images/ws 2.png new file mode 100644 index 000000000..7fd973b41 Binary files /dev/null and b/projects/Speed_Game/macOS/images/ws 2.png differ diff --git a/projects/Speed_Game/macOS/images/ws.png b/projects/Speed_Game/macOS/images/ws.png new file mode 100644 index 000000000..7fd973b41 Binary files /dev/null and b/projects/Speed_Game/macOS/images/ws.png differ diff --git a/projects/Speed_Game/macOS/images/xk 2.png b/projects/Speed_Game/macOS/images/xk 2.png new file mode 100644 index 000000000..60e1cac61 Binary files /dev/null and b/projects/Speed_Game/macOS/images/xk 2.png differ diff --git a/projects/Speed_Game/macOS/images/xk.png b/projects/Speed_Game/macOS/images/xk.png new file mode 100644 index 000000000..60e1cac61 Binary files /dev/null and b/projects/Speed_Game/macOS/images/xk.png differ diff --git a/projects/Speed_Game/macOS/images/ye 2.png b/projects/Speed_Game/macOS/images/ye 2.png new file mode 100644 index 000000000..ad007a679 Binary files /dev/null and b/projects/Speed_Game/macOS/images/ye 2.png differ diff --git a/projects/Speed_Game/macOS/images/ye.png b/projects/Speed_Game/macOS/images/ye.png new file mode 100644 index 000000000..ad007a679 Binary files /dev/null and b/projects/Speed_Game/macOS/images/ye.png differ diff --git a/projects/Speed_Game/macOS/images/yt 2.png b/projects/Speed_Game/macOS/images/yt 2.png new file mode 100644 index 000000000..dd9167436 Binary files /dev/null and b/projects/Speed_Game/macOS/images/yt 2.png differ diff --git a/projects/Speed_Game/macOS/images/yt.png b/projects/Speed_Game/macOS/images/yt.png new file mode 100644 index 000000000..dd9167436 Binary files /dev/null and b/projects/Speed_Game/macOS/images/yt.png differ diff --git a/projects/Speed_Game/macOS/images/za 2.png b/projects/Speed_Game/macOS/images/za 2.png new file mode 100644 index 000000000..c1648f7b6 Binary files /dev/null and b/projects/Speed_Game/macOS/images/za 2.png differ diff --git a/projects/Speed_Game/macOS/images/za.png b/projects/Speed_Game/macOS/images/za.png new file mode 100644 index 000000000..c1648f7b6 Binary files /dev/null and b/projects/Speed_Game/macOS/images/za.png differ diff --git a/projects/Speed_Game/macOS/images/zm 2.png b/projects/Speed_Game/macOS/images/zm 2.png new file mode 100644 index 000000000..29049f27f Binary files /dev/null and b/projects/Speed_Game/macOS/images/zm 2.png differ diff --git a/projects/Speed_Game/macOS/images/zm.png b/projects/Speed_Game/macOS/images/zm.png new file mode 100644 index 000000000..29049f27f Binary files /dev/null and b/projects/Speed_Game/macOS/images/zm.png differ diff --git a/projects/Speed_Game/macOS/images/zw 2.png b/projects/Speed_Game/macOS/images/zw 2.png new file mode 100644 index 000000000..71e461a61 Binary files /dev/null and b/projects/Speed_Game/macOS/images/zw 2.png differ diff --git a/projects/Speed_Game/macOS/images/zw.png b/projects/Speed_Game/macOS/images/zw.png new file mode 100644 index 000000000..71e461a61 Binary files /dev/null and b/projects/Speed_Game/macOS/images/zw.png differ diff --git a/projects/Speed_Game/macOS/main.py b/projects/Speed_Game/macOS/main.py new file mode 100644 index 000000000..fc1ca6a51 --- /dev/null +++ b/projects/Speed_Game/macOS/main.py @@ -0,0 +1,272 @@ +import tkinter.font as tkFont +from tkinter import messagebox +import pandas as pd +import os +import random +from PIL import Image, ImageTk +import time +import threading +from tkinter import messagebox + +try: + import tkinter as tk +except: + import tkinter as tk + +class SampleApp(tk.Tk): + def __init__(self): + tk.Tk.__init__(self) + self._frame = None + self.switch_frame(StartPage) + + def switch_frame(self, frame_class): + new_frame = frame_class(self) + if self._frame is not None: + self._frame.destroy() + self._frame = new_frame + self._frame.pack() + + +class StartPage(tk.Frame): + def __init__(self, master): + tk.Frame.__init__(self, master) + + ImagePath = 'halloween.png' + canv = tk.Canvas(self, width=600, height=500, bg='white') + canv.pack(side='bottom') + self.img = ImageTk.PhotoImage(Image.open(ImagePath).resize((600, 500), Image.ANTIALIAS)) + canv.create_image(0, 0, anchor="nw", image=self.img) + + labelFont = tkFont.Font(family="Arial", size=40, weight="bold", slant="italic") + canv.create_text((600 // 2), (500 // 2) - 40, fill="white", text="Speed Game", font=labelFont) + + startBtnFont = tkFont.Font(family="Consolas", size=20) + startBtn = tk.Button(canv, text="START", font=startBtnFont, foreground="black", background="black", + relief="ridge", borderwidth=5, highlightbackground="yellow", + activebackground="yellow", activeforeground="black", + command=lambda: master.switch_frame(CategoryPage)) + canv.create_window((600 // 2), (500 // 2) + 100, window=startBtn) + + +class CategoryPage(tk.Frame): + def __init__(self, master): + tk.Frame.__init__(self, master) + + ImagePath = 'halloween.png' + canv = tk.Canvas(self, width=600, height=500, bg='white') + canv.pack(side='bottom') + self.img = ImageTk.PhotoImage(Image.open(ImagePath).resize((600, 500), Image.ANTIALIAS)) + canv.create_image(0, 0, anchor="nw", image=self.img) + + labelFont = tkFont.Font(family="Arial", size=40, weight="bold", slant="italic") + canv.create_text((600 // 2), (500 // 2) - 190, fill="white", text="Speed Game", font=labelFont) + + btnFont = tkFont.Font(family="Consolas", size=20) + countryBtn = tk.Button(self, text="country", foreground="black", + width=15, height=1, + background="yellow", font=btnFont, relief="ridge", + borderwidth=5, highlightbackground="yellow", + activebackground="yellow", activeforeground="yellow", + command=lambda: master.switch_frame(CountryPage)) + canv.create_window((600 // 2), (500 // 2) - 100, window=countryBtn) + + prevBtn = tk.Button(self, text="preve page", foreground="black", + width=15, height=1, + background="yellow", font=btnFont, relief="ridge", + borderwidth=5, highlightbackground="yellow", + activebackground="yellow", activeforeground="yellow", + command=lambda: master.switch_frame(StartPage)) + canv.create_window((600 // 2), (500 // 2) - 10, window=prevBtn) + + +class CountryPage(tk.Frame): + def __init__(self, master): + global pass_count, answer, country_img + global df, pass_window + tk.Frame.__init__(self, master) + + filename = random.choice(os.listdir("./images")) + code = filename.split(".")[0] + + # data not in excel file + while code.upper() not in df.index: + filename = random.choice(os.listdir("./images")) + code = filename.split(".")[0] + + countryPath = "./images/" + filename + + print(countryPath) + print(df["country"][code.upper()]) + print(filename) + answer = df["country"][code.upper()] + + backgroundPath = 'halloween.png' + canv = tk.Canvas(self, width=600, height=500, bg='white') + canv.pack() + self.img1 = ImageTk.PhotoImage(Image.open(backgroundPath).resize((600, 500), Image.ANTIALIAS)) + canv.create_image(0, 0, anchor="nw", image=self.img1) + + titleFont = tkFont.Font(family="Arial", size=40, weight="bold", slant="italic") + canv.create_text((600 // 2), (500 // 2) - 190, fill="white", text="Country", font=titleFont) + + self.img2 = ImageTk.PhotoImage(Image.open(countryPath).resize((180, 130), Image.ANTIALIAS)) + country_img = canv.create_image(210, 130, anchor="nw", image=self.img2) + + labelFont = tkFont.Font(family="Arial", size=17, slant="italic") + BtnFont = tkFont.Font(family="Consolas", size=15) + + canv.create_text((600 // 2), (500 // 2) + 40, fill="white", text="answer", font=labelFont) + + input_text = tk.Entry(self, width=30) + canv.create_window((600 // 2), (500 // 2) + 70, window=input_text) + + check_btn = tk.Button(self, text="check", + width=10, height=1, font=BtnFont, foreground="black", + background="yellow", relief="ridge", + activebackground="yellow", activeforeground="black", + command=lambda: self.checkBtn_click(master, input_text.get(), answer, canv,country_img)) + canv.create_window((600 // 2) - 80, (500 // 2) + 140, window=check_btn) + + pass_btn = tk.Button(self, text="pass: " + str(pass_count) + "/3", + width=10, height=1, font=BtnFont, foreground="black", + background="yellow", relief="ridge", + activebackground="yellow", activeforeground="black", + command=lambda: self.passBtn_click(tk, canv, country_img)) + pass_window = canv.create_window((600 // 2) + 80, (500 // 2) + 140, window=pass_btn) + + self.num = 180 + mins, secs = divmod(self.num, 60) + timeformat = '{:02d}:{:02d}'.format(mins, secs) + TimerFont = tkFont.Font(family="Arial", size=30, weight="bold", slant="italic") + timer_text = canv.create_text(100, 100, fill="white", text=timeformat, font=TimerFont) + canv.after(1, self.count, canv, timer_text) + + def count(self, canv, timer_text): + mins, secs = divmod(self.num, 60) + timeformat = '{:02d}:{:02d}'.format(mins, secs) + canv.delete(timer_text) + TimerFont = tkFont.Font(family="Arial", size=30, weight="bold", slant="italic") + timer_text = canv.create_text(100, 100, fill="white", text=timeformat, font=TimerFont) + self.num -= 1 + if self.num < 0: + msgBox = tk.messagebox.askretrycancel('Exit App', 'Really Quit?') + if msgBox == True: + self.master.switch_frame(StartPage) + else: + self.master.switch_frame(FinishPage) + else: + canv.after(1000, self.count, canv, timer_text) + + # click check button + def checkBtn_click(self, master, user_text, check_answer, canv, check_img): + global answer, country_img + global correct_count, problem_count + problem_count -= 1 + + user_text = user_text.upper().replace(" ", "") + check_answer = check_answer.replace(" ", "") + + if (user_text == check_answer): + # correct + print('correct') + ImagePath = 'correct.png' + self.img3 = ImageTk.PhotoImage(Image.open(ImagePath).resize((100, 100), Image.ANTIALIAS)) + resultImage = canv.create_image(450, 30, anchor="nw", image=self.img3) + correct_count += 1 + else: + # wrong + print('wrong') + ImagePath = 'wrong.png' + self.img4 = ImageTk.PhotoImage(Image.open(ImagePath).resize((100, 100), Image.ANTIALIAS)) + + resultImage = canv.create_image(450, 30, anchor="nw", image=self.img4) + + # resolve 15 problems + if problem_count <= 0: + master.switch_frame(FinishPage) + canv.after(1000, self.delete_img, canv, resultImage) + filename = random.choice(os.listdir("./images")) + code = filename.split(".")[0] + + # data not in excel file + while code.upper() not in df.index: + filename = random.choice(os.listdir("./images")) + code = filename.split(".")[0] + + countryPath = "./images/" + filename + canv.after(1000,self.delete_img, canv, check_img) + self.img2 = ImageTk.PhotoImage(Image.open(countryPath).resize((180, 130), Image.ANTIALIAS)) + country_img = canv.create_image(210, 130, anchor="nw", image=self.img2) + answer = df["country"][code.upper()] + + print(answer) + + def passBtn_click(self, tk, canv, check_img): + global pass_count, pass_window + global country_img, answer + pass_count = pass_count - 1 + if (pass_count < 0): + print("패스 그만") + pass_count = 0 + tk.messagebox.showerror('Pass', 'You Don\'t have pass ticket!') + else: + filename = random.choice(os.listdir("./images")) + code = filename.split(".")[0] + + # data not in excel file + while code.upper() not in df.index: + filename = random.choice(os.listdir("./images")) + code = filename.split(".")[0] + + countryPath = "./images/" + filename + canv.after(1000, self.delete_img, canv, check_img) + self.img2 = ImageTk.PhotoImage(Image.open(countryPath).resize((180, 130), Image.ANTIALIAS)) + country_img = canv.create_image(210, 130, anchor="nw", image=self.img2) + answer = df["country"][code.upper()] + + self.delete_img(canv, pass_window) + BtnFont = tkFont.Font(family="Consolas", size=15) + pass_btn = tk.Button(self, text="pass: " + str(pass_count) + "/3", + width=10, height=1, font=BtnFont, foreground="yellow", + background="black", relief="ridge", + activebackground="yellow", activeforeground="black", + command=lambda: self.passBtn_click(tk, canv, country_img)) + pass_window = canv.create_window((600 // 2) + 80, (500 // 2) + 140, window=pass_btn) + + def delete_img(self, canv, dele_img_name): + canv.delete(dele_img_name) + + +class FinishPage(tk.Frame): + def __init__(self, master): + tk.Frame.__init__(self, master) + ImagePath = 'halloween.png' + canv = tk.Canvas(self, width=600, height=500, bg='white') + canv.pack(side='bottom') + self.img = ImageTk.PhotoImage(Image.open(ImagePath).resize((600, 500), Image.ANTIALIAS)) + canv.create_image(0, 0, anchor="nw", image=self.img) + + labelFont = tkFont.Font(family="Arial", size=40, weight="bold") + canv.create_text((600 // 2), (500 // 2) - 50, fill="white", text="total score : " + str(correct_count)+ "/15", font=labelFont) + canv.create_text((600 // 2), (500 // 2) + 50, fill="white", text="Good Job!", font=labelFont) + + +if __name__ == "__main__": + #pygame.init() + #mySound = pygame.mixer.Sound("SpeedGameBgm.mp3") + #mySound.play(-1) + pass_count = 3 + problem_count = 15 + correct_count = 0 + answer = 0 + country_img = 0 + pass_window = 0 + + df = pd.read_excel("./CountryCodeData.xlsx", index_col=0, names=["code", "country"]) + print(df["country"]["KR"]) + + app = SampleApp() + app.title("Speed Game") + + app.geometry('600x500+100+100') + app.mainloop() diff --git a/projects/Speed_Game/macOS/wrong.png b/projects/Speed_Game/macOS/wrong.png new file mode 100644 index 000000000..ac6f1bc3d Binary files /dev/null and b/projects/Speed_Game/macOS/wrong.png differ diff --git a/projects/Speed_Game/requirements.txt b/projects/Speed_Game/requirements.txt new file mode 100644 index 000000000..7bef0f86f --- /dev/null +++ b/projects/Speed_Game/requirements.txt @@ -0,0 +1,8 @@ +et-xmlfile==1.1.0 +numpy==1.21.4 +openpyxl==3.0.9 +pandas==1.3.4 +Pillow==8.4.0 +python-dateutil==2.8.2 +pytz==2021.3 +six==1.16.0 diff --git a/projects/Speed_Game/windows/.DS_Store b/projects/Speed_Game/windows/.DS_Store new file mode 100644 index 000000000..789e1d55d Binary files /dev/null and b/projects/Speed_Game/windows/.DS_Store differ diff --git a/projects/Speed_Game/windows/CountryCodeData.xlsx b/projects/Speed_Game/windows/CountryCodeData.xlsx new file mode 100644 index 000000000..6f9f8b786 Binary files /dev/null and b/projects/Speed_Game/windows/CountryCodeData.xlsx differ diff --git a/projects/Speed_Game/windows/SpeedGameBgm.mp3 b/projects/Speed_Game/windows/SpeedGameBgm.mp3 new file mode 100644 index 000000000..1644ebaab Binary files /dev/null and b/projects/Speed_Game/windows/SpeedGameBgm.mp3 differ diff --git a/projects/Speed_Game/windows/correct.png b/projects/Speed_Game/windows/correct.png new file mode 100644 index 000000000..faf20d508 Binary files /dev/null and b/projects/Speed_Game/windows/correct.png differ diff --git a/projects/Speed_Game/windows/halloween.png b/projects/Speed_Game/windows/halloween.png new file mode 100644 index 000000000..8f395dd01 Binary files /dev/null and b/projects/Speed_Game/windows/halloween.png differ diff --git a/projects/Speed_Game/windows/images/.DS_Store b/projects/Speed_Game/windows/images/.DS_Store new file mode 100644 index 000000000..5008ddfcf Binary files /dev/null and b/projects/Speed_Game/windows/images/.DS_Store differ diff --git a/projects/Speed_Game/windows/images/ad 2.png b/projects/Speed_Game/windows/images/ad 2.png new file mode 100644 index 000000000..c0656421c Binary files /dev/null and b/projects/Speed_Game/windows/images/ad 2.png differ diff --git a/projects/Speed_Game/windows/images/ad.png b/projects/Speed_Game/windows/images/ad.png new file mode 100644 index 000000000..c0656421c Binary files /dev/null and b/projects/Speed_Game/windows/images/ad.png differ diff --git a/projects/Speed_Game/windows/images/ae 2.png b/projects/Speed_Game/windows/images/ae 2.png new file mode 100644 index 000000000..256597d6f Binary files /dev/null and b/projects/Speed_Game/windows/images/ae 2.png differ diff --git a/projects/Speed_Game/windows/images/ae.png b/projects/Speed_Game/windows/images/ae.png new file mode 100644 index 000000000..256597d6f Binary files /dev/null and b/projects/Speed_Game/windows/images/ae.png differ diff --git a/projects/Speed_Game/windows/images/af 2.png b/projects/Speed_Game/windows/images/af 2.png new file mode 100644 index 000000000..45586b8ad Binary files /dev/null and b/projects/Speed_Game/windows/images/af 2.png differ diff --git a/projects/Speed_Game/windows/images/af.png b/projects/Speed_Game/windows/images/af.png new file mode 100644 index 000000000..45586b8ad Binary files /dev/null and b/projects/Speed_Game/windows/images/af.png differ diff --git a/projects/Speed_Game/windows/images/ag 2.png b/projects/Speed_Game/windows/images/ag 2.png new file mode 100644 index 000000000..0a9a562bf Binary files /dev/null and b/projects/Speed_Game/windows/images/ag 2.png differ diff --git a/projects/Speed_Game/windows/images/ag.png b/projects/Speed_Game/windows/images/ag.png new file mode 100644 index 000000000..0a9a562bf Binary files /dev/null and b/projects/Speed_Game/windows/images/ag.png differ diff --git a/projects/Speed_Game/windows/images/ai 2.png b/projects/Speed_Game/windows/images/ai 2.png new file mode 100644 index 000000000..3af01534b Binary files /dev/null and b/projects/Speed_Game/windows/images/ai 2.png differ diff --git a/projects/Speed_Game/windows/images/ai.png b/projects/Speed_Game/windows/images/ai.png new file mode 100644 index 000000000..3af01534b Binary files /dev/null and b/projects/Speed_Game/windows/images/ai.png differ diff --git a/projects/Speed_Game/windows/images/al 2.png b/projects/Speed_Game/windows/images/al 2.png new file mode 100644 index 000000000..11b394875 Binary files /dev/null and b/projects/Speed_Game/windows/images/al 2.png differ diff --git a/projects/Speed_Game/windows/images/al.png b/projects/Speed_Game/windows/images/al.png new file mode 100644 index 000000000..11b394875 Binary files /dev/null and b/projects/Speed_Game/windows/images/al.png differ diff --git a/projects/Speed_Game/windows/images/am 2.png b/projects/Speed_Game/windows/images/am 2.png new file mode 100644 index 000000000..5dca3170c Binary files /dev/null and b/projects/Speed_Game/windows/images/am 2.png differ diff --git a/projects/Speed_Game/windows/images/am.png b/projects/Speed_Game/windows/images/am.png new file mode 100644 index 000000000..5dca3170c Binary files /dev/null and b/projects/Speed_Game/windows/images/am.png differ diff --git a/projects/Speed_Game/windows/images/ao 2.png b/projects/Speed_Game/windows/images/ao 2.png new file mode 100644 index 000000000..97c970700 Binary files /dev/null and b/projects/Speed_Game/windows/images/ao 2.png differ diff --git a/projects/Speed_Game/windows/images/ao.png b/projects/Speed_Game/windows/images/ao.png new file mode 100644 index 000000000..97c970700 Binary files /dev/null and b/projects/Speed_Game/windows/images/ao.png differ diff --git a/projects/Speed_Game/windows/images/aq 2.png b/projects/Speed_Game/windows/images/aq 2.png new file mode 100644 index 000000000..b08f70681 Binary files /dev/null and b/projects/Speed_Game/windows/images/aq 2.png differ diff --git a/projects/Speed_Game/windows/images/aq.png b/projects/Speed_Game/windows/images/aq.png new file mode 100644 index 000000000..b08f70681 Binary files /dev/null and b/projects/Speed_Game/windows/images/aq.png differ diff --git a/projects/Speed_Game/windows/images/ar 2.png b/projects/Speed_Game/windows/images/ar 2.png new file mode 100644 index 000000000..558cb97a3 Binary files /dev/null and b/projects/Speed_Game/windows/images/ar 2.png differ diff --git a/projects/Speed_Game/windows/images/ar.png b/projects/Speed_Game/windows/images/ar.png new file mode 100644 index 000000000..558cb97a3 Binary files /dev/null and b/projects/Speed_Game/windows/images/ar.png differ diff --git a/projects/Speed_Game/windows/images/as 2.png b/projects/Speed_Game/windows/images/as 2.png new file mode 100644 index 000000000..2b8a82d79 Binary files /dev/null and b/projects/Speed_Game/windows/images/as 2.png differ diff --git a/projects/Speed_Game/windows/images/as.png b/projects/Speed_Game/windows/images/as.png new file mode 100644 index 000000000..2b8a82d79 Binary files /dev/null and b/projects/Speed_Game/windows/images/as.png differ diff --git a/projects/Speed_Game/windows/images/at 2.png b/projects/Speed_Game/windows/images/at 2.png new file mode 100644 index 000000000..60a7c7b32 Binary files /dev/null and b/projects/Speed_Game/windows/images/at 2.png differ diff --git a/projects/Speed_Game/windows/images/at.png b/projects/Speed_Game/windows/images/at.png new file mode 100644 index 000000000..60a7c7b32 Binary files /dev/null and b/projects/Speed_Game/windows/images/at.png differ diff --git a/projects/Speed_Game/windows/images/au 2.png b/projects/Speed_Game/windows/images/au 2.png new file mode 100644 index 000000000..b40a2963c Binary files /dev/null and b/projects/Speed_Game/windows/images/au 2.png differ diff --git a/projects/Speed_Game/windows/images/au.png b/projects/Speed_Game/windows/images/au.png new file mode 100644 index 000000000..b40a2963c Binary files /dev/null and b/projects/Speed_Game/windows/images/au.png differ diff --git a/projects/Speed_Game/windows/images/aw 2.png b/projects/Speed_Game/windows/images/aw 2.png new file mode 100644 index 000000000..05a152767 Binary files /dev/null and b/projects/Speed_Game/windows/images/aw 2.png differ diff --git a/projects/Speed_Game/windows/images/aw.png b/projects/Speed_Game/windows/images/aw.png new file mode 100644 index 000000000..05a152767 Binary files /dev/null and b/projects/Speed_Game/windows/images/aw.png differ diff --git a/projects/Speed_Game/windows/images/ax 2.png b/projects/Speed_Game/windows/images/ax 2.png new file mode 100644 index 000000000..7b0887a97 Binary files /dev/null and b/projects/Speed_Game/windows/images/ax 2.png differ diff --git a/projects/Speed_Game/windows/images/ax.png b/projects/Speed_Game/windows/images/ax.png new file mode 100644 index 000000000..7b0887a97 Binary files /dev/null and b/projects/Speed_Game/windows/images/ax.png differ diff --git a/projects/Speed_Game/windows/images/az 2.png b/projects/Speed_Game/windows/images/az 2.png new file mode 100644 index 000000000..ca8a381e3 Binary files /dev/null and b/projects/Speed_Game/windows/images/az 2.png differ diff --git a/projects/Speed_Game/windows/images/az.png b/projects/Speed_Game/windows/images/az.png new file mode 100644 index 000000000..ca8a381e3 Binary files /dev/null and b/projects/Speed_Game/windows/images/az.png differ diff --git a/projects/Speed_Game/windows/images/ba 2.png b/projects/Speed_Game/windows/images/ba 2.png new file mode 100644 index 000000000..58968e4da Binary files /dev/null and b/projects/Speed_Game/windows/images/ba 2.png differ diff --git a/projects/Speed_Game/windows/images/ba.png b/projects/Speed_Game/windows/images/ba.png new file mode 100644 index 000000000..58968e4da Binary files /dev/null and b/projects/Speed_Game/windows/images/ba.png differ diff --git a/projects/Speed_Game/windows/images/bb 2.png b/projects/Speed_Game/windows/images/bb 2.png new file mode 100644 index 000000000..6053834fc Binary files /dev/null and b/projects/Speed_Game/windows/images/bb 2.png differ diff --git a/projects/Speed_Game/windows/images/bb.png b/projects/Speed_Game/windows/images/bb.png new file mode 100644 index 000000000..6053834fc Binary files /dev/null and b/projects/Speed_Game/windows/images/bb.png differ diff --git a/projects/Speed_Game/windows/images/bd 2.png b/projects/Speed_Game/windows/images/bd 2.png new file mode 100644 index 000000000..fc18a2e1a Binary files /dev/null and b/projects/Speed_Game/windows/images/bd 2.png differ diff --git a/projects/Speed_Game/windows/images/bd.png b/projects/Speed_Game/windows/images/bd.png new file mode 100644 index 000000000..fc18a2e1a Binary files /dev/null and b/projects/Speed_Game/windows/images/bd.png differ diff --git a/projects/Speed_Game/windows/images/be 2.png b/projects/Speed_Game/windows/images/be 2.png new file mode 100644 index 000000000..c95afa677 Binary files /dev/null and b/projects/Speed_Game/windows/images/be 2.png differ diff --git a/projects/Speed_Game/windows/images/be.png b/projects/Speed_Game/windows/images/be.png new file mode 100644 index 000000000..c95afa677 Binary files /dev/null and b/projects/Speed_Game/windows/images/be.png differ diff --git a/projects/Speed_Game/windows/images/bf 2.png b/projects/Speed_Game/windows/images/bf 2.png new file mode 100644 index 000000000..669d53fe8 Binary files /dev/null and b/projects/Speed_Game/windows/images/bf 2.png differ diff --git a/projects/Speed_Game/windows/images/bf.png b/projects/Speed_Game/windows/images/bf.png new file mode 100644 index 000000000..669d53fe8 Binary files /dev/null and b/projects/Speed_Game/windows/images/bf.png differ diff --git a/projects/Speed_Game/windows/images/bg 2.png b/projects/Speed_Game/windows/images/bg 2.png new file mode 100644 index 000000000..88bbcaebd Binary files /dev/null and b/projects/Speed_Game/windows/images/bg 2.png differ diff --git a/projects/Speed_Game/windows/images/bg.png b/projects/Speed_Game/windows/images/bg.png new file mode 100644 index 000000000..88bbcaebd Binary files /dev/null and b/projects/Speed_Game/windows/images/bg.png differ diff --git a/projects/Speed_Game/windows/images/bh 2.png b/projects/Speed_Game/windows/images/bh 2.png new file mode 100644 index 000000000..3fb7de48b Binary files /dev/null and b/projects/Speed_Game/windows/images/bh 2.png differ diff --git a/projects/Speed_Game/windows/images/bh.png b/projects/Speed_Game/windows/images/bh.png new file mode 100644 index 000000000..3fb7de48b Binary files /dev/null and b/projects/Speed_Game/windows/images/bh.png differ diff --git a/projects/Speed_Game/windows/images/bi 2.png b/projects/Speed_Game/windows/images/bi 2.png new file mode 100644 index 000000000..9e83202d7 Binary files /dev/null and b/projects/Speed_Game/windows/images/bi 2.png differ diff --git a/projects/Speed_Game/windows/images/bi.png b/projects/Speed_Game/windows/images/bi.png new file mode 100644 index 000000000..9e83202d7 Binary files /dev/null and b/projects/Speed_Game/windows/images/bi.png differ diff --git a/projects/Speed_Game/windows/images/bj 2.png b/projects/Speed_Game/windows/images/bj 2.png new file mode 100644 index 000000000..7761839bf Binary files /dev/null and b/projects/Speed_Game/windows/images/bj 2.png differ diff --git a/projects/Speed_Game/windows/images/bj.png b/projects/Speed_Game/windows/images/bj.png new file mode 100644 index 000000000..7761839bf Binary files /dev/null and b/projects/Speed_Game/windows/images/bj.png differ diff --git a/projects/Speed_Game/windows/images/bl 2.png b/projects/Speed_Game/windows/images/bl 2.png new file mode 100644 index 000000000..46737bb57 Binary files /dev/null and b/projects/Speed_Game/windows/images/bl 2.png differ diff --git a/projects/Speed_Game/windows/images/bl.png b/projects/Speed_Game/windows/images/bl.png new file mode 100644 index 000000000..46737bb57 Binary files /dev/null and b/projects/Speed_Game/windows/images/bl.png differ diff --git a/projects/Speed_Game/windows/images/bm 2.png b/projects/Speed_Game/windows/images/bm 2.png new file mode 100644 index 000000000..48793b50e Binary files /dev/null and b/projects/Speed_Game/windows/images/bm 2.png differ diff --git a/projects/Speed_Game/windows/images/bm.png b/projects/Speed_Game/windows/images/bm.png new file mode 100644 index 000000000..48793b50e Binary files /dev/null and b/projects/Speed_Game/windows/images/bm.png differ diff --git a/projects/Speed_Game/windows/images/bn 2.png b/projects/Speed_Game/windows/images/bn 2.png new file mode 100644 index 000000000..1cd991cca Binary files /dev/null and b/projects/Speed_Game/windows/images/bn 2.png differ diff --git a/projects/Speed_Game/windows/images/bn.png b/projects/Speed_Game/windows/images/bn.png new file mode 100644 index 000000000..1cd991cca Binary files /dev/null and b/projects/Speed_Game/windows/images/bn.png differ diff --git a/projects/Speed_Game/windows/images/bo 2.png b/projects/Speed_Game/windows/images/bo 2.png new file mode 100644 index 000000000..0a5b8025c Binary files /dev/null and b/projects/Speed_Game/windows/images/bo 2.png differ diff --git a/projects/Speed_Game/windows/images/bo.png b/projects/Speed_Game/windows/images/bo.png new file mode 100644 index 000000000..0a5b8025c Binary files /dev/null and b/projects/Speed_Game/windows/images/bo.png differ diff --git a/projects/Speed_Game/windows/images/bq 2.png b/projects/Speed_Game/windows/images/bq 2.png new file mode 100644 index 000000000..957ab7a99 Binary files /dev/null and b/projects/Speed_Game/windows/images/bq 2.png differ diff --git a/projects/Speed_Game/windows/images/bq.png b/projects/Speed_Game/windows/images/bq.png new file mode 100644 index 000000000..957ab7a99 Binary files /dev/null and b/projects/Speed_Game/windows/images/bq.png differ diff --git a/projects/Speed_Game/windows/images/br 2.png b/projects/Speed_Game/windows/images/br 2.png new file mode 100644 index 000000000..1dba51c07 Binary files /dev/null and b/projects/Speed_Game/windows/images/br 2.png differ diff --git a/projects/Speed_Game/windows/images/br.png b/projects/Speed_Game/windows/images/br.png new file mode 100644 index 000000000..1dba51c07 Binary files /dev/null and b/projects/Speed_Game/windows/images/br.png differ diff --git a/projects/Speed_Game/windows/images/bs 2.png b/projects/Speed_Game/windows/images/bs 2.png new file mode 100644 index 000000000..36d87627e Binary files /dev/null and b/projects/Speed_Game/windows/images/bs 2.png differ diff --git a/projects/Speed_Game/windows/images/bs.png b/projects/Speed_Game/windows/images/bs.png new file mode 100644 index 000000000..36d87627e Binary files /dev/null and b/projects/Speed_Game/windows/images/bs.png differ diff --git a/projects/Speed_Game/windows/images/bt 2.png b/projects/Speed_Game/windows/images/bt 2.png new file mode 100644 index 000000000..9590b30c1 Binary files /dev/null and b/projects/Speed_Game/windows/images/bt 2.png differ diff --git a/projects/Speed_Game/windows/images/bt.png b/projects/Speed_Game/windows/images/bt.png new file mode 100644 index 000000000..9590b30c1 Binary files /dev/null and b/projects/Speed_Game/windows/images/bt.png differ diff --git a/projects/Speed_Game/windows/images/bv 2.png b/projects/Speed_Game/windows/images/bv 2.png new file mode 100644 index 000000000..db3d73415 Binary files /dev/null and b/projects/Speed_Game/windows/images/bv 2.png differ diff --git a/projects/Speed_Game/windows/images/bv.png b/projects/Speed_Game/windows/images/bv.png new file mode 100644 index 000000000..db3d73415 Binary files /dev/null and b/projects/Speed_Game/windows/images/bv.png differ diff --git a/projects/Speed_Game/windows/images/bw 2.png b/projects/Speed_Game/windows/images/bw 2.png new file mode 100644 index 000000000..3e59fd3c0 Binary files /dev/null and b/projects/Speed_Game/windows/images/bw 2.png differ diff --git a/projects/Speed_Game/windows/images/bw.png b/projects/Speed_Game/windows/images/bw.png new file mode 100644 index 000000000..3e59fd3c0 Binary files /dev/null and b/projects/Speed_Game/windows/images/bw.png differ diff --git a/projects/Speed_Game/windows/images/by 2.png b/projects/Speed_Game/windows/images/by 2.png new file mode 100644 index 000000000..e2cf5ee10 Binary files /dev/null and b/projects/Speed_Game/windows/images/by 2.png differ diff --git a/projects/Speed_Game/windows/images/by.png b/projects/Speed_Game/windows/images/by.png new file mode 100644 index 000000000..e2cf5ee10 Binary files /dev/null and b/projects/Speed_Game/windows/images/by.png differ diff --git a/projects/Speed_Game/windows/images/bz 2.png b/projects/Speed_Game/windows/images/bz 2.png new file mode 100644 index 000000000..2f6992999 Binary files /dev/null and b/projects/Speed_Game/windows/images/bz 2.png differ diff --git a/projects/Speed_Game/windows/images/bz.png b/projects/Speed_Game/windows/images/bz.png new file mode 100644 index 000000000..2f6992999 Binary files /dev/null and b/projects/Speed_Game/windows/images/bz.png differ diff --git a/projects/Speed_Game/windows/images/ca 2.png b/projects/Speed_Game/windows/images/ca 2.png new file mode 100644 index 000000000..e0c6b6a72 Binary files /dev/null and b/projects/Speed_Game/windows/images/ca 2.png differ diff --git a/projects/Speed_Game/windows/images/ca.png b/projects/Speed_Game/windows/images/ca.png new file mode 100644 index 000000000..e0c6b6a72 Binary files /dev/null and b/projects/Speed_Game/windows/images/ca.png differ diff --git a/projects/Speed_Game/windows/images/cc 2.png b/projects/Speed_Game/windows/images/cc 2.png new file mode 100644 index 000000000..72f7f82c0 Binary files /dev/null and b/projects/Speed_Game/windows/images/cc 2.png differ diff --git a/projects/Speed_Game/windows/images/cc.png b/projects/Speed_Game/windows/images/cc.png new file mode 100644 index 000000000..72f7f82c0 Binary files /dev/null and b/projects/Speed_Game/windows/images/cc.png differ diff --git a/projects/Speed_Game/windows/images/cd 2.png b/projects/Speed_Game/windows/images/cd 2.png new file mode 100644 index 000000000..d91e8b269 Binary files /dev/null and b/projects/Speed_Game/windows/images/cd 2.png differ diff --git a/projects/Speed_Game/windows/images/cd.png b/projects/Speed_Game/windows/images/cd.png new file mode 100644 index 000000000..d91e8b269 Binary files /dev/null and b/projects/Speed_Game/windows/images/cd.png differ diff --git a/projects/Speed_Game/windows/images/cf 2.png b/projects/Speed_Game/windows/images/cf 2.png new file mode 100644 index 000000000..3679edc15 Binary files /dev/null and b/projects/Speed_Game/windows/images/cf 2.png differ diff --git a/projects/Speed_Game/windows/images/cf.png b/projects/Speed_Game/windows/images/cf.png new file mode 100644 index 000000000..3679edc15 Binary files /dev/null and b/projects/Speed_Game/windows/images/cf.png differ diff --git a/projects/Speed_Game/windows/images/cg 2.png b/projects/Speed_Game/windows/images/cg 2.png new file mode 100644 index 000000000..8cf4d97a5 Binary files /dev/null and b/projects/Speed_Game/windows/images/cg 2.png differ diff --git a/projects/Speed_Game/windows/images/cg.png b/projects/Speed_Game/windows/images/cg.png new file mode 100644 index 000000000..8cf4d97a5 Binary files /dev/null and b/projects/Speed_Game/windows/images/cg.png differ diff --git a/projects/Speed_Game/windows/images/ch 2.png b/projects/Speed_Game/windows/images/ch 2.png new file mode 100644 index 000000000..3358a3322 Binary files /dev/null and b/projects/Speed_Game/windows/images/ch 2.png differ diff --git a/projects/Speed_Game/windows/images/ch.png b/projects/Speed_Game/windows/images/ch.png new file mode 100644 index 000000000..3358a3322 Binary files /dev/null and b/projects/Speed_Game/windows/images/ch.png differ diff --git a/projects/Speed_Game/windows/images/ci 2.png b/projects/Speed_Game/windows/images/ci 2.png new file mode 100644 index 000000000..7f16b10b5 Binary files /dev/null and b/projects/Speed_Game/windows/images/ci 2.png differ diff --git a/projects/Speed_Game/windows/images/ci.png b/projects/Speed_Game/windows/images/ci.png new file mode 100644 index 000000000..7f16b10b5 Binary files /dev/null and b/projects/Speed_Game/windows/images/ci.png differ diff --git a/projects/Speed_Game/windows/images/ck 2.png b/projects/Speed_Game/windows/images/ck 2.png new file mode 100644 index 000000000..5a1f5725b Binary files /dev/null and b/projects/Speed_Game/windows/images/ck 2.png differ diff --git a/projects/Speed_Game/windows/images/ck.png b/projects/Speed_Game/windows/images/ck.png new file mode 100644 index 000000000..5a1f5725b Binary files /dev/null and b/projects/Speed_Game/windows/images/ck.png differ diff --git a/projects/Speed_Game/windows/images/cl 2.png b/projects/Speed_Game/windows/images/cl 2.png new file mode 100644 index 000000000..2e1f15990 Binary files /dev/null and b/projects/Speed_Game/windows/images/cl 2.png differ diff --git a/projects/Speed_Game/windows/images/cl.png b/projects/Speed_Game/windows/images/cl.png new file mode 100644 index 000000000..2e1f15990 Binary files /dev/null and b/projects/Speed_Game/windows/images/cl.png differ diff --git a/projects/Speed_Game/windows/images/cm 2.png b/projects/Speed_Game/windows/images/cm 2.png new file mode 100644 index 000000000..46f2ba974 Binary files /dev/null and b/projects/Speed_Game/windows/images/cm 2.png differ diff --git a/projects/Speed_Game/windows/images/cm.png b/projects/Speed_Game/windows/images/cm.png new file mode 100644 index 000000000..46f2ba974 Binary files /dev/null and b/projects/Speed_Game/windows/images/cm.png differ diff --git a/projects/Speed_Game/windows/images/cn 2.png b/projects/Speed_Game/windows/images/cn 2.png new file mode 100644 index 000000000..649a67e7f Binary files /dev/null and b/projects/Speed_Game/windows/images/cn 2.png differ diff --git a/projects/Speed_Game/windows/images/cn.png b/projects/Speed_Game/windows/images/cn.png new file mode 100644 index 000000000..649a67e7f Binary files /dev/null and b/projects/Speed_Game/windows/images/cn.png differ diff --git a/projects/Speed_Game/windows/images/co 2.png b/projects/Speed_Game/windows/images/co 2.png new file mode 100644 index 000000000..09c669012 Binary files /dev/null and b/projects/Speed_Game/windows/images/co 2.png differ diff --git a/projects/Speed_Game/windows/images/co.png b/projects/Speed_Game/windows/images/co.png new file mode 100644 index 000000000..09c669012 Binary files /dev/null and b/projects/Speed_Game/windows/images/co.png differ diff --git a/projects/Speed_Game/windows/images/cr 2.png b/projects/Speed_Game/windows/images/cr 2.png new file mode 100644 index 000000000..45d4f2add Binary files /dev/null and b/projects/Speed_Game/windows/images/cr 2.png differ diff --git a/projects/Speed_Game/windows/images/cr.png b/projects/Speed_Game/windows/images/cr.png new file mode 100644 index 000000000..45d4f2add Binary files /dev/null and b/projects/Speed_Game/windows/images/cr.png differ diff --git a/projects/Speed_Game/windows/images/cu 2.png b/projects/Speed_Game/windows/images/cu 2.png new file mode 100644 index 000000000..911ce8f48 Binary files /dev/null and b/projects/Speed_Game/windows/images/cu 2.png differ diff --git a/projects/Speed_Game/windows/images/cu.png b/projects/Speed_Game/windows/images/cu.png new file mode 100644 index 000000000..911ce8f48 Binary files /dev/null and b/projects/Speed_Game/windows/images/cu.png differ diff --git a/projects/Speed_Game/windows/images/cv 2.png b/projects/Speed_Game/windows/images/cv 2.png new file mode 100644 index 000000000..91bd31794 Binary files /dev/null and b/projects/Speed_Game/windows/images/cv 2.png differ diff --git a/projects/Speed_Game/windows/images/cv.png b/projects/Speed_Game/windows/images/cv.png new file mode 100644 index 000000000..91bd31794 Binary files /dev/null and b/projects/Speed_Game/windows/images/cv.png differ diff --git a/projects/Speed_Game/windows/images/cw 2.png b/projects/Speed_Game/windows/images/cw 2.png new file mode 100644 index 000000000..48b1830b3 Binary files /dev/null and b/projects/Speed_Game/windows/images/cw 2.png differ diff --git a/projects/Speed_Game/windows/images/cw.png b/projects/Speed_Game/windows/images/cw.png new file mode 100644 index 000000000..48b1830b3 Binary files /dev/null and b/projects/Speed_Game/windows/images/cw.png differ diff --git a/projects/Speed_Game/windows/images/cx 2.png b/projects/Speed_Game/windows/images/cx 2.png new file mode 100644 index 000000000..6e792ad9f Binary files /dev/null and b/projects/Speed_Game/windows/images/cx 2.png differ diff --git a/projects/Speed_Game/windows/images/cx.png b/projects/Speed_Game/windows/images/cx.png new file mode 100644 index 000000000..6e792ad9f Binary files /dev/null and b/projects/Speed_Game/windows/images/cx.png differ diff --git a/projects/Speed_Game/windows/images/cy 2.png b/projects/Speed_Game/windows/images/cy 2.png new file mode 100644 index 000000000..04415b396 Binary files /dev/null and b/projects/Speed_Game/windows/images/cy 2.png differ diff --git a/projects/Speed_Game/windows/images/cy.png b/projects/Speed_Game/windows/images/cy.png new file mode 100644 index 000000000..04415b396 Binary files /dev/null and b/projects/Speed_Game/windows/images/cy.png differ diff --git a/projects/Speed_Game/windows/images/cz 2.png b/projects/Speed_Game/windows/images/cz 2.png new file mode 100644 index 000000000..52b89d7bc Binary files /dev/null and b/projects/Speed_Game/windows/images/cz 2.png differ diff --git a/projects/Speed_Game/windows/images/cz.png b/projects/Speed_Game/windows/images/cz.png new file mode 100644 index 000000000..52b89d7bc Binary files /dev/null and b/projects/Speed_Game/windows/images/cz.png differ diff --git a/projects/Speed_Game/windows/images/de 2.png b/projects/Speed_Game/windows/images/de 2.png new file mode 100644 index 000000000..99ccd352d Binary files /dev/null and b/projects/Speed_Game/windows/images/de 2.png differ diff --git a/projects/Speed_Game/windows/images/de.png b/projects/Speed_Game/windows/images/de.png new file mode 100644 index 000000000..99ccd352d Binary files /dev/null and b/projects/Speed_Game/windows/images/de.png differ diff --git a/projects/Speed_Game/windows/images/dj 2.png b/projects/Speed_Game/windows/images/dj 2.png new file mode 100644 index 000000000..1b5f04d52 Binary files /dev/null and b/projects/Speed_Game/windows/images/dj 2.png differ diff --git a/projects/Speed_Game/windows/images/dj.png b/projects/Speed_Game/windows/images/dj.png new file mode 100644 index 000000000..1b5f04d52 Binary files /dev/null and b/projects/Speed_Game/windows/images/dj.png differ diff --git a/projects/Speed_Game/windows/images/dk 2.png b/projects/Speed_Game/windows/images/dk 2.png new file mode 100644 index 000000000..07b090211 Binary files /dev/null and b/projects/Speed_Game/windows/images/dk 2.png differ diff --git a/projects/Speed_Game/windows/images/dk.png b/projects/Speed_Game/windows/images/dk.png new file mode 100644 index 000000000..07b090211 Binary files /dev/null and b/projects/Speed_Game/windows/images/dk.png differ diff --git a/projects/Speed_Game/windows/images/dm 2.png b/projects/Speed_Game/windows/images/dm 2.png new file mode 100644 index 000000000..53eeb96ea Binary files /dev/null and b/projects/Speed_Game/windows/images/dm 2.png differ diff --git a/projects/Speed_Game/windows/images/dm.png b/projects/Speed_Game/windows/images/dm.png new file mode 100644 index 000000000..53eeb96ea Binary files /dev/null and b/projects/Speed_Game/windows/images/dm.png differ diff --git a/projects/Speed_Game/windows/images/do 2.png b/projects/Speed_Game/windows/images/do 2.png new file mode 100644 index 000000000..d57e3a82a Binary files /dev/null and b/projects/Speed_Game/windows/images/do 2.png differ diff --git a/projects/Speed_Game/windows/images/do.png b/projects/Speed_Game/windows/images/do.png new file mode 100644 index 000000000..d57e3a82a Binary files /dev/null and b/projects/Speed_Game/windows/images/do.png differ diff --git a/projects/Speed_Game/windows/images/dz 2.png b/projects/Speed_Game/windows/images/dz 2.png new file mode 100644 index 000000000..1a53178af Binary files /dev/null and b/projects/Speed_Game/windows/images/dz 2.png differ diff --git a/projects/Speed_Game/windows/images/dz.png b/projects/Speed_Game/windows/images/dz.png new file mode 100644 index 000000000..1a53178af Binary files /dev/null and b/projects/Speed_Game/windows/images/dz.png differ diff --git a/projects/Speed_Game/windows/images/ec 2.png b/projects/Speed_Game/windows/images/ec 2.png new file mode 100644 index 000000000..4ef8468c4 Binary files /dev/null and b/projects/Speed_Game/windows/images/ec 2.png differ diff --git a/projects/Speed_Game/windows/images/ec.png b/projects/Speed_Game/windows/images/ec.png new file mode 100644 index 000000000..4ef8468c4 Binary files /dev/null and b/projects/Speed_Game/windows/images/ec.png differ diff --git a/projects/Speed_Game/windows/images/ee 2.png b/projects/Speed_Game/windows/images/ee 2.png new file mode 100644 index 000000000..94cc351ee Binary files /dev/null and b/projects/Speed_Game/windows/images/ee 2.png differ diff --git a/projects/Speed_Game/windows/images/ee.png b/projects/Speed_Game/windows/images/ee.png new file mode 100644 index 000000000..94cc351ee Binary files /dev/null and b/projects/Speed_Game/windows/images/ee.png differ diff --git a/projects/Speed_Game/windows/images/eg 2.png b/projects/Speed_Game/windows/images/eg 2.png new file mode 100644 index 000000000..a50c693f3 Binary files /dev/null and b/projects/Speed_Game/windows/images/eg 2.png differ diff --git a/projects/Speed_Game/windows/images/eg.png b/projects/Speed_Game/windows/images/eg.png new file mode 100644 index 000000000..a50c693f3 Binary files /dev/null and b/projects/Speed_Game/windows/images/eg.png differ diff --git a/projects/Speed_Game/windows/images/eh 2.png b/projects/Speed_Game/windows/images/eh 2.png new file mode 100644 index 000000000..466b34430 Binary files /dev/null and b/projects/Speed_Game/windows/images/eh 2.png differ diff --git a/projects/Speed_Game/windows/images/eh.png b/projects/Speed_Game/windows/images/eh.png new file mode 100644 index 000000000..466b34430 Binary files /dev/null and b/projects/Speed_Game/windows/images/eh.png differ diff --git a/projects/Speed_Game/windows/images/er 2.png b/projects/Speed_Game/windows/images/er 2.png new file mode 100644 index 000000000..8dd05a1ed Binary files /dev/null and b/projects/Speed_Game/windows/images/er 2.png differ diff --git a/projects/Speed_Game/windows/images/er.png b/projects/Speed_Game/windows/images/er.png new file mode 100644 index 000000000..8dd05a1ed Binary files /dev/null and b/projects/Speed_Game/windows/images/er.png differ diff --git a/projects/Speed_Game/windows/images/es 2.png b/projects/Speed_Game/windows/images/es 2.png new file mode 100644 index 000000000..80693e710 Binary files /dev/null and b/projects/Speed_Game/windows/images/es 2.png differ diff --git a/projects/Speed_Game/windows/images/es.png b/projects/Speed_Game/windows/images/es.png new file mode 100644 index 000000000..80693e710 Binary files /dev/null and b/projects/Speed_Game/windows/images/es.png differ diff --git a/projects/Speed_Game/windows/images/et 2.png b/projects/Speed_Game/windows/images/et 2.png new file mode 100644 index 000000000..2b585fcff Binary files /dev/null and b/projects/Speed_Game/windows/images/et 2.png differ diff --git a/projects/Speed_Game/windows/images/et.png b/projects/Speed_Game/windows/images/et.png new file mode 100644 index 000000000..2b585fcff Binary files /dev/null and b/projects/Speed_Game/windows/images/et.png differ diff --git a/projects/Speed_Game/windows/images/fi 2.png b/projects/Speed_Game/windows/images/fi 2.png new file mode 100644 index 000000000..f0739d20b Binary files /dev/null and b/projects/Speed_Game/windows/images/fi 2.png differ diff --git a/projects/Speed_Game/windows/images/fi.png b/projects/Speed_Game/windows/images/fi.png new file mode 100644 index 000000000..f0739d20b Binary files /dev/null and b/projects/Speed_Game/windows/images/fi.png differ diff --git a/projects/Speed_Game/windows/images/fj 2.png b/projects/Speed_Game/windows/images/fj 2.png new file mode 100644 index 000000000..6b3425818 Binary files /dev/null and b/projects/Speed_Game/windows/images/fj 2.png differ diff --git a/projects/Speed_Game/windows/images/fj.png b/projects/Speed_Game/windows/images/fj.png new file mode 100644 index 000000000..6b3425818 Binary files /dev/null and b/projects/Speed_Game/windows/images/fj.png differ diff --git a/projects/Speed_Game/windows/images/fk 2.png b/projects/Speed_Game/windows/images/fk 2.png new file mode 100644 index 000000000..5094ab197 Binary files /dev/null and b/projects/Speed_Game/windows/images/fk 2.png differ diff --git a/projects/Speed_Game/windows/images/fk.png b/projects/Speed_Game/windows/images/fk.png new file mode 100644 index 000000000..5094ab197 Binary files /dev/null and b/projects/Speed_Game/windows/images/fk.png differ diff --git a/projects/Speed_Game/windows/images/fm 2.png b/projects/Speed_Game/windows/images/fm 2.png new file mode 100644 index 000000000..41e911a98 Binary files /dev/null and b/projects/Speed_Game/windows/images/fm 2.png differ diff --git a/projects/Speed_Game/windows/images/fm.png b/projects/Speed_Game/windows/images/fm.png new file mode 100644 index 000000000..41e911a98 Binary files /dev/null and b/projects/Speed_Game/windows/images/fm.png differ diff --git a/projects/Speed_Game/windows/images/fo 2.png b/projects/Speed_Game/windows/images/fo 2.png new file mode 100644 index 000000000..48eff3417 Binary files /dev/null and b/projects/Speed_Game/windows/images/fo 2.png differ diff --git a/projects/Speed_Game/windows/images/fo.png b/projects/Speed_Game/windows/images/fo.png new file mode 100644 index 000000000..48eff3417 Binary files /dev/null and b/projects/Speed_Game/windows/images/fo.png differ diff --git a/projects/Speed_Game/windows/images/fr 2.png b/projects/Speed_Game/windows/images/fr 2.png new file mode 100644 index 000000000..d5f30b427 Binary files /dev/null and b/projects/Speed_Game/windows/images/fr 2.png differ diff --git a/projects/Speed_Game/windows/images/fr.png b/projects/Speed_Game/windows/images/fr.png new file mode 100644 index 000000000..d5f30b427 Binary files /dev/null and b/projects/Speed_Game/windows/images/fr.png differ diff --git a/projects/Speed_Game/windows/images/ga 2.png b/projects/Speed_Game/windows/images/ga 2.png new file mode 100644 index 000000000..0e8ed5218 Binary files /dev/null and b/projects/Speed_Game/windows/images/ga 2.png differ diff --git a/projects/Speed_Game/windows/images/ga.png b/projects/Speed_Game/windows/images/ga.png new file mode 100644 index 000000000..0e8ed5218 Binary files /dev/null and b/projects/Speed_Game/windows/images/ga.png differ diff --git a/projects/Speed_Game/windows/images/gb 2.png b/projects/Speed_Game/windows/images/gb 2.png new file mode 100644 index 000000000..3188a24c2 Binary files /dev/null and b/projects/Speed_Game/windows/images/gb 2.png differ diff --git a/projects/Speed_Game/windows/images/gb-eng 2.png b/projects/Speed_Game/windows/images/gb-eng 2.png new file mode 100644 index 000000000..f6aeda130 Binary files /dev/null and b/projects/Speed_Game/windows/images/gb-eng 2.png differ diff --git a/projects/Speed_Game/windows/images/gb-eng.png b/projects/Speed_Game/windows/images/gb-eng.png new file mode 100644 index 000000000..f6aeda130 Binary files /dev/null and b/projects/Speed_Game/windows/images/gb-eng.png differ diff --git a/projects/Speed_Game/windows/images/gb-nir 2.png b/projects/Speed_Game/windows/images/gb-nir 2.png new file mode 100644 index 000000000..1de5843c6 Binary files /dev/null and b/projects/Speed_Game/windows/images/gb-nir 2.png differ diff --git a/projects/Speed_Game/windows/images/gb-nir.png b/projects/Speed_Game/windows/images/gb-nir.png new file mode 100644 index 000000000..1de5843c6 Binary files /dev/null and b/projects/Speed_Game/windows/images/gb-nir.png differ diff --git a/projects/Speed_Game/windows/images/gb-sct 2.png b/projects/Speed_Game/windows/images/gb-sct 2.png new file mode 100644 index 000000000..0cff8df3c Binary files /dev/null and b/projects/Speed_Game/windows/images/gb-sct 2.png differ diff --git a/projects/Speed_Game/windows/images/gb-sct.png b/projects/Speed_Game/windows/images/gb-sct.png new file mode 100644 index 000000000..0cff8df3c Binary files /dev/null and b/projects/Speed_Game/windows/images/gb-sct.png differ diff --git a/projects/Speed_Game/windows/images/gb-wls 2.png b/projects/Speed_Game/windows/images/gb-wls 2.png new file mode 100644 index 000000000..a1343ac46 Binary files /dev/null and b/projects/Speed_Game/windows/images/gb-wls 2.png differ diff --git a/projects/Speed_Game/windows/images/gb-wls.png b/projects/Speed_Game/windows/images/gb-wls.png new file mode 100644 index 000000000..a1343ac46 Binary files /dev/null and b/projects/Speed_Game/windows/images/gb-wls.png differ diff --git a/projects/Speed_Game/windows/images/gb.png b/projects/Speed_Game/windows/images/gb.png new file mode 100644 index 000000000..3188a24c2 Binary files /dev/null and b/projects/Speed_Game/windows/images/gb.png differ diff --git a/projects/Speed_Game/windows/images/gd 2.png b/projects/Speed_Game/windows/images/gd 2.png new file mode 100644 index 000000000..e96883363 Binary files /dev/null and b/projects/Speed_Game/windows/images/gd 2.png differ diff --git a/projects/Speed_Game/windows/images/gd.png b/projects/Speed_Game/windows/images/gd.png new file mode 100644 index 000000000..e96883363 Binary files /dev/null and b/projects/Speed_Game/windows/images/gd.png differ diff --git a/projects/Speed_Game/windows/images/ge 2.png b/projects/Speed_Game/windows/images/ge 2.png new file mode 100644 index 000000000..262ac5e09 Binary files /dev/null and b/projects/Speed_Game/windows/images/ge 2.png differ diff --git a/projects/Speed_Game/windows/images/ge.png b/projects/Speed_Game/windows/images/ge.png new file mode 100644 index 000000000..262ac5e09 Binary files /dev/null and b/projects/Speed_Game/windows/images/ge.png differ diff --git a/projects/Speed_Game/windows/images/gf 2.png b/projects/Speed_Game/windows/images/gf 2.png new file mode 100644 index 000000000..0dd8f9010 Binary files /dev/null and b/projects/Speed_Game/windows/images/gf 2.png differ diff --git a/projects/Speed_Game/windows/images/gf.png b/projects/Speed_Game/windows/images/gf.png new file mode 100644 index 000000000..0dd8f9010 Binary files /dev/null and b/projects/Speed_Game/windows/images/gf.png differ diff --git a/projects/Speed_Game/windows/images/gg 2.png b/projects/Speed_Game/windows/images/gg 2.png new file mode 100644 index 000000000..b2146712b Binary files /dev/null and b/projects/Speed_Game/windows/images/gg 2.png differ diff --git a/projects/Speed_Game/windows/images/gg.png b/projects/Speed_Game/windows/images/gg.png new file mode 100644 index 000000000..b2146712b Binary files /dev/null and b/projects/Speed_Game/windows/images/gg.png differ diff --git a/projects/Speed_Game/windows/images/gh 2.png b/projects/Speed_Game/windows/images/gh 2.png new file mode 100644 index 000000000..7fdf73af0 Binary files /dev/null and b/projects/Speed_Game/windows/images/gh 2.png differ diff --git a/projects/Speed_Game/windows/images/gh.png b/projects/Speed_Game/windows/images/gh.png new file mode 100644 index 000000000..7fdf73af0 Binary files /dev/null and b/projects/Speed_Game/windows/images/gh.png differ diff --git a/projects/Speed_Game/windows/images/gi 2.png b/projects/Speed_Game/windows/images/gi 2.png new file mode 100644 index 000000000..eb06888b0 Binary files /dev/null and b/projects/Speed_Game/windows/images/gi 2.png differ diff --git a/projects/Speed_Game/windows/images/gi.png b/projects/Speed_Game/windows/images/gi.png new file mode 100644 index 000000000..eb06888b0 Binary files /dev/null and b/projects/Speed_Game/windows/images/gi.png differ diff --git a/projects/Speed_Game/windows/images/gl 2.png b/projects/Speed_Game/windows/images/gl 2.png new file mode 100644 index 000000000..c9e75102b Binary files /dev/null and b/projects/Speed_Game/windows/images/gl 2.png differ diff --git a/projects/Speed_Game/windows/images/gl.png b/projects/Speed_Game/windows/images/gl.png new file mode 100644 index 000000000..c9e75102b Binary files /dev/null and b/projects/Speed_Game/windows/images/gl.png differ diff --git a/projects/Speed_Game/windows/images/gm 2.png b/projects/Speed_Game/windows/images/gm 2.png new file mode 100644 index 000000000..9b1008078 Binary files /dev/null and b/projects/Speed_Game/windows/images/gm 2.png differ diff --git a/projects/Speed_Game/windows/images/gm.png b/projects/Speed_Game/windows/images/gm.png new file mode 100644 index 000000000..9b1008078 Binary files /dev/null and b/projects/Speed_Game/windows/images/gm.png differ diff --git a/projects/Speed_Game/windows/images/gn 2.png b/projects/Speed_Game/windows/images/gn 2.png new file mode 100644 index 000000000..e54ecfeb5 Binary files /dev/null and b/projects/Speed_Game/windows/images/gn 2.png differ diff --git a/projects/Speed_Game/windows/images/gn.png b/projects/Speed_Game/windows/images/gn.png new file mode 100644 index 000000000..e54ecfeb5 Binary files /dev/null and b/projects/Speed_Game/windows/images/gn.png differ diff --git a/projects/Speed_Game/windows/images/gp 2.png b/projects/Speed_Game/windows/images/gp 2.png new file mode 100644 index 000000000..c2d8120f1 Binary files /dev/null and b/projects/Speed_Game/windows/images/gp 2.png differ diff --git a/projects/Speed_Game/windows/images/gp.png b/projects/Speed_Game/windows/images/gp.png new file mode 100644 index 000000000..c2d8120f1 Binary files /dev/null and b/projects/Speed_Game/windows/images/gp.png differ diff --git a/projects/Speed_Game/windows/images/gq 2.png b/projects/Speed_Game/windows/images/gq 2.png new file mode 100644 index 000000000..f8e8d7023 Binary files /dev/null and b/projects/Speed_Game/windows/images/gq 2.png differ diff --git a/projects/Speed_Game/windows/images/gq.png b/projects/Speed_Game/windows/images/gq.png new file mode 100644 index 000000000..f8e8d7023 Binary files /dev/null and b/projects/Speed_Game/windows/images/gq.png differ diff --git a/projects/Speed_Game/windows/images/gr 2.png b/projects/Speed_Game/windows/images/gr 2.png new file mode 100644 index 000000000..71690ad85 Binary files /dev/null and b/projects/Speed_Game/windows/images/gr 2.png differ diff --git a/projects/Speed_Game/windows/images/gr.png b/projects/Speed_Game/windows/images/gr.png new file mode 100644 index 000000000..71690ad85 Binary files /dev/null and b/projects/Speed_Game/windows/images/gr.png differ diff --git a/projects/Speed_Game/windows/images/gs 2.png b/projects/Speed_Game/windows/images/gs 2.png new file mode 100644 index 000000000..4e5e94550 Binary files /dev/null and b/projects/Speed_Game/windows/images/gs 2.png differ diff --git a/projects/Speed_Game/windows/images/gs.png b/projects/Speed_Game/windows/images/gs.png new file mode 100644 index 000000000..4e5e94550 Binary files /dev/null and b/projects/Speed_Game/windows/images/gs.png differ diff --git a/projects/Speed_Game/windows/images/gt 2.png b/projects/Speed_Game/windows/images/gt 2.png new file mode 100644 index 000000000..e99752148 Binary files /dev/null and b/projects/Speed_Game/windows/images/gt 2.png differ diff --git a/projects/Speed_Game/windows/images/gt.png b/projects/Speed_Game/windows/images/gt.png new file mode 100644 index 000000000..e99752148 Binary files /dev/null and b/projects/Speed_Game/windows/images/gt.png differ diff --git a/projects/Speed_Game/windows/images/gu 2.png b/projects/Speed_Game/windows/images/gu 2.png new file mode 100644 index 000000000..36cf14c37 Binary files /dev/null and b/projects/Speed_Game/windows/images/gu 2.png differ diff --git a/projects/Speed_Game/windows/images/gu.png b/projects/Speed_Game/windows/images/gu.png new file mode 100644 index 000000000..36cf14c37 Binary files /dev/null and b/projects/Speed_Game/windows/images/gu.png differ diff --git a/projects/Speed_Game/windows/images/gw 2.png b/projects/Speed_Game/windows/images/gw 2.png new file mode 100644 index 000000000..2a5f1a0f2 Binary files /dev/null and b/projects/Speed_Game/windows/images/gw 2.png differ diff --git a/projects/Speed_Game/windows/images/gw.png b/projects/Speed_Game/windows/images/gw.png new file mode 100644 index 000000000..2a5f1a0f2 Binary files /dev/null and b/projects/Speed_Game/windows/images/gw.png differ diff --git a/projects/Speed_Game/windows/images/gy 2.png b/projects/Speed_Game/windows/images/gy 2.png new file mode 100644 index 000000000..89f291916 Binary files /dev/null and b/projects/Speed_Game/windows/images/gy 2.png differ diff --git a/projects/Speed_Game/windows/images/gy.png b/projects/Speed_Game/windows/images/gy.png new file mode 100644 index 000000000..89f291916 Binary files /dev/null and b/projects/Speed_Game/windows/images/gy.png differ diff --git a/projects/Speed_Game/windows/images/hk 2.png b/projects/Speed_Game/windows/images/hk 2.png new file mode 100644 index 000000000..c15c3cdf3 Binary files /dev/null and b/projects/Speed_Game/windows/images/hk 2.png differ diff --git a/projects/Speed_Game/windows/images/hk.png b/projects/Speed_Game/windows/images/hk.png new file mode 100644 index 000000000..c15c3cdf3 Binary files /dev/null and b/projects/Speed_Game/windows/images/hk.png differ diff --git a/projects/Speed_Game/windows/images/hm 2.png b/projects/Speed_Game/windows/images/hm 2.png new file mode 100644 index 000000000..b33d7359a Binary files /dev/null and b/projects/Speed_Game/windows/images/hm 2.png differ diff --git a/projects/Speed_Game/windows/images/hm.png b/projects/Speed_Game/windows/images/hm.png new file mode 100644 index 000000000..b33d7359a Binary files /dev/null and b/projects/Speed_Game/windows/images/hm.png differ diff --git a/projects/Speed_Game/windows/images/hn 2.png b/projects/Speed_Game/windows/images/hn 2.png new file mode 100644 index 000000000..916405502 Binary files /dev/null and b/projects/Speed_Game/windows/images/hn 2.png differ diff --git a/projects/Speed_Game/windows/images/hn.png b/projects/Speed_Game/windows/images/hn.png new file mode 100644 index 000000000..916405502 Binary files /dev/null and b/projects/Speed_Game/windows/images/hn.png differ diff --git a/projects/Speed_Game/windows/images/hr 2.png b/projects/Speed_Game/windows/images/hr 2.png new file mode 100644 index 000000000..e9718875a Binary files /dev/null and b/projects/Speed_Game/windows/images/hr 2.png differ diff --git a/projects/Speed_Game/windows/images/hr.png b/projects/Speed_Game/windows/images/hr.png new file mode 100644 index 000000000..e9718875a Binary files /dev/null and b/projects/Speed_Game/windows/images/hr.png differ diff --git a/projects/Speed_Game/windows/images/ht 2.png b/projects/Speed_Game/windows/images/ht 2.png new file mode 100644 index 000000000..10742d121 Binary files /dev/null and b/projects/Speed_Game/windows/images/ht 2.png differ diff --git a/projects/Speed_Game/windows/images/ht.png b/projects/Speed_Game/windows/images/ht.png new file mode 100644 index 000000000..10742d121 Binary files /dev/null and b/projects/Speed_Game/windows/images/ht.png differ diff --git a/projects/Speed_Game/windows/images/hu 2.png b/projects/Speed_Game/windows/images/hu 2.png new file mode 100644 index 000000000..744824cfd Binary files /dev/null and b/projects/Speed_Game/windows/images/hu 2.png differ diff --git a/projects/Speed_Game/windows/images/hu.png b/projects/Speed_Game/windows/images/hu.png new file mode 100644 index 000000000..744824cfd Binary files /dev/null and b/projects/Speed_Game/windows/images/hu.png differ diff --git a/projects/Speed_Game/windows/images/id 2.png b/projects/Speed_Game/windows/images/id 2.png new file mode 100644 index 000000000..2085f328b Binary files /dev/null and b/projects/Speed_Game/windows/images/id 2.png differ diff --git a/projects/Speed_Game/windows/images/id.png b/projects/Speed_Game/windows/images/id.png new file mode 100644 index 000000000..2085f328b Binary files /dev/null and b/projects/Speed_Game/windows/images/id.png differ diff --git a/projects/Speed_Game/windows/images/ie 2.png b/projects/Speed_Game/windows/images/ie 2.png new file mode 100644 index 000000000..4af13c97e Binary files /dev/null and b/projects/Speed_Game/windows/images/ie 2.png differ diff --git a/projects/Speed_Game/windows/images/ie.png b/projects/Speed_Game/windows/images/ie.png new file mode 100644 index 000000000..4af13c97e Binary files /dev/null and b/projects/Speed_Game/windows/images/ie.png differ diff --git a/projects/Speed_Game/windows/images/il 2.png b/projects/Speed_Game/windows/images/il 2.png new file mode 100644 index 000000000..852e65640 Binary files /dev/null and b/projects/Speed_Game/windows/images/il 2.png differ diff --git a/projects/Speed_Game/windows/images/il.png b/projects/Speed_Game/windows/images/il.png new file mode 100644 index 000000000..852e65640 Binary files /dev/null and b/projects/Speed_Game/windows/images/il.png differ diff --git a/projects/Speed_Game/windows/images/im 2.png b/projects/Speed_Game/windows/images/im 2.png new file mode 100644 index 000000000..59cc34a36 Binary files /dev/null and b/projects/Speed_Game/windows/images/im 2.png differ diff --git a/projects/Speed_Game/windows/images/im.png b/projects/Speed_Game/windows/images/im.png new file mode 100644 index 000000000..59cc34a36 Binary files /dev/null and b/projects/Speed_Game/windows/images/im.png differ diff --git a/projects/Speed_Game/windows/images/in 2.png b/projects/Speed_Game/windows/images/in 2.png new file mode 100644 index 000000000..46b99add9 Binary files /dev/null and b/projects/Speed_Game/windows/images/in 2.png differ diff --git a/projects/Speed_Game/windows/images/in.png b/projects/Speed_Game/windows/images/in.png new file mode 100644 index 000000000..46b99add9 Binary files /dev/null and b/projects/Speed_Game/windows/images/in.png differ diff --git a/projects/Speed_Game/windows/images/io 2.png b/projects/Speed_Game/windows/images/io 2.png new file mode 100644 index 000000000..97fc903d7 Binary files /dev/null and b/projects/Speed_Game/windows/images/io 2.png differ diff --git a/projects/Speed_Game/windows/images/io.png b/projects/Speed_Game/windows/images/io.png new file mode 100644 index 000000000..97fc903d7 Binary files /dev/null and b/projects/Speed_Game/windows/images/io.png differ diff --git a/projects/Speed_Game/windows/images/iq 2.png b/projects/Speed_Game/windows/images/iq 2.png new file mode 100644 index 000000000..0b57fd4b3 Binary files /dev/null and b/projects/Speed_Game/windows/images/iq 2.png differ diff --git a/projects/Speed_Game/windows/images/iq.png b/projects/Speed_Game/windows/images/iq.png new file mode 100644 index 000000000..0b57fd4b3 Binary files /dev/null and b/projects/Speed_Game/windows/images/iq.png differ diff --git a/projects/Speed_Game/windows/images/ir 2.png b/projects/Speed_Game/windows/images/ir 2.png new file mode 100644 index 000000000..b9dacb07d Binary files /dev/null and b/projects/Speed_Game/windows/images/ir 2.png differ diff --git a/projects/Speed_Game/windows/images/ir.png b/projects/Speed_Game/windows/images/ir.png new file mode 100644 index 000000000..b9dacb07d Binary files /dev/null and b/projects/Speed_Game/windows/images/ir.png differ diff --git a/projects/Speed_Game/windows/images/is 2.png b/projects/Speed_Game/windows/images/is 2.png new file mode 100644 index 000000000..2f2523798 Binary files /dev/null and b/projects/Speed_Game/windows/images/is 2.png differ diff --git a/projects/Speed_Game/windows/images/is.png b/projects/Speed_Game/windows/images/is.png new file mode 100644 index 000000000..2f2523798 Binary files /dev/null and b/projects/Speed_Game/windows/images/is.png differ diff --git a/projects/Speed_Game/windows/images/it 2.png b/projects/Speed_Game/windows/images/it 2.png new file mode 100644 index 000000000..2abfc6b2e Binary files /dev/null and b/projects/Speed_Game/windows/images/it 2.png differ diff --git a/projects/Speed_Game/windows/images/it.png b/projects/Speed_Game/windows/images/it.png new file mode 100644 index 000000000..2abfc6b2e Binary files /dev/null and b/projects/Speed_Game/windows/images/it.png differ diff --git a/projects/Speed_Game/windows/images/je 2.png b/projects/Speed_Game/windows/images/je 2.png new file mode 100644 index 000000000..910212a6e Binary files /dev/null and b/projects/Speed_Game/windows/images/je 2.png differ diff --git a/projects/Speed_Game/windows/images/je.png b/projects/Speed_Game/windows/images/je.png new file mode 100644 index 000000000..910212a6e Binary files /dev/null and b/projects/Speed_Game/windows/images/je.png differ diff --git a/projects/Speed_Game/windows/images/jm 2.png b/projects/Speed_Game/windows/images/jm 2.png new file mode 100644 index 000000000..63736421f Binary files /dev/null and b/projects/Speed_Game/windows/images/jm 2.png differ diff --git a/projects/Speed_Game/windows/images/jm.png b/projects/Speed_Game/windows/images/jm.png new file mode 100644 index 000000000..63736421f Binary files /dev/null and b/projects/Speed_Game/windows/images/jm.png differ diff --git a/projects/Speed_Game/windows/images/jo 2.png b/projects/Speed_Game/windows/images/jo 2.png new file mode 100644 index 000000000..08da5d7c3 Binary files /dev/null and b/projects/Speed_Game/windows/images/jo 2.png differ diff --git a/projects/Speed_Game/windows/images/jo.png b/projects/Speed_Game/windows/images/jo.png new file mode 100644 index 000000000..08da5d7c3 Binary files /dev/null and b/projects/Speed_Game/windows/images/jo.png differ diff --git a/projects/Speed_Game/windows/images/jp 2.png b/projects/Speed_Game/windows/images/jp 2.png new file mode 100644 index 000000000..1f9badaf1 Binary files /dev/null and b/projects/Speed_Game/windows/images/jp 2.png differ diff --git a/projects/Speed_Game/windows/images/jp.png b/projects/Speed_Game/windows/images/jp.png new file mode 100644 index 000000000..1f9badaf1 Binary files /dev/null and b/projects/Speed_Game/windows/images/jp.png differ diff --git a/projects/Speed_Game/windows/images/ke 2.png b/projects/Speed_Game/windows/images/ke 2.png new file mode 100644 index 000000000..08379eced Binary files /dev/null and b/projects/Speed_Game/windows/images/ke 2.png differ diff --git a/projects/Speed_Game/windows/images/ke.png b/projects/Speed_Game/windows/images/ke.png new file mode 100644 index 000000000..08379eced Binary files /dev/null and b/projects/Speed_Game/windows/images/ke.png differ diff --git a/projects/Speed_Game/windows/images/kg 2.png b/projects/Speed_Game/windows/images/kg 2.png new file mode 100644 index 000000000..3097fb61e Binary files /dev/null and b/projects/Speed_Game/windows/images/kg 2.png differ diff --git a/projects/Speed_Game/windows/images/kg.png b/projects/Speed_Game/windows/images/kg.png new file mode 100644 index 000000000..3097fb61e Binary files /dev/null and b/projects/Speed_Game/windows/images/kg.png differ diff --git a/projects/Speed_Game/windows/images/kh 2.png b/projects/Speed_Game/windows/images/kh 2.png new file mode 100644 index 000000000..cd51b9746 Binary files /dev/null and b/projects/Speed_Game/windows/images/kh 2.png differ diff --git a/projects/Speed_Game/windows/images/kh.png b/projects/Speed_Game/windows/images/kh.png new file mode 100644 index 000000000..cd51b9746 Binary files /dev/null and b/projects/Speed_Game/windows/images/kh.png differ diff --git a/projects/Speed_Game/windows/images/ki 2.png b/projects/Speed_Game/windows/images/ki 2.png new file mode 100644 index 000000000..38bc17567 Binary files /dev/null and b/projects/Speed_Game/windows/images/ki 2.png differ diff --git a/projects/Speed_Game/windows/images/ki.png b/projects/Speed_Game/windows/images/ki.png new file mode 100644 index 000000000..38bc17567 Binary files /dev/null and b/projects/Speed_Game/windows/images/ki.png differ diff --git a/projects/Speed_Game/windows/images/km 2.png b/projects/Speed_Game/windows/images/km 2.png new file mode 100644 index 000000000..0e05d31fb Binary files /dev/null and b/projects/Speed_Game/windows/images/km 2.png differ diff --git a/projects/Speed_Game/windows/images/km.png b/projects/Speed_Game/windows/images/km.png new file mode 100644 index 000000000..0e05d31fb Binary files /dev/null and b/projects/Speed_Game/windows/images/km.png differ diff --git a/projects/Speed_Game/windows/images/kn 2.png b/projects/Speed_Game/windows/images/kn 2.png new file mode 100644 index 000000000..96732f64f Binary files /dev/null and b/projects/Speed_Game/windows/images/kn 2.png differ diff --git a/projects/Speed_Game/windows/images/kn.png b/projects/Speed_Game/windows/images/kn.png new file mode 100644 index 000000000..96732f64f Binary files /dev/null and b/projects/Speed_Game/windows/images/kn.png differ diff --git a/projects/Speed_Game/windows/images/kp 2.png b/projects/Speed_Game/windows/images/kp 2.png new file mode 100644 index 000000000..9edcfe3c7 Binary files /dev/null and b/projects/Speed_Game/windows/images/kp 2.png differ diff --git a/projects/Speed_Game/windows/images/kp.png b/projects/Speed_Game/windows/images/kp.png new file mode 100644 index 000000000..9edcfe3c7 Binary files /dev/null and b/projects/Speed_Game/windows/images/kp.png differ diff --git a/projects/Speed_Game/windows/images/kr 2.png b/projects/Speed_Game/windows/images/kr 2.png new file mode 100644 index 000000000..2424e4c58 Binary files /dev/null and b/projects/Speed_Game/windows/images/kr 2.png differ diff --git a/projects/Speed_Game/windows/images/kr.png b/projects/Speed_Game/windows/images/kr.png new file mode 100644 index 000000000..2424e4c58 Binary files /dev/null and b/projects/Speed_Game/windows/images/kr.png differ diff --git a/projects/Speed_Game/windows/images/kw 2.png b/projects/Speed_Game/windows/images/kw 2.png new file mode 100644 index 000000000..ce1f32c5f Binary files /dev/null and b/projects/Speed_Game/windows/images/kw 2.png differ diff --git a/projects/Speed_Game/windows/images/kw.png b/projects/Speed_Game/windows/images/kw.png new file mode 100644 index 000000000..ce1f32c5f Binary files /dev/null and b/projects/Speed_Game/windows/images/kw.png differ diff --git a/projects/Speed_Game/windows/images/ky 2.png b/projects/Speed_Game/windows/images/ky 2.png new file mode 100644 index 000000000..bc6209837 Binary files /dev/null and b/projects/Speed_Game/windows/images/ky 2.png differ diff --git a/projects/Speed_Game/windows/images/ky.png b/projects/Speed_Game/windows/images/ky.png new file mode 100644 index 000000000..bc6209837 Binary files /dev/null and b/projects/Speed_Game/windows/images/ky.png differ diff --git a/projects/Speed_Game/windows/images/kz 2.png b/projects/Speed_Game/windows/images/kz 2.png new file mode 100644 index 000000000..bddc74c48 Binary files /dev/null and b/projects/Speed_Game/windows/images/kz 2.png differ diff --git a/projects/Speed_Game/windows/images/kz.png b/projects/Speed_Game/windows/images/kz.png new file mode 100644 index 000000000..bddc74c48 Binary files /dev/null and b/projects/Speed_Game/windows/images/kz.png differ diff --git a/projects/Speed_Game/windows/images/la 2.png b/projects/Speed_Game/windows/images/la 2.png new file mode 100644 index 000000000..d2a549ba1 Binary files /dev/null and b/projects/Speed_Game/windows/images/la 2.png differ diff --git a/projects/Speed_Game/windows/images/la.png b/projects/Speed_Game/windows/images/la.png new file mode 100644 index 000000000..d2a549ba1 Binary files /dev/null and b/projects/Speed_Game/windows/images/la.png differ diff --git a/projects/Speed_Game/windows/images/lb 2.png b/projects/Speed_Game/windows/images/lb 2.png new file mode 100644 index 000000000..bc7859e17 Binary files /dev/null and b/projects/Speed_Game/windows/images/lb 2.png differ diff --git a/projects/Speed_Game/windows/images/lb.png b/projects/Speed_Game/windows/images/lb.png new file mode 100644 index 000000000..bc7859e17 Binary files /dev/null and b/projects/Speed_Game/windows/images/lb.png differ diff --git a/projects/Speed_Game/windows/images/lc 2.png b/projects/Speed_Game/windows/images/lc 2.png new file mode 100644 index 000000000..9e273a56a Binary files /dev/null and b/projects/Speed_Game/windows/images/lc 2.png differ diff --git a/projects/Speed_Game/windows/images/lc.png b/projects/Speed_Game/windows/images/lc.png new file mode 100644 index 000000000..9e273a56a Binary files /dev/null and b/projects/Speed_Game/windows/images/lc.png differ diff --git a/projects/Speed_Game/windows/images/li 2.png b/projects/Speed_Game/windows/images/li 2.png new file mode 100644 index 000000000..8c788578e Binary files /dev/null and b/projects/Speed_Game/windows/images/li 2.png differ diff --git a/projects/Speed_Game/windows/images/li.png b/projects/Speed_Game/windows/images/li.png new file mode 100644 index 000000000..8c788578e Binary files /dev/null and b/projects/Speed_Game/windows/images/li.png differ diff --git a/projects/Speed_Game/windows/images/lk 2.png b/projects/Speed_Game/windows/images/lk 2.png new file mode 100644 index 000000000..ea5ae4edd Binary files /dev/null and b/projects/Speed_Game/windows/images/lk 2.png differ diff --git a/projects/Speed_Game/windows/images/lk.png b/projects/Speed_Game/windows/images/lk.png new file mode 100644 index 000000000..ea5ae4edd Binary files /dev/null and b/projects/Speed_Game/windows/images/lk.png differ diff --git a/projects/Speed_Game/windows/images/lr 2.png b/projects/Speed_Game/windows/images/lr 2.png new file mode 100644 index 000000000..7a76660af Binary files /dev/null and b/projects/Speed_Game/windows/images/lr 2.png differ diff --git a/projects/Speed_Game/windows/images/lr.png b/projects/Speed_Game/windows/images/lr.png new file mode 100644 index 000000000..7a76660af Binary files /dev/null and b/projects/Speed_Game/windows/images/lr.png differ diff --git a/projects/Speed_Game/windows/images/ls 2.png b/projects/Speed_Game/windows/images/ls 2.png new file mode 100644 index 000000000..29af93eea Binary files /dev/null and b/projects/Speed_Game/windows/images/ls 2.png differ diff --git a/projects/Speed_Game/windows/images/ls.png b/projects/Speed_Game/windows/images/ls.png new file mode 100644 index 000000000..29af93eea Binary files /dev/null and b/projects/Speed_Game/windows/images/ls.png differ diff --git a/projects/Speed_Game/windows/images/lt 2.png b/projects/Speed_Game/windows/images/lt 2.png new file mode 100644 index 000000000..f3362743d Binary files /dev/null and b/projects/Speed_Game/windows/images/lt 2.png differ diff --git a/projects/Speed_Game/windows/images/lt.png b/projects/Speed_Game/windows/images/lt.png new file mode 100644 index 000000000..f3362743d Binary files /dev/null and b/projects/Speed_Game/windows/images/lt.png differ diff --git a/projects/Speed_Game/windows/images/lu 2.png b/projects/Speed_Game/windows/images/lu 2.png new file mode 100644 index 000000000..ec1c41ad1 Binary files /dev/null and b/projects/Speed_Game/windows/images/lu 2.png differ diff --git a/projects/Speed_Game/windows/images/lu.png b/projects/Speed_Game/windows/images/lu.png new file mode 100644 index 000000000..ec1c41ad1 Binary files /dev/null and b/projects/Speed_Game/windows/images/lu.png differ diff --git a/projects/Speed_Game/windows/images/lv 2.png b/projects/Speed_Game/windows/images/lv 2.png new file mode 100644 index 000000000..406289ccd Binary files /dev/null and b/projects/Speed_Game/windows/images/lv 2.png differ diff --git a/projects/Speed_Game/windows/images/lv.png b/projects/Speed_Game/windows/images/lv.png new file mode 100644 index 000000000..406289ccd Binary files /dev/null and b/projects/Speed_Game/windows/images/lv.png differ diff --git a/projects/Speed_Game/windows/images/ly 2.png b/projects/Speed_Game/windows/images/ly 2.png new file mode 100644 index 000000000..7d4bcdf73 Binary files /dev/null and b/projects/Speed_Game/windows/images/ly 2.png differ diff --git a/projects/Speed_Game/windows/images/ly.png b/projects/Speed_Game/windows/images/ly.png new file mode 100644 index 000000000..7d4bcdf73 Binary files /dev/null and b/projects/Speed_Game/windows/images/ly.png differ diff --git a/projects/Speed_Game/windows/images/ma 2.png b/projects/Speed_Game/windows/images/ma 2.png new file mode 100644 index 000000000..0eb5815bd Binary files /dev/null and b/projects/Speed_Game/windows/images/ma 2.png differ diff --git a/projects/Speed_Game/windows/images/ma.png b/projects/Speed_Game/windows/images/ma.png new file mode 100644 index 000000000..0eb5815bd Binary files /dev/null and b/projects/Speed_Game/windows/images/ma.png differ diff --git a/projects/Speed_Game/windows/images/mc 2.png b/projects/Speed_Game/windows/images/mc 2.png new file mode 100644 index 000000000..637ca2809 Binary files /dev/null and b/projects/Speed_Game/windows/images/mc 2.png differ diff --git a/projects/Speed_Game/windows/images/mc.png b/projects/Speed_Game/windows/images/mc.png new file mode 100644 index 000000000..637ca2809 Binary files /dev/null and b/projects/Speed_Game/windows/images/mc.png differ diff --git a/projects/Speed_Game/windows/images/md 2.png b/projects/Speed_Game/windows/images/md 2.png new file mode 100644 index 000000000..c315bd34b Binary files /dev/null and b/projects/Speed_Game/windows/images/md 2.png differ diff --git a/projects/Speed_Game/windows/images/md.png b/projects/Speed_Game/windows/images/md.png new file mode 100644 index 000000000..c315bd34b Binary files /dev/null and b/projects/Speed_Game/windows/images/md.png differ diff --git a/projects/Speed_Game/windows/images/me 2.png b/projects/Speed_Game/windows/images/me 2.png new file mode 100644 index 000000000..f3f629136 Binary files /dev/null and b/projects/Speed_Game/windows/images/me 2.png differ diff --git a/projects/Speed_Game/windows/images/me.png b/projects/Speed_Game/windows/images/me.png new file mode 100644 index 000000000..f3f629136 Binary files /dev/null and b/projects/Speed_Game/windows/images/me.png differ diff --git a/projects/Speed_Game/windows/images/mf 2.png b/projects/Speed_Game/windows/images/mf 2.png new file mode 100644 index 000000000..d5f30b427 Binary files /dev/null and b/projects/Speed_Game/windows/images/mf 2.png differ diff --git a/projects/Speed_Game/windows/images/mf.png b/projects/Speed_Game/windows/images/mf.png new file mode 100644 index 000000000..d5f30b427 Binary files /dev/null and b/projects/Speed_Game/windows/images/mf.png differ diff --git a/projects/Speed_Game/windows/images/mg 2.png b/projects/Speed_Game/windows/images/mg 2.png new file mode 100644 index 000000000..c98660443 Binary files /dev/null and b/projects/Speed_Game/windows/images/mg 2.png differ diff --git a/projects/Speed_Game/windows/images/mg.png b/projects/Speed_Game/windows/images/mg.png new file mode 100644 index 000000000..c98660443 Binary files /dev/null and b/projects/Speed_Game/windows/images/mg.png differ diff --git a/projects/Speed_Game/windows/images/mh 2.png b/projects/Speed_Game/windows/images/mh 2.png new file mode 100644 index 000000000..9a3262663 Binary files /dev/null and b/projects/Speed_Game/windows/images/mh 2.png differ diff --git a/projects/Speed_Game/windows/images/mh.png b/projects/Speed_Game/windows/images/mh.png new file mode 100644 index 000000000..9a3262663 Binary files /dev/null and b/projects/Speed_Game/windows/images/mh.png differ diff --git a/projects/Speed_Game/windows/images/mk 2.png b/projects/Speed_Game/windows/images/mk 2.png new file mode 100644 index 000000000..b51836a93 Binary files /dev/null and b/projects/Speed_Game/windows/images/mk 2.png differ diff --git a/projects/Speed_Game/windows/images/mk.png b/projects/Speed_Game/windows/images/mk.png new file mode 100644 index 000000000..b51836a93 Binary files /dev/null and b/projects/Speed_Game/windows/images/mk.png differ diff --git a/projects/Speed_Game/windows/images/ml 2.png b/projects/Speed_Game/windows/images/ml 2.png new file mode 100644 index 000000000..6148eefba Binary files /dev/null and b/projects/Speed_Game/windows/images/ml 2.png differ diff --git a/projects/Speed_Game/windows/images/ml.png b/projects/Speed_Game/windows/images/ml.png new file mode 100644 index 000000000..6148eefba Binary files /dev/null and b/projects/Speed_Game/windows/images/ml.png differ diff --git a/projects/Speed_Game/windows/images/mm 2.png b/projects/Speed_Game/windows/images/mm 2.png new file mode 100644 index 000000000..929c1781f Binary files /dev/null and b/projects/Speed_Game/windows/images/mm 2.png differ diff --git a/projects/Speed_Game/windows/images/mm.png b/projects/Speed_Game/windows/images/mm.png new file mode 100644 index 000000000..929c1781f Binary files /dev/null and b/projects/Speed_Game/windows/images/mm.png differ diff --git a/projects/Speed_Game/windows/images/mn 2.png b/projects/Speed_Game/windows/images/mn 2.png new file mode 100644 index 000000000..8c18dfb66 Binary files /dev/null and b/projects/Speed_Game/windows/images/mn 2.png differ diff --git a/projects/Speed_Game/windows/images/mn.png b/projects/Speed_Game/windows/images/mn.png new file mode 100644 index 000000000..8c18dfb66 Binary files /dev/null and b/projects/Speed_Game/windows/images/mn.png differ diff --git a/projects/Speed_Game/windows/images/mo 2.png b/projects/Speed_Game/windows/images/mo 2.png new file mode 100644 index 000000000..494c04b12 Binary files /dev/null and b/projects/Speed_Game/windows/images/mo 2.png differ diff --git a/projects/Speed_Game/windows/images/mo.png b/projects/Speed_Game/windows/images/mo.png new file mode 100644 index 000000000..494c04b12 Binary files /dev/null and b/projects/Speed_Game/windows/images/mo.png differ diff --git a/projects/Speed_Game/windows/images/mp 2.png b/projects/Speed_Game/windows/images/mp 2.png new file mode 100644 index 000000000..1c386c030 Binary files /dev/null and b/projects/Speed_Game/windows/images/mp 2.png differ diff --git a/projects/Speed_Game/windows/images/mp.png b/projects/Speed_Game/windows/images/mp.png new file mode 100644 index 000000000..1c386c030 Binary files /dev/null and b/projects/Speed_Game/windows/images/mp.png differ diff --git a/projects/Speed_Game/windows/images/mq 2.png b/projects/Speed_Game/windows/images/mq 2.png new file mode 100644 index 000000000..82d2f3113 Binary files /dev/null and b/projects/Speed_Game/windows/images/mq 2.png differ diff --git a/projects/Speed_Game/windows/images/mq.png b/projects/Speed_Game/windows/images/mq.png new file mode 100644 index 000000000..82d2f3113 Binary files /dev/null and b/projects/Speed_Game/windows/images/mq.png differ diff --git a/projects/Speed_Game/windows/images/mr 2.png b/projects/Speed_Game/windows/images/mr 2.png new file mode 100644 index 000000000..560f899d0 Binary files /dev/null and b/projects/Speed_Game/windows/images/mr 2.png differ diff --git a/projects/Speed_Game/windows/images/mr.png b/projects/Speed_Game/windows/images/mr.png new file mode 100644 index 000000000..560f899d0 Binary files /dev/null and b/projects/Speed_Game/windows/images/mr.png differ diff --git a/projects/Speed_Game/windows/images/ms 2.png b/projects/Speed_Game/windows/images/ms 2.png new file mode 100644 index 000000000..758b65174 Binary files /dev/null and b/projects/Speed_Game/windows/images/ms 2.png differ diff --git a/projects/Speed_Game/windows/images/ms.png b/projects/Speed_Game/windows/images/ms.png new file mode 100644 index 000000000..758b65174 Binary files /dev/null and b/projects/Speed_Game/windows/images/ms.png differ diff --git a/projects/Speed_Game/windows/images/mt 2.png b/projects/Speed_Game/windows/images/mt 2.png new file mode 100644 index 000000000..93d8927e5 Binary files /dev/null and b/projects/Speed_Game/windows/images/mt 2.png differ diff --git a/projects/Speed_Game/windows/images/mt.png b/projects/Speed_Game/windows/images/mt.png new file mode 100644 index 000000000..93d8927e5 Binary files /dev/null and b/projects/Speed_Game/windows/images/mt.png differ diff --git a/projects/Speed_Game/windows/images/mu 2.png b/projects/Speed_Game/windows/images/mu 2.png new file mode 100644 index 000000000..6d313e5a5 Binary files /dev/null and b/projects/Speed_Game/windows/images/mu 2.png differ diff --git a/projects/Speed_Game/windows/images/mu.png b/projects/Speed_Game/windows/images/mu.png new file mode 100644 index 000000000..6d313e5a5 Binary files /dev/null and b/projects/Speed_Game/windows/images/mu.png differ diff --git a/projects/Speed_Game/windows/images/mv 2.png b/projects/Speed_Game/windows/images/mv 2.png new file mode 100644 index 000000000..8f04da967 Binary files /dev/null and b/projects/Speed_Game/windows/images/mv 2.png differ diff --git a/projects/Speed_Game/windows/images/mv.png b/projects/Speed_Game/windows/images/mv.png new file mode 100644 index 000000000..8f04da967 Binary files /dev/null and b/projects/Speed_Game/windows/images/mv.png differ diff --git a/projects/Speed_Game/windows/images/mw 2.png b/projects/Speed_Game/windows/images/mw 2.png new file mode 100644 index 000000000..35672dbb6 Binary files /dev/null and b/projects/Speed_Game/windows/images/mw 2.png differ diff --git a/projects/Speed_Game/windows/images/mw.png b/projects/Speed_Game/windows/images/mw.png new file mode 100644 index 000000000..35672dbb6 Binary files /dev/null and b/projects/Speed_Game/windows/images/mw.png differ diff --git a/projects/Speed_Game/windows/images/mx 2.png b/projects/Speed_Game/windows/images/mx 2.png new file mode 100644 index 000000000..cd147f00f Binary files /dev/null and b/projects/Speed_Game/windows/images/mx 2.png differ diff --git a/projects/Speed_Game/windows/images/mx.png b/projects/Speed_Game/windows/images/mx.png new file mode 100644 index 000000000..cd147f00f Binary files /dev/null and b/projects/Speed_Game/windows/images/mx.png differ diff --git a/projects/Speed_Game/windows/images/my 2.png b/projects/Speed_Game/windows/images/my 2.png new file mode 100644 index 000000000..0c07dd052 Binary files /dev/null and b/projects/Speed_Game/windows/images/my 2.png differ diff --git a/projects/Speed_Game/windows/images/my.png b/projects/Speed_Game/windows/images/my.png new file mode 100644 index 000000000..0c07dd052 Binary files /dev/null and b/projects/Speed_Game/windows/images/my.png differ diff --git a/projects/Speed_Game/windows/images/mz 2.png b/projects/Speed_Game/windows/images/mz 2.png new file mode 100644 index 000000000..e6f741b34 Binary files /dev/null and b/projects/Speed_Game/windows/images/mz 2.png differ diff --git a/projects/Speed_Game/windows/images/mz.png b/projects/Speed_Game/windows/images/mz.png new file mode 100644 index 000000000..e6f741b34 Binary files /dev/null and b/projects/Speed_Game/windows/images/mz.png differ diff --git a/projects/Speed_Game/windows/images/na 2.png b/projects/Speed_Game/windows/images/na 2.png new file mode 100644 index 000000000..3959e2691 Binary files /dev/null and b/projects/Speed_Game/windows/images/na 2.png differ diff --git a/projects/Speed_Game/windows/images/na.png b/projects/Speed_Game/windows/images/na.png new file mode 100644 index 000000000..3959e2691 Binary files /dev/null and b/projects/Speed_Game/windows/images/na.png differ diff --git a/projects/Speed_Game/windows/images/nc 2.png b/projects/Speed_Game/windows/images/nc 2.png new file mode 100644 index 000000000..754b25ef7 Binary files /dev/null and b/projects/Speed_Game/windows/images/nc 2.png differ diff --git a/projects/Speed_Game/windows/images/nc.png b/projects/Speed_Game/windows/images/nc.png new file mode 100644 index 000000000..754b25ef7 Binary files /dev/null and b/projects/Speed_Game/windows/images/nc.png differ diff --git a/projects/Speed_Game/windows/images/ne 2.png b/projects/Speed_Game/windows/images/ne 2.png new file mode 100644 index 000000000..1181e146c Binary files /dev/null and b/projects/Speed_Game/windows/images/ne 2.png differ diff --git a/projects/Speed_Game/windows/images/ne.png b/projects/Speed_Game/windows/images/ne.png new file mode 100644 index 000000000..1181e146c Binary files /dev/null and b/projects/Speed_Game/windows/images/ne.png differ diff --git a/projects/Speed_Game/windows/images/nf 2.png b/projects/Speed_Game/windows/images/nf 2.png new file mode 100644 index 000000000..69b4666c9 Binary files /dev/null and b/projects/Speed_Game/windows/images/nf 2.png differ diff --git a/projects/Speed_Game/windows/images/nf.png b/projects/Speed_Game/windows/images/nf.png new file mode 100644 index 000000000..69b4666c9 Binary files /dev/null and b/projects/Speed_Game/windows/images/nf.png differ diff --git a/projects/Speed_Game/windows/images/ng 2.png b/projects/Speed_Game/windows/images/ng 2.png new file mode 100644 index 000000000..24459d4f2 Binary files /dev/null and b/projects/Speed_Game/windows/images/ng 2.png differ diff --git a/projects/Speed_Game/windows/images/ng.png b/projects/Speed_Game/windows/images/ng.png new file mode 100644 index 000000000..24459d4f2 Binary files /dev/null and b/projects/Speed_Game/windows/images/ng.png differ diff --git a/projects/Speed_Game/windows/images/ni 2.png b/projects/Speed_Game/windows/images/ni 2.png new file mode 100644 index 000000000..c13312516 Binary files /dev/null and b/projects/Speed_Game/windows/images/ni 2.png differ diff --git a/projects/Speed_Game/windows/images/ni.png b/projects/Speed_Game/windows/images/ni.png new file mode 100644 index 000000000..c13312516 Binary files /dev/null and b/projects/Speed_Game/windows/images/ni.png differ diff --git a/projects/Speed_Game/windows/images/nl 2.png b/projects/Speed_Game/windows/images/nl 2.png new file mode 100644 index 000000000..e633b0af5 Binary files /dev/null and b/projects/Speed_Game/windows/images/nl 2.png differ diff --git a/projects/Speed_Game/windows/images/nl.png b/projects/Speed_Game/windows/images/nl.png new file mode 100644 index 000000000..e633b0af5 Binary files /dev/null and b/projects/Speed_Game/windows/images/nl.png differ diff --git a/projects/Speed_Game/windows/images/no 2.png b/projects/Speed_Game/windows/images/no 2.png new file mode 100644 index 000000000..db3d73415 Binary files /dev/null and b/projects/Speed_Game/windows/images/no 2.png differ diff --git a/projects/Speed_Game/windows/images/no.png b/projects/Speed_Game/windows/images/no.png new file mode 100644 index 000000000..db3d73415 Binary files /dev/null and b/projects/Speed_Game/windows/images/no.png differ diff --git a/projects/Speed_Game/windows/images/np 2.png b/projects/Speed_Game/windows/images/np 2.png new file mode 100644 index 000000000..e2e82c7c6 Binary files /dev/null and b/projects/Speed_Game/windows/images/np 2.png differ diff --git a/projects/Speed_Game/windows/images/np.png b/projects/Speed_Game/windows/images/np.png new file mode 100644 index 000000000..e2e82c7c6 Binary files /dev/null and b/projects/Speed_Game/windows/images/np.png differ diff --git a/projects/Speed_Game/windows/images/nr 2.png b/projects/Speed_Game/windows/images/nr 2.png new file mode 100644 index 000000000..5ee1a200c Binary files /dev/null and b/projects/Speed_Game/windows/images/nr 2.png differ diff --git a/projects/Speed_Game/windows/images/nr.png b/projects/Speed_Game/windows/images/nr.png new file mode 100644 index 000000000..5ee1a200c Binary files /dev/null and b/projects/Speed_Game/windows/images/nr.png differ diff --git a/projects/Speed_Game/windows/images/nu 2.png b/projects/Speed_Game/windows/images/nu 2.png new file mode 100644 index 000000000..6c5b22c0a Binary files /dev/null and b/projects/Speed_Game/windows/images/nu 2.png differ diff --git a/projects/Speed_Game/windows/images/nu.png b/projects/Speed_Game/windows/images/nu.png new file mode 100644 index 000000000..6c5b22c0a Binary files /dev/null and b/projects/Speed_Game/windows/images/nu.png differ diff --git a/projects/Speed_Game/windows/images/nz 2.png b/projects/Speed_Game/windows/images/nz 2.png new file mode 100644 index 000000000..042446118 Binary files /dev/null and b/projects/Speed_Game/windows/images/nz 2.png differ diff --git a/projects/Speed_Game/windows/images/nz.png b/projects/Speed_Game/windows/images/nz.png new file mode 100644 index 000000000..042446118 Binary files /dev/null and b/projects/Speed_Game/windows/images/nz.png differ diff --git a/projects/Speed_Game/windows/images/om 2.png b/projects/Speed_Game/windows/images/om 2.png new file mode 100644 index 000000000..fd07e4fd7 Binary files /dev/null and b/projects/Speed_Game/windows/images/om 2.png differ diff --git a/projects/Speed_Game/windows/images/om.png b/projects/Speed_Game/windows/images/om.png new file mode 100644 index 000000000..fd07e4fd7 Binary files /dev/null and b/projects/Speed_Game/windows/images/om.png differ diff --git a/projects/Speed_Game/windows/images/pa 2.png b/projects/Speed_Game/windows/images/pa 2.png new file mode 100644 index 000000000..a7cf0284e Binary files /dev/null and b/projects/Speed_Game/windows/images/pa 2.png differ diff --git a/projects/Speed_Game/windows/images/pa.png b/projects/Speed_Game/windows/images/pa.png new file mode 100644 index 000000000..a7cf0284e Binary files /dev/null and b/projects/Speed_Game/windows/images/pa.png differ diff --git a/projects/Speed_Game/windows/images/pe 2.png b/projects/Speed_Game/windows/images/pe 2.png new file mode 100644 index 000000000..36b7cba74 Binary files /dev/null and b/projects/Speed_Game/windows/images/pe 2.png differ diff --git a/projects/Speed_Game/windows/images/pe.png b/projects/Speed_Game/windows/images/pe.png new file mode 100644 index 000000000..36b7cba74 Binary files /dev/null and b/projects/Speed_Game/windows/images/pe.png differ diff --git a/projects/Speed_Game/windows/images/pf 2.png b/projects/Speed_Game/windows/images/pf 2.png new file mode 100644 index 000000000..452db5575 Binary files /dev/null and b/projects/Speed_Game/windows/images/pf 2.png differ diff --git a/projects/Speed_Game/windows/images/pf.png b/projects/Speed_Game/windows/images/pf.png new file mode 100644 index 000000000..452db5575 Binary files /dev/null and b/projects/Speed_Game/windows/images/pf.png differ diff --git a/projects/Speed_Game/windows/images/pg 2.png b/projects/Speed_Game/windows/images/pg 2.png new file mode 100644 index 000000000..3ec7b0274 Binary files /dev/null and b/projects/Speed_Game/windows/images/pg 2.png differ diff --git a/projects/Speed_Game/windows/images/pg.png b/projects/Speed_Game/windows/images/pg.png new file mode 100644 index 000000000..3ec7b0274 Binary files /dev/null and b/projects/Speed_Game/windows/images/pg.png differ diff --git a/projects/Speed_Game/windows/images/ph 2.png b/projects/Speed_Game/windows/images/ph 2.png new file mode 100644 index 000000000..a6d2212d2 Binary files /dev/null and b/projects/Speed_Game/windows/images/ph 2.png differ diff --git a/projects/Speed_Game/windows/images/ph.png b/projects/Speed_Game/windows/images/ph.png new file mode 100644 index 000000000..a6d2212d2 Binary files /dev/null and b/projects/Speed_Game/windows/images/ph.png differ diff --git a/projects/Speed_Game/windows/images/pk 2.png b/projects/Speed_Game/windows/images/pk 2.png new file mode 100644 index 000000000..62bb96191 Binary files /dev/null and b/projects/Speed_Game/windows/images/pk 2.png differ diff --git a/projects/Speed_Game/windows/images/pk.png b/projects/Speed_Game/windows/images/pk.png new file mode 100644 index 000000000..62bb96191 Binary files /dev/null and b/projects/Speed_Game/windows/images/pk.png differ diff --git a/projects/Speed_Game/windows/images/pl 2.png b/projects/Speed_Game/windows/images/pl 2.png new file mode 100644 index 000000000..1e51f810b Binary files /dev/null and b/projects/Speed_Game/windows/images/pl 2.png differ diff --git a/projects/Speed_Game/windows/images/pl.png b/projects/Speed_Game/windows/images/pl.png new file mode 100644 index 000000000..1e51f810b Binary files /dev/null and b/projects/Speed_Game/windows/images/pl.png differ diff --git a/projects/Speed_Game/windows/images/pm 2.png b/projects/Speed_Game/windows/images/pm 2.png new file mode 100644 index 000000000..3a826f484 Binary files /dev/null and b/projects/Speed_Game/windows/images/pm 2.png differ diff --git a/projects/Speed_Game/windows/images/pm.png b/projects/Speed_Game/windows/images/pm.png new file mode 100644 index 000000000..3a826f484 Binary files /dev/null and b/projects/Speed_Game/windows/images/pm.png differ diff --git a/projects/Speed_Game/windows/images/pn 2.png b/projects/Speed_Game/windows/images/pn 2.png new file mode 100644 index 000000000..ee90c1f62 Binary files /dev/null and b/projects/Speed_Game/windows/images/pn 2.png differ diff --git a/projects/Speed_Game/windows/images/pn.png b/projects/Speed_Game/windows/images/pn.png new file mode 100644 index 000000000..ee90c1f62 Binary files /dev/null and b/projects/Speed_Game/windows/images/pn.png differ diff --git a/projects/Speed_Game/windows/images/pr 2.png b/projects/Speed_Game/windows/images/pr 2.png new file mode 100644 index 000000000..ee8b59420 Binary files /dev/null and b/projects/Speed_Game/windows/images/pr 2.png differ diff --git a/projects/Speed_Game/windows/images/pr.png b/projects/Speed_Game/windows/images/pr.png new file mode 100644 index 000000000..ee8b59420 Binary files /dev/null and b/projects/Speed_Game/windows/images/pr.png differ diff --git a/projects/Speed_Game/windows/images/ps 2.png b/projects/Speed_Game/windows/images/ps 2.png new file mode 100644 index 000000000..bf268ee7c Binary files /dev/null and b/projects/Speed_Game/windows/images/ps 2.png differ diff --git a/projects/Speed_Game/windows/images/ps.png b/projects/Speed_Game/windows/images/ps.png new file mode 100644 index 000000000..bf268ee7c Binary files /dev/null and b/projects/Speed_Game/windows/images/ps.png differ diff --git a/projects/Speed_Game/windows/images/pt 2.png b/projects/Speed_Game/windows/images/pt 2.png new file mode 100644 index 000000000..eb24f79b4 Binary files /dev/null and b/projects/Speed_Game/windows/images/pt 2.png differ diff --git a/projects/Speed_Game/windows/images/pt.png b/projects/Speed_Game/windows/images/pt.png new file mode 100644 index 000000000..eb24f79b4 Binary files /dev/null and b/projects/Speed_Game/windows/images/pt.png differ diff --git a/projects/Speed_Game/windows/images/pw 2.png b/projects/Speed_Game/windows/images/pw 2.png new file mode 100644 index 000000000..cb5694ee2 Binary files /dev/null and b/projects/Speed_Game/windows/images/pw 2.png differ diff --git a/projects/Speed_Game/windows/images/pw.png b/projects/Speed_Game/windows/images/pw.png new file mode 100644 index 000000000..cb5694ee2 Binary files /dev/null and b/projects/Speed_Game/windows/images/pw.png differ diff --git a/projects/Speed_Game/windows/images/py 2.png b/projects/Speed_Game/windows/images/py 2.png new file mode 100644 index 000000000..c4df0c1f9 Binary files /dev/null and b/projects/Speed_Game/windows/images/py 2.png differ diff --git a/projects/Speed_Game/windows/images/py.png b/projects/Speed_Game/windows/images/py.png new file mode 100644 index 000000000..c4df0c1f9 Binary files /dev/null and b/projects/Speed_Game/windows/images/py.png differ diff --git a/projects/Speed_Game/windows/images/qa 2.png b/projects/Speed_Game/windows/images/qa 2.png new file mode 100644 index 000000000..1f5bc3d09 Binary files /dev/null and b/projects/Speed_Game/windows/images/qa 2.png differ diff --git a/projects/Speed_Game/windows/images/qa.png b/projects/Speed_Game/windows/images/qa.png new file mode 100644 index 000000000..1f5bc3d09 Binary files /dev/null and b/projects/Speed_Game/windows/images/qa.png differ diff --git a/projects/Speed_Game/windows/images/re 2.png b/projects/Speed_Game/windows/images/re 2.png new file mode 100644 index 000000000..4817253e5 Binary files /dev/null and b/projects/Speed_Game/windows/images/re 2.png differ diff --git a/projects/Speed_Game/windows/images/re.png b/projects/Speed_Game/windows/images/re.png new file mode 100644 index 000000000..4817253e5 Binary files /dev/null and b/projects/Speed_Game/windows/images/re.png differ diff --git a/projects/Speed_Game/windows/images/ro 2.png b/projects/Speed_Game/windows/images/ro 2.png new file mode 100644 index 000000000..4bb28efea Binary files /dev/null and b/projects/Speed_Game/windows/images/ro 2.png differ diff --git a/projects/Speed_Game/windows/images/ro.png b/projects/Speed_Game/windows/images/ro.png new file mode 100644 index 000000000..4bb28efea Binary files /dev/null and b/projects/Speed_Game/windows/images/ro.png differ diff --git a/projects/Speed_Game/windows/images/rs 2.png b/projects/Speed_Game/windows/images/rs 2.png new file mode 100644 index 000000000..6ea1e68b2 Binary files /dev/null and b/projects/Speed_Game/windows/images/rs 2.png differ diff --git a/projects/Speed_Game/windows/images/rs.png b/projects/Speed_Game/windows/images/rs.png new file mode 100644 index 000000000..6ea1e68b2 Binary files /dev/null and b/projects/Speed_Game/windows/images/rs.png differ diff --git a/projects/Speed_Game/windows/images/ru 2.png b/projects/Speed_Game/windows/images/ru 2.png new file mode 100644 index 000000000..220d7f370 Binary files /dev/null and b/projects/Speed_Game/windows/images/ru 2.png differ diff --git a/projects/Speed_Game/windows/images/ru.png b/projects/Speed_Game/windows/images/ru.png new file mode 100644 index 000000000..220d7f370 Binary files /dev/null and b/projects/Speed_Game/windows/images/ru.png differ diff --git a/projects/Speed_Game/windows/images/rw 2.png b/projects/Speed_Game/windows/images/rw 2.png new file mode 100644 index 000000000..980e3cdf3 Binary files /dev/null and b/projects/Speed_Game/windows/images/rw 2.png differ diff --git a/projects/Speed_Game/windows/images/rw.png b/projects/Speed_Game/windows/images/rw.png new file mode 100644 index 000000000..980e3cdf3 Binary files /dev/null and b/projects/Speed_Game/windows/images/rw.png differ diff --git a/projects/Speed_Game/windows/images/sa 2.png b/projects/Speed_Game/windows/images/sa 2.png new file mode 100644 index 000000000..117003a21 Binary files /dev/null and b/projects/Speed_Game/windows/images/sa 2.png differ diff --git a/projects/Speed_Game/windows/images/sa.png b/projects/Speed_Game/windows/images/sa.png new file mode 100644 index 000000000..117003a21 Binary files /dev/null and b/projects/Speed_Game/windows/images/sa.png differ diff --git a/projects/Speed_Game/windows/images/sb 2.png b/projects/Speed_Game/windows/images/sb 2.png new file mode 100644 index 000000000..7ec90d30f Binary files /dev/null and b/projects/Speed_Game/windows/images/sb 2.png differ diff --git a/projects/Speed_Game/windows/images/sb.png b/projects/Speed_Game/windows/images/sb.png new file mode 100644 index 000000000..7ec90d30f Binary files /dev/null and b/projects/Speed_Game/windows/images/sb.png differ diff --git a/projects/Speed_Game/windows/images/sc 2.png b/projects/Speed_Game/windows/images/sc 2.png new file mode 100644 index 000000000..8f64c8c31 Binary files /dev/null and b/projects/Speed_Game/windows/images/sc 2.png differ diff --git a/projects/Speed_Game/windows/images/sc.png b/projects/Speed_Game/windows/images/sc.png new file mode 100644 index 000000000..8f64c8c31 Binary files /dev/null and b/projects/Speed_Game/windows/images/sc.png differ diff --git a/projects/Speed_Game/windows/images/sd 2.png b/projects/Speed_Game/windows/images/sd 2.png new file mode 100644 index 000000000..9f5c34491 Binary files /dev/null and b/projects/Speed_Game/windows/images/sd 2.png differ diff --git a/projects/Speed_Game/windows/images/sd.png b/projects/Speed_Game/windows/images/sd.png new file mode 100644 index 000000000..9f5c34491 Binary files /dev/null and b/projects/Speed_Game/windows/images/sd.png differ diff --git a/projects/Speed_Game/windows/images/se 2.png b/projects/Speed_Game/windows/images/se 2.png new file mode 100644 index 000000000..14e8b9aee Binary files /dev/null and b/projects/Speed_Game/windows/images/se 2.png differ diff --git a/projects/Speed_Game/windows/images/se.png b/projects/Speed_Game/windows/images/se.png new file mode 100644 index 000000000..14e8b9aee Binary files /dev/null and b/projects/Speed_Game/windows/images/se.png differ diff --git a/projects/Speed_Game/windows/images/sg 2.png b/projects/Speed_Game/windows/images/sg 2.png new file mode 100644 index 000000000..3c86eca18 Binary files /dev/null and b/projects/Speed_Game/windows/images/sg 2.png differ diff --git a/projects/Speed_Game/windows/images/sg.png b/projects/Speed_Game/windows/images/sg.png new file mode 100644 index 000000000..3c86eca18 Binary files /dev/null and b/projects/Speed_Game/windows/images/sg.png differ diff --git a/projects/Speed_Game/windows/images/sh 2.png b/projects/Speed_Game/windows/images/sh 2.png new file mode 100644 index 000000000..94a6266b1 Binary files /dev/null and b/projects/Speed_Game/windows/images/sh 2.png differ diff --git a/projects/Speed_Game/windows/images/sh.png b/projects/Speed_Game/windows/images/sh.png new file mode 100644 index 000000000..94a6266b1 Binary files /dev/null and b/projects/Speed_Game/windows/images/sh.png differ diff --git a/projects/Speed_Game/windows/images/si 2.png b/projects/Speed_Game/windows/images/si 2.png new file mode 100644 index 000000000..80dd781db Binary files /dev/null and b/projects/Speed_Game/windows/images/si 2.png differ diff --git a/projects/Speed_Game/windows/images/si.png b/projects/Speed_Game/windows/images/si.png new file mode 100644 index 000000000..80dd781db Binary files /dev/null and b/projects/Speed_Game/windows/images/si.png differ diff --git a/projects/Speed_Game/windows/images/sj 2.png b/projects/Speed_Game/windows/images/sj 2.png new file mode 100644 index 000000000..db3d73415 Binary files /dev/null and b/projects/Speed_Game/windows/images/sj 2.png differ diff --git a/projects/Speed_Game/windows/images/sj.png b/projects/Speed_Game/windows/images/sj.png new file mode 100644 index 000000000..db3d73415 Binary files /dev/null and b/projects/Speed_Game/windows/images/sj.png differ diff --git a/projects/Speed_Game/windows/images/sk 2.png b/projects/Speed_Game/windows/images/sk 2.png new file mode 100644 index 000000000..7883d6182 Binary files /dev/null and b/projects/Speed_Game/windows/images/sk 2.png differ diff --git a/projects/Speed_Game/windows/images/sk.png b/projects/Speed_Game/windows/images/sk.png new file mode 100644 index 000000000..7883d6182 Binary files /dev/null and b/projects/Speed_Game/windows/images/sk.png differ diff --git a/projects/Speed_Game/windows/images/sl 2.png b/projects/Speed_Game/windows/images/sl 2.png new file mode 100644 index 000000000..f395562cf Binary files /dev/null and b/projects/Speed_Game/windows/images/sl 2.png differ diff --git a/projects/Speed_Game/windows/images/sl.png b/projects/Speed_Game/windows/images/sl.png new file mode 100644 index 000000000..f395562cf Binary files /dev/null and b/projects/Speed_Game/windows/images/sl.png differ diff --git a/projects/Speed_Game/windows/images/sm 2.png b/projects/Speed_Game/windows/images/sm 2.png new file mode 100644 index 000000000..df3ffe1eb Binary files /dev/null and b/projects/Speed_Game/windows/images/sm 2.png differ diff --git a/projects/Speed_Game/windows/images/sm.png b/projects/Speed_Game/windows/images/sm.png new file mode 100644 index 000000000..df3ffe1eb Binary files /dev/null and b/projects/Speed_Game/windows/images/sm.png differ diff --git a/projects/Speed_Game/windows/images/sn 2.png b/projects/Speed_Game/windows/images/sn 2.png new file mode 100644 index 000000000..69fe5ae9f Binary files /dev/null and b/projects/Speed_Game/windows/images/sn 2.png differ diff --git a/projects/Speed_Game/windows/images/sn.png b/projects/Speed_Game/windows/images/sn.png new file mode 100644 index 000000000..69fe5ae9f Binary files /dev/null and b/projects/Speed_Game/windows/images/sn.png differ diff --git a/projects/Speed_Game/windows/images/so 2.png b/projects/Speed_Game/windows/images/so 2.png new file mode 100644 index 000000000..365e52d96 Binary files /dev/null and b/projects/Speed_Game/windows/images/so 2.png differ diff --git a/projects/Speed_Game/windows/images/so.png b/projects/Speed_Game/windows/images/so.png new file mode 100644 index 000000000..365e52d96 Binary files /dev/null and b/projects/Speed_Game/windows/images/so.png differ diff --git a/projects/Speed_Game/windows/images/sr 2.png b/projects/Speed_Game/windows/images/sr 2.png new file mode 100644 index 000000000..922e8af2c Binary files /dev/null and b/projects/Speed_Game/windows/images/sr 2.png differ diff --git a/projects/Speed_Game/windows/images/sr.png b/projects/Speed_Game/windows/images/sr.png new file mode 100644 index 000000000..922e8af2c Binary files /dev/null and b/projects/Speed_Game/windows/images/sr.png differ diff --git a/projects/Speed_Game/windows/images/ss 2.png b/projects/Speed_Game/windows/images/ss 2.png new file mode 100644 index 000000000..d217e7590 Binary files /dev/null and b/projects/Speed_Game/windows/images/ss 2.png differ diff --git a/projects/Speed_Game/windows/images/ss.png b/projects/Speed_Game/windows/images/ss.png new file mode 100644 index 000000000..d217e7590 Binary files /dev/null and b/projects/Speed_Game/windows/images/ss.png differ diff --git a/projects/Speed_Game/windows/images/st 2.png b/projects/Speed_Game/windows/images/st 2.png new file mode 100644 index 000000000..b4f3333aa Binary files /dev/null and b/projects/Speed_Game/windows/images/st 2.png differ diff --git a/projects/Speed_Game/windows/images/st.png b/projects/Speed_Game/windows/images/st.png new file mode 100644 index 000000000..b4f3333aa Binary files /dev/null and b/projects/Speed_Game/windows/images/st.png differ diff --git a/projects/Speed_Game/windows/images/sv 2.png b/projects/Speed_Game/windows/images/sv 2.png new file mode 100644 index 000000000..dd2609813 Binary files /dev/null and b/projects/Speed_Game/windows/images/sv 2.png differ diff --git a/projects/Speed_Game/windows/images/sv.png b/projects/Speed_Game/windows/images/sv.png new file mode 100644 index 000000000..dd2609813 Binary files /dev/null and b/projects/Speed_Game/windows/images/sv.png differ diff --git a/projects/Speed_Game/windows/images/sx 2.png b/projects/Speed_Game/windows/images/sx 2.png new file mode 100644 index 000000000..e1a8d099f Binary files /dev/null and b/projects/Speed_Game/windows/images/sx 2.png differ diff --git a/projects/Speed_Game/windows/images/sx.png b/projects/Speed_Game/windows/images/sx.png new file mode 100644 index 000000000..e1a8d099f Binary files /dev/null and b/projects/Speed_Game/windows/images/sx.png differ diff --git a/projects/Speed_Game/windows/images/sy 2.png b/projects/Speed_Game/windows/images/sy 2.png new file mode 100644 index 000000000..127f94735 Binary files /dev/null and b/projects/Speed_Game/windows/images/sy 2.png differ diff --git a/projects/Speed_Game/windows/images/sy.png b/projects/Speed_Game/windows/images/sy.png new file mode 100644 index 000000000..127f94735 Binary files /dev/null and b/projects/Speed_Game/windows/images/sy.png differ diff --git a/projects/Speed_Game/windows/images/sz 2.png b/projects/Speed_Game/windows/images/sz 2.png new file mode 100644 index 000000000..d41b6a1df Binary files /dev/null and b/projects/Speed_Game/windows/images/sz 2.png differ diff --git a/projects/Speed_Game/windows/images/sz.png b/projects/Speed_Game/windows/images/sz.png new file mode 100644 index 000000000..d41b6a1df Binary files /dev/null and b/projects/Speed_Game/windows/images/sz.png differ diff --git a/projects/Speed_Game/windows/images/tc 2.png b/projects/Speed_Game/windows/images/tc 2.png new file mode 100644 index 000000000..d0c131484 Binary files /dev/null and b/projects/Speed_Game/windows/images/tc 2.png differ diff --git a/projects/Speed_Game/windows/images/tc.png b/projects/Speed_Game/windows/images/tc.png new file mode 100644 index 000000000..d0c131484 Binary files /dev/null and b/projects/Speed_Game/windows/images/tc.png differ diff --git a/projects/Speed_Game/windows/images/td 2.png b/projects/Speed_Game/windows/images/td 2.png new file mode 100644 index 000000000..b5b590d15 Binary files /dev/null and b/projects/Speed_Game/windows/images/td 2.png differ diff --git a/projects/Speed_Game/windows/images/td.png b/projects/Speed_Game/windows/images/td.png new file mode 100644 index 000000000..b5b590d15 Binary files /dev/null and b/projects/Speed_Game/windows/images/td.png differ diff --git a/projects/Speed_Game/windows/images/tf 2.png b/projects/Speed_Game/windows/images/tf 2.png new file mode 100644 index 000000000..8eca2a0dd Binary files /dev/null and b/projects/Speed_Game/windows/images/tf 2.png differ diff --git a/projects/Speed_Game/windows/images/tf.png b/projects/Speed_Game/windows/images/tf.png new file mode 100644 index 000000000..8eca2a0dd Binary files /dev/null and b/projects/Speed_Game/windows/images/tf.png differ diff --git a/projects/Speed_Game/windows/images/tg 2.png b/projects/Speed_Game/windows/images/tg 2.png new file mode 100644 index 000000000..09ee0368b Binary files /dev/null and b/projects/Speed_Game/windows/images/tg 2.png differ diff --git a/projects/Speed_Game/windows/images/tg.png b/projects/Speed_Game/windows/images/tg.png new file mode 100644 index 000000000..09ee0368b Binary files /dev/null and b/projects/Speed_Game/windows/images/tg.png differ diff --git a/projects/Speed_Game/windows/images/th 2.png b/projects/Speed_Game/windows/images/th 2.png new file mode 100644 index 000000000..ff42ccf5a Binary files /dev/null and b/projects/Speed_Game/windows/images/th 2.png differ diff --git a/projects/Speed_Game/windows/images/th.png b/projects/Speed_Game/windows/images/th.png new file mode 100644 index 000000000..ff42ccf5a Binary files /dev/null and b/projects/Speed_Game/windows/images/th.png differ diff --git a/projects/Speed_Game/windows/images/tj 2.png b/projects/Speed_Game/windows/images/tj 2.png new file mode 100644 index 000000000..ed0db20a6 Binary files /dev/null and b/projects/Speed_Game/windows/images/tj 2.png differ diff --git a/projects/Speed_Game/windows/images/tj.png b/projects/Speed_Game/windows/images/tj.png new file mode 100644 index 000000000..ed0db20a6 Binary files /dev/null and b/projects/Speed_Game/windows/images/tj.png differ diff --git a/projects/Speed_Game/windows/images/tk 2.png b/projects/Speed_Game/windows/images/tk 2.png new file mode 100644 index 000000000..95c082c86 Binary files /dev/null and b/projects/Speed_Game/windows/images/tk 2.png differ diff --git a/projects/Speed_Game/windows/images/tk.png b/projects/Speed_Game/windows/images/tk.png new file mode 100644 index 000000000..95c082c86 Binary files /dev/null and b/projects/Speed_Game/windows/images/tk.png differ diff --git a/projects/Speed_Game/windows/images/tl 2.png b/projects/Speed_Game/windows/images/tl 2.png new file mode 100644 index 000000000..d1f48aff6 Binary files /dev/null and b/projects/Speed_Game/windows/images/tl 2.png differ diff --git a/projects/Speed_Game/windows/images/tl.png b/projects/Speed_Game/windows/images/tl.png new file mode 100644 index 000000000..d1f48aff6 Binary files /dev/null and b/projects/Speed_Game/windows/images/tl.png differ diff --git a/projects/Speed_Game/windows/images/tm 2.png b/projects/Speed_Game/windows/images/tm 2.png new file mode 100644 index 000000000..c0ae220b3 Binary files /dev/null and b/projects/Speed_Game/windows/images/tm 2.png differ diff --git a/projects/Speed_Game/windows/images/tm.png b/projects/Speed_Game/windows/images/tm.png new file mode 100644 index 000000000..c0ae220b3 Binary files /dev/null and b/projects/Speed_Game/windows/images/tm.png differ diff --git a/projects/Speed_Game/windows/images/tn 2.png b/projects/Speed_Game/windows/images/tn 2.png new file mode 100644 index 000000000..1dd76623a Binary files /dev/null and b/projects/Speed_Game/windows/images/tn 2.png differ diff --git a/projects/Speed_Game/windows/images/tn.png b/projects/Speed_Game/windows/images/tn.png new file mode 100644 index 000000000..1dd76623a Binary files /dev/null and b/projects/Speed_Game/windows/images/tn.png differ diff --git a/projects/Speed_Game/windows/images/to 2.png b/projects/Speed_Game/windows/images/to 2.png new file mode 100644 index 000000000..fabdc04c2 Binary files /dev/null and b/projects/Speed_Game/windows/images/to 2.png differ diff --git a/projects/Speed_Game/windows/images/to.png b/projects/Speed_Game/windows/images/to.png new file mode 100644 index 000000000..fabdc04c2 Binary files /dev/null and b/projects/Speed_Game/windows/images/to.png differ diff --git a/projects/Speed_Game/windows/images/tr 2.png b/projects/Speed_Game/windows/images/tr 2.png new file mode 100644 index 000000000..2e010dd3d Binary files /dev/null and b/projects/Speed_Game/windows/images/tr 2.png differ diff --git a/projects/Speed_Game/windows/images/tr.png b/projects/Speed_Game/windows/images/tr.png new file mode 100644 index 000000000..2e010dd3d Binary files /dev/null and b/projects/Speed_Game/windows/images/tr.png differ diff --git a/projects/Speed_Game/windows/images/tt 2.png b/projects/Speed_Game/windows/images/tt 2.png new file mode 100644 index 000000000..46e99c844 Binary files /dev/null and b/projects/Speed_Game/windows/images/tt 2.png differ diff --git a/projects/Speed_Game/windows/images/tt.png b/projects/Speed_Game/windows/images/tt.png new file mode 100644 index 000000000..46e99c844 Binary files /dev/null and b/projects/Speed_Game/windows/images/tt.png differ diff --git a/projects/Speed_Game/windows/images/tv 2.png b/projects/Speed_Game/windows/images/tv 2.png new file mode 100644 index 000000000..bf69cfc2f Binary files /dev/null and b/projects/Speed_Game/windows/images/tv 2.png differ diff --git a/projects/Speed_Game/windows/images/tv.png b/projects/Speed_Game/windows/images/tv.png new file mode 100644 index 000000000..bf69cfc2f Binary files /dev/null and b/projects/Speed_Game/windows/images/tv.png differ diff --git a/projects/Speed_Game/windows/images/tw 2.png b/projects/Speed_Game/windows/images/tw 2.png new file mode 100644 index 000000000..131bef718 Binary files /dev/null and b/projects/Speed_Game/windows/images/tw 2.png differ diff --git a/projects/Speed_Game/windows/images/tw.png b/projects/Speed_Game/windows/images/tw.png new file mode 100644 index 000000000..131bef718 Binary files /dev/null and b/projects/Speed_Game/windows/images/tw.png differ diff --git a/projects/Speed_Game/windows/images/tz 2.png b/projects/Speed_Game/windows/images/tz 2.png new file mode 100644 index 000000000..9ee560fd3 Binary files /dev/null and b/projects/Speed_Game/windows/images/tz 2.png differ diff --git a/projects/Speed_Game/windows/images/tz.png b/projects/Speed_Game/windows/images/tz.png new file mode 100644 index 000000000..9ee560fd3 Binary files /dev/null and b/projects/Speed_Game/windows/images/tz.png differ diff --git a/projects/Speed_Game/windows/images/ua 2.png b/projects/Speed_Game/windows/images/ua 2.png new file mode 100644 index 000000000..b18613c41 Binary files /dev/null and b/projects/Speed_Game/windows/images/ua 2.png differ diff --git a/projects/Speed_Game/windows/images/ua.png b/projects/Speed_Game/windows/images/ua.png new file mode 100644 index 000000000..b18613c41 Binary files /dev/null and b/projects/Speed_Game/windows/images/ua.png differ diff --git a/projects/Speed_Game/windows/images/ug 2.png b/projects/Speed_Game/windows/images/ug 2.png new file mode 100644 index 000000000..a370c1616 Binary files /dev/null and b/projects/Speed_Game/windows/images/ug 2.png differ diff --git a/projects/Speed_Game/windows/images/ug.png b/projects/Speed_Game/windows/images/ug.png new file mode 100644 index 000000000..a370c1616 Binary files /dev/null and b/projects/Speed_Game/windows/images/ug.png differ diff --git a/projects/Speed_Game/windows/images/um 2.png b/projects/Speed_Game/windows/images/um 2.png new file mode 100644 index 000000000..837ce54a0 Binary files /dev/null and b/projects/Speed_Game/windows/images/um 2.png differ diff --git a/projects/Speed_Game/windows/images/um.png b/projects/Speed_Game/windows/images/um.png new file mode 100644 index 000000000..837ce54a0 Binary files /dev/null and b/projects/Speed_Game/windows/images/um.png differ diff --git a/projects/Speed_Game/windows/images/us 2.png b/projects/Speed_Game/windows/images/us 2.png new file mode 100644 index 000000000..837ce54a0 Binary files /dev/null and b/projects/Speed_Game/windows/images/us 2.png differ diff --git a/projects/Speed_Game/windows/images/us.png b/projects/Speed_Game/windows/images/us.png new file mode 100644 index 000000000..837ce54a0 Binary files /dev/null and b/projects/Speed_Game/windows/images/us.png differ diff --git a/projects/Speed_Game/windows/images/uy 2.png b/projects/Speed_Game/windows/images/uy 2.png new file mode 100644 index 000000000..fa52ee344 Binary files /dev/null and b/projects/Speed_Game/windows/images/uy 2.png differ diff --git a/projects/Speed_Game/windows/images/uy.png b/projects/Speed_Game/windows/images/uy.png new file mode 100644 index 000000000..fa52ee344 Binary files /dev/null and b/projects/Speed_Game/windows/images/uy.png differ diff --git a/projects/Speed_Game/windows/images/uz 2.png b/projects/Speed_Game/windows/images/uz 2.png new file mode 100644 index 000000000..7c6388e40 Binary files /dev/null and b/projects/Speed_Game/windows/images/uz 2.png differ diff --git a/projects/Speed_Game/windows/images/uz.png b/projects/Speed_Game/windows/images/uz.png new file mode 100644 index 000000000..7c6388e40 Binary files /dev/null and b/projects/Speed_Game/windows/images/uz.png differ diff --git a/projects/Speed_Game/windows/images/va 2.png b/projects/Speed_Game/windows/images/va 2.png new file mode 100644 index 000000000..7e1dff4ad Binary files /dev/null and b/projects/Speed_Game/windows/images/va 2.png differ diff --git a/projects/Speed_Game/windows/images/va.png b/projects/Speed_Game/windows/images/va.png new file mode 100644 index 000000000..7e1dff4ad Binary files /dev/null and b/projects/Speed_Game/windows/images/va.png differ diff --git a/projects/Speed_Game/windows/images/vc 2.png b/projects/Speed_Game/windows/images/vc 2.png new file mode 100644 index 000000000..1719e7a0d Binary files /dev/null and b/projects/Speed_Game/windows/images/vc 2.png differ diff --git a/projects/Speed_Game/windows/images/vc.png b/projects/Speed_Game/windows/images/vc.png new file mode 100644 index 000000000..1719e7a0d Binary files /dev/null and b/projects/Speed_Game/windows/images/vc.png differ diff --git a/projects/Speed_Game/windows/images/ve 2.png b/projects/Speed_Game/windows/images/ve 2.png new file mode 100644 index 000000000..fe1521544 Binary files /dev/null and b/projects/Speed_Game/windows/images/ve 2.png differ diff --git a/projects/Speed_Game/windows/images/ve.png b/projects/Speed_Game/windows/images/ve.png new file mode 100644 index 000000000..fe1521544 Binary files /dev/null and b/projects/Speed_Game/windows/images/ve.png differ diff --git a/projects/Speed_Game/windows/images/vg 2.png b/projects/Speed_Game/windows/images/vg 2.png new file mode 100644 index 000000000..33e329901 Binary files /dev/null and b/projects/Speed_Game/windows/images/vg 2.png differ diff --git a/projects/Speed_Game/windows/images/vg.png b/projects/Speed_Game/windows/images/vg.png new file mode 100644 index 000000000..33e329901 Binary files /dev/null and b/projects/Speed_Game/windows/images/vg.png differ diff --git a/projects/Speed_Game/windows/images/vi 2.png b/projects/Speed_Game/windows/images/vi 2.png new file mode 100644 index 000000000..72222a1fc Binary files /dev/null and b/projects/Speed_Game/windows/images/vi 2.png differ diff --git a/projects/Speed_Game/windows/images/vi.png b/projects/Speed_Game/windows/images/vi.png new file mode 100644 index 000000000..72222a1fc Binary files /dev/null and b/projects/Speed_Game/windows/images/vi.png differ diff --git a/projects/Speed_Game/windows/images/vn 2.png b/projects/Speed_Game/windows/images/vn 2.png new file mode 100644 index 000000000..2a3c51b84 Binary files /dev/null and b/projects/Speed_Game/windows/images/vn 2.png differ diff --git a/projects/Speed_Game/windows/images/vn.png b/projects/Speed_Game/windows/images/vn.png new file mode 100644 index 000000000..2a3c51b84 Binary files /dev/null and b/projects/Speed_Game/windows/images/vn.png differ diff --git a/projects/Speed_Game/windows/images/vu 2.png b/projects/Speed_Game/windows/images/vu 2.png new file mode 100644 index 000000000..fa3a9f613 Binary files /dev/null and b/projects/Speed_Game/windows/images/vu 2.png differ diff --git a/projects/Speed_Game/windows/images/vu.png b/projects/Speed_Game/windows/images/vu.png new file mode 100644 index 000000000..fa3a9f613 Binary files /dev/null and b/projects/Speed_Game/windows/images/vu.png differ diff --git a/projects/Speed_Game/windows/images/wf 2.png b/projects/Speed_Game/windows/images/wf 2.png new file mode 100644 index 000000000..2358bc41c Binary files /dev/null and b/projects/Speed_Game/windows/images/wf 2.png differ diff --git a/projects/Speed_Game/windows/images/wf.png b/projects/Speed_Game/windows/images/wf.png new file mode 100644 index 000000000..2358bc41c Binary files /dev/null and b/projects/Speed_Game/windows/images/wf.png differ diff --git a/projects/Speed_Game/windows/images/ws 2.png b/projects/Speed_Game/windows/images/ws 2.png new file mode 100644 index 000000000..7fd973b41 Binary files /dev/null and b/projects/Speed_Game/windows/images/ws 2.png differ diff --git a/projects/Speed_Game/windows/images/ws.png b/projects/Speed_Game/windows/images/ws.png new file mode 100644 index 000000000..7fd973b41 Binary files /dev/null and b/projects/Speed_Game/windows/images/ws.png differ diff --git a/projects/Speed_Game/windows/images/xk 2.png b/projects/Speed_Game/windows/images/xk 2.png new file mode 100644 index 000000000..60e1cac61 Binary files /dev/null and b/projects/Speed_Game/windows/images/xk 2.png differ diff --git a/projects/Speed_Game/windows/images/xk.png b/projects/Speed_Game/windows/images/xk.png new file mode 100644 index 000000000..60e1cac61 Binary files /dev/null and b/projects/Speed_Game/windows/images/xk.png differ diff --git a/projects/Speed_Game/windows/images/ye 2.png b/projects/Speed_Game/windows/images/ye 2.png new file mode 100644 index 000000000..ad007a679 Binary files /dev/null and b/projects/Speed_Game/windows/images/ye 2.png differ diff --git a/projects/Speed_Game/windows/images/ye.png b/projects/Speed_Game/windows/images/ye.png new file mode 100644 index 000000000..ad007a679 Binary files /dev/null and b/projects/Speed_Game/windows/images/ye.png differ diff --git a/projects/Speed_Game/windows/images/yt 2.png b/projects/Speed_Game/windows/images/yt 2.png new file mode 100644 index 000000000..dd9167436 Binary files /dev/null and b/projects/Speed_Game/windows/images/yt 2.png differ diff --git a/projects/Speed_Game/windows/images/yt.png b/projects/Speed_Game/windows/images/yt.png new file mode 100644 index 000000000..dd9167436 Binary files /dev/null and b/projects/Speed_Game/windows/images/yt.png differ diff --git a/projects/Speed_Game/windows/images/za 2.png b/projects/Speed_Game/windows/images/za 2.png new file mode 100644 index 000000000..c1648f7b6 Binary files /dev/null and b/projects/Speed_Game/windows/images/za 2.png differ diff --git a/projects/Speed_Game/windows/images/za.png b/projects/Speed_Game/windows/images/za.png new file mode 100644 index 000000000..c1648f7b6 Binary files /dev/null and b/projects/Speed_Game/windows/images/za.png differ diff --git a/projects/Speed_Game/windows/images/zm 2.png b/projects/Speed_Game/windows/images/zm 2.png new file mode 100644 index 000000000..29049f27f Binary files /dev/null and b/projects/Speed_Game/windows/images/zm 2.png differ diff --git a/projects/Speed_Game/windows/images/zm.png b/projects/Speed_Game/windows/images/zm.png new file mode 100644 index 000000000..29049f27f Binary files /dev/null and b/projects/Speed_Game/windows/images/zm.png differ diff --git a/projects/Speed_Game/windows/images/zw 2.png b/projects/Speed_Game/windows/images/zw 2.png new file mode 100644 index 000000000..71e461a61 Binary files /dev/null and b/projects/Speed_Game/windows/images/zw 2.png differ diff --git a/projects/Speed_Game/windows/images/zw.png b/projects/Speed_Game/windows/images/zw.png new file mode 100644 index 000000000..71e461a61 Binary files /dev/null and b/projects/Speed_Game/windows/images/zw.png differ diff --git a/projects/Speed_Game/windows/main.py b/projects/Speed_Game/windows/main.py new file mode 100644 index 000000000..3b5905808 --- /dev/null +++ b/projects/Speed_Game/windows/main.py @@ -0,0 +1,275 @@ +import tkinter.font as tkFont +from tkinter import messagebox +import pandas as pd +import os +import random +from PIL import Image, ImageTk +import time +import threading +from tkinter import messagebox + +try: + import tkinter as tk +except: + import tkinter as tk + +import pygame + + +class SampleApp(tk.Tk): + def __init__(self): + tk.Tk.__init__(self) + self._frame = None + self.switch_frame(StartPage) + + def switch_frame(self, frame_class): + new_frame = frame_class(self) + if self._frame is not None: + self._frame.destroy() + self._frame = new_frame + self._frame.pack() + + +class StartPage(tk.Frame): + def __init__(self, master): + tk.Frame.__init__(self, master) + + ImagePath = 'halloween.png' + canv = tk.Canvas(self, width=600, height=500, bg='white') + canv.pack(side='bottom') + self.img = ImageTk.PhotoImage(Image.open(ImagePath).resize((600, 500), Image.ANTIALIAS)) + canv.create_image(0, 0, anchor="nw", image=self.img) + + labelFont = tkFont.Font(family="Arial", size=40, weight="bold", slant="italic") + canv.create_text((600 // 2), (500 // 2) - 40, fill="white", text="Speed Game", font=labelFont) + + startBtnFont = tkFont.Font(family="Consolas", size=20) + startBtn = tk.Button(canv, text="START", font=startBtnFont, foreground="yellow", background="black", + relief="ridge", borderwidth=5, highlightbackground="yellow", + activebackground="yellow", activeforeground="black", + command=lambda: master.switch_frame(CategoryPage)) + canv.create_window((600 // 2), (500 // 2) + 100, window=startBtn) + + +class CategoryPage(tk.Frame): + def __init__(self, master): + tk.Frame.__init__(self, master) + + ImagePath = 'halloween.png' + canv = tk.Canvas(self, width=600, height=500, bg='white') + canv.pack(side='bottom') + self.img = ImageTk.PhotoImage(Image.open(ImagePath).resize((600, 500), Image.ANTIALIAS)) + canv.create_image(0, 0, anchor="nw", image=self.img) + + labelFont = tkFont.Font(family="Arial", size=40, weight="bold", slant="italic") + canv.create_text((600 // 2), (500 // 2) - 190, fill="white", text="Speed Game", font=labelFont) + + btnFont = tkFont.Font(family="Consolas", size=20) + countryBtn = tk.Button(self, text="country", foreground="yellow", + width=15, height=1, + background="black", font=btnFont, relief="ridge", + borderwidth=5, highlightbackground="yellow", + activebackground="yellow", activeforeground="black", + command=lambda: master.switch_frame(CountryPage)) + canv.create_window((600 // 2), (500 // 2) - 100, window=countryBtn) + + prevBtn = tk.Button(self, text="preve page", foreground="yellow", + width=15, height=1, + background="black", font=btnFont, relief="ridge", + borderwidth=5, highlightbackground="yellow", + activebackground="yellow", activeforeground="black", + command=lambda: master.switch_frame(StartPage)) + canv.create_window((600 // 2), (500 // 2) - 10, window=prevBtn) + + +class CountryPage(tk.Frame): + def __init__(self, master): + global pass_count, answer, country_img + global df, pass_window + tk.Frame.__init__(self, master) + + filename = random.choice(os.listdir("./images")) + code = filename.split(".")[0] + + # 엑셀에 없는 이미지일 경우 예외처리 + while code.upper() not in df.index: + filename = random.choice(os.listdir("./images")) + code = filename.split(".")[0] + + countryPath = "./images/" + filename + + print(countryPath) + print(df["country"][code.upper()]) + print(filename) + answer = df["country"][code.upper()] + + backgroundPath = 'halloween.png' + canv = tk.Canvas(self, width=600, height=500, bg='white') + canv.pack() + self.img1 = ImageTk.PhotoImage(Image.open(backgroundPath).resize((600, 500), Image.ANTIALIAS)) + canv.create_image(0, 0, anchor="nw", image=self.img1) + + titleFont = tkFont.Font(family="Arial", size=40, weight="bold", slant="italic") + canv.create_text((600 // 2), (500 // 2) - 190, fill="white", text="Country", font=titleFont) + + self.img2 = ImageTk.PhotoImage(Image.open(countryPath).resize((180, 130), Image.ANTIALIAS)) + country_img = canv.create_image(210, 130, anchor="nw", image=self.img2) + + labelFont = tkFont.Font(family="Arial", size=17, slant="italic") + BtnFont = tkFont.Font(family="Consolas", size=15) + + canv.create_text((600 // 2), (500 // 2) + 40, fill="white", text="answer", font=labelFont) + + input_text = tk.Entry(self, width=30) + canv.create_window((600 // 2), (500 // 2) + 70, window=input_text) + + check_btn = tk.Button(self, text="check", + width=10, height=1, font=BtnFont, foreground="yellow", + background="black", relief="ridge", + activebackground="yellow", activeforeground="black", + command=lambda: self.checkBtn_click(master, input_text.get(), answer, canv,country_img)) + canv.create_window((600 // 2) - 80, (500 // 2) + 140, window=check_btn) + + pass_btn = tk.Button(self, text="pass: " + str(pass_count) + "/3", + width=10, height=1, font=BtnFont, foreground="yellow", + background="black", relief="ridge", + activebackground="yellow", activeforeground="black", + command=lambda: self.passBtn_click(tk, canv, country_img)) + pass_window = canv.create_window((600 // 2) + 80, (500 // 2) + 140, window=pass_btn) + + self.num = 180 + mins, secs = divmod(self.num, 60) + timeformat = '{:02d}:{:02d}'.format(mins, secs) + TimerFont = tkFont.Font(family="Arial", size=30, weight="bold", slant="italic") + timer_text = canv.create_text(100, 100, fill="white", text=timeformat, font=TimerFont) + canv.after(1, self.count, canv, timer_text) + + def count(self, canv, timer_text): + mins, secs = divmod(self.num, 60) + timeformat = '{:02d}:{:02d}'.format(mins, secs) + canv.delete(timer_text) + TimerFont = tkFont.Font(family="Arial", size=30, weight="bold", slant="italic") + timer_text = canv.create_text(100, 100, fill="white", text=timeformat, font=TimerFont) + self.num -= 1 + if self.num < 0: + msgBox = tk.messagebox.askretrycancel('Exit App', 'Really Quit?') + if msgBox == True: + self.master.switch_frame(StartPage) + else: + self.master.switch_frame(FinishPage) + else: + canv.after(1000, self.count, canv, timer_text) + + # click check button + def checkBtn_click(self, master, user_text, check_answer, canv, check_img): + global answer, country_img + global correct_count, problem_count + problem_count -= 1 + + user_text = user_text.upper().replace(" ", "") + check_answer = check_answer.replace(" ", "") + + if (user_text == check_answer): + # correct + print('맞았습돠') + ImagePath = 'correct.png' + self.img3 = ImageTk.PhotoImage(Image.open(ImagePath).resize((100, 100), Image.ANTIALIAS)) + resultImage = canv.create_image(450, 30, anchor="nw", image=self.img3) + correct_count += 1 + else: + # wrong + print('틀렸슴돠') + ImagePath = 'wrong.png' + self.img4 = ImageTk.PhotoImage(Image.open(ImagePath).resize((100, 100), Image.ANTIALIAS)) + + resultImage = canv.create_image(450, 30, anchor="nw", image=self.img4) + + # resolve 15 problems + if problem_count <= 0: + master.switch_frame(FinishPage) + canv.after(1000, self.delete_img, canv, resultImage) + filename = random.choice(os.listdir("./images")) + code = filename.split(".")[0] + + # 엑셀에 없는 이미지일 경우 예외처리 + while code.upper() not in df.index: + filename = random.choice(os.listdir("./images")) + code = filename.split(".")[0] + + countryPath = "./images/" + filename + canv.after(1000,self.delete_img, canv, check_img) + self.img2 = ImageTk.PhotoImage(Image.open(countryPath).resize((180, 130), Image.ANTIALIAS)) + country_img = canv.create_image(210, 130, anchor="nw", image=self.img2) + answer = df["country"][code.upper()] + + print(answer) + + def passBtn_click(self, tk, canv, check_img): + global pass_count, pass_window + global country_img, answer + pass_count = pass_count - 1 + if (pass_count < 0): + print("패스 그만") + pass_count = 0 + tk.messagebox.showerror('Pass', 'You Don\'t have pass ticket!') + else: + filename = random.choice(os.listdir("./images")) + code = filename.split(".")[0] + + # 엑셀에 없는 이미지일 경우 예외처리 + while code.upper() not in df.index: + filename = random.choice(os.listdir("./images")) + code = filename.split(".")[0] + + countryPath = "./images/" + filename + canv.after(1000, self.delete_img, canv, check_img) + self.img2 = ImageTk.PhotoImage(Image.open(countryPath).resize((180, 130), Image.ANTIALIAS)) + country_img = canv.create_image(210, 130, anchor="nw", image=self.img2) + answer = df["country"][code.upper()] + + self.delete_img(canv, pass_window) + BtnFont = tkFont.Font(family="Consolas", size=15) + pass_btn = tk.Button(self, text="pass: " + str(pass_count) + "/3", + width=10, height=1, font=BtnFont, foreground="yellow", + background="black", relief="ridge", + activebackground="yellow", activeforeground="black", + command=lambda: self.passBtn_click(tk, canv, country_img)) + pass_window = canv.create_window((600 // 2) + 80, (500 // 2) + 140, window=pass_btn) + + def delete_img(self, canv, dele_img_name): + canv.delete(dele_img_name) + + +class FinishPage(tk.Frame): + def __init__(self, master): + tk.Frame.__init__(self, master) + ImagePath = 'halloween.png' + canv = tk.Canvas(self, width=600, height=500, bg='white') + canv.pack(side='bottom') + self.img = ImageTk.PhotoImage(Image.open(ImagePath).resize((600, 500), Image.ANTIALIAS)) + canv.create_image(0, 0, anchor="nw", image=self.img) + + labelFont = tkFont.Font(family="Arial", size=40, weight="bold") + canv.create_text((600 // 2), (500 // 2) - 50, fill="white", text="total score : " + str(correct_count)+ "/15", font=labelFont) + canv.create_text((600 // 2), (500 // 2) + 50, fill="white", text="Good Job!", font=labelFont) + + +if __name__ == "__main__": + pygame.init() + mySound = pygame.mixer.Sound("SpeedGameBgm.mp3") + mySound.play(-1) + pass_count = 3 + problem_count = 15 + correct_count = 0 + answer = 0 + country_img = 0 + pass_window = 0 + + df = pd.read_excel("./CountryCodeData.xlsx", index_col=0, names=["code", "country"]) + print(df["country"]["KR"]) + + app = SampleApp() + app.title("Speed Game") + + app.geometry('600x500+100+100') + app.mainloop() diff --git a/projects/Speed_Game/windows/wrong.png b/projects/Speed_Game/windows/wrong.png new file mode 100644 index 000000000..ac6f1bc3d Binary files /dev/null and b/projects/Speed_Game/windows/wrong.png differ diff --git a/projects/Spell_checker/README.md b/projects/Spell_checker/README.md new file mode 100644 index 000000000..50b49590f --- /dev/null +++ b/projects/Spell_checker/README.md @@ -0,0 +1,25 @@ +# Script Title + +Here, you can input any word and check if it is having a correct spelling or not. + +### Prerequisites + +First thing which you need to install is textblob library + +>pip install textblob + +You need to run this command in your terminal or your ide terminal. + +If you are using Jupyter Notebook you need to use the below command + +>import sys + +>!{sys.executable} -m pip install textblob + +### How to run the script + +You can first install the textblob library and then you can run the python script. + +## *Author Name* + +[Hariom1509](https://github.com/Hariom1509) diff --git a/projects/Spell_checker/spell_checker.py b/projects/Spell_checker/spell_checker.py new file mode 100644 index 000000000..a9dd8d964 --- /dev/null +++ b/projects/Spell_checker/spell_checker.py @@ -0,0 +1,12 @@ +from textblob import TextBlob # importing textblob library + +t = 1 +while t: + a = input("Enter the word to be checked:- ") # incorrect spelling + print("original text: "+str(a)) #printing original text + + b = TextBlob(a) #correcting the text + + # prints the corrected spelling + print("corrected text: "+str(b.correct())) + t = int(input("Try Again? 1 : 0 ")) diff --git a/projects/Split_File/README.md b/projects/Split_File/README.md index 8af06eb30..694957a38 100644 --- a/projects/Split_File/README.md +++ b/projects/Split_File/README.md @@ -1,3 +1,13 @@ # Split Files -##### Execute -`python split_files.py ` + +## *Author Name* +[phileinSophos](https://github.com/phileinSophos/) diff --git a/projects/Split_File/requirements.txt b/projects/Split_File/requirements.txt new file mode 100644 index 000000000..684864f2b --- /dev/null +++ b/projects/Split_File/requirements.txt @@ -0,0 +1 @@ +pandas==1.1.0 diff --git a/projects/Split_a_video_file_by_given_time_period/README.md b/projects/Split_a_video_file_by_given_time_period/README.md new file mode 100644 index 000000000..32371e99d --- /dev/null +++ b/projects/Split_a_video_file_by_given_time_period/README.md @@ -0,0 +1,24 @@ +## split a video file by given time period + +This script will split the video into two files when valid time periods are given. + + +### Requirements +Install python in the host system +Install [ffmpeg-python](https://github.com/kkroening/ffmpeg-python) + +``` +pip install ffmpeg-python +``` + +### usage + +```python +python videosplitter.py test.mp4 0 50 out1.mp4 out2.mp4 +``` +OR + +```python +python videosplitter.py -h +``` + diff --git a/projects/Split_a_video_file_by_given_time_period/requirements.txt b/projects/Split_a_video_file_by_given_time_period/requirements.txt new file mode 100644 index 000000000..2d88b4856 --- /dev/null +++ b/projects/Split_a_video_file_by_given_time_period/requirements.txt @@ -0,0 +1 @@ +ffmpeg==1.4 diff --git a/projects/Split_a_video_file_by_given_time_period/videosplitter.py b/projects/Split_a_video_file_by_given_time_period/videosplitter.py new file mode 100644 index 000000000..98546685b --- /dev/null +++ b/projects/Split_a_video_file_by_given_time_period/videosplitter.py @@ -0,0 +1,24 @@ +import ffmpeg +import argparse + + +parser = argparse.ArgumentParser(description='''Split A media file + into two chunks''') +parser.add_argument('inputfile', help="Input filename") +parser.add_argument('starttime', type=float, help="Start time in seconds") +parser.add_argument('endtime', type=float, help="End time in seconds") +parser.add_argument('outputfile1', help="Output filename") +parser.add_argument('outputfile2', help="Output filename") + +args = parser.parse_args() + +in1 = ffmpeg.input(args.inputfile) + +v1 = in1.filter('trim', start=float(args.starttime), end=(args.endtime)) +v2 = in1.filter('trim', start=float(args.endtime)) + +out1 = ffmpeg.output(v1, args.outputfile1) +out2 = ffmpeg.output(v2, args.outputfile2) + +out1.run() +out2.run() diff --git a/projects/split folder into subfolders/Readme.md b/projects/Split_folder_into_subfolders/Readme.md similarity index 100% rename from projects/split folder into subfolders/Readme.md rename to projects/Split_folder_into_subfolders/Readme.md diff --git a/projects/split folder into subfolders/split_and_copy.py b/projects/Split_folder_into_subfolders/split_and_copy.py similarity index 100% rename from projects/split folder into subfolders/split_and_copy.py rename to projects/Split_folder_into_subfolders/split_and_copy.py diff --git a/projects/Store_emails_in_csv/README.md b/projects/Store_emails_in_csv/README.md new file mode 100644 index 000000000..c0e0526b8 --- /dev/null +++ b/projects/Store_emails_in_csv/README.md @@ -0,0 +1,63 @@ +# Store emails in CSV + +This project contains a simple script to extract email messages +from an IMAP server. + +The messages are written to a simple four-column CSV file. + + +## Dependencies + +This depends on the BeautifulSoup library and `lxml` +for extracting text from HTML messages. + + +## Running the script + +You will need to have a file `credentials.txt` +with your IMAP server account name and password on separate lines. + +Gmail - and many other IMAP providers - +requires you to create a separate "application password" +to allow this code to run, so probably do that first. +Then put that password in `credentials.txt`. + +Then simply run + +``` +python store_emails.py +``` + +This generates `mails.csv` in the current directory. + +The generated CSV file contains the following fields for each message: + +* Date +* From (Sender) +* Subject +* Message text + + +## Development ideas + +This hardcodes the IMAP server for Gmail.com and the `"INBOX"` folder. +Perhaps this should be configured outside of the code +for easier customization. + +This brutally marks all messages as read. +Perhaps make it `PEEK` so as to not change the message flags. + +This will read everything in the `INBOX` folder. +It could be useful to make it remember which messages it has already seen, +and update a CSV file only with information from messages which have +arrived since the previous poll. + +It might be useful to be able to specify which messages to fetch, +instead of have it fetch everything every time. + +The exception handling is not a good example of how to do this properly. + + +## Author Name + +[Shiv Thakur](https://github.com/ShivSt) diff --git a/projects/Store_emails_in_csv/credentials.txt b/projects/Store_emails_in_csv/credentials.txt new file mode 100644 index 000000000..754728488 --- /dev/null +++ b/projects/Store_emails_in_csv/credentials.txt @@ -0,0 +1,2 @@ +yourEmailID +yourPassword \ No newline at end of file diff --git a/projects/Store_emails_in_csv/mails.csv b/projects/Store_emails_in_csv/mails.csv new file mode 100644 index 000000000..dfe5e598a --- /dev/null +++ b/projects/Store_emails_in_csv/mails.csv @@ -0,0 +1,5 @@ +Date,From,Subject,Text mail +"Mon, 10 Aug 2020 13:24:18 +0530",Sachin Raina ,For testing emails fetching from python imaplib and email libraries ,"Hi, this is body text and i am alson attaching an attachment. +Thanks" +"Mon, 10 Aug 2020 05:32:03 +0000","""shivguddu@ymail.com"" ",Testing purposes,"Hi check if you are able to get plain text out of thia one. +Thanks" diff --git a/projects/Store_emails_in_csv/requirements.txt b/projects/Store_emails_in_csv/requirements.txt new file mode 100644 index 000000000..6f83e94d2 --- /dev/null +++ b/projects/Store_emails_in_csv/requirements.txt @@ -0,0 +1,2 @@ +beautifulsoup4 +lxml diff --git a/projects/Store_emails_in_csv/store_emails.py b/projects/Store_emails_in_csv/store_emails.py new file mode 100644 index 000000000..ed0353117 --- /dev/null +++ b/projects/Store_emails_in_csv/store_emails.py @@ -0,0 +1,118 @@ +#!/usr/bin/env python + +import csv +import email +from email import policy +import imaplib +import logging +import os +import ssl + +from bs4 import BeautifulSoup + + +credential_path = "credentials.txt" +csv_path = "mails.csv" + +logger = logging.getLogger('imap_poller') + +host = "imap.gmail.com" +port = 993 +ssl_context = ssl.create_default_context() + + +def connect_to_mailbox(): + # get mail connection + mail = imaplib.IMAP4_SSL(host, port, ssl_context=ssl_context) + + with open(credential_path, "rt") as fr: + user = fr.readline().strip() + pw = fr.readline().strip() + mail.login(user, pw) + + # get mail box response and select a mail box + status, messages = mail.select("INBOX") + return mail, messages + + +# get plain text out of html mails +def get_text(email_body): + soup = BeautifulSoup(email_body, "lxml") + return soup.get_text(separator="\n", strip=True) + + +def write_to_csv(mail, writer, N, total_no_of_mails): + + for i in range(total_no_of_mails, total_no_of_mails - N, -1): + res, data = mail.fetch(str(i), "(RFC822)") + + response = data[0] + if isinstance(response, tuple): + msg = email.message_from_bytes(response[1], policy=policy.default) + + # get header data + email_subject = msg["subject"] + email_from = msg["from"] + email_date = msg["date"] + email_text = "" + + # if the email message is multipart + if msg.is_multipart(): + # iterate over email parts + for part in msg.walk(): + # extract content type of email + content_type = part.get_content_type() + content_disposition = str(part.get("Content-Disposition")) + try: + # get the email email_body + email_body = part.get_payload(decode=True) + if email_body: + email_text = get_text(email_body.decode('utf-8')) + except Exception as exc: + logger.warning('Caught exception: %r', exc) + if ( + content_type == "text/plain" + and "attachment" not in content_disposition + ): + # print text/plain emails and skip attachments + # print(email_text) + pass + elif "attachment" in content_disposition: + pass + + else: + # extract content type of email + content_type = msg.get_content_type() + # get the email email_body + email_body = msg.get_payload(decode=True) + if email_body: + email_text = get_text(email_body.decode('utf-8')) + + if email_text is not None: + # Write data in the csv file + row = [email_date, email_from, email_subject, email_text] + writer.writerow(row) + else: + logger.warning('%s:%i: No message extracted', "INBOX", i) + +def main(): + mail, messages = connect_to_mailbox() + + logging.basicConfig(level=logging.WARNING) + + total_no_of_mails = int(messages[0]) + # no. of latest mails to fetch + # set it equal to total_no_of_emails to fetch all mail in the inbox + N = 2 + + with open(csv_path, "wt", encoding="utf-8", newline="") as fw: + writer = csv.writer(fw) + writer.writerow(["Date", "From", "Subject", "Text mail"]) + try: + write_to_csv(mail, writer, N, total_no_of_mails) + except Exception as exc: + logger.warning('Caught exception: %r', exc) + + +if __name__ == "__main__": + main() diff --git a/projects/String_search_from_multiple_files/README.md b/projects/String_search_from_multiple_files/README.md new file mode 100644 index 000000000..8bf5ccd83 --- /dev/null +++ b/projects/String_search_from_multiple_files/README.md @@ -0,0 +1,15 @@ + +# String search from multiple files +Finds a file with the inputted string in the specified folder of your choice. + +### Prerequisites +Python3 is the only prerequisites! No external modules are needed to run. + +### How to run the script +In order to run this script you must have Python3 installed, not Python2. The command to run this is simply `python3 findstring.py`, and you'll be prompted with two questions, the string to search, and where to look. + +### Screenshot/GIF showing the sample use of the script +![GIF showing how to run](https://i.imgur.com/2y7HdGV.gif) + +## *Author Name* +[Mitesh](https://github.com/Mitesh2499) diff --git a/projects/string search from multiple files/files/file1.txt b/projects/String_search_from_multiple_files/files/file1.txt similarity index 99% rename from projects/string search from multiple files/files/file1.txt rename to projects/String_search_from_multiple_files/files/file1.txt index a42710942..9d6f07e84 100644 --- a/projects/string search from multiple files/files/file1.txt +++ b/projects/String_search_from_multiple_files/files/file1.txt @@ -1,2 +1,2 @@ -this is file one +this is file one this is file one this is file one this is file one this is file one this is file one this is file one \ No newline at end of file diff --git a/projects/string search from multiple files/files/file2.txt b/projects/String_search_from_multiple_files/files/file2.txt similarity index 100% rename from projects/string search from multiple files/files/file2.txt rename to projects/String_search_from_multiple_files/files/file2.txt diff --git a/projects/string search from multiple files/files/file3.txt b/projects/String_search_from_multiple_files/files/file3.txt similarity index 100% rename from projects/string search from multiple files/files/file3.txt rename to projects/String_search_from_multiple_files/files/file3.txt diff --git a/projects/string search from multiple files/files/folder1/hello.txt b/projects/String_search_from_multiple_files/files/folder1/hello.txt similarity index 100% rename from projects/string search from multiple files/files/folder1/hello.txt rename to projects/String_search_from_multiple_files/files/folder1/hello.txt diff --git a/projects/string search from multiple files/files/folder1/python.txt b/projects/String_search_from_multiple_files/files/folder1/python.txt similarity index 96% rename from projects/string search from multiple files/files/folder1/python.txt rename to projects/String_search_from_multiple_files/files/folder1/python.txt index e4d1b6f80..3d74e3f10 100644 --- a/projects/string search from multiple files/files/folder1/python.txt +++ b/projects/String_search_from_multiple_files/files/folder1/python.txt @@ -1,2 +1,2 @@ -this is python file +this is python file learn python \ No newline at end of file diff --git a/projects/string search from multiple files/findstring.py b/projects/String_search_from_multiple_files/findstring.py similarity index 95% rename from projects/string search from multiple files/findstring.py rename to projects/String_search_from_multiple_files/findstring.py index 9f8f0445b..9740c4269 100644 --- a/projects/string search from multiple files/findstring.py +++ b/projects/String_search_from_multiple_files/findstring.py @@ -1,33 +1,33 @@ -import os - -text = input("input text : ") - -path = input("path : ") - -# os.chdir(path) - - -def getfiles(path): - f = 0 - os.chdir(path) - files = os.listdir() - # print(files) - for file_name in files: - abs_path = os.path.abspath(file_name) - if os.path.isdir(abs_path): - getfiles(abs_path) - if os.path.isfile(abs_path): - f = open(file_name, "r") - if text in f.read(): - f = 1 - print(text + " found in ") - final_path = os.path.abspath(file_name) - print(final_path) - return True - - if f == 1: - print(text + " not found! ") - return False - - -getfiles(path) +import os + +text = input("input text : ") + +path = input("path : ") + +# os.chdir(path) + + +def getfiles(path): + f = 0 + os.chdir(path) + files = os.listdir() + # print(files) + for file_name in files: + abs_path = os.path.abspath(file_name) + if os.path.isdir(abs_path): + getfiles(abs_path) + if os.path.isfile(abs_path): + f = open(file_name, "r") + if text in f.read(): + f = 1 + print(text + " found in ") + final_path = os.path.abspath(file_name) + print(final_path) + return True + + if f == 1: + print(text + " not found! ") + return False + + +getfiles(path) diff --git a/projects/Terminal_Based_Hangman_Game/README.md b/projects/Terminal_Based_Hangman_Game/README.md new file mode 100644 index 000000000..5021589d8 --- /dev/null +++ b/projects/Terminal_Based_Hangman_Game/README.md @@ -0,0 +1,12 @@ +## Script Title +This project contains a simple python script to play terminal-based hangman game. + +## Prerequisites +None + +## How to run the script +- Run the hangman.py script. +- Start to guess the word. + +## Author Name +[Neoh Boon Yee](https://github.com/neohboonyee99) diff --git a/projects/Terminal_Based_Hangman_Game/hangman.py b/projects/Terminal_Based_Hangman_Game/hangman.py new file mode 100644 index 000000000..1ec8a9500 --- /dev/null +++ b/projects/Terminal_Based_Hangman_Game/hangman.py @@ -0,0 +1,183 @@ +import random +from json import load + + +# function to randomly get one word from words.py and convert the word to uppercase +def get_word(): + with open('words.json') as json_file: + data = load(json_file) + wordArray = data["word_list"] + word = random.choice(wordArray) + word = word.upper() + return word + + +# function to play the game +def play(word): + + # intialise variable + word_completion = "_" * len(word) # generate a line to show the number of word + guessed = False # indicate the status of guess + guessed_letters = [] # store guessed letters + guessed_words = [] # store guessed words + tries = 6 # user have 6 times of wrong + # display message and the format of the hangman + print("Let's play Hangman!") + print(display_hangman(tries)) + print(word_completion) + print("\n") + print("Length of the word: ", len(word)) + print("\n") + + # user can keep guessing when the tries is more than 0 and the answer is not found yet. + while not guessed and tries > 0: + + # Display message and ask for user input and convert it into uppercase + guess = input("Please guess a letter or the word: ").upper() + + # check the length of the user input and is it alpha or not + if len(guess) == 1 and guess.isalpha(): + + # display message when user guess the same letter twice + if guess in guessed_letters: + print("You already guessed the letter", guess) + + # display message and deduct the tries when user guess the wrong letter + elif guess not in word: + print(guess, "is not in the word.") + tries -= 1 + guessed_letters.append(guess) + + # dispay message and store the letter when the user guess the correct letter + else: + print("Good job,", guess, "is in the word!") + guessed_letters.append(guess) + word_as_list = list(word_completion) + + indices = [i for i, letter in enumerate(word) if letter == guess] + for index in indices: + word_as_list[index] = guess + + # join the guess word in the word_completion + word_completion = "".join(word_as_list) + + # if there is not blank space in word_completion change the status of guess to true + if "_" not in word_completion: + guessed = True + + # check the length of the user input and is it alpha or not + elif len(guess) == len(word) and guess.isalpha(): + # display message when user guess the same letter twice + if guess in guessed_words: + print("You already guessed the word", guess) + + # display message and deduct the tries when user guess the wrong letter + elif guess != word: + print(guess, "is not the word.") + tries -= 1 + guessed_words.append(guess) + + # change the status of guess + else: + guessed = True + word_completion = word + + # display error message for user + else: + print("Not a valid guess.") + + # display the format of hangman each time of guess + print(display_hangman(tries)) + print(word_completion) + print("\n") + print("Length of the word: ", len(word)) + print("\n") + + # if the variable of guess is true means user win the game + if guessed: + print("Congrats, you guessed the word! You win!") + # else means user lose the game. + else: + print("Sorry, you ran out of tries. The word was " + word + ". Maybe next time!") + + +# function to display the format of hangman +def display_hangman(tries): + stages = [""" + -------- + | | + | 0 + | \\|/ + | | + | / \\ + - + """, + """ + -------- + | | + | 0 + | \\|/ + | | + | / + - + """, + """ + -------- + | | + | 0 + | \\|/ + | | + | + - + """, + """ + -------- + | | + | 0 + | \\| + | | + | + - + """, + """ + -------- + | | + | 0 + | | + | | + | + - + """, + """ + -------- + | | + | 0 + | + | + | + - + """, + """ + -------- + | | + | + | + | + | + - + """ + ] + return stages[tries] + + +# main function to start the game +def main(): + word = get_word() + play(word) + while input("Play Again? (Y/N): ").upper() == "Y": + word = get_word() + play(word) + + +if __name__ == "__main__": + main() diff --git a/projects/Terminal_Based_Hangman_Game/words.json b/projects/Terminal_Based_Hangman_Game/words.json new file mode 100644 index 000000000..05ca108e8 --- /dev/null +++ b/projects/Terminal_Based_Hangman_Game/words.json @@ -0,0 +1,1419 @@ +{ + "word_list" : [ + "abandon", + "ability", + "abortion", + "above", + "abroad", + "absence", + "absolute", + "absorb", + "academic", + "accompany", + "accurate", + "achievement", + "acquire", + "action", + "addition", + "admire", + "adult", + "afford", + "afraid", + "afternoon", + "against", + "agent", + "agreement", + "agreement", + "almost", + "already", + "always", + "another", + "answer", + "apartment", + "apparently", + "appeal", + "appearance", + "apple", + "application", + "apply", + "appointment", + "appreciate", + "approach", + "appropriate", + "approval", + "approve", + "balance", + "ball", + "bank", + "barrel", + "barrier", + "baseball", + "basic", + "basketball", + "bathroom", + "battery", + "battle", + "beach", + "beautiful", + "bedroom", + "beginning", + "behavior", + "believe", + "belong", + "bench", + "birthday", + "breakfast", + "breathe", + "bridge", + "brilliant", + "brother", + "building", + "bullet", + "business", + "button", + "cabinet", + "cable", + "cake", + "calculate", + "call", + "camera", + "campaign", + "campus", + "cancer", + "candidate", + "capability", + "capacity", + "capital", + "captain", + "capture", + "carbon", + "career", + "carefully", + "carry", + "catch", + "category", + "celebrate", + "celebrity", + "center", + "century", + "ceremony", + "chairman", + "challenge", + "chamber", + "champion", + "championship", + "chance", + "channel", + "chapter", + "character", + "characteristic", + "charge", + "charity", + "chart", + "chase", + "cheap", + "check", + "cheese", + "chemical", + "chest", + "chicken", + "childhood", + "classroom", + "christmas", + "circle", + "citizen", + "climb", + "cloth", + "close", + "comfortable", + "comedy", + "combine", + "company", + "commander", + "communication", + "community", + "compare", + "competition", + "complain", + "comprehensive", + "conclude", + "confidence", + "confirm", + "connection", + "consider", + "constant", + "construction", + "contain", + "content", + "contact", + "control", + "convert", + "crowd", + "damage", + "dance", + "danger", + "dangerous", + "darkness", + "daughter", + "dealer", + "debate", + "decade", + "decide", + "decision", + "declare", + "decline", + "decrease", + "defeat", + "defend", + "defense", + "deficit", + "definition", + "degree", + "delivery", + "demand", + "democracy", + "demonstrate", + "department", + "dependent", + "depict", + "depression", + "describe", + "description", + "desert", + "deserve", + "design", + "designer", + "desire", + "desperate", + "despite", + "destroy", + "destruction", + "detect", + "determine", + "develop", + "development", + "device", + "dialogue", + "difference", + "difficulty", + "digital", + "dimension", + "direction", + "director", + "disability", + "disagree", + "disappear", + "disaster", + "discipline", + "discover", + "discrimination", + "discussion", + "disease", + "dismiss", + "display", + "distance", + "distinction", + "distinguish", + "distribute", + "diversity", + "division", + "doctor", + "domestic", + "dominant", + "double", + "draft", + "drawing", + "dream", + "dress", + "drink", + "drive", + "earnings", + "earth", + "eastern", + "economy", + "edition", + "editor", + "education", + "effective", + "efficiency", + "efficient", + "effort", + "eight", + "either", + "elderly", + "election", + "electricity", + "element", + "eliminate", + "elite", + "embrace", + "emergency", + "emission", + "emotion", + "emphasis", + "employee", + "empty", + "enable", + "encounter", + "encourage", + "enemy", + "energy", + "enforcement", + "engage", + "engine", + "engineer", + "enhance", + "enjoy", + "enormous", + "enough", + "ensure", + "enterprise", + "entertainment", + "entrance", + "environment", + "episode", + "equal", + "equipment", + "error", + "escape", + "especially", + "essay", + "essential", + "establish", + "estate", + "estimate", + "evaluation", + "event", + "eventually", + "everybody", + "everyday", + "everyone", + "everything", + "everywhere", + "evidence", + "evolution", + "evolve", + "exactly", + "examination", + "example", + "exceed", + "excellent", + "exception", + "exchange", + "exciting", + "executive", + "exercise", + "exhibition", + "existing", + "expansion", + "expectation", + "expensive", + "experience", + "experiment", + "expert", + "explanation", + "explode", + "explore", + "explosion", + "exposure", + "expression", + "extension", + "external", + "extra", + "extremely", + "fabric", + "facility", + "factor", + "factory", + "faculty", + "failure", + "fairly", + "faith", + "false", + "familiar", + "family", + "famous", + "fantasy", + "farmer", + "fashion", + "father", + "fault", + "favorite", + "feature", + "federal", + "feeling", + "fellow", + "female", + "fence", + "fiction", + "field", + "fifteen", + "fighter", + "figure", + "final", + "finance", + "finding", + "finger", + "finish", + "first", + "fishing", + "fitness", + "flame", + "flavor", + "flesh", + "flight", + "float", + "floor", + "flower", + "focus", + "follow", + "football", + "force", + "foreign", + "forest", + "forever", + "forget", + "formal", + "formula", + "fortune", + "forward", + "foundation", + "fourth", + "framework", + "freedom", + "freeze", + "frequency", + "fresh", + "friend", + "front", + "fruit", + "frustration", + "function", + "fundamental", + "funding", + "funeral", + "funny", + "furniture", + "furthermore", + "future", + "galaxy", + "gallery", + "garage", + "garden", + "garlic", + "gather", + "gender", + "general", + "generate", + "generation", + "genetic", + "gentleman", + "gently", + "gesture", + "ghost", + "giant", + "girlfriend", + "glance", + "glass", + "glove", + "golden", + "government", + "governor", + "graduate", + "grain", + "grand", + "grandfather", + "grandmother", + "grant", + "grass", + "grave", + "great", + "green", + "grocery", + "ground", + "group", + "growth", + "guarantee", + "guard", + "guess", + "guest", + "guideline", + "guilty", + "habitat", + "handful", + "handle", + "happen", + "happy", + "headline", + "headquarters", + "healthy", + "heart", + "heaven", + "heavy", + "height", + "helicopter", + "helpful", + "heritage", + "herself", + "highlight", + "highway", + "himself", + "history", + "holiday", + "homeless", + "honest", + "honey", + "honor", + "horizon", + "horror", + "horse", + "hospital", + "hotel", + "household", + "housing", + "however", + "human", + "humor", + "hundred", + "hungry", + "hunter", + "husband", + "hypothesis", + "ideal", + "identification", + "identity", + "ignore", + "illegal", + "illness", + "illustrate", + "image", + "imagination", + "immediately", + "immigration", + "impact", + "implement", + "implication", + "importance", + "impossible", + "impression", + "improvement", + "incentive", + "incident", + "include", + "income", + "incorporate", + "increase", + "incredible", + "indeed", + "independence", + "index", + "indicate", + "individual", + "industrial", + "infection", + "inflation", + "influence", + "information", + "ingredient", + "initial", + "injury", + "innocent", + "inquiry", + "inside", + "insight", + "insist", + "inspire", + "install", + "instance", + "instead", + "institution", + "instruction", + "instrument", + "insurance", + "intellectual", + "intelligence", + "intend", + "intense", + "intensity", + "intention", + "interaction", + "interest", + "international", + "interpretation", + "intervention", + "interview", + "introduction", + "invasion", + "investigation", + "investment", + "invite", + "involve", + "island", + "issue", + "itself", + "jacket", + "joint", + "journal", + "journey", + "judgment", + "juice", + "junior", + "justify", + "killer", + "kitchen", + "knife", + "knock", + "knowledge", + "label", + "labor", + "laboratory", + "landscape", + "language", + "large", + "later", + "latter", + "laugh", + "launch", + "lawsuit", + "lawyer", + "layer", + "leader", + "league", + "learning", + "least", + "leather", + "leave", + "legacy", + "legal", + "legend", + "legislation", + "legitimate", + "lemon", + "length", + "lesson", + "letter", + "level", + "liberal", + "library", + "license", + "lifestyle", + "lifetime", + "light", + "limitation", + "listen", + "literature", + "little", + "living", + "local", + "location", + "loose", + "lover", + "lower", + "lucky", + "lunch", + "machine", + "magazine", + "maintenance", + "majority", + "maker", + "makeup", + "management", + "manager", + "manner", + "manufacturing", + "margin", + "market", + "marriage", + "massive", + "master", + "match", + "material", + "matter", + "maybe", + "mayor", + "meaning", + "meanwhile", + "measurement", + "mechanism", + "media", + "medical", + "medication", + "medicine", + "medium", + "meeting", + "member", + "membership", + "memory", + "mental", + "mention", + "message", + "metal", + "meter", + "method", + "middle", + "might", + "military", + "million", + "minister", + "minority", + "minute", + "miracle", + "mirror", + "missile", + "mission", + "mistake", + "mixture", + "model", + "moderate", + "modern", + "modest", + "moment", + "money", + "monitor", + "month", + "moral", + "moreover", + "morning", + "mortgage", + "mother", + "motivation", + "motor", + "mount", + "mountain", + "mouse", + "mouth", + "movement", + "movie", + "multiple", + "murder", + "muscle", + "museum", + "music", + "mutual", + "myself", + "mystery", + "naked", + "narrative", + "narrow", + "national", + "native", + "natural", + "nature", + "nearby", + "necessary", + "negative", + "negotiate", + "negotiation", + "neighbor", + "neither", + "nervous", + "network", + "never", + "newspaper", + "night", + "nobody", + "noise", + "nomination", + "normal", + "north", + "nothing", + "notice", + "novel", + "nuclear", + "number", + "numerous", + "nurse", + "objective", + "obligation", + "observation", + "obtain", + "obviously", + "occasionally", + "occupation", + "occur", + "ocean", + "offensive", + "offer", + "office", + "often", + "ongoing", + "onion", + "online", + "opening", + "operation", + "opinion", + "opponent", + "opportunity", + "opposite", + "option", + "orange", + "order", + "ordinary", + "organic", + "organization", + "orientation", + "original", + "others", + "ourselves", + "outcome", + "outside", + "overall", + "overcome", + "overlook", + "owner", + "package", + "painful", + "painting", + "panel", + "paper", + "parent", + "parking", + "participant", + "participation", + "particular", + "partnership", + "party", + "passenger", + "passion", + "patch", + "patient", + "pattern", + "pause", + "payment", + "peace", + "penalty", + "people", + "pepper", + "perfect", + "performance", + "perhaps", + "period", + "permanent", + "permission", + "personality", + "personally", + "perspective", + "persuade", + "phenomenon", + "philosophy", + "phone", + "photograph", + "phrase", + "physical", + "piano", + "picture", + "piece", + "pilot", + "pitch", + "place", + "plane", + "planet", + "planning", + "plant", + "plastic", + "plate", + "platform", + "player", + "pleasure", + "plenty", + "pocket", + "poetry", + "point", + "police", + "policy", + "pollution", + "popular", + "population", + "porch", + "portion", + "portrait", + "portray", + "position", + "positive", + "possess", + "possibility", + "potato", + "potential", + "pound", + "poverty", + "powder", + "powerful", + "practical", + "prayer", + "precisely", + "predict", + "preference", + "pregnant", + "preparation", + "prescription", + "presentation", + "presidential", + "pressure", + "pretend", + "pretty", + "prevent", + "previously", + "price", + "pride", + "priest", + "primary", + "prime", + "principal", + "principle", + "print", + "priority", + "prisoner", + "privacy", + "private", + "probably", + "problem", + "procedure", + "process", + "produce", + "production", + "professional", + "profile", + "profit", + "program", + "project", + "prominent", + "promise", + "promote", + "prompt", + "proof", + "properly", + "property", + "proportion", + "proposal", + "prosecutor", + "prospect", + "protection", + "protein", + "protest", + "proud", + "provide", + "provision", + "psychology", + "public", + "publish", + "punishment", + "purchase", + "pursue", + "qualify", + "quality", + "quarter", + "question", + "quick", + "quiet", + "quite", + "quote", + "radical", + "radio", + "raise", + "range", + "rapid", + "rather", + "rating", + "ratio", + "reach", + "reaction", + "reader", + "ready", + "reality", + "realize", + "really", + "reason", + "recall", + "receive", + "recent", + "recipe", + "recognize", + "recommendation", + "record", + "recovery", + "recruit", + "reduction", + "reference", + "reflection", + "reform", + "refugee", + "refuse", + "regarding", + "regional", + "register", + "regular", + "reinforce", + "reject", + "relationship", + "relative", + "relax", + "release", + "relevant", + "relief", + "religion", + "religious", + "remaining", + "remarkable", + "remember", + "remind", + "remote", + "remove", + "repeat", + "replace", + "representative", + "reputation", + "request", + "requirement", + "research", + "resemble", + "reservation", + "resident", + "resistance", + "resolution", + "resolve", + "resort", + "resource", + "respect", + "responsibility", + "restaurant", + "restore", + "restriction", + "result", + "retain", + "retire", + "return", + "reveal", + "revenue", + "review", + "revolution", + "rhythm", + "rifle", + "right", + "river", + "romantic", + "rough", + "round", + "route", + "routine", + "running", + "rural", + "sacred", + "safety", + "salad", + "salary", + "sample", + "sanction", + "satellite", + "satisfaction", + "scale", + "scandal", + "scared", + "scenario", + "schedule", + "scheme", + "scholarship", + "science", + "scope", + "score", + "scream", + "screen", + "script", + "search", + "season", + "second", + "secretary", + "section", + "sector", + "secure", + "security", + "segment", + "seize", + "selection", + "senior", + "sensitive", + "sentence", + "separate", + "sequence", + "series", + "serious", + "service", + "session", + "setting", + "settle", + "seven", + "several", + "severe", + "sexual", + "shade", + "shadow", + "shake", + "shall", + "shape", + "share", + "sharp", + "sheet", + "shelf", + "shell", + "shelter", + "shift", + "shine", + "shirt", + "shock", + "shoot", + "shopping", + "shore", + "short", + "should", + "shoulder", + "shout", + "shower", + "shrug", + "sight", + "signal", + "significant", + "silence", + "silent", + "silver", + "similar", + "simple", + "simply", + "since", + "singer", + "single", + "sister", + "situation", + "skill", + "slave", + "sleep", + "slice", + "slide", + "slight", + "small", + "smart", + "smell", + "smile", + "smoke", + "smooth", + "soccer", + "social", + "society", + "software", + "solar", + "soldier", + "solid", + "solution", + "solve", + "somebody", + "somehow", + "someone", + "something", + "sometimes", + "somewhat", + "somewhere", + "sophisticated", + "sorry", + "sound", + "source", + "south", + "space", + "speaker", + "special", + "specialist", + "species", + "specific", + "speech", + "speed", + "spend", + "spirit", + "split", + "spokesman", + "sport", + "spread", + "spring", + "square", + "squeeze", + "stability", + "staff", + "stage", + "stair", + "stake", + "stand", + "standard", + "standing", + "stare", + "start", + "statement", + "station", + "statistics", + "status", + "steady", + "steal", + "steel", + "stick", + "still", + "stock", + "stomach", + "stone", + "storage", + "store", + "storm", + "story", + "straight", + "stranger", + "strategic", + "stream", + "street", + "strength", + "stress", + "stretch", + "strike", + "string", + "strip", + "stroke", + "strong", + "structure", + "struggle", + "student", + "studio", + "study", + "stuff", + "stupid", + "style", + "subject", + "submit", + "subsequent", + "substance", + "substantial", + "succeed", + "successful", + "sudden", + "suffer", + "sufficient", + "sugar", + "suggestion", + "suicide", + "summer", + "summit", + "supporter", + "suppose", + "surface", + "surgery", + "surprise", + "surround", + "survey", + "survival", + "suspect", + "sustain", + "swear", + "sweep", + "sweet", + "swing", + "switch", + "symbol", + "symptom", + "system", + "table", + "tablespoon", + "tactic", + "talent", + "target", + "taste", + "taxpayer", + "teacher", + "teaspoon", + "technical", + "technique", + "technology", + "teenager", + "telephone", + "telescope", + "television", + "temperature", + "temporary", + "tendency", + "tennis", + "tension", + "terrible", + "territory", + "testimony", + "thank", + "theater", + "their", + "theme", + "themselves", + "theory", + "therapy", + "therefore", + "these", + "thick", + "thing", + "thinking", + "third", + "thirty", + "those", + "though", + "thought", + "thousand", + "threaten", + "three", + "throat", + "throughout", + "throw", + "ticket", + "tight", + "tissue", + "title", + "tobacco", + "today", + "together", + "tomato", + "tomorrow", + "tongue", + "tonight", + "tooth", + "topic", + "total", + "touch", + "tough", + "tourist", + "tournament", + "toward", + "tower", + "trace", + "track", + "trade", + "traditional", + "traffic", + "tragedy", + "trail", + "train", + "transfer", + "transform", + "transformation", + "transition", + "translate", + "transportation", + "travel", + "treatment", + "treaty", + "tremendous", + "trend", + "trial", + "tribe", + "trick", + "troop", + "trouble", + "truck", + "truly", + "trust", + "truth", + "tunnel", + "twelve", + "twenty", + "twice", + "typical", + "ultimate", + "unable", + "uncle", + "under", + "understand", + "unfortunately", + "uniform", + "union", + "unique", + "universal", + "universe", + "university", + "unknown", + "unless", + "unlike", + "until", + "unusual", + "upper", + "urban", + "useful", + "usually", + "utility", + "vacation", + "valley", + "valuable", + "variable", + "variation", + "variety", + "various", + "vegetable", + "vehicle", + "venture", + "version", + "versus", + "vessel", + "veteran", + "victim", + "victory", + "video", + "viewer", + "village", + "violation", + "virtually", + "virtue", + "virus", + "visible", + "visitor", + "vital", + "voice", + "volume", + "volunteer", + "vulnerable", + "wander", + "warning", + "waste", + "watch", + "water", + "wealthy", + "weapon", + "weather", + "wedding", + "weekend", + "weekly", + "weight", + "welcome", + "welfare", + "western", + "whatever", + "wheel", + "whenever", + "whether", + "which", + "while", + "whisper", + "white", + "whole", + "whose", + "widespread", + "willing", + "window", + "winner", + "winter", + "wisdom", + "withdraw", + "within", + "without", + "witness", + "woman", + "wonderful", + "wooden", + "worker", + "workshop", + "world", + "worried", + "worth", + "would", + "wound", + "write", + "wrong", + "yellow", + "yesterday", + "yield", + "young", + "yourself", + "youth"]} diff --git a/projects/Terminal Progress Bar with Images Resizing/Readme.md b/projects/Terminal_progress_bar_with_images_resizing/Readme.md similarity index 91% rename from projects/Terminal Progress Bar with Images Resizing/Readme.md rename to projects/Terminal_progress_bar_with_images_resizing/Readme.md index ddb70d6a4..0425dfed9 100644 --- a/projects/Terminal Progress Bar with Images Resizing/Readme.md +++ b/projects/Terminal_progress_bar_with_images_resizing/Readme.md @@ -1,12 +1,12 @@ -# Terminal Progress bar with image Resizing - -Here I just take example of image resizing for displaying progress bar. -when we convert lots of images at time we can use progress bar to show how many images are resized. - -### For this purpose I am using tqdm librabry -` pip install tqdm ` - -This Library is for showing progress bar - -### For Resizing images -` pip install Pillow ` \ No newline at end of file +# Terminal Progress bar with image Resizing + +Here I just take example of image resizing for displaying progress bar. +when we convert lots of images at time we can use progress bar to show how many images are resized. + +### For this purpose I am using tqdm librabry +` pip install tqdm ` + +This Library is for showing progress bar + +### For Resizing images +` pip install Pillow ` diff --git a/projects/Terminal Progress Bar with Images Resizing/progress_bar_ with_images_resizing.py b/projects/Terminal_progress_bar_with_images_resizing/progress_bar_ with_images_resizing.py similarity index 96% rename from projects/Terminal Progress Bar with Images Resizing/progress_bar_ with_images_resizing.py rename to projects/Terminal_progress_bar_with_images_resizing/progress_bar_ with_images_resizing.py index e1f62d9d4..fed49dedd 100644 --- a/projects/Terminal Progress Bar with Images Resizing/progress_bar_ with_images_resizing.py +++ b/projects/Terminal_progress_bar_with_images_resizing/progress_bar_ with_images_resizing.py @@ -1,30 +1,30 @@ -from tqdm import tqdm -from PIL import Image -import os -from time import sleep - - -def Resize_image(size, image): - if os.path.isfile(image): - try: - im = Image.open(image) - im.thumbnail(size, Image.ANTIALIAS) - im.save("resize/" + str(image) + ".jpg") - except Exception as ex: - print(f"Error: {str(ex)} to {image}") - - -path = input("Enter Path to images : ") -size = input("Size Height , Width : ") -size = tuple(map(int, size.split(","))) - -os.chdir(path) - -list_images = os.listdir(path) -if "resize" not in list_images: - os.mkdir("resize") - -for image in tqdm(list_images, desc="Resizing Images"): - Resize_image(size, image) - sleep(0.1) -print("Resizing Completed!") +from tqdm import tqdm +from PIL import Image +import os +from time import sleep + + +def Resize_image(size, image): + if os.path.isfile(image): + try: + im = Image.open(image) + im.thumbnail(size, Image.ANTIALIAS) + im.save("resize/" + str(image) + ".jpg") + except Exception as ex: + print(f"Error: {str(ex)} to {image}") + + +path = input("Enter Path to images : ") +size = input("Size Height , Width : ") +size = tuple(map(int, size.split(","))) + +os.chdir(path) + +list_images = os.listdir(path) +if "resize" not in list_images: + os.mkdir("resize") + +for image in tqdm(list_images, desc="Resizing Images"): + Resize_image(size, image) + sleep(0.1) +print("Resizing Completed!") diff --git a/projects/Terminal_progress_bar_with_images_resizing/requirements.txt b/projects/Terminal_progress_bar_with_images_resizing/requirements.txt new file mode 100644 index 000000000..07b559be1 --- /dev/null +++ b/projects/Terminal_progress_bar_with_images_resizing/requirements.txt @@ -0,0 +1,2 @@ +tqdm==4.48.2 +PIL==1.1.6 diff --git a/projects/Text_to_speech/README.md b/projects/Text_to_speech/README.md new file mode 100644 index 000000000..f12786664 --- /dev/null +++ b/projects/Text_to_speech/README.md @@ -0,0 +1,17 @@ +# txtToSpeech.py + +When executed the text from abc.txt will be turned into an mp3, saved and then played on your device. + +### Prerequisites +- abc.txt with your text +- the gTTS==2.1.1 module (pip install gTTS to download) +- the os module (pip install os) + +### How to run the script +Write your desired text into the abc.txt file +then execute the txtToSpeech.py file. This can be +done by typing 'python txtToSpeech.py' into your Terminal. + + +## *Author Name* +[Sergej Dikun](https://github.com/Serhazor) diff --git a/projects/Text_to_speech/abc.txt b/projects/Text_to_speech/abc.txt new file mode 100644 index 000000000..22ae7650a --- /dev/null +++ b/projects/Text_to_speech/abc.txt @@ -0,0 +1 @@ +Thanks to Gail Cleaver, Beth Barrack, Bingo Nightly, Emily Webber and Sharon Counts. Finally, special thanks to Casey Cromwell. Radio Lab is produced by WNYC New York public radio, and distributed by NPR, National Public Radio. \ No newline at end of file diff --git a/projects/Text_to_speech/requirements.txt b/projects/Text_to_speech/requirements.txt new file mode 100644 index 000000000..08054fdda --- /dev/null +++ b/projects/Text_to_speech/requirements.txt @@ -0,0 +1 @@ +gTTS==2.1.1 diff --git a/projects/Text_to_speech/txtToSpeech.py b/projects/Text_to_speech/txtToSpeech.py new file mode 100644 index 000000000..1eebdd49a --- /dev/null +++ b/projects/Text_to_speech/txtToSpeech.py @@ -0,0 +1,9 @@ +from gtts import gTTS +import os +file = open("abc.txt", "r").read() + +speech = gTTS(text=file, lang='en', slow=False) +speech.save("voice.mp3") +os.system("voice.mp3") + +#print(file) \ No newline at end of file diff --git a/projects/Text_to_speech/voice.mp3 b/projects/Text_to_speech/voice.mp3 new file mode 100644 index 000000000..fb1db18cf Binary files /dev/null and b/projects/Text_to_speech/voice.mp3 differ diff --git a/projects/Textfile analysis/README.md b/projects/Textfile_analysis/README.md similarity index 100% rename from projects/Textfile analysis/README.md rename to projects/Textfile_analysis/README.md diff --git a/projects/Textfile analysis/textfile_analysis.py b/projects/Textfile_analysis/textfile_analysis.py similarity index 98% rename from projects/Textfile analysis/textfile_analysis.py rename to projects/Textfile_analysis/textfile_analysis.py index d606846b3..86d807a65 100644 --- a/projects/Textfile analysis/textfile_analysis.py +++ b/projects/Textfile_analysis/textfile_analysis.py @@ -3,7 +3,6 @@ import sys import collections import string -import re script_name = sys.argv[0] diff --git a/projects/Tic_tac_toe/README.md b/projects/Tic_tac_toe/README.md new file mode 100644 index 000000000..ee80af16f --- /dev/null +++ b/projects/Tic_tac_toe/README.md @@ -0,0 +1,26 @@ +# Tic Tac Toe + +## Description + +A python based 2-player Tic Tac Toe game. +It takes input of the two players. +The two players are named as X and O +and will enter alternating moves in attempt to win the game. + +## Prerequisites + +Use any Python online compiler of download python IDE from https://www.python.org/ + +## How to run + +Just run + +```sh +python tic_tac_toe.py +``` + + + +## Authors +- [Erfan Saberi](https://github.com/erfansaberi) +- [Austin Jackson](https://github.com/vesche) \ No newline at end of file diff --git a/projects/Tic_tac_toe/tic_tac_toe.py b/projects/Tic_tac_toe/tic_tac_toe.py new file mode 100644 index 000000000..1e53cd03e --- /dev/null +++ b/projects/Tic_tac_toe/tic_tac_toe.py @@ -0,0 +1,35 @@ +squares = [' ']*9 +players = 'XO' +board = ''' + 0 1 2 + {0} | {1} | {2} + ----------- +3 {3} | {4} | {5} 5 + ----------- + {6} | {7} | {8} + 6 7 8 +''' +win_conditions = [ + (0, 1, 2), (3, 4, 5), (6, 7, 8), # horizontals + (0, 3, 6), (1, 4, 7), (2, 5, 8), # verticals + (0, 4, 8), (2, 4, 6) # diagonals +] + +def check_win(player): + for a, b, c in win_conditions: + if {squares[a], squares[b], squares[c]} == {player}: + return True + +while True: + print(board.format(*squares)) + if check_win(players[1]): + print(f'{players[1]} is the winner!') + break + if ' ' not in squares: + print('Cats game!') + break + move = input(f'{players[0]} to move [0-8] > ') + if not move.isdigit() or not 0 <= int(move) <= 8 or squares[int(move)] != ' ': + print('Invalid move!') + continue + squares[int(move)], players = players[0], players[::-1] diff --git a/projects/Tic_tac_toe_with_ai/.replit b/projects/Tic_tac_toe_with_ai/.replit new file mode 100644 index 000000000..d9ee94c8d --- /dev/null +++ b/projects/Tic_tac_toe_with_ai/.replit @@ -0,0 +1,2 @@ +language = "python3" +run = "python tic-tac-toe-AI.py" diff --git a/projects/Tic_tac_toe_with_ai/README.md b/projects/Tic_tac_toe_with_ai/README.md new file mode 100644 index 000000000..e5ef2b38d --- /dev/null +++ b/projects/Tic_tac_toe_with_ai/README.md @@ -0,0 +1,44 @@ +# Tic-Tac-Toe-AI + +[![Run on Repl.it](https://repl.it/badge/github/tusharnankani/Tic-Tac-Toe-AI)](https://repl.it/github/tusharnankani/Tic-Tac-Toe-AI) + +Adding a simple AI to the Tic-Tac-Toe Game: + +## 3 modes: +- Player vs. Player (2 - player mode) +- Player vs. AI (1 - player mode) +- AI vs. AI (*for fun*) + +### To view this project on a live terminal: +- Click [here.](https://repl.it/github/tusharnankani/Tic-Tac-Toe-AI) +- And then, click on Run! + + +## *References* +#### *Logic* +- Optimal Tic Tac Toe Moves + + +![tic_tac_toe](https://user-images.githubusercontent.com/61280281/91558896-ba479700-e954-11ea-8415-3759e555ad23.png) + +- Videos: + - [Tic Tac Toe - Never Lose (Usually Win)](https://www.youtube.com/watch?v=5n2aQ3UQu9Y&feature=youtu.be) + - [Tic Tac Toe AI with Minimax Algorithm](https://www.youtube.com/watch?v=trKjYdBASyQ&feature=youtu.be) + - [Minimax Algorithm in Game Theory](https://www.geeksforgeeks.org/minimax-algorithm-in-game-theory-set-1-introduction/) + - [Algorithms Explained – minimax and alpha-beta pruning](https://www.youtube.com/watch?v=l-hh51ncgDI) + + +## DEMO: +#### The board will be printed out every time a player makes a move. +The board will look like this! +The positions of this 3 x 3 board is same as the **keypad on the right side of your key board**. + + +#### You just have to input the position(1-9). +![1](https://user-images.githubusercontent.com/61280281/81096720-799abc80-8f24-11ea-97cc-de65614cbd92.png) + + +# *Author*: +- [Tushar Nankani](https://github.com/tusharnankani) (tusharnankani, tusharnankani3@gmail.com) +- [Github](https://www.github.com/tusharnankani) +- [LinkedIn](https://www.linkedin.com/in/tusharnankani) diff --git a/projects/Tic_tac_toe_with_ai/tic-tac-toe-AI.py b/projects/Tic_tac_toe_with_ai/tic-tac-toe-AI.py new file mode 100644 index 000000000..64aebfa96 --- /dev/null +++ b/projects/Tic_tac_toe_with_ai/tic-tac-toe-AI.py @@ -0,0 +1,346 @@ +#### TIC TAC TOE #### + +#START; + + +#FUNCTIONS; + +def default(): + #To be printed as Default; + print("\nWelcome! Let's play TIC TAC TOE!\n") + + +def rules(): + print("The board will look like this!") + print("The positions of this 3 x 3 board is same as the right side of your key board.\n") + print(" 7 | 8 | 9 ") + print("-----------") + print(" 4 | 5 | 6 ") + print("-----------") + print(" 1 | 2 | 3 ") + print("\nYou just have to input the position(1-9).") + + +def play(): + #Asking if the player is ready; + return input("\nAre you ready to play the game? Enter [Y]es or [N]o.\t").upper().startswith('Y') + + +def names(): + #Player names input; + + p1_name=input("\nEnter NAME of PLAYER 1:\t").capitalize() + p2_name=input("Enter NAME of PLAYER 2:\t").capitalize() + return (p1_name, p2_name) + + +def choice(): + #Player choice input; + p1_choice = ' ' + p2_choice = ' ' + while p1_choice != 'X' or p1_choice != 'O': #while loop; if the entered value isn't X or O; + + #WHILE LOOP STARTS + + p1_choice = input(f"\n{p1_name}, Do you want to be X or O?\t")[0].upper() + #The input above has [0].upper() in the end; + #So the user can enter x, X, xxxx or XXX; the input will always be taken as X; + #Thereby, increasing the user input window; + + if p1_choice == 'X' or p1_choice == 'O': + #if entered value is X or O; get out of the loop; + break + print("INVALID INPUT! Please Try Again!") + #if the entered value isn't X or O, re-run the while loop; + + #WHILE LOOP ENDS + #Assigning the value to p2 and then diplaying the values; + if p1_choice == 'X': + p2_choice = 'O' + elif p1_choice == 'O': + p2_choice = 'X' + + return (p1_choice, p2_choice) + + + +def first_player(): + #This function will randomly decide who will go first; + import random + return random.choice((0, 1)) + + +def display_board(board, avail): + print(" " + " {} | {} | {} ".format(board[7],board[8],board[9]) + " " + " {} | {} | {} ".format(avail[7],avail[8],avail[9])) + print(" " + "-----------" + " " + "-----------") + print(" " + " {} | {} | {} ".format(board[4],board[5],board[6]) + " " + " {} | {} | {} ".format(avail[4],avail[5],avail[6])) + print(" " + "-----------" + " " + "-----------") + print(" " + " {} | {} | {} ".format(board[1],board[2],board[3]) + " " + " {} | {} | {} ".format(avail[1],avail[2],avail[3])) + + +def player_choice(board, name, choice): + position = 0 + #Initialising position as 0^; so it passes through the while loop; + while position not in [1,2,3,4,5,6,7,8,9] or not space_check(board, position): + position = int(input(f'\n{name} ({choice}), Choose your next position: (1-9) \t')) + + if position not in [1,2,3,4,5,6,7,8,9] or not space_check(board, position) or position == "": + #To check whether the given position is in the set [1-9] or whether it is empty or occupied; + print(f"INVALID INPUT. Please Try Again!\n") + print("\n") + return position + + +# THIS IS THEFUNCTION WHERE AI IS ADDED: +def CompAI(board, name, choice): + position = 0 + possibilities = [x for x, letter in enumerate(board) if letter == ' ' and x != 0] + + # including both X and O, since if computer will win, he will place a choice there, but if the component will win --> we have to block that move + for let in ['O', 'X']: + for i in possibilities: + # Creating a copy of the board everytime, placing the move and checking if it wins; + # Creating a copy like this and not this boardCopy = board, since changes to boardCopy changes the original board; + boardCopy = board[:] + boardCopy[i] = let + if(win_check(boardCopy, let)): + position = i + return position + + openCorners = [x for x in possibilities if x in [1, 3, 7, 9]] + + if len(openCorners) > 0: + position = selectRandom(openCorners) + return position + + if 5 in possibilities: + position = 5 + return position + + openEdges = [x for x in possibilities if x in [2, 4, 6, 8]] + + if len(openEdges) > 0: + position = selectRandom(openEdges) + return position + + + +def selectRandom(board): + import random + ln = len(board) + r = random.randrange(0,ln) + return board[r] + + +def place_marker(board, avail, choice, position): + #To mark/replace the position on the board list; + board[position] = choice + avail[position] = ' ' + + +def space_check(board, position): + #To check whether the given position is empty or occupied; + return board[position] == ' ' + + +def full_board_check(board): + #To check if the board is full, then the game is a draw; + for i in range(1,10): + if space_check(board, i): + return False + return True + + +def win_check(board, choice): + #To check if one of the following patterns are true; then the respective player has won!; + + #HORIZONTAL CHECK; + return ( + ( board[1] == choice and board[2] == choice and board[3] == choice ) + or ( board[4] == choice and board[5] == choice and board[6] == choice ) + or ( board[7] == choice and board[8] == choice and board[9] == choice ) + #VERTICAL CHECK; + or ( board[1] == choice and board[4] == choice and board[7] == choice ) + or ( board[2] == choice and board[5] == choice and board[8] == choice ) + or ( board[3] == choice and board[6] == choice and board[9] == choice ) + #DIAGONAL CHECK; + or ( board[1] == choice and board[5] == choice and board[9] == choice ) + or ( board[3] == choice and board[5] == choice and board[7] == choice ) ) + +def delay(mode): + if mode == 2: + import time + time.sleep(2) + +def replay(): + #If the users want to play the game again? + return input('\nDo you want to play again? Enter [Y]es or [N]o: ').lower().startswith('y') + + + + + +#MAIN PROGRAM STARTS; + +print("\n\t\t NAMASTE! \n") +input("Press ENTER to start!") + +default() +rules() + + +while True: + #################################################################################### + + #Creating the board as a list; to be kept replacing it with user input; + theBoard = [' ']*10 + + #Creating the available options on the board: + available = [str(num) for num in range(0,10)] # a List Comprehension + #available = '0123456789' + + + + print("\n[0]. Player vs. Computer") + print("[1]. Player vs. Player") + print("[2]. Computer vs. Computer") + mode = int(input("\nSelect an option [0]-[2]: ")) + if mode == 1: + #Asking Names; + p1_name, p2_name = names() + # Asking Choices; Printing choices; X or O; + p1_choice, p2_choice = choice() + print(f"\n{p1_name}:", p1_choice) + print(f"{p2_name}:", p2_choice) + + elif mode == 0: + p1_name = input("\nEnter NAME of PLAYER who will go against the Computer:\t").capitalize() + p2_name = "Computer" + # Asking Choices; Printing choices; X or O; + p1_choice, p2_choice = choice() + print(f"\n{p1_name}:", p1_choice) + print(f"{p2_name}:", p2_choice) + + else: + p1_name = "Computer1" + p2_name = "Computer2" + p1_choice, p2_choice = "X", "O" + print(f"\n{p1_name}:", p1_choice) + print(f"\n{p2_name}:", p2_choice) + + + + #Printing randomly who will go first; + if first_player(): + turn = p2_name + else: + turn = p1_name + + print(f"\n{turn} will go first!") + + #Asking the user, if ready to play the game; Output will be True or False; + if(mode == 2): + ent = input("\nThis is going to be fast! Press Enter for the battle to begin!\n") + play_game = 1 + else: + play_game = play() + + while play_game: + + ############################ + #PLAYER1 + if turn == p1_name: + + #Displaying the board; + display_board(theBoard, available) + + #Position of the input; + if mode != 2: + position = player_choice(theBoard, p1_name, p1_choice) + else: + position = CompAI(theBoard, p1_name, p1_choice) + print(f'\n{p1_name} ({p1_choice}) has placed on {position}\n') + + #Replacing the ' ' at *position* to *p1_choice* in *theBoard* list; + place_marker(theBoard, available, p1_choice, position) + + #To check if Player 1 has won after the current input; + if win_check(theBoard, p1_choice): + display_board(theBoard, available) + print("~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~") + if(mode): + print(f'\n\nCONGRATULATIONS {p1_name}! YOU HAVE WON THE GAME!\n\n') + else: + print('\n\nTHE Computer HAS WON THE GAME!\n\n') + print("~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~") + play_game = False + + else: + #To check if the board is full; if yes, the game is a draw; + if full_board_check(theBoard): + display_board(theBoard, available) + print("~~~~~~~~~~~~~~~~~~") + print('\nThe game is a DRAW!\n') + print("~~~~~~~~~~~~~~~~~~") + break + #If none of the above is possible, next turn of Player 2; + else: + turn = p2_name + + + ############################ + #PLAYER2 + elif turn == p2_name: + + #Displaying the board; + display_board(theBoard, available) + + #Position of the input; + if(mode == 1): + position = player_choice(theBoard, p2_name, p2_choice) + else: + position = CompAI(theBoard, p2_name, p2_choice) + print(f'\n{p2_name} ({p2_choice}) has placed on {position}\n') + + #Replacing the ' ' at *position* to *p2_choice* in *theBoard* list; + place_marker(theBoard, available, p2_choice, position) + + #To check if Player 2 has won after the current input; + if win_check(theBoard, p2_choice): + display_board(theBoard, available) + print("~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~") + if(mode): + print(f'\n\nCONGRATULATIONS {p2_name}! YOU HAVE WON THE GAME!\n\n') + else: + print('\n\nTHE Computer HAS WON THE GAME!\n\n') + print("~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~") + play_game = False + + else: + #To check if the board is full; if yes, the game is a draw; + if full_board_check(theBoard): + display_board(theBoard, available) + print("~~~~~~~~~~~~~~~~~~") + print('\nThe game is a DRAW!\n') + print("~~~~~~~~~~~~~~~~~~") + break + #If none of the above is possible, next turn of Player 2; + else: + turn = p1_name + + + #If the users want to play the game again? + if replay(): + #if Yes; + continue + else: + #if No; + break + + #################################################################################### + +print("\n\n\t\t\tTHE END!") + + + +#END \ No newline at end of file diff --git a/projects/Tic_tac_toe_with_ai/tic_tac_toe.png b/projects/Tic_tac_toe_with_ai/tic_tac_toe.png new file mode 100644 index 000000000..8ab92d6cc Binary files /dev/null and b/projects/Tic_tac_toe_with_ai/tic_tac_toe.png differ diff --git a/projects/Time_to_load_website/README.md b/projects/Time_to_load_website/README.md new file mode 100644 index 000000000..e5eabe941 --- /dev/null +++ b/projects/Time_to_load_website/README.md @@ -0,0 +1,17 @@ +## Time to load website + +This script takes a url from the user and returns the time taken to load that website. + +## How to use this ? + +1. Just type the following on the command prompt: + +python time_to_load_website.py + +2. It will reuest you to provide a url. Provide the url and hit enter to see the script in action. + +## Sample use: + +

    + sample +

    diff --git a/projects/Time_to_load_website/sample.PNG b/projects/Time_to_load_website/sample.PNG new file mode 100644 index 000000000..346655194 Binary files /dev/null and b/projects/Time_to_load_website/sample.PNG differ diff --git a/projects/Time_to_load_website/time_to_load_website.py b/projects/Time_to_load_website/time_to_load_website.py new file mode 100644 index 000000000..12754f1c3 --- /dev/null +++ b/projects/Time_to_load_website/time_to_load_website.py @@ -0,0 +1,31 @@ +from urllib.request import urlopen +import time + + +def get_load_time(url): + """This function takes a user defined url as input + and returns the time taken to load that url in seconds. + + Args: + url (string): The user defined url. + + Returns: + time_to_load (float): The time taken to load the website in seconds. + """ + + if ("https" or "http") in url: # Checking for presence of protocols + open_this_url = urlopen(url) # Open the url as entered by the user + else: + open_this_url = urlopen("https://" + url) # Adding https to the url + start_time = time.time() # Time stamp before the reading of url starts + open_this_url.read() # Reading the user defined url + end_time = time.time() # Time stamp after the reading of the url + open_this_url.close() # Closing the instance of the urlopen object + time_to_load = end_time - start_time + + return time_to_load + + +if __name__ == '__main__': + url = input("Enter the url whose loading time you want to check: ") + print(f"\nThe time taken to load {url} is {get_load_time(url):.2} seconds.") diff --git a/projects/Todo app/app.py b/projects/Todo app/app.py deleted file mode 100644 index 79ba88cae..000000000 --- a/projects/Todo app/app.py +++ /dev/null @@ -1,77 +0,0 @@ -from flask import Flask, render_template,url_for, request, redirect -from flask_sqlalchemy import SQLAlchemy -from datetime import datetime - -app = Flask(__name__) -app.config['SQLALCHEMY_DATABASE_URI'] = 'sqlite:///test.db' -app.config['SQLALCHEMY_TRACK_MODIFICATIONS'] = False -db = SQLAlchemy(app) - - - - - - -class Todo(db.Model): - id=db.Column(db.Integer, primary_key=True) - content=db.Column(db.String(200),nullable=False) - completed=db.Column(db.Integer,default=0) - pub_date = db.Column(db.DateTime, nullable=False, - default=datetime.utcnow) - def __repr__(self): - return ''%self.id - - - - - - -@app.route('/',methods=['POST','GET']) -def index(): - if request.method=="POST": - task_content= request.form['task'] - new_task=Todo(content=task_content) - - try: - db.session.add(new_task) - db.session.commit() - return redirect('/') - except: - return 'There is an issue' - else: - tasks=Todo.query.order_by(Todo.pub_date).all() - return render_template('index.html',tasks=tasks) - -@app.route('/delete/') -def delete(id): - task=Todo.query.get_or_404(id) - try: - db.session.delete(task) - db.session.commit() - return redirect('/') - except: - return "This is an Problem while deleting" - -@app.route('/update/',methods=['POST','GET']) -def update(id): - task=Todo.query.get_or_404(id) - if request.method=="POST": - task.content= request.form['task'] - - - try: - - db.session.commit() - return redirect('/') - except: - return 'There is an issue' - else: - tasks=Todo.query.order_by(Todo.pub_date).all() - - return render_template('index.html', update_task=task,tasks=tasks) - - - - -if __name__=="__main__": - app.run(debug=True) \ No newline at end of file diff --git a/projects/Todo app/requirements.txt b/projects/Todo app/requirements.txt deleted file mode 100644 index cad358ecf..000000000 --- a/projects/Todo app/requirements.txt +++ /dev/null @@ -1,2 +0,0 @@ -flask -flask_sqlalchemy \ No newline at end of file diff --git a/projects/Todo app/Readme.md b/projects/Todo_app/Readme.md similarity index 84% rename from projects/Todo app/Readme.md rename to projects/Todo_app/Readme.md index 386f9a571..f5dbb4948 100644 --- a/projects/Todo app/Readme.md +++ b/projects/Todo_app/Readme.md @@ -7,6 +7,6 @@ # To run app - Create virtual Environment - Install requirements -`pip install requirements.txt` +`pip install -r requirements.txt` - run app `py app.py` diff --git a/projects/Todo_app/app.py b/projects/Todo_app/app.py new file mode 100644 index 000000000..789adcefb --- /dev/null +++ b/projects/Todo_app/app.py @@ -0,0 +1,67 @@ +from flask import Flask, render_template, url_for, request, redirect +from flask_sqlalchemy import SQLAlchemy +from datetime import datetime + +app = Flask(__name__) +app.config["SQLALCHEMY_DATABASE_URI"] = "sqlite:///test.db" +app.config["SQLALCHEMY_TRACK_MODIFICATIONS"] = False +db = SQLAlchemy(app) + + +class Todo(db.Model): + id = db.Column(db.Integer, primary_key=True) + content = db.Column(db.String(200), nullable=False) + completed = db.Column(db.Integer, default=0) + pub_date = db.Column(db.DateTime, nullable=False, default=datetime.utcnow) + + def __repr__(self): + return "" % self.id + + +@app.route("/", methods=["POST", "GET"]) +def index(): + if request.method == "POST": + task_content = request.form["task"] + new_task = Todo(content=task_content) + try: + db.session.add(new_task) + db.session.commit() + return redirect("/") + except: + return "There is an issue" + else: + tasks = Todo.query.order_by(Todo.pub_date).all() + return render_template("index.html", tasks=tasks) + + +@app.route("/delete/") +def delete(id): + task = Todo.query.get_or_404(id) + try: + db.session.delete(task) + db.session.commit() + return redirect("/") + except: + return "This is an Problem while deleting" + + +@app.route("/update/", methods=["POST", "GET"]) +def update(id): + task = Todo.query.get_or_404(id) + if request.method == "POST": + task.content = request.form["task"] + + try: + db.session.commit() + return redirect("/") + except: + return "There is an issue" + else: + tasks = Todo.query.order_by(Todo.pub_date).all() + + return render_template("index.html", update_task=task, tasks=tasks) + + +if __name__ == "__main__": + app.run(debug=True) + diff --git a/projects/Todo_app/requirements.txt b/projects/Todo_app/requirements.txt new file mode 100644 index 000000000..44389c85c --- /dev/null +++ b/projects/Todo_app/requirements.txt @@ -0,0 +1,2 @@ +Flask==1.1.2 +Flask-SQLAlchemy==2.4.4 diff --git a/projects/Todo app/static/css/style.css b/projects/Todo_app/static/css/style.css similarity index 92% rename from projects/Todo app/static/css/style.css rename to projects/Todo_app/static/css/style.css index f621822b1..03afaff88 100644 --- a/projects/Todo app/static/css/style.css +++ b/projects/Todo_app/static/css/style.css @@ -1,4 +1,4 @@ -body { - margin: 0; - padding: 0; +body { + margin: 0; + padding: 0; } \ No newline at end of file diff --git a/projects/Todo app/templates/base.html b/projects/Todo_app/templates/base.html similarity index 97% rename from projects/Todo app/templates/base.html rename to projects/Todo_app/templates/base.html index 32e360efa..104e6e3ce 100644 --- a/projects/Todo app/templates/base.html +++ b/projects/Todo_app/templates/base.html @@ -1,38 +1,38 @@ - - - - - - - - - - - - TODO App - {% block head %} - {% endblock %} - - - -
    - {% block body %} - {% endblock %} -
    - - - - - - - - - + + + + + + + + + + + + TODO App + {% block head %} + {% endblock %} + + + +
    + {% block body %} + {% endblock %} +
    + + + + + + + + + \ No newline at end of file diff --git a/projects/Todo app/templates/index.html b/projects/Todo_app/templates/index.html similarity index 95% rename from projects/Todo app/templates/index.html rename to projects/Todo_app/templates/index.html index f703007b7..372b81aa4 100644 --- a/projects/Todo app/templates/index.html +++ b/projects/Todo_app/templates/index.html @@ -1,82 +1,82 @@ -{% extends 'base.html' %} -{% block head %} - -{% endblock %} -{% block body %} -

    Todo Webapp

    -
    -
    -
    - {% if update_task %} - - - - {% else %} - - - - {% endif %} - - - -
    - - -
    -
    -
    - - {% if tasks %} - - - - - - - - - - - - {% for task in tasks %} - - - - - - - - - {% endfor %} - - - -
    TaskDateOperation
    {{ task.content }}{{ task.pub_date.date() }} - - {% if update_task %} - {% if not update_task.id==task.id %} - Update - Delete - {% endif %} - {% else %} - - Update - Delete - - {% endif %} - - - - - -
    - {% else %} -

    There is no task !!

    - {% endif %} - - - -
    - - +{% extends 'base.html' %} +{% block head %} + +{% endblock %} +{% block body %} +

    Todo Webapp

    +
    +
    +
    + {% if update_task %} + + + + {% else %} + + + + {% endif %} + + + +
    + + +
    +
    +
    + + {% if tasks %} + + + + + + + + + + + + {% for task in tasks %} + + + + + + + + + {% endfor %} + + + +
    TaskDateOperation
    {{ task.content }}{{ task.pub_date.date() }} + + {% if update_task %} + {% if not update_task.id==task.id %} + Update + Delete + {% endif %} + {% else %} + + Update + Delete + + {% endif %} + + + + + +
    + {% else %} +

    There is no task !!

    + {% endif %} + + + +
    + + {% endblock %} \ No newline at end of file diff --git a/projects/Todo app/test.db b/projects/Todo_app/test.db similarity index 96% rename from projects/Todo app/test.db rename to projects/Todo_app/test.db index 3a0836101..29a5465b8 100644 Binary files a/projects/Todo app/test.db and b/projects/Todo_app/test.db differ diff --git a/projects/Unique_words_in_a_file/README.md b/projects/Unique_words_in_a_file/README.md new file mode 100644 index 000000000..74366a12c --- /dev/null +++ b/projects/Unique_words_in_a_file/README.md @@ -0,0 +1,2 @@ +# Unique words in text file +Script to display unique words in a given text file. diff --git a/projects/Unique_words_in_a_file/text_file.txt b/projects/Unique_words_in_a_file/text_file.txt new file mode 100644 index 000000000..0e7e72d58 --- /dev/null +++ b/projects/Unique_words_in_a_file/text_file.txt @@ -0,0 +1,9 @@ +Lorem ipsum dolor sit amet, consectetur adipiscing elit. Nunc sollicitudin lobortis venenatis. Integer sed ullamcorper dolor. Fusce vitae tincidunt risus, eu pulvinar dolor. Fusce et feugiat velit. Nulla facilisi. Nunc massa purus, pretium vehicula ligula eget, fermentum rutrum leo. Fusce congue at metus ac dignissim. In viverra consequat nisl at laoreet. Nam tempor fringilla justo at tincidunt. Praesent in risus ullamcorper, tristique risus non, iaculis ex. Praesent hendrerit sapien diam, eu feugiat enim commodo vel. Duis suscipit, ex at interdum aliquam, metus ligula dapibus leo, sit amet bibendum dolor tortor ut ex. Suspendisse feugiat pharetra elit. + +Nulla tempor nisi ut ex tincidunt molestie. Phasellus placerat augue a tincidunt bibendum. Curabitur vitae nisl hendrerit, vestibulum nulla vel, dignissim arcu. Praesent sed lorem nec lacus varius cursus. Curabitur suscipit ex efficitur aliquam consectetur. Cras quis ex et ipsum vehicula commodo. Aenean fermentum neque varius orci interdum, non ornare nibh imperdiet. Vestibulum ante ipsum primis in faucibus orci luctus et ultrices posuere cubilia curae; Integer pulvinar erat id diam gravida pulvinar at a lacus. Sed gravida, mi a ornare pharetra, nibh dui dapibus dui, eget varius orci magna in ante. Vestibulum eu nibh eu enim egestas ullamcorper ac at felis. Suspendisse sed maximus nunc. Quisque eu enim non magna finibus vulputate. Vivamus odio erat, rhoncus at euismod vel, molestie quis libero. Maecenas quis ipsum vulputate magna molestie viverra. + +Fusce eget aliquet ipsum. Maecenas luctus leo nec tellus ullamcorper vulputate. Morbi vitae quam laoreet, venenatis ante non, mattis nibh. Nam varius quis sapien ut blandit. Suspendisse rutrum, orci dictum egestas mattis, dui magna dignissim risus, ut molestie augue ex ut purus. Integer at nulla vehicula, rutrum lorem et, tempus eros. Nullam non metus sollicitudin, suscipit est at, blandit neque. Morbi tincidunt non mauris et bibendum. Phasellus non nibh non massa venenatis pellentesque nec vel leo. + +Nunc lacinia orci non velit pharetra, eget maximus turpis pretium. Curabitur a odio molestie, cursus neque semper, placerat lacus. Nam varius convallis ullamcorper. Class aptent taciti sociosqu ad litora torquent per conubia nostra, per inceptos himenaeos. Nullam dapibus aliquet lectus, a posuere augue placerat sed. In sagittis ex sed lorem facilisis ullamcorper. Donec vitae nibh ultricies, lobortis nisi et, malesuada magna. Nullam convallis eros et metus rhoncus dapibus. Nulla aliquet, ipsum non tincidunt cursus, nisi ipsum interdum massa, et elementum felis mauris vel nibh. Nullam quis aliquam metus. + +Phasellus sodales purus at elit congue aliquam. Integer finibus nulla nec lacinia fringilla. Sed viverra sapien sed nisi convallis malesuada. Morbi interdum dapibus varius. Nam lobortis in nibh non convallis. Duis vehicula eros ut velit convallis, quis faucibus quam dignissim. Curabitur arcu libero, rhoncus in scelerisque eget, pretium et tellus. Aliquam interdum auctor sapien eu mattis. Nullam luctus, risus non pulvinar porta, turpis metus volutpat tortor, ut facilisis est ante ac elit. Nam mi purus, commodo nec risus pulvinar, vestibulum eleifend urna. In dictum pretium accumsan. Donec non lectus cursus, fermentum mauris ut, semper urna. In convallis iaculis consequat. Ut rutrum turpis efficitur eleifend porta. Nunc pellentesque in dolor sed blandit. \ No newline at end of file diff --git a/projects/Unique_words_in_a_file/unique.py b/projects/Unique_words_in_a_file/unique.py new file mode 100644 index 000000000..b6f3db03e --- /dev/null +++ b/projects/Unique_words_in_a_file/unique.py @@ -0,0 +1,35 @@ +import re + +# script to fetch unique sorted words from a text file. +list_of_words = [] + +# Alternate Method to insert file +# filename = input("Enter file name: ") +filename = "text_file.txt" + +with open(filename, "r") as f: + for line in f: + # if case is ignored then Great and great are same words + list_of_words.extend(re.findall(r"[\w]+", line.lower())) + # else use this alternate method: + # list_of_words.extend(re.findall(r"[\w]+", line)) + + +# Creating a dictionary to store the number of occurence of a word +unique = {} +for each in list_of_words: + if each not in unique: + unique[each] = 0 + unique[each] += 1 + +# Creating a list to sort the final unique words +s = [] + +# If occurence of a word(val) is 1 then it is unique +for key, val in unique.items(): + if val == 1: + s.append(key) + +print(sorted(s)) + + diff --git a/projects/Unstructured Supplemenrary Service Data/README.md b/projects/Unstructured Supplemenrary Service Data/README.md new file mode 100644 index 000000000..ed6e916ef --- /dev/null +++ b/projects/Unstructured Supplemenrary Service Data/README.md @@ -0,0 +1,18 @@ +# USSD +Unstructured Supplementary Service Data (USSD), sometimes referred to as "Quick Codes" or "Feature codes", is a communications protocol used by GSM cellular telephones to communicate with the mobile network operator's computers. USSD can be used for WAP browsing, prepaid callback service, mobile-money services, location-based content services, menu-based information services, and as part of configuring the phone on the network + +MODULES REQUIRED +1. random +2.time +3. sys + +EXECUTION PROCESS +1. fork code +2. git clone SSH +3. open on device using a python IDE +4. run the script + + +AUTHOR + +[Ajayi Raymond Tomisin (ART)](https://github.com/Tomyzon1728) diff --git a/projects/Unstructured Supplemenrary Service Data/Screenshot_20200910-134857.png b/projects/Unstructured Supplemenrary Service Data/Screenshot_20200910-134857.png new file mode 100644 index 000000000..5c65a3cb3 Binary files /dev/null and b/projects/Unstructured Supplemenrary Service Data/Screenshot_20200910-134857.png differ diff --git a/projects/Unstructured Supplemenrary Service Data/ussdtim.py b/projects/Unstructured Supplemenrary Service Data/ussdtim.py new file mode 100644 index 000000000..84a6fcb3d --- /dev/null +++ b/projects/Unstructured Supplemenrary Service Data/ussdtim.py @@ -0,0 +1,188 @@ +import time +import sys + +print('Welcome To fastrack USSD Banking Project...') +time.sleep(8) + +bank_list=""" +1. Access Bank +2. Fidelity Bank +3. Guarantee Trust Bank +4. Heritage Bank +5. Polaris Bank +6. Stanbic IBTC +7. Unity Bank +8. Wema Bank +""" + +gen_bvn = " " + +def BVN_checker( ): + global gen_bvn + bvn = [str(i) for i in range (5)] + gen_bvn= "".join(bvn) + + +def open_acct( ): + global gen_bvn + print("Welcome to our online Account opening services.") + print("loading...") +# creating an empty list to serve as a temporary place holder. + temp_storage= [ ] + f_name= input("Enter your first name:") + s_name= input ("Enter your second name:") + sex = input("Enter sex [M/F]:") + BVN_checker( ) + temp_storage.append(f_name) + temp_storage.append(s_name) + temp_storage.append(sex) + temp_storage.append(gen_bvn) + details= " ".join(temp_storage) + split_details = details.split(" ") + #print(split_details) + print(split_details[0]+" "+split_details[1]) + print(split_details[2]) + print("Your bvn is :"+split_details[3]) + print("1. Press # to go back to options menu\n2. Press * to exit") + bck=input(":") + if bck=='#': + options_menu( ) + else: + sys.exit( ) + + exit( ) + +def upgrade_migrate( ): + print("Welcome to our online Upgrade/Migration services.\n 1. Ugrade\n 2. Migrate") + print("press # is go back to the Main Menu.") + prompt = input("Enter preferred Choice:") + if prompt=="1": + time.sleep(5) + print("Upgrading...") + exit( ) + elif prompt == "2": + time.sleep(5) + print("Migrating...") + exit( ) + elif prompt == "#": + options_menu( ) + else: + sys.exit( ) + +def balance ( ): + print("ACCOUNT\tBALANCE\n CHECKER") + print("press # is go back to the Main Menu.") + pin=input("Enter your 4 digit pin:") +# isdigit( ) is used to check for digits within a str while the nested if is used to make sure the user inputs 4 digits. + +###```i am to put the pin trial in a while loop```###REMINDER!!! + + if len(pin)!=4: + print("Make sure its a 4digit pin.") + time.sleep(5) + balance( ) + else: + if pin.isdigit( ): + time.sleep(5) + print("Loading...") + exit( ) + elif pin== "#": + options_menu( ) + else: + time.sleep(15) + print("wrong pin") + sys.exit( ) + +def transf( ): + print("1. Transfer self\n2. Transfer others") + print("press # is go back to the Main Menu.") + trnsf=input(":") + if trnsf == "#" : + options_menu( ) + elif trnsf == "1": + time.sleep(5) + print("Sending...") + exit( ) + elif trnsf=="2": + time.sleep(5) + num=int(input("Enter receivers mobile number:")) + print("Transferring to",num) + exit( ) + else: + if trnsf.isdigit( )!= True: + time.sleep(5) + print("Not an option") + sys.exit( ) + elif trnsf.isdigit( ) and len(trnsf)>2: + time.sleep( 5) + print("wrong password.") + sys.exit( ) + else: + time.sleep(10) + print("An error has occurred") + sys.exit( ) + +def funds( ): + time.sleep(3) + print(bank_list) + bnk = input("Select receipients Bank:") + acc_num= input("Entet account number:") + print("Sending to",acc_num) + hash= input("1.Press # to go back to options menu\n2. Press * to go exit.") + if hash == "#": + options_menu( ) + elif hash == "*": + exit( ) + else: + sys.exit( ) + + #-------------------------------------------------- +###i'm yet to catch an error for non -digit and more than one digit###REMINDER!!! #-#------------------------------------------------------ +# This is the function for options. +def options_menu( ) : + print("1. Open Account\n2. Upgrade/Migrate\n3. Balance\n4. Transfer\n5. Funds") + select_options ={ + '1':open_acct, + '2':upgrade_migrate, + '3': balance, + '4':transf, + '5':funds} + choice=input("Enter an option:") + if select_options.get(choice): + select_options[choice]() + else: + sys.exit() + +# This is the function which prompts the user as to whether the user wishes to continue or stop transaction. +def exit( ): + exit= input("Do you wish to make another transaction [Y/N] :") + if exit== "N": + sys.exit( ) + elif exit == "#": + options_menu( ) + else: + log_in( ) + +# This is the function for logging using the fast code *919# +def log_in( ): + try: + a=0 + while a<3: + a+=1 + USSD=input("ENTER USSD:") + if(USSD !="*919#"): + print("please re-enter USSD ...") + else: + print("Welcome to our online services how may we help you") + options_menu( ) + exit( ) + else: + time.sleep(10) + print("checking discrepancies...") + time.sleep(5) + print("An error has occured.") + + except: + sys.exit( ) + +log_in( ) \ No newline at end of file diff --git a/projects/Web_page_summation/.gitignore b/projects/Web_page_summation/.gitignore new file mode 100644 index 000000000..00c7b95b4 --- /dev/null +++ b/projects/Web_page_summation/.gitignore @@ -0,0 +1,138 @@ +# Byte-compiled / optimized / DLL files +__pycache__/ +*.py[cod] +*$py.class + +# C extensions +*.so + +# Distribution / packaging +.Python +build/ +develop-eggs/ +dist/ +downloads/ +eggs/ +.eggs/ +lib/ +lib64/ +parts/ +sdist/ +var/ +wheels/ +*.egg-info/ +.installed.cfg +*.egg +MANIFEST + +# PyInstaller +# Usually these files are written by a python script from a template +# before PyInstaller builds the exe, so as to inject date/other infos into it. +*.manifest +*.spec + +# Installer logs +pip-log.txt +pip-delete-this-directory.txt + +# Unit test / coverage reports +htmlcov/ +.tox/ +.coverage +.coverage.* +.cache +nosetests.xml +coverage.xml +*.cover +.hypothesis/ +.pytest_cache/ + +# Translations +*.mo +*.pot + +# Django stuff: +*.log +local_settings.py +db.sqlite3 + +# Flask stuff: +instance/ +.webassets-cache + +# Scrapy stuff: +.scrapy + +# Sphinx documentation +docs/_build/ + +# PyBuilder +target/ + +# Jupyter Notebook +.ipynb_checkpoints + +# pyenv +.python-version + +# celery beat schedule file +celerybeat-schedule + +# SageMath parsed files +*.sage.py + +# Environments +.env +.venv +venv/ +env.bak/ +venv.bak/ +env/ + +# Spyder project settings +.spyderproject +.spyproject + +# Rope project settings +.ropeproject + +# mkdocs documentation +/site + +# mypy +.mypy_cache/ + +__pycache__ +.vscode +settings.json + +Dependency directories +node_modules/ +jspm_packages/ + +# Optional npm cache directory +.npm +.DS_Store +.DS_Store +datasets +datasets/ +new_datasets/ +node_modules +yarn.lock +app +__pycache__/ +dist +build +mlclassification-darwin-x64 +release-builds +Classifi +app +dist +build +Summarize.spec +__pycache__ +applog.log +csv/ +beneficiary.csv +.DS_Store +applog.log diff --git a/projects/Web_page_summation/README.md b/projects/Web_page_summation/README.md new file mode 100644 index 000000000..dab9f8eea --- /dev/null +++ b/projects/Web_page_summation/README.md @@ -0,0 +1,84 @@ +# Website Summarization API + +This project is carried out for the purpose of building a machine learning model for summarising a website from urls; + +## Getting Started + +These instructions will get you a copy of the project up and running on your local machine for development and testing purposes. + + +### Prerequisites + +Python distribution + +``` +Anaconda +``` + +### Installing + +Install Anaconda python distribution on your system + +Create a virtual environment called env. + +``` +python -m venv app +``` + +Activate the virtual environment + +``` +LINUX/Mac: source app/bin/activate + +Windows: app\Scripts\activate +``` + +Upgrade to the latest pip + +``` +pip install --upgrade pip +``` + +Install dependencies using requirements file + +``` +pip install -r requirements.txt +``` +**Note: Your virtual environment must always be activated before running any command** + +## Deployment + +Start app (Make sure to enter a valid website to an existing website) + + +Example of valid commands + +``` +python app.py simple --url https://facebook.com --sentence 1 --language english +python app.py simple --url https://facebook.com +python app.py simple --url https://korapay.com +python app.py bulk --path ./csv/valid_websites.csv +``` + + +### APIs + +This are command options in full: + +``` +A command line utility for website Summarization. +----------------------------------------------- +These are common commands for this app. + +positional arguments: + action This has to be 'summarize' + +optional arguments: + -h, --help show this help message and exit + --website PATH website of the url to be summarised + + +## License + +This project is licensed under the MIT License - see the [LICENSE](LICENSE.md) file for details + diff --git a/projects/Web_page_summation/app.py b/projects/Web_page_summation/app.py new file mode 100644 index 000000000..96f5cf35c --- /dev/null +++ b/projects/Web_page_summation/app.py @@ -0,0 +1,142 @@ +#!/usr/bin/python +from utils.summarize import summarize +import csv +import shutil +import os +import textwrap +import logging +import argparse +import sys + + +def parse_args(argv): + parser = argparse.ArgumentParser( + formatter_class=argparse.RawDescriptionHelpFormatter, + description=textwrap.dedent('''\ + A command line utility for website summarization. + ----------------------------------------------- + These are common commands for this app.''')) + parser.add_argument( + 'action', + help='This action should be summarize') + parser.add_argument( + '--url', + help='A link to the website url' + ) + parser.add_argument( + '--sentence', + help='Argument to define number of sentence for the summary', + type=int, + default=2) + parser.add_argument( + '--language', + help='Argument to define language of the summary', + default='English') + parser.add_argument( + '--path', + help='path to csv file') + + return parser.parse_args(argv[1:]) + + +def readCsv(path): + print('\n\n Processing Csv file \n\n') + sys.stdout.flush() + data = [] + try: + with open(path, 'r') as userFile: + userFileReader = csv.reader(userFile) + for row in userFileReader: + data.append(row) + except: + with open(path, 'r', encoding="mbcs") as userFile: + userFileReader = csv.reader(userFile) + for row in userFileReader: + data.append(row) + return data + + +def writeCsv(data, LANGUAGE, SENTENCES_COUNT): + print('\n\n Updating Csv file \n\n') + sys.stdout.flush() + with open('beneficiary.csv', 'w') as newFile: + newFileWriter = csv.writer(newFile) + length = len(data) + position = data[0].index('website') + for i in range(1, length): + if i == 1: + _data = data[0] + _data.append("summary") + newFileWriter.writerow(_data) + try: + __data = data[i] + summary = summarize( + (data[i][position]), LANGUAGE, SENTENCES_COUNT) + __data.append(summary) + newFileWriter.writerow(__data) + except: + print('\n\n Error Skipping line \n\n') + sys.stdout.flush() + + +def processCsv(path, LANGUAGE, SENTENCES_COUNT): + try: + print('\n\n Proessing Started \n\n') + sys.stdout.flush() + data = readCsv(path) + writeCsv(data, LANGUAGE, SENTENCES_COUNT) + except: + print('\n\n Invalid file in file path \n\n') + sys.stdout.flush() + + +def main(argv=sys.argv): + # Configure logging + logging.basicConfig(filename='applog.log', + filemode='w', + level=logging.INFO, + format='%(levelname)s:%(message)s') + args = parse_args(argv) + action = args.action + url = args.url + path = args.path + LANGUAGE = "english" if args.language is None else args.language + SENTENCES_COUNT = 2 if args.sentence is None else args.sentence + if action == 'bulk': + if path is None: + print( + '\n\n Invalid Entry!, please Ensure you enter a valid file path \n\n') + sys.stdout.flush() + return + # guide against errors + try: + processCsv(path, LANGUAGE, SENTENCES_COUNT) + except: + print( + '\n\n Invalid Entry!, please Ensure you enter a valid file path \n\n') + sys.stdout.flush() + print('Completed') + sys.stdout.flush() + if os.path.isfile('beneficiary.csv'): + return shutil.move('beneficiary.csv', path) + return + if action == 'simple': + # guide against errors + try: + summarize(url, LANGUAGE, SENTENCES_COUNT) + except: + print( + '\n\n Invalid Entry!, please Ensure you enter a valid web link \n\n') + sys.stdout.flush() + print('Completed') + sys.stdout.flush() + else: + print( + '\nAction command is not supported\n for help: run python3 app.py -h' + ) + sys.stdout.flush() + return + + +if __name__ == '__main__': + main() diff --git a/projects/Web_page_summation/requirements.txt b/projects/Web_page_summation/requirements.txt new file mode 100644 index 000000000..4b120fd45 --- /dev/null +++ b/projects/Web_page_summation/requirements.txt @@ -0,0 +1,10 @@ +utils==1.0.1 +sumeval==0.2.2 +tensorflow==2.3.0 +wget==3.2 +sumy==0.8.1 +model==0.6.0 +numpy==1.19.1 +newspaper==0.1.0.7 +nltk==3.5 +gensim==3.8.3 diff --git a/projects/Web_page_summation/utils/__init__.py b/projects/Web_page_summation/utils/__init__.py new file mode 100644 index 000000000..e69de29bb diff --git a/projects/Web_page_summation/utils/comparison.py b/projects/Web_page_summation/utils/comparison.py new file mode 100644 index 000000000..322f97392 --- /dev/null +++ b/projects/Web_page_summation/utils/comparison.py @@ -0,0 +1,50 @@ + +# https://github.com/chakki-works/sumeval +# https://github.com/Tian312/awesome-text-summarization + +from sumeval.metrics.rouge import RougeCalculator +from sumeval.metrics.bleu import BLEUCalculator + + +def eval_rouges(refrence_summary, model_summary): + # refrence_summary = "tokyo shares close up #.## percent" + # model_summary = "tokyo stocks close up # percent to fresh record high" + + rouge = RougeCalculator(stopwords=True, lang="en") + + rouge_1 = rouge.rouge_n( + summary=model_summary, + references=refrence_summary, + n=1) + + rouge_2 = rouge.rouge_n( + summary=model_summary, + references=[refrence_summary], + n=2) + + rouge_l = rouge.rouge_l( + summary=model_summary, + references=[refrence_summary]) + + # You need spaCy to calculate ROUGE-BE + + rouge_be = rouge.rouge_be( + summary=model_summary, + references=[refrence_summary]) + + bleu = BLEUCalculator() + bleu_score = bleu.bleu(summary=model_summary, + references=[refrence_summary]) + + # print("ROUGE-1: {}, ROUGE-2: {}, ROUGE-L: {}, ROUGE-BE: {}".format( + # rouge_1, rouge_2, rouge_l, rouge_be + # ).replace(", ", "\n")) + + return rouge_1, rouge_2, rouge_l, rouge_be, bleu_score + +# rouge_1, rouge_2,rouge_l,rouge_be = eval_rouges( "tokyo shares close up #.## percent", +# "tokyo stocks close up # percent to fresh record high") +# +# print("ROUGE-1: {}, ROUGE-2: {}, ROUGE-L: {}, ROUGE-BE: {}".format( +# rouge_1, rouge_2, rouge_l, rouge_be +# ).replace(", ", "\n")) diff --git a/projects/Web_page_summation/utils/model.py b/projects/Web_page_summation/utils/model.py new file mode 100644 index 000000000..cfcfc9384 --- /dev/null +++ b/projects/Web_page_summation/utils/model.py @@ -0,0 +1,131 @@ +import tensorflow as tf +from tensorflow.contrib import rnn +from utils import get_init_embedding + + +class Model(object): + def __init__(self, reversed_dict, article_max_len, summary_max_len, args, forward_only=False): + self.vocabulary_size = len(reversed_dict) + self.embedding_size = args.embedding_size + self.num_hidden = args.num_hidden + self.num_layers = args.num_layers + self.learning_rate = args.learning_rate + self.beam_width = args.beam_width + if not forward_only: + self.keep_prob = args.keep_prob + else: + self.keep_prob = 1.0 + self.cell = tf.nn.rnn_cell.BasicLSTMCell + with tf.variable_scope("decoder/projection"): + self.projection_layer = tf.layers.Dense( + self.vocabulary_size, use_bias=False) + + self.batch_size = tf.placeholder(tf.int32, (), name="batch_size") + self.X = tf.placeholder(tf.int32, [None, article_max_len]) + self.X_len = tf.placeholder(tf.int32, [None]) + self.decoder_input = tf.placeholder(tf.int32, [None, summary_max_len]) + self.decoder_len = tf.placeholder(tf.int32, [None]) + self.decoder_target = tf.placeholder(tf.int32, [None, summary_max_len]) + self.global_step = tf.Variable(0, trainable=False) + + with tf.name_scope("embedding"): + if not forward_only and args.glove: + init_embeddings = tf.constant(get_init_embedding( + reversed_dict, self.embedding_size), dtype=tf.float32) + else: + init_embeddings = tf.random_uniform( + [self.vocabulary_size, self.embedding_size], -1.0, 1.0) + self.embeddings = tf.get_variable( + "embeddings", initializer=init_embeddings) + self.encoder_emb_inp = tf.transpose( + tf.nn.embedding_lookup(self.embeddings, self.X), perm=[1, 0, 2]) + self.decoder_emb_inp = tf.transpose(tf.nn.embedding_lookup( + self.embeddings, self.decoder_input), perm=[1, 0, 2]) + + with tf.name_scope("encoder"): + fw_cells = [self.cell(self.num_hidden) + for _ in range(self.num_layers)] + bw_cells = [self.cell(self.num_hidden) + for _ in range(self.num_layers)] + fw_cells = [rnn.DropoutWrapper(cell) for cell in fw_cells] + bw_cells = [rnn.DropoutWrapper(cell) for cell in bw_cells] + + encoder_outputs, encoder_state_fw, encoder_state_bw = tf.contrib.rnn.stack_bidirectional_dynamic_rnn( + fw_cells, bw_cells, self.encoder_emb_inp, + sequence_length=self.X_len, time_major=True, dtype=tf.float32) + self.encoder_output = tf.concat(encoder_outputs, 2) + encoder_state_c = tf.concat( + (encoder_state_fw[0].c, encoder_state_bw[0].c), 1) + encoder_state_h = tf.concat( + (encoder_state_fw[0].h, encoder_state_bw[0].h), 1) + self.encoder_state = rnn.LSTMStateTuple( + c=encoder_state_c, h=encoder_state_h) + + with tf.name_scope("decoder"), tf.variable_scope("decoder") as decoder_scope: + decoder_cell = self.cell(self.num_hidden * 2) + + if not forward_only: + attention_states = tf.transpose(self.encoder_output, [1, 0, 2]) + attention_mechanism = tf.contrib.seq2seq.BahdanauAttention( + self.num_hidden * 2, attention_states, memory_sequence_length=self.X_len, normalize=True) + decoder_cell = tf.contrib.seq2seq.AttentionWrapper(decoder_cell, attention_mechanism, + attention_layer_size=self.num_hidden * 2) + initial_state = decoder_cell.zero_state( + dtype=tf.float32, batch_size=self.batch_size) + initial_state = initial_state.clone( + cell_state=self.encoder_state) + helper = tf.contrib.seq2seq.TrainingHelper( + self.decoder_emb_inp, self.decoder_len, time_major=True) + decoder = tf.contrib.seq2seq.BasicDecoder( + decoder_cell, helper, initial_state) + outputs, _, _ = tf.contrib.seq2seq.dynamic_decode( + decoder, output_time_major=True, scope=decoder_scope) + self.decoder_output = outputs.rnn_output + self.logits = tf.transpose( + self.projection_layer(self.decoder_output), perm=[1, 0, 2]) + self.logits_reshape = tf.concat( + [self.logits, tf.zeros([self.batch_size, summary_max_len - tf.shape(self.logits)[1], self.vocabulary_size])], axis=1) + else: + tiled_encoder_output = tf.contrib.seq2seq.tile_batch( + tf.transpose(self.encoder_output, perm=[1, 0, 2]), multiplier=self.beam_width) + tiled_encoder_final_state = tf.contrib.seq2seq.tile_batch( + self.encoder_state, multiplier=self.beam_width) + tiled_seq_len = tf.contrib.seq2seq.tile_batch( + self.X_len, multiplier=self.beam_width) + attention_mechanism = tf.contrib.seq2seq.BahdanauAttention( + self.num_hidden * 2, tiled_encoder_output, memory_sequence_length=tiled_seq_len, normalize=True) + decoder_cell = tf.contrib.seq2seq.AttentionWrapper(decoder_cell, attention_mechanism, + attention_layer_size=self.num_hidden * 2) + initial_state = decoder_cell.zero_state( + dtype=tf.float32, batch_size=self.batch_size * self.beam_width) + initial_state = initial_state.clone( + cell_state=tiled_encoder_final_state) + decoder = tf.contrib.seq2seq.BeamSearchDecoder( + cell=decoder_cell, + embedding=self.embeddings, + start_tokens=tf.fill([self.batch_size], tf.constant(2)), + end_token=tf.constant(3), + initial_state=initial_state, + beam_width=self.beam_width, + output_layer=self.projection_layer + ) + outputs, _, _ = tf.contrib.seq2seq.dynamic_decode( + decoder, output_time_major=True, maximum_iterations=summary_max_len, scope=decoder_scope) + self.prediction = tf.transpose( + outputs.predicted_ids, perm=[1, 2, 0]) + + with tf.name_scope("loss"): + if not forward_only: + crossent = tf.nn.sparse_softmax_cross_entropy_with_logits( + logits=self.logits_reshape, labels=self.decoder_target) + weights = tf.sequence_mask( + self.decoder_len, summary_max_len, dtype=tf.float32) + self.loss = tf.reduce_sum( + crossent * weights / tf.to_float(self.batch_size)) + + params = tf.trainable_variables() + gradients = tf.gradients(self.loss, params) + clipped_gradients, _ = tf.clip_by_global_norm(gradients, 5.0) + optimizer = tf.train.AdamOptimizer(self.learning_rate) + self.update = optimizer.apply_gradients( + zip(clipped_gradients, params), global_step=self.global_step) diff --git a/projects/Web_page_summation/utils/prepare.py b/projects/Web_page_summation/utils/prepare.py new file mode 100644 index 000000000..6596c4247 --- /dev/null +++ b/projects/Web_page_summation/utils/prepare.py @@ -0,0 +1,11 @@ +import gzip + +default_path = '.' + +with gzip.open(default_path + "sumdata/train/train.article.txt.gz", "rb") as gz: + with open(default_path + "sumdata/train/train.article.txt", "wb") as out: + out.write(gz.read()) + +with gzip.open(default_path + "sumdata/train/train.title.txt.gz", "rb") as gz: + with open(default_path + "sumdata/train/train.title.txt", "wb") as out: + out.write(gz.read()) diff --git a/projects/Web_page_summation/utils/summarize.py b/projects/Web_page_summation/utils/summarize.py new file mode 100644 index 000000000..b92206ccf --- /dev/null +++ b/projects/Web_page_summation/utils/summarize.py @@ -0,0 +1,30 @@ +from __future__ import absolute_import +from __future__ import division, print_function, unicode_literals +from sumy.parsers.html import HtmlParser +from sumy.nlp.tokenizers import Tokenizer +from sumy.summarizers.lex_rank import LexRankSummarizer as Summarizer +from sumy.nlp.stemmers import Stemmer +from sumy.utils import get_stop_words +import sys + + +def summarize(url=None, LANGUAGE='English', SENTENCES_COUNT=2): + parser = HtmlParser.from_url(url, Tokenizer(LANGUAGE)) + stemmer = Stemmer(LANGUAGE) + summarizer = Summarizer(stemmer) + summarizer.stop_words = get_stop_words(LANGUAGE) + result = '' + for sentence in summarizer(parser.document, SENTENCES_COUNT): + result = result + ' ' + str(sentence) + try: + result = result + ' ' + str(sentence) + + except: + print( + '\n\n Invalid Entry!, please Ensure you enter a valid web link \n\n') + sys.stdout.flush() + return ( + '\n\n Invalid Entry!, please Ensure you enter a valid web link \n\n') + print('\n\n'+str(url)+'\n\n'+str(result)) + sys.stdout.flush() + return result diff --git a/projects/Web_page_summation/utils/test.py b/projects/Web_page_summation/utils/test.py new file mode 100644 index 000000000..77d928270 --- /dev/null +++ b/projects/Web_page_summation/utils/test.py @@ -0,0 +1,76 @@ +import tensorflow as tf +from model import Model +from utils import build_dict, build_dataset, batch_iter, get_text_list +valid_article_path = '.' +valid_title_path = '.' +tf.reset_default_graph() +default_path = '.' + + +class args: + pass + + +args.num_hidden = 150 +args.num_layers = 2 +args.beam_width = 10 +args.glove = "store_true" +args.embedding_size = 300 + +args.learning_rate = 1e-3 +args.batch_size = 64 +args.num_epochs = 10 +args.keep_prob = 0.8 + +args.toy = True + +args.with_model = "store_true" + + +print("Loading dictionary...") +word_dict, reversed_dict, article_max_len, summary_max_len = build_dict( + "valid", args.toy) +print("Loading validation dataset...") +valid_x = build_dataset( + "valid", word_dict, article_max_len, summary_max_len, args.toy) +valid_x_len = [len([y for y in x if y != 0]) for x in valid_x] +print("Loading article and reference...") +article = get_text_list(valid_article_path, args.toy) +reference = get_text_list(valid_title_path, args.toy) + +with tf.Session() as sess: + print("Loading saved model...") + model = Model(reversed_dict, article_max_len, + summary_max_len, args, forward_only=True) + saver = tf.train.Saver(tf.global_variables()) + ckpt = tf.train.get_checkpoint_state(default_path + "saved_model/") + saver.restore(sess, ckpt.model_checkpoint_path) + + batches = batch_iter(valid_x, [0] * len(valid_x), args.batch_size, 1) + + print("Writing summaries to 'result.txt'...") + for batch_x, _ in batches: + batch_x_len = [len([y for y in x if y != 0]) for x in batch_x] + + valid_feed_dict = { + model.batch_size: len(batch_x), + model.X: batch_x, + model.X_len: batch_x_len, + } + + prediction = sess.run(model.prediction, feed_dict=valid_feed_dict) + prediction_output = [[reversed_dict[y] + for y in x] for x in prediction[:, 0, :]] + summary_array = [] + with open(default_path + "result.txt", "a") as f: + for line in prediction_output: + summary = list() + for word in line: + if word == "": + break + if word not in summary: + summary.append(word) + summary_array.append(" ".join(summary)) + # print(" ".join(summary), file=f) + + print('Summaries have been generated') diff --git a/projects/Web_page_summation/utils/train.py b/projects/Web_page_summation/utils/train.py new file mode 100644 index 000000000..d072ac2a5 --- /dev/null +++ b/projects/Web_page_summation/utils/train.py @@ -0,0 +1,106 @@ +import os +import tensorflow as tf +import time +from model import Model +from utils import build_dict, build_dataset, batch_iter +start = time.perf_counter() +default_path = '.' + + +class args: + pass + + +args.num_hidden = 150 +args.num_layers = 2 +args.beam_width = 10 +args.glove = "store_true" +args.embedding_size = 300 + +args.learning_rate = 1e-3 +args.batch_size = 64 +args.num_epochs = 10 +args.keep_prob = 0.8 + +args.toy = False # "store_true" + +args.with_model = "store_true" + + +if not os.path.exists(default_path + "saved_model"): + os.mkdir(default_path + "saved_model") +else: + # if args.with_model: + old_model_checkpoint_path = open( + default_path + 'saved_model/checkpoint', 'r') + old_model_checkpoint_path = "".join( + [ + default_path + "saved_model/", + old_model_checkpoint_path.read().splitlines()[0].split('"')[1]]) + + +print("Building dictionary...") +word_dict, reversed_dict, article_max_len, summary_max_len = build_dict( + "train", args.toy) +print("Loading training dataset...") +train_x, train_y = build_dataset( + "train", word_dict, article_max_len, summary_max_len, args.toy) + +tf.reset_default_graph() + +with tf.Session() as sess: + model = Model(reversed_dict, article_max_len, summary_max_len, args) + sess.run(tf.global_variables_initializer()) + saver = tf.train.Saver(tf.global_variables()) + if 'old_model_checkpoint_path' in globals(): + print("Continuing from previous trained model:", + old_model_checkpoint_path, "...") + saver.restore(sess, old_model_checkpoint_path) + + batches = batch_iter(train_x, train_y, args.batch_size, args.num_epochs) + num_batches_per_epoch = (len(train_x) - 1) // args.batch_size + 1 + + print("\nIteration starts.") + print("Number of batches per epoch :", num_batches_per_epoch) + for batch_x, batch_y in batches: + batch_x_len = list( + map(lambda x: len([y for y in x if y != 0]), batch_x)) + batch_decoder_input = list( + map(lambda x: [word_dict[""]] + list(x), batch_y)) + batch_decoder_len = list( + map(lambda x: len([y for y in x if y != 0]), batch_decoder_input)) + batch_decoder_output = list( + map(lambda x: list(x) + [word_dict[""]], batch_y)) + + batch_decoder_input = list( + map( + lambda d: d + (summary_max_len - len(d)) * [word_dict[""]], + batch_decoder_input)) + batch_decoder_output = list( + map( + lambda d: d + (summary_max_len - len(d)) * [word_dict[""]], + batch_decoder_output)) + + train_feed_dict = { + model.batch_size: len(batch_x), + model.X: batch_x, + model.X_len: batch_x_len, + model.decoder_input: batch_decoder_input, + model.decoder_len: batch_decoder_len, + model.decoder_target: batch_decoder_output + } + + _, step, loss = sess.run( + [model.update, + model.global_step, model.loss], feed_dict=train_feed_dict) + + if step % 1000 == 0: + print("step {0}: loss = {1}".format(step, loss)) + + if step % num_batches_per_epoch == 0: + hours, rem = divmod(time.perf_counter() - start, 3600) + minutes, seconds = divmod(rem, 60) + saver.save(sess, default_path + + "saved_model/model.ckpt", global_step=step) + print(" Epoch {0}: Model is saved.".format(step // num_batches_per_epoch), + "Elapsed: {:0>2}:{:0>2}:{:05.2f}".format(int(hours), int(minutes), seconds), "\n") diff --git a/projects/Web_page_summation/utils/utils.py b/projects/Web_page_summation/utils/utils.py new file mode 100644 index 000000000..49abb555f --- /dev/null +++ b/projects/Web_page_summation/utils/utils.py @@ -0,0 +1,118 @@ +import re +import collections +import pickle +import numpy as np +from nltk.tokenize import word_tokenize +default_path = '.' +train_article_path = '.' +train_title_path = '.' +valid_article_path = '.' + + +def clean_str(sentence): + sentence = re.sub("[#.]+", "#", sentence) + return sentence + + +def get_text_list(data_path, toy): + with open(data_path, "r", encoding="utf-8") as f: + if not toy: + return [clean_str(x.strip()) for x in f.readlines()][:200000] + else: + return [clean_str(x.strip()) for x in f.readlines()][:50] + + +def build_dict(step, toy=False): + if step == "train": + train_article_list = get_text_list(train_article_path, toy) + train_title_list = get_text_list(train_title_path, toy) + + words = list() + for sentence in train_article_list + train_title_list: + for word in word_tokenize(sentence): + words.append(word) + + word_counter = collections.Counter(words).most_common() + word_dict = dict() + word_dict[""] = 0 + word_dict[""] = 1 + word_dict[""] = 2 + word_dict[""] = 3 + for word, _ in word_counter: + word_dict[word] = len(word_dict) + + with open(default_path + "word_dict.pickle", "wb") as f: + pickle.dump(word_dict, f) + + elif step == "valid": + with open(default_path + "word_dict.pickle", "rb") as f: + word_dict = pickle.load(f) + + reversed_dict = dict(zip(word_dict.values(), word_dict.keys())) + + article_max_len = 50 + summary_max_len = 15 + + return word_dict, reversed_dict, article_max_len, summary_max_len + + +def build_dataset( + step, word_dict, article_max_len, summary_max_len, toy=False): + if step == "train": + article_list = get_text_list(train_article_path, toy) + title_list = get_text_list(train_title_path, toy) + elif step == "valid": + article_list = get_text_list(valid_article_path, toy) + else: + raise NotImplementedError + + x = [word_tokenize(d) for d in article_list] + x = [[word_dict.get(w, word_dict[""]) for w in d] for d in x] + x = [d[:article_max_len] for d in x] + x = [d + (article_max_len - len(d)) * [word_dict[""]] for d in x] + + if step == "valid": + return x + else: + y = [word_tokenize(d) for d in title_list] + y = [[word_dict.get(w, word_dict[""]) for w in d] for d in y] + y = [d[:(summary_max_len - 1)] for d in y] + return x, y + + +def batch_iter(inputs, outputs, batch_size, num_epochs): + inputs = np.array(inputs) + outputs = np.array(outputs) + + num_batches_per_epoch = (len(inputs) - 1) // batch_size + 1 + for epoch in range(num_epochs): + for batch_num in range(num_batches_per_epoch): + start_index = batch_num * batch_size + end_index = min((batch_num + 1) * batch_size, len(inputs)) + yield inputs[start_index:end_index], outputs[start_index:end_index] + + +def get_init_embedding(reversed_dict, embedding_size): + # glove_file = default_path + "glove/glove.6B.300d.txt" + # word2vec_file = get_tmpfile(default_path + "word2vec_format.vec") + # glove2word2vec(glove_file, word2vec_file) + print("Loading Glove vectors...") + # word_vectors = KeyedVectors.load_word2vec_format(word2vec_file) + + with open(default_path + "glove/model_glove_300.pkl", 'rb') as handle: + word_vectors = pickle.load(handle) + + word_vec_list = list() + for _, word in sorted(reversed_dict.items()): + try: + word_vec = word_vectors.word_vec(word) + except KeyError: + word_vec = np.zeros([embedding_size], dtype=np.float32) + + word_vec_list.append(word_vec) + + # Assign random vector to , token + word_vec_list[2] = np.random.normal(0, 1, embedding_size) + word_vec_list[3] = np.random.normal(0, 1, embedding_size) + + return np.array(word_vec_list) diff --git a/projects/Web_scraping_a_youtube_comment/README.md b/projects/Web_scraping_a_youtube_comment/README.md new file mode 100644 index 000000000..636294915 --- /dev/null +++ b/projects/Web_scraping_a_youtube_comment/README.md @@ -0,0 +1,18 @@ +# Web Scrapping Comment +- This script will take a url of youtube video and it will give csv file for users and comments . + +### Prerequisites +- You only need to have installed selenium which is used for automation. +- Run the below script to install selenium +- $ pip install selenium + +### How to run the script +- Simply replace your own youtube video url in the webscrapindcomment.py +- And run command in the same directory +- python webscrapindcomment.py + +### Screenshot/GIF showing the sample use of the script +![](demo.gif) + +## *Author Name* +[Saicharan67](https://github.com/Saicharan67) diff --git a/projects/Web_scraping_a_youtube_comment/demo.gif b/projects/Web_scraping_a_youtube_comment/demo.gif new file mode 100644 index 000000000..d294ab531 Binary files /dev/null and b/projects/Web_scraping_a_youtube_comment/demo.gif differ diff --git a/projects/Web_scraping_a_youtube_comment/requirements.txt b/projects/Web_scraping_a_youtube_comment/requirements.txt new file mode 100644 index 000000000..600b6ebbe --- /dev/null +++ b/projects/Web_scraping_a_youtube_comment/requirements.txt @@ -0,0 +1 @@ +selenium==3.141.0 diff --git a/projects/Web_scraping_a_youtube_comment/webscrapindcomment.py b/projects/Web_scraping_a_youtube_comment/webscrapindcomment.py new file mode 100644 index 000000000..4893b10e9 --- /dev/null +++ b/projects/Web_scraping_a_youtube_comment/webscrapindcomment.py @@ -0,0 +1,37 @@ +# -*- coding: utf-8 -*- +""" +Created on Tue Jul 21 16:55:39 2020 + +@author: hp +""" + +from selenium import webdriver +import csv +import time + +items=[] +driver=webdriver.Chrome(r"C:/Users/hp/Anaconda3/chromedriver.exe") + +driver.get('https://www.youtube.com/watch?v=iFPMz36std4') + +driver.execute_script('window.scrollTo(1, 500);') + +#now wait let load the comments +time.sleep(5) + +driver.execute_script('window.scrollTo(1, 3000);') + + +username_elems = driver.find_elements_by_xpath('//*[@id="author-text"]') +comment_elems = driver.find_elements_by_xpath('//*[@id="content-text"]') +for username, comment in zip(username_elems, comment_elems): + item = {} + item['Author'] = username.text + item['Comment'] = comment.text + items.append(item) +filename = 'C:/Users/hp/Desktop/commentlist.csv' +with open(filename, 'w', newline='', encoding='utf-8') as f: + w = csv.DictWriter(f,['Author','Comment']) + w.writeheader() + for item in items: + w.writerow(item) diff --git a/projects/Website_blocker/README.md b/projects/Website_blocker/README.md new file mode 100644 index 000000000..82d4e47e8 --- /dev/null +++ b/projects/Website_blocker/README.md @@ -0,0 +1,17 @@ +# Website Blocker + +This script lets you block websites on your computer by editing your hosts file. + + +### Usage +First add your Blocked Websites to the array in both scripts. + +On Linux: `sudo python website_blocker.py` +On Windows, run the script as Administrator + +To unblock the websites, run the `website_unblocker.py` script. + + +## *Author Name* + +[Phillibob55](https://github.com/Phillibob55) diff --git a/projects/Website_blocker/website_blocker.py b/projects/Website_blocker/website_blocker.py new file mode 100644 index 000000000..bc7af900d --- /dev/null +++ b/projects/Website_blocker/website_blocker.py @@ -0,0 +1,18 @@ +import platform + +if platform.system() == "Windows": + pathToHosts=r"C:\Windows\System32\drivers\etc\hosts" +elif platform.system() == "Linux": + pathToHosts=r"/etc/hosts" + +redirect="127.0.0.1" +websites=["https://www.sislovesme.com/","https://motherless.com/","https://xhamster.com/","https://www.xnxx.com/","https://www.xvideos.com/","https://www.pornhub.com/"] + +with open(pathToHosts,'r+') as file: + content=file.read() + for site in websites: + if site in content: + pass + else: + file.write(redirect+" "+site+"\n") + \ No newline at end of file diff --git a/projects/Website_blocker/website_unblocker.py b/projects/Website_blocker/website_unblocker.py new file mode 100644 index 000000000..f6c374b46 --- /dev/null +++ b/projects/Website_blocker/website_unblocker.py @@ -0,0 +1,17 @@ +import platform + +if platform.system() == "Windows": + pathToHosts=r"C:\Windows\System32\drivers\etc\hosts" +elif platform.system() == "Linux": + pathToHosts=r"/etc/hosts" + +websites=["https://www.sislovesme.com/","https://motherless.com/","https://xhamster.com/","https://www.xnxx.com/","https://www.xvideos.com/","https://www.pornhub.com/"] + +with open(pathToHosts,'r+') as file: + content=file.readlines() + file.seek(0) + for line in content: + if not any(site in line for site in websites): + file.write(line) + file.truncate() + \ No newline at end of file diff --git a/projects/Wifi_windows_password_displayer/README.md b/projects/Wifi_windows_password_displayer/README.md new file mode 100644 index 000000000..47cff73af --- /dev/null +++ b/projects/Wifi_windows_password_displayer/README.md @@ -0,0 +1,17 @@ +# Windows Wi-Fi password displayer + +### Prerequisites +glob +os +subprocess +xml + +### How to run the script +python main.py + +### Screenshot/GIF showing the sample use of the script + +![image](https://user-images.githubusercontent.com/83010531/136707822-fa514554-0908-489d-b6f9-aeda0f6e2f5e.png) + +## *Author Name* +Anthony Rafidison diff --git a/projects/Wifi_windows_password_displayer/main.py b/projects/Wifi_windows_password_displayer/main.py new file mode 100644 index 000000000..2d4c1c6b4 --- /dev/null +++ b/projects/Wifi_windows_password_displayer/main.py @@ -0,0 +1,62 @@ +import glob +import os +import subprocess +import xml.etree.ElementTree as ET + +class PwdDisplay: + def __init__(self): + # Définition du répertoire courant + os.chdir("./") + # Création du dossier mot de passe + if not os.path.exists("passwords"): + os.system("mkdir passwords") + + self.export_xml(command="netsh wlan export profile interface=wi-fi key=clear folder=passwords") + self.display_password() + + def export_xml(self, command=None): + with open("tmp.txt", "w") as tmp: + export_command = command.split(' ') + subprocess.run(export_command,stdout=tmp) + os.remove("tmp.txt") + + def file_path(self) -> list[str]: + # Obtention du chemin des fichiers xml + chemin_fichiers = glob.glob("passwords/"+"*xml") + return chemin_fichiers + + def get_ssid_pwd(self) -> list: + ssid_pwd = {} + for i in self.file_path(): + tree = ET.parse(i) + root = tree.getroot() + ssid = root[1][0][1].text # ssid + pwd = root[4][0][1][2].text #pwd + ssid_pwd[ssid] = pwd + return ssid_pwd + + def display_password(self): + index=1 + info = self.get_ssid_pwd() + list_ssid, list_pwd = [], [] + print("Here is the list of Wi-Fi networks registered on this device : \n") + for i in info: + print(f"[{index}] {i}") + list_ssid.append(i) + list_pwd.append(info[i]) + index+=1 + + nb = int(input("Please choose a number : ")) + print(f"SSID : {list_ssid[nb-1]}\nPassword : {list_pwd[nb-1]}\n") + + def __del__(self): + print("Thanks for using my tool :)") + # Supression des fichiers + for i in self.file_path(): + if os.path.exists(i): + os.remove(i) + + +if __name__ == '__main__': + instance = PwdDisplay + instance() diff --git a/projects/Wikipedia_search_wordcloud/README.md b/projects/Wikipedia_search_wordcloud/README.md new file mode 100644 index 000000000..dc22134b0 --- /dev/null +++ b/projects/Wikipedia_search_wordcloud/README.md @@ -0,0 +1,12 @@ +# Wordcloud Images for Wikipedia Article +Python script that prompts the user for an input, searches for the corresponding article on wikipedia and generates a wordcloud based on the searched article. + +### Prerequisites +`pip install` the models in `requirements.txt` from your command prompt. + +### How to run the script +Run like any other python file. Upon executing, the wordcloud image will be saved to the current directory. The script will also prompt a y/n if the user wants to see the generated image during execution. +![script execution](script_execution.jpg) + +## *Author Name* +[Naman Shah](https://github.com/namanshah01) diff --git a/projects/Wikipedia_search_wordcloud/requirements.txt b/projects/Wikipedia_search_wordcloud/requirements.txt new file mode 100644 index 000000000..9d9947328 --- /dev/null +++ b/projects/Wikipedia_search_wordcloud/requirements.txt @@ -0,0 +1,17 @@ +beautifulsoup4==4.9.1 +certifi==2020.6.20 +chardet==3.0.4 +cycler==0.10.0 +idna==2.10 +kiwisolver==1.2.0 +matplotlib==3.3.1 +numpy==1.19.1 +Pillow==7.2.0 +pyparsing==2.4.7 +python-dateutil==2.8.1 +requests==2.24.0 +six==1.15.0 +soupsieve==2.0.1 +urllib3==1.25.10 +wikipedia==1.4.0 +wordcloud==1.8.0 diff --git a/projects/Wikipedia_search_wordcloud/script_execution.jpg b/projects/Wikipedia_search_wordcloud/script_execution.jpg new file mode 100644 index 000000000..398c65ada Binary files /dev/null and b/projects/Wikipedia_search_wordcloud/script_execution.jpg differ diff --git a/projects/Wikipedia_search_wordcloud/wiki-search-cloud.py b/projects/Wikipedia_search_wordcloud/wiki-search-cloud.py new file mode 100644 index 000000000..4ef1a21b9 --- /dev/null +++ b/projects/Wikipedia_search_wordcloud/wiki-search-cloud.py @@ -0,0 +1,44 @@ +from wordcloud import WordCloud, STOPWORDS, ImageColorGenerator +import matplotlib.pyplot as plt +import wikipedia +import sys +import warnings +# supressing unnecessary warnings +warnings.filterwarnings("ignore") + + +# function to search the wikipedia article and generate the wordcloud +def gen_cloud(topic): + try: + content = str(wikipedia.page(topic).content) + except: + print("Error, try searching something else...") + sys.exit() + STOPWORDS.add('==') + stopwords = set(STOPWORDS) + wordcloud = WordCloud(stopwords=stopwords, max_words=200, background_color="black", width=600, height=350).generate(content) + return wordcloud + + +# function to save the wordcloud to current directory +def save_cloud(wordcloud): + wordcloud.to_file("./wordcloud.png") + + +# function to display the wordcloud with matplotlib +def show_cloud(wordcloud): + plt.imshow(wordcloud, interpolation='bilinear') + plt.axis("off") + plt.show() + + +# driver code +if __name__ == '__main__': + topic = input("What do you want to search: ").strip() + wordcloud = gen_cloud(topic) + save_cloud(wordcloud) + print("Wordcloud saved to current directory as wordcloud.png") + desc = input("Do you wish to see the output(y/n): ") + if desc == 'y': + show_cloud(wordcloud) + sys.exit() diff --git a/projects/Wikipedia_search_wordcloud/wordcloud.png b/projects/Wikipedia_search_wordcloud/wordcloud.png new file mode 100644 index 000000000..042ed04d4 Binary files /dev/null and b/projects/Wikipedia_search_wordcloud/wordcloud.png differ diff --git a/projects/WishList App Using Django b/projects/WishList App Using Django deleted file mode 160000 index 10b443472..000000000 --- a/projects/WishList App Using Django +++ /dev/null @@ -1 +0,0 @@ -Subproject commit 10b443472674ec96d8a5c269726466276aff543d diff --git a/projects/Write_a_script_to_download_a_random_image_from_unsplash_and_set_it_as_wallpaper/README.md b/projects/Write_a_script_to_download_a_random_image_from_unsplash_and_set_it_as_wallpaper/README.md new file mode 100644 index 000000000..ed9e07834 --- /dev/null +++ b/projects/Write_a_script_to_download_a_random_image_from_unsplash_and_set_it_as_wallpaper/README.md @@ -0,0 +1,26 @@ +## Set a Random desktop background + +This script will download a random image from [unsplash](https://source.unsplash.com/random) and set it as the desktop background. + +**The image will be saved as "random.jpg" makesure that there are no files saved as "random.jpg" in the current directory** + +### Requirements + +#### Linux + +Install [Nitrogen](https://wiki.archlinux.org/index.php/Nitrogen) + +``` +pip install requests +``` + +### Usage + +```python +python background_linux.py +``` +OR + +```python +python background_windows.py +``` diff --git a/projects/Write_a_script_to_download_a_random_image_from_unsplash_and_set_it_as_wallpaper/background_linux.py b/projects/Write_a_script_to_download_a_random_image_from_unsplash_and_set_it_as_wallpaper/background_linux.py new file mode 100644 index 000000000..393fb1ab8 --- /dev/null +++ b/projects/Write_a_script_to_download_a_random_image_from_unsplash_and_set_it_as_wallpaper/background_linux.py @@ -0,0 +1,27 @@ +from requests import get # to make GET request +from os import system, getcwd, path + + +url = "https://source.unsplash.com/random" +filename = "random.jpg" + + +def download(url, file_name): + ''' + downloading the file and saving it + ''' + with open(file_name, "wb") as file: + response = get(url) + file.write(response.content) + + +def setup(pathtofile): + ''' + setting the up file + ''' + system("nitrogen --set-auto {}".format(path.join(getcwd(), pathtofile))) + + +if __name__ == "__main__": + download(url, filename) + setup(filename) diff --git a/projects/Write_a_script_to_download_a_random_image_from_unsplash_and_set_it_as_wallpaper/background_windows.py b/projects/Write_a_script_to_download_a_random_image_from_unsplash_and_set_it_as_wallpaper/background_windows.py new file mode 100644 index 000000000..5c2e01c74 --- /dev/null +++ b/projects/Write_a_script_to_download_a_random_image_from_unsplash_and_set_it_as_wallpaper/background_windows.py @@ -0,0 +1,38 @@ +from requests import get +import os +import ctypes +import sys + +url = "https://source.unsplash.com/random" +file_name = "random.jpg" + +def is_64bit(): + return sys.maxsize > 2 ** 32 + + +def download(url, file_name): + ''' + downloading the file and saving it + ''' + with open(file_name, "wb") as file: + response = get(url) + file.write(response.content) + + +def setup(pathtofile,version): + name_of_file = pathtofile + path_to_file = os.path.join(os.getcwd(), name_of_file) + SPI_SETDESKWALLPAPER = 20 + if is_64bit(): + ctypes.windll.user32.SystemParametersInfoW(SPI_SETDESKWALLPAPER, 0, path_to_file, 0) + else: + ctypes.windll.user32.SystemParametersInfoA(SPI_SETDESKWALLPAPER, 0, path_to_file, 0) + + +if __name__ == "__main__": + try: + download(url, file_name) + setup(file_name) + except Exception as e: + print(f"Error {e}") + raise NotImplementedError diff --git a/projects/Write_script_to_compress_folder_and_files/README.md b/projects/Write_script_to_compress_folder_and_files/README.md new file mode 100644 index 000000000..e9a434209 --- /dev/null +++ b/projects/Write_script_to_compress_folder_and_files/README.md @@ -0,0 +1,11 @@ +## write script to compress folder and files + +### usage + +python zipfiles.py file_name(or folder name) + +example: + python zipfiles.py test.txt + python zipfiles.py ./test (folder) + +A Compressed file("filename.zip") will be generated after the program is run diff --git a/projects/Write_script_to_compress_folder_and_files/zipfiles.py b/projects/Write_script_to_compress_folder_and_files/zipfiles.py new file mode 100644 index 000000000..ae8968467 --- /dev/null +++ b/projects/Write_script_to_compress_folder_and_files/zipfiles.py @@ -0,0 +1,52 @@ +import zipfile +import sys +import os + + +# compress file function +def zip_file(file_path): + compress_file = zipfile.ZipFile(file_path + '.zip', 'w') + compress_file.write(path, compress_type=zipfile.ZIP_DEFLATED) + compress_file.close() + + +# Declare the function to return all file paths of the particular directory +def retrieve_file_paths(dir_name): + # setup file paths variable + file_paths = [] + + # Read all directory, subdirectories and file lists + for root, directories, files in os.walk(dir_name): + for filename in files: + # Create the full file path by using os module. + file_path = os.path.join(root, filename) + file_paths.append(file_path) + + # return all paths + return file_paths + + +def zip_dir(dir_path, file_paths): + # write files and folders to a zipfile + compress_dir = zipfile.ZipFile(dir_path + '.zip', 'w') + with compress_dir: + # write each file separately + for file in file_paths: + compress_dir.write(file) + + +if __name__ == "__main__": + path = sys.argv[1] + + if os.path.isdir(path): + files_path = retrieve_file_paths(path) + # print the list of files to be zipped + print('The following list of files will be zipped:') + for file_name in files_path: + print(file_name) + zip_dir(path, files_path) + elif os.path.isfile(path): + print('The %s will be zipped:' % path) + zip_file(path) + else: + print('a special file(socket,FIFO,device file), please input file or dir') diff --git a/projects/Write_script_to_move_files_into_alphabetically_ordered_folder/README.md b/projects/Write_script_to_move_files_into_alphabetically_ordered_folder/README.md new file mode 100644 index 000000000..05ad56a7a --- /dev/null +++ b/projects/Write_script_to_move_files_into_alphabetically_ordered_folder/README.md @@ -0,0 +1,9 @@ +## Script to organize files in a directory (alphabetical order) + +### usage + +```python +python main.py +``` + +Folder will be generated and files will be moved accordingly. diff --git a/projects/Write_script_to_move_files_into_alphabetically_ordered_folder/main.py b/projects/Write_script_to_move_files_into_alphabetically_ordered_folder/main.py new file mode 100644 index 000000000..5af8c5cce --- /dev/null +++ b/projects/Write_script_to_move_files_into_alphabetically_ordered_folder/main.py @@ -0,0 +1,75 @@ +''' +This script will sort and move the files in the directory +(the alphabetical order). + +'apple.txt' --> 'A' +'ryan.txt' --> 'R' +'01010.txt' --> 'Misc' + +''' +import os +import shutil + +filenames = [] + + +def getfoldername(filename): + ''' + 'Test.txt' --> 't' + '010.txt' --> 'misc' + 'zebra.txt' --> 'z' + 'Alpha@@.txt' --> 'a' + '!@#.txt' --> 'misc' + ''' + if filename[0].isalpha(): + return filename[0].lower() + else: + return 'misc' + + +def readdirectory(): + ''' + read the filename in the current directory and append them to a list + ''' + global filenames + for files in os.listdir(os.getcwd()): + if os.path.isfile(os.path.join(os.getcwd(), files)): + filenames.append(files) + filenames.remove('main.py') # removing script from the file list + + +# getting the first letters of the file & creating a file in the current_dir +def createfolder(): + ''' + creating a folders + ''' + global filenames + for f in filenames: + if os.path.isdir(getfoldername(f)): + print("folder already created") + else: + os.mkdir(getfoldername(f)) + print('creating folder...') + + +# moving the file into the proper folder +def movetofolder(): + ''' + movetofolder('zebra.py','z') + + 'zebra.py'(moved to) 'z' + ''' + global filenames + for i in filenames: + filename = i + file = getfoldername(i) + source = os.path.join(os.getcwd(), filename) + destination = os.path.join(os.getcwd(), file) + print(f"moving {source} to {destination}") + shutil.move(source, destination) + + +if __name__ == '__main__': + readdirectory() + createfolder() + movetofolder() diff --git a/projects/XKCD_downloader/README.md b/projects/XKCD_downloader/README.md new file mode 100644 index 000000000..6a229430e --- /dev/null +++ b/projects/XKCD_downloader/README.md @@ -0,0 +1,18 @@ +## XKCD Downloader + +### This script can be used to download any issue of the xkcd comics with just a simple command. + +### How to use this script? + +## 1. Install the requirements with the following line: + +pip install -r requirements.txt + +## 2. Run the following command from your terminal + +python3 xkcd_downloader.py -l 'issue-number' + +Example : + +python3 xkcd_downloader.py -l 956 + diff --git a/projects/InstagramProfile/requirements.txt b/projects/XKCD_downloader/requirements.txt similarity index 56% rename from projects/InstagramProfile/requirements.txt rename to projects/XKCD_downloader/requirements.txt index 05d16a310..34e94afcf 100644 --- a/projects/InstagramProfile/requirements.txt +++ b/projects/XKCD_downloader/requirements.txt @@ -1,10 +1,7 @@ beautifulsoup4==4.9.1 -bs4==0.0.1 certifi==2020.6.20 chardet==3.0.4 -idna==2.9 -lxml==4.5.1 -pkg-resources==0.0.0 +idna==2.10 requests==2.24.0 soupsieve==2.0.1 -urllib3==1.25.9 +urllib3==1.25.10 diff --git a/projects/XKCD_downloader/xkcd_dowloader.py b/projects/XKCD_downloader/xkcd_dowloader.py new file mode 100644 index 000000000..31050cc10 --- /dev/null +++ b/projects/XKCD_downloader/xkcd_dowloader.py @@ -0,0 +1,41 @@ +import requests +from bs4 import BeautifulSoup as bs +import shutil +import argparse + +# Code to add the cli + +parser = argparse.ArgumentParser() +parser.add_argument("-l", "--issue", required=True, help="Comics Issue Number") +args = vars(parser.parse_args()) + + +#Storing the comic issue number provided by the user +issue_number = args['issue'] + +#Complete url for the issue +url = "https://xkcd.com/"+ issue_number + + +response = requests.get(url) + +#Checking if we can fetch the url or not +if response.status_code ==200: + soup = bs(response.content, 'html.parser') + image_link = soup.find_all('img')[2]['src'] + image_name = image_link.split('/')[-1] + image_url = "https:" + image_link + r = requests.get(image_url, stream=True) + if r.status_code == 200: + #This ensures the image file is loaded correctly + r.raw.decode_content = True + + # Creating the image file + with open(image_name, 'wb') as f: + shutil.copyfileobj(r.raw, f) + + print('Image successfully Downloaded: ', image_name) + else: + print('Image Couldn\'t be retreived') +else: + print("Issue number is invalid") diff --git a/projects/Zip_Bruter/README.md b/projects/Zip_Bruter/README.md new file mode 100644 index 000000000..f1a7deec5 --- /dev/null +++ b/projects/Zip_Bruter/README.md @@ -0,0 +1,10 @@ +# Zip_Bruter +Simple brute force script for `.zip` files. + +### Usage +```bash +$ python3 zipbruter.py -f ../target.zip -w ../wordlist.txt +``` +## Contact +Blog - [erdoganyoksul.com](https://www.erdoganyoksul.com)
    +Mail - erdoganyoksul3@gmail.com diff --git a/projects/Zip_Bruter/zipbruter.py b/projects/Zip_Bruter/zipbruter.py new file mode 100644 index 000000000..ba02c6b3a --- /dev/null +++ b/projects/Zip_Bruter/zipbruter.py @@ -0,0 +1,94 @@ +#!/usr/bin/python3 + +""" +Password cracker for ZIP files. Uses brute +force attack vector for this, so you must have +strong wordlist. + +Usage: + python3 zipbruter.py -f -w -t +""" + +from sys import exit as exit_ +from os.path import isfile +from argparse import ArgumentParser +from _thread import start_new_thread +from queue import Queue +from zipfile import is_zipfile, ZipFile, BadZipfile + + +class ZipBruter: + + """Main ZipBruter class""" + + def __init__(self, file, word_list, threads) -> None: + """Initialized function for ZipBruter""" + self.file = file + self.word_list = word_list + self.threads = threads + + # Create FIFO queue + self.queue = Queue() + + def worker(self) -> None: + """ + Basically it listen queue and gets target password + from FIFO queue and checks if zip passwd is true + """ + while True: + # gets target passwd + passwd = self.queue.get() + self.queue.task_done() + + if passwd is None: + break + + try: + with ZipFile(self.file) as zipfile: + zipfile.extractall(pwd=passwd.encode()) + print('Found passwd: %s' % passwd) + except (RuntimeError, BadZipfile): + pass + + def start_workers(self) -> None: + """Start threads""" + for _ in range(self.threads): + start_new_thread(self.worker, ()) + + def main(self) -> None: + """Main entrypoint for program""" + self.start_workers() + + for target_passwd in self.read_wordlist(): + self.queue.put(target_passwd) + + for _ in range(self.threads): + self.queue.put(None) + + self.queue.join() + + def read_wordlist(self) -> str: + """Read given wordlist file and yield target passwds""" + with open(self.word_list, 'r') as file: + for line in file.readlines(): + yield line.strip() + + +if __name__ == '__main__': + parser = ArgumentParser() + parser.add_argument('-f', '--file', type=str, help='Target encrypted zip file.') + parser.add_argument('-w', '--word-list', type=str, help='Wordlist to be used.') + parser.add_argument('-t', '--threads', type=int, default=4, help='Thread count.') + args = parser.parse_args() + + if not args.file or not args.word_list: + exit_(1) + + if not is_zipfile(args.file): + exit_(1) + + if not isfile(args.word_list): + exit_(1) + + bruter = ZipBruter(args.file, args.word_list, args.threads) + bruter.main() diff --git a/projects/birthDateToCurrentAge.py b/projects/birthDateToCurrentAge.py new file mode 100644 index 000000000..f83bdfbe3 --- /dev/null +++ b/projects/birthDateToCurrentAge.py @@ -0,0 +1,38 @@ +from datetime import date # importing the date and time library + + +def ageCalculator(years, months, days): # creating a function for age calculation + age_day = 0 # initiating calculated age to 0 + age_months = 0 + age_year = 0 + + today_day = int(today.strftime("%d")) # assigning current date to individual variable for calculation + today_month = int(today.strftime("%m")) + today_year = int(today.strftime("%y")) + + if today_day < day: # calculation for no of days + today_day += 31 + age_day = today_day - days + else: + age_day = today_day - days + + if today_month < months: # calculation for no of months + today_month += 12 + age_months = today_month - months + else: + age_months = today_month - months + + age_year = today_year - years # no if years + + print(f"your age of today is :{today_year}-{today_month}-{today_day}") + + +today = date.today() # today's date +print("today's date is:", today) +birthDate = input('Enter your birth date in YYYY-MM-DD format:') # taking input of date from user +year, month, day = map(int, birthDate.split('-')) +if month > 12 or day > 31 or year < int(today.strftime("%y")): # invalid date checking + print('invalid date') + exit() +print("your date of birth is:", birthDate) +ageCalculator(year, month, day) # calling function diff --git a/projects/capture_screenshot/requirements.txt b/projects/capture_screenshot/requirements.txt index cb9eb4aa9..9fca95d02 100644 --- a/projects/capture_screenshot/requirements.txt +++ b/projects/capture_screenshot/requirements.txt @@ -1 +1 @@ -pyautogui \ No newline at end of file +PyAutoGUI==0.9.50 diff --git a/projects/cat_command/README.md b/projects/cat_command/README.md new file mode 100644 index 000000000..91abc19f7 --- /dev/null +++ b/projects/cat_command/README.md @@ -0,0 +1,21 @@ +# Cat Command + +Cat command implementation using python + +## Requirements +Not necessary, only python libraries are used + +# Run program +On linux you can use +``` ./cat.py [path] ``` + +Or +```python ./cat.py [path]``` + +Example +```./cat.py ./test_cat.txt``` + +## Author Name + +[Alexander Monterrosa](https://github.com/Alex108-lab) + diff --git a/projects/cat_command/cat.py b/projects/cat_command/cat.py new file mode 100755 index 000000000..d405a8144 --- /dev/null +++ b/projects/cat_command/cat.py @@ -0,0 +1,79 @@ +#!/usr/bin/python + +import argparse +from pathlib import Path +from sys import stderr, stdout +import os + +class CatError(Exception): + pass + +class Logger: + def __init__(self, verbosity=False): + self.verbose = verbosity + + def error(self, message): + print(f'ERROR: {message}') + +logger = Logger() + +''' + Read the selected text file + + Example: + your/path/file.txt +''' +def readFile(src: Path): + + ''' + if the given path is a directory + ERROR the path is a directory + ''' + if src.is_dir(): + + logger.error(f'The path {src}: is a directory') + + else: + + with open(src, 'r') as f: + for lines in f: + print(lines, end='') + +def cli() -> argparse.Namespace: + parser = argparse.ArgumentParser( + prog='cat', + description='cat command implementation in python', + epilog='Example: your/path/file.txt' + ) + + parser.add_argument( + 'source', + type=Path, + help='Source file' + ) + + return parser.parse_args() + +def main(): + + args = cli() + + try: + + readFile(args.source) + + except CatError as e: + + logger.error(e) + + exit(1) + + except KeyboardInterrupt: + + logger.error('\nInterrupt') + +''' + Start the program +''' +if __name__ == '__main__': + main() diff --git a/projects/cat_command/test_cat.txt b/projects/cat_command/test_cat.txt new file mode 100644 index 000000000..c2c3c7847 --- /dev/null +++ b/projects/cat_command/test_cat.txt @@ -0,0 +1 @@ +Lorem ipsum dolor sit amet, consectetur adipiscing elit. Etiam consequat elit vel pretium pellentesque. Vivamus commodo leo sed lorem auctor elementum. Maecenas ut erat ut velit maximus luctus. Vestibulum varius justo et mauris tristique pharetra rutrum porta nulla. Nam porttitor lobortis posuere. Aenean erat nisl, aliquam id molestie in, luctus quis mauris. Donec fermentum vel quam in consectetur. Aliquam nec mauris quis tellus faucibus fermentum. Suspendisse ac maximus sem. Fusce feugiat non dui non gravida. Ut ac eleifend tellus. Vivamus consectetur finibus nisi. Etiam id odio vitae arcu aliquam tincidunt nec sit amet quam. diff --git a/projects/chatbot/README.md b/projects/chatbot/README.md new file mode 100644 index 000000000..9ba755975 --- /dev/null +++ b/projects/chatbot/README.md @@ -0,0 +1,24 @@ +# Chatbot +[python-wechaty](https://github.com/wechaty/python-wechaty) is an unified conversational RPA SDK for chatbot maker. Developer at least use six lines code to create chatbot base on multi-ims, eg: wechat, wechat official account, dingtalk, lark, whatsapp, giter, and so on ... + +There are [chinese documents](https://wechaty.readthedocs.io/) and [english documents](http://wechaty.js.org/) for developers to create their own chatbots. + +### Prerequisites + +```shell +pip install -r projects/chatbot/requirements.txt +``` + +### How to run the script + +```python +python projects/chatbot/bot.py +``` + +### Screenshot/GIF showing the sample use of the script + +The Run command script above is the best screenshot. + +## *Author Name* + +[wj-Mcat](https://github.com/wj-Mcat), 吴京京, NLP Researcher, Chatbot Lover diff --git a/projects/chatbot/bot.py b/projects/chatbot/bot.py new file mode 100644 index 000000000..aac02f76f --- /dev/null +++ b/projects/chatbot/bot.py @@ -0,0 +1,237 @@ +"""example code for ding-dong-bot with oop style""" +from typing import List, Optional, Union +import asyncio +from datetime import datetime +from wechaty_puppet import get_logger +from wechaty import ( + MessageType, + FileBox, + RoomMemberQueryFilter, + Wechaty, + Contact, + Room, + Message, + Image, + MiniProgram, + Friendship, + FriendshipType, + EventReadyPayload +) + +logger = get_logger(__name__) + + +class MyBot(Wechaty): + """ + listen wechaty event with inherited functions, which is more friendly for + oop developer + """ + + def __init__(self) -> None: + """initialization function + """ + self.login_user: Optional[Contact] = None + super().__init__() + + async def on_ready(self, payload: EventReadyPayload) -> None: + """listen for on-ready event""" + logger.info('ready event %s...', payload) + + # pylint: disable=R0912,R0914,R0915 + async def on_message(self, msg: Message) -> None: + """ + listen for message event + """ + from_contact: Contact = msg.talker() + text: str = msg.text() + room: Optional[Room] = msg.room() + msg_type: MessageType = msg.type() + file_box: Optional[FileBox] = None + if text == 'ding': + conversation: Union[ + Room, Contact] = from_contact if room is None else room + await conversation.ready() + await conversation.say('dong') + file_box = FileBox.from_url( + 'https://ss3.bdstatic.com/70cFv8Sh_Q1YnxGkpoWK1HF6hhy/it/' + 'u=1116676390,2305043183&fm=26&gp=0.jpg', + name='ding-dong.jpg') + await conversation.say(file_box) + + elif msg_type == MessageType.MESSAGE_TYPE_IMAGE: + logger.info('receving image file') + # file_box: FileBox = await msg.to_file_box() + image: Image = msg.to_image() + + hd_file_box: FileBox = await image.hd() + await hd_file_box.to_file('./hd-image.jpg', overwrite=True) + + thumbnail_file_box: FileBox = await image.thumbnail() + await thumbnail_file_box.to_file('./thumbnail-image.jpg', overwrite=True) + artwork_file_box: FileBox = await image.artwork() + await artwork_file_box.to_file('./artwork-image.jpg', overwrite=True) + # reply the image + await msg.say(hd_file_box) + + # pylint: disable=C0301 + elif msg_type in [MessageType.MESSAGE_TYPE_AUDIO, MessageType.MESSAGE_TYPE_ATTACHMENT, MessageType.MESSAGE_TYPE_VIDEO]: + logger.info('receving file ...') + file_box = await msg.to_file_box() + if file_box: + await file_box.to_file(file_box.name) + + elif msg_type == MessageType.MESSAGE_TYPE_MINI_PROGRAM: + logger.info('receving mini-program ...') + mini_program: Optional[MiniProgram] = await msg.to_mini_program() + if mini_program: + await msg.say(mini_program) + + elif text == 'get room members' and room: + logger.info('get room members ...') + room_members: List[Contact] = await room.member_list() + names: List[str] = [ + room_member.name for room_member in room_members] + await msg.say('\n'.join(names)) + + elif text.startswith('remove room member:'): + logger.info('remove room member:') + if not room: + await msg.say('this is not room zone') + return + + room_member_name = text[len('remove room member:') + 1:] + + room_member: Optional[Contact] = await room.member( + query=RoomMemberQueryFilter(name=room_member_name) + ) + if room_member: + if self.login_user and self.login_user.contact_id in room.payload.admin_ids: + await room.delete(room_member) + else: + await msg.say('登录用户不是该群管理员...') + + else: + await msg.say(f'can not fine room member by name<{room_member_name}>') + elif text.startswith('get room topic'): + logger.info('get room topic') + if room: + topic: Optional[str] = await room.topic() + if topic: + await msg.say(topic) + + elif text.startswith('rename room topic:'): + logger.info('rename room topic ...') + if room: + new_topic = text[len('rename room topic:') + 1:] + await msg.say(new_topic) + elif text.startswith('add new friend:'): + logger.info('add new friendship ...') + identity_info = text[len('add new friend:'):] + weixin_contact: Optional[Contact] = await self.Friendship.search(weixin=identity_info) + phone_contact: Optional[Contact] = await self.Friendship.search(phone=identity_info) + contact: Optional[Contact] = weixin_contact or phone_contact + if contact: + await self.Friendship.add(contact, 'hello world ...') + + elif text.startswith('at me'): + if room: + talker = msg.talker() + await room.say('hello', mention_ids=[talker.contact_id]) + + elif text.startswith('my alias'): + talker = msg.talker() + alias = await talker.alias() + await msg.say('your alias is:' + (alias or '')) + + elif text.startswith('set alias:'): + talker = msg.talker() + new_alias = text[len('set alias:'):] + + # set your new alias + alias = await talker.alias(new_alias) + # get your new alias + alias = await talker.alias() + await msg.say('your new alias is:' + (alias or '')) + + elif text.startswith('find friends:'): + friend_name: str = text[len('find friends:'):] + friend = await self.Contact.find(friend_name) + if friend: + logger.info('find only one friend <%s>', friend) + + friends: List[Contact] = await self.Contact.find_all(friend_name) + + logger.info('find friend<%d>', len(friends)) + logger.info(friends) + + else: + pass + + if msg.type() == MessageType.MESSAGE_TYPE_UNSPECIFIED: + talker = msg.talker() + assert isinstance(talker, Contact) + + async def on_login(self, contact: Contact) -> None: + """login event + + Args: + contact (Contact): the account logined + """ + logger.info('Contact<%s> has logined ...', contact) + self.login_user = contact + + async def on_friendship(self, friendship: Friendship) -> None: + """when receive a new friendship application, or accept a new friendship + + Args: + friendship (Friendship): contains the status and friendship info, + eg: hello text, friend contact object + """ + MAX_ROOM_MEMBER_COUNT = 500 + # 1. receive a new friendship from someone + if friendship.type() == FriendshipType.FRIENDSHIP_TYPE_RECEIVE: + hello_text: str = friendship.hello() + + # accept friendship when there is a keyword in hello text + if 'wechaty' in hello_text.lower(): + await friendship.accept() + + # 2. you have a new friend to your contact list + elif friendship.type() == FriendshipType.FRIENDSHIP_TYPE_CONFIRM: + # 2.1 invite the user to wechaty group + # find the topic of room which contains Wechaty keyword + wechaty_rooms: List[Room] = await self.Room.find_all('Wechaty') + + # 2.2 find the suitable room + for wechaty_room in wechaty_rooms: + members: List[Contact] = await wechaty_room.member_list() + if len(members) < MAX_ROOM_MEMBER_COUNT: + contact: Contact = friendship.contact() + await wechaty_room.add(contact) + break + + async def on_room_join(self, room: Room, invitees: List[Contact], + inviter: Contact, date: datetime) -> None: + """on_room_join when there are new contacts to the room + + Args: + room (Room): the room instance + invitees (List[Contact]): the new contacts to the room + inviter (Contact): the inviter who share qrcode or manual invite someone + date (datetime): the datetime to join the room + """ + # 1. say something to welcome the new arrivals + names: List[str] = [] + for invitee in invitees: + await invitee.ready() + names.append(invitee.name) + + await room.say(f'welcome {",".join(names)} to the wechaty group !') + + +async def main() -> None: + """doc""" + bot = MyBot() + await bot.start() + +asyncio.run(main()) diff --git a/projects/chatbot/requirements.txt b/projects/chatbot/requirements.txt new file mode 100644 index 000000000..0facc4111 --- /dev/null +++ b/projects/chatbot/requirements.txt @@ -0,0 +1 @@ +wechaty \ No newline at end of file diff --git a/projects/chatbot/simple-bot.py b/projects/chatbot/simple-bot.py new file mode 100644 index 000000000..6b33b0a67 --- /dev/null +++ b/projects/chatbot/simple-bot.py @@ -0,0 +1,13 @@ +import asyncio +from wechaty import Wechaty, Message + +async def on_message(msg: Message): + if msg.text() == 'ding': + await msg.say('dong') + +async def main(): + bot = Wechaty() + bot.on('message', on_message) + await bot.start() + +asyncio.run(main()) diff --git a/projects/cli_proxy_tester/.gitignore b/projects/cli_proxy_tester/.gitignore new file mode 100644 index 000000000..c2aceda31 --- /dev/null +++ b/projects/cli_proxy_tester/.gitignore @@ -0,0 +1,141 @@ +# Project +proxies.csv + +# Byte-compiled / optimized / DLL files +__pycache__/ +*.py[cod] +*$py.class + +# C extensions +*.so + +# Distribution / packaging +.Python +build/ +develop-eggs/ +dist/ +downloads/ +eggs/ +.eggs/ +lib/ +lib64/ +parts/ +sdist/ +var/ +wheels/ +share/python-wheels/ +*.egg-info/ +.installed.cfg +*.egg +MANIFEST + +# PyInstaller +# Usually these files are written by a python script from a template +# before PyInstaller builds the exe, so as to inject date/other infos into it. +*.manifest +*.spec + +# Installer logs +pip-log.txt +pip-delete-this-directory.txt + +# Unit test / coverage reports +htmlcov/ +.tox/ +.nox/ +.coverage +.coverage.* +.cache +nosetests.xml +coverage.xml +*.cover +*.py,cover +.hypothesis/ +.pytest_cache/ +cover/ + +# Translations +*.mo +*.pot + +# Django stuff: +*.log +local_settings.py +db.sqlite3 +db.sqlite3-journal + +# Flask stuff: +instance/ +.webassets-cache + +# Scrapy stuff: +.scrapy + +# Sphinx documentation +docs/_build/ + +# PyBuilder +.pybuilder/ +target/ + +# Jupyter Notebook +.ipynb_checkpoints + +# IPython +profile_default/ +ipython_config.py + +# pyenv +# For a library or package, you might want to ignore these files since the code is +# intended to run in multiple environments; otherwise, check them in: +# .python-version + +# pipenv +# According to pypa/pipenv#598, it is recommended to include Pipfile.lock in version control. +# However, in case of collaboration, if having platform-specific dependencies or dependencies +# having no cross-platform support, pipenv may install dependencies that don't work, or not +# install all needed dependencies. +#Pipfile.lock + +# PEP 582; used by e.g. github.com/David-OConnor/pyflow +__pypackages__/ + +# Celery stuff +celerybeat-schedule +celerybeat.pid + +# SageMath parsed files +*.sage.py + +# Environments +.env +.venv +env/ +venv/ +ENV/ +env.bak/ +venv.bak/ + +# Spyder project settings +.spyderproject +.spyproject + +# Rope project settings +.ropeproject + +# mkdocs documentation +/site + +# mypy +.mypy_cache/ +.dmypy.json +dmypy.json + +# Pyre type checker +.pyre/ + +# pytype static type analyzer +.pytype/ + +# Cython debug symbols +cython_debug/ \ No newline at end of file diff --git a/projects/cli_proxy_tester/README.md b/projects/cli_proxy_tester/README.md new file mode 100644 index 000000000..653c557f7 --- /dev/null +++ b/projects/cli_proxy_tester/README.md @@ -0,0 +1,31 @@ +# mini-projects-python - cli based proxy tester (#77) + +*Author:* Ingo Kleiber (ingo@kleiber.me) + +This mini project is a proxy tester based on `requests`. It utilized `pandas` for handling csv files and +`click` for the CLI. + +## Usage + +This script tests proxies by querying (GET request) a testing website that returns the IP of the client. If the returned IP matches the IP of the proxy, we consider the proxy to be good. + +### Testing Single Proxies + +`python cli.py single http://1.1.1.1` + +This will test the HTTP proxy 1.1.1.1 against the default testing website [iptest.ingokleiber.de](http://iptest.ingokleiber.de). +You can run your own testing service using the PHP script in `/ipinfo`. This service should be offered both via HTTP and HTTPs. + +`python cli.py single http://1.1.1.1 --iptest iptest.yourdomain.com` + +### (Re)Testing a CSV File + +`python cli.py csv-file proxies.csv` + +This will (re)test all proxies in the given file. + +### Adding and Testing Proxies From a Text File + +`python cli.py add-from-txt-file proxy_candidates.txt` + +This will add and test each proxy (one per line) in `proxy_candidates.txt`. diff --git a/projects/cli_proxy_tester/cli.py b/projects/cli_proxy_tester/cli.py new file mode 100644 index 000000000..37d7ab101 --- /dev/null +++ b/projects/cli_proxy_tester/cli.py @@ -0,0 +1,55 @@ +import re + +import click + +from proxytest import add_from_text_file +from proxytest import test_csv_file +from proxytest import test_single_proxy + + +def validate_proxy(ctx, param, value): + '''Validate proxy input. The RegEx crudely matches both IPv4 and URLs.''' + validator = re.compile(r'(https|http|socks4|socks5):\/\/' + r'((?:[0-9]{1,3}\.){3}[0-9]{1,3}(:[0-9]{2,5})?' + r'|([\da-z\.-]+)\.([a-z\.]{2,6})([\/\w \.-]*)*\/?)') + + if not validator.match(value): + raise click.BadParameter('Please provide a proxy in the format' + 'type://address (e.g., https://42.42.42.42)') + else: + return value + + +@click.group() +def cli(): + pass + + +@cli.command() +@click.argument('proxy', callback=validate_proxy) +@click.option('--iptest', default='iptest.ingokleiber.de', + help='iptest address') +@click.option('--csv', default='proxies.csv', help='CSV path') +def single(proxy, iptest, csv): + test_single_proxy(proxy, iptest, csv) + + +@cli.command() +@click.argument('csv') +@click.option('--iptest', default='iptest.ingokleiber.de', + help='iptest address') +def csv_file(iptest, csv): + test_csv_file(iptest, csv) + + +@cli.command() +@click.argument('txt') +@click.option('--iptest', default='iptest.ingokleiber.de', + help='iptest address') +@click.option('--csv', default='proxies.csv', help='CSV path') +def add_from_txt_file(iptest, txt, csv): + add_from_text_file(iptest, txt, csv) + + +if __name__ == '__main__': + cli() diff --git a/projects/cli_proxy_tester/ipinfo/index.php b/projects/cli_proxy_tester/ipinfo/index.php new file mode 100644 index 000000000..bdee7dd6b --- /dev/null +++ b/projects/cli_proxy_tester/ipinfo/index.php @@ -0,0 +1,11 @@ + $_SERVER['REMOTE_ADDR'], + "xff" => $_SERVER['HTTP_X_FORWARDED_FOR'], + "useragent" => $_SERVER['HTTP_USER_AGENT'] + ); + + echo json_encode($client_information); +?> \ No newline at end of file diff --git a/projects/cli_proxy_tester/proxytest.py b/projects/cli_proxy_tester/proxytest.py new file mode 100644 index 000000000..28991e0de --- /dev/null +++ b/projects/cli_proxy_tester/proxytest.py @@ -0,0 +1,119 @@ +import logging +from json.decoder import JSONDecodeError +from pathlib import Path + +import pandas as pd +import requests +from requests.exceptions import ProxyError + +logging.basicConfig(level=logging.INFO) + + +def add_proxies_to_file(csv_path: str, proxies: list): + '''This function will add one or multiple proxies to the CSV file.''' + + if not csv_path.exists(): + pr_file: pd.DataFrame = pd.DataFrame( + columns=['proxy_type', 'proxy_address', 'proxy_status']) + logging.info('New CSV file will be created') + else: + pr_file: pd.DataFrame = pd.read_csv(csv_path) + logging.info('Existing CSV file has been loaded') + + for proxy in proxies: + if len(pr_file) == 0: + # First proxy in the file + pr_file = pr_file.append(proxy, ignore_index=True) + else: + if len(pr_file.loc[(pr_file['proxy_type'] == proxy['proxy_type']) & + (pr_file['proxy_address'] == proxy['proxy_address'])]) > 0: + # Proxy is already in the file + pr_file.loc[(pr_file['proxy_type'] == proxy['proxy_type']) & + (pr_file['proxy_address'] == proxy['proxy_address']), + ['proxy_status']] = proxy['proxy_status'] + else: + # Proxy is not yet in the file + pr_file = pr_file.append(proxy, ignore_index=True) + + pr_file = pr_file.drop_duplicates() + pr_file.to_csv(csv_path, index=False) + logging.info('CSV file has been written') + + +def test_proxy(proxy_type: str, proxy_address: str, iptest: str): + '''This function takes a proxy (type, address) + and tests it against a given iptest adress.''' + + logging.info(f'Testing proxy: {proxy_address}') + + try: + proxies = {proxy_type: proxy_address} + proxy_status: str = '' + + if proxy_type == 'https': + r = requests.get(f'https://{iptest}', proxies=proxies) + else: + r = requests.get(f'http://{iptest}', proxies=proxies) + + try: + json_response: dict = r.json() + + if json_response["ip"] in proxy_address: + proxy_status = 'Proxy functional' + else: + logging.warning(f'Proxy "{proxy_address}"' + f'returned {json_response}') + proxy_status = 'Proxy not functional' + except JSONDecodeError: + proxy_status = 'Invalid response' + except ProxyError: + proxy_status = 'Proxy error' + + logging.info(f'Proxy {proxy_address}: {proxy_status}') + return {'proxy_type': proxy_type, + 'proxy_address': proxy_address, + 'proxy_status': proxy_status} + + +def test_single_proxy(proxy: str, iptest: str, csv_path: str): + '''This function tests an individual proxy and adds it to the CSV file.''' + proxy_type, proxy_address = proxy.split('://') + result: dict = test_proxy(proxy_type, proxy_address, iptest) + + add_proxies_to_file(Path(csv_path), [result]) + + +def test_csv_file(iptest: str, csv_path: str): + '''This function (re)tests every proxy in a given CSV file.''' + + csv_path: Path = Path(csv_path) + + if csv_path.exists(): + pr_file: pd.DataFrame = pd.read_csv(csv_path) + else: + raise FileNotFoundError + + proxies: list = [] + + for index, proxy in pr_file.iterrows(): + proxies.append(test_proxy(proxy['proxy_type'], + proxy['proxy_address'], + iptest)) + + add_proxies_to_file(csv_path, proxies) + + +def add_from_text_file(iptest: str, text_path: str, csv_path: str): + ''' This function adds a list of proxies + from a text file (line by line).''' + text_path: Path = Path(text_path) + + if text_path.exists(): + proxies: list = text_path.read_text().splitlines() + + for proxy in proxies: + '''We will treat each proxy as a single proxy + and leverage the existing function''' + test_single_proxy(proxy, iptest, csv_path) + else: + raise FileNotFoundError diff --git a/projects/cli_proxy_tester/requirements.txt b/projects/cli_proxy_tester/requirements.txt new file mode 100644 index 000000000..be260806e --- /dev/null +++ b/projects/cli_proxy_tester/requirements.txt @@ -0,0 +1,3 @@ +click==7.1.2 +proxytest==0.5.4 +pandas==1.0.5 diff --git a/projects/convert pdf to text/README.md b/projects/convert pdf to text/README.md new file mode 100644 index 000000000..1aea562f8 --- /dev/null +++ b/projects/convert pdf to text/README.md @@ -0,0 +1,14 @@ +# PDF to TXT converter +This script takes in a .pdf file and outputs a .txt file + +### Requirements + - Python + - PyPDF2 + + +### Steps +In this program you have to provide the path for the pdf file that you want to convert into text and you may also provide the path where you want your output text file to be stored. +By default the output files created will be stored in temp folder in the same directory. + +## *Author Name* +[pi1814](https://github.com/pi1814) diff --git a/projects/convert pdf to text/converter1.py b/projects/convert pdf to text/converter1.py new file mode 100644 index 000000000..67b8a44f2 --- /dev/null +++ b/projects/convert pdf to text/converter1.py @@ -0,0 +1,43 @@ +# -*- coding: utf-8 -*- + + +import PyPDF2 +import os + + +if(os.path.isdir("temp") == False): + os.mkdir("temp") + +txtpath = "" +pdfpath = "" + + + +pdfpath = input("Enter the name of your pdf file - please use backslash when typing in directory path: ") #Provide the path for your pdf here +txtpath = input("Enter the name of your txt file - please use backslash when typing in directory path: ") #Provide the path for the output text file + +BASEDIR = os.path.realpath("temp") # This is the sample base directory where all your text files will be stored if you do not give a specific path +print(BASEDIR) + + +if(len(txtpath) == 0): + txtpath = os.path.join(BASEDIR,os.path.basename(os.path.normpath(pdfpath)).replace(".pdf", "")+".txt") +pdfobj = open(pdfpath, 'rb') + +pdfread = PyPDF2.PdfFileReader(pdfobj) + +x = pdfread.numPages + + +for i in range(x): + pageObj = pdfread.getPage(i) + with open(txtpath, 'a+') as f: + f.write((pageObj.extractText())) + print(pageObj.extractText()) #This just provides the overview of what is being added to your output, you can remove it if want + + + + +pdfobj.close() + + diff --git a/projects/convert pdf to text/output.txt b/projects/convert pdf to text/output.txt new file mode 100644 index 000000000..707e37e6d --- /dev/null +++ b/projects/convert pdf to text/output.txt @@ -0,0 +1,136 @@ +Lorem Ipsum + +"Neque porro quisquam est qui dolorem ipsum quia dolor sit amet, consectetur, adipisci velit..." + +"There is no one who loves pain itself, who seeks after it and wants to have it, simply because it is pain..." + + +Lorem ipsum dolor sit amet, consectetur adipiscing elit. Mauris vitae erat nibh. Morbi imperdiet +scelerisque massa, non ornare turpis elementum consectetur. Praesent laoreet vitae libero eget +pulvinar. Fusce malesuada massa at tincidunt tincidunt. Orci var +ius natoque penatibus et magnis dis +parturient montes, nascetur ridiculus mus. Nam sed tincidunt turpis. Quisque tincidunt dictum augue +sed egestas. Ut scelerisque leo sit amet lectus vehicula, et posuere enim porttitor. Fusce porta varius +elit vel consequ +at. +Class aptent taciti sociosqu ad litora torquent per conubia nostra, per inceptos +himenaeos. Quisque in ex libero. Nullam augue mauris, blandit sit amet neque eu, viverra congue est. + +Mauris ac auctor dolor. Proin maximus quam id magna vulputate ultricie +s. Maecenas lacinia dolor +eros, a bibendum tellus bibendum vitae. Praesent vel neque imperdiet, eleifend est vel, pharetra ex. +Vivamus a hendrerit nisl. Etiam dignissim sed arcu in cursus. +Pellentesque rutrum semper justo, ut +ornare mi vehicula sodales. Fu +sce ut imperdiet nisl. Nullam suscipit, lectus et semper ornare, ante nisi +semper lorem, in viverra mauris augue non eros. +Nam tincidunt mauris mi, nec congue est bibendum +vel. Morbi ullamcorper eros at tempus suscipit. Nunc mattis sed lectus at eleifend. +Morbi convallis +augue metus, accumsan malesuada elit consectetur quis. Donec vel turpis efficitur, malesuada ligula +ut, blandit dui. Integer at purus et quam blandit volutpat. Donec vel orci efficitur, sodales diam nec, +malesuada ipsum. + +Nullam euismod, odi +o in ornare fermentum, nunc sapien vestibulum erat, aliquam elementum est est +sed erat. +Proin facilisis lacus vitae magna volutpat, vitae commodo velit volutpat. Aliquam rutrum erat +a nibh elementum, quis eleifend nulla fringilla. Proin sed velit +pulvinar est consequat rhoncus ut non +augue. Cras id velit purus. Aliquam convallis venenatis ultrices. Nam pulvinar aliquet magna, at ornare +ligula cursus vel. Curabitur vitae cursus ante. Morbi congue lorem ac ante pretium commodo. Nulla +imperdiet diam e +get tortor dignissim egestas vitae sit amet sem. + +In purus elit, finibus quis nisi ut, placerat consectetur erat. Pellentesque habitant morbi tristique +senectus et netus et malesuada fames ac turpis egestas. Aenean non metus turpis. Vestibulum at +iaculis ma +ssa. Nunc orci magna, congue a egestas nec, vulputate non mauris. Fusce malesuada a +ipsum eu porttitor. Cras pretium porta tempor. Integer pulvinar convallis ipsum at varius. Cras convallis +varius arcu eget egestas. Praesent ullamcorper nisl ex, et mollis +ante sagittis vel. Ut elementum ligula +enim. Maecenas massa dui, malesuada in metus nec, vulputate efficitur nibh. + +Curabitur dictum lacus magna. Integer ex velit, malesuada eu ligula id, suscipit sagittis lacus. +Phasellus cursus viverra ultrices. Maecenas +magna arcu, finibus eget elit vitae, iaculis ornare tellus. +Nullam faucibus libero felis, in efficitur lorem vestibulum id. Aliquam sagittis scelerisque tellus, a +gravida orci suscipit quis. Orci varius natoque penatibus et magnis dis parturient montes, na +scetur +ridiculus mus. Pellentesque ac risus arcu. Aliquam condimentum massa sed tincidunt tincidunt. +Pellentesque non mauris in elit rhoncus condimentum. Vivamus tempus lacus ex. Integer malesuada, +justo sed finibus egestas, risus velit porta erat, a tempo +r sem augue vel leo. Ut nisi massa, egestas +quis orci nec, varius condimentum lorem. Nullam hendrerit feugiat lacinia. Pellentesque habitant morbi +tristique senectus et netus et malesuada fames ac turpis egestas. Vestibulum ante ipsum primis in +faucibus or +ci luctus et ultrices posuere cubilia Curae; + +Lorem Ipsum + +"Neque porro quisquam est qui dolorem ipsum quia dolor sit amet, consectetur, adipisci velit..." + +"There is no one who loves pain itself, who seeks after it and wants to have it, simply because it is pain..." + + +Lorem ipsum dolor sit amet, consectetur adipiscing elit. Mauris vitae erat nibh. Morbi imperdiet +scelerisque massa, non ornare turpis elementum consectetur. Praesent laoreet vitae libero eget +pulvinar. Fusce malesuada massa at tincidunt tincidunt. Orci var +ius natoque penatibus et magnis dis +parturient montes, nascetur ridiculus mus. Nam sed tincidunt turpis. Quisque tincidunt dictum augue +sed egestas. Ut scelerisque leo sit amet lectus vehicula, et posuere enim porttitor. Fusce porta varius +elit vel consequ +at. +Class aptent taciti sociosqu ad litora torquent per conubia nostra, per inceptos +himenaeos. Quisque in ex libero. Nullam augue mauris, blandit sit amet neque eu, viverra congue est. + +Mauris ac auctor dolor. Proin maximus quam id magna vulputate ultricie +s. Maecenas lacinia dolor +eros, a bibendum tellus bibendum vitae. Praesent vel neque imperdiet, eleifend est vel, pharetra ex. +Vivamus a hendrerit nisl. Etiam dignissim sed arcu in cursus. +Pellentesque rutrum semper justo, ut +ornare mi vehicula sodales. Fu +sce ut imperdiet nisl. Nullam suscipit, lectus et semper ornare, ante nisi +semper lorem, in viverra mauris augue non eros. +Nam tincidunt mauris mi, nec congue est bibendum +vel. Morbi ullamcorper eros at tempus suscipit. Nunc mattis sed lectus at eleifend. +Morbi convallis +augue metus, accumsan malesuada elit consectetur quis. Donec vel turpis efficitur, malesuada ligula +ut, blandit dui. Integer at purus et quam blandit volutpat. Donec vel orci efficitur, sodales diam nec, +malesuada ipsum. + +Nullam euismod, odi +o in ornare fermentum, nunc sapien vestibulum erat, aliquam elementum est est +sed erat. +Proin facilisis lacus vitae magna volutpat, vitae commodo velit volutpat. Aliquam rutrum erat +a nibh elementum, quis eleifend nulla fringilla. Proin sed velit +pulvinar est consequat rhoncus ut non +augue. Cras id velit purus. Aliquam convallis venenatis ultrices. Nam pulvinar aliquet magna, at ornare +ligula cursus vel. Curabitur vitae cursus ante. Morbi congue lorem ac ante pretium commodo. Nulla +imperdiet diam e +get tortor dignissim egestas vitae sit amet sem. + +In purus elit, finibus quis nisi ut, placerat consectetur erat. Pellentesque habitant morbi tristique +senectus et netus et malesuada fames ac turpis egestas. Aenean non metus turpis. Vestibulum at +iaculis ma +ssa. Nunc orci magna, congue a egestas nec, vulputate non mauris. Fusce malesuada a +ipsum eu porttitor. Cras pretium porta tempor. Integer pulvinar convallis ipsum at varius. Cras convallis +varius arcu eget egestas. Praesent ullamcorper nisl ex, et mollis +ante sagittis vel. Ut elementum ligula +enim. Maecenas massa dui, malesuada in metus nec, vulputate efficitur nibh. + +Curabitur dictum lacus magna. Integer ex velit, malesuada eu ligula id, suscipit sagittis lacus. +Phasellus cursus viverra ultrices. Maecenas +magna arcu, finibus eget elit vitae, iaculis ornare tellus. +Nullam faucibus libero felis, in efficitur lorem vestibulum id. Aliquam sagittis scelerisque tellus, a +gravida orci suscipit quis. Orci varius natoque penatibus et magnis dis parturient montes, na +scetur +ridiculus mus. Pellentesque ac risus arcu. Aliquam condimentum massa sed tincidunt tincidunt. +Pellentesque non mauris in elit rhoncus condimentum. Vivamus tempus lacus ex. Integer malesuada, +justo sed finibus egestas, risus velit porta erat, a tempo +r sem augue vel leo. Ut nisi massa, egestas +quis orci nec, varius condimentum lorem. Nullam hendrerit feugiat lacinia. Pellentesque habitant morbi +tristique senectus et netus et malesuada fames ac turpis egestas. Vestibulum ante ipsum primis in +faucibus or +ci luctus et ultrices posuere cubilia Curae; + diff --git a/projects/convert pdf to text/samplePdf1.pdf b/projects/convert pdf to text/samplePdf1.pdf new file mode 100644 index 000000000..a7ea0027c Binary files /dev/null and b/projects/convert pdf to text/samplePdf1.pdf differ diff --git a/projects/convert pdf to text/temp/samplePdf1.txt b/projects/convert pdf to text/temp/samplePdf1.txt new file mode 100644 index 000000000..cb469059f --- /dev/null +++ b/projects/convert pdf to text/temp/samplePdf1.txt @@ -0,0 +1,68 @@ +Lorem Ipsum + +"Neque porro quisquam est qui dolorem ipsum quia dolor sit amet, consectetur, adipisci velit..." + +"There is no one who loves pain itself, who seeks after it and wants to have it, simply because it is pain..." + + +Lorem ipsum dolor sit amet, consectetur adipiscing elit. Mauris vitae erat nibh. Morbi imperdiet +scelerisque massa, non ornare turpis elementum consectetur. Praesent laoreet vitae libero eget +pulvinar. Fusce malesuada massa at tincidunt tincidunt. Orci var +ius natoque penatibus et magnis dis +parturient montes, nascetur ridiculus mus. Nam sed tincidunt turpis. Quisque tincidunt dictum augue +sed egestas. Ut scelerisque leo sit amet lectus vehicula, et posuere enim porttitor. Fusce porta varius +elit vel consequ +at. +Class aptent taciti sociosqu ad litora torquent per conubia nostra, per inceptos +himenaeos. Quisque in ex libero. Nullam augue mauris, blandit sit amet neque eu, viverra congue est. + +Mauris ac auctor dolor. Proin maximus quam id magna vulputate ultricie +s. Maecenas lacinia dolor +eros, a bibendum tellus bibendum vitae. Praesent vel neque imperdiet, eleifend est vel, pharetra ex. +Vivamus a hendrerit nisl. Etiam dignissim sed arcu in cursus. +Pellentesque rutrum semper justo, ut +ornare mi vehicula sodales. Fu +sce ut imperdiet nisl. Nullam suscipit, lectus et semper ornare, ante nisi +semper lorem, in viverra mauris augue non eros. +Nam tincidunt mauris mi, nec congue est bibendum +vel. Morbi ullamcorper eros at tempus suscipit. Nunc mattis sed lectus at eleifend. +Morbi convallis +augue metus, accumsan malesuada elit consectetur quis. Donec vel turpis efficitur, malesuada ligula +ut, blandit dui. Integer at purus et quam blandit volutpat. Donec vel orci efficitur, sodales diam nec, +malesuada ipsum. + +Nullam euismod, odi +o in ornare fermentum, nunc sapien vestibulum erat, aliquam elementum est est +sed erat. +Proin facilisis lacus vitae magna volutpat, vitae commodo velit volutpat. Aliquam rutrum erat +a nibh elementum, quis eleifend nulla fringilla. Proin sed velit +pulvinar est consequat rhoncus ut non +augue. Cras id velit purus. Aliquam convallis venenatis ultrices. Nam pulvinar aliquet magna, at ornare +ligula cursus vel. Curabitur vitae cursus ante. Morbi congue lorem ac ante pretium commodo. Nulla +imperdiet diam e +get tortor dignissim egestas vitae sit amet sem. + +In purus elit, finibus quis nisi ut, placerat consectetur erat. Pellentesque habitant morbi tristique +senectus et netus et malesuada fames ac turpis egestas. Aenean non metus turpis. Vestibulum at +iaculis ma +ssa. Nunc orci magna, congue a egestas nec, vulputate non mauris. Fusce malesuada a +ipsum eu porttitor. Cras pretium porta tempor. Integer pulvinar convallis ipsum at varius. Cras convallis +varius arcu eget egestas. Praesent ullamcorper nisl ex, et mollis +ante sagittis vel. Ut elementum ligula +enim. Maecenas massa dui, malesuada in metus nec, vulputate efficitur nibh. + +Curabitur dictum lacus magna. Integer ex velit, malesuada eu ligula id, suscipit sagittis lacus. +Phasellus cursus viverra ultrices. Maecenas +magna arcu, finibus eget elit vitae, iaculis ornare tellus. +Nullam faucibus libero felis, in efficitur lorem vestibulum id. Aliquam sagittis scelerisque tellus, a +gravida orci suscipit quis. Orci varius natoque penatibus et magnis dis parturient montes, na +scetur +ridiculus mus. Pellentesque ac risus arcu. Aliquam condimentum massa sed tincidunt tincidunt. +Pellentesque non mauris in elit rhoncus condimentum. Vivamus tempus lacus ex. Integer malesuada, +justo sed finibus egestas, risus velit porta erat, a tempo +r sem augue vel leo. Ut nisi massa, egestas +quis orci nec, varius condimentum lorem. Nullam hendrerit feugiat lacinia. Pellentesque habitant morbi +tristique senectus et netus et malesuada fames ac turpis egestas. Vestibulum ante ipsum primis in +faucibus or +ci luctus et ultrices posuere cubilia Curae; + diff --git a/projects/convert_Imgs/JPGtoPNG.py b/projects/convert_Imgs/JPGtoPNG.py new file mode 100644 index 000000000..2485c3df0 --- /dev/null +++ b/projects/convert_Imgs/JPGtoPNG.py @@ -0,0 +1,4 @@ +from PIL import Image + +im = Image.open("naruto_first.jpg").convert("RGB") +im.save("naruto.png", "png") diff --git a/projects/convert_Imgs/PNGtoJPG.py b/projects/convert_Imgs/PNGtoJPG.py new file mode 100644 index 000000000..d057220c0 --- /dev/null +++ b/projects/convert_Imgs/PNGtoJPG.py @@ -0,0 +1,4 @@ +from PIL import Image + +im = Image.open("naruto_first.png").convert("RGB") +im.save("naruto.jpg", "jpeg") diff --git a/projects/convert_Imgs/README.md b/projects/convert_Imgs/README.md new file mode 100644 index 000000000..aebbe1844 --- /dev/null +++ b/projects/convert_Imgs/README.md @@ -0,0 +1,49 @@ +# Convert Image Format + +These scripts can change format of images from PNG to JPG and JPG to PNG + +### Prerequisites + +Required Modules +- PIL==1.1.6 + +To install: +``` +$ pip install -r requirements.txt +``` + +### How to run the script + +- Dynamic Change + Copy the script `convertDynamic.py` into the directory where images + are (PNG and/or JPG). And run: + ``` bash + $ python convertDynamic.py + ``` + This will convert all JPG images to PNG and PNG images to JPG + in the present directory tree recursively + (i.e. will change format in images inside sub-directories too.) +- JPG to PNG (single image) + 1. Copy the JPG image to the directory where `JPGtoPNG.py` exists + 2. Replace file name `naruto_first.jpg` inside `JPGtoPNG.py` + (line 3) to input file name (JPG). + 3. Replace file name `naruto.png` inside `JPGtoPNG.py`(line 4) to + output file name (PNG). + 4. Run following command: + ``` + $ python JPGtoPNG.py + ``` +- PNG to JPG (single image) + 1. Copy the PNG image in directory where `PNGtoJPG.py` exists + 2. Replace file name `naruto_first.png` inside `PNGtoJPG.py` + (line 3) to input file name (PNG). + 3. Replace file name `naruto.jpg` inside `PNGtoJPG.py` + (line 4) to output file name (JPG). + 4. Run following command: + ``` + $ python PNGtoJPG.py + ``` + +## *Author Name* + +[Ramon Ferreira](https://github.com/ramonfsk) diff --git a/projects/convert_Imgs/convertDynamic.py b/projects/convert_Imgs/convertDynamic.py new file mode 100644 index 000000000..d1291dc47 --- /dev/null +++ b/projects/convert_Imgs/convertDynamic.py @@ -0,0 +1,19 @@ +from PIL import Image +import sys +import os + +try: + im = None + for root, dirs, files in os.walk("."): + for filename in files: + if filename.endswith('.jpg'): + im = Image.open(filename).convert("RGB") + im.save(filename.replace('jpg', 'png'), "png") + elif filename.endswith('.png'): + im = Image.open(filename).convert("RGB") + im.save(filename.replace('png', 'jpg'), "jpeg") + else: + print('dont have image to convert') +except IOError: + print('directory empty!') + sys.exit() diff --git a/projects/convert_Imgs/naruto_first.jpg b/projects/convert_Imgs/naruto_first.jpg new file mode 100644 index 000000000..7bec82c1e Binary files /dev/null and b/projects/convert_Imgs/naruto_first.jpg differ diff --git a/projects/convert_Imgs/naruto_first.png b/projects/convert_Imgs/naruto_first.png new file mode 100644 index 000000000..8f5ef965f Binary files /dev/null and b/projects/convert_Imgs/naruto_first.png differ diff --git a/projects/convert_Imgs/naruto_last.jpg b/projects/convert_Imgs/naruto_last.jpg new file mode 100644 index 000000000..6bd041cae Binary files /dev/null and b/projects/convert_Imgs/naruto_last.jpg differ diff --git a/projects/convert_Imgs/naruto_last.png b/projects/convert_Imgs/naruto_last.png new file mode 100644 index 000000000..8273336ee Binary files /dev/null and b/projects/convert_Imgs/naruto_last.png differ diff --git a/projects/convert_Imgs/requirements.txt b/projects/convert_Imgs/requirements.txt new file mode 100644 index 000000000..4bc341572 --- /dev/null +++ b/projects/convert_Imgs/requirements.txt @@ -0,0 +1 @@ +PIL==1.1.6 diff --git a/projects/convert_dictionary_to_python_object/README.md b/projects/convert_dictionary_to_python_object/README.md new file mode 100644 index 000000000..27805c02d --- /dev/null +++ b/projects/convert_dictionary_to_python_object/README.md @@ -0,0 +1,17 @@ +# Dictionary to Python Object + +A Class in python to convert dictionary to a object + +### Prerequisites + +None, only a running Python installation is required. + +### How to run the script + +- Add the `class obj` in your code. +- Modify the code according to your need or use it directly: + `ob = obj({'a':1, 'b': 2, 'c':3})` + +## *Author Name* + +[Varun-22](https://github.com/Varun-22) diff --git a/projects/convert_dictionary_to_python_object/conversion.py b/projects/convert_dictionary_to_python_object/conversion.py new file mode 100644 index 000000000..51ee3c0c5 --- /dev/null +++ b/projects/convert_dictionary_to_python_object/conversion.py @@ -0,0 +1,6 @@ +class obj(object): + def __init__(self, d): + for x, y in d.items(): + setattr(self, x, obj(y) if isinstance(y, dict) else y) +data = {'a':5,'b':7,'c':{'d':8}} +ob = obj(data) diff --git a/projects/convert_png_images_to_ico_format/README.md b/projects/convert_png_images_to_ico_format/README.md new file mode 100644 index 000000000..b7beefd26 --- /dev/null +++ b/projects/convert_png_images_to_ico_format/README.md @@ -0,0 +1,21 @@ +# CONVERT_PNG_to_ICO + +This project contains a simple python script to convert a .png image to .ICO format + +## Requirements +Pillow module + +`pip install pillow` + +## Two methods: + +The conversion can be done in two ways: +### Using Terminal +- Add the image in png format with name as 'input' in this folder. +- Run the convert.py script. +- output image will be generated and saved in this folder with the name 'output'. + +### Using GUI +- Run the convertUI.py script. +- Select the 'Import PNG File' button and pick any png image from any location. +- Select the 'Convert PNG to ICO' button and pick the location where the file will be saved. diff --git a/projects/convert_png_images_to_ico_format/convert.py b/projects/convert_png_images_to_ico_format/convert.py new file mode 100644 index 000000000..17ccceb80 --- /dev/null +++ b/projects/convert_png_images_to_ico_format/convert.py @@ -0,0 +1,5 @@ +from PIL import Image +# Take input image from present folder +img = Image.open('input.png') +# Generate and save output image to present folder +img.save('output.ico') \ No newline at end of file diff --git a/projects/convert_png_images_to_ico_format/convertUI.py b/projects/convert_png_images_to_ico_format/convertUI.py new file mode 100644 index 000000000..19bc792fe --- /dev/null +++ b/projects/convert_png_images_to_ico_format/convertUI.py @@ -0,0 +1,44 @@ +import tkinter as tk +from PIL import Image + +# Initialize Tkinter window +root = tk.Tk() +# Initialize variable to store image path +img = None +# Initialize font, background color, foreground color and width for the buttons +font = ('helvetica', 12, 'bold') +bg = 'blue' +fg = 'white' +width = 15 + +def getPNG(): + '''Function to get png image location and open it with pillow''' + global img + import_file_path = tk.filedialog.askopenfilename(filetypes=[("PNG File",'.png')]) + img = Image.open(import_file_path) + +def convertToICO(): + global img + '''Function to convert image from png to ico format with pillow and save to user specified location''' + if img is None: + tk.messagebox.showerror("Error", "No File selected") + else: + export_file_path = tk.filedialog.asksaveasfilename(defaultextension='.ico') + img.save(export_file_path) + tk.messagebox.showinfo("Success", "File converted and saved") + +# Set the window title +root.title('PNG to ICO Converter') +canvas1 = tk.Canvas(root, width=500, height=350, bg='lightblue') +canvas1.pack() +# Set the screen title +label1 = tk.Label(root, text='PNG to ICO Converter', bg='lightblue') +label1.config(font=('helvetica', 20)) +canvas1.create_window(250, 100, window=label1) +# Browse button to browse for image +browseButton = tk.Button(text="Import PNG File", command=getPNG, bg=bg, fg=fg, font=font, width=width) +canvas1.create_window(250, 150, window=browseButton) +# Convert button to convert selected image and save +saveAsButton = tk.Button(text='Convert PNG to ICO', command=convertToICO, bg=bg, fg=fg, font=font, width=width) +canvas1.create_window(250, 200, window=saveAsButton) +root.mainloop() diff --git a/projects/convert_png_images_to_ico_format/input.png b/projects/convert_png_images_to_ico_format/input.png new file mode 100644 index 000000000..376c123b3 Binary files /dev/null and b/projects/convert_png_images_to_ico_format/input.png differ diff --git a/projects/convert_png_images_to_ico_format/output.ico b/projects/convert_png_images_to_ico_format/output.ico new file mode 100644 index 000000000..8c961b27f Binary files /dev/null and b/projects/convert_png_images_to_ico_format/output.ico differ diff --git a/projects/convert_png_images_to_ico_format/requirements.txt b/projects/convert_png_images_to_ico_format/requirements.txt new file mode 100644 index 000000000..692a5fe58 --- /dev/null +++ b/projects/convert_png_images_to_ico_format/requirements.txt @@ -0,0 +1 @@ +Pillow==7.2.0 \ No newline at end of file diff --git a/projects/create script to encode and decode text/README.md b/projects/create script to encode and decode text/README.md deleted file mode 100644 index 7c97da1ce..000000000 --- a/projects/create script to encode and decode text/README.md +++ /dev/null @@ -1,7 +0,0 @@ -## create script to encode and decode text - -### usage - -python aes_encode.py file.txt - -An encrypted file("encrypted.bin") will be generated after the program is run \ No newline at end of file diff --git a/projects/detect_align_faces/README.md b/projects/detect_align_faces/README.md new file mode 100644 index 000000000..7eb08fd48 --- /dev/null +++ b/projects/detect_align_faces/README.md @@ -0,0 +1,25 @@ +# Detect and align faces + +This algorithm can detect the faces from picture and then align them. + +## Requirement + +**Dowload model parameters:** + +You should dowload the [model parameters](http://dlib.net/files/shape_predictor_68_face_landmarks.dat.bz2) +from dlib, decompress and move to `./dat` + +**Installation:** + +```shell +$ pip install -r requirements.txt +``` + +## Usage + +```shell +$ python3 main.py [pic1, pic2...] +``` + +After the script finished, you will get some faces picture in the same +directory. diff --git a/projects/detect_align_faces/example.jpg b/projects/detect_align_faces/example.jpg new file mode 100644 index 000000000..28641d8d6 Binary files /dev/null and b/projects/detect_align_faces/example.jpg differ diff --git a/projects/detect_align_faces/main.py b/projects/detect_align_faces/main.py new file mode 100644 index 000000000..7c31988e0 --- /dev/null +++ b/projects/detect_align_faces/main.py @@ -0,0 +1,74 @@ +#!/usr/bin/env python3 +# +# Copyright(C) 2021 wuyaoping +# + + +import numpy as np +import os.path as osp +import sys +import cv2 +import dlib + +OUT_SIZE = (224, 224) +LEFT_EYE_RANGE = (36, 42) +RIGHT_EYE_RABGE = (42, 48) +LEFT_EYE_POS = (0.35, 0.3815) +DAT_PATH = "./dat/shape_predictor_68_face_landmarks.dat" + + +def main(files): + detector = dlib.get_frontal_face_detector() + sp = dlib.shape_predictor(DAT_PATH) + + for file in files: + img = cv2.imread(file, cv2.IMREAD_ANYCOLOR) + img = cv2.cvtColor(img, cv2.COLOR_BGR2RGB) + + faces = detect_align_faces(detector, sp, img) + for (idx, face) in enumerate(faces): + face = cv2.cvtColor(face, cv2.COLOR_RGB2BGR) + filename, ext = osp.splitext(file) + filename += '_face_{:03}'.format(idx) + ext + cv2.imwrite(filename, face) + + +def detect_align_faces(detector, sp, img): + faces = detector(img, 1) + res = [] + for face in faces: + shape = sp(img, face) + left, right = shape_to_pos(shape) + left_center = np.mean(left, axis=0) + right_center = np.mean(right, axis=0) + + dx = right_center[0] - left_center[0] + dy = right_center[1] - left_center[1] + angle = np.degrees(np.arctan2(dy, dx)) + dist = np.sqrt(dy ** 2 + dx ** 2) + out_dist = OUT_SIZE[0] * (1 - 2 * LEFT_EYE_POS[0]) + scale = out_dist / dist + center = ((left_center + right_center) // 2).tolist() + + mat = cv2.getRotationMatrix2D(center, angle, scale) + mat[0, 2] += (0.5 * OUT_SIZE[0] - center[0]) + mat[1, 2] += (LEFT_EYE_POS[1] * OUT_SIZE[1] - center[1]) + res_face = cv2.warpAffine(img, mat, OUT_SIZE, flags=cv2.INTER_CUBIC) + res.append(res_face) + + return res + + +def shape_to_pos(shape): + parts = [] + for p in shape.parts(): + parts.append((p.x, p.y)) + + left = parts[LEFT_EYE_RANGE[0]: LEFT_EYE_RANGE[-1]] + right = parts[RIGHT_EYE_RABGE[0]: RIGHT_EYE_RABGE[-1]] + + return (np.array(left), np.array(right)) + + +if __name__ == '__main__': + main(sys.argv[1:]) diff --git a/projects/detect_align_faces/requirements.txt b/projects/detect_align_faces/requirements.txt new file mode 100644 index 000000000..97a266ea5 --- /dev/null +++ b/projects/detect_align_faces/requirements.txt @@ -0,0 +1,3 @@ +dlib==19.22.1 +numpy==1.21.2 +opencv-python==4.5.3.56 diff --git a/projects/dork_search_google/README.md b/projects/dork_search_google/README.md new file mode 100644 index 000000000..a6c0e0c30 --- /dev/null +++ b/projects/dork_search_google/README.md @@ -0,0 +1,20 @@ +# Exploit the google dork! + +this script will teach you how to auto find the vulnerability sites of sql injection in google search engine + +#Prerequisites +You only need Python to run this script. You can visit here to download Python. +but you need to install requirements package first! +>pip3 install -r requirements.txt + +# how to run this program? + +>python3 main.py + +# Sample use of the script + +>kali@kali$ python3 main.py +>[?] dork: [inurl:cart.php?id=] +>[?] total page : 25 +> +> you will see the following results here diff --git a/projects/dork_search_google/main.py b/projects/dork_search_google/main.py new file mode 100644 index 000000000..5bd35ab46 --- /dev/null +++ b/projects/dork_search_google/main.py @@ -0,0 +1,76 @@ +#!/usr/bin/python3 + +import sys +import re + +# the error contans for sql injection vulnerable +errors = {'MySQL': 'error in your SQL syntax', + 'MiscError': 'mysql_fetch', + 'MiscError2': 'num_rows', + 'Oracle': 'ORA-01756', + 'JDBC_CFM': 'Error Executing Database Query', + 'JDBC_CFM2': 'SQLServer JDBC Driver', + 'MSSQL_OLEdb': 'Microsoft OLE DB Provider for SQL Server', + 'MSSQL_Uqm': 'Unclosed quotation mark', + 'MS-Access_ODBC': 'ODBC Microsoft Access Driver', + 'MS-Access_JETdb': 'Microsoft JET Database', + 'Error Occurred While Processing Request' : 'Error Occurred While Processing Request', + 'Server Error' : 'Server Error', + 'Microsoft OLE DB Provider for ODBC Drivers error' : 'Microsoft OLE DB Provider for ODBC Drivers error', + 'Invalid Querystring' : 'Invalid Querystring', + 'OLE DB Provider for ODBC' : 'OLE DB Provider for ODBC', + 'VBScript Runtime' : 'VBScript Runtime', + 'ADODB.Field' : 'ADODB.Field', + 'BOF or EOF' : 'BOF or EOF', + 'ADODB.Command' : 'ADODB.Command', + 'JET Database' : 'JET Database', + 'mysql_fetch_array()' : 'mysql_fetch_array()', + 'Syntax error' : 'Syntax error', + 'mysql_numrows()' : 'mysql_numrows()', + 'GetArray()' : 'GetArray()', + 'FetchRow()' : 'FetchRow()', + 'Input string was not in a correct format' : 'Input string was not in a correct format', + 'Not found' : 'Not found'} + + +try: + import requests + import googlesearch + # the function to exploit the google hacking databases + def Exploit(dork,total_page): + # this require google search engine + user_agent = {"User-agent":"Mozilla/5.0 (Windows NT 6.2; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/75.0.3770.100 Safari/537.36"} + + Total_page = int(total_page) + + for b in googlesearch.search(dork, num=Total_page): + web = b+"'" # add ' to end the result url. to check if website is vuln by SQL Injection + # using requests + r = requests.get(web, headers=user_agent) + webs = r.text + # return errors dictionary to find the error problem matches + for Type, ErrorMessage in errors.items(): + if re.search(ErrorMessage, webs): + # append the list of vulnerability website to result + print(" \033[41m\033[30mVULN\033[40m\033[37m {0}\n Vulnerability Type: \033[31m{1}".format(b,Type)) + + # doing the while input + while True: + # going to ask your dork + dork = input("[?] dork: [inurl:cart.php?id=] ") + total_page = input("[?] total page : ") + + # if you input the empty dork. this will set the default dork as 'inurl:products.php?id=' + if not dork: + Exploit(dork = "inurl:cart.php?id=", + total_page = total_page) + else: + Exploit(dork = dork,total_page = total_page) + +except ImportError: + # this error will display on your terminal if you havent + # installed the google module + print("[!] You havent installed the required modules!\n[+] to install that packages. run 'pip3 install -r requirements.txt' on your terminal\n") + sys.exit() +except KeyboardInterrupt: + sys.exit() diff --git a/projects/dork_search_google/requirements.txt b/projects/dork_search_google/requirements.txt new file mode 100644 index 000000000..a5ef94dc0 --- /dev/null +++ b/projects/dork_search_google/requirements.txt @@ -0,0 +1,2 @@ +google +requests diff --git a/projects/download GeeksForGeeks articles/downloader.py b/projects/download GeeksForGeeks articles/downloader.py new file mode 100644 index 000000000..24dcc2b70 --- /dev/null +++ b/projects/download GeeksForGeeks articles/downloader.py @@ -0,0 +1,54 @@ +# !/usr/bin/env python +from selenium import webdriver +from webdriver_manager.chrome import ChromeDriverManager +import json +import requests + + +# article url +# URL = "https://www.geeksforgeeks.org/what-can-i-do-with-python/" + + +def get_driver(): + # chrome options settings + chrome_options = webdriver.ChromeOptions() + settings = { + "recentDestinations": [ + {"id": "Save as PDF", "origin": "local", "account": ""} + ], + "selectedDestinationId": "Save as PDF", + "version": 2, + } + prefs = { + "printing.print_preview_sticky_settings.appState": json.dumps(settings) + } + chrome_options.add_experimental_option("prefs", prefs) + chrome_options.add_argument("--kiosk-printing") + + # launch browser with predefined settings + browser = webdriver.Chrome( + executable_path=ChromeDriverManager().install(), options=chrome_options + ) + return browser + + +def download_article(URL): + browser = get_driver() + browser.get(URL) + + # launch print and save as pdf + browser.execute_script("window.print();") + browser.close() + + +if __name__ == "__main__": + URL = input("provide article URL: ") + # check if the url is valid/reachable + if requests.get(URL).status_code == 200: + try: + download_article(URL) + print("Your article is successfully downloaded") + except Exception as e: + print(e) + else: + print("Enter a valid working URL") diff --git a/projects/download GeeksForGeeks articles/readme.md b/projects/download GeeksForGeeks articles/readme.md new file mode 100644 index 000000000..9ac3c156c --- /dev/null +++ b/projects/download GeeksForGeeks articles/readme.md @@ -0,0 +1,23 @@ +# Download GeeksForGeeks Articles as pdf + +This script take a link of GeeksForGeeks article as input and download the complete article as a pdf at default download location. + +### Prerequisites + +* selenium +* requests +* webdriver-manager +* Run `pip install -r requirements.txt` to install required external modules. + +### How to run the script + +- Execute `python3 downloader.py` +- Type in URL of article when prompted. + +### Screenshot/GIF showing the sample use of the script + +![Screenshot of the Output](https://github.com/Python-World/python-mini-projects/blob/master/projects/download%20GeeksForGeeks%20articles/screenshot.jpg) + +## *Author Name* + +[Shiv Thakur](https://github.com/ShivSt) diff --git a/projects/download GeeksForGeeks articles/requirements.txt b/projects/download GeeksForGeeks articles/requirements.txt new file mode 100644 index 000000000..a65ab54dc --- /dev/null +++ b/projects/download GeeksForGeeks articles/requirements.txt @@ -0,0 +1,3 @@ +requests==2.24.0 +selenium==3.141.0 +webdriver-manager==3.2.2 \ No newline at end of file diff --git a/projects/download GeeksForGeeks articles/screenshot.jpg b/projects/download GeeksForGeeks articles/screenshot.jpg new file mode 100644 index 000000000..11cafb990 Binary files /dev/null and b/projects/download GeeksForGeeks articles/screenshot.jpg differ diff --git a/projects/export_mysql_to_csv_send_to_wocom/README.md b/projects/export_mysql_to_csv_send_to_wocom/README.md new file mode 100644 index 000000000..2fe0bc4b0 --- /dev/null +++ b/projects/export_mysql_to_csv_send_to_wocom/README.md @@ -0,0 +1,25 @@ +# export_mysql_to_csv_send_to_wocom + +Export the data in mysql into CSV files and send them to enterprise wechat group chat. + +### Prerequisites + +- PyMySQL==1.0.2 +- requests==2.26.0 + +### How to run the script + +```shell +# 1. edit config.ini +$ vim config.ini +# 2. run script +$ python export_mysql_data_to_csv.py +``` + +### Screenshot/GIF showing the sample use of the script + +![pic](./pic.png) + +### Author Name + +[Yuan Lei(雷园)](https://github.com/LeiyuanBlog) diff --git a/projects/export_mysql_to_csv_send_to_wocom/config.ini b/projects/export_mysql_to_csv_send_to_wocom/config.ini new file mode 100644 index 000000000..a8ed91a7c --- /dev/null +++ b/projects/export_mysql_to_csv_send_to_wocom/config.ini @@ -0,0 +1,10 @@ +[db] +host = 127.0.0.1 +username = root +password = 123456 +database = user +[wecom] +key = * +[message] +sql = select * from user +title = 测试文件 diff --git a/projects/export_mysql_to_csv_send_to_wocom/export_mysql_data_to_csv.py b/projects/export_mysql_to_csv_send_to_wocom/export_mysql_data_to_csv.py new file mode 100644 index 000000000..ff7abafa8 --- /dev/null +++ b/projects/export_mysql_to_csv_send_to_wocom/export_mysql_data_to_csv.py @@ -0,0 +1,56 @@ +# -*- coding: utf-8 -*- +import codecs +import configparser +import csv +import time + +import pymysql +import requests as requests + +ini = configparser.ConfigParser() +ini.read('config.ini') +wecom_key = ini.get('wecom', 'key') + + +def sql(sqlstr): # 定义一个执行SQL的函数 + conn = pymysql.connect(host=ini.get('db', 'host'), user=ini.get('db', 'username'), + password=ini.get('db', 'password'), database=ini.get('db', 'database')) + cursor = conn.cursor() + cursor.execute(sqlstr) + results = cursor.fetchall() # 获取查询的所有记录 + cursor.close() + conn.close() + return results + + +def read_mysql_to_csv(filename): + with codecs.open(filename=filename, mode='w', encoding='utf-8') as f: + write = csv.writer(f, dialect='excel') + results = sql( + ini.get('message', 'sql') + ) + for result in results: + write.writerow(result) + + +def upload_file_robots(filename): + url = "https://qyapi.weixin.qq.com/cgi-bin/webhook/upload_media?key=%(key)s&type=file" % {"key": wecom_key} + data = {'file': open(filename, 'rb')} # post jason + response = requests.post(url=url, files=data) # post 请求上传文件 + json_res = response.json() # 返回转为json + media_id = json_res['media_id'] # 提取返回ID + return media_id # 返回请求状态 + + +def send_file_robots(media_id): + wx_url = 'https://qyapi.weixin.qq.com/cgi-bin/webhook/send?key=%(key)s' % {"key": wecom_key} + data = {"msgtype": "file", + "file": {"media_id": media_id}} # post json + r = requests.post(url=wx_url, json=data) + return r + + +if __name__ == '__main__': + filename = ini.get('message', 'title') + time.strftime('%y%m%d') + '.csv' + read_mysql_to_csv(filename) + print(send_file_robots(upload_file_robots(filename))) diff --git a/projects/export_mysql_to_csv_send_to_wocom/pic.png b/projects/export_mysql_to_csv_send_to_wocom/pic.png new file mode 100644 index 000000000..62188a162 Binary files /dev/null and b/projects/export_mysql_to_csv_send_to_wocom/pic.png differ diff --git a/projects/export_mysql_to_csv_send_to_wocom/requirements.txt b/projects/export_mysql_to_csv_send_to_wocom/requirements.txt new file mode 100644 index 000000000..365a6b592 --- /dev/null +++ b/projects/export_mysql_to_csv_send_to_wocom/requirements.txt @@ -0,0 +1,17 @@ +certifi==2021.10.8 +charset-normalizer==2.0.7 +configparser==5.0.2 +idna==3.3 +importlib-metadata==4.8.1 +Jinja2==3.0.2 +MarkupSafe==2.0.1 +prettytable==2.4.0 +pyecharts==1.9.0 +PyMySQL==1.0.2 +requests==2.26.0 +simplejson==3.17.5 +typing-extensions==3.10.0.2 +urllib3==1.26.7 +wcwidth==0.2.5 +xlwt==1.3.0 +zipp==3.6.0 diff --git a/projects/image watermark/watermark.py b/projects/image watermark/watermark.py deleted file mode 100644 index c6c5beb30..000000000 --- a/projects/image watermark/watermark.py +++ /dev/null @@ -1,53 +0,0 @@ -import os -from PIL import Image -from PIL import ImageFilter - - -def watermark_photo(input_image_path, output_image_path, watermark_image_path): - - base_image = Image.open(input_image_path) - watermark = Image.open(watermark_image_path) - # add watermark to your image - position = base_image.size - - watermark_size = watermark.size - - newsize = int(position[0] * 8 / 100), int(position[0] * 8 / 100) - - watermark = watermark.resize(newsize) - # Blur If Needed - # watermark = watermark.filter(ImageFilter.BoxBlur(2)) - new_position = position[0] - newsize[0] - 20, position[1] - newsize[1] - 20 - - transparent = Image.new(mode="RGBA", size=position, color=(0, 0, 0, 0)) - # Create a new transparent image - transparent.paste(base_image, (0, 0)) - # paste the original image - - transparent.paste(watermark, new_position, mask=watermark) - # paste the watermark image - image_mode = base_image.mode - if image_mode == "RGB": - transparent = transparent.convert(image_mode) - else: - transparent = transparent.convert("P") - transparent.save(output_image_path, optimize=True, quality=100) - print("Saving " + output_image_path + " ...") - - -folder = input("Enter Folder Path : ") - -watermark = input("Enter Watermark Path : ") - -os.chdir(folder) -files = os.listdir(os.getcwd()) - -if not os.path.isdir("output"): - os.mkdir("output") - -c = 1 -for f in files: - if os.path.isfile(os.path.abspath(f)): - if f.endswith(".png") or f.endswith(".jpg"): - watermark_photo(f, "output/" + f, watermark) - diff --git a/projects/racing_barchart_animation/README.md b/projects/racing_barchart_animation/README.md new file mode 100644 index 000000000..cab76a123 --- /dev/null +++ b/projects/racing_barchart_animation/README.md @@ -0,0 +1,19 @@ +# Racing Bar Chart Animation + +![preview gif](/images/deceased.gif) + +## Packages Needed + +**Make sure you are using a python virtual environment** + +`pip install jupyterlab` + +`pip install pandas` + +`pip install requests` + +OR + +`pip install -r requirements.txt` + + diff --git a/projects/racing_barchart_animation/animated_barchart.ipynb b/projects/racing_barchart_animation/animated_barchart.ipynb new file mode 100644 index 000000000..d9f8ca5aa --- /dev/null +++ b/projects/racing_barchart_animation/animated_barchart.ipynb @@ -0,0 +1,19538 @@ +{ + "cells": [ + { + "cell_type": "code", + "execution_count": 1, + "metadata": {}, + "outputs": [], + "source": [ + "import pandas as pd\n", + "import matplotlib.pyplot as plt\n", + "import os\n", + "from datetime import datetime" + ] + }, + { + "cell_type": "code", + "execution_count": 2, + "metadata": {}, + "outputs": [], + "source": [ + "df = pd.read_json('https://api.covid19india.org/v4/timeseries.json')" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Creating a \"new\" dataset" + ] + }, + { + "cell_type": "code", + "execution_count": 3, + "metadata": {}, + "outputs": [], + "source": [ + "#obtaining the first date to the max date, current_date\n", + "current_date = max(df['AP']['dates']) # obtaining the current date\n", + "dates = list(df['AP']['dates'])\n", + "min_date = dates[0]" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## How to obtain the Graph\n", + "\n", + "You can replace the `confirmed` in the `temp_list.append(df[i]['dates'][date]['total'][confirmed])` with data like `deceased`,`recovered`,`tested`. Also you can replace `total` with `delta`." + ] + }, + { + "cell_type": "code", + "execution_count": 4, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "{'confirmed': 235525, 'deceased': 2116, 'recovered': 145636, 'tested': 2534304}" + ] + }, + "execution_count": 4, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "df['AP']['dates'][current_date]['total']" + ] + }, + { + "cell_type": "code", + "execution_count": 5, + "metadata": {}, + "outputs": [], + "source": [ + "data_selected = 'deceased' #replace confirmed with data you want to get\n", + "def obtain_data_for_a_date(date):\n", + " temp_list = []\n", + " for i in df.columns:\n", + " try:\n", + " # replace confirmed with the data you want to get\n", + " temp_list.append(df[i]['dates'][date]['total'][data_selected])\n", + " except:\n", + " temp_list.append(0)\n", + " return temp_list" + ] + }, + { + "cell_type": "code", + "execution_count": 6, + "metadata": { + "scrolled": true + }, + "outputs": [], + "source": [ + "# obtaining a dataframe for confirmed results \n", + "d = {}\n", + "for j in dates:\n", + " d[j] = obtain_data_for_a_date(j)" + ] + }, + { + "cell_type": "code", + "execution_count": 7, + "metadata": { + "scrolled": true + }, + "outputs": [], + "source": [ + "df2 = pd.DataFrame.from_dict(d,orient='index',columns = df.columns);" + ] + }, + { + "cell_type": "code", + "execution_count": 8, + "metadata": { + "scrolled": true + }, + "outputs": [ + { + "data": { + "image/png": "iVBORw0KGgoAAAANSUhEUgAACbMAAAlcCAYAAADL0//yAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjMuMCwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy86wFpkAAAACXBIWXMAAC4jAAAuIwF4pT92AAEAAElEQVR4nOzde7RlZ1nn+9+TVEjCVQkJBIEgBbZSioCNegQhclNR1Fa8HLUFzgDtDmKLAeyjQIIcbBAR8RJRsI0cPSoXNSrYclBzQblGETDoAUOAALG4JMgtN/KcP/aOrEx2Ve2191773WvV5zPGGqn3XWu+86nKv98xZ3V3AAAAAAAAAAAAYKRjRg8AAAAAAAAAAAAAYjYAAAAAAAAAAACGE7MBAAAAAAAAAAAwnJgNAAAAAAAAAACA4cRsAAAAAAAAAAAADCdmAwAAAAAAAAAAYDgxGwAAAAAAAAAAAMOJ2QAAAAAAAAAAABhOzAYAAAAAAAAAAMBwYjYAAAAAAAAAAACGE7MBAAAAAAAAAAAwnJgNAAAAAAAAAACA4cRsAAAAAAAAAAAADCdmAwAAAAAAAAAAYDgxGwAAAAAAAAAAAMOJ2QAAAAAAAAAAABhOzAYAAAAAAAAAAMBwYjYAAAAAAAAAAACGE7MBAAAAAAAAAAAwnJgNAAAAAAAAAACA4cRsAAAAAAAAAAAADCdmAwAAAAAAAAAAYDgxGwAAAAAAAAAAAMOJ2QAAAAAAAAAAABhOzAYAAAAAAAAAAMBwYjYAAAAAAAAAAACGE7MBAAAAAAAAAAAw3L7RAzBOVd0myYNmtt6f5NpB4wAAAAAAAAAAAOPdLMmdZ9YXdPfHd+PGYraj24OSnDd6CAAAAAAAAAAAYM/69iR/shs38ppRAAAAAAAAAAAAhhOzAQAAAAAAAAAAMJzXjB7d3j+7+OM//uPc/e53HzULAAAAAAAAAAAw2Lvf/e58x3d8x+zW+w/x0x0nZju6XTu7uPvd754DBw6MmgUAAAAAAAAAANh7rj3yT3aG14wCAAAAAAAAAAAwnJgNAAAAAAAAAACA4cRsAAAAAAAAAAAADCdmAwAAAAAAAAAAYDgxGwAAAAAAAAAAAMOJ2QAAAAAAAAAAABhOzAYAAAAAAAAAAMBwYjYAAAAAAAAAAACGE7MBAAAAAAAAAAAwnJgNAAAAAAAAAACA4cRsAAAAAAAAAAAADCdmAwAAAAAAAAAAYDgxGwAAAAAAAAAAAMOJ2QAAAAAAAAAAABhOzAYAAAAAAAAAAMBwYjYAAAAAAAAAAACGE7MBAAAAAAAAAAAwnJgNAAAAAAAAAACA4cRsAAAAAAAAAAAADCdmAwAAAAAAAAAAYDgxGwAAAAAAAAAAAMOJ2QAAAAAAAAAAABhOzAYAAAAAAAAAAMBwYjYAAAAAAAAAAACGE7MBAAAAAAAAAAAwnJgNAAAAAAAAAACA4cRsAAAAAAAAAAAADCdmAwAAAAAAAAAAYDgxGwAAAAAAAAAAAMOJ2QAAAAAAAAAAABhOzAYAAAAAAAAAAMBwYjYAAAAAAAAAAACGE7MBAAAAAAAAAAAwnJgNAAAAAAAAAACA4cRsAAAAAAAAAAAADCdmAwAAAAAAAAAAYDgxGwAAAAAAAAAAAMOJ2QAAAAAAAAAAABhOzAYAAAAAAAAAAMBwYjYAAAAAAAAAAACGE7MBAAAAAAAAAAAwnJgNAAAAAAAAAACA4cRsAAAAAAAAAAAADCdmAwAAAAAAAAAAYDgxGwAAAAAAAAAAAMOJ2QAAAAAAAAAAABhOzAYAAAAAAAAAAMBwYjYAAAAAAAAAAACGE7MBAAAAAAAAAAAwnJgNAAAAAAAAAACA4cRsAAAAAAAAAAAADCdmAwAAAAAAAAAAYDgxGwAAAAAAAAAAAMOJ2QAAAAAAAAAAABhOzAYAAAAAAAAAAMBwYjYAAAAAAAAAAACGE7MBAAAAAAAAAAAwnJgNAAAAAAAAAACA4cRsAAAAAAAAAAAADCdmAwAAAAAAAAAAYDgxGwAAAAAAAAAAAMOJ2QAAAAAAAAAAABhOzAYAAAAAAAAAAMBwYjYAAAAAAAAAAACGE7MBAAAAAAAAAAAwnJgNAAAAAAAAAACA4cRsAAAAAAAAAAAADCdmAwAAAAAAAAAAYDgxGwAAAAAAAAAAAMOJ2QAAAAAAAAAAABhOzAYAAAAAAAAAAMBwYjYAAAAAAAAAAACGE7MBAAAAAAAAAAAwnJgNAAAAAAAAAACA4cRsAAAAAAAAAAAADCdmAwAAAAAAAAAAYDgxGwAAAAAAAAAAAMOJ2QAAAAAAAAAAABhOzAYAAAAAAAAAAMBwYjYAAAAAAAAAAACGE7MBAAAAAAAAAAAwnJgNAAAAAAAAAACA4cRsAAAAAAAAAAAADCdm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\n", + "text/plain": [ + "
    " + ] + }, + "metadata": { + "needs_background": "light" + }, + "output_type": "display_data" + } + ], + "source": [ + "# testing the dataset \n", + "s = df2.loc[current_date];\n", + "\n", + "fig, ax = plt.subplots(figsize=(10,10), dpi=300)\n", + "colors = plt.cm.Dark2(range(6))\n", + "y = s.index\n", + "width = s.values\n", + "ax.barh(y=y, width=width, color=colors);\n", + "\n", + "def nice_axes(ax):\n", + " ax.set_facecolor('.8')\n", + " ax.tick_params(labelsize=8, length=0)\n", + " ax.grid(True, axis='x', color='white')\n", + " ax.set_axisbelow(True)\n", + " [spine.set_visible(False) for spine in ax.spines.values()]" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Arranging, Ranking & Interploating the \"data set\"" + ] + }, + { + "cell_type": "code", + "execution_count": 9, + "metadata": {}, + "outputs": [], + "source": [ + "# test run\n", + "# creating a new dataset called df3 and arranging the index\n", + "df3 = df2.loc[min_date:current_date]\n", + "df3 = df3.reset_index()\n", + "df3.index = df3.index * 5\n", + "last_idx = df3.index[-1] + 1\n", + "\n", + "df_expanded = df3.reindex(range(last_idx))\n", + "df_expanded['index'] = df_expanded['index'].fillna(method='ffill')\n", + "df_expanded = df_expanded.set_index('index')\n", + "\n", + "df_rank_expanded = df_expanded.rank(axis=1, method='first')\n", + "df_expanded = df_expanded.interpolate()\n", + "df_rank_expanded = df_rank_expanded.interpolate()" + ] + }, + { + "cell_type": "code", + "execution_count": 10, + "metadata": { + "scrolled": true + }, + "outputs": [], + "source": [ + "def prepare_data(df, steps=5):\n", + " df = df3.reset_index()\n", + " df.index = df3.index * steps\n", + " last_idx = df3.index[-1] + 1\n", + " df_expanded = df3.reindex(range(last_idx))\n", + " df_expanded['index'] = df_expanded['index'].fillna(method='ffill')\n", + " df_expanded = df_expanded.set_index('index')\n", + " df_rank_expanded = df_expanded.rank(axis=1, method='first')\n", + " df_expanded = df_expanded.interpolate()\n", + " df_rank_expanded = df_rank_expanded.interpolate()\n", + " return df_expanded, df_rank_expanded\n", + "\n", + "df_expanded, df_rank_expanded = prepare_data(df3)\n", + "df_expanded.head();" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Animation Function\n", + "\n", + "[*source*](https://medium.com/dunder-data/create-a-bar-chart-race-animation-in-python-with-matplotlib-477ed1590096)" + ] + }, + { + "cell_type": "code", + "execution_count": 11, + "metadata": {}, + "outputs": [], + "source": [ + "from matplotlib.animation import FuncAnimation\n", + "\n", + "def init():\n", + " ax.clear()\n", + " nice_axes(ax)\n", + " ax.set_ylim(.2, 6.8)\n", + "\n", + "def update(i):\n", + " labels = df_expanded.columns\n", + " for bar in ax.containers:\n", + " bar.remove()\n", + " y = df_rank_expanded.iloc[i]\n", + " width = df_expanded.iloc[i]\n", + " ax.barh(y=y, width=width, color=colors, tick_label=labels)\n", + " date_str = df_expanded.index[i]\n", + " # add a proper title in 'remove' data_selected\n", + " ax.set_title(f'{data_selected}- {date_str}', fontsize='smaller')\n", + " \n", + "fig = plt.Figure(figsize=(5, 5), dpi=300)\n", + "ax = fig.add_subplot()\n", + "anim = FuncAnimation(fig=fig, func=update, init_func=init, frames=len(df_expanded), \n", + " interval=100, repeat=False)" + ] + }, + { + "cell_type": "code", + "execution_count": 12, + "metadata": { + "scrolled": true + }, + "outputs": [ + { + "data": { + "text/html": [ + "" + ], + "text/plain": [ + "" + ] + }, + "execution_count": 12, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "from IPython.display import HTML\n", + "html = anim.to_html5_video()\n", + "HTML(html)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## saving your file\n", + "\n", + "Include the path you want inside the brackets `anim.save(path)`" + ] + }, + { + "cell_type": "code", + "execution_count": 13, + "metadata": {}, + "outputs": [], + "source": [ + "#anim.save('~/Downloads/covid19.mp4')" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Resources\n", + "\n", + "[Guide to create animated bar charts](https://medium.com/dunder-data/create-a-bar-chart-race-animation-in-python-with-matplotlib-477ed1590096)" + ] + } + ], + "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.8.3" + } + }, + "nbformat": 4, + "nbformat_minor": 4 +} diff --git a/projects/racing_barchart_animation/images/deceased.gif b/projects/racing_barchart_animation/images/deceased.gif new file mode 100644 index 000000000..6b41bb101 Binary files /dev/null and b/projects/racing_barchart_animation/images/deceased.gif differ diff --git a/projects/racing_barchart_animation/requirements.txt b/projects/racing_barchart_animation/requirements.txt new file mode 100644 index 000000000..59749d767 --- /dev/null +++ b/projects/racing_barchart_animation/requirements.txt @@ -0,0 +1,6 @@ +jupyterlab==2.2.2 +matplotlib==3.3.0 +notebook==6.1.1 +numpy==1.19.1 +pandas==1.1.0 +requests==2.24.0 diff --git a/projects/send email from CSV/Readme.md b/projects/send email from CSV/Readme.md deleted file mode 100644 index e4b86a8c0..000000000 --- a/projects/send email from CSV/Readme.md +++ /dev/null @@ -1,10 +0,0 @@ -# Send Emails from CSV File - -### Emails.csv : - Here CSV file Contain List Of Emails - -### Credentials.txt : -Contain information about Yoour Email - -1. Your Email Address -2. Your Email Password - -### CSV module :- As it is lightweight than Pandas. diff --git a/projects/steganography/README.md b/projects/steganography/README.md new file mode 100644 index 000000000..687dade6f --- /dev/null +++ b/projects/steganography/README.md @@ -0,0 +1,29 @@ +# Image steganography + +This project contains two algorithm (LSB and DCT), which can insert some secret but invisible. + +**LSB** insert message into Least Significant Bit of each pixels. + +**DCT** insert message into Middle Frequency. + +## Requirement + +Installation: + +```shell +$ pip install -r requirements.txt +``` + +## Usage + +Run LSB algorithm + +```shell +$ python3 lsb.py +``` + +Run DCT algorithm + +```shell +$ python3 dct.py +``` \ No newline at end of file diff --git a/projects/steganography/dct.py b/projects/steganography/dct.py new file mode 100644 index 000000000..8523ebc61 --- /dev/null +++ b/projects/steganography/dct.py @@ -0,0 +1,127 @@ +#!/usr/bin/env python3 +# +# Copyright(C) 2021 wuyaoping +# +# DCT algorithm has great a robust but lower capacity. + +import numpy as np +import os.path as osp +import cv2 + +FLAG = '%' +# Select a part location from the middle frequency +LOC_MAX = (4, 1) +LOC_MIN = (3, 2) +# The difference between MAX and MIN, +# bigger to improve robust but make picture low quality. +ALPHA = 1 + +# Quantizer table +TABLE = np.array([ + [16, 11, 10, 16, 24, 40, 51, 61], + [12, 12, 14, 19, 26, 58, 60, 55], + [14, 13, 16, 24, 40, 57, 69, 56], + [14, 17, 22, 29, 51, 87, 80, 62], + [18, 22, 37, 56, 68, 109, 103, 77], + [24, 35, 55, 64, 81, 104, 113, 92], + [49, 64, 78, 87, 103, 121, 120, 101], + [72, 92, 95, 98, 112, 100, 103, 99] +]) + + +def insert(path, txt): + img = cv2.imread(path, cv2.IMREAD_ANYCOLOR) + txt = "{}{}{}".format(len(txt), FLAG, txt) + row, col = img.shape[:2] + max_bytes = (row // 8) * (col // 8) // 8 + assert max_bytes >= len( + txt), "Message overflow the capacity:{}".format(max_bytes) + img = cv2.cvtColor(img, cv2.COLOR_BGR2YUV) + # Just use the Y plane to store message, you can use all plane + y, u, v = cv2.split(img) + y = y.astype(np.float32) + blocks = [] + # Quantize blocks + for r_idx in range(0, 8 * (row // 8), 8): + for c_idx in range(0, 8 * (col // 8), 8): + quantized = cv2.dct(y[r_idx: r_idx+8, c_idx: c_idx+8]) / TABLE + blocks.append(quantized) + for idx in range(len(txt)): + encode(blocks[idx*8: (idx+1)*8], txt[idx]) + + idx = 0 + # Restore Y plane + for r_idx in range(0, 8 * (row // 8), 8): + for c_idx in range(0, 8 * (col // 8), 8): + y[r_idx: r_idx+8, c_idx: c_idx+8] = cv2.idct(blocks[idx] * TABLE) + idx += 1 + y = y.astype(np.uint8) + img = cv2.cvtColor(cv2.merge((y, u, v)), cv2.COLOR_YUV2BGR) + filename, _ = osp.splitext(path) + # DCT algorithm can save message even if jpg + filename += '_dct_embeded' + '.jpg' + cv2.imwrite(filename, img) + return filename + + +# Encode a char into the blocks +def encode(blocks, data): + data = ord(data) + for idx in range(len(blocks)): + bit_val = (data >> idx) & 1 + max_val = max(blocks[idx][LOC_MAX], blocks[idx][LOC_MIN]) + min_val = min(blocks[idx][LOC_MAX], blocks[idx][LOC_MIN]) + if max_val - min_val <= ALPHA: + max_val = min_val + ALPHA + 1e-3 + if bit_val == 1: + blocks[idx][LOC_MAX] = max_val + blocks[idx][LOC_MIN] = min_val + else: + blocks[idx][LOC_MAX] = min_val + blocks[idx][LOC_MIN] = max_val + + +# Decode a char from the blocks +def decode(blocks): + val = 0 + for idx in range(len(blocks)): + if blocks[idx][LOC_MAX] > blocks[idx][LOC_MIN]: + val |= 1 << idx + return chr(val) + + +def extract(path): + img = cv2.imread(path, cv2.IMREAD_ANYCOLOR) + row, col = img.shape[:2] + max_bytes = (row // 8) * (col // 8) // 8 + img = cv2.cvtColor(img, cv2.COLOR_BGR2YUV) + y, u, v = cv2.split(img) + y = y.astype(np.float32) + blocks = [] + for r_idx in range(0, 8 * (row // 8), 8): + for c_idx in range(0, 8 * (col // 8), 8): + quantized = cv2.dct(y[r_idx: r_idx+8, c_idx: c_idx+8]) / TABLE + blocks.append(quantized) + res = '' + idx = 0 + # Extract the length of the message + while idx < max_bytes: + ch = decode(blocks[idx*8: (idx+1)*8]) + idx += 1 + if ch == FLAG: + break + res += ch + end = int(res) + idx + assert end <= max_bytes, "Input image isn't correct." + res = '' + while idx < end: + res += decode(blocks[idx*8: (idx+1)*8]) + idx += 1 + return res + + +if __name__ == '__main__': + data = 'A collection of simple python mini projects to enhance your Python skills.' + res_path = insert('./example.png', data) + res = extract(res_path) + print(res) diff --git a/projects/steganography/example.png b/projects/steganography/example.png new file mode 100644 index 000000000..074292362 Binary files /dev/null and b/projects/steganography/example.png differ diff --git a/projects/steganography/lsb.py b/projects/steganography/lsb.py new file mode 100644 index 000000000..f079fb194 --- /dev/null +++ b/projects/steganography/lsb.py @@ -0,0 +1,85 @@ +#!/usr/bin/env python3 +# +# Copyright(C) 2021 wuyaoping +# +# LSB algorithm has a great capacity but fragile. + +import cv2 +import math +import os.path as osp +import numpy as np + +# Insert data in the low bit. +# Lower make picture less loss but lower capacity. +BITS = 2 + +HIGH_BITS = 256 - (1 << BITS) +LOW_BITS = (1 << BITS) - 1 +BYTES_PER_BYTE = math.ceil(8 / BITS) +FLAG = '%' + + +def insert(path, txt): + img = cv2.imread(path, cv2.IMREAD_ANYCOLOR) + # Save origin shape to restore image + ori_shape = img.shape + max_bytes = ori_shape[0] * ori_shape[1] // BYTES_PER_BYTE + # Encode message with length + txt = '{}{}{}'.format(len(txt), FLAG, txt) + assert max_bytes >= len( + txt), "Message overflow the capacity:{}".format(max_bytes) + data = np.reshape(img, -1) + for (idx, val) in enumerate(txt): + encode(data[idx*BYTES_PER_BYTE: (idx+1) * BYTES_PER_BYTE], val) + + img = np.reshape(data, ori_shape) + filename, _ = osp.splitext(path) + # png is lossless encode that can restore message correctly + filename += '_lsb_embeded' + ".png" + cv2.imwrite(filename, img) + return filename + + +def extract(path): + img = cv2.imread(path, cv2.IMREAD_ANYCOLOR) + data = np.reshape(img, -1) + total = data.shape[0] + res = '' + idx = 0 + # Decode message length + while idx < total // BYTES_PER_BYTE: + ch = decode(data[idx*BYTES_PER_BYTE: (idx+1)*BYTES_PER_BYTE]) + idx += 1 + if ch == FLAG: + break + res += ch + end = int(res) + idx + assert end <= total // BYTES_PER_BYTE, "Input image isn't correct." + + res = '' + while idx < end: + res += decode(data[idx*BYTES_PER_BYTE: (idx+1)*BYTES_PER_BYTE]) + idx += 1 + return res + + +def encode(block, data): + data = ord(data) + for idx in range(len(block)): + block[idx] &= HIGH_BITS + block[idx] |= (data >> (BITS * idx)) & LOW_BITS + + +def decode(block): + val = 0 + for idx in range(len(block)): + val |= (block[idx] & LOW_BITS) << (idx * BITS) + return chr(val) + + +if __name__ == '__main__': + data = 'A collection of simple python mini projects to enhance your Python skills.' + input_path = "./example.png" + res_path = insert(input_path, data) + res = extract(res_path) + print(res) diff --git a/projects/steganography/requirements.txt b/projects/steganography/requirements.txt new file mode 100644 index 000000000..f9f14654c --- /dev/null +++ b/projects/steganography/requirements.txt @@ -0,0 +1,2 @@ +numpy==1.21.2 +opencv-python==4.5.3.56 diff --git a/projects/telegram_bot/README.md b/projects/telegram_bot/README.md new file mode 100644 index 000000000..5d871d96c --- /dev/null +++ b/projects/telegram_bot/README.md @@ -0,0 +1,25 @@ +# Telegram bot + +This is a demo project of a telegram bot + +## Dependencies + +``` +pip install requirements.txt +``` + +## Search telegram to test the bot + +``` +@Bottest_bot_bot_bot_bot +``` + +## Start the program + +``` +python ./main.py +``` + +## Author Name + +[Alexander Monterrosa](https://github.com/Alex108-lab) diff --git a/projects/telegram_bot/main.py b/projects/telegram_bot/main.py new file mode 100644 index 000000000..987bec3cf --- /dev/null +++ b/projects/telegram_bot/main.py @@ -0,0 +1,74 @@ +''' + BOT FOR TELEGRAM +''' + +import random +import logging +from telegram import (ParseMode) +from telegram.ext import (Updater, CommandHandler) + +logging.basicConfig( + format='%(asctime)s - %(name)s - %(levelname)s - %(message)s', level=logging.INFO) +logger = logging.getLogger(__name__) + + +def error_callback(update, context): + logger.warning('Update "%s" caused error "%s"', update, context.error) + + +def start(update, context): + ''' + Start + ''' + context.bot.send_message(update.message.chat_id, + "Welcome! to simple telegram bot", parse_mode=ParseMode.HTML) + + ''' + We can call other commands, without it being activated in the chat (/ help). + ''' + coin(update, context) + + +def coin(update, context): + ''' + ⚪️ / ⚫️ Currency + Generate an elatory number between 1 and 2. + ''' + cid = update.message.chat_id + + msg = "⚫️ face " if random.randint(1, 2) == 1 else "⚪️ cross" + ''' + He responds directly on the channel where he has been spoken to. + ''' + update.message.reply_text(msg) + + +def main(): + TOKEN = "1914536904:AAF4ZnqNvyg1pk-1pCPzTqhDYggAyf-1CF8" + + updater = Updater(TOKEN, use_context=True) + + dp = updater.dispatcher + + ''' + Events that will activate our bot. + ''' + dp.add_handler(CommandHandler('start', start)) + dp.add_handler(CommandHandler('coin', coin)) + + dp.add_error_handler(error_callback) + + ''' + The bot starts + ''' + updater.start_polling() + + ''' + or leave listening. Keep it from stopping. + ''' + updater.idle() + + +if __name__ == '__main__': + print('[Telegram simple bot] Start...') + main() \ No newline at end of file diff --git a/projects/telegram_bot/requirements.txt b/projects/telegram_bot/requirements.txt new file mode 100644 index 000000000..11a50f99e --- /dev/null +++ b/projects/telegram_bot/requirements.txt @@ -0,0 +1 @@ +python-telegram-bot \ No newline at end of file diff --git a/projects/text_to_morse_code/text_to_morse_code.py b/projects/text_to_morse_code/text_to_morse_code.py new file mode 100644 index 000000000..461c8f56b --- /dev/null +++ b/projects/text_to_morse_code/text_to_morse_code.py @@ -0,0 +1,42 @@ +#all_the symbols +symbols = { + "a": ".-", + "b": "-...", + "c": "-.-.", + "d": "-..", + "e": ".", + "f": "..-.", + "g": ".-", + "h": "....", + "i": "..", + "j": ".---", + "k": "-.-", + "l": ".-..", + "m": "--", + "n": "-.", + "o": "---", + "p": ".--.", + "q": "--.-", + "r": ".-.", + "s": "...", + "t": "-", + "u": "..-", + "v": "...-", + "w": ".--", + "x": "-..-", + "y": "-.--", + "z": "--..", +} + +#the user has to tyoe a word +ask = input("type: ") + + +length = len(ask) +output = "" + +for i in range(length): + if ask[i] in symbols.keys(): + output = output + " " + symbols.get(ask[i]) + +print(output) diff --git a/projects/whatsapp_Bot/Readme.md b/projects/whatsapp_Bot/Readme.md new file mode 100644 index 000000000..4fa0d88b8 --- /dev/null +++ b/projects/whatsapp_Bot/Readme.md @@ -0,0 +1,12 @@ +# Whatsapp Bot +## Perform Operation like +1. Put your details +2. connect with internet +3. Pass your message + +# To run app +- Create virtual Environment +- Install requirements +`pip install requirements.txt` +- run app +`python main.py` diff --git a/projects/whatsapp_Bot/main.py b/projects/whatsapp_Bot/main.py new file mode 100644 index 000000000..ed319301b --- /dev/null +++ b/projects/whatsapp_Bot/main.py @@ -0,0 +1,12 @@ +import pywhatkit +from datetime import datetime + +now = datetime.now() + +chour = now.strftime("%H") +mobile = input('Enter Mobile No of Receiver : ') +message = input('Enter Message you wanna send : ') +hour = int(input('Enter hour : ')) +minute = int(input('Enter minute : ')) + +pywhatkit.sendwhatmsg(mobile,message,hour,minute) diff --git a/projects/whatsapp_Bot/requirements.txt b/projects/whatsapp_Bot/requirements.txt new file mode 100644 index 000000000..f1048d1eb --- /dev/null +++ b/projects/whatsapp_Bot/requirements.txt @@ -0,0 +1 @@ +pywhatkit diff --git a/requirementsALL.txt b/requirementsALL.txt new file mode 100644 index 000000000..63925e099 --- /dev/null +++ b/requirementsALL.txt @@ -0,0 +1,62 @@ +ExifRead==2.3.1 +Flask-SQLAlchemy==2.4.4 +Flask==1.1.2 +HTMLParser==0.0.2 +PIL==1.1.6 +Pillow==9.0.1 +PyAudio==0.2.11 +PyAutoGUI==0.9.50 +PyPDF2==1.27.5 +SpeechRecognition==3.8.1 +beautifulsoup4==4.9.1 +certifi==2020.6.20 +chardet==3.0.4 +chromedriver-binary==85.0.4183.38.0 +click==7.1.2 +cycler==0.10.0 +dnspython==2.0.0 +emoji==0.6.0 +ffmpeg==1.4 +ffpyplayer==4.3.1 +gTTS==2.1.1 +gensim==3.8.3 +geopy==2.0.0 +googletrans==3.0.0 +idna==2.10 +img2pdf==0.4.0 +jupyterlab==2.2.10 +kiwisolver==1.2.0 +lxml==4.6.5 +matplotlib==3.3.0 +model==0.6.0 +newspaper==0.1.0.7 +nltk==3.5 +notebook==6.4.10 +numpy==1.19.1 +opencv-python==4.3.0.36 +pandas==1.0.5 +pathlib==1.0.1 +proxytest==0.5.4 +psutil==5.7.2 +py-notifier==0.1 +pycryptodome==3.9.8 +pyparsing==2.4.7 +python-dateutil==2.8.1 +pytz==2020.1 +requests==2.23.0 +selenium==3.141.0 +six==1.15.0 +soupsieve==2.0.1 +sumeval==0.2.2 +sumy==0.8.1 +tensorflow==2.6.4 +tqdm==4.48.2 +tweepy==3.9.0 +urllib3==1.26.5 +utils==1.0.1 +webdriver-manager==3.2.2 +wget==3.2 +wikipedia==1.4.0 +win10toast==0.9 +wordcloud==1.8.0 +xmltodict==0.12.0