(cherry picked from commit bc889d413d3a295361fc83a2f3bf4ab8c970bc1f)
(cherry picked from commit 1b020263101f5593979839cb6f1d86981d669dc0)
(cherry picked from commit 4fbacfe91e51f85804129b5e53b30053e16068c4)