i spent an hour working on what i might call a "generalized zip format" and one result that somehow works is that you can read it backwards or forwards. as in, you can make it go backwards from the end of a seekable file, or you can make it go forwards from a non-seekable stream, and the data stored in every record is unchanged