(cherry picked from commit d07ec1990015f5d12b39da40ad0cb1ef0e798642)
(cherry picked from commit ac29248e10d6e2364138d11196151a9f445b379d)
(cherry picked from commit bf1ddd1c9137578b86895577d5b80e0c5771b605)