(cherry picked from commit 20594b8750b4fb5816e8f9d977671ddb55e033ad)
(cherry picked from commit dfb13a0460e2962acd8e9fde262b55c78fc8b9c6)
(cherry picked from commit 593efec69a2b0edbfcea9ea84d02ee4584df5bbe)