merge from upstream phabricator
merge from upstream phabricator