(cherry picked from commit 249fe126eeaff7c6c3e8dfb1de9d1c397c0a110b)
(cherry picked from commit bb6d6dac798d0db3c3a2f878200129667e94864b)
(cherry picked from commit 470fb23ae1b4bd09bfef6ed076f9bd05ed443201)