<SYSTEM_TASK:>
Solve the following problem using Python, implementing the functions described below, one line at a time
<END_TASK>
<USER_TASK:>
Description:
 def update_GET(parser, token):
 """ ``update_GET`` allows you to substitute parameters into the current request's GET parameters. This is useful for updating search filters, page numbers, without losing the current set. For example, the template fragment:: <a href="?{% update_GET 'attr1' += value1 'attr2' -= value2 'attr3' = value3 %}">foo</a> - adds ``value1`` to (the list of values in) ``'attr1'``, - removes ``value2`` from (the list of values in) ``'attr2'``, - sets ``attr3`` to ``value3``. and returns a urlencoded GET string. Allowed attributes are: - strings, in quotes - vars that resolve to strings Allowed values are: - strings, in quotes - vars that resolve to strings - lists of strings - None (without quotes) Note: - If a attribute is set to ``None`` or an empty list, the GET parameter is removed. - If an attribute's value is an empty string, or ``[""]`` or ``None``, the value remains, but has a ``""`` value. - If you try to ``=-`` a value from a list that doesn't contain that value, nothing happens. - If you try to ``=-`` a value from a list where the value appears more than once, only the first value is removed. """

    try:
        args = token.split_contents()[1:]
        triples = list(_chunks(args, 3))
        if triples and len(triples[-1]) != 3:
            raise template.TemplateSyntaxError, "%r tag requires arguments in groups of three (op, attr, value)." % token.contents.split()[0]
        ops = set([t[1] for t in triples])
        if not ops <= set(['+=', '-=', '=']):
            raise template.TemplateSyntaxError, "The only allowed operators are '+=', '-=' and '='. You have used %s" % ", ".join(ops)

    except ValueError:
        return UpdateGetNode()

    return UpdateGetNode(triples)