<SYSTEM_TASK:>
Solve the following problem using Python, implementing the functions described below, one line at a time
<END_TASK>
<USER_TASK:>
Description:
 def watch_name(self, name, flags=0, name_appeared=None, name_vanished=None):
 		"""Asynchronously watches a bus name. 		Starts watching name on the bus specified by bus_type and calls 		name_appeared and name_vanished when the name is known to have a owner 		respectively known to lose its owner. 		To receive name_appeared and name_vanished callbacks, you need an event loop. 		https://github.com/LEW21/pydbus/blob/master/doc/tutorial.rst#setting-up-an-event-loop 		Parameters 		name : string 			Bus name to watch 		flags : NameWatcherFlags, optional 		name_appeared : callable, optional 			Invoked when name is known to exist 			Called as name_appeared(name_owner). 		name_vanished : callable, optional 			Invoked when name is known to not exist 		Returns 		------- 		NameWatcher 			An object you can use as a context manager to unwatch the name later. 		See Also 		-------- 		See https://developer.gnome.org/gio/2.44/gio-Watching-Bus-Names.html#g-bus-watch-name 		for more information. 		"""

		name_appeared_handler = (lambda con, name, name_owner: name_appeared(name_owner)) if name_appeared is not None else None
		name_vanished_handler = (lambda con, name:             name_vanished())           if name_vanished is not None else None
		return NameWatcher(self.con, name, flags, name_appeared_handler, name_vanished_handler)