diff --git a/__pycache__/tests.cpython-37.pyc b/__pycache__/tests.cpython-37.pyc
new file mode 100644
index 0000000..e4680e8
Binary files /dev/null and b/__pycache__/tests.cpython-37.pyc differ
diff --git a/calculator.py b/calculator.py
index a46affd..28fce9a 100644
--- a/calculator.py
+++ b/calculator.py
@@ -45,13 +45,92 @@
 def add(*args):
     """ Returns a STRING with the sum of the arguments """
 
-    # TODO: Fill sum with the correct value, based on the
-    # args provided.
-    sum = "0"
+    if len(args) != 2:
+        raise NameError
+
+    try:
+        total = int(args[0]) + int(args[1])
+        body = f"{total}"
+    except (ValueError, TypeError):
+        body = "Input not valid"
+
+    return f'
{body}
'
+
+def divide(*args):
+    """ Returns a STRING with the divide of the arguments """
+
+    if len(args) != 2:
+        raise NameError
+
+    try:
+        total = int(args[0]) / int(args[1])
+        body = f"{total}"
+    except (ValueError, TypeError):
+        body = "Input not valid"
+    except (ZeroDivisionError):
+        body = "Can't Divide by 0"
+
+    return f'{body}
'
+
+def multiply(*args):
+    """ Returns a STRING with the multiply of the arguments """
+
+    if len(args) != 2:
+        raise NameError
+
+    try:
+        total = int(args[0]) * int(args[1])
+        body = f"{total}"
+    except (ValueError, TypeError):
+        body = "Input not valid"
+
+    return f'{body}
'
+
+def subtract(*args):
+    """ Returns a STRING with the subtract of the arguments """
+
+    if len(args) != 2:
+        raise NameError
+
+    try:
+        total = int(args[0]) - int(args[1])
+        body = f"{total}"
+    except (ValueError, TypeError):
+        body = "Input not valid"
+    except (ZeroDivisionError):
+        body = "Can't Divide by 0"
+
+    return f'{body}
'
+
+def home(*args):
+    """ Returns a STRING with the instuctions for site """
+    body = """
+    This is an online calculator that can perform several operations.
+    It supports:
+    
+        - Addition+
- Subtractions+
- Multiplication+
- Division+
+
+        If you open a browser to your wsgi application at
+        `http://localhost:8080/multiple/3/5' then the response body in my
+        browser should be `15`.
+    
+
+    Examples:
+    
+        - http://localhost:8080/multiply/3/5   => 15+
- http://localhost:8080/add/23/42      => 65+
- http://localhost:8080/subtract/23/42 => -19+
- http://localhost:8080/divide/22/11   => 2+        http://localhost:8080/               => instuctions
+
-    return sum
+    """
 
-# TODO: Add functions for handling more arithmetic operations.
+    return body
 
 def resolve_path(path):
     """
@@ -59,26 +138,53 @@ def resolve_path(path):
     arguments.
     """
 
-    # TODO: Provide correct values for func and args. The
-    # examples provide the correct *syntax*, but you should
-    # determine the actual values of func and args using the
-    # path.
-    func = add
-    args = ['25', '32']
+    funcs = {
+        '': home,
+        'add': add,
+        'divide': divide,
+        'multiply': multiply,
+        'subtract': subtract,
+    }
+
+    path = path.strip('/').split('/')
+
+    func_name = path[0]
+    args = path[1:]
+
+    try:
+        func = funcs[func_name]
+    except KeyError:
+        raise NameError
 
     return func, args
 
 def application(environ, start_response):
-    # TODO: Your application code from the book database
-    # work here as well! Remember that your application must
-    # invoke start_response(status, headers) and also return
-    # the body of the response in BYTE encoding.
-    #
-    # TODO (bonus): Add error handling for a user attempting
-    # to divide by zero.
-    pass
+    headers = [('Content-type', 'text/html')]
+
+    try:
+        path = environ.get('PATH_INFO', None)
+
+        if path is None:
+            raise NameError
+
+        func, args = resolve_path(path)
+
+        body = func(*args)
+        status = "200 OK"
+    except NameError:
+        status = "404 Not Found"
+        body = "Not Found
"
+    except Exception:
+        status = "500 Internal Server Error"
+        body = "Internal Server Error
"
+        print(traceback.format_exc())
+    finally:
+        headers.append(('Content-length', str(len(body))))
+        start_response(status, headers)
+        return [body.encode('utf8')]
+
 
 if __name__ == '__main__':
-    # TODO: Insert the same boilerplate wsgiref simple
-    # server creation that you used in the book database.
-    pass
+    from wsgiref.simple_server import make_server
+    srv = make_server('localhost', 8080, application)
+    srv.serve_forever()