code: func readUntil(r io.Reader, b []byte) error {
  	b1 := make([]byte, len(b))
  	i := 0
  	for {
  		_, err := io.ReadFull(r, b1[i:])
  		if err != nil {
  			return err
  		}
  		i = suffixMatchLen(b1, b)
  		if i == len(b) {
  			break
  		}
  		if copy(b1, b1[len(b1)-i:]) != i {
  			panic("wat")
  		}
  	}
  	return nil
  }
docs: // Reads from r until b has been seen. Keeps the minimum amount of data in
  // memory.