<SYSTEM_TASK:>
Solve the following problem using Python, implementing the functions described below, one line at a time
<END_TASK>
<USER_TASK:>
Description:
 async def auth_login( self, username: str, password: str, timeout: DefaultNumType = _default ) -> SMTPResponse: """ LOGIN auth sends the Base64 encoded username and password in sequence. Example:: 250 AUTH LOGIN PLAIN CRAM-MD5 auth login avlsdkfj 334 UGFzc3dvcmQ6 avlsdkfj Note that there is an alternate version sends the username as a separate command:: 250 AUTH LOGIN PLAIN CRAM-MD5 auth login 334 VXNlcm5hbWU6 avlsdkfj 334 UGFzc3dvcmQ6 avlsdkfj However, since most servers seem to support both, we send the username with the initial request. """

        encoded_username = base64.b64encode(username.encode("ascii"))
        encoded_password = base64.b64encode(password.encode("ascii"))

        async with self._command_lock:
            initial_response = await self.execute_command(
                b"AUTH", b"LOGIN", encoded_username, timeout=timeout
            )

            if initial_response.code != SMTPStatus.auth_continue:
                raise SMTPAuthenticationError(
                    initial_response.code, initial_response.message
                )

            response = await self.execute_command(encoded_password, timeout=timeout)

        if response.code != SMTPStatus.auth_successful:
            raise SMTPAuthenticationError(response.code, response.message)

        return response