(cherry picked from commit e308bedff591263b33155cb222108915bf980e51)
(cherry picked from commit 21319d339305c77311d42aa18501d425a5a2619c)
(cherry picked from commit 44c4d7b9521fe449e61edc614446195861932f8c)