(cherry picked from commit 86d9a97ccb08bec766ada95d5860deb28588e2b4)
(cherry picked from commit d45ebd4fcfb0bac96a575b5f594248e5b85f8778)
(cherry picked from commit 4e413a10e621a34235a6f520f8b97cd77cc00c95)