Исходники под катом.
Оп.