(cherry picked from commit 648d5671aae775053ae19a8e8da41c0857f8c9aa)
(cherry picked from commit cf168259b87f15bbfe6588041eb836da65cdc7d3)
(cherry picked from commit 3044930620f58dbbc9cc7deca4957bf25091390e)