code: func (bg *Reader) Seek(off Offset) error {
  	rs, ok := bg.r.(io.ReadSeeker)
  	if !ok {
  		return ErrNotASeeker
  	}
  
  	if off.File != bg.current.Base() || !bg.current.hasData() {
  		ok := bg.cacheSwap(off.File)
  		if !ok {
  			var dec *decompressor
  			if bg.dec != nil {
  				dec = bg.dec
  			} else {
  				select {
  				case dec = <-bg.waiting:
  				case dec = <-bg.working:
  					blk, err := dec.wait()
  					if err == nil {
  						bg.keep(blk)
  					}
  				}
  			}
  			bg.current, bg.err = dec.
  				using(bg.current).
  				nextBlockAt(off.File, rs).
  				wait()
  			if bg.dec == nil {
  				select {
  				case <-bg.control:
  				default:
  				}
  				bg.control <- bg.current.NextBase()
  				bg.waiting <- dec
  			}
  			bg.Header = bg.current.header()
  			if bg.err != nil {
  				return bg.err
  			}
  		}
  	}
  
  	bg.err = bg.current.seek(int64(off.Block))
  	if bg.err == nil {
  		bg.lastChunk = Chunk{Begin: off, End: off}
  	}
  
  	return bg.err
  }
docs: // Seek performs a seek operation to the given virtual offset.