Thanks to visit codestin.com
Credit goes to www.scribd.com

0% found this document useful (0 votes)
3 views40 pages

1 5imllabprog - Ipynb

Uploaded by

srinidhimattur01
Copyright
© © All Rights Reserved
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as TXT, PDF, TXT or read online on Scribd
0% found this document useful (0 votes)
3 views40 pages

1 5imllabprog - Ipynb

Uploaded by

srinidhimattur01
Copyright
© © All Rights Reserved
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as TXT, PDF, TXT or read online on Scribd
You are on page 1/ 40

{

"nbformat": 4,
"nbformat_minor": 0,
"metadata": {
"colab": {
"provenance": []
},
"kernelspec": {
"name": "python3",
"display_name": "Python 3"
},
"language_info": {
"name": "python"
}
},
"cells": [
{
"cell_type": "code",
"execution_count": null,
"metadata": {
"colab": {
"base_uri": "https://localhost:8080/",
"height": 73
},
"id": "E1dY91XcNtRF",
"outputId": "718f0a14-2186-4b24-84fd-c46d8af1a4da"
},
"outputs": [
{
"output_type": "display_data",
"data": {
"text/plain": [
"<IPython.core.display.HTML object>"
],
"text/html": [
"\n",
" <input type=\"file\" id=\"files-670816bc-ca31-4a1c-8946-
dfeb37eb9d3d\" name=\"files[]\" multiple disabled\n",
" style=\"border:none\" />\n",
" <output id=\"result-670816bc-ca31-4a1c-8946-dfeb37eb9d3d\">\n",
" Upload widget is only available when the cell has been
executed in the\n",
" current browser session. Please rerun this cell to enable.\n",
" </output>\n",
" <script>// Copyright 2017 Google LLC\n",
"//\n",
"// Licensed under the Apache License, Version 2.0
(the \"License\");\n",
"// you may not use this file except in compliance with the License.\
n",
"// You may obtain a copy of the License at\n",
"//\n",
"// http://www.apache.org/licenses/LICENSE-2.0\n",
"//\n",
"// Unless required by applicable law or agreed to in writing,
software\n",
"// distributed under the License is distributed on an \"AS IS\"
BASIS,\n",
"// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
implied.\n",
"// See the License for the specific language governing permissions
and\n",
"// limitations under the License.\n",
"\n",
"/**\n",
" * @fileoverview Helpers for google.colab Python module.\n",
" */\n",
"(function(scope) {\n",
"function span(text, styleAttributes = {}) {\n",
" const element = document.createElement('span');\n",
" element.textContent = text;\n",
" for (const key of Object.keys(styleAttributes)) {\n",
" element.style[key] = styleAttributes[key];\n",
" }\n",
" return element;\n",
"}\n",
"\n",
"// Max number of bytes which will be uploaded at a time.\n",
"const MAX_PAYLOAD_SIZE = 100 * 1024;\n",
"\n",
"function _uploadFiles(inputId, outputId) {\n",
" const steps = uploadFilesStep(inputId, outputId);\n",
" const outputElement = document.getElementById(outputId);\n",
" // Cache steps on the outputElement to make it available for the
next call\n",
" // to uploadFilesContinue from Python.\n",
" outputElement.steps = steps;\n",
"\n",
" return _uploadFilesContinue(outputId);\n",
"}\n",
"\n",
"// This is roughly an async generator (not supported in the browser
yet),\n",
"// where there are multiple asynchronous steps and the Python side
is going\n",
"// to poll for completion of each step.\n",
"// This uses a Promise to block the python side on completion of
each step,\n",
"// then passes the result of the previous step as the input to the
next step.\n",
"function _uploadFilesContinue(outputId) {\n",
" const outputElement = document.getElementById(outputId);\n",
" const steps = outputElement.steps;\n",
"\n",
" const next = steps.next(outputElement.lastPromiseValue);\n",
" return Promise.resolve(next.value.promise).then((value) => {\n",
" // Cache the last promise value to make it available to the
next\n",
" // step of the generator.\n",
" outputElement.lastPromiseValue = value;\n",
" return next.value.response;\n",
" });\n",
"}\n",
"\n",
"/**\n",
" * Generator function which is called between each async step of the
upload\n",
" * process.\n",
" * @param {string} inputId Element ID of the input file picker
element.\n",
" * @param {string} outputId Element ID of the output display.\n",
" * @return {!Iterable<!Object>} Iterable of next steps.\n",
" */\n",
"function* uploadFilesStep(inputId, outputId) {\n",
" const inputElement = document.getElementById(inputId);\n",
" inputElement.disabled = false;\n",
"\n",
" const outputElement = document.getElementById(outputId);\n",
" outputElement.innerHTML = '';\n",
"\n",
" const pickedPromise = new Promise((resolve) => {\n",
" inputElement.addEventListener('change', (e) => {\n",
" resolve(e.target.files);\n",
" });\n",
" });\n",
"\n",
" const cancel = document.createElement('button');\n",
" inputElement.parentElement.appendChild(cancel);\n",
" cancel.textContent = 'Cancel upload';\n",
" const cancelPromise = new Promise((resolve) => {\n",
" cancel.onclick = () => {\n",
" resolve(null);\n",
" };\n",
" });\n",
"\n",
" // Wait for the user to pick the files.\n",
" const files = yield {\n",
" promise: Promise.race([pickedPromise, cancelPromise]),\n",
" response: {\n",
" action: 'starting',\n",
" }\n",
" };\n",
"\n",
" cancel.remove();\n",
"\n",
" // Disable the input element since further picks are not allowed.\
n",
" inputElement.disabled = true;\n",
"\n",
" if (!files) {\n",
" return {\n",
" response: {\n",
" action: 'complete',\n",
" }\n",
" };\n",
" }\n",
"\n",
" for (const file of files) {\n",
" const li = document.createElement('li');\n",
" li.append(span(file.name, {fontWeight: 'bold'}));\n",
" li.append(span(\n",
" `(${file.type || 'n/a'}) - ${file.size} bytes, ` +\n",
" `last modified: ${\n",
" file.lastModifiedDate ?
file.lastModifiedDate.toLocaleDateString() :\n",
" 'n/a'} - `));\n",
" const percent = span('0% done');\n",
" li.appendChild(percent);\n",
"\n",
" outputElement.appendChild(li);\n",
"\n",
" const fileDataPromise = new Promise((resolve) => {\n",
" const reader = new FileReader();\n",
" reader.onload = (e) => {\n",
" resolve(e.target.result);\n",
" };\n",
" reader.readAsArrayBuffer(file);\n",
" });\n",
" // Wait for the data to be ready.\n",
" let fileData = yield {\n",
" promise: fileDataPromise,\n",
" response: {\n",
" action: 'continue',\n",
" }\n",
" };\n",
"\n",
" // Use a chunked sending to avoid message size limits. See
b/62115660.\n",
" let position = 0;\n",
" do {\n",
" const length = Math.min(fileData.byteLength - position,
MAX_PAYLOAD_SIZE);\n",
" const chunk = new Uint8Array(fileData, position, length);\n",
" position += length;\n",
"\n",
" const base64 = btoa(String.fromCharCode.apply(null, chunk));\
n",
" yield {\n",
" response: {\n",
" action: 'append',\n",
" file: file.name,\n",
" data: base64,\n",
" },\n",
" };\n",
"\n",
" let percentDone = fileData.byteLength === 0 ?\n",
" 100 :\n",
" Math.round((position / fileData.byteLength) * 100);\n",
" percent.textContent = `${percentDone}% done`;\n",
"\n",
" } while (position < fileData.byteLength);\n",
" }\n",
"\n",
" // All done.\n",
" yield {\n",
" response: {\n",
" action: 'complete',\n",
" }\n",
" };\n",
"}\n",
"\n",
"scope.google = scope.google || {};\n",
"scope.google.colab = scope.google.colab || {};\n",
"scope.google.colab._files = {\n",
" _uploadFiles,\n",
" _uploadFilesContinue,\n",
"};\n",
"})(self);\n",
"</script> "
]
},
"metadata": {}
},
{
"output_type": "stream",
"name": "stdout",
"text": [
"Saving enjoysport.csv to enjoysport.csv\n"
]
}
],
"source": [
"from google.colab import files\n",
"uploaded = files.upload()"
]
},
{
"cell_type": "markdown",
"source": [
"''Program 1 :-\n",
"Implement and demonstrate the FIND-S algorithm for finding the most
specific\n",
"hypothesis based on a given set of training data samples. Read the
training data from a\n",
".CSV file."
],
"metadata": {
"id": "If4UdWtkO0Q0"
}
},
{
"cell_type": "code",
"source": [
"import csv\n",
"a = []\n",
"with open('enjoysport.csv', 'r') as csvfile:\n",
" next(csvfile)\n",
" for row in csv.reader(csvfile):\n",
" a.append(row)\n",
" print(a)\n",
"\n",
"print(\"\\nThe total number of training instances are : \",len(a))\n",
"\n",
"num_attribute = len(a[0])-1\n",
"\n",
"print(\"\\nThe initial hypothesis is : \")\n",
"hypothesis = ['0']*num_attribute\n",
"print(hypothesis)\n",
"\n",
"for i in range(0, len(a)):\n",
" if a[i][num_attribute] == 'yes':\n",
" print (\"\\nInstance \", i+1, \"is\", a[i], \" and is Positive
Instance\")\n",
" for j in range(0, num_attribute):\n",
" if hypothesis[j] == '0' or hypothesis[j] == a[i][j]:\n",
" hypothesis[j] = a[i][j]\n",
" else:\n",
" hypothesis[j] = '?'\n",
" print(\"The hypothesis for the training instance\", i+1, \" is: \"
, hypothesis, \"\\n\")\n",
"\n",
" if a[i][num_attribute] == 'no':\n",
" print (\"\\nInstance \", i+1, \"is\", a[i], \" and is Negative
Instance Hence Ignored\")\n",
" print(\"The hypothesis for the training instance\", i+1, \" is: \"
, hypothesis, \"\\n\")\n",
"\n",
"print(\"\\nThe Maximally specific hypothesis for the training instance
is \", hypothesis)"
],
"metadata": {
"colab": {
"base_uri": "https://localhost:8080/"
},
"id": "vnKCqAPEOXsN",
"outputId": "c26d87ab-b260-4827-caaa-4c4bcca3ed86"
},
"execution_count": null,
"outputs": [
{
"output_type": "stream",
"name": "stdout",
"text": [
"[['sunny', 'warm', 'normal', 'strong', 'warm', 'same', 'yes'],
['sunny', 'warm', 'high', 'strong', 'warm', 'same', 'yes'], ['rainy', 'cold',
'high', 'strong', 'warm', 'change', 'no'], ['sunny', 'warm', 'high', 'strong',
'cool', 'change', 'yes']]\n",
"\n",
"The total number of training instances are : 4\n",
"\n",
"The initial hypothesis is : \n",
"['0', '0', '0', '0', '0', '0']\n",
"\n",
"Instance 1 is ['sunny', 'warm', 'normal', 'strong', 'warm', 'same',
'yes'] and is Positive Instance\n",
"The hypothesis for the training instance 1 is: ['sunny', 'warm',
'normal', 'strong', 'warm', 'same'] \n",
"\n",
"\n",
"Instance 2 is ['sunny', 'warm', 'high', 'strong', 'warm', 'same',
'yes'] and is Positive Instance\n",
"The hypothesis for the training instance 2 is: ['sunny', 'warm',
'?', 'strong', 'warm', 'same'] \n",
"\n",
"\n",
"Instance 3 is ['rainy', 'cold', 'high', 'strong', 'warm', 'change',
'no'] and is Negative Instance Hence Ignored\n",
"The hypothesis for the training instance 3 is: ['sunny', 'warm',
'?', 'strong', 'warm', 'same'] \n",
"\n",
"\n",
"Instance 4 is ['sunny', 'warm', 'high', 'strong', 'cool', 'change',
'yes'] and is Positive Instance\n",
"The hypothesis for the training instance 4 is: ['sunny', 'warm',
'?', 'strong', '?', '?'] \n",
"\n",
"\n",
"The Maximally specific hypothesis for the training instance is
['sunny', 'warm', '?', 'strong', '?', '?']\n"
]
}
]
},
{
"cell_type": "markdown",
"source": [
"Program 2:-\n",
"For a given set of training data examples stored in a .CSV file, implement
and demonstrate\n",
"the Candidate Elimination algorithm to output a description of the set of
all hypothesis\n",
"consistent with the training examples."
],
"metadata": {
"id": "iLH8swMePKR1"
}
},
{
"cell_type": "code",
"source": [
"import numpy as np\n",
"import pandas as pd\n",
"\n",
"data = pd.read_csv(\"enjoysport.csv\")\n",
"concepts = np.array(data.iloc[:, 0:-1])\n",
"print(\"\\nInstances are:\\n\", concepts)\n",
"target = np.array(data.iloc[:, -1])\n",
"print(\"\\nTarget Values are: \", target)\n",
"\n",
"def learn(concepts, target):\n",
" positive_instances = [concepts[i] for i in range(len(concepts)) if
target[i] == 'yes']\n",
" specific_h = positive_instances[0].copy()\n",
" print(\"\\nInitialization of specific_h and generic_h\")\n",
" print(\"\\nSpecific Boundary: \", specific_h)\n",
" general_h = [['?' for _ in range(len(specific_h))] for _ in
range(len(specific_h))]\n",
" print(\"\\nGeneric Boundary: \", general_h)\n",
"\n",
" for i, h in enumerate(concepts):\n",
" print(\"\\nInstance\", i + 1, \"is \", h)\n",
" if target[i] == \"yes\":\n",
" print(\"Instance is Positive \")\n",
" for x in range(len(specific_h)):\n",
" if h[x] != specific_h[x]:\n",
" specific_h[x] = '?'\n",
" general_h[x][x] = '?'\n",
"\n",
" if target[i] == \"no\":\n",
" print(\"Instance is Negative \")\n",
" for x in range(len(specific_h)):\n",
" if h[x] != specific_h[x]:\n",
" general_h[x][x] = specific_h[x]\n",
" else:\n",
" general_h[x][x] = '?'\n",
"\n",
" print(\"Specific Boundary after \", i + 1, \"Instance is \",
specific_h)\n",
" print(\"Generic Boundary after \", i + 1, \"Instance is \",
general_h)\n",
" print(\"\\n\")\n",
"\n",
" # Clean up the redundant hypotheses in the generic boundary\n",
" indices = [i for i, val in enumerate(general_h) if val == ['?' for _
in range(len(specific_h))]]\n",
" for i in indices:\n",
" general_h.remove(['?' for _ in range(len(specific_h))])\n",
" return specific_h, general_h\n",
"\n",
"s_final, g_final = learn(concepts, target)\n",
"\n",
"print(\"Final Specific_h: \", s_final, sep=\"\\n\")\n",
"print(\"Final General_h: \", g_final, sep=\"\\n\")\n"
],
"metadata": {
"colab": {
"base_uri": "https://localhost:8080/"
},
"id": "WgbOuk5JOm0Z",
"outputId": "7463bf5a-22d7-4cc6-8dd7-48b16f4df62c"
},
"execution_count": null,
"outputs": [
{
"output_type": "stream",
"name": "stdout",
"text": [
"\n",
"Instances are:\n",
" [['sunny' 'warm' 'normal' 'strong' 'warm' 'same']\n",
" ['sunny' 'warm' 'high' 'strong' 'warm' 'same']\n",
" ['rainy' 'cold' 'high' 'strong' 'warm' 'change']\n",
" ['sunny' 'warm' 'high' 'strong' 'cool' 'change']]\n",
"\n",
"Target Values are: ['yes' 'yes' 'no' 'yes']\n",
"\n",
"Initialization of specific_h and generic_h\n",
"\n",
"Specific Boundary: ['sunny' 'warm' 'normal' 'strong' 'warm' 'same']\
n",
"\n",
"Generic Boundary: [['?', '?', '?', '?', '?', '?'], ['?', '?', '?',
'?', '?', '?'], ['?', '?', '?', '?', '?', '?'], ['?', '?', '?', '?', '?', '?'],
['?', '?', '?', '?', '?', '?'], ['?', '?', '?', '?', '?', '?']]\n",
"\n",
"Instance 1 is ['sunny' 'warm' 'normal' 'strong' 'warm' 'same']\n",
"Instance is Positive \n",
"Specific Boundary after 1 Instance is ['sunny' 'warm' 'normal'
'strong' 'warm' 'same']\n",
"Generic Boundary after 1 Instance is [['?', '?', '?', '?', '?',
'?'], ['?', '?', '?', '?', '?', '?'], ['?', '?', '?', '?', '?', '?'], ['?', '?',
'?', '?', '?', '?'], ['?', '?', '?', '?', '?', '?'], ['?', '?', '?', '?', '?',
'?']]\n",
"\n",
"\n",
"\n",
"Instance 2 is ['sunny' 'warm' 'high' 'strong' 'warm' 'same']\n",
"Instance is Positive \n",
"Specific Boundary after 2 Instance is ['sunny' 'warm' '?' 'strong'
'warm' 'same']\n",
"Generic Boundary after 2 Instance is [['?', '?', '?', '?', '?',
'?'], ['?', '?', '?', '?', '?', '?'], ['?', '?', '?', '?', '?', '?'], ['?', '?',
'?', '?', '?', '?'], ['?', '?', '?', '?', '?', '?'], ['?', '?', '?', '?', '?',
'?']]\n",
"\n",
"\n",
"\n",
"Instance 3 is ['rainy' 'cold' 'high' 'strong' 'warm' 'change']\n",
"Instance is Negative \n",
"Specific Boundary after 3 Instance is ['sunny' 'warm' '?' 'strong'
'warm' 'same']\n",
"Generic Boundary after 3 Instance is [['sunny', '?', '?', '?', '?',
'?'], ['?', 'warm', '?', '?', '?', '?'], ['?', '?', '?', '?', '?', '?'], ['?', '?',
'?', '?', '?', '?'], ['?', '?', '?', '?', '?', '?'], ['?', '?', '?', '?', '?',
'same']]\n",
"\n",
"\n",
"\n",
"Instance 4 is ['sunny' 'warm' 'high' 'strong' 'cool' 'change']\n",
"Instance is Positive \n",
"Specific Boundary after 4 Instance is ['sunny' 'warm' '?' 'strong'
'?' '?']\n",
"Generic Boundary after 4 Instance is [['sunny', '?', '?', '?', '?',
'?'], ['?', 'warm', '?', '?', '?', '?'], ['?', '?', '?', '?', '?', '?'], ['?', '?',
'?', '?', '?', '?'], ['?', '?', '?', '?', '?', '?'], ['?', '?', '?', '?', '?',
'?']]\n",
"\n",
"\n",
"Final Specific_h: \n",
"['sunny' 'warm' '?' 'strong' '?' '?']\n",
"Final General_h: \n",
"[['sunny', '?', '?', '?', '?', '?'], ['?', 'warm', '?', '?', '?',
'?']]\n"
]
}
]
},
{
"cell_type": "markdown",
"source": [
"Program 3)Write a program to demonstrate the working of the decision tree
based ID3 algorithm.\n",
"Use an appropriate data set for building the decision tree and apply this
knowledge to\n",
"classify a new sample."
],
"metadata": {
"id": "z1At89s6QnPO"
}
},
{
"cell_type": "code",
"source": [
"import csv\n",
"\n",
"class Node:\n",
" def __init__(self, attribute=None, value=None, results=None,
true_branch=None, false_branch=None):\n",
" self.attribute, self.value, self.results, self.true_branch,
self.false_branch = attribute, value, results, true_branch, false_branch\n",
"\n",
"def unique_counts(rows):\n",
" from collections import Counter\n",
" return Counter(row[-1] for row in rows)\n",
"\n",
"def entropy(rows):\n",
" from math import log2\n",
" counts = unique_counts(rows)\n",
" return -sum((p / len(rows)) * log2(p / len(rows)) for p in
counts.values())\n",
"\n",
"def divide_data(rows, column, value):\n",
" split_function = lambda row: row[column] == value\n",
" true_rows, false_rows = [row for row in rows if split_function(row)],
[row for row in rows if not split_function(row)]\n",
" return true_rows, false_rows\n",
"\n",
"def information_gain(current_entropy, true_rows, false_rows):\n",
" p = len(true_rows) / (len(true_rows) + len(false_rows))\n",
" return current_entropy - p * entropy(true_rows) - (1 - p) *
entropy(false_rows)\n",
"\n",
"def find_best_split(rows):\n",
" current_entropy = entropy(rows)\n",
" best_gain, best_criteria = 0, None\n",
" for col in range(len(rows[0]) - 1):\n",
" values = set(row[col] for row in rows)\n",
" for value in values:\n",
" true_rows, false_rows = divide_data(rows, col, value)\n",
" if len(true_rows) == 0 or len(false_rows) == 0:\n",
" continue\n",
" gain = information_gain(current_entropy, true_rows,
false_rows)\n",
" if gain > best_gain:\n",
" best_gain, best_criteria = gain, (col, value)\n",
" return best_criteria\n",
"\n",
"def build_tree(rows):\n",
" if len(set(row[-1] for row in rows)) == 1:\n",
" return Node(results=unique_counts(rows))\n",
" best_criteria = find_best_split(rows)\n",
" if best_criteria is None:\n",
" return Node(results=unique_counts(rows))\n",
" col, value = best_criteria\n",
" true_rows, false_rows = divide_data(rows, col, value)\n",
" true_branch, false_branch = build_tree(true_rows),
build_tree(false_rows)\n",
" return Node(attribute=col, value=value, true_branch=true_branch,
false_branch=false_branch)\n",
"\n",
"def classify(node, sample):\n",
" if node.results:\n",
" return max(node.results, key=node.results.get)\n",
" branch = node.true_branch if sample[node.attribute] == node.value else
node.false_branch\n",
" return classify(branch, sample)\n",
"\n",
"# Load data from CSV file\n",
"with open('enjoysport.csv', 'r') as file:\n",
" reader = csv.reader(file)\n",
" headers = next(reader)\n",
" training_data = list(reader)\n",
"\n",
"# Build the decision tree\n",
"tree = build_tree(training_data)\n",
"\n",
"# Classify a new sample\n",
"new_sample = ['sunny', 'warm', 'normal', 'strong', 'cool', 'same']\n",
"prediction = classify(tree, new_sample)\n",
"\n",
"# Display the decision tree and prediction\n",
"print(\"Decision Tree:\")\n",
"print(tree)\n",
"print(\"\\nPrediction for {}: {}\".format(new_sample, prediction))\n"
],
"metadata": {
"colab": {
"base_uri": "https://localhost:8080/"
},
"id": "IJx_WrrJRfAt",
"outputId": "920e5abe-d8e1-402a-eb0c-33533234b39c"
},
"execution_count": null,
"outputs": [
{
"output_type": "stream",
"name": "stdout",
"text": [
"Decision Tree:\n",
"<__main__.Node object at 0x7ada83308ee0>\n",
"\n",
"Prediction for ['sunny', 'warm', 'normal', 'strong', 'cool', 'same']:
yes\n"
]
}
]
},
{
"cell_type": "markdown",
"source": [
"Program 4)Write a program to demonstrate the working of Support Vector
Machine by using\n",
"appropriate data set."
],
"metadata": {
"id": "0XullpGTRnLv"
}
},
{
"cell_type": "code",
"source": [
"from google.colab import files\n",
"uploaded = files.upload()"
],
"metadata": {
"colab": {
"base_uri": "https://localhost:8080/",
"height": 73
},
"id": "qF9LALJOTnU5",
"outputId": "940710ed-30ad-4083-a764-9a91815c602c"
},
"execution_count": null,
"outputs": [
{
"output_type": "display_data",
"data": {
"text/plain": [
"<IPython.core.display.HTML object>"
],
"text/html": [
"\n",
" <input type=\"file\" id=\"files-3e07e900-77ce-45df-b0fa-
926301b4a519\" name=\"files[]\" multiple disabled\n",
" style=\"border:none\" />\n",
" <output id=\"result-3e07e900-77ce-45df-b0fa-926301b4a519\">\n",
" Upload widget is only available when the cell has been
executed in the\n",
" current browser session. Please rerun this cell to enable.\n",
" </output>\n",
" <script>// Copyright 2017 Google LLC\n",
"//\n",
"// Licensed under the Apache License, Version 2.0
(the \"License\");\n",
"// you may not use this file except in compliance with the License.\
n",
"// You may obtain a copy of the License at\n",
"//\n",
"// http://www.apache.org/licenses/LICENSE-2.0\n",
"//\n",
"// Unless required by applicable law or agreed to in writing,
software\n",
"// distributed under the License is distributed on an \"AS IS\"
BASIS,\n",
"// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
implied.\n",
"// See the License for the specific language governing permissions
and\n",
"// limitations under the License.\n",
"\n",
"/**\n",
" * @fileoverview Helpers for google.colab Python module.\n",
" */\n",
"(function(scope) {\n",
"function span(text, styleAttributes = {}) {\n",
" const element = document.createElement('span');\n",
" element.textContent = text;\n",
" for (const key of Object.keys(styleAttributes)) {\n",
" element.style[key] = styleAttributes[key];\n",
" }\n",
" return element;\n",
"}\n",
"\n",
"// Max number of bytes which will be uploaded at a time.\n",
"const MAX_PAYLOAD_SIZE = 100 * 1024;\n",
"\n",
"function _uploadFiles(inputId, outputId) {\n",
" const steps = uploadFilesStep(inputId, outputId);\n",
" const outputElement = document.getElementById(outputId);\n",
" // Cache steps on the outputElement to make it available for the
next call\n",
" // to uploadFilesContinue from Python.\n",
" outputElement.steps = steps;\n",
"\n",
" return _uploadFilesContinue(outputId);\n",
"}\n",
"\n",
"// This is roughly an async generator (not supported in the browser
yet),\n",
"// where there are multiple asynchronous steps and the Python side
is going\n",
"// to poll for completion of each step.\n",
"// This uses a Promise to block the python side on completion of
each step,\n",
"// then passes the result of the previous step as the input to the
next step.\n",
"function _uploadFilesContinue(outputId) {\n",
" const outputElement = document.getElementById(outputId);\n",
" const steps = outputElement.steps;\n",
"\n",
" const next = steps.next(outputElement.lastPromiseValue);\n",
" return Promise.resolve(next.value.promise).then((value) => {\n",
" // Cache the last promise value to make it available to the
next\n",
" // step of the generator.\n",
" outputElement.lastPromiseValue = value;\n",
" return next.value.response;\n",
" });\n",
"}\n",
"\n",
"/**\n",
" * Generator function which is called between each async step of the
upload\n",
" * process.\n",
" * @param {string} inputId Element ID of the input file picker
element.\n",
" * @param {string} outputId Element ID of the output display.\n",
" * @return {!Iterable<!Object>} Iterable of next steps.\n",
" */\n",
"function* uploadFilesStep(inputId, outputId) {\n",
" const inputElement = document.getElementById(inputId);\n",
" inputElement.disabled = false;\n",
"\n",
" const outputElement = document.getElementById(outputId);\n",
" outputElement.innerHTML = '';\n",
"\n",
" const pickedPromise = new Promise((resolve) => {\n",
" inputElement.addEventListener('change', (e) => {\n",
" resolve(e.target.files);\n",
" });\n",
" });\n",
"\n",
" const cancel = document.createElement('button');\n",
" inputElement.parentElement.appendChild(cancel);\n",
" cancel.textContent = 'Cancel upload';\n",
" const cancelPromise = new Promise((resolve) => {\n",
" cancel.onclick = () => {\n",
" resolve(null);\n",
" };\n",
" });\n",
"\n",
" // Wait for the user to pick the files.\n",
" const files = yield {\n",
" promise: Promise.race([pickedPromise, cancelPromise]),\n",
" response: {\n",
" action: 'starting',\n",
" }\n",
" };\n",
"\n",
" cancel.remove();\n",
"\n",
" // Disable the input element since further picks are not allowed.\
n",
" inputElement.disabled = true;\n",
"\n",
" if (!files) {\n",
" return {\n",
" response: {\n",
" action: 'complete',\n",
" }\n",
" };\n",
" }\n",
"\n",
" for (const file of files) {\n",
" const li = document.createElement('li');\n",
" li.append(span(file.name, {fontWeight: 'bold'}));\n",
" li.append(span(\n",
" `(${file.type || 'n/a'}) - ${file.size} bytes, ` +\n",
" `last modified: ${\n",
" file.lastModifiedDate ?
file.lastModifiedDate.toLocaleDateString() :\n",
" 'n/a'} - `));\n",
" const percent = span('0% done');\n",
" li.appendChild(percent);\n",
"\n",
" outputElement.appendChild(li);\n",
"\n",
" const fileDataPromise = new Promise((resolve) => {\n",
" const reader = new FileReader();\n",
" reader.onload = (e) => {\n",
" resolve(e.target.result);\n",
" };\n",
" reader.readAsArrayBuffer(file);\n",
" });\n",
" // Wait for the data to be ready.\n",
" let fileData = yield {\n",
" promise: fileDataPromise,\n",
" response: {\n",
" action: 'continue',\n",
" }\n",
" };\n",
"\n",
" // Use a chunked sending to avoid message size limits. See
b/62115660.\n",
" let position = 0;\n",
" do {\n",
" const length = Math.min(fileData.byteLength - position,
MAX_PAYLOAD_SIZE);\n",
" const chunk = new Uint8Array(fileData, position, length);\n",
" position += length;\n",
"\n",
" const base64 = btoa(String.fromCharCode.apply(null, chunk));\
n",
" yield {\n",
" response: {\n",
" action: 'append',\n",
" file: file.name,\n",
" data: base64,\n",
" },\n",
" };\n",
"\n",
" let percentDone = fileData.byteLength === 0 ?\n",
" 100 :\n",
" Math.round((position / fileData.byteLength) * 100);\n",
" percent.textContent = `${percentDone}% done`;\n",
"\n",
" } while (position < fileData.byteLength);\n",
" }\n",
"\n",
" // All done.\n",
" yield {\n",
" response: {\n",
" action: 'complete',\n",
" }\n",
" };\n",
"}\n",
"\n",
"scope.google = scope.google || {};\n",
"scope.google.colab = scope.google.colab || {};\n",
"scope.google.colab._files = {\n",
" _uploadFiles,\n",
" _uploadFilesContinue,\n",
"};\n",
"})(self);\n",
"</script> "
]
},
"metadata": {}
},
{
"output_type": "stream",
"name": "stdout",
"text": [
"Saving archive.zip to archive.zip\n"
]
}
]
},
{
"cell_type": "code",
"source": [
"import zipfile\n",
"import pandas as pd\n",
"from sklearn.model_selection import train_test_split\n",
"from sklearn.svm import SVC\n",
"from sklearn.metrics import accuracy_score, classification_report,
confusion_matrix\n",
"import matplotlib.pyplot as plt\n",
"import seaborn as sns\n",
"\n",
"# Extract the contents of the archive.zip file\n",
"with zipfile.ZipFile('archive.zip', 'r') as zip_ref:\n",
" zip_ref.extractall()\n",
"\n",
"# Load the Iris dataset\n",
"iris_data = pd.read_csv('Iris.csv')\n",
"\n",
"# Display the first few rows of the dataset\n",
"print(\"Iris Dataset:\")\n",
"print(iris_data.head())\n",
"\n",
"# Split data into features and target\n",
"X = iris_data.drop('Species', axis=1)\n",
"y = iris_data['Species']\n",
"\n",
"# Split the dataset into training and testing sets\n",
"X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2,
random_state=42)\n",
"\n",
"# Create an SVM classifier\n",
"svm_classifier = SVC(kernel='linear', C=1.0)\n",
"\n",
"# Train the classifier on the training data\n",
"svm_classifier.fit(X_train, y_train)\n",
"\n",
"# Make predictions on the test data\n",
"y_pred = svm_classifier.predict(X_test)\n",
"\n",
"# Calculate accuracy\n",
"accuracy = accuracy_score(y_test, y_pred)\n",
"\n",
"# Plot confusion matrix\n",
"cm = confusion_matrix(y_test, y_pred)\n",
"plt.figure(figsize=(6, 4))\n",
"sns.heatmap(cm, annot=True, fmt='d', cmap='Blues', cbar=False)\n",
"plt.title('Confusion Matrix')\n",
"plt.xlabel('Predicted')\n",
"plt.ylabel('Actual')\n",
"plt.show()\n",
"\n",
"# Display classification report\n",
"print(\"Classification Report:\")\n",
"print(classification_report(y_test, y_pred))\n",
"\n",
"# Display accuracy\n",
"print(\"Accuracy:\", accuracy)\n"
],
"metadata": {
"colab": {
"base_uri": "https://localhost:8080/",
"height": 740
},
"id": "AA41vmdLT_u9",
"outputId": "ee716388-ff90-4e96-d980-08b357e535e8"
},
"execution_count": null,
"outputs": [
{
"output_type": "stream",
"name": "stdout",
"text": [
"Iris Dataset:\n",
" Id SepalLengthCm SepalWidthCm PetalLengthCm PetalWidthCm
Species\n",
"0 1 5.1 3.5 1.4 0.2 Iris-
setosa\n",
"1 2 4.9 3.0 1.4 0.2 Iris-
setosa\n",
"2 3 4.7 3.2 1.3 0.2 Iris-
setosa\n",
"3 4 4.6 3.1 1.5 0.2 Iris-
setosa\n",
"4 5 5.0 3.6 1.4 0.2 Iris-
setosa\n"
]
},
{
"output_type": "display_data",
"data": {
"text/plain": [
"<Figure size 600x400 with 1 Axes>"
],
"image/png":
"iVBORw0KGgoAAAANSUhEUgAAAhAAAAGJCAYAAADbgQqfAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIH
ZlcnNpb24zLjcuMSwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy/
bCgiHAAAACXBIWXMAAA9hAAAPYQGoP6dpAAAoZ0lEQVR4nO3de3yP9eP/
8ed7s7037GQzrLSJzBwiktgnoxwSciiSPjWiFFJOH/
FJDn20T1KEpIPQonxyWE4VWSwhkiGVHKNPThuG2cl2/
f7o5/39vI3ai23vee9xv912u7XXdb2v63m9u25vz9vrfV3XbJZlWQIAADDg4eoAAADg+kOBAAAAxigQAADA
GAUCAAAYo0AAAABjFAgAAGCMAgEAAIxRIAAAgDEKBAAAMEaBAEqBPXv2qE2bNgoICJDNZlNCQkKhbv/
gwYOy2WyaM2dOoW73etaiRQu1aNHC1TGAIkOBAIrJvn371K9fP918883y8fGRv7+/
oqOj9cYbbygjI6NI9x0bG6udO3dqwoQJio+P1+23316k+ytOvXr1ks1mk7+//
2Xfxz179shms8lms2nSpEnG2//99981duxYJScnF0JawH2UcXUAoDRYsWKFunXrJrvdrscee0x169ZVdna2
1q9fr+HDh2vXrl165513imTfGRkZ2rhxo/
75z39q4MCBRbKP8PBwZWRkyMvLq0i2/1fKlCmj8+fPa9myZerevbvTsnnz5snHx0eZmZlXte3ff/
9d48aNU0REhBo0aFDg161ateqq9gdcLygQQBE7cOCAevToofDwcCUmJqpKlSqOZQMGDNDevXu1YsWKItv/
iRMnJEmBgYFFtg+bzSYfH58i2/5fsdvtio6O1kcffZSvQMyfP1/t27fXokWLiiXL+fPnVbZsWXl7exfL/
gBX4SsMoIhNnDhR586d06xZs5zKw0U1atTQs88+6/
j9woULeumll1S9enXZ7XZFRERo1KhRysrKcnpdRESEOnTooPXr1+uOO+6Qj4+Pbr75Zn3wwQeOdcaOHavw8
HBJ0vDhw2Wz2RQRESHpj6n/i//9v8aOHSubzeY0tnr1av3tb39TYGCgypcvr8jISI0aNcqx/
ErXQCQmJuquu+5SuXLlFBgYqE6dOumnn3667P727t2rXr16KTAwUAEBAerdu7fOnz9/5Tf2Ej179tRnn32m
06dPO8a2bNmiPXv2qGfPnvnWP3nypIYNG6Z69eqpfPny8vf3V7t27bR9+3bHOmvXrlXjxo0lSb1793Z8FXL
xOFu0aKG6detq69atat68ucqWLet4Xy69BiI2NlY+Pj75jr9t27YKCgrS77//
XuBjBUoCCgRQxJYtW6abb75ZzZo1K9D6ffv21YsvvqiGDRtq8uTJiomJUVxcnHr06JFv3b179+rBBx9U69a
t9dprrykoKEi9evXSrl27JEldu3bV5MmTJUkPP/
yw4uPjNWXKFKP8u3btUocOHZSVlaXx48frtdde0/33369vvvnmT1/35Zdfqm3btjp+/
LjGjh2rIUOGaMOGDYqOjtbBgwfzrd+9e3edPXtWcXFx6t69u+bMmaNx48YVOGfXrl1ls9m0ePFix9j8+fNV
q1YtNWzYMN/6+/
fvV0JCgjp06KDXX39dw4cP186dOxUTE+P4xzwqKkrjx4+XJD355JOKj49XfHy8mjdv7thOamqq2rVrpwYNG
mjKlClq2bLlZfO98cYbqlixomJjY5WbmytJevvtt7Vq1SpNmzZNYWFhBT5WoESwABSZtLQ0S5LVqVOnAq2f
nJxsSbL69u3rND5s2DBLkpWYmOgYCw8PtyRZSUlJjrHjx49bdrvdGjp0qGPswIEDliTr1VdfddpmbGysFR4
eni/DmDFjrP/9aJg8ebIlyTpx4sQVc1/cx+zZsx1jDRo0sEJDQ63U1FTH2Pbt2y0PDw/rsccey7e/
xx9/3GmbXbp0sYKDg6+4z/
89jnLlylmWZVkPPvigdc8991iWZVm5ublW5cqVrXHjxl32PcjMzLRyc3PzHYfdbrfGjx/
vGNuyZUu+Y7soJibGkmTNnDnzsstiYmKcxr744gtLkvWvf/3L2r9/
v1W+fHmrc+fOf3mMQEnEDARQhM6cOSNJ8vPzK9D6K1eulCQNGTLEaXzo0KGSlO9aidq1a+uuu+5y/
F6xYkVFRkZq//79V535Uhevnfj000+Vl5dXoNccOXJEycnJ6tWrlypUqOAYv/
XWW9W6dWvHcf6vp556yun3u+66S6mpqY73sCB69uyptWvX6ujRo0pMTNTRo0cv+/
WF9Md1Ex4ef3wE5ubmKjU11fH1zPfff1/gfdrtdvXu3btA67Zp00b9+vXT+PHj1bVrV/
n4+Ojtt98u8L6AkoQCARQhf39/SdLZs2cLtP6vv/4qDw8P1ahRw2m8cuXKCgwM1K+//
uo0ftNNN+XbRlBQkE6dOnWVifN76KGHFB0drb59+6pSpUrq0aOH/vOf//
xpmbiYMzIyMt+yqKgopaSkKD093Wn80mMJCgqSJKNjue+++
+Tn56cFCxZo3rx5aty4cb738qK8vDxNnjxZt9xyi+x2u0JCQlSxYkXt2LFDaWlpBd7nDTfcYHTB5KRJk1Sh
QgUlJydr6tSpCg0NLfBrgZKEAgEUIX9/f4WFhemHH34wet2lFzFeiaen52XHLcu66n1c/
H7+Il9fXyUlJenLL7/
Uo48+qh07duihhx5S69at8617La7lWC6y2+3q2rWr5s6dqyVLllxx9kGSXn75ZQ0ZMkTNmzfXhx9+qC++
+EKrV69WnTp1CjzTIv3x/pjYtm2bjh8/LknauXOn0WuBkoQCARSxDh06aN+
+fdq4ceNfrhseHq68vDzt2bPHafzYsWM6ffq0446KwhAUFOR0x8JFl85ySJKHh4fuuecevf766/
rxxx81YcIEJSYm6quvvrrsti/m3L17d75lP//
8s0JCQlSuXLlrO4Ar6Nmzp7Zt26azZ89e9sLTixYuXKiWLVtq1qxZ6tGjh9q0aaNWrVrle08KWuYKIj09Xb
1791bt2rX15JNPauLEidqyZUuhbR8oThQIoIj94x//ULly5dS3b18dO3Ys3/J9+/
bpjTfekPTHFLykfHdKvP7665Kk9u3bF1qu6tWrKy0tTTt27HCMHTlyREuWLHFa7+TJk/lee/
GBSpfeWnpRlSpV1KBBA82dO9fpH+QffvhBq1atchxnUWjZsqVeeuklTZ8+XZUrV77iep6envlmNz755BP99
7//dRq7WHQuV7ZMjRgxQocOHdLcuXP1+uuvKyIiQrGxsVd8H4GSjAdJAUWsevXqmj9/
vh566CFFRUU5PYlyw4YN+uSTT9SrVy9JUv369RUbG6t33nlHp0+fVkxMjDZv3qy5c+eqc+fOV7xF8Gr06NF
DI0aMUJcuXTRo0CCdP39eb731lmrWrOl0EeH48eOVlJSk9u3bKzw8XMePH9eMGTN044036m9/+9sVt//
qq6+qXbt2atq0qfr06aOMjAxNmzZNAQEBGjt2bKEdx6U8PDz0wgsv/
OV6HTp00Pjx49W7d281a9ZMO3fu1Lx583TzzTc7rVe9enUFBgZq5syZ8vPzU7ly5dSkSRNVq1bNKFdiYqJm
zJihMWPGOG4rnT17tlq0aKHRo0dr4sSJRtsDXM7Fd4EApcYvv/
xiPfHEE1ZERITl7e1t+fn5WdHR0da0adOszMxMx3o5OTnWuHHjrGrVqlleXl5W1apVrZEjRzqtY1l/
3MbZvn37fPu59PbBK93GaVmWtWrVKqtu3bqWt7e3FRkZaX344Yf5buNcs2aN1alTJyssLMzy9va2wsLCrIc
fftj65Zdf8u3j0lsdv/zySys6Otry9fW1/P39rY4dO1o//
vij0zoX93fpbaKzZ8+2JFkHDhy44ntqWc63cV7JlW7jHDp0qFWlShXL19fXio6OtjZu3HjZ2y8//
fRTq3bt2laZMmWcjjMmJsaqU6fOZff5v9s5c+aMFR4ebjVs2NDKyclxWm/
w4MGWh4eHtXHjxj89BqCksVmWwRVKAAAA4hoIAABwFSgQAADAGAUCAAAYo0AAAABjFAgAAGCMAgEAAIxRIA
AAgDG3fBKlb7vJro6AUuLUssGujgAAhcqngM2AGQgAAGCMAgEAAIxRIAAAgDEKBAAAMEaBAAAAxigQAADAG
AUCAAAYo0AAAABjFAgAAGCMAgEAAIxRIAAAgDEKBAAAMEaBAAAAxigQAADAGAUCAAAYo0AAAABjFAgAAGCM
AgEAAIxRIAAAgDEKBAAAMEaBAAAAxigQAADAGAUCAAAYo0AAAABjFAgAAGCMAgEAAIxRIAAAgDEKBAAAMEa
BAAAAxigQAADAGAUCAAAYo0AAAABjFAgAAGCMAgEAAIxRIAAAgDEKBAAAMEaBAAAAxigQAADAGAUCAAAYo0
AAAABjFAgAAGCMAgEAAIxRIAAAgDEKBAAAMEaBAAAAxigQpUx03Ru0cGwn7f/
wCWV8Nlgdm1bPt87oR5tq/7wndTLhGa14+QFVDwss/qBwSx/
Pn6d2re9W49vq6ZEe3bRzxw5XR4Kb4lwrehSIUqacj5d27j+h52YkXnb50G63q//9DTRo2pdq/txHSs/
M0bJ/dZXdy7OYk8LdfP7ZSk2aGKd+/
Qfo40+WKDKylp7u10epqamujgY3w7lWPCgQpcyq7w5q3AcbtHTDvssuH9C5oV75eLOWb9qvHw6mqO+kz1Ul
uJzub5Z/pgIwET93tro+2F2duzyg6jVq6IUx4+Tj46OExYtcHQ1uhnOteJRx5c5TUlL0/
vvva+PGjTp69KgkqXLlymrWrJl69eqlihUrujJeqRNROUBVKpRT4rZDjrEz57O1ZfdRNakVpk/W/
eLCdLie5WRn66cfd6nPE/
0cYx4eHrrzzmbasX2bC5PB3XCuFR+XzUBs2bJFNWvW1NSpUxUQEKDmzZurefPmCggI0NSpU1WrVi199913f
7mdrKwsnTlzxunHyrtQDEfgfioHlZUkHT913mn8+KnzqvT/
lwFX49TpU8rNzVVwcLDTeHBwsFJSUlyUCu6Ic634uGwG4plnnlG3bt00c+ZM2Ww2p2WWZempp57SM888o40
bN/7pduLi4jRu3DinMc/qbeR1y72FnhkAAPzBZTMQ27dv1+DBg/OVB0my2WwaPHiwkpOT/
3I7I0eOVFpamtNPmeqtiiCx+zv6/2ceQi+ZbQgNKqtjl8xKACaCAoPk6emZ7yK21NRUhYSEuCgV3BHnWvFx
WYGoXLmyNm/efMXlmzdvVqVKlf5yO3a7Xf7+/k4/Ng+XXtpx3Tp4NE1HTqarZYOqjjG/
st5qHFlZ3/78uwuT4Xrn5e2tqNp19O2m/
5tRzMvL07ffbtSt9W9zYTK4G8614uOyf2mHDRumJ598Ulu3btU999zjKAvHjh3TmjVr9O6772rSpEmuiue2
yvl4OT3XIaKSv269uaJOnc3U4RNn9WbC9xrRo4n2/
ve0Dh5L05hHm+lIavoV79oACurR2N4aPWqE6tSpq7r1btWH8XOVkZGhzl26ujoa3AznWvFwWYEYMGCAQkJC
NHnyZM2YMUO5ubmSJE9PTzVq1Ehz5sxR9+7dXRXPbTW8pZJWTezm+H1ivxaSpPjVu/
Tk66v02iffqayPl6YPaqXA8nZt2PW77h+9WFk5uS5KDHdxb7v7dOrkSc2YPlUpKScUWStKM95+T8FMK6OQc
a4VD5tlWZarQ+Tk5Diujg0JCZGXl9c1bc+33eTCiAX8pVPLBrs6AgAUKp8CTi2UiIsFvLy8VKVKFVfHAAAA
BcSTKAEAgDEKBAAAMEaBAAAAxigQAADAGAUCAAAYo0AAAABjFAgAAGCMAgEAAIxRIAAAgDEKBAAAMEaBAAA
AxigQAADAGAUCAAAYo0AAAABjFAgAAGCMAgEAAIxRIAAAgDEKBAAAMEaBAAAAxigQAADAGAUCAAAYo0AAAA
BjFAgAAGCMAgEAAIxRIAAAgDEKBAAAMEaBAAAAxigQAADAGAUCAAAYo0AAAABjFAgAAGCMAgEAAIxRIAAAg
DEKBAAAMEaBAAAAxigQAADAGAUCAAAYo0AAAABjFAgAAGCMAgEAAIxRIAAAgDEKBAAAMEaBAAAAxigQAADA
mM2yLMvVIQpb5gVXJ0BpcWPfj10dAaXEb+/
1cHUElBI+ZQq2HjMQAADAGAUCAAAYo0AAAABjFAgAAGCMAgEAAIxRIAAAgDEKBAAAMEaBAAAAxigQAADAGA
UCAAAYo0AAAABjFAgAAGCMAgEAAIxRIAAAgDEKBAAAMEaBAAAAxigQAADAGAUCAAAYo0AAAABjFAgAAGCMA
gEAAIxRIAAAgDEKBAAAMEaBAAAAxigQAADAGAUCAAAYo0AAAABjFAgAAGCMAgEAAIxRIAAAgDEKBAAAMEaB
AAAAxsoUZKWlS5cWeIP333//
VYcBAADXhwIViM6dOxdoYzabTbm5udeSBwAAXAcKVCDy8vKKOgcAALiOcA0EAAAwVqAZiEulp6dr3bp1OnT
okLKzs52WDRo0qFCCAQCAksu4QGzbtk333Xefzp8/r/
T0dFWoUEEpKSkqW7asQkNDKRAAAJQCxl9hDB48WB07dtSpU6fk6+urTZs26ddff1WjRo00adKkosgIAABKG
OMCkZycrKFDh8rDw0Oenp7KyspS1apVNXHiRI0aNaooMgIAgBLGuEB4eXnJw+OPl4WGhurQoUOSpICAAB0+
fLhw0wEAgBLJ+BqI2267TVu2bNEtt9yimJgYvfjii0pJSVF8fLzq1q1bFBkBAEAJYzwD8fLLL6tKlSqSpAk
TJigoKEhPP/20Tpw4oXfeeafQAwIAgJLHeAbi9ttvd/x3aGioPv/
880INBAAASj4eJAUAAIwZz0BUq1ZNNpvtisv3799/TYFQ/
D6eP09zZ89SSsoJ1YyspedHjVa9W291dSy4mfI+ZfR813pq3/BGhfjbtfPX0/rn/
O+17cBJV0eDG+JzregZF4jnnnvO6fecnBxt27ZNn3/+uYYPH15YuVBMPv9spSZNjNMLY8apXr36mhc/
V0/366NPl3+u4OBgV8eDG5nS+w7VujFA/d/
ZpKOnM9StWYQWDW+hZqM+09HTGa6OBzfC51rxsFmWZRXGht5880199913mj17dmFs7ppkXnB1guvHIz26qU
7dehr1wouS/vjDaW3uidHDPR9VnyeedHG6ku/
Gvh+7OsJ1wcfLUwdnPqBHp36t1duPOMbXjG2jL3ccUdzinS5Md3347b0ero5w3eBz7dr4FHBqodCugWjXrp
0WLVpUWJtDMcjJztZPP+7SnU2bOcY8PDx0553NtGP7Nhcmg7sp42lTGU8PZWY7/2XfjOxc3VmzootSwR3xu
VZ8Cq1ALFy4UBUqVCiszaEYnDp9Srm5ufmm9IKDg5WSkuKiVHBH5zIvaPOeFA3rVEeVA33kYbOpW9NwNa4R
rEoBPq6OBzfC51rxuaoHSf3vRZSWZeno0aM6ceKEZsyYUajhDh8+rDFjxuj999+/
4jpZWVnKyspyGrM87bLb7YWaBcC16f/
OJk3tc4d+mNJZF3LztOPXU1q86ZDqRwS5OhqAq2BcIDp16uRUIDw8PFSxYkW1aNFCtWrVKtRwJ0+e1Ny5c/
+0QMTFxWncuHFOY/8cPUYvvDi2ULO4o6DAIHl6eio1NdVpPDU1VSEhIS5KBXd18MQ53f/
vRJX19pSfr5eOpWXqvaeb6dcT6a6OBjfC51rxMS4QY8eOLbSdL1269E+XF+SW0JEjR2rIkCFOY5Ynsw8F4e
XtrajadfTtpo26+55Wkv642Ojbbzeqx8N/
d3E6uKvz2bk6n52rgLJealmvssYt2O7qSHAjfK4VH+MC4enpqSNHjig0NNRpPDU1VaGhocrNzS3wtjp37iy
bzaY/uxHkz545IUl2e/
6vK7gLo+Aeje2t0aNGqE6duqpb71Z9GD9XGRkZ6tylq6ujwc20rFtZNpu098hZVatUXmMfaqA9R85o/
nqeHYPCxeda8TAuEFf6xz4rK0ve3t5G26pSpYpmzJihTp06XXZ5cnKyGjVqZBoRBu5td59OnTypGdOnKiXl
hCJrRWnG2+8pmKk+FDJ/
Xy+90K2+woJ8dTo9W8u+O6wJi3bqQm6h3EkOOPC5VjwKXCCmTp0q6Y8Zgffee0/
ly5d3LMvNzVVSUpLxNRCNGjXS1q1br1gg/
mp2AoXj4Uf+rocfYWoPRevTLYf16ZbDro6BUoLPtaJX4AIxefJkSX/
MQMycOVOenp6OZd7e3oqIiNDMmTONdj58+HClp1/5AqoaNWroq6+
+MtomAAAoesZPomzZsqUWL16soKCSe+sV10CguPAkShQXnkSJ4lLQJ1EaXwPBjAAAADB+EuUDDzygV155Jd
/
4xIkT1a1bt0IJBQAASjbjApGUlKT77rsv33i7du2UlJRUKKEAAEDJZlwgzp07d9nbNb28vHTmzJlCCQUAAE
o24wJRr149LViwIN/4xx9/
rNq1axdKKAAAULIZX0Q5evRode3aVfv27dPdd98tSVqzZo3mz5+vhQsXFnpAAABQ8hgXiI4dOyohIUEvv/
yyFi5cKF9fX9WvX1+JiYn8OW8AAEoJ4+dAXOrMmTP66KOPNGvWLG3dutXob2EUFZ4DgeLCcyBQXHgOBIpLQ
Z8DYXwNxEVJSUmKjY1VWFiYXnvtNd19993atGnT1W4OAABcR4y+wjh69KjmzJmjWbNm6cyZM+revbuysrKU
kJDABZQAAJQiBZ6B6NixoyIjI7Vjxw5NmTJFv//
+u6ZNm1aU2QAAQAlV4BmIzz77TIMGDdLTTz+tW265pSgzAQCAEq7AMxDr16/
X2bNn1ahRIzVp0kTTp09XSkpKUWYDAAAlVIELxJ133ql3331XR44cUb9+/
fTxxx8rLCxMeXl5Wr16tc6ePVuUOQEAQAlyTbdx7t69W7NmzVJ8fLxOnz6t1q1ba+nSpYWZ76pwGyeKC7dx
orhwGyeKS5HfxilJkZGRmjhxon777Td99NFH17IpAABwHbnmB0mVRMxAoLgwA4HiwgwEikuxzEAAAIDSiQI
BAACMUSAAAIAxCgQAADBGgQAAAMYoEAAAwBgFAgAAGKNAAAAAYxQIAABgjAIBAACMUSAAAIAxCgQAADBGgQ
AAAMYoEAAAwBgFAgAAGKNAAAAAYxQIAABgjAIBAACMUSAAAIAxCgQAADBGgQAAAMYoEAAAwBgFAgAAGKNAA
AAAYxQIAABgjAIBAACMUSAAAIAxm2VZlqtDFLbMC65OAACFK6jxQFdHQCmRsW16gdZjBgIAABijQAAAAGMU
CAAAYIwCAQAAjFEgAACAMQoEAAAwRoEAAADGKBAAAMAYBQIAABijQAAAAGMUCAAAYIwCAQAAjFEgAACAMQo
EAAAwRoEAAADGKBAAAMAYBQIAABijQAAAAGMUCAAAYIwCAQAAjFEgAACAMQoEAAAwRoEAAADGKBAAAMAYBQ
IAABijQAAAAGMUCAAAYIwCAQAAjFEgAACAMQoEAAAwRoEAAADGKBAAAMAYBQIAABijQAAAAGMUCAAAYIwCA
QAAjFEgAACAMQoEAAAwRoEAAADGKBAAAMAYBQIAABijQAAAAGMUCAAAYIwCAQAAjFEgAACAMQoE9PH8eWrX
+m41vq2eHunRTTt37HB1JLgpzjUUtuiG1bVwSj/
tXzVBGdumq2OLW52Wd7q7vpbNGKDfvnpFGdum69aaN7goqfuhQJRyn3+2UpMmxqlf/
wH6+JMlioyspaf79VFqaqqro8HNcK6hKJTztWvnL//
Vc3ELLru8rK+3NiTv0wtTE4o3WClAgSjl4ufOVtcHu6tzlwdUvUYNvTBmnHx8fJSweJGro8HNcK6hKKz65k
eNm7FcS7+6/GzWRyu2KO6dz5W4aXcxJ3N/FIhSLCc7Wz/9uEt3Nm3mGPPw8NCddzbTju3bXJgM7oZzDXA/L
i8QGRkZWr9+vX788cd8yzIzM/XBBx/
86euzsrJ05swZp5+srKyiiutWTp0+pdzcXAUHBzuNBwcHKyUlxUWp4I441wD349IC8csvvygqKkrNmzdXvX
r1FBMToyNHjjiWp6WlqXfv3n+6jbi4OAUEBDj9vPpKXFFHBwCgVHNpgRgxYoTq1q2r48ePa/
fu3fLz81N0dLQOHTpU4G2MHDlSaWlpTj/
DR4wswtTuIygwSJ6envkuYktNTVVISIiLUsEdca4B7selBWLDhg2Ki4tTSEiIatSooWXLlqlt27a66667tH
///gJtw263y9/
f3+nHbrcXcXL34OXtrajadfTtpo2Osby8PH377UbdWv82FyaDu+FcA9xPGVfuPCMjQ2XK/
F8Em82mt956SwMHDlRMTIzmz5/vwnSlw6OxvTV61AjVqVNXdevdqg/
j5yojI0Odu3R1dTS4Gc41FIVyvt6qXrWi4/eIG4J1a80bdOrMeR0+ekpB/
mVVtXKQqoQGSJJqRlSSJB1LPaNjqWddktlduLRA1KpVS999952ioqKcxqdPny5Juv/+
+10Rq1S5t919OnXypGZMn6qUlBOKrBWlGW+/p2CmlVHIONdQFBrWDteq9551/D5x2AOSpPilm/TkmA/
VPqae3h3/qGN5/CuPS5L+NXOlJry9snjDuhmbZVmWq3YeFxenr7/+WitXXv5/Yv/+/
TVz5kzl5eUZbTfzQmGkA4CSI6jxQFdHQCmRsW16gdZzaYEoKhQIAO6GAoHiUtAC4fLnQAAAgOsPBQIAABij
QAAAAGMUCAAAYIwCAQAAjFEgAACAMQoEAAAwRoEAAADGKBAAAMAYBQIAABijQAAAAGMUCAAAYIwCAQAAjFE
gAACAMQoEAAAwRoEAAADGKBAAAMAYBQIAABijQAAAAGMUCAAAYIwCAQAAjFEgAACAMQoEAAAwRoEAAADGKB
AAAMAYBQIAABijQAAAAGMUCAAAYIwCAQAAjFEgAACAMQoEAAAwRoEAAADGKBAAAMAYBQIAABijQAAAAGMUC
AAAYIwCAQAAjFEgAACAMQoEAAAwRoEAAADGKBAAAMAYBQIAABijQAAAAGMUCAAAYIwCAQAAjNksy7JcHQKu
l5WVpbi4OI0cOVJ2u93VceDGONdQXDjXihYFApKkM2fOKCAgQGlpafL393d1HLgxzjUUF861osVXGAAAwBg
FAgAAGKNAAAAAYxQISJLsdrvGjBnDhUYocpxrKC6ca0WLiygBAIAxZiAAAIAxCgQAADBGgQAAAMYoEAAAwB
gFAnrzzTcVEREhHx8fNWnSRJs3b3Z1JLihpKQkdezYUWFhYbLZbEpISHB1JLihuLg4NW7cWH5+fgoNDVXnz
p21e/duV8dySxSIUm7BggUaMmSIxowZo++//17169dX27Ztdfz4cVdHg5tJT09X/
fr19eabb7o6CtzYunXrNGDAAG3atEmrV69WTk6O2rRpo/
T0dFdHczvcxlnKNWnSRI0bN9b06dMlSXl5eapataqeeeYZPf/
88y5OB3dls9m0ZMkSde7c2dVR4OZOnDih0NBQrVu3Ts2bN3d1HLfCDEQplp2dra1bt6pVq1aOMQ8PD7Vq1U
obN250YTIAKBxpaWmSpAoVKrg4ifuhQJRiKSkpys3NVaVKlZzGK1WqpKNHj7ooFQAUjry8PD333HOKjo5W3
bp1XR3H7ZRxdQAAAIrCgAED9MMPP2j9+vWujuKWKBClWEhIiDw9PXXs2DGn8WPHjqly5couSgUA127gwIFa
vny5kpKSdOONN7o6jlviK4xSzNvbW40aNdKaNWscY3l5eVqzZo2aNm3qwmQAcHUsy9LAgQO1ZMkSJSYmqlq
1aq6O5LaYgSjlhgwZotjYWN1++
+264447NGXKFKWnp6t3796ujgY3c+7cOe3du9fx+4EDB5ScnKwKFSropptucmEyuJMBAwZo/
vz5+vTTT+Xn5+e4nisgIEC+vr4uTudeuI0Tmj59ul599VUdPXpUDRo00NSpU9WkSRNXx4KbWbt2rVq2bJlv
PDY2VnPmzCn+QHBLNpvtsuOzZ89Wr169ijeMm6NAAAAAY1wDAQAAjFEgAACAMQoEAAAwRoEAAADGKBAAAMA
YBQIAABijQAAAAGMUCAAAYIwCAaDI9OrVS507d3b83qJFCz333HPFnmPt2rWy2Ww6ffp0se8bcFcUCKAU6t
Wrl2w2m2w2m7y9vVWjRg2NHz9eFy5cKNL9Ll68WC+99FKB1uUffaBk449pAaXUvffeq9mzZysrK0srV67Ug
AED5OXlpZEjRzqtl52dLW9v70LZZ4UKFQplOwBcjxkIoJSy2+2qXLmywsPD9fTTT6tVq1ZaunSp42uHCRMm
KCwsTJGRkZKkw4cPq3v37goMDFSFChXUqVMnHTx40LG93NxcDRkyRIGBgQoODtY//
vEPXfqndi79CiMrK0sjRoxQ1apVZbfbVaNGDc2aNUsHDx50/OGtoKAg2Ww2xx9CysvLU1xcnKpVqyZfX1/
Vr19fCxcudNrPypUrVbNmTfn6+qply5ZOOQEUDgoEAEmSr6+vsrOzJUlr1qzR7t27tXr1ai1fvlw5OTlq27
at/
Pz89PXXX+ubb75R+fLlde+99zpe89prr2nOnDl6//33tX79ep08eVJLliz5030+9thj+uijjzR16lT99NNP
evvtt1W+fHlVrVpVixYtkiTt3r1bR44c0RtvvCFJiouL0wcffKCZM2dq165dGjx4sP7+979r3bp1kv4oOl2
7dlXHjh2VnJysvn376vnnny+qtw0ovSwApU5sbKzVqVMny7IsKy8vz1q9erVlt9utYcOGWbGxsValSpWsrK
wsx/rx8fFWZGSklZeX5xjLysqyfH19rS++
+MKyLMuqUqWKNXHiRMfynJwc68Ybb3Tsx7IsKyYmxnr22Wcty7Ks3bt3W5Ks1atXXzbjV199ZUmyTp065Rj
LzMy0ypYta23YsMFp3T59+lgPP/
ywZVmWNXLkSKt27dpOy0eMGJFvWwCuDddAAKXU8uXLVb58eeXk5CgvL089e/bU2LFjNWDAANWrV8/
puoft27dr79698vPzc9pGZmam9u3bp7S0NB05ckRNmjRxLCtTpoxuv/32fF9jXJScnCxPT0/
FxMQUOPPevXt1/
vx5tW7d2mk8Oztbt912myTpp59+csohSU2bNi3wPgAUDAUCKKVatmypt956S97e3goLC1OZMv/
3cVCuXDmndc+dO6dGjRpp3rx5+bZTsWLFq9q/r6+v8WvOnTsnSVqxYoVuuOEGp2V2u/
2qcgC4OhQIoJQqV66catSoUaB1GzZsqAULFig0NFT+/
v6XXadKlSr69ttv1bx5c0nShQsXtHXrVjVs2PCy69erV095eXlat26dWrVqlW/
5xRmQ3Nxcx1jt2rVlt9t16NChK85cREVFaenSpU5jmzZt+uuDBGCEiygB/KVHHnlEISEh6tSpk77+
+msdOHBAa9eu1aBBg/Tbb79Jkp599ln9+9//VkJCgn7++Wf179//T5/hEBERodjYWD3++ONKSEhwbPM///
mPJCk8PFw2m03Lly/XiRMndO7cOfn5+WnYsGEaPHiw5s6dq3379un777/
XtGnTNHfuXEnSU089pT179mj48OHavXu35s+frzlz5hT1WwSUOhQIAH+pbNmySkpK0k033aSuXbsqKipKff
r0UWZmpmNGYujQoXr00UcVGxurpk2bys/PT126dPnT7b711lt68MEH1b9/
f9WqVUtPPPGE0tPTJUk33HCDxo0bp+eff16VKlXSwIEDJUkvvfSSRo8erbi4OEVFRenee+/
VihUrVK1aNUnSTTfdpEWLFikhIUH169fXzJkz9fLLLxfhuwOUTjbrSlc4AQAAXAEzEAAAwBgFAgAAGKNAAA
AAYxQIAABgjAIBAACMUSAAAIAxCgQAADBGgQAAAMYoEAAAwBgFAgAAGKNAAAAAY/
8PpiVgRBtt7A4AAAAASUVORK5CYII=\n"
},
"metadata": {}
},
{
"output_type": "stream",
"name": "stdout",
"text": [
"Classification Report:\n",
" precision recall f1-score support\n",
"\n",
" Iris-setosa 1.00 1.00 1.00 10\n",
"Iris-versicolor 1.00 1.00 1.00 9\n",
" Iris-virginica 1.00 1.00 1.00 11\n",
"\n",
" accuracy 1.00 30\n",
" macro avg 1.00 1.00 1.00 30\n",
" weighted avg 1.00 1.00 1.00 30\n",
"\n",
"Accuracy: 1.0\n"
]
}
]
},
{
"cell_type": "markdown",
"source": [
"Program 5)Write a program to implement k- Nearest Neighbor algorithm to
classify the iris data set.\n",
"Print both correct and wrong predictions. (Python ML library can be used
for this\n",
"problem)"
],
"metadata": {
"id": "LCr9VbnpUJXO"
}
},
{
"cell_type": "code",
"source": [
"import zipfile\n",
"import pandas as pd\n",
"from sklearn.model_selection import train_test_split\n",
"from sklearn.neighbors import KNeighborsClassifier\n",
"from sklearn.metrics import accuracy_score, confusion_matrix,
classification_report\n",
"\n",
"# Extract the contents of the archive.zip file\n",
"with zipfile.ZipFile('archive.zip', 'r') as zip_ref:\n",
" zip_ref.extractall()\n",
"\n",
"# Load the Iris dataset\n",
"iris_data = pd.read_csv('Iris.csv')\n",
"\n",
"# Display the first few rows of the dataset\n",
"print(\"Iris Dataset:\")\n",
"print(iris_data.head())\n",
"\n",
"# Split data into features and target\n",
"X = iris_data.drop('Species', axis=1)\n",
"y = iris_data['Species']\n",
"\n",
"# Split the dataset into training and testing sets\n",
"X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2,
random_state=42)\n",
"\n",
"# Create a KNN classifier\n",
"knn_classifier = KNeighborsClassifier(n_neighbors=3)\n",
"\n",
"# Train the classifier on the training data\n",
"knn_classifier.fit(X_train, y_train)\n",
"\n",
"# Make predictions on the test data\n",
"y_pred = knn_classifier.predict(X_test)\n",
"\n",
"# Calculate accuracy\n",
"accuracy = accuracy_score(y_test, y_pred)\n",
"\n",
"# Display correct and wrong predictions\n",
"results = pd.DataFrame({'Actual': y_test, 'Predicted': y_pred, 'Correct':
y_test == y_pred})\n",
"print(\"\\nCorrect Predictions:\")\n",
"print(results[results['Correct']])\n",
"\n",
"print(\"\\nWrong Predictions:\")\n",
"print(results[~results['Correct']])\n",
"\n",
"# Plot confusion matrix\n",
"cm = confusion_matrix(y_test, y_pred)\n",
"print(\"\\nConfusion Matrix:\")\n",
"print(cm)\n",
"\n",
"# Display classification report\n",
"print(\"\\nClassification Report:\")\n",
"print(classification_report(y_test, y_pred))\n",
"\n",
"# Display accuracy\n",
"print(\"\\nAccuracy:\", accuracy)\n"
],
"metadata": {
"colab": {
"base_uri": "https://localhost:8080/"
},
"id": "aptOWq7aUOsy",
"outputId": "dcecb28c-cede-4b9d-e9c9-5fafd9d48c23"
},
"execution_count": null,
"outputs": [
{
"output_type": "stream",
"name": "stdout",
"text": [
"Iris Dataset:\n",
" Id SepalLengthCm SepalWidthCm PetalLengthCm PetalWidthCm
Species\n",
"0 1 5.1 3.5 1.4 0.2 Iris-
setosa\n",
"1 2 4.9 3.0 1.4 0.2 Iris-
setosa\n",
"2 3 4.7 3.2 1.3 0.2 Iris-
setosa\n",
"3 4 4.6 3.1 1.5 0.2 Iris-
setosa\n",
"4 5 5.0 3.6 1.4 0.2 Iris-
setosa\n",
"\n",
"Correct Predictions:\n",
" Actual Predicted Correct\n",
"73 Iris-versicolor Iris-versicolor True\n",
"18 Iris-setosa Iris-setosa True\n",
"118 Iris-virginica Iris-virginica True\n",
"78 Iris-versicolor Iris-versicolor True\n",
"76 Iris-versicolor Iris-versicolor True\n",
"31 Iris-setosa Iris-setosa True\n",
"64 Iris-versicolor Iris-versicolor True\n",
"141 Iris-virginica Iris-virginica True\n",
"68 Iris-versicolor Iris-versicolor True\n",
"82 Iris-versicolor Iris-versicolor True\n",
"110 Iris-virginica Iris-virginica True\n",
"12 Iris-setosa Iris-setosa True\n",
"36 Iris-setosa Iris-setosa True\n",
"9 Iris-setosa Iris-setosa True\n",
"19 Iris-setosa Iris-setosa True\n",
"56 Iris-versicolor Iris-versicolor True\n",
"104 Iris-virginica Iris-virginica True\n",
"69 Iris-versicolor Iris-versicolor True\n",
"55 Iris-versicolor Iris-versicolor True\n",
"132 Iris-virginica Iris-virginica True\n",
"29 Iris-setosa Iris-setosa True\n",
"127 Iris-virginica Iris-virginica True\n",
"26 Iris-setosa Iris-setosa True\n",
"128 Iris-virginica Iris-virginica True\n",
"131 Iris-virginica Iris-virginica True\n",
"145 Iris-virginica Iris-virginica True\n",
"108 Iris-virginica Iris-virginica True\n",
"143 Iris-virginica Iris-virginica True\n",
"45 Iris-setosa Iris-setosa True\n",
"30 Iris-setosa Iris-setosa True\n",
"\n",
"Wrong Predictions:\n",
"Empty DataFrame\n",
"Columns: [Actual, Predicted, Correct]\n",
"Index: []\n",
"\n",
"Confusion Matrix:\n",
"[[10 0 0]\n",
" [ 0 9 0]\n",
" [ 0 0 11]]\n",
"\n",
"Classification Report:\n",
" precision recall f1-score support\n",
"\n",
" Iris-setosa 1.00 1.00 1.00 10\n",
"Iris-versicolor 1.00 1.00 1.00 9\n",
" Iris-virginica 1.00 1.00 1.00 11\n",
"\n",
" accuracy 1.00 30\n",
" macro avg 1.00 1.00 1.00 30\n",
" weighted avg 1.00 1.00 1.00 30\n",
"\n",
"\n",
"Accuracy: 1.0\n"
]
}
]
},
{
"cell_type": "code",
"source": [
"import zipfile\n",
"import pandas as pd\n",
"from sklearn.model_selection import train_test_split\n",
"from sklearn.neighbors import KNeighborsClassifier\n",
"from sklearn.metrics import accuracy_score, confusion_matrix,
classification_report\n",
"import matplotlib.pyplot as plt\n",
"import seaborn as sns\n",
"\n",
"# Extract the contents of the archive.zip file\n",
"with zipfile.ZipFile('archive.zip', 'r') as zip_ref:\n",
" zip_ref.extractall()\n",
"\n",
"# Load the Iris dataset\n",
"iris_data = pd.read_csv('Iris.csv')\n",
"\n",
"# Display the first few rows of the dataset\n",
"print(\"Iris Dataset:\")\n",
"print(iris_data.head())\n",
"\n",
"# Split data into features and target\n",
"X = iris_data.drop('Species', axis=1)\n",
"y = iris_data['Species']\n",
"\n",
"# Split the dataset into training and testing sets\n",
"X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2,
random_state=42)\n",
"\n",
"# Create a KNN classifier\n",
"knn_classifier = KNeighborsClassifier(n_neighbors=3)\n",
"\n",
"# Train the classifier on the training data\n",
"knn_classifier.fit(X_train, y_train)\n",
"\n",
"# Make predictions on the test data\n",
"y_pred = knn_classifier.predict(X_test)\n",
"\n",
"# Calculate accuracy\n",
"accuracy = accuracy_score(y_test, y_pred)\n",
"\n",
"# Display correct and wrong predictions\n",
"results = pd.DataFrame({'Actual': y_test, 'Predicted': y_pred, 'Correct':
y_test == y_pred})\n",
"print(\"\\nCorrect Predictions:\")\n",
"print(results[results['Correct']])\n",
"\n",
"print(\"\\nWrong Predictions:\")\n",
"print(results[~results['Correct']])\n",
"\n",
"# Plot confusion matrix\n",
"plt.figure(figsize=(10, 6))\n",
"sns.heatmap(confusion_matrix(y_test, y_pred), annot=True, fmt='d',
cmap='Blues', cbar=False)\n",
"plt.title('Confusion Matrix')\n",
"plt.xlabel('Predicted')\n",
"plt.ylabel('Actual')\n",
"plt.show()\n",
"\n",
"# Display classification report\n",
"print(\"\\nClassification Report:\")\n",
"print(classification_report(y_test, y_pred))\n",
"\n",
"# Display accuracy\n",
"print(\"\\nAccuracy:\", accuracy)\n",
"\n",
"# Plot correct and wrong predictions\n",
"plt.figure(figsize=(10, 6))\n",
"sns.scatterplot(x=X_test.iloc[:, 0], y=X_test.iloc[:, 1],
hue=results['Correct'], palette={True: 'green', False: 'red'})\n",
"plt.title('Correct and Wrong Predictions')\n",
"plt.xlabel(X.columns[0])\n",
"plt.ylabel(X.columns[1])\n",
"plt.show()\n"
],
"metadata": {
"id": "zSbJao-JVcj2",
"outputId": "1b95a3d2-d682-489d-ffe2-ab2048732202",
"colab": {
"base_uri": "https://localhost:8080/",
"height": 1000
}
},
"execution_count": null,
"outputs": [
{
"output_type": "stream",
"name": "stdout",
"text": [
"Iris Dataset:\n",
" Id SepalLengthCm SepalWidthCm PetalLengthCm PetalWidthCm
Species\n",
"0 1 5.1 3.5 1.4 0.2 Iris-
setosa\n",
"1 2 4.9 3.0 1.4 0.2 Iris-
setosa\n",
"2 3 4.7 3.2 1.3 0.2 Iris-
setosa\n",
"3 4 4.6 3.1 1.5 0.2 Iris-
setosa\n",
"4 5 5.0 3.6 1.4 0.2 Iris-
setosa\n",
"\n",
"Correct Predictions:\n",
" Actual Predicted Correct\n",
"73 Iris-versicolor Iris-versicolor True\n",
"18 Iris-setosa Iris-setosa True\n",
"118 Iris-virginica Iris-virginica True\n",
"78 Iris-versicolor Iris-versicolor True\n",
"76 Iris-versicolor Iris-versicolor True\n",
"31 Iris-setosa Iris-setosa True\n",
"64 Iris-versicolor Iris-versicolor True\n",
"141 Iris-virginica Iris-virginica True\n",
"68 Iris-versicolor Iris-versicolor True\n",
"82 Iris-versicolor Iris-versicolor True\n",
"110 Iris-virginica Iris-virginica True\n",
"12 Iris-setosa Iris-setosa True\n",
"36 Iris-setosa Iris-setosa True\n",
"9 Iris-setosa Iris-setosa True\n",
"19 Iris-setosa Iris-setosa True\n",
"56 Iris-versicolor Iris-versicolor True\n",
"104 Iris-virginica Iris-virginica True\n",
"69 Iris-versicolor Iris-versicolor True\n",
"55 Iris-versicolor Iris-versicolor True\n",
"132 Iris-virginica Iris-virginica True\n",
"29 Iris-setosa Iris-setosa True\n",
"127 Iris-virginica Iris-virginica True\n",
"26 Iris-setosa Iris-setosa True\n",
"128 Iris-virginica Iris-virginica True\n",
"131 Iris-virginica Iris-virginica True\n",
"145 Iris-virginica Iris-virginica True\n",
"108 Iris-virginica Iris-virginica True\n",
"143 Iris-virginica Iris-virginica True\n",
"45 Iris-setosa Iris-setosa True\n",
"30 Iris-setosa Iris-setosa True\n",
"\n",
"Wrong Predictions:\n",
"Empty DataFrame\n",
"Columns: [Actual, Predicted, Correct]\n",
"Index: []\n"
]
},
{
"output_type": "display_data",
"data": {
"text/plain": [
"<Figure size 1000x600 with 1 Axes>"
],
"image/png":
"iVBORw0KGgoAAAANSUhEUgAAA0YAAAIjCAYAAAAnagtFAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIH
ZlcnNpb24zLjcuMSwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy/
bCgiHAAAACXBIWXMAAA9hAAAPYQGoP6dpAAAuqElEQVR4nO3dZ5hV5b3/4e+AMCDSEVGjYImIgt3YjiCJPR
YkatQcBRKPDXuJJTGCHuXEWLGhsREiamLBGitRYqxREWOMsUZzBAVUUETQYf4v/
DsnE9QwyMxGnvu+Lq4rs9baa/32vNjOJ8/
ea1fV1tbWBgAAoGDNKj0AAABApQkjAACgeMIIAAAonjACAACKJ4wAAIDiCSMAAKB4wggAACieMAIAAIonjA
AAgOIJIwAWmRdffDHbbrtt2rdvn6qqqowbN26Rnv+1115LVVVVrr766kV63q+zrbbaKltttVWlxwD42hNGA
EuYl19+OQceeGBWXXXVtGrVKu3atcsWW2yR888/P7Nnz27Uaw8aNCjPPvtsTj/
99IwZMyYbbbRRo16vKQ0ePDhVVVVp167d5/4eX3zxxVRVVaWqqipnnXVWg8//5ptvZtiwYZk4ceIimBaAhl
qq0gMAsOjccccd2WOPPVJdXZ399tsvvXv3zty5c/PQQw/luOOOy3PPPZfLLrusUa49e/bsPPLII/
nJT36SQw89tFGu0b1798yePTstWrRolPP/O0sttVQ+/
PDD3Hbbbdlzzz3r7bvmmmvSqlWrfPTRRwt17jfffDPDhw9Pjx49st566y3w4+65556Fuh4A9QkjgCXEq6+
+mr322ivdu3fP+PHjs/
zyy9ftGzp0aF566aXccccdjXb9qVOnJkk6dOjQaNeoqqpKq1atGu38/051dXW22GKLXHvttfOF0dixY/
Pd7343N954Y5PM8uGHH2bppZdOy5Ytm+R6AEs6b6UDWEKceeaZ+eCDD3LFFVfUi6LPrL766jniiCPqfv7kk
09y2mmnZbXVVkt1dXV69OiRk046KXPmzKn3uB49emSnnXbKQw89lG9961tp1apVVl111fzqV7+qO2bYsGHp
3r17kuS4445LVVVVevTokeTTt6B99r//2bBhw1JVVVVv27333pv/+I//
SIcOHbLMMsukZ8+eOemkk+r2f9FnjMaPH58tt9wybdq0SYcOHbLrrrvm+eef/
9zrvfTSSxk8eHA6dOiQ9u3bZ8iQIfnwww+/+Bf7L/bZZ5/87ne/
y3vvvVe37YknnsiLL76YffbZZ77j33nnnRx77LHp06dPlllmmbRr1y477LBDnnnmmbpjHnjggWy88cZJkiF
DhtS9Je+z57nVVluld+/eefLJJ9O3b98svfTSdb+Xf/
2M0aBBg9KqVav5nv92222Xjh075s0331zg5wpQEmEEsIS47bbbsuqqq2bzzTdfoOP333///
OxnP8sGG2yQc889N/369cuIESOy1157zXfsSy+9lN133z3bbLNNzj777HTs2DGDBw/
Oc889lyQZOHBgzj333CTJ3nvvnTFjxuS8885r0PzPPfdcdtppp8yZMyennnpqzj777Oyyyy754x//+KWPu+
+++7Lddtvl7bffzrBhw3L00Ufn4YcfzhZbbJHXXnttvuP33HPPvP/+
+xkxYkT23HPPXH311Rk+fPgCzzlw4MBUVVXlpptuqts2duzYrLnmmtlggw3mO/
6VV17JuHHjstNOO+Wcc87Jcccdl2effTb9+vWri5RevXrl1FNPTZIccMABGTNmTMaMGZO+ffvWnWf69OnZY
Ycdst566+W8885L//79P3e+888/
P8suu2wGDRqUmpqaJMmll16ae+65JxdccEFWWGGFBX6uAEWpBeBrb8aMGbVJanfdddcFOn7ixIm1SWr333/
/etuPPfbY2iS148ePr9vWvXv32iS1EyZMqNv29ttv11ZXV9cec8wxddteffXV2iS1v/
jFL+qdc9CgQbXdu3efb4ZTTjml9p//
M3TuuefWJqmdOnXqF8792TWuuuqqum3rrbdebdeuXWunT59et+2ZZ56pbdasWe1+++033/V+
+MMf1jvnbrvtVtu5c+cvvOY/P482bdrU1tbW1u6+++613/nOd2pra2tra2pqart161Y7fPjwz/
0dfPTRR7U1NTXzPY/q6uraU089tW7bE088Md9z+0y/fv1qk9SOGjXqc/f169ev3ra77767Nkntf//
3f9e+8sortcsss0ztgAED/u1zBCiZFSOAJcDMmTOTJG3btl2g4+
+8884kydFHH11v+zHHHJMk830Waa211sqWW25Z9/Oyyy6bnj175pVXXlnomf/
VZ59NuuWWWzJv3rwFeszkyZMzceLEDB48OJ06darbvs4662Sbbbape57/7KCDDqr385Zbbpnp06fX/
Q4XxD777JMHHnggU6ZMyfjx4zNlypTPfRtd8unnkpo1+/Q/
tzU1NZk+fXrd2wSfeuqpBb5mdXV1hgwZskDHbrvttjnwwANz6qmnZuDAgWnVqlUuvfTSBb4WQImEEcASoF2
7dkmS999/f4GO//vf/55mzZpl9dVXr7e9W7du6dChQ/7+97/X277yyivPd46OHTvm3XffXciJ5/f9738/
W2yxRfbff/8st9xy2WuvvfKb3/zmSyPpszl79uw5375evXpl2rRpmTVrVr3t//
pcOnbsmCQNei477rhj2rZtm+uvvz7XXHNNNt544/
l+l5+ZN29ezj333Hzzm99MdXV1unTpkmWXXTaTJk3KjBkzFviaK664YoNutHDWWWelU6dOmThxYkaOHJmuX
bsu8GMBSiSMAJYA7dq1yworrJA///nPDXrcv9784Is0b978c7fX1tYu9DU++/
zLZ1q3bp0JEybkvvvuy7777ptJkybl+9//frbZZpv5jv0qvspz+Ux1dXUGDhyY0aNH5+abb/
7C1aIkOeOMM3L00Uenb9++
+fWvf52777479957b9Zee+0FXhlLPv39NMTTTz+dt99+O0ny7LPPNuixACUSRgBLiJ122ikvv/
xyHnnkkX97bPfu3TNv3ry8+OKL9ba/
9dZbee+99+ruMLcodOzYsd4d3D7zr6tSSdKsWbN85zvfyTnnnJO//OUvOf300zN+/Pj8/ve//
9xzfzbnCy+8MN++v/71r+nSpUvatGnz1Z7AF9hnn33y9NNP5/333//cG1Z85oYbbkj//
v1zxRVXZK+99sq2226brbfeer7fyYJG6oKYNWtWhgwZkrXWWisHHHBAzjzzzDzxxBOL7PwASyJhBLCE+PGP
f5w2bdpk//33z1tvvTXf/pdffjnnn39+kk/
fCpZkvjvHnXPOOUmS7373u4tsrtVWWy0zZszIpEmT6rZNnjw5N998c73j3nnnnfke+9kXnf7rLcQ/s/
zyy2e99dbL6NGj64XGn//859xzzz11z7Mx9O/fP6eddlouvPDCdOvW7QuPa968+XyrUb/97W/zv//7v/
W2fRZwnxeRDXX88cfn9ddfz+jRo3POOeekR48eGTRo0Bf+HgHwBa8AS4zVVlstY8eOzfe///306tUr+
+23X3r37p25c+fm4Ycfzm9/+9sMHjw4SbLuuutm0KBBueyyy/Lee+
+lX79+efzxxzN69OgMGDDgC28FvTD22muvHH/
88dltt91y+OGH58MPP8wll1ySNdZYo97NB0499dRMmDAh3/3ud9O9e/e8/fbbufjii/ONb3wj//Ef//
GF5//FL36RHXbYIZtttll+9KMfZfbs2bngggvSvn37DBs2bJE9j3/VrFmz/PSnP/
23x+2000459dRTM2TIkGy+
+eZ59tlnc80112TVVVetd9xqq62WDh06ZNSoUWnbtm3atGmTTTbZJKusskqD5ho/
fnwuvvjinHLKKXW3D7/qqquy1VZb5eSTT86ZZ57ZoPMBlMKKEcASZJdddsmkSZOy+
+6755ZbbsnQoUNzwgkn5LXXXsvZZ5+dkSNH1h17+eWXZ/
jw4XniiSdy5JFHZvz48TnxxBNz3XXXLdKZOnfunJtvvjlLL710fvzjH2f06NEZMWJEdt555/
lmX3nllXPllVdm6NChueiii9K3b9+MHz8+7du3/8Lzb7311rnrrrvSuXPn/OxnP8tZZ52VTTfdNH/
84x8bHBWN4aSTTsoxxxyTu++
+O0cccUSeeuqp3HHHHVlppZXqHdeiRYuMHj06zZs3z0EHHZS99947Dz74YIOu9f777+eHP/xh1l9//
fzkJz+p277lllvmiCOOyNlnn51HH310kTwvgCVNVW1DPm0KAACwBLJiBAAAFE8YAQAAxRNGAABA8YQRAABQ
PGEEAAAUTxgBAADFE0YAAEDxlqr0AI2h9Q7nVnoEYDHw7m1HVXoEAKDCWi1g8VgxAgAAiieMAACA4gkjAAC
geMIIAAAonjACAACKJ4wAAIDiCSMAAKB4wggAACieMAIAAIonjAAAgOIJIwAAoHjCCAAAKJ4wAgAAiieMAA
CA4gkjAACgeMIIAAAonjACAACKJ4wAAIDiCSMAAKB4wggAACieMAIAAIonjAAAgOIJIwAAoHjCCAAAKJ4wA
gAAiieMAACA4gkjAACgeMIIAAAonjACAACKJ4wAAIDiCSMAAKB4wggAACieMAIAAIonjAAAgOIJIwAAoHjC
CAAAKJ4wAgAAiieMAACA4gkjAACgeMIIAAAonjACAACKJ4wAAIDiCSMAAKB4wggAACieMAIAAIonjAAAgOI
JIwAAoHjCCAAAKJ4wAgAAiieMAACA4gkjAACgeMIIAAAonjACAACKJ4wAAIDiCSMAAKB4wggAACieMAIAAI
onjAAAgOIJIwAAoHjCCAAAKJ4wAgAAiieMAACA4gkjAACgeMIIAAAonjACAACKJ4wAAIDiCSMAAKB4wggAA
CieMAIAAIonjAAAgOIJI762tui9Ym4Ytmte+fV/
ZfbvjsrOm6023zEn77tZXrnmgLwz7rDcccb3stoKHZp+UKDJXTf2muywzbez8fp98oO99sizkyZVeiSgArw
W0BDCiK+tNq1a5NlXpubIi8d/
7v5j9tgoh+yyXg6/4L70PfLazPro49z23wNT3aJ5E08KNKW7fndnzjpzRA48ZGiu+
+3N6dlzzRx84I8yffr0So8GNCGvBTSUMOJr654/vZbhv3o4tz788ufuHzpgg/
z8usdz+6Ov5M+vTcv+Z92V5Tu3yS6bz7+yBCw5xoy+KgN33zMDdvteVlt99fz0lOFp1apVxt10Y6VHA5qQ1
wIaShixROrRrX2W79Qm459+vW7bzA/n5okXpmSTNVeo4GRAY/
p47tw8/5fnsulmm9dta9asWTbddPNMeubpCk4GNCWvBSyMpSp58WnTpuXKK6/
MI488kilTpiRJunXrls033zyDBw/OsssuW8nx+Brr1nHpJMnb735Yb/vb736Y5f7/
PmDJ8+5776ampiadO3eut71z58559dVXKjQV0NS8FrAwKrZi9MQTT2SNNdbIyJEj0759+/Tt2zd9+/ZN+/
btM3LkyKy55pr505/+9G/
PM2fOnMycObPev9p5nzTBMwAAAJYUFVsxOuyww7LHHntk1KhRqaqqqrevtrY2Bx10UA477LA88sgjX3qeES
NGZPjw4fW2NV9t27T45vaLfGa+Pqb8/5Wirh2XzpR3Z9Vt79px6Ux6eWqlxgIaWccOHdO8efP5Plw9ffr0d
OnSpUJTAU3NawELo2IrRs8880yOOuqo+aIoSaqqqnLUUUdl4sSJ//Y8J554YmbMmFHv31Krbd0IE/
N18tqUGZn8zqz0X2+lum1tl26ZjXt2y2N/fbOCkwGNqUXLlum11tp57NH/+z/
V5s2bl8ceeyTrrLt+BScDmpLXAhZGxVaMunXrlscffzxrrrnm5+5//PHHs9xyy/
3b81RXV6e6urretqpmFf3oFE2kTasW9b6XqMdy7bLOqsvm3fc/
yhtT389F457K8Xttkpf+97289taMnLLv5pk8fdYX3sUOWDLsO2hITj7p+Ky9du/
07rNOfj1mdGbPnp0Buw2s9GhAE/JaQENVrCCOPfbYHHDAAXnyySfzne98py6C3nrrrdx///355S9/
mbPOOqtS4/E1sME3l8s9Z+5R9/OZB26VJBlz73M54Jx7cvZv/
5SlW7XIhYdvnQ7LVOfh597MLifflDkf11RoYqApbL/
Djnn3nXdy8YUjM23a1PRcs1cuvvTydPb2GSiK1wIaqqq2tra2Uhe//
vrrc+655+bJJ59MTc2nf6w2b948G264YY4+
+ujsueeeC3Xe1jucuyjHBL6m3r3tqEqPAABUWKsFXAqqaBh95uOPP860adOSJF26dEmLFi2+0vmEEZAIIwB
gwcNosfgwTosWLbL88stXegwAAKBQFbsrHQAAwOJCGAEAAMUTRgAAQPGEEQAAUDxhBAAAFE8YAQAAxRNGAA
BA8YQRAABQPGEEAAAUTxgBAADFE0YAAEDxhBEAAFA8YQQAABRPGAEAAMUTRgAAQPGEEQAAUDxhBAAAFE8YA
QAAxRNGAABA8YQRAABQPGEEAAAUTxgBAADFE0YAAEDxhBEAAFA8YQQAABRPGAEAAMUTRgAAQPGEEQAAUDxh
BAAAFE8YAQAAxRNGAABA8YQRAABQPGEEAAAUTxgBAADFE0YAAEDxhBEAAFA8YQQAABRPGAEAAMUTRgAAQPG
EEQAAUDxhBAAAFE8YAQAAxRNGAABA8YQRAABQPGEEAAAUTxgBAADFE0YAAEDxhBEAAFA8YQQAABRPGAEAAM
UTRgAAQPGEEQAAUDxhBAAAFE8YAQAAxRNGAABA8YQRAABQPGEEAAAUTxgBAADFE0YAAEDxhBEAAFA8YQQAA
BRPGAEAAMUTRgAAQPGEEQAAUDxhBAAAFE8YAQAAxRNGAABA8YQRAABQPGEEAAAUTxgBAADFq6qtra2t9BCL
2kefVHoCYHHwjf2vq/QIQIX94/
K9Kj0CUGGtllqw46wYAQAAxRNGAABA8YQRAABQPGEEAAAUTxgBAADFE0YAAEDxhBEAAFA8YQQAABRPGAEAA
MUTRgAAQPGEEQAAUDxhBAAAFE8YAQAAxRNGAABA8YQRAABQPGEEAAAUTxgBAADFE0YAAEDxhBEAAFA8YQQA
ABRPGAEAAMUTRgAAQPGEEQAAUDxhBAAAFE8YAQAAxRNGAABA8YQRAABQPGEEAAAUTxgBAADFE0YAAEDxhBE
AAFA8YQQAABRPGAEAAMUTRgAAQPGEEQAAUDxhBAAAFE8YAQAAxRNGAABA8YQRAABQPGEEAAAUTxgBAADFE0
YAAEDxhBEAAFA8YQQAABRPGAEAAMUTRgAAQPGEEQAAUDxhBAAAFE8YAQAAxRNGAABA8YQRAABQPGEEAAAUT
xgBAADFE0YAAEDxhBEAAFA8YQQAABRPGAEAAMVbakEOuvXWWxf4hLvssstCDwMAAFAJCxRGAwYMWKCTVVVV
paam5qvMAwAA0OQWKIzmzZvX2HMAAABUjM8YAQAAxVugFaN/NWvWrDz44IN5/fXXM3fu3Hr7Dj/
88EUyGAAAQFNpcBg9/
fTT2XHHHfPhhx9m1qxZ6dSpU6ZNm5all146Xbt2FUYAAMDXToPfSnfUUUdl5513zrvvvpvWrVvn0Ucfzd//
/vdsuOGGOeussxpjRgAAgEbV4DCaOHFijjnmmDRr1izNmzfPnDlzstJKK+XMM8/
MSSed1BgzAgAANKoGh1GLFi3SrNmnD+vatWtef/31JEn79u3zxhtvLNrpAAAAmkCDP2O0/
vrr54knnsg3v/nN9OvXLz/72c8ybdq0jBkzJr17926MGQEAABpVg1eMzjjjjCy//
PJJktNPPz0dO3bMwQcfnKlTp+ayyy5b5AMCAAA0tgavGG200UZ1/7tr16656667FulAAAAATc0XvAIAAMVr
8IrRKquskqqqqi/c/
8orr3ylgeCrum7sNRl91RWZNm1q1ui5Zk446eT0WWedSo8FNJFlWi2VEwb2yXc3+Ea6tKvOs39/
Lz8Z+1SefvWdSo8GNDF/E9AQDQ6jI488st7PH3/8cZ5+
+uncddddOe644xbVXLBQ7vrdnTnrzBH56SnD06fPurlmzOgcfOCPcsvtd6Vz586VHg9oAucN+VbW/
Eb7HHLZo5ny3uzssXmP3HjcVtn8pN9lynuzKz0e0ET8TUBDVdXW1tYuihNddNFF+dOf/pSrrrpqUZzuK/
nok0pPQKX8YK89snbvPjnppz9LksybNy/bfqdf9t5n3/zovw6o8HQ0tW/
sf12lR6CJtWrRPK+N+l72HfmH3PvM5Lrt9w/bNvdNmpwRNz1bwemohH9cvlelR6BC/
E3AZ1ot4FLQIvuM0Q477JAbb7xxUZ0OGuzjuXPz/
F+ey6abbV63rVmzZtl0080z6ZmnKzgZ0FSWal6VpZo3y0dz59XbPntuTTZdY9kKTQU0NX8TsDAWWRjdcMMN
6dSp06I6HTTYu++9m5qamvmWxzt37pxp06ZVaCqgKX3w0Sd5/
MVpOXbXtdOtQ6s0q6rKHpt1z8ard85y7VtVejygifibgIWxUF/
w+s83X6itrc2UKVMyderUXHzxxYt0uDfeeCOnnHJKrrzyyi88Zs6cOZkzZ069bbXNq1NdXb1IZwHg6+GQyx
7NyB99K38+b0A+qZmXSX9/
Nzc9+nrW7dGx0qMBsBhrcBjtuuuu9cKoWbNmWXbZZbPVVltlzTXXXKTDvfPOOxk9evSXhtGIESMyfPjwett
+cvIp+enPhi3SWVj8dezQMc2bN8/06dPrbZ8+fXq6dOlSoamApvba1A+yy/
+Mz9Itm6dt6xZ5a8ZHufzgzfP3qbMqPRrQRPxNwMJocBgNGzZskV381ltv/
dL9C3Lr7xNPPDFHH310vW21za0WlahFy5bptdbaeezRR/Lt72yd5NMPWj722CPZa+//
rPB0QFP7cG5NPpxbk/ZLt0j/Pt0y/PpnKj0S0ET8TcDCaHAYNW/
ePJMnT07Xrl3rbZ8+fXq6du2ampqaBT7XgAEDUlVVlS+7Md6XfWdSklRXz/
+2OXelK9e+g4bk5JOOz9pr907vPuvk12NGZ/
bs2Rmw28BKjwY0kf69u6WqKnlp8vtZZbllMuz76+XFyTMz9iHfswcl8TcBDdXgMPqiiJkzZ05atmzZoHMtv
/zyufjii7Prrrt+7v6JEydmww03bOiIFGz7HXbMu+
+8k4svHJlp06am55q9cvGll6ezZXMoRrvWLfLTPdbNCh1b571Zc3Pbn97I6Tc+m09qFsm3UwBfE/
4moKEWOIxGjhyZ5NMVnMsvvzzLLLNM3b6amppMmDChwZ8x2nDDDfPkk09+YRj9u9Uk+Dx7/+A/s/
cPLJNDqW554o3c8sQblR4DWAz4m4CGWOAwOvfcc5N8umI0atSoNG/evG5fy5Yt06NHj4waNapBFz/
uuOMya9YXfxh29dVXz+9///sGnRMAAKChqmobuCTTv3//3HTTTenYcfG97anPGAFJ8o39r6v0CECF/
ePyvSo9AlBhrRZwKajBnzGyggMAACxpmjX0Ad/73vfy85//
fL7tZ555ZvbYY49FMhQAAEBTanAYTZgwITvuuON823fYYYdMmDBhkQwFAADQlBocRh988MHn3pa7RYsWmTl
z5iIZCgAAoCk1OIz69OmT66+/fr7t1113XdZaa61FMhQAAEBTavDNF04+
+eQMHDgwL7/8cr797W8nSe6///6MHTs2N9xwwyIfEAAAoLE1OIx23nnnjBs3LmeccUZuuOGGtG7dOuuuu27
Gjx+fTp06NcaMAAAAjarB32P0r2bOnJlrr702V1xxRZ588snU1NQsqtkWmu8xAhLfYwT4HiNgwb/
HqMGfMfrMhAkTMmjQoKywwgo5+
+yz8+1vfzuPPvrowp4OAACgYhr0VropU6bk6quvzhVXXJGZM2dmzz33zJw5czJu3Dg3XgAAAL62FnjFa
Oedd07Pnj0zadKknHfeeXnzzTdzwQUXNOZsAAAATWKBV4x+97vf5fDDD8/
BBx+cb37zm405EwAAQJNa4BWjhx56KO+//3423HDDbLLJJrnwwgszbdq0xpwNAACgSSxwGG266ab55S9/
mcmTJ+fAAw/MddddlxVWWCHz5s3Lvffem/
fff78x5wQAAGg0X+l23S+88EKuuOKKjBkzJu+991622Wab3HrrrYtyvoXidt1A4nbdgNt1A01wu+4k6dmzZ
84888z84x//yLXXXvtVTgUAAFAxX/
kLXhdHVoyAxIoRYMUIaKIVIwAAgCWBMAIAAIonjAAAgOIJIwAAoHjCCAAAKJ4wAgAAiieMAACA4gkjAACge
MIIAAAonjACAACKJ4wAAIDiCSMAAKB4wggAACieMAIAAIonjAAAgOIJIwAAoHjCCAAAKJ4wAgAAiieMAACA
4gkjAACgeMIIAAAonjACAACKJ4wAAIDiCSMAAKB4wggAACieMAIAAIonjAAAgOIJIwAAoHjCCAAAKJ4wAgA
AiieMAACA4gkjAACgeMIIAAAonjACAACKJ4wAAIDiCSMAAKB4wggAACieMAIAAIonjAAAgOIJIwAAoHjCCA
AAKJ4wAgAAiieMAACA4gkjAACgeMIIAAAonjACAACKJ4wAAIDiCSMAAKB4wggAACieMAIAAIonjAAAgOIJI
wAAoHjCCAAAKF5VbW1tbaWHWNQ+
+qTSEwAAi4OOGx9a6RGACpv99IULdJwVIwAAoHjCCAAAKJ4wAgAAiieMAACA4gkjAACgeMIIAAAonjACAAC
KJ4wAAIDiCSMAAKB4wggAACieMAIAAIonjAAAgOIJIwAAoHjCCAAAKJ4wAgAAiieMAACA4gkjAACgeMIIAA
AonjACAACKJ4wAAIDiCSMAAKB4wggAACieMAIAAIonjAAAgOIJIwAAoHjCCAAAKJ4wAgAAiieMAACA4gkjA
ACgeMIIAAAonjACAACKJ4wAAIDiCSMAAKB4wggAACieMAIAAIonjAAAgOIJIwAAoHjCCAAAKJ4wAgAAiieM
AACA4gkjAACgeMIIAAAonjACAACKJ4wAAIDiCSMAAKB4wggAACieMAIAAIonjAAAgOIJIwAAoHjCCAAAKJ4
wAgAAiieMAACA4gkjAACgeMIIAAAonjACAACKJ4wAAIDiCSMAAKB4wggAACieMAIAAIonjAAAgOIJIwAAoH
jCCAAAKJ4wAgAAiieMAACA4gkjAACgeMIIAAAonjACAACKJ4wAAIDiCSMAAKB4wggAACieMGKJc93Ya7LDN
t/Oxuv3yQ/22iPPTppU6ZGAJuZ1AMqyxQar5YbzDswr95ye2U9fmJ23Wqfe/l2/vW5uu3ho/
vH7n2f20xdmnTVWrNCkLM6EEUuUu353Z846c0QOPGRorvvtzenZc80cfOCPMn369EqPBjQRrwNQnjatq/
Ps3/43R464/nP3L926ZR6e+HJ+OnJc0w7G14owYokyZvRVGbj7nhmw2/
ey2uqr56enDE+rVq0y7qYbKz0a0ES8DkB57vnjXzL84ttz6+8/
f3X42jueyIjL7sr4R19o4sn4OhFGLDE+njs3z//
luWy62eZ125o1a5ZNN908k555uoKTAU3F6wAAC0sYscR49713U1NTk86dO9fb3rlz50ybNq1CUwFNyesAAA
ur4mE0e/bsPPTQQ/nLX/4y376PPvoov/rVr7708XPmzMnMmTPr/ZszZ05jjQsAACyBKhpGf/
vb39KrV6/07ds3ffr0Sb9+/TJ58uS6/TNmzMiQIUO+9BwjRoxI+/bt6/37xc9HNPboLIY6duiY5s2bz/
cB6+nTp6dLly4VmgpoSl4HAFhYFQ2j448/Pr17987bb7+dF154IW3bts0WW2yR119/
fYHPceKJJ2bGjBn1/h13/
ImNODWLqxYtW6bXWmvnsUcfqds2b968PPbYI1ln3fUrOBnQVLwOALCwlqrkxR9+
+OHcd9996dKlS7p06ZLbbrsthxxySLbccsv8/ve/
T5s2bf7tOaqrq1NdXV1v20efNNbELO72HTQkJ590fNZeu3d691knvx4zOrNnz86A3QZWejSgiXgdgPK0ad0
yq620bN3PPVbsnHXWWDHvzvwwb0x5Nx3bLZ2VunXM8l3bJ0nW6LFckuSt6TPz1vT3KzIzi5+KhtHs2bOz1F
L/N0JVVVUuueSSHHrooenXr1/
Gjh1bwen4Otp+hx3z7jvv5OILR2batKnpuWavXHzp5ensLTRQDK8DUJ4N1uqeey4/
ou7nM4/9XpJkzK2P5oBTfp3v9uuTX566b93+MT//YZLkv0fdmdMvvbNph2WxVVVbW1tbqYt/
61vfymGHHZZ99913vn2HHnporrnmmsycOTM1NTUNOq8VIwAgSTpufGilRwAqbPbTFy7QcRX9jNFuu+2Wa6+
99nP3XXjhhdl7771TwW4DAAAKUdEVo8ZixQgASKwYAV+TFSMAAIDFgTACAACKJ4wAAIDiCSMAAKB4wggAAC
ieMAIAAIonjAAAgOIJIwAAoHjCCAAAKJ4wAgAAiieMAACA4gkjAACgeMIIAAAonjACAACKJ4wAAIDiCSMAA
KB4wggAACieMAIAAIonjAAAgOIJIwAAoHjCCAAAKJ4wAgAAiieMAACA4gkjAACgeMIIAAAonjACAACKJ4wA
AIDiCSMAAKB4wggAACieMAIAAIonjAAAgOIJIwAAoHjCCAAAKJ4wAgAAiieMAACA4gkjAACgeMIIAAAonjA
CAACKJ4wAAIDiCSMAAKB4wggAACieMAIAAIonjAAAgOIJIwAAoHjCCAAAKJ4wAgAAiieMAACA4gkjAACgeM
IIAAAonjACAACKJ4wAAIDiCSMAAKB4wggAACieMAIAAIonjAAAgOIJIwAAoHjCCAAAKJ4wAgAAiieMAACA4
gkjAACgeMIIAAAonjACAACKJ4wAAIDiCSMAAKB4wggAACieMAIAAIonjAAAgOIJIwAAoHjCCAAAKJ4wAgAA
ildVW1tbW+khYFGaM2dORowYkRNPPDHV1dWVHgeoEK8FgNcBGkIYscSZOXNm2rdvnxkzZqRdu3aVHgeoEK8
FgNcBGsJb6QAAgOIJIwAAoHjCCAAAKJ4wYolTXV2dU045xYcsoXBeCwCvAzSEmy8AAADFs2IEAAAUTxgBAA
DFE0YAAEDxhBEAAFA8YcQS56KLLkqPHj3SqlWrbLLJJnn88ccrPRLQhCZMmJCdd945K6ywQqqqqjJu3LhKj
wQ0sREjRmTjjTdO27Zt07Vr1wwYMCAvvPBCpcdiMSeMWKJcf/
31Ofroo3PKKafkqaeeyrrrrpvtttsub7/9dqVHA5rIrFmzsu666+aiiy6q9ChAhTz44IMZOnRoHn300dx77
735+OOPs+2222bWrFmVHo3FmNt1s0TZZJNNsvHGG+fCCy9MksybNy8rrbRSDjvssJxwwgkVng5oalVVVbn5
5pszYMCASo8CVNDUqVPTtWvXPPjgg+nbt2+lx2ExZcWIJcbcuXPz5JNPZuutt67b1qxZs2y99dZ55JFHKjg
ZAFBJM2bMSJJ06tSpwpOwOBNGLDGmTZuWmpqaLLfccvW2L7fccpkyZUqFpgIAKmnevHk58sgjs8UWW6R379
6VHofF2FKVHgAAABrL0KFD8+c//
zkPPfRQpUdhMSeMWGJ06dIlzZs3z1tvvVVv+1tvvZVu3bpVaCoAoFIOPfTQ3H777ZkwYUK+8Y1vVHocFnPe
SscSo2XLltlwww1z//33122bN29e7r///my22WYVnAwAaEq1tbU59NBDc/
PNN2f8+PFZZZVVKj0SXwNWjFiiHH300Rk0aFA22mijfOtb38p5552XWbNmZciQIZUeDWgiH3zwQV566aW6n
1999dVMnDgxnTp1ysorr1zByYCmMnTo0IwdOza33HJL2rZtW/dZ4/
bt26d169YVno7Fldt1s8S58MIL84tf/
CJTpkzJeuutl5EjR2aTTTap9FhAE3nggQfSv3//+bYPGjQoV199ddMPBDS5qqqqz91+1VVXZfDgwU07DF8b
wggAACiezxgBAADFE0YAAEDxhBEAAFA8YQQAABRPGAEAAMUTRgAAQPGEEQAAUDxhBAAAFE8YAfC1N3jw4Aw
YMKDu56222ipHHnlkk8/
xwAMPpKqqKu+9916TXxuAr0YYAdBoBg8enKqqqlRVVaVly5ZZffXVc+qpp+aTTz5p1OvedNNNOe200xboWD
EDQJIsVekBAFiybb/
99rnqqqsyZ86c3HnnnRk6dGhatGiRE088sd5xc+fOTcuWLRfJNTt16rRIzgNAOawYAdCoqqur061bt3Tv3j
0HH3xwtt5669x66611b387/
fTTs8IKK6Rnz55JkjfeeCN77rlnOnTokE6dOmXXXXfNa6+9Vne+mpqaHH300enQoUM6d+6cH//
4x6mtra13zX99K92cOXNy/PHHZ6WVVkp1dXVWX331XHHFFXnttdfSv3//
JEnHjh1TVVWVwYMHJ0nmzZuXESNGZJVVVknr1q2z7rrr5oYbbqh3nTvvvDNrrLFGWrdunf79+9ebE4CvF2E
EQJNq3bp15s6dmyS5//7788ILL+Tee+/N7bffno8//jjbbbdd2rZtmz/84Q/54x//
mGWWWSbbb7993WPOPvvsXH311bnyyivz0EMP5Z133snNN9/8pdfcb7/9cu2112bkyJF5/
vnnc+mll2aZZZbJSiutlBtvvDFJ8sILL2Ty5Mk5//zzkyQjRozIr371q4waNSrPPfdcjjrqqPznf/
5nHnzwwSSfBtzAgQOz8847Z+LEidl///1zwgknNNavDYBG5q10ADSJ2tra3H///
bn77rtz2GGHZerUqWnTpk0uv/zyurfQ/
frXv868efNy+eWXp6qqKkly1VVXpUOHDnnggQey7bbb5rzzzsuJJ56YgQMHJklGjRqVu++++wuv+7e//
S2/+c1vcu+992brrbdOkqy66qp1+z97213Xrl3ToUOHJJ+uMJ1xxhm57777stlmm9U95qGHHsqll16afv36
5ZJLLslqq62Ws88+O0nSs2fPPPvss/n5z3+
+CH9rADQVYQRAo7r99tuzzDLL5OOPP868efOyzz77ZNiwYRk6dGj69OlT73NFzzzzTF566aW0bdu23jk+
+uijvPzyy5kxY0YmT56cTTbZpG7fUkstlY022mi+t9N9ZuLEiWnevHn69eu3wDO/
9NJL+fDDD7PNNtvU2z537tysv/76SZLnn3++3hxJ6iIKgK8fYQRAo+rfv38uueSStGzZMiussEKWWur//
tPTpk2besd+8MEH2XDDDXPNNdfMd55ll112oa7funXrBj/
mgw8+SJLccccdWXHFFevtq66uXqg5AFi8CSMAGlWbNm2y+uqrL9CxG2ywQa6//vp07do17dq1+9xjll9+
+Tz22GPp27dvkuSTTz7Jk08+mQ022OBzj+/Tp0/mzZuXBx98sO6tdP/ssxWrmpqaum1rrbVWqqur8/
rrr3/hSlOvXr1y66231tv26KOP/vsnCcBiyc0XAFhs/
OAHP0iXLl2y66675g9/+ENeffXVPPDAAzn88MPzj3/8I0lyxBFH5H/+538ybty4/
PWvf80hhxzypd9B1KNHjwwaNCg//OEPM27cuLpz/uY3v0mSdO/
ePVVVVbn99tszderUfPDBB2nbtm2OPfbYHHXUURk9enRefvnlPPXUU7ngggsyevToJMlBBx2UF198Mccdd1
xeeOGFjB07NldffXVj/4oAaCTCCIDFxtJLL50JEyZk5ZVXzsCBA9OrV6/86Ec/
ykcffVS3gnTMMcdk3333zaBBg7LZZpulbdu22W233b70vJdcckl23333HHLIIVlzzTXzX//
1X5k1a1aSZMUVV8zw4cNzwgknZLnllsuhhx6aJDnttNNy8sknZ8SIEenVq1e233773HHHHVlllVWSJCuvvH
JuvPHGjBs3Luuuu25GjRqVM844oxF/OwA0pqraL/
q0KgAAQCGsGAEAAMUTRgAAQPGEEQAAUDxhBAAAFE8YAQAAxRNGAABA8YQRAABQPGEEAAAUTxgBAADFE0YAA
EDxhBEAAFC8/weitTAvfGT70AAAAABJRU5ErkJggg==\n"
},
"metadata": {}
},
{
"output_type": "stream",
"name": "stdout",
"text": [
"\n",
"Classification Report:\n",
" precision recall f1-score support\n",
"\n",
" Iris-setosa 1.00 1.00 1.00 10\n",
"Iris-versicolor 1.00 1.00 1.00 9\n",
" Iris-virginica 1.00 1.00 1.00 11\n",
"\n",
" accuracy 1.00 30\n",
" macro avg 1.00 1.00 1.00 30\n",
" weighted avg 1.00 1.00 1.00 30\n",
"\n",
"\n",
"Accuracy: 1.0\n"
]
},
{
"output_type": "display_data",
"data": {
"text/plain": [
"<Figure size 1000x600 with 1 Axes>"
],
"image/png":
"iVBORw0KGgoAAAANSUhEUgAAA04AAAIjCAYAAAA0vUuxAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIH
ZlcnNpb24zLjcuMSwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy/
bCgiHAAAACXBIWXMAAA9hAAAPYQGoP6dpAABmD0lEQVR4nO3dd3xUVf7/8fekTfqEQCqEEHpVqkgTFVxERF
kVpShNUFx2EVFUbICuxi6iK6isgIuoqFgQRekC0pSiCNKM1ISaHlLI3N8ffpmfYxImCZO5Ka/
n4zGPdc45997PzAkL79x7z7UYhmEIAAAAAFAiL7MLAAAAAIDKjuAEAAAAAC4QnAAAAADABYITAAAAALhAcA
IAAAAAFwhOAAAAAOACwQkAAAAAXCA4AQAAAIALBCcAAAAAcIHgBAAwjcVi0dSpU80uA3/
y1zmZO3euLBaLfv/9d7fs//
fff5fFYtHcuXPdsj8A8BSCEwD8xYEDB3T33XerYcOG8vf3V2hoqLp166ZXX31VZ8+eNbu8Mtu1a5emTp3qt
n/
4etKJEydksVh07733Fum79957ZbFYNGXKlCJ9w4YNk6+vr3JycjxRpttMnTpVFovF8QoMDFTLli312GOPKS
Mjw+zyymTBggWaPn262WUAgNv4mF0AAFQmS5Ys0cCBA2W1WjVs2DC1bt1a+fn5WrdunSZNmqRffvlFb731l
tlllsmuXbs0bdo0XXnllWrQoIHZ5ZRJZGSkmjRponXr1hXpW79+vXx8fLR+/
fpi+9q1a6fAwEBPlOl2M2fOVHBwsLKysvTtt9/q6aef1sqVK7V+/
XpZLBaP1nLHHXdo0KBBslqtZdpuwYIF2rlzpyZMmODUHh8fr7Nnz8rX19eNVQJAxSM4AcD/
SUpK0qBBgxQfH6+VK1cqJibG0Tdu3Djt379fS5YsuejjGIah3NxcBQQEFOnLzc2Vn5+fvLy4IOC87t27691
331VWVpaCg4MlSdnZ2dqxY4duvfVWffHFFyosLJS3t7ckKTk5Wb/
99ptuvPHGEveZnZ2toKAgj9RfHrfccovq1KkjSRo7dqxuvvlmLVq0SBs3blSXLl2K3SYnJ6dCgqK3t7fju3
UHi8Uif39/t+0PADyFv5kB4P88//zzysrK0n//
+1+n0HRe48aNnS4ZO3funJ566ik1atRIVqtVDRo00COPPKK8vDyn7Ro0aKDrr79e33zzjTp27KiAgAC9+ea
bWr16tSwWiz744AM99thjqlu3rgIDAx2XZG3atEnXXnutbDabAgMD1bNnz2LPrhw9elR33nmnYmNjZbValZ
CQoHvuuUf5+fmaO3euBg4cKEm66qqrHJeArV69usTv4aefftKIESMclypGR0dr1KhROn36tNO485eV7d+/
XyNGjFBYWJhsNptGjhxZ5BK5vLw83XfffYqIiFBISIhuuOEGHTly5MIT8n+6d+
+uwsJCbdy40dG2adMmnTt3Tg888ICysrK0fft2R9/576h79+5Ode7atUtDhgxRrVq1HH1lncN169bpsssuk
7+/vxo2bKh333232O+vZ8+eCggIUL169fTvf/9bc+bMuaj7hK6++mpJf4R7SbryyivVunVr/
fjjj7riiisUGBioRx55RNIf3/WUKVPUuHFjWa1WxcXF6cEHHyzymUo7JyXd4/
T111+rZ8+eCgkJUWhoqDp16qQFCxY46luyZIkOHjzo+Jk7f7azpHucVq5cqR49eigoKEhhYWG68cYbtXv3b
qcxZfmZW7Zsmbp3766wsDAFBwerWbNmju8IAMqDM04A8H8WL16shg0bqmvXrqUaP3r0aM2bN0+33HKL7r//
fm3atEmJiYnavXu3Pv30U6exe/bs0eDBg3X33XdrzJgxatasmaPvqaeekp+fnx544AHl5eXJz89PK1euVN+
+fdWhQwdNmTJFXl5emjNnjq6++mqtXbtWl112mSTp2LFjuuyyy5SWlqa77rpLzZs319GjR/
Xxxx8rJydHV1xxhcaPH68ZM2bokUceUYsWLSTJ8b/FWbZsmX777TeNHDlS0dHRjssTf/
nlF23cuLHIpWK33nqrEhISlJiYqK1bt2r27NmKjIzUc8895/RdzZ8/X0OGDFHXrl21cuVK9evXr1Tf8/
mQs27dOvXu3VvSH+GoadOmateunerVq6f169erQ4cOjr4/b3fewIED1aRJEz3zzDMyDKPMc7h//
37dcsstuvPOOzV8+HC98847GjFihDp06KBWrVpJ+iPEng+okydPVlBQkGbPnl3my9z+6sCBA5Kk2rVrO9pO
nz6tvn37atCgQbr99tsVFRUlu92uG264QevWrdNdd92lFi1a6Oeff9Yrr7yivXv36rPPPnNsfzFzMnfuXI0
aNUqtWrXS5MmTFRYWpm3btmnp0qUaMmSIHn30UaWnp+vIkSN65ZVXJMlxtrA4y5cvV9+
+fdWwYUNNnTpVZ8+e1WuvvaZu3bpp69atRS4xdfUz98svv+j666/
XJZdcoieffFJWq1X79+8v9hcPAFBqBgDASE9PNyQZN954Y6nGb9+
+3ZBkjB492qn9gQceMCQZK1eudLTFx8cbkoylS5c6jV21apUhyWjYsKGRk5PjaLfb7UaTJk2MPn36GHa73d
Gek5NjJCQkGNdcc42jbdiwYYaXl5exZcuWIjWe3/ajjz4yJBmrVq0q1Wf7cy3nvf/+
+4Yk47vvvnO0TZkyxZBkjBo1ymns3//+d6N27dqO9+e/
q3/84x9O44YMGWJIMqZMmeKypsjISKNXr16O93369DFGjhxpGIZh3HrrrcbAgQMdfR07djSaNGlSpM7Bgwc
77bM8c/jnz3/ixAnDarUa999/v6PtX//
6l2GxWIxt27Y52k6fPm2Eh4cbkoykpKQLfs7zte7Zs8c4efKkkZSUZLz55puG1Wo1oqKijOzsbMMwDKNnz5
6GJGPWrFlO2//vf/8zvLy8jLVr1zq1z5o1y5BkrF+/3umzl2ZO5syZ41R7WlqaERISYnTu3Nk4e/as0/
Z//nnt16+fER8fX+QzJiUlGZKMOXPmONratm1rREZGGqdPn3a07dixw/
Dy8jKGDRtW5Ptx9TP3yiuvGJKMkydPFjk+AJQXl+oBgOS4PC4kJKRU47/66itJ0sSJE53a77//
fkkqci9UQkKC+vTpU+y+hg8f7nS/0/bt27Vv3z4NGTJEp0+f1qlTp3Tq1CllZ2erV69e+u6772S322W32/
XZZ5+pf//+6tixY5H9lncRgT/Xkpubq1OnTunyyy+XJG3durXI+LFjxzq979Gjh06fPu34Ts9/
V+PHj3ca99dFAy6kW7du2rRpkwoLC2W327Vx40bHmcFu3bo5ziTk5ORo+/
btRc42FVdnWeewZcuW6tGjh+N9RESEmjVrpt9++83RtnTpUnXp0kVt27Z1tIWHh2vo0KGl/
qyS1KxZM0VERCghIUF33323GjdurCVLljjdw2S1WjVy5Ein7T766CO1aNFCzZs3d/
zcnDp1ynGp36pVq5w+e3nmZNmyZcrMzNTDDz9c5F6l8vzMJScna/
v27RoxYoTCw8Md7ZdccomuueYaR61/5upnLiwsTJL0+eefy263l7kmACgOl+oBgKTQ0FBJUmZmZqnGHzx4U
F5eXmrcuLFTe3R0tMLCwnTw4EGn9oSEhBL39de+ffv2SfojUJUkPT1d+fn5ysjIUOvWrUtVc2mdOXNG06ZN
0wcffKATJ04UOe5f1a9f3+l9rVq1JEmpqakKDQ11fFeNGjVyGvfnyxVd6d69uz799FNt375dvr6+Sk9PV7d
u3SRJXbt21bFjx/T7778rKSlJ586dKzY4/fV7Lusc/vVznv+sqampTvssbvGGvx7DlU8+
+UShoaHy9fVVvXr1inx3klS3bl35+fk5te3bt0+7d+9WREREsfs9P58XMyfnLxt018/
d+e+5uGO3aNFC33zzTZHFPFz9zN12222aPXu2Ro8erYcffli9evXSTTfdpFtuuYWFVwCUG8EJAPRHcIqNjd
XOnTvLtF1pf8Ne3Ap6JfWd/w35Cy+84HTm4s+Cg4N15syZ0hVZRrfeequ+//
57TZo0SW3btlVwcLDsdruuvfbaYn97X9KKa8b/3UfkDn++z8nPz0/
h4eFq3ry5JKlt27YKDAzUunXrHIsnFBecSpqD0s6hJz7neVdccYVjVb2SFPd57Ha72rRpo5dffrnYbeLi4t
xSn9lczUVAQIC+++47rVq1SkuWLNHSpUv14Ycf6uqrr9a3337r1lUCAdQcBCcA+D/
XX3+93nrrLW3YsKHEJZ/Pi4+Pl91u1759+5wWWjh+/
LjS0tIUHx9f7jrOnwUIDQ11LIZQnIiICIWGhroMe2W5fCo1NVUrVqzQtGnT9MQTTzjaz58FK4/
z39WBAweczirs2bOn1Pto3769IxxZrVZ16dLF8bl8fHzUqVMnrV+/
XklJSYqMjFTTpk1LXZc75zA+Pl779+8v0l5cW0Vo1KiRduzYoV69el1w3i9mTs7/fO7cufOCZ9JK+3N3/
nsu7ti//vqr6tSpU66l4728vNSrVy/16tVLL7/8sp555hk9+uijWrVq1QX/XAFASThfDQD/
58EHH1RQUJBGjx6t48ePF+k/
cOCAXn31VUnSddddJ0maPn2605jzv+kv7epkxenQoYMaNWqkF198UVlZWUX6T548KemPfxgOGDBAixcv1g8
//FBk3Pnfvp//R2daWprLY5//Tfxfz6L89XOWRd+
+fSVJM2bMKPc+fXx81LlzZ61fv17r168vsvJh165d9d1332njxo2OS/
hcqYg57NOnjzZs2OC0PPqZM2f03nvvlXlf5XHrrbfq6NGjevvtt4v0nT17VtnZ2ZIubk7+9re/
KSQkRImJicrNzXXq+/
PPTVBQULGXdv5VTEyM2rZtq3nz5jn9jO7cuVPffvutY57KorizsefP3v51WXYAKC3OOAHA/
2nUqJEWLFig2267TS1atNCwYcPUunVr5efn6/
vvv9dHH32kESNGSJIuvfRSDR8+XG+99ZbS0tLUs2dPbd68WfPmzdOAAQN01VVXlbsOLy8vzZ49W3379lWrV
q00cuRI1a1bV0ePHtWqVasUGhqqxYsXS5KeeeYZffvtt+rZs6dj+enk5GR99NFHWrduncLCwtS2bVt5e3vr
ueeeU3p6uqxWq66++mpFRkYWOXZoaKiuuOIKPf/
88yooKFDdunX17bffOi6BK4+2bdtq8ODBeuONN5Senq6uXbtqxYoVZT4L0717d8fiBn8NR127dlViYqJjXG
lUxBw++OCDmj9/vq655hr961//
cixHXr9+fZ05c6bcC3aU1h133KGFCxdq7NixWrVqlbp166bCwkL9+uuvWrhwoeNZYhczJ6GhoXrllVc0evR
oderUyfFsrB07dignJ0fz5s2T9McvAD788ENNnDhRnTp1UnBwsPr371/
sPl944QX17dtXXbp00Z133ulYjtxms2nq1Kll/h6efPJJfffdd+rXr5/
i4+N14sQJvfHGG6pXr16pfz4AoAgzl/
QDgMpo7969xpgxY4wGDRoYfn5+RkhIiNGtWzfjtddeM3Jzcx3jCgoKjGnTphkJCQmGr6+vERcXZ0yePNlpj
GH8sZR1v379ihzn/
HLkH330UbF1bNu2zbjpppuM2rVrG1ar1YiPjzduvfVWY8WKFU7jDh48aAwbNsyIiIgwrFar0bBhQ2PcuHFG
Xl6eY8zbb79tNGzY0PD29na5NPmRI0eMv//970ZYWJhhs9mMgQMHGseOHSuyTPX5paH/
uuTzX5evNgzDOHv2rDF+/Hijdu3aRlBQkNG/f3/
j8OHDpV6O3DAM45tvvjEkGT4+Po5luc87ffq0YbFYDEnGpk2bnPpKqtMwLn4Oe/
bsafTs2dOpbdu2bUaPHj0Mq9Vq1KtXz0hMTDRmzJhhSDJSUlIu+BkvVOtfj9uqVati+/
Lz843nnnvOaNWqlWG1Wo1atWoZHTp0MKZNm2akp6c7xpV2ToqbT8MwjC++
+MLo2rWrERAQYISGhhqXXXaZ8f777zv6s7KyjCFDhhhhYWGGJMfS5MUtR24YhrF8+XKjW7dujv3179/
f2LVrV6m+n7/WuGLFCuPGG280YmNjDT8/
PyM2NtYYPHiwsXfv3gt+rwBwIRbDqIC7WgEAgMOECRP05ptvKisri4UJAKCK4h4nAADc6OzZs07vT58+rf/
973/
q3r07oQkAqjDucQIAwI26dOmiK6+8Ui1atNDx48f13//+VxkZGXr88cfNLg0AcBEITgAAuNF1112njz/
+WG+99ZYsFovat2+v//
73v7riiivMLg0AcBG4xwkAAAAAXOAeJwAAAABwgeAEAAAAAC7UuHuc7Ha7jh07ppCQkAp/
ECEAAACAysswDGVmZio2NlZeXhc+p1TjgtOxY8cUFxdndhkAAAAAKonDhw+rXr16FxxT44JTSEiIpD+
+nNDQUJOrAQAAAGCWjIwMxcXFOTLChdS44HT+8rzQ0FCCEwAAAIBS3cLD4hAAAAAA4IKpwamwsFCPP/
64EhISFBAQoEaNGumpp56Sq0dLrV69Wu3bt5fValXjxo01d+5czxQMAAAAoEYy9VK95557TjNnztS8efPUq
lUr/fDDDxo5cqRsNpvGjx9f7DZJSUnq16+fxo4dq/
fee08rVqzQ6NGjFRMToz59+nj4EwAAAACoCSyGq9M7Fej6669XVFSU/vvf/zrabr75ZgUEBGj+/
PnFbvPQQw9pyZIl2rlzp6Nt0KBBSktL09KlS10eMyMjQzabTenp6dzjBAAAgCrFMAydO3dOhYWFZpdSZfj6
+srb27vYvrJkA1PPOHXt2lVvvfWW9u7dq6ZNm2rHjh1at26dXn755RK32bBhg3r37u3U1qdPH02YMKHY8Xl
5ecrLy3O8z8jIcEvtAAAAgCfl5+crOTlZOTk5ZpdSpVgsFtWrV0/BwcEXtR9Tg9PDDz+sjIwMNW/
eXN7e3iosLNTTTz+toUOHlrhNSkqKoqKinNqioqKUkZGhs2fPKiAgwKkvMTFR06ZNq5D6AQAAAE+w2+1KSk
qSt7e3YmNj5efnV6qV4Go6wzB08uRJHTlyRE2aNCnxzFNpmBqcFi5cqPfee08LFixQq1attH37dk2YMEGxs
bEaPny4W44xefJkTZw40fH+/FrtAAAAQFWRn58vu92uuLg4BQYGml1OlRIREaHff/
9dBQUFVTc4TZo0SQ8//LAGDRokSWrTpo0OHjyoxMTEEoNTdHS0jh8/7tR2/
PhxhYaGFjnbJElWq1VWq9X9xQMAAAAe5uXF04TKyl1n5kz95nNycopMvre3t+x2e4nbdOnSRStWrHBqW7Zs
mbp06VIhNQIAAACAqcGpf//+evrpp7VkyRL9/vvv+vTTT/Xyyy/r73//
u2PM5MmTNWzYMMf7sWPH6rffftODDz6oX3/9VW+88YYWLlyo++67z4yPAAAAAKAGMPVSvddee02PP/64/
vGPf+jEiROKjY3V3XffrSeeeMIxJjk5WYcOHXK8T0hI0JIlS3Tffffp1VdfVb169TR79mye4QQAAACgwpj6
HCcz8BwnAAAAVDW5ublKSkpSQkKC/
P39y72flJQUxxVfR48eVWRkpNq2basJEyaoV69ebqz44s2dO1cTJkxQWlraRe3nQt9dlXmOEwAAAADP+P33
39WtWzeFhYXphRdeUJs2bVRQUKBvvvlG48aN06+//
lrmfebn58vPz69Ie0FBgXx9fd1RdqXBshwAAACAGxTaC3U4/bD2n9mvw+mHVWgvNLskJ//
4xz9ksVi0efNm3XzzzWratKlatWqliRMnauPGjZKkQ4cO6cYbb1RwcLBCQ0N16623Oq1oPXXqVLVt21azZ8
92OoNjsVg0c+ZM3XDDDQoKCtLTTz8tSfr888/Vvn17+fv7q2HDhpo2bZrOnTvn2F9aWpruvvtuRUVFyd/
fX61bt9aXX36p1atXa+TIkUpPT5fFYpHFYtHUqVM992UVgzNOAAAAwEU6kX1C7//8vv699t86lXNKtfxr6c
FuD2pUu1GKDIo0uzydOXNGS5cu1dNPP62goKAi/WFhYbLb7Y7QtGbNGp07d07jxo3TbbfdptWrVzvG7t+/
X5988okWLVrk9FykqVOn6tlnn9X06dPl4+OjtWvXatiwYZoxY4Z69OihAwcO6K677pIkTZkyRXa7XX379lV
mZqbmz5+vRo0aadeuXfL29lbXrl01ffp0PfHEE9qzZ48kKTg4uGK/
JBcITgAAAMBFOFtwVtM3TlfiukRHW2puqiavmKwjGUeU2CtRIdYQEyv8I+wYhqHmzZuXOGbFihX6+eeflZS
UpLi4OEnSu+++q1atWmnLli3q1KmTpD8uz3v33XcVERHhtP2QIUM0cuRIx/
tRo0bp4YcfdjyftWHDhnrqqaf04IMPasqUKVq+fLk2b96s3bt3q2nTpo4x59lsNlksFkVHR7vnS7hIXKoHA
AAAXITkrGS9tOGlYvtm/
TBLJ7JPeLiiokqzHtzu3bsVFxfnCE2S1LJlS4WFhWn37t2Otvj4+CKhSZI6duzo9H7Hjh168sknFRwc7HiN
GTNGycnJysnJ0fbt21WvXj1HaKrsOOMEAAAAXITTOaeVX5hfbF+hUajj2cfVKLyRh6ty1qRJE1kslnItAPF
XxV3qV1x7VlaWpk2bpptuuqnIWH9/fwUEBFx0LZ7EGScAAADgIgT4XjgABPkWHzQ8KTw8XH369NF//
vMfZWdnF+lPS0tTixYtdPjwYR0+fNjRvmvXLqWlpally5ZlPmb79u21Z88eNW7cuMjLy8tLl1xyiY4cOaK9
e/cWu72fn58KCyvPAhsEJwAAAOAiRAZGqnVk62L7GtZqWCkWh5Ck//
znPyosLNRll12mTz75RPv27dPu3bs1Y8YMdenSRb1791abNm00dOhQbd26VZs3b9awYcPUs2fPIpfhlcYTT
zyhd999V9OmTdMvv/
yi3bt364MPPtBjjz0mSerZs6euuOIK3XzzzVq2bJmSkpL09ddfa+nSpZKkBg0aKCsrSytWrNCpU6eUk5Pj1
u+jrAhOAAAAwEWIDI7UwlsWKjrYeRGDOoF19NltnykmJMakypw1bNhQW7du1VVXXaX7779frVu31jXXXKMV
K1Zo5syZslgs+vzzz1WrVi1dccUV6t27txo2bKgPP/ywXMfr06ePvvzyS3377bfq1KmTLr/
8cr3yyiuKj493jPnkk0/UqVMnDR48WC1bttSDDz7oOMvUtWtXjR07VrfddpsiIiL0/
PPPu+V7KC+LUZo7xaqRsjwdGAAAACitw+mHtfPETu04vkOtIlrp0uhLVd9W3y37zs3NVVJSktOzk1A6F/
ruypINWBwCAAAAcIM4W5zibHHq26Sv2aWgAnCpHgAAAAC4QHACAAAAABcITgAAAADgAsEJAAAAAFwgOAEAA
ACACwQnAAAAAHCB4AQAAAAALhCcAAAAAMAFghMAAAAAuEBwAgAAAOB2Fovlgq+pU6eaXWKZ+JhdAAAAAADP
KLQXau2htUrOTFZMSIx61O8hby/vCjlWcnKy478//
PBDPfHEE9qzZ4+jLTg42PHfhmGosLBQPj6VN55wxgkAAACoARbtXqQGrzbQVfOu0pBFQ3TVvKvU4NUGWrR7
UYUcLzo62vGy2WyyWCyO97/+
+qtCQkL09ddfq0OHDrJarVq3bp1GjBihAQMGOO1nwoQJuvLKKx3v7Xa7EhMTlZCQoICAAF166aX6+OOPK+Q
z/FnljXQAAAAA3GLR7kW6ZeEtMmQ4tR/
NOKpbFt6ij2/9WDe1uMnjdT388MN68cUX1bBhQ9WqVatU2yQmJmr+/PmaNWuWmjRpou++
+0633367IiIi1LNnzwqrleAEAAAAVGOF9kLdu/
TeIqFJkgwZssiiCUsn6MZmN1bYZXslefLJJ3XNNdeUenxeX
p6eeeYZLV+
+XF26dJEkNWzYUOvWrdObb75JcAIAAABQPmsPrdWRjCMl9hsydDjjsNYeWqsrG1zpucIkdezYsUzj9+/
fr5ycnCJhKz8/X+3atXNnaUUQnAAAAIBqLDkz2fWgMoxzp6CgIKf3Xl5eMgznM2MFBQWO/
87KypIkLVmyRHXr1nUaZ7VaK6jKPxCcAAAAcFFSz6aqwF6gWv615Ovta3Y5+IuYkBi3jqtIERER2rlzp1Pb
9u3b5ev7x89Vy5YtZbVadejQoQq9LK84BCcAAACUS0pWitYcXKOXN7yszLxM/b353zW6/
Wgl1EowuzT8SY/
6PVQvtJ6OZhwt9j4niyyqF1pPPer3MKE6Z1dffbVeeOEFvfvuu+rSpYvmz5+vnTt3Oi7DCwkJ0QMPPKD77r
tPdrtd3bt3V3p6utavX6/
Q0FANHz68wmpjOXIAAACU2YmsE7rny3s06ONB2nx0s3af2q1n1j2jTm930v4z+80uD3/
i7eWtV699VdIfIenPzr+ffu10jy8MUZw+ffro8ccf14MPPqhOnTopMzNTw4YNcxrz1FNP6fHHH1diYqJatG
iha6+9VkuWLFFCQsUGdovx14sIq7mMjAzZbDalp6crNDTU7HIAAACqpO8Pf69u73Qrtm/
YpcM0s99MBfoGeriq6is3N1dJSUlKSEiQv79/
ufaxaPci3bv0XqeFIuJC4zT92ummLEXuKRf67sqSDbhUDwAAAGU2/6f5JfZ9uPNDPX310wSnSuamFjfpxmY
3au2htUrOTFZMSIx61O9RKc40VQUEJwAAAJSZt6Xkf2zzD/
HKy9vL2+NLjlcX3OMEAACAMrvj0jtK7Lu9ze2qE1jHg9UAFY/
gBAAAgDJrWKuh7rikaHiKCY7RQ90fkr9P+e7DASorLtUDAABAmdUJrKMXr3lRQ9oM0fSN05Wel66BLQfq5h
Y3Kz4s3uzyqq0atq6bW7jrOyM4AQAAoFwigyN1beNr1b1+d50rPKdQ/
1B5WbigqSKcfwBsTk6OAgICTK6masnPz5ckeXtf3L13BCcAAABclGC/
YLNLqPa8vb0VFhamEydOSJICAwNlsVhcbAW73a6TJ08qMDBQPj4XF30ITgAAAEAVEB0dLUmO8ITS8fLyUv3
69S86aBKcAAAAgCrAYrEoJiZGkZGRKigoMLucKsPPz09eXhd/CSnBCQAAAKhCvL29L/
p+HZQdd+8BAAAAgAsEJwAAAABwgeAEAAAAAC4QnAAAAADABYITAAAAALhAcAIAAAAAFwhOAAAAAOACwQkAA
AAAXCA4AQAAAIALBCcAAAAAcIHgBAAAAAAuEJwAAAAAwAWCEwAAAAC4YGpwatCggSwWS5HXuHHjih0/
d+7cImP9/
f09XDUAAACAmsbHzINv2bJFhYWFjvc7d+7UNddco4EDB5a4TWhoqPbs2eN4b7FYKrRGAAAAADA1OEVERDi9
f/bZZ9WoUSP17NmzxG0sFouio6MrujQAAAAAcKg09zjl5+dr/
vz5GjVq1AXPImVlZSk+Pl5xcXG68cYb9csvv1xwv3l5ecrIyHB6AQAAAEBZVJrg9NlnnyktLU0jRowocUyz
Zs30zjvv6PPPP9f8+fNlt9vVtWtXHTlypMRtEhMTZbPZHK+4uLgKqB4AAABAdWYxDMMwuwhJ6tOnj/z8/
LR48eJSb1NQUKAWLVpo8ODBeuqpp4odk5eXp7y8PMf7jIwMxcXFKT09XaGhoRddNwAAAICqKSMjQzabrVTZ
wNR7nM47ePCgli9frkWLFpVpO19fX7Vr10779+8vcYzVapXVar3YEgEAAADUYJXiUr05c+YoMjJS/
fr1K9N2hYWF+vnnnxUTE1NBlQEAAABAJQhOdrtdc+bM0fDhw+Xj43wCbNiwYZo8ebLj/ZNPPqlvv/1Wv/
32m7Zu3arbb79dBw8e1OjRoz1dNgAAAIAaxPRL9ZYvX65Dhw5p1KhRRfoOHTokL6//
n+1SU1M1ZswYpaSkqFatWurQoYO+//
57tWzZ0pMlAwAAAKhhKs3iEJ5SlhvAAAAAAFRfZckGpl+qBwAAAACVHcEJAAAAAFwgOAEAAACACwQnAAAAA
HCB4AQAAAAALhCcAAAAAMAFghMAAAAAuEBwAgAAAAAXCE4AAAAA4ALBCQAAAABcIDgBAAAAgAsEJwAAAABw
geAEAAAAAC4QnAAAAADABYITAAAAALhAcAIAAAAAFwhOAAAAAOACwQkAAAAAXCA4AQAAAIALBCcAAAAAcIH
gBAAAAAAuEJwAAAAAwAWCEwAAAAC4QHACAAAAABcITgAAAADgAsEJAAAAAFwgOAEAAACACwQnAAAAAHCB4A
QAAAAALhCcAAAAAMAFghMAAAAAuEBwAgAAAAAXCE4AAAAA4ALBCQAAAABcIDgBAAAAgAsEJwAAAABwgeAEA
AAAAC4QnAAAAADABYITAAAAALhAcAIAAAAAFwhOAAAAAOACwQkAAAAAXCA4AQAAAIALBCcAAAAAcIHgBAAA
AAAuEJwAAAAAwAWCEwAAAAC4QHACAAAAABcITgAAAADgAsEJAAAAAFwgOAEAAACACwQnAAAAAHCB4AQAAAA
ALhCcAAAAAMAFghMAAAAAuGBqcGrQoIEsFkuR17hx40rc5qOPPlLz5s3l7+
+vNm3a6KuvvvJgxQAAAABqIlOD05YtW5ScnOx4LVu2TJI0cODAYsd///
33Gjx4sO68805t27ZNAwYM0IABA7Rz505Plg0AAACghrEYhmGYXcR5EyZM0Jdffql9+/bJYrEU6b/
tttuUnZ2tL7/80tF2+eWXq23btpo1a1apjpGRkSGbzab09HSFhoa6rXYAAAAAVUtZskGluccpPz9f8+fP16
hRo4oNTZK0YcMG9e7d26mtT58+2rBhQ4n7zcvLU0ZGhtMLAAAAAMqi0gSnzz77TGlpaRoxYkSJY1JSUhQVF
eXUFhUVpZSUlBK3SUxMlM1mc7zi4uLcVTIAAACAGqLSBKf//ve/
6tu3r2JjY92638mTJys9Pd3xOnz4sFv3DwAAAKD68zG7AEk6ePCgli9frkWLFl1wXHR0tI4fP+7Udvz4cUV
HR5e4jdVqldVqdUudAAAAAGqmSnHGac6cOYqMjFS/
fv0uOK5Lly5asWKFU9uyZcvUpUuXiiwPAAAAQA1nenCy2+2aM2eOhg8fLh8f5xNgw4YN0+TJkx3v7733Xi1
dulQvvfSSfv31V02dOlU//PCD/vnPf3q6bAAAAAA1iOnBafny5Tp06JBGjRpVpO/QoUNKTk52vO/
atasWLFigt956S5deeqk+/
vhjffbZZ2rdurUnSwYAAABQw1Sq5zh5As9xAgAAACBV0ec4AQAAAEBlVSlW1QMAAABQ+aTnpivvXJ5C/
UPl7+NvdjmmIjgBAAAAcHI657R+TP5Rz657VslZybqi/
hWa2GWiGtZqKF9vX7PLMwXBCQAAAIBDem66Xt74sp5Z+4yj7ddTv2rejnlaO3KtOtXtZGJ15uEeJwAAAAAO
KVkpTqHpvLzCPN395d06mX3ShKrMR3ACAAAA4LDxyMYS+7albFNqbqoHq6k8CE4AAAAAHLwsF44IFlk8VEn
lQnACAAAA4HB5vctLDEed63ZWeEC4hyuqHAhOAAAAAByig6P1bO9ni7QH+QbpzevfVO3A2iZUZT5W1QMAAA
DgEGIN0Zj2Y9Sjfg+9uOFFHc04qqsTrtad7e5Ug7AGZpdnGothGIbZRXhSRkaGbDab0tPTFRoaanY5AAAAQ
KWVU5CjvHN5CvELkY939TvnUpZsUP0+PQAAAAC3CPQNVKBvoNllVArc4wQAAAAALhCcAAAAAMAFghMAoFoz
DEO5BbkqtBeaXQoAVGvV/f9ruccJAFAtFdoL9Xva7/rwlw/13cHv1Kx2M93V4S4lhCUo0I/
r9QHAXX5P+11f7PlCX+//WnGhcfpHx3+oYa2GCvWvXguxsaoeAKBa2pa8TT3m9FB2QbajzcvipYW3LFT/
Zv3l5+1nYnUAUD38eupXdX+nu06fPe3U/ka/N3THJXco2C/
YpMpKpyzZgEv1AADVzvGs47r909udQpMk2Q27hn02TMcyj5lUGQBUH6lnU/Wvr/5VJDRJ0j+/
+qdSslJMqKriEJwAANXO6bOntevkrmL7cgpydODMAQ9XBADVz5mzZ7Q8aXmxfXbDru8Pf+/
hiioWwQkAUO24ujk5rzDPQ5UAQPVVaFz4/2vPFpz1UCWeQXACAFQ74QHhig2JLbbP2+KtZrWbebgiAKh+wv
zD1CayTYn93et392A1FY/gBACodmJDYvXm9W/
KIkuRvkd7PKqooCgTqgKA6iUyKFKzrp8lH6+iC3Xf2e5OxYTEmFBVxSE4AQCqHYvFoisbXKlNozfp2kbXKj
IoUp1iO+mLQV/oX53/
pWBr5V7lCQCqivYx7bX1rq26ucXNigqK0iVRl2jBTQv0TK9nFB4QbnZ5bsVy5ACAai09N11Z+Vny9/
FX7cDaZpcDANVSZl6mMvMz5evlq4igCLPLKbWyZAMegAsAqNZs/jbZ/
G1mlwEA1VqINUQh1hCzy6hQXKoHAAAAAC4QnAAAAADABYITAAAAALjAPU4AAAAekl+YryMZR7TswDLtO7NP
Per3UIeYDqpnq2d2aUCFO5NzRoczDmvR7kU6Zz+nAS0GqIGtQZVZTIJV9QAAADzgXOE5rT20Vte+d63yC/
Md7fVC62n18NVqFN7IxOqAinUq55Se/u5pTd803al9YMuBeq3va4oKNuf5emXJBlyqBwAA4AFHM4/
qhg9ucApNknQk44ju+vIupZ5NNakyoOL9cuKXIqFJkj7a9ZFWH1zt8XrKg+AEAADgAXtP71VWflaxfSuTVu
pUzikPVwR4xtmCs5q+cXqJ/S9+/
6JO55z2XEHlRHACAADwgNTcC59RyivM81AlgGcV2At0+mzJwSj1bKoK7AUerKh8yr04xJYtW7Rq1SqdOHFC
drvdqe/ll1++6MIAAACqkzaRbUrsiwqKUph/mOeKATwoxC9Ef2/+d609tLbY/uuaXKda/
rU8XFXZlSs4PfPMM3rsscfUrFkzRUVFyWKxOPr+/N8AAAD4Q1RwlAa3Hqz3d75fpO/
Fv72o2JBYE6oCKp7FYtHfW/xdz61/
Tsezjzv1hfiFaHzn8bL6WE2qrvTKtapeVFSUnnvuOY0YMaICSqpYrKoHAADMkpKVonnb5+nFDS/
qVM4pNa/TXC9c84K61+/
OGSdUewfOHNDjqx7XR7s+kt2wq1+Tfnq297NqXqe5vCzm3EFUlmxQruAUExOj7777Tk2aNCl3kWYhOAEAAD
MV2guVkpWiAnuBAnwCTFuGGTBDdn72H/c7GVJYQJhCreb+e7zClyO/77779J///
KdcxQEAANRk3l7eqhtaVw3CGhCaUOME+QWpvq2+6ofVNz00lVW57nF64IEH1K9fPzVq1EgtW7aUr6+vU/
+iRYvcUhwAAAAAVAblCk7jx4/XqlWrdNVVV6l27dosCAEAAACgWitXcJo3b54+
+eQT9evXz931AAAAAEClU657nMLDw9WoUSN31wIAAAAAlVK5gtPUqVM1ZcoU5eTkuLseAAAAAKh0ynWp3ow
ZM3TgwAFFRUWpQYMGRRaH2Lp1q1uKAwAAAIDKoFzBacCAAW4uAwAAAAAqr3I9ALcq4wG4AAAAAKQKfABuam
qqXnvtNWVkZBTpS09PL7EPAAAAAKqyMgWn119/
Xd99912xacxms2nt2rV67bXX3FYcAAAAAFQGZQpOn3zyicaOHVti/913362PP/
74oosCAAAAgMqkTMHpwIEDatKkSYn9TZo00YEDBy66KAAAAACoTMoUnLy9vXXs2LES+48dOyYvr3I9GgoAA
AAAKq0ypZx27drps88+K7H/008/Vbt27S62JgAAAACoVMr0HKd//
vOfGjRokOrVq6d77rlH3t7ekqTCwkK98cYbeuWVV7RgwYIKKRQAAAAAzFLm5zg9+uijSkxMVEhIiBo2bChJ
+u2335SVlaVJkybp2WefrZBC3YXnOAEAAACQypYNyvUA3M2bN+u9997T/
v37ZRiGmjZtqiFDhuiyyy4rd9GeQnACAACllZ6brhPZJ3Q8+7hC/
UIVFRylqOAojxw7Kz9Lx7OOKzkrWUG+QYoKjlJsSKxHjg3UFGXJBmW6VO+8yy67zG0h6ejRo3rooYf09ddf
KycnR40bN9acOXPUsWPHYsevXr1aV111VZH25ORkRUdHu6UmAACA5MxkTVo2SQt+XiBDf/
yeuXmd5vr8ts/
VtE7TCj32iawTemrtU3pjyxuyG3ZJUoOwBvp80OdqE9lGFoulQo8PoKhyBSdJSktL0+bNm3XixAnZ7Xanvm
HDhpVqH6mpqerWrZuuuuoqff3114qIiNC+fftUq1Ytl9vu2bPHKRVGRkaW7QMAAACUIPdcrp5f/7ze+/
k9p/ZfT/
2qa+Zfo+9Hfa+6oXUr5NiF9kK9+9O7en3z607tv6f9rqvmXaWtd21VfFh8hRwbQMnKFZwWL16soUOHKisrS
6GhoU6/9bBYLKUOTs8995zi4uI0Z84cR1tCQkKpto2MjFRYWJjLcXl5ecrLy3O8z8jIKNX+AQBAzZWcmaxZ
P84qtu9Q+iElpSVVWHBKzkzWs+uKv2f8zNkz2payjeAEmKBcD126//77NWrUKGVlZSktLU2pqamO15kzZ0q
9ny++
+EIdO3bUwIEDFRkZqXbt2untt98u1bZt27ZVTEyMrrnmGq1fv77EcYmJibLZbI5XXFxcqesDAAA1U05BjnL
P5ZbYf+DMgQo7dm5hrk6fPV1i/y8nfqmwYwMoWbmC09GjRzV+/HgFBgZe1MF/+
+03zZw5U02aNNE333yje+65R+PHj9e8efNK3CYmJkazZs3SJ598ok8+
+URxcXG68sortXXr1mLHT548Wenp6Y7X4cOHL6pmAABQ/QX7BSvIN6jE/ia1m1TYsf19/
BUVVPICFJdGX1phxwZQsnKtqnfTTTdp0KBBuvXWWy/q4H5+furYsaO+//
57R9v48eO1ZcsWbdiwodT76dmzp+rXr6///e9/
Lseyqh4AAHAl71yenlzzpJ5Z90yRvibhTbRmxBrFhMRUyLHthl2zfpilcV+NK9IXFRSlLWO2KM7GFTSAO1T
IqnpffPGF47/79eunSZMmadeuXWrTpo18fX2dxt5www2l2mdMTIxatmzp1NaiRQt98sknpS1L0h+r/
K1bt65M2wAAAJTE6mPVvzr/Sxl5GZr14yyds5+TJF1W9zItuGlBhYUmSfKyeGlgy4FKyUrR8+ufV17hH/
dqt45srYW3LCQ0ASYp9RknL6/
SXdVnsVhUWFhYqrFDhgzR4cOHtXbtWkfbfffdp02bNjmdhXLlmmuuUUhIiBYtWuRyLGecAABAaWXnZyslK0
Vncs8o2DdYEUERqhNYxyPHzj2Xq+TMZJ0+e1oBPgGKCIxQZDCrCAPuVCFnnP665Lg73HffferataueeeYZ3
Xrrrdq8ebPeeustvfXWW44xkydP1tGjR/Xuu+9KkqZPn66EhAS1atVKubm5mj17tlauXKlvv/
3W7fUBAICaLcgvSI3CG6mRGnn82P4+/
kqolaCEWqVbcRhAxSrX4hDvvvuu0xLf5+Xn5zsCTml06tRJn376qd5//321bt1aTz31lKZPn66hQ4c6xiQn
J+vQoUNOx7j//
vvVpk0b9ezZUzt27NDy5cvVq1ev8nwUAAAAAHCpXItDeHt7Kzk5uchDZ0+fPq3IyMhSX6pnBi7VAwAAACCV
LRuU64yTYRhOD70978iRI7LZbOXZJQAAAABUWqW+x0mS2rVrJ4vFIovFol69esnH5/9vXlhYqKSkJF177bV
uLxIAAADwhGOZx3Tm7BlJUp3AOooOjr6o/RUUFuhY5jGl5aYpwPePRT5qBdRyR6nwsDIFpwEDBkiStm/
frj59+ig4ONjR5+fnpwYNGujmm292a4EAAABARcs9l6uNRzZq5Ocj9Xva75KkRrUaad6AeepUt5P8vP3KvM
9TOac0b8c8TVs9TZn5mZKkqxOu1uz+s1n0owoq1z1O8+bN02233SZ/f/+KqKlCcY8TAAAA/
uqXE7+o7ZttHc/sOs/P208/jf1Jzeo0K9P+7IZdb//
4tsYuGVukr3F4Y60ZvkaxobEXVTMuXoXf4zR8+PAqGZoAAACAvzpbcFYvfv9ikdAkSfmF+Xp98+vKL8wv0z
6PZR7TE6ufKLZv/5n92ntmb7lqhXnKFZxq1aql8PDwIq/
atWurbt266tmzp+bMmePuWgEAAAC3y8rP0uZjm0vs33Bkg7Lyssq0z7MFZ3Ui+0SJ/
duSt5VpfzBfuYLTE088IS8vL/Xr10/
Tpk3TtGnT1K9fP3l5eWncuHFq2rSp7rnnHr399tvurhcAAABwqwDfACWElXzPUaPwRgrwDSjTPv28/
RTkG3TBfaJqKdPiEOetW7dO//73vzV2rPM1m2+++aa+/
fZbffLJJ7rkkks0Y8YMjRkzxi2FAgAAABUh2C9Yk7tP1pJ9S4rtf6DrA2UOTjEhMbqn4z16ccOLRfrC/
MN0adSl5aoV5inXGadvvvlGvXv3LtLeq1cvffPNN5Kk6667Tr/
99tvFVQcAAAB4QKvIVppx7Qz5evk62vy8/
fR2/7fVLLxsC0Oc33Zil4m6qcVNTu2RQZFaMWyF4mxxF10zPKtcZ5zCw8O1ePFi3XfffU7tixcvVnh4uCQp
OztbISEhF18hAAAAUMHC/MN0Z/s71a9pP+09vVdeFi81CW+i6ODoMp9tOi8mJEZvX/+2/
n3Vv7XvzD7VDqit+LB41Q2pK4vF4uZPgIpWruD0+OOP65577tGqVat02WWXSZK2bNmir776SrNmzZIkLVu2
TD179nRfpQAAAEAFCvQNVMNaDdWwVkO37TM8MFzhgeFqEdHCbfuEOcr1HCdJWr9+vV5//
XXt2bNHktSsWTP961//UteuXd1aoLvxHCcAAAAAUtmyQbmDU1VFcAIAAAAglS0blOtSPUmy2+3av3+/
Tpw4Ibvd7tR3xRVXlHe3AAAAAFDplCs4bdy4UUOGDNHBgwf11xNWFotFhYWFbikOAKqC1LOpSs1NlSSFB4Q
rzD/
M3IIAAIDblSs4jR07Vh07dtSSJUsUExPDqiAAaqRCe6F2n9qtf371T605uEaS1Cuhl1699lW1iGghL0u5nv
gAAAAqoXLd4xQUFKQdO3aocePGFVFTheIeJwDusv/
MfrV7s52y8rOc2kOtodp611aeCg8AQCVXlmxQrl+Hdu7cWfv37y9XcQBQHeQX5uuNLW8UCU2SlJGXoXe2va
NzhedMqAwAAFSEcl2q969//Uv333+/UlJS1KZNG/n6+jr1X3LJJW4pDgAqq/TcdC37bVmJ/
d8c+Eb3d71f4QHhHqwKAABUlHIFp5tvvlmSNGrUKEebxWKRYRgsDgGgRvDz9lNEYESJ/
VHBUfLz9vNgRQAAoCKVKzglJSW5uw4AqFJs/
jY91O0hrfp9VbH9D3R5QMF+wR6uCgAAVJRyBaf4+Hh31wEAVU6H2A6a0HmCpm+a7tQ+qeskXRLFJcsAAFQn
5VpVT5L+97//
adasWUpKStKGDRsUHx+v6dOnKyEhQTfeeKO763QbVtUD4E6pZ1N1LPOYlv+2XBaLRdc0vEYxITE8ywkAgCq
gwlfVmzlzpiZOnKjrrrtOaWlpjnuawsLCNH369PLsEgCqpFoBtdQqspXuvfxeje88Xi0iWhCaAACohsoVnF
577TW9/fbbevTRR+Xt7e1o79ixo37++We3FQcAAAAAlUG5glNSUpLatWtXpN1qtSo7O/
uiiwIAAACAyqRcwSkhIUHbt28v0r506VK1aNHiYmsCAAAAgEqlXKvqTZw4UePGjVNubq4Mw9DmzZv1/
vvvKzExUbNnz3Z3jQCASuhc4Tkdzz4uQ4bC/MNYfh0AUK2VKziNHj1aAQEBeuyxx5STk6MhQ4YoNjZW
r776qgYNGuTuGgEAlcyRjCN6+8e3NfOHmcouyNZ1ja/Tk1c9qSa1m8jHq1x/
tQAAUKmVezny83JycpSVlaXIyEjl5ORo+/
bt6tq1q7vqczuWIweAi3Ms85iuX3C9tqVsc2oP9A3UD2N+UIsILtkGAFQNFb4c+Z8FBgYqMjJSkrRv3z716
NHjYncJAKjEtiVvKxKaJCmnIEdTVk9RVn6WCVUBAFCxLjo4AQBqlgU/
Lyixb8m+JUrLTfNcMQAAeAjBCQBQJuEB4SX2BfsFy4u/WgAA1RB/
uwEAymRE2xEl9o3tMFaRQZGeKwYAAA8p09JHX3zxxQX7k5KSLqoYAEDll1ArQZO7T1biukSn9rbRbTWmwxj
5eLOqHgCg+inTqnpeXq5PUFksFhUWFl5UURWJVfUA4OKdOXtGv6f9rjnb5ujM2TMa0maI2sW0U2xIrNmlAQ
BQamXJBmX6taDdbr+owgAA1UN4QLjCA8LVPqa92aUAAOAR3OMEAAAAAC6U+oyTq/ub/
uyGG24oVzEAAAAAUBmVOjgNGDCgVOMq+z1OAAAAAFBWpQ5O3N8EADDLqZxTMgxDtQNry8vCVeYA3KOgsECp
uany9fJVrYBaZpeDSo41YwEAldbRjKNasm+JZv4wU+fs5zTs0mG6rdVtqm+rb3ZpAKowwzCUlJakt358S1/
s+UI2f5vu73K/etTvoajgKLPLQyVVpuXI/
yw7O1tr1qzRoUOHlJ+f79Q3fvx4txRXEViOHACqhqMZRzXgwwH64dgPTu0JYQlaPWI14QlAue09vVeXz75c
qbmpTu23tLxFb1z3hiKCIkyqDJ5WYcuRn7dt2zZdd911ysnJUXZ2tsLDw3Xq1CkFBgYqMjKyUgcnAEDVsPb
Q2iKhSZKS0pL03k/v6cFuD8rby9uEygBUZVn5WXp81eNFQpMkfbzrY03qOonghGKV60Lx++67T/
3791dqaqoCAgK0ceNGHTx4UB06dNCLL77o7hoBADVMVn6WZm+dXWL/
vB3zdCrnlAcrAlBdpJ5N1aLdi0rs/3Dnhx6sBlVJuYLT9u3bdf/998vLy0ve3t7Ky8tTXFycnn/
+eT3yyCPurhEAUMNYZLngIhBeFi9ZZPFgRQCqkwv9/
wtnslGScgUnX19feXn9sWlkZKQOHTokSbLZbDp8+LD7qgMA1EhBfkG6p+M9JfaPaT9GdYLqeLAiANVF7cDa
uq3VbSX2X6gPNVu5glO7du20ZcsWSVLPnj31xBNP6L333tOECRPUunVrtxYIAKiZLq93ua6Mv7JIe4s6LTS
w5UCWJQdQLoG+gZrSc4qigoqunndnuzsVHxZvQlWoCsq1qt4PP/ygzMxMXXXVVTpx4oSGDRum77//
Xk2aNNE777yjSy+9tCJqdQtW1QOAqiM5M1nrD6/X65tf1zn7OY1qN0p/a/
Q31QutZ3ZpAKq4g2kHtXDXQi3avUhh1jDd1+U+tYtux8IQNUxZskG5lyOvqghOAFD1ZORlyDAM2fxtZpcCo
BqxG3Zl5GbIx9tHwX7BZpcDE1T4cuTnnThxQnv27JEkNW/
eXBERJHQAgPuFWvlFFwD387J4KSwgzOwyUEWU6wLxzMxM3XHHHapbt6569uypnj17KjY2VrfffrvS09PdXS
MAAAAAmKpcwWn06NHatGmTvvzyS6WlpSktLU1ffvmlfvjhB919993urhEAAAAATFWue5yCgoL0zTffqHv37
k7ta9eu1bXXXqvs7Gy3Fehu3OMEAChJ/
rl8ySL5efuZXQoAwAPKkg3Kdcapdu3astmK3qBrs9lUq1atMu3r6NGjuv3221W7dm0FBASoTZs2+uGHHy64
zerVq9W+fXtZrVY1btxYc+fOLdMxAQD4s+TMZH2x5wvd8tEtGvTxIH174FulZKWYXRYAoBIpV3B67LHHNHH
iRKWk/P+/VFJSUjRp0iQ9/vjjpd5PamqqunXrJl9fX3399dfatWuXXnrppQuGr6SkJPXr109XXXWVtm/
frgkTJmj06NH65ptvyvNRAAA13NGMo7pl4S268YMbtXjvYn3666fqM7+P7lp8F+EJAOBQrkv12rVrp/
379ysvL0/169eXJB06dEhWq1VNmjRxGrt169YS9/Pwww9r/fr1Wrt2bamP/
dBDD2nJkiXauXOno23QoEFKS0vT0qVLXW7PpXoAgD97e+vbumvxXcX2fTHoC/Vv1t/
DFQEAPKXClyMfMGBAeTYr4osvvlCfPn00cOBArVmzRnXr1tU//
vEPjRkzpsRtNmzYoN69ezu19enTRxMmTCh2fF5envLy8hzvMzIy3FI7AKDqO5V9Sv/Z/J8S+1/b/
JquTrhaQX5BHqwKAFAZlSs4TZkyxS0H/
+233zRz5kxNnDhRjzzyiLZs2aLx48fLz89Pw4cPL3ablJQURUVFObVFRUUpIyNDZ8+eVUBAgFNfYmKipk2b
5pZ6AQDVi92wK68wr8T+3HO5KjQKPVgRAKCyKtc9TpKUlpam2bNna/
LkyTpz5oykPy7LO3r0aKn3Ybfb1b59ez3zzDNq166d7rrrLo0ZM0azZs0qb1lFTJ48Wenp6Y7X4cOH3bZvA
EDVVjuwtga1GlRi//BLh/PwXQCApHIGp59+
+klNmzbVc889pxdffFFpaWmSpEWLFmny5Mml3k9MTIxatmzp1NaiRQsdOnSoxG2io6N1/
Phxp7bjx48rNDS0yNkmSbJarQoNDXV6AQAgSd5e3hredrhiQ2KL9DUJb6K/
NfqbCVUBACqjcgWniRMnasSIEdq3b5/8/f0d7dddd52++
+67Uu+nW7du2rNnj1Pb3r17FR8fX+I2Xbp00YoVK5zali1bpi5dupT6uAAAnNcgrIHWj1qvh7o9pHqh9RRv
i9eTVz6p5cOWK84WZ3Z5AIBKolyr6tlsNm3dulWNGjVSSEiIduzYoYYNG+rgwYNq1qyZcnNzS7WfLVu2qGv
Xrpo2bZpuvfVWbd68WWPGjNFbb72loUOHSvrjUrujR4/q3XfflfTHcuStW7fWuHHjNGrUKK1cuVLjx4/
XkiVL1KdPH5fHZFU9AEBxCgoLdDLnpCyyKDIoUt5e3maXBACoYBX+AFyr1Vrs6nR79+5VREREqffTqVMnff
rpp3r//
ffVunVrPfXUU5o+fbojNElScnKy06V7CQkJWrJkiZYtW6ZLL71UL730kmbPnl2q0AQAQEl8vX0VGxKrmJAY
QhMAoIhynXEaPXq0Tp8+rYULFyo8PFw//
fSTvL29NWDAAF1xxRWaPn16BZTqHpxxAgAAACB54IzTSy+9pKysLEVGRurs2bPq2bOnGjVqpODgYD399NPl
KhoAAAAAKqtyPcfJZrNp2bJlWrdunX766SdlZWWpQ4cO6tWrl7vrAwAAAADTlemM04YNG/
Tll1863nfv3l1BQUF64403NHjwYN11113Kyyv5QYIAAAAAUBWVKTg9+eST+uWXXxzvf/
75Z40ZM0bXXHONHn74YS1evFiJiYluLxIAAAAAzFSm4LR9+3any/E+
+OADXXbZZXr77bc1ceJEzZgxQwsXLnR7kQAAAABgpjIFp9TUVEVFRTner1mzRn379nW879Spkw4fPuy+6gA
AAACgEihTcIqKilJSUpIkKT8/X1u3btXll1/u6M/
MzJSvr697KwQAAAAAk5UpOF133XV6+OGHtXbtWk2ePFmBgYHq0aOHo/
+nn35So0aN3F4kAAAAAJipTMuRP/XUU7rpppvUs2dPBQcHa968efLz83P0v/POO/
rb3/7m9iIBAAAAwEwWwzCMsm6Unp6u4OBgeXt7O7WfOXNGwcHBTmGqsinL04EBAAAAVF9lyQblfgBuccLDw
8uzOwAAAACo1Mp0jxMAAAAA1EQEJwAAAABwgeAEAAAAAC4QnAAAAADAhXItDgEAAC7sRPYJHck4op+O/
6TYkFg1r9NcdUPqytvL2/XGAIBKh+AEAICbHc04qsGfDNbaQ2sdbWH+Yfrm9m/
UIaYD4QkAqiAu1QMAwI3OFpzV1DVTnUKTJKXlpuma/
12jIxlHTKoMAHAxCE4AALjR8azjenfHu8X2ZeRl6OcTP3u4IgCAOxCcAABwo9zCXOUX5pfYfzj9sAerAQC4
C8EJAAA3CvYLVmRQZIn97WLaebAaAIC7EJwAAHCj2JBY/
fuqfxfb1y66nRLCEjxcEQDAHQhOAAC4kZfFSze1uEmz+s1SncA6kiRvi7cGtRqkzwd9rqjgKJMrBACUh8Uw
DMPsIjwpIyNDNptN6enpCg0NNbscAEA1VWgv1LHMY8rMz5S/
j78igyIV7BdsdlkAgD8pSzbgOU4AAFQAby9vxdnizC4DAOAmXKoHAAAAAC4QnAAAAADABYITAAAAALjAPU4
oE7th17HMY0rJSlF+Yb5igmMUHRytAN8As0sDKlx2fraOZx9XcmayAnwDFBUUpdiQWFksFrNLAwAAFYzghF
LLL8zX94e/18CPBupUzilJktXbqqevfloj241UeEC4yRUCFedk9knN2DRDz65/
Vufs5yRJMcEx+mzQZ2of014+XvzfKQAA1RmX6qHUDqYdVJ/
5fRyhSZLyCvP0wLIHtOHwBhMrAyre0v1L9e+1/3aEJklKzkrW1fOu1uH0wyZWBgAAPIHghFJ7f+f7yi/
ML7bv8VWPOwUqoDpJzkzWlNVTiu3LLsjWt7996+GKAACApxGcUCrn7Oe0LWVbif0HUg8o91yuBysCPKfAXq
CktKQS+7cll/xnAwAAVA8EJ5SKj5ePLq93eYn9zes0V4APC0SgerJ6W9UkvEmJ/
Z3rdfZgNQAAwAwEJ5TaLS1uKTEcPX3106odWNvDFQGeERUcpaevfrrYPpvVpqsaXOXhigAAgKcRnFBq8WHx
Wjl8peJt8Y62EL8Qvd3/
bXWM7WhiZUDFuzrhar38t5cV6BvoaGsc3lirR6x2+jMBAACqJ4thGIbZRXhSRkaGbDab0tPTFRoaanY5VdK
xzGM6mX1S5+znVCewjmJDYuXr7Wt2WUCFyzuXp+SsZJ3KOSWrt1URQRGKDo42uywAAFBOZckGPHgEZRYbEq
vYkFizywA8zupjVYOwBmoQ1sDsUgAAgIdxqR4AAAAAuEBwAgAAAAAXCE4AAAAA4AL3OAFADZCZl6kT2SeUl
Z+lUGuoooOjFeDr/
mevpeWm6WT2SeUU5Mjmb1NsSKz8vP3cfhwAADyN4AQA1dyRjCN64NsH9NGuj2Q37LJ6W3VPx3v0UPeH3Loq
4MG0gxr75VgtPbBUkhTkG6TJPSbrrvZ3KSIowm3HAQDADAQnAKjGTuec1sjPR2r5b8sdbXmFeZq+aboKjUI
92/tZp2dTlVdKVor6LeinX07+4mjLLsjWYysfk7+PvyZ0niBvL+
+LPg4AAGbhHicAqMaOZx13Ck1/9uaPbyolK8Utx0lKTXIKTX/
29HdP62jmUbccBwAAsxCcAKAaO5J5pMS+/
MJ8peWmueU4JYUmSUrNTVV2frZbjgMAgFkITgBQjdUJrFNin0UWBfsFu+U48bb4Evus3lYF+Lh/
IQoAADyJ4AQA1VhMcIya1m5abF/
fJn0VGRTpluM0r9NcEYHFLwAxsu1IRYe4bxEKAADMQHACgGosJiRGiwcvVqNajZzaO9ftrJn9ZirMP8wtx6
kXWk/L7limmOAYp/
brmlynx3s+Ln8ff7ccBwAAs1gMwzDMLsKTMjIyZLPZlJ6ertDQULPLAQCPOJZ5TEczjupY1jE1sDVQTEiM2
842/dmRjCM6nH5YJ3NOqlGtRooOjlbtwNpuPw4AAO5QlmzAcuQAUAPEhsQqNiS2wo9TL7Se6oXWq/
DjAADgaVyqBwAAAAAuEJwAAAAAwAWCEwAAAAC4wD1OQBWQX5ivlKwU5Z3LU6BvoGJDYmWxWMwuCwAAoMYw9
YzT1KlTZbFYnF7NmzcvcfzcuXOLjPf3Z4lbVG/Jmcl6YtUTavVGKzV9vak6z+6s+T/
P15mcM2aXBgAAUGOYfsapVatWWr58ueO9j8+FSwoNDdWePXsc7/
mtO6qz0zmndfeXd2vx3sWOtqOZRzXs02Ga2W+mxrQfI28vbxMrBAAAqBlMD04+Pj6Kji79E+UtFkuZxgNVW
XJWslNo+rNHVz6qfk36Kc4W5+GqAAAAah7TF4fYt2+fYmNj1bBhQw0dOlSHDh264PisrCzFx8crLi5ON954
o3755ZcLjs/
Ly1NGRobTC6gqdp3cVWLfmbNnlJ6X7sFqAAAAai5Tg1Pnzp01d+5cLV26VDNnzlRSUpJ69OihzMzMYsc3a9
ZM77zzjj7//
HPNnz9fdrtdXbt21ZEjR0o8RmJiomw2m+MVF8dv51F1RARGlNhnkUX+PtzjBwAA4AkWwzAMs4s4Ly0tTfHx
8Xr55Zd15513uhxfUFCgFi1aaPDgwXrqqaeKHZOXl6e8vDzH+4yMDMXFxSk9PV2hoaFuqx2oCIfSD6ntrLZ
KzU0t0ndt42v1wc0fyOZvM6EyAACAqi8jI0M2m61U2cD0S/X+LCwsTE2bNtX+/
ftLNd7X11ft2rW74Hir1arQ0FCnF1BV1A2pq6+GfqVgv2Cn9sbhjfXGdW8QmgAAADzE9MUh/
iwrK0sHDhzQHXfcUarxhYWF+vnnn3XddddVcGWAOby9vNUxtqN+HvuzthzbogOpB3RZ3cvUvE5zxYbEml0e
AABAjWFqcHrggQfUv39/
xcfH69ixY5oyZYq8vb01ePBgSdKwYcNUt25dJSYmSpKefPJJXX755WrcuLHS0tL0wgsv6ODBgxo9erSZHwO
oUD5ePmpQq4Ea1GpgdikAAAA1lqnB6ciRIxo8eLBOnz6tiIgIde/eXRs3blRExB83xB86dEheXv//
asLU1FSNGTNGKSkpqlWrljp06KDvv/
9eLVu2NOsjAAAAAKgBKtXiEJ5QlhvAAAAAAFRfVXZxCAAAAACojCrV4hBAVXQi+4TyC/
Nl9bYqIqjk5y4BAACg6uKME1BOp3NOa9HuRbp63tVqPKOxrvnfNfp639dKPVv0mUsAAACo2ghOQDnkFOTo7
a1v6+aFN+uXk78orzBPO47v0HULrtP7O99XfmG+2SUCAADAjQhOQDkczzquKaunFNv30PKHlJyZ7OGKAAAA
UJEITkA5pGSllHhWKSs/
SydzTnq4IgAAAFQkghNQDn7efhfu97pwPwAAAKoWghNQDlHBUYoKiiq2r0FYA9UJquPhigAAAFCRCE5AOcS
GxOrjWz+Wv4+/U3uQb5AW3rJQsSGxJlUGAACAisBznIBy8LJ4qXPdztp5z04t2r1IPyb/qC71uqh/s/
6Kt8WbXR4AAADczGIYhmF2EZ6UkZEhm82m9PR0hYaGml0OAAAAAJOUJRtwqR4AAAAAuEBwAgAAAAAXCE4AA
AAA4ALBCQAAAABcIDgBAAAAgAsEJwAAAABwgeAEAAAAAC4QnAAAAADABYITAAAAALhAcAIAAAAAFwhOAAAA
AOACwQkAAAAAXCA4AQAAAIALBCcAAAAAcIHgBAAAAAAuEJwAAAAAwAWCEwAAAAC4QHACAAAAABcITgAAAAD
gAsEJAAAAAFwgOAEAAACACwQnAAAAAHCB4AQAAAAALhCcAAAAAMAFghMAAAAAuEBwAgAAAAAXCE4AAAAA4A
LBCQAAAABcIDgBAAAAgAsEJwAAAABwwcfsAlD15Rbk6kjmEX217ysdSj+kqxOu1qVRl6puaF2zSwMAAADcg
uCEi5J3Lk/Lk5ZrwAcDVGgUSpJe2vCSGtVqpBXDVig+LN7kCgEAAICLx6V6uCjHMo/
p5oU3O0LTeQdSD2jSsknKys8yqTIAAADAfQhOuCibj21WfmF+sX2Ldi/
SyeyTHq4IAAAAcD+CEy7KqZxTJfYVGoUqsBd4sBoAAACgYhCccFG61OtSYl/
DWg0V4hfiwWoAAACAikFwwkWJC43T3xr9rdi+GdfOUExIjIcrAgAAANyP4ISLEhEUobk3ztWUnlMU5h8mSb
ok6hItv2O5esT3MLc4AAAAwE0shmEYZhfhSRkZGbLZbEpPT1doaKjZ5VQb5wrPKSU7RYX2QgX4BigyKNLsk
gAAAIALKks24DlOcAsfbx/
VC61ndhkAAABAheBSPQAAAABwgeAEAAAAAC4QnAAAAADABVOD09SpU2WxWJxezZs3v+A2H330kZo3by5/
f3+1adNGX331lYeqRVWSnJmsjUc2au72uVqVtEpHMo6YXRIAAACqMNMXh2jVqpWWL1/ueO/jU3JJ33//
vQYPHqzExERdf/
31WrBggQYMGKCtW7eqdevWnigXVcDBtIO6bsF12nVyl6MtJjhGy+5YplaRrUysDAAAAFWV6Zfq+fj4KDo62
vGqU6dOiWNfffVVXXvttZo0aZJatGihp556Su3bt9frr7/uwYpRmaWeTdWoL0Y5hSZJSs5KVr8F/
XQs85hJlQEAAKAqMz047du3T7GxsWrYsKGGDh2qQ4cOlTh2w4YN6t27t1Nbnz59tGHDhhK3ycvLU0ZGhtML
1dfJ7JNambSy2L6D6QcJTgAAACgXU4NT586dNXfuXC1dulQzZ85UUlKSevTooczMzGLHp6SkKCoqyqktKip
KKSkpJR4jMTFRNpvN8YqLi3PrZ0Dlkl2QfcH+0zmnPVQJAAAAqhNTg1Pfvn01cOBAXXLJJerTp4++
+uorpaWlaeHChW47xuTJk5Wenu54HT582G37RuUT5h8mfx//
Evvr2+p7sBoAAABUF6ZfqvdnYWFhatq0qfbv319sf3R0tI4fP+7Udvz4cUVHR5e4T6vVqtDQUKcXqq+YkBh
NvHxisX39m/ZXVFBUsX0AAADAhVSq4JSVlaUDBw4oJiam2P4uXbpoxYoVTm3Lli1Tly5dPFEeqgB/H3/
d2/le/fuqfyvU+kdItnpbNbbDWM26fpbCA8NNrhAAAABVkcUwDMOsgz/wwAPq37+/
4uPjdezYMU2ZMkXbt2/
Xrl27FBERoWHDhqlu3bpKTEyU9Mdy5D179tSzzz6rfv366YMPPtAzzzxTpuXIMzIyZLPZlJ6eztmnaqygsE
DHMo8puyBbAT4Big6OVoBvgNllAQAAoBIpSzYw9TlOR44c0eDBg3X69GlFRESoe/
fu2rhxoyIiIiRJhw4dkpfX/
z8p1rVrVy1YsECPPfaYHnnkETVp0kSfffYZz3BCEb7evooPize7DAAAAFQTpp5xMgNnnAAAAABIZcsGleoe
JwAAAACojAhOAAAAAOCCqfc41WSnck7pRPYJnTl7RuEB4YoMilSdwDpmlwUAAACgGAQnExxOP6w7Pr1Daw6
ucbT1qN9D82+azwNaAQAAgEqIS/
U87EzOGY38fKRTaJKktYfWavhnw3U657RJlQEAAAAoCcHJw07knNCKpBXF9q3+fbVOZJ/
wcEUAAAAAXCE4eVhGXsZF9QMAAADwPIKTh9mstgv2h/mHeaYQAAAAAKVGcPKwqOAoXd/
k+mL7+jbuq8igSA9XBAAAAMAVgpOHhfmHaeb1M3VjsxtlkUWSZJFFNzS9QW/
1f0u1AmqZXCEAAACAv2I5chPUC62neQPm6Xj2caXnpctmtSkyKJLL9AAAAIBKiuBkEpu/TTb/C9/
vBAAAAKBy4FI9AAAAAHCB4AQAAAAALhCcAAAAAMAF7nGqolKyUnQ657Tshl21A2srNiTW7JKqvdSzqTqZc1
JnC84qzD9MsSGx8vX2NbusSi85M1mnz56WJNUOqK2YkBiTKwIAACg7glMVU1BYoK3JWzXss2Hae3qvJKm+r
b5m95+t7vW7K8A3wOQKq6ek1CSNXjxaK5NWSpJC/
EI05copGn7pcNUJrGNydZVT3rk8bT66WSM+H6HfUn+TJDWs1VBzb5yry+peJquP1eQKAQAASs9iGIZhdhGe
lJGRIZvNpvT0dIWGhppdTpntO71Pl8y6RLnncp3avS3e2nr3Vl0SdYlJlVVfxzKP6Yo5V+hA6oEifW9e/
6ZGtx8tLwtXvf7V7pO7demsS1VgL3Bq9/Xy1Y6
xO9QiooVJlQEAAPyhLNmAf+1VIecKz+mtH98qEpokqdAoVOLaRGXnZ5tQWfW259SeYkOTJD2x6gkdyzzm4Y
oqv7xzeXp106tFQpMkFdgLNH3jdOWdyzOhMgAAgPIhOFUh2QXZ+v7I9yX2bzm2RZn5mR6sqGbYlrKtxL7j2
ceVU5DjwWqqhsz8TG08srHE/o1HN/
KzCgAAqhSCUxXi7+OvxrUal9ifUCtBAT7c4+RujcIbldgX5Bskf29/
D1ZTNQT4BKhhrYYl9jeq1YifVQAAUKUQnKoQq49VEy6fUGL/Iz0ekc3f5rmCaoi2UW1lsxb/
vf6j0z8UHRLt4YoqvyC/ID3U7aES+x/s9qCC/II8WBEAAMDFIThVMY3DG2vegHmyev//
Fcl8vHz0wjUvqG1UW/
MKq8bibHFaMXyFIoMindpvanGT7rv8Pvl5+5lUWeXWvE5zzeo3y+n78fP20xv93lDzOs1NrAwAAKDsWFWvC
sotyFVyVrL2n9mvc/
ZzalanmaKCovgNfgUyDENHMo7oUPohnT57Wk3CmygqKErhgeFml1apnS04q5SsFO07s092w65mtZspOjiaZ
fMBAEClUJZsQHACAAAAUCOxHDkAAAAAuBHBCQAAAABcIDgBAAAAgAs+ZhcAVEaZeZk6lXNKhUahwqxhqhNU
x+ySAAAAYCLOOAF/sf/
Mfg37dJgav9ZYTV5ror4L+mrz0c3KO5dndmkAAAAwCcEJ+JNDaYd0xZwr9Nmez2Q37JKkH479oO7vdNfe03
tNrg4AAABmITgBf/Ltb98qOSu5SHuBvUBTVk9RZl6mCVUBAADAbAQn4P/kF+br8z2fl9i/
5uAaZeRleLAiAAAAVBYEJ+D/
+Hj5qF5IvRL7IwIj5OPFeioAAAA1EcEJ+D9eFi+N7Ti2xP4Huz2oqOAoD1YEAACAyoLgBPxJg7AGmnHtDFl
kcWof2HKg+jXpZ1JVAAAAMJvFMAzD7CI8KSMjQzabTenp6QoNDTW7HFRCmXmZSs5K1sqklcrKz1Lvhr1VL7
Se6gTyLCcAAIDqpCzZgBs2gL8IsYYoxBqiprWbml0KAAAAKgku1QMAAAAAFwhOAAAAAOACwQkAAAAAXCA4A
QAAAIALBCcAAAAAcIHgBAAAAAAuEJwAAAAAwAWCEwAAAAC4QHACAAAAABcITgAAAADgAsEJAAAAAFwgOAEA
AACACwQnAAAAAHCB4AQAAAAALhCcAAAAAMAFH7ML8DTDMCRJGRkZJlcCAAAAwEznM8H5jHAhNS44ZWZmSpL
i4uJMrgQAAABAZZCZmSmbzXbBMRajNPGqGrHb7Tp27JhCQkJksVjMLqdaycjIUFxcnA4fPqzQ0FCzy8FfMD
+VG/NTeTE3lRvzU3kxN5Ub8/MHwzCUmZmp2NhYeXld+C6mGnfGycvLS/
Xq1TO7jGotNDS0Rv8BrOyYn8qN+am8mJvKjfmpvJibyo35kcszTeexOAQAAAAAuEBwAgAAAAAXCE5wG6vVq
ilTpshqtZpdCorB/FRuzE/
lxdxUbsxP5cXcVG7MT9nVuMUhAAAAAKCsOOMEAAAAAC4QnAAAAADABYITAAAAALhAcAIAAAAAFwhOKLPExE
R16tRJISEhioyM1IABA7Rnzx6nMbm5uRo3bpxq166t4OBg3XzzzTp+/
LhJFddczz77rCwWiyZMmOBoY27MdfToUd1+++2qXbu2AgIC1KZNG/
3www+OfsMw9MQTTygmJkYBAQHq3bu39u3bZ2LFNUNhYaEef/
xxJSQkKCAgQI0aNdJTTz2lP6+fxNx4znfffaf+/fsrNjZWFotFn332mVN/
aebizJkzGjp0qEJDQxUWFqY777xTWVlZHvwU1deF5qegoEAPPfSQ2rRpo6CgIMXGxmrYsGE6duyY0z6Yn4r
h6s/
On40dO1YWi0XTp093amduSkZwQpmtWbNG48aN08aNG7Vs2TIVFBTob3/7m7Kzsx1j7rvvPi1evFgfffSR1q
xZo2PHjummm24yseqaZ8uWLXrzzTd1ySWXOLUzN+ZJTU1Vt27d5Ovrq6+//lq7du3SSy+9pFq1ajnGPP/
885oxY4ZmzZqlTZs2KSgoSH369FFubq6JlVd/
zz33nGbOnKnXX39du3fv1nPPPafnn39er732mmMMc+M52dnZuvTSS/Wf//yn2P7SzMXQoUP1yy+/
aNmyZfryyy/13Xff6a677vLUR6jWLjQ/OTk52rp1qx5//
HFt3bpVixYt0p49e3TDDTc4jWN+KoarPzvnffrpp9q4caNiY2OL9DE3F2AAF+nEiROGJGPNmjWGYRhGWlqa
4evra3z00UeOMbt37zYkGRs2bDCrzBolMzPTaNKkibFs2TKjZ8+exr333msYBnNjtoceesjo3r17if12u92
Ijo42XnjhBUdbWlqaYbVajffff98TJdZY/
fr1M0aNGuXUdtNNNxlDhw41DIO5MZMk49NPP3W8L81c7Nq1y5BkbNmyxTHm66+/NiwWi3H06FGP1V4T/
HV+irN582ZDknHw4EHDMJgfTylpbo4cOWLUrVvX2LlzpxEfH2+88sorjj7m5sI444SLlp6eLkkKDw+XJP34
448qKChQ7969HWOaN2+u+vXra8OGDabUWNOMGzdO/
fr1c5oDibkx2xdffKGOHTtq4MCBioyMVLt27fT22287+pOSkpSSkuI0PzabTZ07d2Z+KljXrl21YsUK7d27
V5K0Y8cOrVu3Tn379pXE3FQmpZmLDRs2KCwsTB07dnSM6d27t7y8vLRp0yaP11zTpaeny2KxKCwsTBLzYya
73a477rhDkyZNUqtWrYr0MzcX5mN2Aaja7Ha7JkyYoG7duql169aSpJSUFPn5+Tn+D/
K8qKgopaSkmFBlzfLBBx9o69at2rJlS5E+5sZcv/32m2bOnKmJEyfqkUce0ZYtWzR+/
Hj5+flp+PDhjjmIiopy2o75qXgPP/ywMjIy1Lx5c3l7e6uwsFBPP/
20hg4dKknMTSVSmrlISUlRZGSkU7+Pj4/Cw8OZLw/Lzc3VQw89pMGDBys0NFQS82Om5557Tj4+Pho/
fnyx/czNhRGccFHGjRunnTt3at26dWaXAkmHDx/Wvffeq2XLlsnf39/
scvAXdrtdHTt21DPPPCNJateunXbu3KlZs2Zp+PDhJldXsy1cuFDvvfeeFixYoFatWmn79u2aMGGCYmNjmR
ugnAoKCnTrrbfKMAzNnDnT7HJqvB9//FGvvvqqtm7dKovFYnY5VRKX6qHc/vnPf+rLL7/
UqlWrVK9ePUd7dHS08vPzlZaW5jT++PHjio6O9nCVNcuPP/6oEydOqH379vLx8ZGPj4/
WrFmjGTNmyMfHR1FRUcyNiWJiYtSyZUunthYtWujQoUOS5JiDv65yyPxUvEmTJunhhx/
WoEGD1KZNG91xxx267777lJiYKIm5qUxKMxfR0dE6ceKEU/
+5c+d05swZ5stDzoemgwcPatmyZY6zTRLzY5a1a9fqxIkTql+/
vuPfCAcPHtT999+vBg0aSGJuXCE4ocwMw9A///
lPffrpp1q5cqUSEhKc+jt06CBfX1+tWLHC0bZnzx4dOnRIXbp08XS5NUqvXr30888/a/
v27Y5Xx44dNXToUMd/Mzfm6datW5Gl+/fu3av4+HhJUkJCgqKjo53mJyMjQ5s2bWJ+KlhOTo68vJz/
SvT29pbdbpfE3FQmpZmLLl26KC0tTT/++KNjzMqVK2W329W5c2eP11zTnA9N+/bt0/
Lly1W7dm2nfubHHHfccYd+
+uknp38jxMbGatKkSfrmm28kMTcumb06Baqee+65x7DZbMbq1auN5ORkxysnJ8cxZuzYsUb9+vWNlStXGj/
88IPRpUsXo0uXLiZWXXP9eVU9w2BuzLR582bDx8fHePrpp419+/YZ7733nhEYGGjMnz/
fMebZZ581wsLCjM8//9z46aefjBtvvNFISEgwzp49a2Ll1d/w4cONunXrGl9+
+aWRlJRkLFq0yKhTp47x4IMPOsYwN56TmZlpbNu2zdi2bZshyXj55ZeNbdu2OVZlK81cXHvttUa7du2MTZs
2GevWrTOaNGliDB482KyPVK1caH7y8/ONG264wahXr56xfft2p38n5OXlOfbB/FQMV392/
uqvq+oZBnNzIQQnlJmkYl9z5sxxjDl79qzxj3/8w6hVq5YRGBho/
P3vfzeSk5PNK7oG+2twYm7MtXjxYqN169aG1Wo1mjdvbrz11ltO/
Xa73Xj88ceNqKgow2q1Gr169TL27NljUrU1R0ZGhnHvvfca9evXN/z9/Y2GDRsajz76qNM/
9Jgbz1m1alWxf88MHz7cMIzSzcXp06eNwYMHG8HBwUZoaKgxcuRIIzMz04RPU/1caH6SkpJK/
HfCqlWrHPtgfiqGqz87f1VccGJuSmYxjD89Fh0AAAAAUAT3OAEAAACACwQnAAAAAHCB4AQAAAAALhCcAAAA
AMAFghMAAAAAuEBwAgAAAAAXCE4AAAAA4ALBCQAAAABcIDgBACDpyiuv1IQJE8wuAwBQSRGcAAA1wogRIzR
gwACzywAAVFEEJwAAAABwgeAEAKhxsrOzNWzYMAUHBysmJkYvvfSS2SUBACo5ghMAoMaZNGmS1qxZo88//1
zffvutVq9era1bt5pdFgCgEvMxuwAAADwpKytL//3vfzV//
nz16tVLkjRv3jzVq1fP5MoAAJUZZ5wAADXKgQMHlJ+fr86dOzvawsPD1axZMxOrAgBUdgQnAAAAAHCB4AQA
qFEaNWokX19fbdq0ydGWmpqqvXv3mlgVAKCy4x4nAECNEhwcrDvvvFOTJk1S7dq1FRkZqUcffVReXvwuEQB
QMoITAKDGeeGFF5SVlaX+/fsrJCRE999/
v9LT080uCwBQiVkMwzDMLgIAAAAAKjOuSwAAAAAAFwhOAAAAAOACwQkAAAAAXCA4AQAAAIALBCcAAAAAcIH
gBAAAAAAuEJwAAAAAwAWCEwAAAAC4QHACAAAAABcITgAAAADgAsEJAAAAAFz4f6x0SAclgtAbAAAAAElFTk
SuQmCC\n"
},
"metadata": {}
}
]
}
]
}

You might also like