private static ImmutableSortedDictionary <DateTime, State> AddOrUpdateStatesDictAndCleanOld(
            ImmutableSortedDictionary <DateTime, State> states, State newState,
            DateTime now)
        {
            var minEventTime = now - TimeSpan.FromMinutes(1);
            var old          = states.Keys.SkipWhile(e => e < minEventTime);

            states = states.RemoveRange(old);
            if (states.TryGetValue(now, out var oldState))
            {
                newState = new State(oldState, newState);
            }

            return(states.SetItem(now, newState));
        }