Часть 1
Часть 2
Продолжение в комментариях.