public void HandleModifierKeyDown([NotNull] WirelessNetworkAddress source, RemoteKeyModifier modifier)
        {
            Guard.NotNull(source, nameof(source));

            modifierStatePerDevice.EnsureDown(source, modifier);

            if (numberEntryState.Mode == NumberEntryMode.None)
            {
                NumberEntryMode newEntryMode = GetMatchingEntryModeForModifier(modifier);
                numberEntryState.ChangeMode(newEntryMode);

                bool isCurrentCompetitor = modifier == RemoteKeyModifier.EnterCurrentCompetitor;
                var args = new CompetitorSelectionEventArgs(isCurrentCompetitor);
                NotifyCompetitorSelecting?.Invoke(this, args);
            }
        }
        public void HandleModifierKeyUp([NotNull] WirelessNetworkAddress source, RemoteKeyModifier modifier)
        {
            Guard.NotNull(source, nameof(source));

            modifierStatePerDevice.EnsureNotDown(source, modifier);

            NumberEntryMode matchingEntryMode = GetMatchingEntryModeForModifier(modifier);

            if (numberEntryState.Mode == matchingEntryMode)
            {
                int? builtNumber = numberEntryState.Number;

                numberEntryState.ChangeMode(NumberEntryMode.None);

                bool isCurrentCompetitor = modifier == RemoteKeyModifier.EnterCurrentCompetitor;
                if (builtNumber == null || builtNumber == 0)
                {
                    var args = new CompetitorSelectionEventArgs(isCurrentCompetitor);
                    NotifyCompetitorSelectCanceled?.Invoke(this, args);
                }
                else
                {
                    var args = new CompetitorNumberSelectionEventArgs(builtNumber.Value, isCurrentCompetitor);
                    NotifyCompetitorSelected?.Invoke(this, args);
                }
            }
        }