(cherry picked from commit b25d9c0f0989ce66cf32a34068f7c966abdd0692)
(cherry picked from commit 2615054fb25f7ab52d74c5a4f27071156047894f)
(cherry picked from commit 0319056e4b8c8949c418da6fb9f1a392fad90af8)