Собственно выложил код с комментариями, но не могу понять что не так.