docs: def are_done(self, keys):
          '''
          Return a list of boolean values corresponding to whether or not each
          key in keys is marked done.  This method can be faster than
          individually checking each key, depending on how many keys you
          want to check.
  
          :param keys: a list of json-serializable keys
          '''
          # No keys are done b/c the file does not even exist yet.
          if not os.path.exists(self.path):
              return [False] * len(keys)
  
          done_lines = set([self._done_line(key) for key in keys])
          undone_lines = set([self._undone_line(key) for key in keys])
          status = {}
          with open(self.path) as fh:
              for line in fh:
                  if line in done_lines:
                      # extract serialized key
                      status[line[5:-1]] = True
                  elif line in undone_lines:
                      status[line[5:-1]] = False
          serialized_keys = [self._serialize(key) for key in keys]
          return [status.get(sk, False) for sk in serialized_keys]