[core] merge from trunk