code: def _handle_missing_parameters(parameter_values, all_params, required_params,
                                 existing_stack=None):
      
      missing_params = list(set(all_params) - set(parameter_values.keys()))
      if existing_stack and 'Parameters' in existing_stack:
          stack_parameters = [
              p["ParameterKey"] for p in existing_stack["Parameters"]
          ]
          for p in missing_params:
              if p in stack_parameters:
                  logger.debug(
                      "Using previous value for parameter %s from existing "
                      "stack",
                      p
                  )
                  parameter_values[p] = UsePreviousParameterValue
      final_missing = list(set(required_params) - set(parameter_values.keys()))
      if final_missing:
          raise MissingParameterException(final_missing)
  
      return list(parameter_values.items())
docs: Handles any missing parameters.
  
      If an existing_stack is provided, look up missing parameters there.
  
      Args:
          parameter_values (dict): key/value dictionary of stack definition
              parameters
          all_params (list): A list of all the parameters used by the
              template/blueprint.
          required_params (list): A list of all the parameters required by the
              template/blueprint.
          existing_stack (dict): A dict representation of the stack. If
              provided, will be searched for any missing parameters.
  
      Returns:
          list of tuples: The final list of key/value pairs returned as a
              list of tuples.
  
      Raises:
          MissingParameterException: Raised if a required parameter is
              still missing.