The author disclaims copyright to this source code.