@Override
 @WorkerThread
 @Nullable
 public FirebaseUser signInWithCredential(@NonNull AuthCredential credential) {
   Task<AuthResult> curTask = mFirebaseAuth.signInWithCredential(credential);
   AuthResult authResult = await(curTask);
   return authResult == null ? null : authResult.getUser();
 }
 @Override
 @WorkerThread
 @Nullable
 public FirebaseUser linkWithCredential(
     @NonNull FirebaseUser user, @NonNull AuthCredential credential) throws ExecutionException {
   AuthResult linkResult = await(user.linkWithCredential(credential));
   return linkResult == null ? null : linkResult.getUser();
 }
 @Override
 @WorkerThread
 @Nullable
 public FirebaseUser signInWithEmailPassword(
     @NonNull String emailAddress, @NonNull String password) {
   AuthResult authResult = await(mFirebaseAuth.signInWithEmailAndPassword(emailAddress, password));
   return authResult == null ? null : authResult.getUser();
 }