public async Task<byte[]> FetchAndDecompressBytesAsync(IRBlobInfo blob, bool doCleanUp, IProgress<long> progress, CancellationToken cancellationToken) {
byte[] data = null;
using (MemoryStream compressed = new MemoryStream(await FetchBytesAsync(blob, false, progress, cancellationToken)))
using (ZipArchive archive = new ZipArchive(compressed, ZipArchiveMode.Read)) {
var entry = archive.GetEntry("data");
using (Stream decompressedStream = entry.Open())
using (MemoryStream ms = new MemoryStream()) {
await decompressedStream.CopyToAsync(ms, progress, cancellationToken);
data = ms.ToArray();
}
}
if (doCleanUp) {
_cleanup.Add(blob);
}
return data;
}