ported why.js from deebot