(cherry picked from commit 820dfc3364040d0e384b412c00f2a42c2480a8f0)
(cherry picked from commit 0762b01dc2fbfee2324d511a2cff09d8128ce039)
(cherry picked from commit 51ad93490f02eeee7305c763e6924fd4c52064a2)