fix 18.4
add 26
implement using yield