(cherry picked from commit 2e830d14d55b65a859306f4cc6982b9ee9ac9d14)
(cherry picked from commit 0582d41972cedcf4932348f64032cf0b9e43712c)
(cherry picked from commit 2aa372d8f4319959fb6a4b660034c9905668562e)