Добавил комментарии и немного отрефакторил