(cherry picked from commit 9a4ca8f6163d5e1375aa7c612e1338cce5a8c0b5)
(cherry picked from commit 0d9fc72bee009c591400055725680a6a0f5a9c83)
(cherry picked from commit 44c4d7b9521fe449e61edc614446195861932f8c)