(cherry picked from commit 764bb6e23989ef8c07cc95c0554ea8fbde43ae1d)
(cherry picked from commit 1c1c86026d86b106c09d02f4944d096611112b9b)
(cherry picked from commit ab29e9dead5ff5595090bd90245c7ede849a104c)