(cherry picked from commit b08e0e5ab275269cb8f2e391fd9019e9a2507400)
(cherry picked from commit 3500a20630463947c147f8fc4b99c1abf0d785db)
(cherry picked from commit dbb87e385038eacfa3b4a2ce7dd6f9c42dbb0c6f)