Return the result of evaluating a given boolean expression, represented as a string. An expression can either be: "t", evaluating to True; "f", evaluating to False; "!(expr)", evaluating to the logical NOT of the inner expression expr; "&(expr1,expr2,...)", evaluating to the logical AND of 2 or more inner expressions expr1, expr2, ...; "|(expr1,expr2,...)", evaluating to the logical OR of 2 or more inner expressions expr1, expr2, ... Example 1: Input: expression = "!(f)" Output: true Example 2: Input: expression = "|(f,t)" Output: true Example 3: Input: expression = "&(t,f)" Output: false Example 4: Input: expression = "|(&(t,f,t),!(t))" Output: false Constraints: 1 <= expression.length <= 20000 expression[i] consists of characters in {'(', ')', '&', '|', '!', 't', 'f', ','}. expression is a valid expression representing a boolean, as given in the description.