public override async Task <DialogTurnResult> ContinueDialogAsync(DialogContext dc, CancellationToken cancellationToken = default(CancellationToken))
        {
            var activity = dc.Context.Activity;

            //Handle case where we timed out
            var interrupted = dc.State.GetValue <bool>(TurnPath.Interrupted, () => false);

            if (!interrupted && activity.Type != ActivityTypes.Message && activity.Name == ActivityEventNames.ContinueConversation)
            {
                //Set max turns so that we evaluate the default when we visit the inputdialog.
                MaxTurnCount = 1;

                //We need to set interrupted here or it will discard the continueconversation event...
                dc.State.SetValue(TurnPath.Interrupted, true);
                return(await base.ContinueDialogAsync(dc, cancellationToken).ConfigureAwait(false));
            }
            else
            {
                //If we didn't timeout then we have to manage our timer somehow.
                //For starters, complete our existing timer.
                var timerId = dc.State.GetValue <string>("this.TimerId");

                //Should never happen but if it does, it shouldn't be fatal.
                if (timerId != null)
                {
                    await stateMatrix.CompleteAsync(timerId).ConfigureAwait(false);
                }

                //Begin dirty hack to start a timer for the reprompt

                //If our input was not valid, restart the timer.
                dc.State.SetValue(VALUE_PROPERTY, activity.Text); //OnRecognizeInput assumes this was already set earlier on in the dialog. We will set it and then unset it to simulate passing an argument to a function... :D
                if (await OnRecognizeInputAsync(dc, cancellationToken).ConfigureAwait(false) != InputState.Valid)
                {
                    //We are cheating to force this recognition here. Maybe not good?

                    //Known bug: Sometimes invalid input gets accepted anyway(due to max turns and defaulting rules), this will start a continuation for a thing it shouldn't.
                    //Sure do wish EndDialog was available to the adaptive stack.

                    var newTimerId = Guid.NewGuid().ToString();
                    CreateTimerForConversation(dc, newTimerId, cancellationToken);
                    await stateMatrix.StartAsync(newTimerId).ConfigureAwait(false);
                }

                //Clear our the input property after recognition since it will happen again later :D
                dc.State.SetValue(VALUE_PROPERTY, null);

                //End dirty hack
            }

            return(await base.ContinueDialogAsync(dc, cancellationToken).ConfigureAwait(false));
        }