code: func makeCamliHandler(prefix, baseURL string, storage blobserver.Storage, hf blobserver.FindHandlerByTyper) http.Handler {
  	if !strings.HasSuffix(prefix, "/") {
  		panic("expected prefix to end in slash")
  	}
  	baseURL = strings.TrimRight(baseURL, "/")
  
  	canLongPoll := true
  	// TODO(bradfitz): set to false if this is App Engine, or provide some way to disable
  
  	storageConfig := &storageAndConfig{
  		storage,
  		&blobserver.Config{
  			Writable:      true,
  			Readable:      true,
  			Deletable:     false,
  			URLBase:       baseURL + prefix[:len(prefix)-1],
  			CanLongPoll:   canLongPoll,
  			HandlerFinder: hf,
  		},
  	}
  	return http.HandlerFunc(func(rw http.ResponseWriter, req *http.Request) {
  		action, err := parseCamliPath(req.URL.Path[len(prefix)-1:])
  		if err != nil {
  			log.Printf("Invalid request for method %q, path %q",
  				req.Method, req.URL.Path)
  			unsupportedHandler(rw, req)
  			return
  		}
  		handler := auth.RequireAuth(camliHandlerUsingStorage(req, action, storageConfig))
  		handler.ServeHTTP(rw, req)
  	})
  }
docs: // where prefix is like "/" or "/s3/" for e.g. "/camli/" or "/s3/camli/*"