code: func (c *Corpus) PermanodeTime(pn blob.Ref) (t time.Time, ok bool) {
  	// TODO(bradfitz): keep this time property cached on the permanode / files
  	// TODO(bradfitz): finish implmenting all these
  
  	// Priorities:
  	// -- Permanode explicit "camliTime" property
  	// -- EXIF GPS time
  	// -- Exif camera time - this one is actually already in the FileInfo,
  	// because we use schema.FileTime (which returns the EXIF time, if available)
  	// to index the time when receiving a file.
  	// -- File time
  	// -- File modtime
  	// -- camliContent claim set time
  
  	if t, ok = c.pnTimeAttr(pn, nodeattr.PaymentDueDate); ok {
  		return
  	}
  	if t, ok = c.pnTimeAttr(pn, nodeattr.StartDate); ok {
  		return
  	}
  	if t, ok = c.pnTimeAttr(pn, nodeattr.DateCreated); ok {
  		return
  	}
  	var fi camtypes.FileInfo
  	ccRef, ccTime, ok := c.pnCamliContent(pn)
  	if ok {
  		fi, _ = c.files[ccRef]
  	}
  	if fi.Time != nil {
  		return time.Time(*fi.Time), true
  	}
  
  	if t, ok = c.pnTimeAttr(pn, nodeattr.DatePublished); ok {
  		return
  	}
  	if t, ok = c.pnTimeAttr(pn, nodeattr.DateModified); ok {
  		return
  	}
  	if fi.ModTime != nil {
  		return time.Time(*fi.ModTime), true
  	}
  	if ok {
  		return ccTime, true
  	}
  	return time.Time{}, false
  }
docs: // PermanodeTime returns the time of the content in permanode.