Ошибка вылезает потому, что в строке, которая вызывает ошибку, используются два списка its и its2.
Причем берется список its, в нем находится индекс некоторого значения new2, а затем в списке its2 ищется значение с этим индексом. Видимо, такого индекса там просто нет, и система сообщает об этом.
Почему именно в вашем its2 нет такого индекса, а главное - должен ли он там быть? Вот в чем вопрос. У вас там выше по коду идет активная работа с its, в него и добавляются новые значения, и убираются оттуда значения. Соответственно, никакой гарантии, что длина списка its будет равна длине списка its2 или как-то с ним синхронизирована, нет.
Поэтому в какой-то момент оказывается, что список its длиннее списка its2 и максимальное значение списка its имеет индекс, который больше самого большого индекса списка its2.
Что с этим делать? Логику программы я не разбирал подробно, но наверно надо постоянно оба списка синхронизировать как-то, тогда по крайней мере длина у них будет одинаковая и ЭТА ошибка не будет возникать.