(cherry picked from commit 08bb022cb507e06709180ce06ec6975e1d6a6a59)
(cherry picked from commit 04a42bc6d4e247f11d35c03c8b2f32b9e9795b79)
(cherry picked from commit 0ae6139e92110f3dbf7fcf766263880725f69dff)