(cherry picked from commit e1a72779d4f29455a83837495317e74ec9608a84)
(cherry picked from commit 3802fee661b59cb43f07b3b44a8f8e94a500d111)
(cherry picked from commit 22adab859036096793bfef0d7771a9f37af83c8f)