code: func preprocess(prof *profile.Profile, ui plugin.UI, f *flags) error {
  	if *f.flagFocus != "" || *f.flagIgnore != "" || *f.flagHide != "" {
  		focus, ignore, hide, err := compileFocusIgnore(*f.flagFocus, *f.flagIgnore, *f.flagHide)
  		if err != nil {
  			return err
  		}
  		fm, im, hm := prof.FilterSamplesByName(focus, ignore, hide)
  
  		warnNoMatches(fm, *f.flagFocus, "Focus", ui)
  		warnNoMatches(im, *f.flagIgnore, "Ignore", ui)
  		warnNoMatches(hm, *f.flagHide, "Hide", ui)
  	}
  
  	if *f.flagTagFocus != "" || *f.flagTagIgnore != "" {
  		focus, err := compileTagFilter(*f.flagTagFocus, ui)
  		if err != nil {
  			return err
  		}
  		ignore, err := compileTagFilter(*f.flagTagIgnore, ui)
  		if err != nil {
  			return err
  		}
  		fm, im := prof.FilterSamplesByTag(focus, ignore)
  
  		warnNoMatches(fm, *f.flagTagFocus, "TagFocus", ui)
  		warnNoMatches(im, *f.flagTagIgnore, "TagIgnore", ui)
  	}
  
  	return aggregate(prof, f)
  }
docs: // preprocess does filtering and aggregation of a profile based on the
  // requested options.