(cherry picked from commit df29219f5118dd1ae1d02108aeea4484e20d67e8)
(cherry picked from commit 0b695b6682a5e8d391a5dcf81329ddec527c0eb5)
(cherry picked from commit f49df04c02d083395957fc85e12d231bb536e451)