diff --git a/7.1.211 b/7.1.211
new file mode 100644
index 0000000..38e3ea1
--- /dev/null
+++ b/7.1.211
@@ -0,0 +1,748 @@
+To: vim-dev@vim.org
+Subject: Patch 7.1.211
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=ISO-8859-1
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 7.1.211
+Problem:    The matchparen plugin may take an unexpected amount of time, so
+	    that it looks like Vim hangs.
+Solution:   Add a timeout to searchpair(), searchpairpos(), search() and
+	    searchpos().  Use half a second timeout in the plugin.
+Files:	    runtime/doc/eval.txt, runtime/plugin/matchparen.vim, src/edit.c,
+	    src/eval.c, src/ex_cmds2.c, src/ex_docmd.c, src/normal.c,
+	    src/proto/eval.pro, src/proto/ex_cmds2.pro, src/proto/search.pro,
+	    src/search.c
+
+
+*** ../vim-7.1.210/runtime/doc/eval.txt	Sat Jan  5 13:34:01 2008
+--- runtime/doc/eval.txt	Sun Jan  6 16:27:33 2008
+***************
+*** 1,4 ****
+! *eval.txt*      For Vim version 7.1.  Last change: 2008 Jan 04
+  
+  
+  		  VIM REFERENCE MANUAL    by Bram Moolenaar
+--- 1,4 ----
+! *eval.txt*      For Vim version 7.1.  Last change: 2008 Jan 06
+  
+  
+  		  VIM REFERENCE MANUAL    by Bram Moolenaar
+***************
+*** 1733,1746 ****
+  repeat( {expr}, {count})	String	repeat {expr} {count} times
+  resolve( {filename})		String	get filename a shortcut points to
+  reverse( {list})		List	reverse {list} in-place
+! search( {pattern} [, {flags}])	Number	search for {pattern}
+  searchdecl({name} [, {global} [, {thisblock}]])
+  				Number  search for variable declaration
+! searchpair( {start}, {middle}, {end} [, {flags} [, {skip} [, {stopline}]]])
+  				Number	search for other end of start/end pair
+! searchpairpos( {start}, {middle}, {end} [, {flags} [, {skip} [, {stopline}]]])
+  				List	search for other end of start/end pair
+! searchpos( {pattern} [, {flags} [, {stopline}]])
+  				List	search for {pattern}
+  server2client( {clientid}, {string})
+  				Number	send reply string
+--- 1733,1747 ----
+  repeat( {expr}, {count})	String	repeat {expr} {count} times
+  resolve( {filename})		String	get filename a shortcut points to
+  reverse( {list})		List	reverse {list} in-place
+! search( {pattern} [, {flags} [, {stopline} [, {timeout}]]])
+! 				Number	search for {pattern}
+  searchdecl({name} [, {global} [, {thisblock}]])
+  				Number  search for variable declaration
+! searchpair( {start}, {middle}, {end} [, {flags} [, {skip} [...]]])
+  				Number	search for other end of start/end pair
+! searchpairpos( {start}, {middle}, {end} [, {flags} [, {skip} [...]]])
+  				List	search for other end of start/end pair
+! searchpos( {pattern} [, {flags} [, {stopline} [, {timeout}]]])
+  				List	search for {pattern}
+  server2client( {clientid}, {string})
+  				Number	send reply string
+***************
+*** 4212,4218 ****
+  		If you want a list to remain unmodified make a copy first: >
+  			:let revlist = reverse(copy(mylist))
+  
+! search({pattern} [, {flags} [, {stopline}]])			*search()*
+  		Search for regexp pattern {pattern}.  The search starts at the
+  		cursor position (you can use |cursor()| to set it).
+  
+--- 4216,4222 ----
+  		If you want a list to remain unmodified make a copy first: >
+  			:let revlist = reverse(copy(mylist))
+  
+! search({pattern} [, {flags} [, {stopline} [, {timeout}]]])	*search()*
+  		Search for regexp pattern {pattern}.  The search starts at the
+  		cursor position (you can use |cursor()| to set it).
+  
+***************
+*** 4240,4245 ****
+--- 4244,4257 ----
+  			let end = search('END', '', line("w$"))
+  <		When {stopline} is used and it is not zero this also implies
+  		that the search does not wrap around the end of the file.
++ 		A zero value is equal to not giving the argument.
++ 
++ 		When the {timeout} argument is given the search stops when
++ 		more than this many milli seconds have passed.  Thus when
++ 		{timeout} is 500 the search stops after half a second.
++ 		The value must not be negative.  A zero value is like not
++ 		giving the argument.
++ 		{only available when compiled with the +reltime feature}
+  
+  		If there is no match a 0 is returned and the cursor doesn't
+  		move.  No error message is given.
+***************
+*** 4302,4308 ****
+  			endif
+  <
+  							*searchpair()*
+! searchpair({start}, {middle}, {end} [, {flags} [, {skip} [, {stopline}]]])
+  		Search for the match of a nested start-end pair.  This can be
+  		used to find the "endif" that matches an "if", while other
+  		if/endif pairs in between are ignored.
+--- 4314,4321 ----
+  			endif
+  <
+  							*searchpair()*
+! searchpair({start}, {middle}, {end} [, {flags} [, {skip}
+! 				[, {stopline} [, {timeout}]]]])
+  		Search for the match of a nested start-end pair.  This can be
+  		used to find the "endif" that matches an "if", while other
+  		if/endif pairs in between are ignored.
+***************
+*** 4337,4343 ****
+  		When evaluating {skip} causes an error the search is aborted
+  		and -1 returned.
+  
+! 		For {stopline} see |search()|.
+  
+  		The value of 'ignorecase' is used.  'magic' is ignored, the
+  		patterns are used like it's on.
+--- 4350,4356 ----
+  		When evaluating {skip} causes an error the search is aborted
+  		and -1 returned.
+  
+! 		For {stopline} and {timeout} see |search()|.
+  
+  		The value of 'ignorecase' is used.  'magic' is ignored, the
+  		patterns are used like it's on.
+***************
+*** 4383,4389 ****
+  	     \ 'synIDattr(synID(line("."), col("."), 0), "name") =~? "string"')
+  <
+  							*searchpairpos()*
+! searchpairpos({start}, {middle}, {end} [, {flags} [, {skip} [, {stopline}]]])
+  		Same as searchpair(), but returns a |List| with the line and
+  		column position of the match. The first element of the |List|
+  		is the line number and the second element is the byte index of
+--- 4396,4403 ----
+  	     \ 'synIDattr(synID(line("."), col("."), 0), "name") =~? "string"')
+  <
+  							*searchpairpos()*
+! searchpairpos({start}, {middle}, {end} [, {flags} [, {skip}
+! 				[, {stopline} [, {timeout}]]]])
+  		Same as searchpair(), but returns a |List| with the line and
+  		column position of the match. The first element of the |List|
+  		is the line number and the second element is the byte index of
+***************
+*** 4394,4400 ****
+  <
+  		See |match-parens| for a bigger and more useful example.
+  
+! searchpos({pattern} [, {flags} [, {stopline}]])		*searchpos()*
+  		Same as |search()|, but returns a |List| with the line and
+  		column position of the match. The first element of the |List|
+  		is the line number and the second element is the byte index of
+--- 4408,4414 ----
+  <
+  		See |match-parens| for a bigger and more useful example.
+  
+! searchpos({pattern} [, {flags} [, {stopline} [, {timeout}]]])	*searchpos()*
+  		Same as |search()|, but returns a |List| with the line and
+  		column position of the match. The first element of the |List|
+  		is the line number and the second element is the byte index of
+*** ../vim-7.1.210/runtime/plugin/matchparen.vim	Sat Aug 18 18:20:57 2007
+--- runtime/plugin/matchparen.vim	Sun Jan  6 16:22:39 2008
+***************
+*** 1,6 ****
+  " Vim plugin for showing matching parens
+  " Maintainer:  Bram Moolenaar <Bram@vim.org>
+! " Last Change: 2007 Aug 8
+  
+  " Exit quickly when:
+  " - this plugin was already loaded (or disabled)
+--- 1,6 ----
+  " Vim plugin for showing matching parens
+  " Maintainer:  Bram Moolenaar <Bram@vim.org>
+! " Last Change: 2008 Jan 06
+  
+  " Exit quickly when:
+  " - this plugin was already loaded (or disabled)
+***************
+*** 111,117 ****
+  	\ '=~?  "string\\|character\\|singlequote\\|comment"'
+    execute 'if' s_skip '| let s_skip = 0 | endif'
+  
+!   let [m_lnum, m_col] = searchpairpos(c, '', c2, s_flags, s_skip, stopline)
+  
+    if before > 0
+      call winrestview(save_cursor)
+--- 111,122 ----
+  	\ '=~?  "string\\|character\\|singlequote\\|comment"'
+    execute 'if' s_skip '| let s_skip = 0 | endif'
+  
+!   try
+!     " Limit the search time to 500 msec to avoid a hang on very long lines.
+!     let [m_lnum, m_col] = searchpairpos(c, '', c2, s_flags, s_skip, stopline, 500)
+!   catch /E118/
+!     let [m_lnum, m_col] = searchpairpos(c, '', c2, s_flags, s_skip, stopline)
+!   endtry
+  
+    if before > 0
+      call winrestview(save_cursor)
+*** ../vim-7.1.210/src/edit.c	Wed Jan  2 22:08:43 2008
+--- src/edit.c	Sun Jan  6 16:08:00 2008
+***************
+*** 4062,4068 ****
+  		    found_new_match = searchit(NULL, ins_buf, pos,
+  							      compl_direction,
+  				 compl_pattern, 1L, SEARCH_KEEP + SEARCH_NFMSG,
+! 							RE_LAST, (linenr_T)0);
+  		--msg_silent;
+  		if (!compl_started)
+  		{
+--- 4062,4068 ----
+  		    found_new_match = searchit(NULL, ins_buf, pos,
+  							      compl_direction,
+  				 compl_pattern, 1L, SEARCH_KEEP + SEARCH_NFMSG,
+! 						  RE_LAST, (linenr_T)0, NULL);
+  		--msg_silent;
+  		if (!compl_started)
+  		{
+*** ../vim-7.1.210/src/eval.c	Sat Jan  5 22:15:21 2008
+--- src/eval.c	Sun Jan  6 16:37:42 2008
+***************
+*** 7213,7223 ****
+      {"repeat",		2, 2, f_repeat},
+      {"resolve",		1, 1, f_resolve},
+      {"reverse",		1, 1, f_reverse},
+!     {"search",		1, 3, f_search},
+      {"searchdecl",	1, 3, f_searchdecl},
+!     {"searchpair",	3, 6, f_searchpair},
+!     {"searchpairpos",	3, 6, f_searchpairpos},
+!     {"searchpos",	1, 3, f_searchpos},
+      {"server2client",	2, 2, f_server2client},
+      {"serverlist",	0, 0, f_serverlist},
+      {"setbufvar",	3, 3, f_setbufvar},
+--- 7213,7223 ----
+      {"repeat",		2, 2, f_repeat},
+      {"resolve",		1, 1, f_resolve},
+      {"reverse",		1, 1, f_reverse},
+!     {"search",		1, 4, f_search},
+      {"searchdecl",	1, 3, f_searchdecl},
+!     {"searchpair",	3, 7, f_searchpair},
+!     {"searchpairpos",	3, 7, f_searchpairpos},
+!     {"searchpos",	1, 4, f_searchpos},
+      {"server2client",	2, 2, f_server2client},
+      {"serverlist",	0, 0, f_serverlist},
+      {"setbufvar",	3, 3, f_setbufvar},
+***************
+*** 14020,14025 ****
+--- 14020,14029 ----
+      int		dir;
+      int		retval = 0;	/* default: FAIL */
+      long	lnum_stop = 0;
++     proftime_T	tm;
++ #ifdef FEAT_RELTIME
++     long	time_limit = 0;
++ #endif
+      int		options = SEARCH_KEEP;
+      int		subpatnum;
+  
+***************
+*** 14033,14047 ****
+      if (flags & SP_END)
+  	options |= SEARCH_END;
+  
+!     /* Optional extra argument: line number to stop searching. */
+!     if (argvars[1].v_type != VAR_UNKNOWN
+! 	    && argvars[2].v_type != VAR_UNKNOWN)
+      {
+  	lnum_stop = get_tv_number_chk(&argvars[2], NULL);
+  	if (lnum_stop < 0)
+  	    goto theend;
+      }
+  
+      /*
+       * This function does not accept SP_REPEAT and SP_RETCOUNT flags.
+       * Check to make sure only those flags are set.
+--- 14037,14063 ----
+      if (flags & SP_END)
+  	options |= SEARCH_END;
+  
+!     /* Optional arguments: line number to stop searching and timeout. */
+!     if (argvars[1].v_type != VAR_UNKNOWN && argvars[2].v_type != VAR_UNKNOWN)
+      {
+  	lnum_stop = get_tv_number_chk(&argvars[2], NULL);
+  	if (lnum_stop < 0)
+  	    goto theend;
++ #ifdef FEAT_RELTIME
++ 	if (argvars[3].v_type != VAR_UNKNOWN)
++ 	{
++ 	    time_limit = get_tv_number_chk(&argvars[3], NULL);
++ 	    if (time_limit < 0)
++ 		goto theend;
++ 	}
++ #endif
+      }
+  
++ #ifdef FEAT_RELTIME
++     /* Set the time limit, if there is one. */
++     profile_setlimit(time_limit, &tm);
++ #endif
++ 
+      /*
+       * This function does not accept SP_REPEAT and SP_RETCOUNT flags.
+       * Check to make sure only those flags are set.
+***************
+*** 14057,14063 ****
+  
+      pos = save_cursor = curwin->w_cursor;
+      subpatnum = searchit(curwin, curbuf, &pos, dir, pat, 1L,
+! 				     options, RE_SEARCH, (linenr_T)lnum_stop);
+      if (subpatnum != FAIL)
+      {
+  	if (flags & SP_SUBPAT)
+--- 14073,14079 ----
+  
+      pos = save_cursor = curwin->w_cursor;
+      subpatnum = searchit(curwin, curbuf, &pos, dir, pat, 1L,
+! 				options, RE_SEARCH, (linenr_T)lnum_stop, &tm);
+      if (subpatnum != FAIL)
+      {
+  	if (flags & SP_SUBPAT)
+***************
+*** 14147,14152 ****
+--- 14163,14169 ----
+      char_u	nbuf3[NUMBUFLEN];
+      int		retval = 0;		/* default: FAIL */
+      long	lnum_stop = 0;
++     long	time_limit = 0;
+  
+      /* Get the three pattern arguments: start, middle, end. */
+      spat = get_tv_string_chk(&argvars[0]);
+***************
+*** 14182,14194 ****
+  	    lnum_stop = get_tv_number_chk(&argvars[5], NULL);
+  	    if (lnum_stop < 0)
+  		goto theend;
+  	}
+      }
+      if (skip == NULL)
+  	goto theend;	    /* type error */
+  
+      retval = do_searchpair(spat, mpat, epat, dir, skip, flags,
+! 							match_pos, lnum_stop);
+  
+  theend:
+      p_ws = save_p_ws;
+--- 14199,14219 ----
+  	    lnum_stop = get_tv_number_chk(&argvars[5], NULL);
+  	    if (lnum_stop < 0)
+  		goto theend;
++ #ifdef FEAT_RELTIME
++ 	    if (argvars[6].v_type != VAR_UNKNOWN)
++ 	    {
++ 		time_limit = get_tv_number_chk(&argvars[6], NULL);
++ 		if (time_limit < 0)
++ 		    goto theend;
++ 	    }
++ #endif
+  	}
+      }
+      if (skip == NULL)
+  	goto theend;	    /* type error */
+  
+      retval = do_searchpair(spat, mpat, epat, dir, skip, flags,
+! 					    match_pos, lnum_stop, time_limit);
+  
+  theend:
+      p_ws = save_p_ws;
+***************
+*** 14240,14246 ****
+   * Returns 0 or -1 for no match,
+   */
+      long
+! do_searchpair(spat, mpat, epat, dir, skip, flags, match_pos, lnum_stop)
+      char_u	*spat;	    /* start pattern */
+      char_u	*mpat;	    /* middle pattern */
+      char_u	*epat;	    /* end pattern */
+--- 14265,14272 ----
+   * Returns 0 or -1 for no match,
+   */
+      long
+! do_searchpair(spat, mpat, epat, dir, skip, flags, match_pos,
+! 							lnum_stop, time_limit)
+      char_u	*spat;	    /* start pattern */
+      char_u	*mpat;	    /* middle pattern */
+      char_u	*epat;	    /* end pattern */
+***************
+*** 14249,14254 ****
+--- 14275,14281 ----
+      int		flags;	    /* SP_SETPCMARK and other SP_ values */
+      pos_T	*match_pos;
+      linenr_T	lnum_stop;  /* stop at this line if not zero */
++     long	time_limit; /* stop after this many msec */
+  {
+      char_u	*save_cpo;
+      char_u	*pat, *pat2 = NULL, *pat3 = NULL;
+***************
+*** 14263,14273 ****
+--- 14290,14306 ----
+      int		nest = 1;
+      int		err;
+      int		options = SEARCH_KEEP;
++     proftime_T	tm;
+  
+      /* Make 'cpoptions' empty, the 'l' flag should not be used here. */
+      save_cpo = p_cpo;
+      p_cpo = (char_u *)"";
+  
++ #ifdef FEAT_RELTIME
++     /* Set the time limit, if there is one. */
++     profile_setlimit(time_limit, &tm);
++ #endif
++ 
+      /* Make two search patterns: start/end (pat2, for in nested pairs) and
+       * start/middle/end (pat3, for the top pair). */
+      pat2 = alloc((unsigned)(STRLEN(spat) + STRLEN(epat) + 15));
+***************
+*** 14291,14297 ****
+      for (;;)
+      {
+  	n = searchit(curwin, curbuf, &pos, dir, pat, 1L,
+! 					       options, RE_SEARCH, lnum_stop);
+  	if (n == FAIL || (firstpos.lnum != 0 && equalpos(pos, firstpos)))
+  	    /* didn't find it or found the first match again: FAIL */
+  	    break;
+--- 14324,14330 ----
+      for (;;)
+      {
+  	n = searchit(curwin, curbuf, &pos, dir, pat, 1L,
+! 					   options, RE_SEARCH, lnum_stop, &tm);
+  	if (n == FAIL || (firstpos.lnum != 0 && equalpos(pos, firstpos)))
+  	    /* didn't find it or found the first match again: FAIL */
+  	    break;
+*** ../vim-7.1.210/src/ex_cmds2.c	Fri Jan  4 16:00:10 2008
+--- src/ex_cmds2.c	Sun Jan  6 18:22:28 2008
+***************
+*** 895,913 ****
+      sprintf(buf, "%10.6lf", (double)tm->QuadPart / (double)fr.QuadPart);
+  # else
+      sprintf(buf, "%3ld.%06ld", (long)tm->tv_sec, (long)tm->tv_usec);
+! #endif
+      return buf;
+  }
+  
+! # endif  /* FEAT_PROFILE || FEAT_RELTIME */
+  
+- # if defined(FEAT_PROFILE) || defined(PROTO)
+  /*
+!  * Functions for profiling.
+   */
+! static void script_do_profile __ARGS((scriptitem_T *si));
+! static void script_dump_profile __ARGS((FILE *fd));
+! static proftime_T prof_wait_time;
+  
+  /*
+   * Set the time in "tm" to zero.
+--- 895,955 ----
+      sprintf(buf, "%10.6lf", (double)tm->QuadPart / (double)fr.QuadPart);
+  # else
+      sprintf(buf, "%3ld.%06ld", (long)tm->tv_sec, (long)tm->tv_usec);
+! # endif
+      return buf;
+  }
+  
+! /*
+!  * Put the time "msec" past now in "tm".
+!  */
+!     void
+! profile_setlimit(msec, tm)
+!     long	msec;
+!     proftime_T	*tm;
+! {
+!     if (msec <= 0)   /* no limit */
+! 	profile_zero(tm);
+!     else
+!     {
+! # ifdef WIN3264
+! 	LARGE_INTEGER   fr;
+! 
+! 	QueryPerformanceCounter(tm);
+! 	QueryPerformanceFrequency(&fr);
+! 	tm->QuadPart +=  (double)msec / 1000.0 * (double)fr.QuadPart;
+! # else
+! 	long	    usec;
+! 
+! 	gettimeofday(tm, NULL);
+! 	usec = (long)tm->tv_usec + (long)msec * 1000;
+! 	tm->tv_usec = usec % 1000000L;
+! 	tm->tv_sec += usec / 1000000L;
+! # endif
+!     }
+! }
+  
+  /*
+!  * Return TRUE if the current time is past "tm".
+   */
+!     int
+! profile_passed_limit(tm)
+!     proftime_T	*tm;
+! {
+!     proftime_T	now;
+! 
+! # ifdef WIN3264
+!     if (tm->QuadPart == 0)  /* timer was not set */
+! 	return FALSE;
+!     QueryPerformanceCounter(&now);
+!     return (now.QuadPart > tm->QuadPart);
+! # else
+!     if (tm->tv_sec == 0)    /* timer was not set */
+! 	return FALSE;
+!     gettimeofday(&now, NULL);
+!     return (now.tv_sec > tm->tv_sec
+! 	    || (now.tv_sec == tm->tv_sec && now.tv_usec > tm->tv_usec));
+! # endif
+! }
+  
+  /*
+   * Set the time in "tm" to zero.
+***************
+*** 923,928 ****
+--- 965,980 ----
+      tm->tv_sec = 0;
+  # endif
+  }
++ 
++ # endif  /* FEAT_PROFILE || FEAT_RELTIME */
++ 
++ # if defined(FEAT_PROFILE) || defined(PROTO)
++ /*
++  * Functions for profiling.
++  */
++ static void script_do_profile __ARGS((scriptitem_T *si));
++ static void script_dump_profile __ARGS((FILE *fd));
++ static proftime_T prof_wait_time;
+  
+  /*
+   * Add the time "tm2" to "tm".
+*** ../vim-7.1.210/src/ex_docmd.c	Fri Jan  4 16:00:10 2008
+--- src/ex_docmd.c	Sun Jan  6 16:08:29 2008
+***************
+*** 3979,3985 ****
+  					*cmd == '?' ? BACKWARD : FORWARD,
+  					(char_u *)"", 1L,
+  					SEARCH_MSG + SEARCH_START,
+! 						      i, (linenr_T)0) != FAIL)
+  				lnum = pos.lnum;
+  			    else
+  			    {
+--- 3980,3986 ----
+  					*cmd == '?' ? BACKWARD : FORWARD,
+  					(char_u *)"", 1L,
+  					SEARCH_MSG + SEARCH_START,
+! 						i, (linenr_T)0, NULL) != FAIL)
+  				lnum = pos.lnum;
+  			    else
+  			    {
+*** ../vim-7.1.210/src/normal.c	Sat Jan  5 13:34:01 2008
+--- src/normal.c	Sun Jan  6 16:08:54 2008
+***************
+*** 4194,4200 ****
+      for (;;)
+      {
+  	t = searchit(curwin, curbuf, &curwin->w_cursor, FORWARD,
+! 				  pat, 1L, searchflags, RE_LAST, (linenr_T)0);
+  	if (curwin->w_cursor.lnum >= old_pos.lnum)
+  	    t = FAIL;	/* match after start is failure too */
+  
+--- 4194,4200 ----
+      for (;;)
+      {
+  	t = searchit(curwin, curbuf, &curwin->w_cursor, FORWARD,
+! 			    pat, 1L, searchflags, RE_LAST, (linenr_T)0, NULL);
+  	if (curwin->w_cursor.lnum >= old_pos.lnum)
+  	    t = FAIL;	/* match after start is failure too */
+  
+*** ../vim-7.1.210/src/proto/eval.pro	Sun May  6 15:18:09 2007
+--- src/proto/eval.pro	Sun Jan  6 15:55:47 2008
+***************
+*** 54,60 ****
+  long get_dict_number __ARGS((dict_T *d, char_u *key));
+  char_u *get_function_name __ARGS((expand_T *xp, int idx));
+  char_u *get_expr_name __ARGS((expand_T *xp, int idx));
+! long do_searchpair __ARGS((char_u *spat, char_u *mpat, char_u *epat, int dir, char_u *skip, int flags, pos_T *match_pos, linenr_T lnum_stop));
+  void set_vim_var_nr __ARGS((int idx, long val));
+  long get_vim_var_nr __ARGS((int idx));
+  char_u *get_vim_var_str __ARGS((int idx));
+--- 54,60 ----
+  long get_dict_number __ARGS((dict_T *d, char_u *key));
+  char_u *get_function_name __ARGS((expand_T *xp, int idx));
+  char_u *get_expr_name __ARGS((expand_T *xp, int idx));
+! long do_searchpair __ARGS((char_u *spat, char_u *mpat, char_u *epat, int dir, char_u *skip, int flags, pos_T *match_pos, linenr_T lnum_stop, long time_limit));
+  void set_vim_var_nr __ARGS((int idx, long val));
+  long get_vim_var_nr __ARGS((int idx));
+  char_u *get_vim_var_str __ARGS((int idx));
+*** ../vim-7.1.210/src/proto/ex_cmds2.pro	Sat May  5 20:21:13 2007
+--- src/proto/ex_cmds2.pro	Sun Jan  6 16:42:24 2008
+***************
+*** 14,19 ****
+--- 14,21 ----
+  void profile_end __ARGS((proftime_T *tm));
+  void profile_sub __ARGS((proftime_T *tm, proftime_T *tm2));
+  char *profile_msg __ARGS((proftime_T *tm));
++ void profile_setlimit __ARGS((long msec, proftime_T *tm));
++ int profile_passed_limit __ARGS((proftime_T *tm));
+  void profile_zero __ARGS((proftime_T *tm));
+  void profile_add __ARGS((proftime_T *tm, proftime_T *tm2));
+  void profile_self __ARGS((proftime_T *self, proftime_T *total, proftime_T *children));
+*** ../vim-7.1.210/src/proto/search.pro	Wed Aug  8 22:48:16 2007
+--- src/proto/search.pro	Sun Jan  6 16:11:53 2008
+***************
+*** 10,16 ****
+  void reset_search_dir __ARGS((void));
+  void set_last_search_pat __ARGS((char_u *s, int idx, int magic, int setlast));
+  void last_pat_prog __ARGS((regmmatch_T *regmatch));
+! int searchit __ARGS((win_T *win, buf_T *buf, pos_T *pos, int dir, char_u *pat, long count, int options, int pat_use, linenr_T stop_lnum));
+  int do_search __ARGS((oparg_T *oap, int dirc, char_u *pat, long count, int options));
+  int search_for_exact_line __ARGS((buf_T *buf, pos_T *pos, int dir, char_u *pat));
+  int searchc __ARGS((cmdarg_T *cap, int t_cmd));
+--- 10,16 ----
+  void reset_search_dir __ARGS((void));
+  void set_last_search_pat __ARGS((char_u *s, int idx, int magic, int setlast));
+  void last_pat_prog __ARGS((regmmatch_T *regmatch));
+! int searchit __ARGS((win_T *win, buf_T *buf, pos_T *pos, int dir, char_u *pat, long count, int options, int pat_use, linenr_T stop_lnum, proftime_T *tm));
+  int do_search __ARGS((oparg_T *oap, int dirc, char_u *pat, long count, int options));
+  int search_for_exact_line __ARGS((buf_T *buf, pos_T *pos, int dir, char_u *pat));
+  int searchc __ARGS((cmdarg_T *cap, int t_cmd));
+*** ../vim-7.1.210/src/search.c	Tue Jan  1 15:42:45 2008
+--- src/search.c	Sun Jan  6 18:23:37 2008
+***************
+*** 494,501 ****
+   * When FEAT_EVAL is defined, returns the index of the first matching
+   * subpattern plus one; one if there was none.
+   */
+      int
+! searchit(win, buf, pos, dir, pat, count, options, pat_use, stop_lnum)
+      win_T	*win;		/* window to search in; can be NULL for a
+  				   buffer without a window! */
+      buf_T	*buf;
+--- 494,502 ----
+   * When FEAT_EVAL is defined, returns the index of the first matching
+   * subpattern plus one; one if there was none.
+   */
++ /*ARGSUSED*/
+      int
+! searchit(win, buf, pos, dir, pat, count, options, pat_use, stop_lnum, tm)
+      win_T	*win;		/* window to search in; can be NULL for a
+  				   buffer without a window! */
+      buf_T	*buf;
+***************
+*** 506,511 ****
+--- 507,513 ----
+      int		options;
+      int		pat_use;	/* which pattern to use when "pat" is empty */
+      linenr_T	stop_lnum;	/* stop after this line number when != 0 */
++     proftime_T	*tm;		/* timeout limit or NULL */
+  {
+      int		found;
+      linenr_T	lnum;		/* no init to shut up Apollo cc */
+***************
+*** 594,599 ****
+--- 596,606 ----
+  		if (stop_lnum != 0 && (dir == FORWARD
+  				       ? lnum > stop_lnum : lnum < stop_lnum))
+  		    break;
++ #ifdef FEAT_RELTIME
++ 		/* Stop after passing the "tm" time limit. */
++ 		if (tm != NULL && profile_passed_limit(tm))
++ 		    break;
++ #endif
+  
+  		/*
+  		 * Look for a match somewhere in line "lnum".
+***************
+*** 1249,1255 ****
+  		       (SEARCH_KEEP + SEARCH_PEEK + SEARCH_HIS
+  			+ SEARCH_MSG + SEARCH_START
+  			+ ((pat != NULL && *pat == ';') ? 0 : SEARCH_NOOF))),
+! 		RE_LAST, (linenr_T)0);
+  
+  	if (dircp != NULL)
+  	    *dircp = dirc;	/* restore second '/' or '?' for normal_cmd() */
+--- 1256,1262 ----
+  		       (SEARCH_KEEP + SEARCH_PEEK + SEARCH_HIS
+  			+ SEARCH_MSG + SEARCH_START
+  			+ ((pat != NULL && *pat == ';') ? 0 : SEARCH_NOOF))),
+! 		RE_LAST, (linenr_T)0, NULL);
+  
+  	if (dircp != NULL)
+  	    *dircp = dirc;	/* restore second '/' or '?' for normal_cmd() */
+***************
+*** 3780,3786 ****
+  	if (do_searchpair((char_u *)"<[^ \t>/!]\\+\\%(\\_s\\_[^>]\\{-}[^/]>\\|$\\|\\_s\\=>\\)",
+  		    (char_u *)"",
+  		    (char_u *)"</[^>]*>", BACKWARD, (char_u *)"", 0,
+! 						      NULL, (linenr_T)0) <= 0)
+  	{
+  	    curwin->w_cursor = old_pos;
+  	    goto theend;
+--- 3787,3793 ----
+  	if (do_searchpair((char_u *)"<[^ \t>/!]\\+\\%(\\_s\\_[^>]\\{-}[^/]>\\|$\\|\\_s\\=>\\)",
+  		    (char_u *)"",
+  		    (char_u *)"</[^>]*>", BACKWARD, (char_u *)"", 0,
+! 						  NULL, (linenr_T)0, 0L) <= 0)
+  	{
+  	    curwin->w_cursor = old_pos;
+  	    goto theend;
+***************
+*** 3814,3820 ****
+      sprintf((char *)epat, "</%.*s>\\c", len, p);
+  
+      r = do_searchpair(spat, (char_u *)"", epat, FORWARD, (char_u *)"",
+! 						       0, NULL, (linenr_T)0);
+  
+      vim_free(spat);
+      vim_free(epat);
+--- 3821,3827 ----
+      sprintf((char *)epat, "</%.*s>\\c", len, p);
+  
+      r = do_searchpair(spat, (char_u *)"", epat, FORWARD, (char_u *)"",
+! 						    0, NULL, (linenr_T)0, 0L);
+  
+      vim_free(spat);
+      vim_free(epat);
+*** ../vim-7.1.210/src/version.c	Sun Jan  6 17:18:16 2008
+--- src/version.c	Sun Jan  6 20:00:03 2008
+***************
+*** 668,669 ****
+--- 668,671 ----
+  {   /* Add new patch number below this line */
++ /**/
++     211,
+  /**/
+
+-- 
+No letters of the alphabet were harmed in the creation of this message.
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net   \\\
+///        sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\        download, build and distribute -- http://www.A-A-P.org        ///
+ \\\            help me help AIDS victims -- http://ICCF-Holland.org    ///
diff --git a/README.patches b/README.patches
index 4c8f94e..9032033 100644
--- a/README.patches
+++ b/README.patches
@@ -25,6 +25,7 @@ Checksums for the patch files can be found in the file MD5.
 Collection of patches for Vim 7.1:
   SIZE  NAME                  INCLUDES
  91424  7.1.001-100.gz	      patches 7.1.001 to 7.1.100, gzip'ed
+ 75402  7.1.101-200.gz	      patches 7.1.101 to 7.1.200, gzip'ed
 
 
 Individual patches for Vim 7.1:
@@ -155,6 +156,7 @@ Individual patches for Vim 7.1:
   2599  7.1.124  (extra) Mac: may get empty buffer if dropping file on Vim.app
  12060  7.1.125  the TermResponse autocommand event is not always triggered
  13372  7.1.126  (extra) ":vimgrep */*" doesn't work if autocmd changes dir
+        12461  7.1.126ne  replacement for 7.1.126 without the (extra)
   2319  7.1.127  memory leak when doing completing
   2079  7.1.128  (extra) build problem with Cygwin
   1740  7.1.129  (extra) Win32: Can't get long user name
@@ -204,3 +206,39 @@ Individual patches for Vim 7.1:
   1928  7.1.173  accessing freed memory when using "\%^" pattern
   2197  7.1.174  writing NUL past end of a buffer
   4722  7.1.175  <BS> doesn't work with some combination of option settings
+  2943  7.1.176  compiling with Aap fails if "compiledby" contains '<' or '>'
+  5450  7.1.177  freeing memory twice when in debug mode while reading a script
+  1567  7.1.178  "%" doesn't work on "/* comment *//* comment */"
+  6581  7.1.179  configure doesn't find TCL 8.5
+  7099  7.1.180  regexp patterns are not sufficiently tested
+  1878  7.1.181  accessing uninitialized memory in Farsi mode with ":s"
+  5457  7.1.182  with tab pages and an argument list session file may be wrong
+  2489  7.1.183  Internal error for ":echo matchstr('a', 'a\%[\&]')"
+  2132  7.1.184  crash when deleting backwards over a line break in Insert mode
+  3744  7.1.185  "gR" and then BS doesn't work properly with multi-byte chars
+  3294  7.1.186  "expand('<afile>')" returns a bogus value after ":cd dir"
+  2341  7.1.187  Win32 GUI: custom completion using system() doesn't work
+  1688  7.1.188  "W10" message could be displayed in the second column
+  1950  7.1.189  (after 7.1.104) need to call plain_vgetc() in ask_yesno()
+  1685  7.1.190  cursor after end-of-line: "iA sentence.<Esc>)"
+  2007  7.1.191  Win32 GUI: when not in focus click in scrollbar doesn't work 
+  2605  7.1.192  CTRL-C doesn't stop duplicating text for "s" in Visual block
+  2962  7.1.193  some of the Vim 5.x digraphs could be supported
+  1650  7.1.194  Unix: ":echo glob('~/{}')" results in "/home/user//"
+  2273  7.1.195  '0 mark doesn't work for "~/foo ~ foo"
+  2642  7.1.196  (extra) Win32 GUI: "\n" in a tooltip doesn't cause line break
+  2308  7.1.197  Mac: "make install" doesn't work when $prefix is set
+  1460  7.1.198  hang when using ":s/\n//gn"
+  3572  7.1.199  can't do command line completion for a file name extension
+  2310  7.1.200  (after 7.1.177 and 7.1.182) compiler warnings
+  2705  7.1.201  when reading stdin 'fenc' and 'ff' are not set
+  2383  7.1.202  incomplete utf-8 byte sequence is not checked for validity
+  2261  7.1.203  if 'virtualedit' is "onemore" then ":normal 99|" is not right
+  2891  7.1.204  (extra) Win32: 'balloonexpr' tooltip disappears after 4 sec
+  5481  7.1.205  can't get the operator in an ":omap"
+  1690  7.1.206  compiler warnings when using MODIFIED_BY
+  7708  7.1.207  netbeans: "remove" cannot delete one line
+  2051  7.1.208  on Alpha get an unaligned access error
+  2249  7.1.209  GTK GUI: when using the netrw plugin ":gui" causes a hang
+  1923  7.1.210  listing mapping for 0xdb fails when 'encoding' is utf-8
+ 25525  7.1.211  matchparen plugin may take so long it looks like Vim hangs
diff --git a/vim.spec b/vim.spec
index 9983d68..d8fa5ab 100644
--- a/vim.spec
+++ b/vim.spec
@@ -15,7 +15,7 @@
 #used for pre-releases:
 %define beta %{nil}
 %define vimdir vim71%{?beta}
-%define patchlevel 175
+%define patchlevel 211
 
 Summary: The VIM editor
 URL:     http://www.vim.org/
@@ -226,6 +226,42 @@ Patch172: ftp://ftp.vim.org/pub/vim/patches/7.1/7.1.172
 Patch173: ftp://ftp.vim.org/pub/vim/patches/7.1/7.1.173
 Patch174: ftp://ftp.vim.org/pub/vim/patches/7.1/7.1.174
 Patch175: ftp://ftp.vim.org/pub/vim/patches/7.1/7.1.175
+Patch176: ftp://ftp.vim.org/pub/vim/patches/7.1/7.1.176
+Patch177: ftp://ftp.vim.org/pub/vim/patches/7.1/7.1.177
+Patch178: ftp://ftp.vim.org/pub/vim/patches/7.1/7.1.178
+Patch179: ftp://ftp.vim.org/pub/vim/patches/7.1/7.1.179
+Patch180: ftp://ftp.vim.org/pub/vim/patches/7.1/7.1.180
+Patch181: ftp://ftp.vim.org/pub/vim/patches/7.1/7.1.181
+Patch182: ftp://ftp.vim.org/pub/vim/patches/7.1/7.1.182
+Patch183: ftp://ftp.vim.org/pub/vim/patches/7.1/7.1.183
+Patch184: ftp://ftp.vim.org/pub/vim/patches/7.1/7.1.184
+Patch185: ftp://ftp.vim.org/pub/vim/patches/7.1/7.1.185
+Patch186: ftp://ftp.vim.org/pub/vim/patches/7.1/7.1.186
+Patch187: ftp://ftp.vim.org/pub/vim/patches/7.1/7.1.187
+Patch188: ftp://ftp.vim.org/pub/vim/patches/7.1/7.1.188
+Patch189: ftp://ftp.vim.org/pub/vim/patches/7.1/7.1.189
+Patch190: ftp://ftp.vim.org/pub/vim/patches/7.1/7.1.190
+Patch191: ftp://ftp.vim.org/pub/vim/patches/7.1/7.1.191
+Patch192: ftp://ftp.vim.org/pub/vim/patches/7.1/7.1.192
+Patch193: ftp://ftp.vim.org/pub/vim/patches/7.1/7.1.193
+Patch194: ftp://ftp.vim.org/pub/vim/patches/7.1/7.1.194
+Patch195: ftp://ftp.vim.org/pub/vim/patches/7.1/7.1.195
+Patch196: ftp://ftp.vim.org/pub/vim/patches/7.1/7.1.196
+Patch197: ftp://ftp.vim.org/pub/vim/patches/7.1/7.1.197
+Patch198: ftp://ftp.vim.org/pub/vim/patches/7.1/7.1.198
+Patch199: ftp://ftp.vim.org/pub/vim/patches/7.1/7.1.199
+Patch200: ftp://ftp.vim.org/pub/vim/patches/7.1/7.1.200
+Patch201: ftp://ftp.vim.org/pub/vim/patches/7.1/7.1.201
+Patch202: ftp://ftp.vim.org/pub/vim/patches/7.1/7.1.202
+Patch203: ftp://ftp.vim.org/pub/vim/patches/7.1/7.1.203
+Patch204: ftp://ftp.vim.org/pub/vim/patches/7.1/7.1.204
+Patch205: ftp://ftp.vim.org/pub/vim/patches/7.1/7.1.205
+Patch206: ftp://ftp.vim.org/pub/vim/patches/7.1/7.1.206
+Patch207: ftp://ftp.vim.org/pub/vim/patches/7.1/7.1.207
+Patch208: ftp://ftp.vim.org/pub/vim/patches/7.1/7.1.208
+Patch209: ftp://ftp.vim.org/pub/vim/patches/7.1/7.1.209
+Patch210: ftp://ftp.vim.org/pub/vim/patches/7.1/7.1.210
+Patch211: ftp://ftp.vim.org/pub/vim/patches/7.1/7.1.211
 
 Patch3000: vim-7.0-syntax.patch
 Patch3002: vim-7.1-nowarnings.patch
@@ -533,6 +569,42 @@ perl -pi -e "s,bin/nawk,bin/awk,g" runtime/tools/mve.awk
 %patch173 -p0
 %patch174 -p0
 %patch175 -p0
+%patch176 -p0 
+%patch177 -p0 
+%patch178 -p0 
+%patch179 -p0 
+%patch180 -p0 
+%patch181 -p0 
+%patch182 -p0 
+%patch183 -p0 
+%patch184 -p0 
+%patch185 -p0 
+%patch186 -p0 
+%patch187 -p0 
+%patch188 -p0 
+%patch189 -p0 
+%patch190 -p0 
+%patch191 -p0 
+%patch192 -p0 
+%patch193 -p0 
+%patch194 -p0 
+%patch195 -p0 
+%patch196 -p0 
+%patch197 -p0 
+%patch198 -p0 
+%patch199 -p0 
+%patch200 -p0 
+%patch201 -p0 
+%patch202 -p0 
+%patch203 -p0 
+%patch204 -p0 
+%patch205 -p0 
+%patch206 -p0 
+%patch207 -p0 
+%patch208 -p0 
+%patch209 -p0 
+%patch210 -p0 
+%patch211 -p0 
 
 
 # install spell files
@@ -919,7 +991,10 @@ rm -rf $RPM_BUILD_ROOT
 %{_datadir}/icons/hicolor/*/apps/*
 
 %changelog
-* Sat Dec 22 2007 Karsten Hopp <karsten@redhat.com> 7.1.%{nil}175-1
+* Mon Jan 07 2008 Karsten Hopp <karsten@redhat.com> 7.1.211-1
+- patchlevel 211
+
+* Sat Dec 22 2007 Karsten Hopp <karsten@redhat.com> 7.1.175-1
 - patchlevel 175
 
 * Thu Nov 22 2007 Karsten Hopp <karsten@redhat.com> 7.1.159-1