mirror of
				https://github.com/tmux/tmux.git
				synced 2025-11-04 00:56:10 +00:00 
			
		
		
		
	Merge branch 'obsd-master'
This commit is contained in:
		@@ -161,8 +161,8 @@ cmd_show_options_print(struct cmd *self, struct cmdq_item *item,
 | 
				
			|||||||
    struct options_entry *o, int idx)
 | 
					    struct options_entry *o, int idx)
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
	struct options_array_item	*a;
 | 
						struct options_array_item	*a;
 | 
				
			||||||
	const char			*name, *value;
 | 
						const char			*name;
 | 
				
			||||||
	char				*tmp, *escaped;
 | 
						char				*value, *tmp, *escaped;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	if (idx != -1) {
 | 
						if (idx != -1) {
 | 
				
			||||||
		xasprintf(&tmp, "%s[%d]", options_name(o), idx);
 | 
							xasprintf(&tmp, "%s[%d]", options_name(o), idx);
 | 
				
			||||||
@@ -190,6 +190,7 @@ cmd_show_options_print(struct cmd *self, struct cmdq_item *item,
 | 
				
			|||||||
		free(escaped);
 | 
							free(escaped);
 | 
				
			||||||
	} else
 | 
						} else
 | 
				
			||||||
		cmdq_print(item, "%s %s", name, value);
 | 
							cmdq_print(item, "%s %s", name, value);
 | 
				
			||||||
 | 
						free(value);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	free(tmp);
 | 
						free(tmp);
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 
 | 
				
			|||||||
							
								
								
									
										4
									
								
								cmd.c
									
									
									
									
									
								
							
							
						
						
									
										4
									
								
								cmd.c
									
									
									
									
									
								
							@@ -334,10 +334,6 @@ cmd_try_alias(int *argc, char ***argv)
 | 
				
			|||||||
	a = options_array_first(o);
 | 
						a = options_array_first(o);
 | 
				
			||||||
	while (a != NULL) {
 | 
						while (a != NULL) {
 | 
				
			||||||
		ov = options_array_item_value(a);
 | 
							ov = options_array_item_value(a);
 | 
				
			||||||
		if (ov == NULL) {
 | 
					 | 
				
			||||||
			a = options_array_next(a);
 | 
					 | 
				
			||||||
			continue;
 | 
					 | 
				
			||||||
		}
 | 
					 | 
				
			||||||
		cp = strchr(ov->string, '=');
 | 
							cp = strchr(ov->string, '=');
 | 
				
			||||||
		if (cp != NULL &&
 | 
							if (cp != NULL &&
 | 
				
			||||||
		    (size_t)(cp - ov->string) == wanted &&
 | 
							    (size_t)(cp - ov->string) == wanted &&
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -185,10 +185,6 @@ environ_update(struct options *oo, struct environ *src, struct environ *dst)
 | 
				
			|||||||
	a = options_array_first(o);
 | 
						a = options_array_first(o);
 | 
				
			||||||
	while (a != NULL) {
 | 
						while (a != NULL) {
 | 
				
			||||||
		ov = options_array_item_value(a);
 | 
							ov = options_array_item_value(a);
 | 
				
			||||||
		if (ov == NULL) {
 | 
					 | 
				
			||||||
			a = options_array_next(a);
 | 
					 | 
				
			||||||
			continue;
 | 
					 | 
				
			||||||
		}
 | 
					 | 
				
			||||||
		if ((envent = environ_find(src, ov->string)) == NULL)
 | 
							if ((envent = environ_find(src, ov->string)) == NULL)
 | 
				
			||||||
			environ_clear(dst, ov->string);
 | 
								environ_clear(dst, ov->string);
 | 
				
			||||||
		else
 | 
							else
 | 
				
			||||||
 
 | 
				
			|||||||
							
								
								
									
										27
									
								
								format.c
									
									
									
									
									
								
							
							
						
						
									
										27
									
								
								format.c
									
									
									
									
									
								
							@@ -920,9 +920,8 @@ format_find(struct format_tree *ft, const char *key, int modifiers)
 | 
				
			|||||||
	struct environ_entry	*envent;
 | 
						struct environ_entry	*envent;
 | 
				
			||||||
	static char		 s[64];
 | 
						static char		 s[64];
 | 
				
			||||||
	struct options_entry	*o;
 | 
						struct options_entry	*o;
 | 
				
			||||||
	const char		*found;
 | 
					 | 
				
			||||||
	int			 idx;
 | 
						int			 idx;
 | 
				
			||||||
	char			*copy, *saved;
 | 
						char			*found, *saved;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	if (~modifiers & FORMAT_TIMESTRING) {
 | 
						if (~modifiers & FORMAT_TIMESTRING) {
 | 
				
			||||||
		o = options_parse_get(global_options, key, &idx, 0);
 | 
							o = options_parse_get(global_options, key, &idx, 0);
 | 
				
			||||||
@@ -949,12 +948,11 @@ format_find(struct format_tree *ft, const char *key, int modifiers)
 | 
				
			|||||||
				return (NULL);
 | 
									return (NULL);
 | 
				
			||||||
			ctime_r(&fe->t, s);
 | 
								ctime_r(&fe->t, s);
 | 
				
			||||||
			s[strcspn(s, "\n")] = '\0';
 | 
								s[strcspn(s, "\n")] = '\0';
 | 
				
			||||||
			found = s;
 | 
								found = xstrdup(s);
 | 
				
			||||||
			goto found;
 | 
								goto found;
 | 
				
			||||||
		}
 | 
							}
 | 
				
			||||||
		if (fe->t != 0) {
 | 
							if (fe->t != 0) {
 | 
				
			||||||
			xsnprintf(s, sizeof s, "%lld", (long long)fe->t);
 | 
								xasprintf(&found, "%lld", (long long)fe->t);
 | 
				
			||||||
			found = s;
 | 
					 | 
				
			||||||
			goto found;
 | 
								goto found;
 | 
				
			||||||
		}
 | 
							}
 | 
				
			||||||
		if (fe->value == NULL && fe->cb != NULL) {
 | 
							if (fe->value == NULL && fe->cb != NULL) {
 | 
				
			||||||
@@ -962,7 +960,7 @@ format_find(struct format_tree *ft, const char *key, int modifiers)
 | 
				
			|||||||
			if (fe->value == NULL)
 | 
								if (fe->value == NULL)
 | 
				
			||||||
				fe->value = xstrdup("");
 | 
									fe->value = xstrdup("");
 | 
				
			||||||
		}
 | 
							}
 | 
				
			||||||
		found = fe->value;
 | 
							found = xstrdup(fe->value);
 | 
				
			||||||
		goto found;
 | 
							goto found;
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@@ -973,7 +971,7 @@ format_find(struct format_tree *ft, const char *key, int modifiers)
 | 
				
			|||||||
		if (envent == NULL)
 | 
							if (envent == NULL)
 | 
				
			||||||
			envent = environ_find(global_environ, key);
 | 
								envent = environ_find(global_environ, key);
 | 
				
			||||||
		if (envent != NULL) {
 | 
							if (envent != NULL) {
 | 
				
			||||||
			found = envent->value;
 | 
								found = xstrdup(envent->value);
 | 
				
			||||||
			goto found;
 | 
								goto found;
 | 
				
			||||||
		}
 | 
							}
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
@@ -983,23 +981,22 @@ format_find(struct format_tree *ft, const char *key, int modifiers)
 | 
				
			|||||||
found:
 | 
					found:
 | 
				
			||||||
	if (found == NULL)
 | 
						if (found == NULL)
 | 
				
			||||||
		return (NULL);
 | 
							return (NULL);
 | 
				
			||||||
	copy = xstrdup(found);
 | 
					 | 
				
			||||||
	if (modifiers & FORMAT_BASENAME) {
 | 
						if (modifiers & FORMAT_BASENAME) {
 | 
				
			||||||
		saved = copy;
 | 
							saved = found;
 | 
				
			||||||
		copy = xstrdup(basename(saved));
 | 
							found = xstrdup(basename(saved));
 | 
				
			||||||
		free(saved);
 | 
							free(saved);
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
	if (modifiers & FORMAT_DIRNAME) {
 | 
						if (modifiers & FORMAT_DIRNAME) {
 | 
				
			||||||
		saved = copy;
 | 
							saved = found;
 | 
				
			||||||
		copy = xstrdup(dirname(saved));
 | 
							found = xstrdup(dirname(saved));
 | 
				
			||||||
		free(saved);
 | 
							free(saved);
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
	if (modifiers & FORMAT_QUOTE) {
 | 
						if (modifiers & FORMAT_QUOTE) {
 | 
				
			||||||
		saved = copy;
 | 
							saved = found;
 | 
				
			||||||
		copy = xstrdup(format_quote(saved));
 | 
							found = xstrdup(format_quote(saved));
 | 
				
			||||||
		free(saved);
 | 
							free(saved);
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
	return (copy);
 | 
						return (found);
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
/* Skip until end. */
 | 
					/* Skip until end. */
 | 
				
			||||||
 
 | 
				
			|||||||
							
								
								
									
										39
									
								
								options.c
									
									
									
									
									
								
							
							
						
						
									
										39
									
								
								options.c
									
									
									
									
									
								
							@@ -110,47 +110,43 @@ options_value_free(struct options_entry *o, union options_value *ov)
 | 
				
			|||||||
		free(ov->string);
 | 
							free(ov->string);
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
static const char *
 | 
					static char *
 | 
				
			||||||
options_value_tostring(struct options_entry *o, union options_value *ov,
 | 
					options_value_tostring(struct options_entry *o, union options_value *ov,
 | 
				
			||||||
    int numeric)
 | 
					    int numeric)
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
	static char	 s[1024];
 | 
						char	*s;
 | 
				
			||||||
	const char	*tmp;
 | 
					 | 
				
			||||||
 | 
					
 | 
				
			||||||
	if (OPTIONS_IS_STYLE(o))
 | 
						if (OPTIONS_IS_STYLE(o))
 | 
				
			||||||
		return (style_tostring(&ov->style));
 | 
							return (xstrdup(style_tostring(&ov->style)));
 | 
				
			||||||
	if (OPTIONS_IS_NUMBER(o)) {
 | 
						if (OPTIONS_IS_NUMBER(o)) {
 | 
				
			||||||
		tmp = NULL;
 | 
					 | 
				
			||||||
		switch (o->tableentry->type) {
 | 
							switch (o->tableentry->type) {
 | 
				
			||||||
		case OPTIONS_TABLE_NUMBER:
 | 
							case OPTIONS_TABLE_NUMBER:
 | 
				
			||||||
			xsnprintf(s, sizeof s, "%lld", ov->number);
 | 
								xasprintf(&s, "%lld", ov->number);
 | 
				
			||||||
			break;
 | 
								break;
 | 
				
			||||||
		case OPTIONS_TABLE_KEY:
 | 
							case OPTIONS_TABLE_KEY:
 | 
				
			||||||
			tmp = key_string_lookup_key(ov->number);
 | 
								s = xstrdup(key_string_lookup_key(ov->number));
 | 
				
			||||||
			break;
 | 
								break;
 | 
				
			||||||
		case OPTIONS_TABLE_COLOUR:
 | 
							case OPTIONS_TABLE_COLOUR:
 | 
				
			||||||
			tmp = colour_tostring(ov->number);
 | 
								s = xstrdup(colour_tostring(ov->number));
 | 
				
			||||||
			break;
 | 
								break;
 | 
				
			||||||
		case OPTIONS_TABLE_FLAG:
 | 
							case OPTIONS_TABLE_FLAG:
 | 
				
			||||||
			if (numeric)
 | 
								if (numeric)
 | 
				
			||||||
				xsnprintf(s, sizeof s, "%lld", ov->number);
 | 
									xasprintf(&s, "%lld", ov->number);
 | 
				
			||||||
			else
 | 
								else
 | 
				
			||||||
				tmp = (ov->number ? "on" : "off");
 | 
									s = xstrdup(ov->number ? "on" : "off");
 | 
				
			||||||
			break;
 | 
								break;
 | 
				
			||||||
		case OPTIONS_TABLE_CHOICE:
 | 
							case OPTIONS_TABLE_CHOICE:
 | 
				
			||||||
			tmp = o->tableentry->choices[ov->number];
 | 
								s = xstrdup(o->tableentry->choices[ov->number]);
 | 
				
			||||||
			break;
 | 
								break;
 | 
				
			||||||
		case OPTIONS_TABLE_STRING:
 | 
							case OPTIONS_TABLE_STRING:
 | 
				
			||||||
		case OPTIONS_TABLE_STYLE:
 | 
							case OPTIONS_TABLE_STYLE:
 | 
				
			||||||
			break;
 | 
								fatalx("not a number option type");
 | 
				
			||||||
		}
 | 
							}
 | 
				
			||||||
		if (tmp != NULL)
 | 
					 | 
				
			||||||
			xsnprintf(s, sizeof s, "%s", tmp);
 | 
					 | 
				
			||||||
		return (s);
 | 
							return (s);
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
	if (OPTIONS_IS_STRING(o))
 | 
						if (OPTIONS_IS_STRING(o))
 | 
				
			||||||
		return (ov->string);
 | 
							return (xstrdup(ov->string));
 | 
				
			||||||
	return ("");
 | 
						return (xstrdup(""));
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
struct options *
 | 
					struct options *
 | 
				
			||||||
@@ -218,11 +214,8 @@ options_empty(struct options *oo, const struct options_table_entry *oe)
 | 
				
			|||||||
	o = options_add(oo, oe->name);
 | 
						o = options_add(oo, oe->name);
 | 
				
			||||||
	o->tableentry = oe;
 | 
						o->tableentry = oe;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	if (oe->flags & OPTIONS_TABLE_IS_ARRAY) {
 | 
						if (oe->flags & OPTIONS_TABLE_IS_ARRAY)
 | 
				
			||||||
		if (oe->type != OPTIONS_TABLE_STRING)
 | 
					 | 
				
			||||||
			fatalx("arrays can only be strings");
 | 
					 | 
				
			||||||
		RB_INIT(&o->value.array);
 | 
							RB_INIT(&o->value.array);
 | 
				
			||||||
	}
 | 
					 | 
				
			||||||
 | 
					
 | 
				
			||||||
	return (o);
 | 
						return (o);
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
@@ -443,17 +436,17 @@ options_isstring(struct options_entry *o)
 | 
				
			|||||||
	return (OPTIONS_IS_STRING(o));
 | 
						return (OPTIONS_IS_STRING(o));
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
const char *
 | 
					char *
 | 
				
			||||||
options_tostring(struct options_entry *o, int idx, int numeric)
 | 
					options_tostring(struct options_entry *o, int idx, int numeric)
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
	struct options_array_item	*a;
 | 
						struct options_array_item	*a;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	if (OPTIONS_IS_ARRAY(o)) {
 | 
						if (OPTIONS_IS_ARRAY(o)) {
 | 
				
			||||||
		if (idx == -1)
 | 
							if (idx == -1)
 | 
				
			||||||
			return (NULL);
 | 
								return (xstrdup(""));
 | 
				
			||||||
		a = options_array_item(o, idx);
 | 
							a = options_array_item(o, idx);
 | 
				
			||||||
		if (a == NULL)
 | 
							if (a == NULL)
 | 
				
			||||||
			return ("");
 | 
								return (xstrdup(""));
 | 
				
			||||||
		return (options_value_tostring(o, &a->value, numeric));
 | 
							return (options_value_tostring(o, &a->value, numeric));
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
	return (options_value_tostring(o, &o->value, numeric));
 | 
						return (options_value_tostring(o, &o->value, numeric));
 | 
				
			||||||
 
 | 
				
			|||||||
							
								
								
									
										7
									
								
								status.c
									
									
									
									
									
								
							
							
						
						
									
										7
									
								
								status.c
									
									
									
									
									
								
							@@ -1293,7 +1293,6 @@ status_prompt_complete_list(u_int *size, const char *s)
 | 
				
			|||||||
	size_t					  slen = strlen(s), valuelen;
 | 
						size_t					  slen = strlen(s), valuelen;
 | 
				
			||||||
	struct options_entry			 *o;
 | 
						struct options_entry			 *o;
 | 
				
			||||||
	struct options_array_item		 *a;
 | 
						struct options_array_item		 *a;
 | 
				
			||||||
	union options_value			 *ov;
 | 
					 | 
				
			||||||
	const char				 *layouts[] = {
 | 
						const char				 *layouts[] = {
 | 
				
			||||||
		"even-horizontal", "even-vertical", "main-horizontal",
 | 
							"even-horizontal", "even-vertical", "main-horizontal",
 | 
				
			||||||
		"main-vertical", "tiled", NULL
 | 
							"main-vertical", "tiled", NULL
 | 
				
			||||||
@@ -1322,11 +1321,7 @@ status_prompt_complete_list(u_int *size, const char *s)
 | 
				
			|||||||
	if (o != NULL) {
 | 
						if (o != NULL) {
 | 
				
			||||||
		a = options_array_first(o);
 | 
							a = options_array_first(o);
 | 
				
			||||||
		while (a != NULL) {
 | 
							while (a != NULL) {
 | 
				
			||||||
			ov = options_array_item_value(a);
 | 
								value = options_array_item_value(a)->string;
 | 
				
			||||||
			if (ov == NULL)
 | 
					 | 
				
			||||||
				goto next;
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
			value = ov->string;
 | 
					 | 
				
			||||||
			if ((cp = strchr(value, '=')) == NULL)
 | 
								if ((cp = strchr(value, '=')) == NULL)
 | 
				
			||||||
			    goto next;
 | 
								    goto next;
 | 
				
			||||||
			valuelen = cp - value;
 | 
								valuelen = cp - value;
 | 
				
			||||||
 
 | 
				
			|||||||
							
								
								
									
										2
									
								
								tmux.h
									
									
									
									
									
								
							
							
						
						
									
										2
									
								
								tmux.h
									
									
									
									
									
								
							@@ -1744,7 +1744,7 @@ u_int		 options_array_item_index(struct options_array_item *);
 | 
				
			|||||||
union options_value *options_array_item_value(struct options_array_item *);
 | 
					union options_value *options_array_item_value(struct options_array_item *);
 | 
				
			||||||
int		 options_isarray(struct options_entry *);
 | 
					int		 options_isarray(struct options_entry *);
 | 
				
			||||||
int		 options_isstring(struct options_entry *);
 | 
					int		 options_isstring(struct options_entry *);
 | 
				
			||||||
const char	*options_tostring(struct options_entry *, int, int);
 | 
					char		*options_tostring(struct options_entry *, int, int);
 | 
				
			||||||
char		*options_parse(const char *, int *);
 | 
					char		*options_parse(const char *, int *);
 | 
				
			||||||
struct options_entry *options_parse_get(struct options *, const char *, int *,
 | 
					struct options_entry *options_parse_get(struct options *, const char *, int *,
 | 
				
			||||||
		     int);
 | 
							     int);
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -429,8 +429,7 @@ tty_keys_build(struct tty *tty)
 | 
				
			|||||||
		a = options_array_first(o);
 | 
							a = options_array_first(o);
 | 
				
			||||||
		while (a != NULL) {
 | 
							while (a != NULL) {
 | 
				
			||||||
			ov = options_array_item_value(a);
 | 
								ov = options_array_item_value(a);
 | 
				
			||||||
			if (ov != NULL)
 | 
								tty_keys_add(tty, ov->string, KEYC_USER + i);
 | 
				
			||||||
				tty_keys_add(tty, ov->string, KEYC_USER + i);
 | 
					 | 
				
			||||||
			a = options_array_next(a);
 | 
								a = options_array_next(a);
 | 
				
			||||||
		}
 | 
							}
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -499,8 +499,7 @@ tty_term_find(char *name, int fd, char **cause)
 | 
				
			|||||||
	a = options_array_first(o);
 | 
						a = options_array_first(o);
 | 
				
			||||||
	while (a != NULL) {
 | 
						while (a != NULL) {
 | 
				
			||||||
		ov = options_array_item_value(a);
 | 
							ov = options_array_item_value(a);
 | 
				
			||||||
		if (ov != NULL)
 | 
							tty_term_override(term, ov->string);
 | 
				
			||||||
			tty_term_override(term, ov->string);
 | 
					 | 
				
			||||||
		a = options_array_next(a);
 | 
							a = options_array_next(a);
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 
 | 
				
			|||||||
							
								
								
									
										12
									
								
								tty.c
									
									
									
									
									
								
							
							
						
						
									
										12
									
								
								tty.c
									
									
									
									
									
								
							@@ -2388,7 +2388,11 @@ tty_colours_fg(struct tty *tty, const struct grid_cell *gc)
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
	/* Is this an aixterm bright colour? */
 | 
						/* Is this an aixterm bright colour? */
 | 
				
			||||||
	if (gc->fg >= 90 && gc->fg <= 97) {
 | 
						if (gc->fg >= 90 && gc->fg <= 97) {
 | 
				
			||||||
		tty_putcode1(tty, TTYC_SETAF, gc->fg - 90 + 8);
 | 
							if (tty->term_flags & TERM_256COLOURS) {
 | 
				
			||||||
 | 
								xsnprintf(s, sizeof s, "\033[%dm", gc->fg);
 | 
				
			||||||
 | 
								tty_puts(tty, s);
 | 
				
			||||||
 | 
							} else
 | 
				
			||||||
 | 
								tty_putcode1(tty, TTYC_SETAF, gc->fg - 90 + 8);
 | 
				
			||||||
		goto save_fg;
 | 
							goto save_fg;
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@@ -2416,7 +2420,11 @@ tty_colours_bg(struct tty *tty, const struct grid_cell *gc)
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
	/* Is this an aixterm bright colour? */
 | 
						/* Is this an aixterm bright colour? */
 | 
				
			||||||
	if (gc->bg >= 90 && gc->bg <= 97) {
 | 
						if (gc->bg >= 90 && gc->bg <= 97) {
 | 
				
			||||||
		tty_putcode1(tty, TTYC_SETAB, gc->bg - 90 + 8);
 | 
							if (tty->term_flags & TERM_256COLOURS) {
 | 
				
			||||||
 | 
								xsnprintf(s, sizeof s, "\033[%dm", gc->bg + 10);
 | 
				
			||||||
 | 
								tty_puts(tty, s);
 | 
				
			||||||
 | 
							} else
 | 
				
			||||||
 | 
								tty_putcode1(tty, TTYC_SETAB, gc->bg - 90 + 8);
 | 
				
			||||||
		goto save_bg;
 | 
							goto save_bg;
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 
 | 
				
			|||||||
		Reference in New Issue
	
	Block a user