(cherry picked from commit 23f483ac452c6f140b399351918caaffb54c7129)
(cherry picked from commit fb90a85e43aca87705699425409e5bc2a3e6d659)
(cherry picked from commit 7af2a3bcc31dcfdc65db4fec968008b3a834bd2e)