(cherry picked from commit 7146fdc9b9640c140d39e676453c09fe6a5248a2)
(cherry picked from commit a9faeb1bdb58334b7446b776dcfba79e7ea75a8c)
(cherry picked from commit 23f483ac452c6f140b399351918caaffb54c7129)