docs: def compute_md5_for_file_asbase64(
          filename, pagealign=False, start=None, end=None, blocksize=65536):
      # type: (str, bool, int, int, int) -> str
      """Compute MD5 hash for file and encode as Base64
      :param str filename: file to compute MD5 for
      :param bool pagealign: page align data
      :param int start: file start offset
      :param int end: file end offset
      :param int blocksize: block size
      :rtype: str
      :return: MD5 for file encoded as Base64
      """
      hasher = blobxfer.util.new_md5_hasher()
      with open(filename, 'rb') as filedesc:
          if start is not None:
              filedesc.seek(start)
              curr = start
          else:
              curr = 0
          while True:
              if end is not None and curr + blocksize > end:
                  blocksize = end - curr
              if blocksize == 0:
                  break
              buf = filedesc.read(blocksize)
              if not buf:
                  break
              buflen = len(buf)
              if pagealign and buflen < blocksize:
                  aligned = blobxfer.util.page_align_content_length(buflen)
                  if aligned != buflen:
                      buf = buf.ljust(aligned, b'\0')
              hasher.update(buf)
              curr += blocksize
          return blobxfer.util.base64_encode_as_string(hasher.digest())