Version 1.1.0-dev.4.0
svn merge -r 30923:31107 https://dart.googlecode.com/svn/branches/bleeding_edge trunk
git-svn-id: http://dart.googlecode.com/svn/trunk@31123 260f80e4-7a28-3924-810f-c04153c831b5
diff --git a/pkg/analyzer/lib/src/generated/ast.dart b/pkg/analyzer/lib/src/generated/ast.dart
index b9be96f..91adcd0 100644
--- a/pkg/analyzer/lib/src/generated/ast.dart
+++ b/pkg/analyzer/lib/src/generated/ast.dart
@@ -485,33 +485,33 @@
/**
* The strings that are implicitly concatenated.
*/
- NodeList<StringLiteral> strings;
+ NodeList<StringLiteral> _strings;
/**
* Initialize a newly created list of adjacent strings.
*
* @param strings the strings that are implicitly concatenated
*/
- AdjacentStrings.full(List<StringLiteral> strings) {
- this.strings = new NodeList<StringLiteral>(this);
- this.strings.addAll(strings);
+ AdjacentStrings(List<StringLiteral> strings) {
+ this._strings = new NodeList<StringLiteral>(this);
+ this._strings.addAll(strings);
}
- /**
- * Initialize a newly created list of adjacent strings.
- *
- * @param strings the strings that are implicitly concatenated
- */
- AdjacentStrings({List<StringLiteral> strings}) : this.full(strings);
-
accept(ASTVisitor visitor) => visitor.visitAdjacentStrings(this);
- Token get beginToken => strings.beginToken;
+ Token get beginToken => _strings.beginToken;
- Token get endToken => strings.endToken;
+ Token get endToken => _strings.endToken;
+
+ /**
+ * Return the strings that are implicitly concatenated.
+ *
+ * @return the strings that are implicitly concatenated
+ */
+ NodeList<StringLiteral> get strings => _strings;
void visitChildren(ASTVisitor visitor) {
- strings.accept(visitor);
+ _strings.accept(visitor);
}
void appendStringValue(JavaStringBuilder builder) {
@@ -545,20 +545,12 @@
* @param comment the documentation comment associated with this node
* @param metadata the annotations associated with this node
*/
- AnnotatedNode.full(Comment comment, List<Annotation> metadata) {
+ AnnotatedNode(Comment comment, List<Annotation> metadata) {
this._metadata = new NodeList<Annotation>(this);
this._comment = becomeParentOf(comment);
this._metadata.addAll(metadata);
}
- /**
- * Initialize a newly created node.
- *
- * @param comment the documentation comment associated with this node
- * @param metadata the annotations associated with this node
- */
- AnnotatedNode({Comment comment, List<Annotation> metadata}) : this.full(comment, metadata);
-
Token get beginToken {
if (_comment == null) {
if (_metadata.isEmpty) {
@@ -722,29 +714,12 @@
* @param arguments the arguments to the constructor being invoked, or `null` if this
* annotation is not the invocation of a constructor
*/
- Annotation.full(Token atSign, Identifier name, Token period, SimpleIdentifier constructorName, ArgumentList arguments) {
- this.atSign = atSign;
+ Annotation(this.atSign, Identifier name, this.period, SimpleIdentifier constructorName, ArgumentList arguments) {
this._name = becomeParentOf(name);
- this.period = period;
this._constructorName = becomeParentOf(constructorName);
this._arguments = becomeParentOf(arguments);
}
- /**
- * Initialize a newly created annotation.
- *
- * @param atSign the at sign that introduced the annotation
- * @param name the name of the class defining the constructor that is being invoked or the name of
- * the field that is being referenced
- * @param period the period before the constructor name, or `null` if this annotation is not
- * the invocation of a named constructor
- * @param constructorName the name of the constructor being invoked, or `null` if this
- * annotation is not the invocation of a named constructor
- * @param arguments the arguments to the constructor being invoked, or `null` if this
- * annotation is not the invocation of a constructor
- */
- Annotation({Token atSign, Identifier name, Token period, SimpleIdentifier constructorName, ArgumentList arguments}) : this.full(atSign, name, period, constructorName, arguments);
-
accept(ASTVisitor visitor) => visitor.visitAnnotation(this);
/**
@@ -869,19 +844,10 @@
* @param question the token representing the question mark
* @param identifier the identifier representing the argument being tested
*/
- ArgumentDefinitionTest.full(Token question, SimpleIdentifier identifier) {
- this.question = question;
+ ArgumentDefinitionTest(this.question, SimpleIdentifier identifier) {
this._identifier = becomeParentOf(identifier);
}
- /**
- * Initialize a newly created argument definition test.
- *
- * @param question the token representing the question mark
- * @param identifier the identifier representing the argument being tested
- */
- ArgumentDefinitionTest({Token question, SimpleIdentifier identifier}) : this.full(question, identifier);
-
accept(ASTVisitor visitor) => visitor.visitArgumentDefinitionTest(this);
Token get beginToken => question;
@@ -935,7 +901,7 @@
/**
* The expressions producing the values of the arguments.
*/
- NodeList<Expression> arguments;
+ NodeList<Expression> _arguments;
/**
* The right parenthesis.
@@ -967,24 +933,24 @@
* @param arguments the expressions producing the values of the arguments
* @param rightParenthesis the right parenthesis
*/
- ArgumentList.full(Token leftParenthesis, List<Expression> arguments, Token rightParenthesis) {
- this.arguments = new NodeList<Expression>(this);
+ ArgumentList(Token leftParenthesis, List<Expression> arguments, Token rightParenthesis) {
+ this._arguments = new NodeList<Expression>(this);
this._leftParenthesis = leftParenthesis;
- this.arguments.addAll(arguments);
+ this._arguments.addAll(arguments);
this._rightParenthesis = rightParenthesis;
}
- /**
- * Initialize a newly created list of arguments.
- *
- * @param leftParenthesis the left parenthesis
- * @param arguments the expressions producing the values of the arguments
- * @param rightParenthesis the right parenthesis
- */
- ArgumentList({Token leftParenthesis, List<Expression> arguments, Token rightParenthesis}) : this.full(leftParenthesis, arguments, rightParenthesis);
-
accept(ASTVisitor visitor) => visitor.visitArgumentList(this);
+ /**
+ * Return the expressions producing the values of the arguments. Although the language requires
+ * that positional arguments appear before named arguments, this class allows them to be
+ * intermixed.
+ *
+ * @return the expressions producing the values of the arguments
+ */
+ NodeList<Expression> get arguments => _arguments;
+
Token get beginToken => _leftParenthesis;
Token get endToken => _rightParenthesis;
@@ -1012,8 +978,8 @@
* @param parameters the parameter elements corresponding to the arguments
*/
void set correspondingPropagatedParameters(List<ParameterElement> parameters) {
- if (parameters.length != arguments.length) {
- throw new IllegalArgumentException("Expected ${arguments.length} parameters, not ${parameters.length}");
+ if (parameters.length != _arguments.length) {
+ throw new IllegalArgumentException("Expected ${_arguments.length} parameters, not ${parameters.length}");
}
_correspondingPropagatedParameters = parameters;
}
@@ -1027,8 +993,8 @@
* @param parameters the parameter elements corresponding to the arguments
*/
void set correspondingStaticParameters(List<ParameterElement> parameters) {
- if (parameters.length != arguments.length) {
- throw new IllegalArgumentException("Expected ${arguments.length} parameters, not ${parameters.length}");
+ if (parameters.length != _arguments.length) {
+ throw new IllegalArgumentException("Expected ${_arguments.length} parameters, not ${parameters.length}");
}
_correspondingStaticParameters = parameters;
}
@@ -1052,7 +1018,7 @@
}
void visitChildren(ASTVisitor visitor) {
- arguments.accept(visitor);
+ _arguments.accept(visitor);
}
/**
@@ -1072,7 +1038,7 @@
if (_correspondingPropagatedParameters == null) {
return null;
}
- int index = arguments.indexOf(expression);
+ int index = _arguments.indexOf(expression);
if (index < 0) {
return null;
}
@@ -1096,7 +1062,7 @@
if (_correspondingStaticParameters == null) {
return null;
}
- int index = arguments.indexOf(expression);
+ int index = _arguments.indexOf(expression);
if (index < 0) {
return null;
}
@@ -1137,21 +1103,12 @@
* @param isOperator the is operator
* @param type the name of the type being cast to
*/
- AsExpression.full(Expression expression, Token isOperator, TypeName type) {
+ AsExpression(Expression expression, Token isOperator, TypeName type) {
this._expression = becomeParentOf(expression);
this.asOperator = isOperator;
this._type = becomeParentOf(type);
}
- /**
- * Initialize a newly created as expression.
- *
- * @param expression the expression used to compute the value being cast
- * @param isOperator the is operator
- * @param type the name of the type being cast to
- */
- AsExpression({Expression expression, Token isOperator, TypeName type}) : this.full(expression, isOperator, type);
-
accept(ASTVisitor visitor) => visitor.visitAsExpression(this);
Token get beginToken => _expression.beginToken;
@@ -1243,25 +1200,10 @@
* @param rightParenthesis the right parenthesis
* @param semicolon the semicolon terminating the statement
*/
- AssertStatement.full(Token keyword, Token leftParenthesis, Expression condition, Token rightParenthesis, Token semicolon) {
- this.keyword = keyword;
- this.leftParenthesis = leftParenthesis;
+ AssertStatement(this.keyword, this.leftParenthesis, Expression condition, this.rightParenthesis, this.semicolon) {
this._condition = becomeParentOf(condition);
- this.rightParenthesis = rightParenthesis;
- this.semicolon = semicolon;
}
- /**
- * Initialize a newly created assert statement.
- *
- * @param keyword the token representing the 'assert' keyword
- * @param leftParenthesis the left parenthesis
- * @param condition the condition that is being asserted to be `true`
- * @param rightParenthesis the right parenthesis
- * @param semicolon the semicolon terminating the statement
- */
- AssertStatement({Token keyword, Token leftParenthesis, Expression condition, Token rightParenthesis, Token semicolon}) : this.full(keyword, leftParenthesis, condition, rightParenthesis, semicolon);
-
accept(ASTVisitor visitor) => visitor.visitAssertStatement(this);
Token get beginToken => keyword;
@@ -1336,21 +1278,11 @@
* @param operator the assignment operator being applied
* @param rightHandSide the expression used to compute the right hand side
*/
- AssignmentExpression.full(Expression leftHandSide, Token operator, Expression rightHandSide) {
+ AssignmentExpression(Expression leftHandSide, this.operator, Expression rightHandSide) {
this._leftHandSide = becomeParentOf(leftHandSide);
- this.operator = operator;
this._rightHandSide = becomeParentOf(rightHandSide);
}
- /**
- * Initialize a newly created assignment expression.
- *
- * @param leftHandSide the expression used to compute the left hand side
- * @param operator the assignment operator being applied
- * @param rightHandSide the expression used to compute the right hand side
- */
- AssignmentExpression({Expression leftHandSide, Token operator, Expression rightHandSide}) : this.full(leftHandSide, operator, rightHandSide);
-
accept(ASTVisitor visitor) => visitor.visitAssignmentExpression(this);
Token get beginToken => _leftHandSide.beginToken;
@@ -1542,21 +1474,11 @@
* @param operator the binary operator being applied
* @param rightOperand the expression used to compute the right operand
*/
- BinaryExpression.full(Expression leftOperand, Token operator, Expression rightOperand) {
+ BinaryExpression(Expression leftOperand, this.operator, Expression rightOperand) {
this._leftOperand = becomeParentOf(leftOperand);
- this.operator = operator;
this._rightOperand = becomeParentOf(rightOperand);
}
- /**
- * Initialize a newly created binary expression.
- *
- * @param leftOperand the expression used to compute the left operand
- * @param operator the binary operator being applied
- * @param rightOperand the expression used to compute the right operand
- */
- BinaryExpression({Expression leftOperand, Token operator, Expression rightOperand}) : this.full(leftOperand, operator, rightOperand);
-
accept(ASTVisitor visitor) => visitor.visitBinaryExpression(this);
Token get beginToken => _leftOperand.beginToken;
@@ -1720,7 +1642,7 @@
/**
* The statements contained in the block.
*/
- NodeList<Statement> statements;
+ NodeList<Statement> _statements;
/**
* The right curly bracket.
@@ -1734,30 +1656,26 @@
* @param statements the statements contained in the block
* @param rightBracket the right curly bracket
*/
- Block.full(Token leftBracket, List<Statement> statements, Token rightBracket) {
- this.statements = new NodeList<Statement>(this);
- this.leftBracket = leftBracket;
- this.statements.addAll(statements);
- this.rightBracket = rightBracket;
+ Block(this.leftBracket, List<Statement> statements, this.rightBracket) {
+ this._statements = new NodeList<Statement>(this);
+ this._statements.addAll(statements);
}
- /**
- * Initialize a newly created block of code.
- *
- * @param leftBracket the left curly bracket
- * @param statements the statements contained in the block
- * @param rightBracket the right curly bracket
- */
- Block({Token leftBracket, List<Statement> statements, Token rightBracket}) : this.full(leftBracket, statements, rightBracket);
-
accept(ASTVisitor visitor) => visitor.visitBlock(this);
Token get beginToken => leftBracket;
Token get endToken => rightBracket;
+ /**
+ * Return the statements contained in the block.
+ *
+ * @return the statements contained in the block
+ */
+ NodeList<Statement> get statements => _statements;
+
void visitChildren(ASTVisitor visitor) {
- statements.accept(visitor);
+ _statements.accept(visitor);
}
}
@@ -1783,17 +1701,10 @@
*
* @param block the block representing the body of the function
*/
- BlockFunctionBody.full(Block block) {
+ BlockFunctionBody(Block block) {
this._block = becomeParentOf(block);
}
- /**
- * Initialize a newly created function body consisting of a block of statements.
- *
- * @param block the block representing the body of the function
- */
- BlockFunctionBody({Block block}) : this.full(block);
-
accept(ASTVisitor visitor) => visitor.visitBlockFunctionBody(this);
Token get beginToken => _block.beginToken;
@@ -1848,18 +1759,7 @@
* @param literal the token representing the literal
* @param value the value of the literal
*/
- BooleanLiteral.full(Token literal, bool value) {
- this.literal = literal;
- this.value = value;
- }
-
- /**
- * Initialize a newly created boolean literal.
- *
- * @param literal the token representing the literal
- * @param value the value of the literal
- */
- BooleanLiteral({Token literal, bool value}) : this.full(literal, value);
+ BooleanLiteral(this.literal, this.value);
accept(ASTVisitor visitor) => visitor.visitBooleanLiteral(this);
@@ -1906,21 +1806,10 @@
* @param label the label associated with the statement
* @param semicolon the semicolon terminating the statement
*/
- BreakStatement.full(Token keyword, SimpleIdentifier label, Token semicolon) {
- this.keyword = keyword;
+ BreakStatement(this.keyword, SimpleIdentifier label, this.semicolon) {
this._label = becomeParentOf(label);
- this.semicolon = semicolon;
}
- /**
- * Initialize a newly created break statement.
- *
- * @param keyword the token representing the 'break' keyword
- * @param label the label associated with the statement
- * @param semicolon the semicolon terminating the statement
- */
- BreakStatement({Token keyword, SimpleIdentifier label, Token semicolon}) : this.full(keyword, label, semicolon);
-
accept(ASTVisitor visitor) => visitor.visitBreakStatement(this);
Token get beginToken => keyword;
@@ -1977,7 +1866,7 @@
/**
* The cascade sections sharing the common target.
*/
- NodeList<Expression> cascadeSections;
+ NodeList<Expression> _cascadeSections;
/**
* Initialize a newly created cascade expression.
@@ -1985,25 +1874,24 @@
* @param target the target of the cascade sections
* @param cascadeSections the cascade sections sharing the common target
*/
- CascadeExpression.full(Expression target, List<Expression> cascadeSections) {
- this.cascadeSections = new NodeList<Expression>(this);
+ CascadeExpression(Expression target, List<Expression> cascadeSections) {
+ this._cascadeSections = new NodeList<Expression>(this);
this._target = becomeParentOf(target);
- this.cascadeSections.addAll(cascadeSections);
+ this._cascadeSections.addAll(cascadeSections);
}
- /**
- * Initialize a newly created cascade expression.
- *
- * @param target the target of the cascade sections
- * @param cascadeSections the cascade sections sharing the common target
- */
- CascadeExpression({Expression target, List<Expression> cascadeSections}) : this.full(target, cascadeSections);
-
accept(ASTVisitor visitor) => visitor.visitCascadeExpression(this);
Token get beginToken => _target.beginToken;
- Token get endToken => cascadeSections.endToken;
+ /**
+ * Return the cascade sections sharing the common target.
+ *
+ * @return the cascade sections sharing the common target
+ */
+ NodeList<Expression> get cascadeSections => _cascadeSections;
+
+ Token get endToken => _cascadeSections.endToken;
int get precedence => 2;
@@ -2025,7 +1913,7 @@
void visitChildren(ASTVisitor visitor) {
safelyVisitChild(_target, visitor);
- cascadeSections.accept(visitor);
+ _cascadeSections.accept(visitor);
}
}
@@ -2105,33 +1993,15 @@
* @param rightParenthesis the right parenthesis
* @param body the body of the catch block
*/
- CatchClause.full(Token onKeyword, TypeName exceptionType, Token catchKeyword, Token leftParenthesis, SimpleIdentifier exceptionParameter, Token comma, SimpleIdentifier stackTraceParameter, Token rightParenthesis, Block body) {
- this.onKeyword = onKeyword;
+ CatchClause(this.onKeyword, TypeName exceptionType, this.catchKeyword, Token leftParenthesis, SimpleIdentifier exceptionParameter, this.comma, SimpleIdentifier stackTraceParameter, Token rightParenthesis, Block body) {
this.exceptionType = becomeParentOf(exceptionType);
- this.catchKeyword = catchKeyword;
this._leftParenthesis = leftParenthesis;
this._exceptionParameter = becomeParentOf(exceptionParameter);
- this.comma = comma;
this._stackTraceParameter = becomeParentOf(stackTraceParameter);
this._rightParenthesis = rightParenthesis;
this._body = becomeParentOf(body);
}
- /**
- * Initialize a newly created catch clause.
- *
- * @param onKeyword the token representing the 'on' keyword
- * @param exceptionType the type of exceptions caught by this catch clause
- * @param leftParenthesis the left parenthesis
- * @param exceptionParameter the parameter whose value will be the exception that was thrown
- * @param comma the comma separating the exception parameter from the stack trace parameter
- * @param stackTraceParameter the parameter whose value will be the stack trace associated with
- * the exception
- * @param rightParenthesis the right parenthesis
- * @param body the body of the catch block
- */
- CatchClause({Token onKeyword, TypeName exceptionType, Token catchKeyword, Token leftParenthesis, SimpleIdentifier exceptionParameter, Token comma, SimpleIdentifier stackTraceParameter, Token rightParenthesis, Block body}) : this.full(onKeyword, exceptionType, catchKeyword, leftParenthesis, exceptionParameter, comma, stackTraceParameter, rightParenthesis, body);
-
accept(ASTVisitor visitor) => visitor.visitCatchClause(this);
Token get beginToken {
@@ -2298,7 +2168,7 @@
/**
* The members defined by the class.
*/
- NodeList<ClassMember> members;
+ NodeList<ClassMember> _members;
/**
* The right curly bracket.
@@ -2321,38 +2191,16 @@
* @param members the members defined by the class
* @param rightBracket the right curly bracket
*/
- ClassDeclaration.full(Comment comment, List<Annotation> metadata, Token abstractKeyword, Token classKeyword, SimpleIdentifier name, TypeParameterList typeParameters, ExtendsClause extendsClause, WithClause withClause, ImplementsClause implementsClause, Token leftBracket, List<ClassMember> members, Token rightBracket) : super.full(comment, metadata) {
- this.members = new NodeList<ClassMember>(this);
- this.abstractKeyword = abstractKeyword;
- this.classKeyword = classKeyword;
+ ClassDeclaration(Comment comment, List<Annotation> metadata, this.abstractKeyword, this.classKeyword, SimpleIdentifier name, TypeParameterList typeParameters, ExtendsClause extendsClause, WithClause withClause, ImplementsClause implementsClause, this.leftBracket, List<ClassMember> members, this.rightBracket) : super(comment, metadata) {
+ this._members = new NodeList<ClassMember>(this);
this._name = becomeParentOf(name);
this.typeParameters = becomeParentOf(typeParameters);
this._extendsClause = becomeParentOf(extendsClause);
this._withClause = becomeParentOf(withClause);
this._implementsClause = becomeParentOf(implementsClause);
- this.leftBracket = leftBracket;
- this.members.addAll(members);
- this.rightBracket = rightBracket;
+ this._members.addAll(members);
}
- /**
- * Initialize a newly created class declaration.
- *
- * @param comment the documentation comment associated with this class
- * @param metadata the annotations associated with this class
- * @param abstractKeyword the 'abstract' keyword, or `null` if the keyword was absent
- * @param classKeyword the token representing the 'class' keyword
- * @param name the name of the class being declared
- * @param typeParameters the type parameters for the class
- * @param extendsClause the extends clause for the class
- * @param withClause the with clause for the class
- * @param implementsClause the implements clause for the class
- * @param leftBracket the left curly bracket
- * @param members the members defined by the class
- * @param rightBracket the right curly bracket
- */
- ClassDeclaration({Comment comment, List<Annotation> metadata, Token abstractKeyword, Token classKeyword, SimpleIdentifier name, TypeParameterList typeParameters, ExtendsClause extendsClause, WithClause withClause, ImplementsClause implementsClause, Token leftBracket, List<ClassMember> members, Token rightBracket}) : this.full(comment, metadata, abstractKeyword, classKeyword, name, typeParameters, extendsClause, withClause, implementsClause, leftBracket, members, rightBracket);
-
accept(ASTVisitor visitor) => visitor.visitClassDeclaration(this);
ClassElement get element => _name != null ? (_name.staticElement as ClassElement) : null;
@@ -2368,6 +2216,28 @@
ExtendsClause get extendsClause => _extendsClause;
/**
+ * Return the field declared in the class with the given name.
+ *
+ * @param name the name of the field to find
+ * @return the found field or `null` if not found
+ */
+ VariableDeclaration getField(String name) {
+ for (ClassMember classMember in _members) {
+ if (classMember is FieldDeclaration) {
+ FieldDeclaration fieldDeclaration = classMember as FieldDeclaration;
+ NodeList<VariableDeclaration> fields = fieldDeclaration.fields.variables;
+ for (VariableDeclaration field in fields) {
+ SimpleIdentifier fieldName = field.name;
+ if (fieldName != null && name == fieldName.name) {
+ return field;
+ }
+ }
+ }
+ }
+ return null;
+ }
+
+ /**
* Return the implements clause for the class, or `null` if the class does not implement any
* interfaces.
*
@@ -2376,6 +2246,13 @@
ImplementsClause get implementsClause => _implementsClause;
/**
+ * Return the members defined by the class.
+ *
+ * @return the members defined by the class
+ */
+ NodeList<ClassMember> get members => _members;
+
+ /**
* Return the name of the class being declared.
*
* @return the name of the class being declared
@@ -2457,15 +2334,7 @@
* @param comment the documentation comment associated with this member
* @param metadata the annotations associated with this member
*/
- ClassMember.full(Comment comment, List<Annotation> metadata) : super.full(comment, metadata);
-
- /**
- * Initialize a newly created member of a class.
- *
- * @param comment the documentation comment associated with this member
- * @param metadata the annotations associated with this member
- */
- ClassMember({Comment comment, List<Annotation> metadata}) : this.full(comment, metadata);
+ ClassMember(Comment comment, List<Annotation> metadata) : super(comment, metadata);
}
/**
@@ -2534,33 +2403,14 @@
* @param implementsClause the implements clause for this class
* @param semicolon the semicolon terminating the declaration
*/
- ClassTypeAlias.full(Comment comment, List<Annotation> metadata, Token keyword, SimpleIdentifier name, TypeParameterList typeParameters, Token equals, Token abstractKeyword, TypeName superclass, WithClause withClause, ImplementsClause implementsClause, Token semicolon) : super.full(comment, metadata, keyword, semicolon) {
+ ClassTypeAlias(Comment comment, List<Annotation> metadata, Token keyword, SimpleIdentifier name, TypeParameterList typeParameters, this.equals, this.abstractKeyword, TypeName superclass, WithClause withClause, ImplementsClause implementsClause, Token semicolon) : super(comment, metadata, keyword, semicolon) {
this._name = becomeParentOf(name);
this._typeParameters = becomeParentOf(typeParameters);
- this.equals = equals;
- this.abstractKeyword = abstractKeyword;
this._superclass = becomeParentOf(superclass);
this._withClause = becomeParentOf(withClause);
this._implementsClause = becomeParentOf(implementsClause);
}
- /**
- * Initialize a newly created class type alias.
- *
- * @param comment the documentation comment associated with this type alias
- * @param metadata the annotations associated with this type alias
- * @param keyword the token representing the 'typedef' keyword
- * @param name the name of the class being declared
- * @param typeParameters the type parameters for the class
- * @param equals the token for the '=' separating the name from the definition
- * @param abstractKeyword the token for the 'abstract' keyword
- * @param superclass the name of the superclass of the class being declared
- * @param withClause the with clause for this class
- * @param implementsClause the implements clause for this class
- * @param semicolon the semicolon terminating the declaration
- */
- ClassTypeAlias({Comment comment, List<Annotation> metadata, Token keyword, SimpleIdentifier name, TypeParameterList typeParameters, Token equals, Token abstractKeyword, TypeName superclass, WithClause withClause, ImplementsClause implementsClause, Token semicolon}) : this.full(comment, metadata, keyword, name, typeParameters, equals, abstractKeyword, superclass, withClause, implementsClause, semicolon);
-
accept(ASTVisitor visitor) => visitor.visitClassTypeAlias(this);
ClassElement get element => _name != null ? (_name.staticElement as ClassElement) : null;
@@ -2680,17 +2530,7 @@
* @param keyword the keyword specifying what kind of processing is to be done on the imported
* names
*/
- Combinator.full(Token keyword) {
- this.keyword = keyword;
- }
-
- /**
- * Initialize a newly created import combinator.
- *
- * @param keyword the keyword specifying what kind of processing is to be done on the imported
- * names
- */
- Combinator({Token keyword}) : this.full(keyword);
+ Combinator(this.keyword);
Token get beginToken => keyword;
}
@@ -2724,7 +2564,7 @@
* @param tokens the tokens representing the comment
* @return the block comment that was created
*/
- static Comment createBlockComment(List<Token> tokens) => new Comment.full(tokens, CommentType.BLOCK, null);
+ static Comment createBlockComment(List<Token> tokens) => new Comment(tokens, CommentType.BLOCK, null);
/**
* Create a documentation comment.
@@ -2732,7 +2572,7 @@
* @param tokens the tokens representing the comment
* @return the documentation comment that was created
*/
- static Comment createDocumentationComment(List<Token> tokens) => new Comment.full(tokens, CommentType.DOCUMENTATION, new List<CommentReference>());
+ static Comment createDocumentationComment(List<Token> tokens) => new Comment(tokens, CommentType.DOCUMENTATION, new List<CommentReference>());
/**
* Create a documentation comment.
@@ -2741,7 +2581,7 @@
* @param references the references embedded within the documentation comment
* @return the documentation comment that was created
*/
- static Comment createDocumentationComment2(List<Token> tokens, List<CommentReference> references) => new Comment.full(tokens, CommentType.DOCUMENTATION, references);
+ static Comment createDocumentationComment2(List<Token> tokens, List<CommentReference> references) => new Comment(tokens, CommentType.DOCUMENTATION, references);
/**
* Create an end-of-line comment.
@@ -2749,12 +2589,12 @@
* @param tokens the tokens representing the comment
* @return the end-of-line comment that was created
*/
- static Comment createEndOfLineComment(List<Token> tokens) => new Comment.full(tokens, CommentType.END_OF_LINE, null);
+ static Comment createEndOfLineComment(List<Token> tokens) => new Comment(tokens, CommentType.END_OF_LINE, null);
/**
* The tokens representing the comment.
*/
- List<Token> tokens;
+ final List<Token> tokens;
/**
* The type of the comment.
@@ -2765,7 +2605,7 @@
* The references embedded within the documentation comment. This list will be empty unless this
* is a documentation comment that has references embedded within it.
*/
- NodeList<CommentReference> references;
+ NodeList<CommentReference> _references;
/**
* Initialize a newly created comment.
@@ -2774,22 +2614,12 @@
* @param type the type of the comment
* @param references the references embedded within the documentation comment
*/
- Comment.full(List<Token> tokens, CommentType type, List<CommentReference> references) {
- this.references = new NodeList<CommentReference>(this);
- this.tokens = tokens;
+ Comment(this.tokens, CommentType type, List<CommentReference> references) {
+ this._references = new NodeList<CommentReference>(this);
this._type = type;
- this.references.addAll(references);
+ this._references.addAll(references);
}
- /**
- * Initialize a newly created comment.
- *
- * @param tokens the tokens representing the comment
- * @param type the type of the comment
- * @param references the references embedded within the documentation comment
- */
- Comment({List<Token> tokens, CommentType type, List<CommentReference> references}) : this.full(tokens, type, references);
-
accept(ASTVisitor visitor) => visitor.visitComment(this);
Token get beginToken => tokens[0];
@@ -2797,6 +2627,13 @@
Token get endToken => tokens[tokens.length - 1];
/**
+ * Return the references embedded within the documentation comment.
+ *
+ * @return the references embedded within the documentation comment
+ */
+ NodeList<CommentReference> get references => _references;
+
+ /**
* Return `true` if this is a block comment.
*
* @return `true` if this is a block comment
@@ -2818,7 +2655,7 @@
bool get isEndOfLine => identical(_type, CommentType.END_OF_LINE);
void visitChildren(ASTVisitor visitor) {
- references.accept(visitor);
+ _references.accept(visitor);
}
}
@@ -2875,19 +2712,10 @@
* @param newKeyword the token representing the 'new' keyword
* @param identifier the identifier being referenced
*/
- CommentReference.full(Token newKeyword, Identifier identifier) {
- this.newKeyword = newKeyword;
+ CommentReference(this.newKeyword, Identifier identifier) {
this._identifier = becomeParentOf(identifier);
}
- /**
- * Initialize a newly created reference to a Dart element.
- *
- * @param newKeyword the token representing the 'new' keyword
- * @param identifier the identifier being referenced
- */
- CommentReference({Token newKeyword, Identifier identifier}) : this.full(newKeyword, identifier);
-
accept(ASTVisitor visitor) => visitor.visitCommentReference(this);
Token get beginToken => _identifier.beginToken;
@@ -2945,7 +2773,7 @@
/**
* The first token in the token stream that was parsed to form this compilation unit.
*/
- Token _beginToken;
+ final Token beginToken;
/**
* The script tag at the beginning of the compilation unit, or `null` if there is no script
@@ -2956,18 +2784,18 @@
/**
* The directives contained in this compilation unit.
*/
- NodeList<Directive> directives;
+ NodeList<Directive> _directives;
/**
* The declarations contained in this compilation unit.
*/
- NodeList<CompilationUnitMember> declarations;
+ NodeList<CompilationUnitMember> _declarations;
/**
* The last token in the token stream that was parsed to form this compilation unit. This token
* should always have a type of [TokenType.EOF].
*/
- Token _endToken;
+ final Token endToken;
/**
* The element associated with this compilation unit, or `null` if the AST structure has not
@@ -2989,32 +2817,29 @@
* @param declarations the declarations contained in this compilation unit
* @param endToken the last token in the token stream
*/
- CompilationUnit.full(Token beginToken, ScriptTag scriptTag, List<Directive> directives, List<CompilationUnitMember> declarations, Token endToken) {
- this.directives = new NodeList<Directive>(this);
- this.declarations = new NodeList<CompilationUnitMember>(this);
- this._beginToken = beginToken;
+ CompilationUnit(this.beginToken, ScriptTag scriptTag, List<Directive> directives, List<CompilationUnitMember> declarations, this.endToken) {
+ this._directives = new NodeList<Directive>(this);
+ this._declarations = new NodeList<CompilationUnitMember>(this);
this._scriptTag = becomeParentOf(scriptTag);
- this.directives.addAll(directives);
- this.declarations.addAll(declarations);
- this._endToken = endToken;
+ this._directives.addAll(directives);
+ this._declarations.addAll(declarations);
}
- /**
- * Initialize a newly created compilation unit to have the given directives and declarations.
- *
- * @param beginToken the first token in the token stream
- * @param scriptTag the script tag at the beginning of the compilation unit
- * @param directives the directives contained in this compilation unit
- * @param declarations the declarations contained in this compilation unit
- * @param endToken the last token in the token stream
- */
- CompilationUnit({Token beginToken, ScriptTag scriptTag, List<Directive> directives, List<CompilationUnitMember> declarations, Token endToken}) : this.full(beginToken, scriptTag, directives, declarations, endToken);
-
accept(ASTVisitor visitor) => visitor.visitCompilationUnit(this);
- Token get beginToken => _beginToken;
+ /**
+ * Return the declarations contained in this compilation unit.
+ *
+ * @return the declarations contained in this compilation unit
+ */
+ NodeList<CompilationUnitMember> get declarations => _declarations;
- Token get endToken => _endToken;
+ /**
+ * Return the directives contained in this compilation unit.
+ *
+ * @return the directives contained in this compilation unit
+ */
+ NodeList<Directive> get directives => _directives;
int get length {
Token endToken = this.endToken;
@@ -3046,8 +2871,8 @@
void visitChildren(ASTVisitor visitor) {
safelyVisitChild(_scriptTag, visitor);
if (directivesAreBeforeDeclarations()) {
- directives.accept(visitor);
- declarations.accept(visitor);
+ _directives.accept(visitor);
+ _declarations.accept(visitor);
} else {
for (ASTNode child in sortedDirectivesAndDeclarations) {
child.accept(visitor);
@@ -3061,11 +2886,11 @@
* @return `true` if all of the directives are lexically before any declarations
*/
bool directivesAreBeforeDeclarations() {
- if (directives.isEmpty || declarations.isEmpty) {
+ if (_directives.isEmpty || _declarations.isEmpty) {
return true;
}
- Directive lastDirective = directives[directives.length - 1];
- CompilationUnitMember firstDeclaration = declarations[0];
+ Directive lastDirective = _directives[_directives.length - 1];
+ CompilationUnitMember firstDeclaration = _declarations[0];
return lastDirective.offset < firstDeclaration.offset;
}
@@ -3078,8 +2903,8 @@
*/
List<ASTNode> get sortedDirectivesAndDeclarations {
List<ASTNode> childList = new List<ASTNode>();
- childList.addAll(directives);
- childList.addAll(declarations);
+ childList.addAll(_directives);
+ childList.addAll(_declarations);
List<ASTNode> children = new List.from(childList);
children.sort(ASTNode.LEXICAL_ORDER);
return children;
@@ -3109,15 +2934,7 @@
* @param comment the documentation comment associated with this member
* @param metadata the annotations associated with this member
*/
- CompilationUnitMember.full(Comment comment, List<Annotation> metadata) : super.full(comment, metadata);
-
- /**
- * Initialize a newly created generic compilation unit member.
- *
- * @param comment the documentation comment associated with this member
- * @param metadata the annotations associated with this member
- */
- CompilationUnitMember({Comment comment, List<Annotation> metadata}) : this.full(comment, metadata);
+ CompilationUnitMember(Comment comment, List<Annotation> metadata) : super(comment, metadata);
}
/**
@@ -3167,27 +2984,12 @@
* @param elseExpression the expression that is executed if the condition evaluates to
* `false`
*/
- ConditionalExpression.full(Expression condition, Token question, Expression thenExpression, Token colon, Expression elseExpression) {
+ ConditionalExpression(Expression condition, this.question, Expression thenExpression, this.colon, Expression elseExpression) {
this._condition = becomeParentOf(condition);
- this.question = question;
this._thenExpression = becomeParentOf(thenExpression);
- this.colon = colon;
this._elseExpression = becomeParentOf(elseExpression);
}
- /**
- * Initialize a newly created conditional expression.
- *
- * @param condition the condition used to determine which expression is executed next
- * @param question the token used to separate the condition from the then expression
- * @param thenExpression the expression that is executed if the condition evaluates to
- * `true`
- * @param colon the token used to separate the then expression from the else expression
- * @param elseExpression the expression that is executed if the condition evaluates to
- * `false`
- */
- ConditionalExpression({Expression condition, Token question, Expression thenExpression, Token colon, Expression elseExpression}) : this.full(condition, question, thenExpression, colon, elseExpression);
-
accept(ASTVisitor visitor) => visitor.visitConditionalExpression(this);
Token get beginToken => _condition.beginToken;
@@ -3328,7 +3130,7 @@
/**
* The initializers associated with the constructor.
*/
- NodeList<ConstructorInitializer> initializers;
+ NodeList<ConstructorInitializer> _initializers;
/**
* The name of the constructor to which this constructor will be redirected, or `null` if
@@ -3345,7 +3147,7 @@
* The element associated with this constructor, or `null` if the AST structure has not been
* resolved or if this constructor could not be resolved.
*/
- ConstructorElement _element;
+ ConstructorElement element;
/**
* Initialize a newly created constructor declaration.
@@ -3365,41 +3167,16 @@
* redirected
* @param body the body of the constructor
*/
- ConstructorDeclaration.full(Comment comment, List<Annotation> metadata, Token externalKeyword, Token constKeyword, Token factoryKeyword, Identifier returnType, Token period, SimpleIdentifier name, FormalParameterList parameters, Token separator, List<ConstructorInitializer> initializers, ConstructorName redirectedConstructor, FunctionBody body) : super.full(comment, metadata) {
- this.initializers = new NodeList<ConstructorInitializer>(this);
- this.externalKeyword = externalKeyword;
- this.constKeyword = constKeyword;
- this.factoryKeyword = factoryKeyword;
+ ConstructorDeclaration(Comment comment, List<Annotation> metadata, this.externalKeyword, this.constKeyword, this.factoryKeyword, Identifier returnType, this.period, SimpleIdentifier name, FormalParameterList parameters, this.separator, List<ConstructorInitializer> initializers, ConstructorName redirectedConstructor, FunctionBody body) : super(comment, metadata) {
+ this._initializers = new NodeList<ConstructorInitializer>(this);
this._returnType = becomeParentOf(returnType);
- this.period = period;
this._name = becomeParentOf(name);
this._parameters = becomeParentOf(parameters);
- this.separator = separator;
- this.initializers.addAll(initializers);
+ this._initializers.addAll(initializers);
this._redirectedConstructor = becomeParentOf(redirectedConstructor);
this._body = becomeParentOf(body);
}
- /**
- * Initialize a newly created constructor declaration.
- *
- * @param externalKeyword the token for the 'external' keyword
- * @param comment the documentation comment associated with this constructor
- * @param metadata the annotations associated with this constructor
- * @param constKeyword the token for the 'const' keyword
- * @param factoryKeyword the token for the 'factory' keyword
- * @param returnType the return type of the constructor
- * @param period the token for the period before the constructor name
- * @param name the name of the constructor
- * @param parameters the parameters associated with the constructor
- * @param separator the token for the colon or equals before the initializers
- * @param initializers the initializers associated with the constructor
- * @param redirectedConstructor the name of the constructor to which this constructor will be
- * redirected
- * @param body the body of the constructor
- */
- ConstructorDeclaration({Comment comment, List<Annotation> metadata, Token externalKeyword, Token constKeyword, Token factoryKeyword, Identifier returnType, Token period, SimpleIdentifier name, FormalParameterList parameters, Token separator, List<ConstructorInitializer> initializers, ConstructorName redirectedConstructor, FunctionBody body}) : this.full(comment, metadata, externalKeyword, constKeyword, factoryKeyword, returnType, period, name, parameters, separator, initializers, redirectedConstructor, body);
-
accept(ASTVisitor visitor) => visitor.visitConstructorDeclaration(this);
/**
@@ -3409,18 +3186,23 @@
*/
FunctionBody get body => _body;
- ConstructorElement get element => _element;
-
Token get endToken {
if (_body != null) {
return _body.endToken;
- } else if (!initializers.isEmpty) {
- return initializers.endToken;
+ } else if (!_initializers.isEmpty) {
+ return _initializers.endToken;
}
return _parameters.endToken;
}
/**
+ * Return the initializers associated with the constructor.
+ *
+ * @return the initializers associated with the constructor
+ */
+ NodeList<ConstructorInitializer> get initializers => _initializers;
+
+ /**
* Return the name of the constructor, or `null` if the constructor being declared is
* unnamed.
*
@@ -3462,15 +3244,6 @@
}
/**
- * Set the element associated with this constructor to the given element.
- *
- * @param element the element associated with this constructor
- */
- void set element(ConstructorElement element) {
- this._element = element;
- }
-
- /**
* Set the name of the constructor to the given identifier.
*
* @param identifier the name of the constructor
@@ -3513,7 +3286,7 @@
safelyVisitChild(_returnType, visitor);
safelyVisitChild(_name, visitor);
safelyVisitChild(_parameters, visitor);
- initializers.accept(visitor);
+ _initializers.accept(visitor);
safelyVisitChild(_redirectedConstructor, visitor);
safelyVisitChild(_body, visitor);
}
@@ -3593,26 +3366,11 @@
* @param equals the token for the equal sign between the field name and the expression
* @param expression the expression computing the value to which the field will be initialized
*/
- ConstructorFieldInitializer.full(Token keyword, Token period, SimpleIdentifier fieldName, Token equals, Expression expression) {
- this.keyword = keyword;
- this.period = period;
+ ConstructorFieldInitializer(this.keyword, this.period, SimpleIdentifier fieldName, this.equals, Expression expression) {
this._fieldName = becomeParentOf(fieldName);
- this.equals = equals;
this._expression = becomeParentOf(expression);
}
- /**
- * Initialize a newly created field initializer to initialize the field with the given name to the
- * value of the given expression.
- *
- * @param keyword the token for the 'this' keyword
- * @param period the token for the period after the 'this' keyword
- * @param fieldName the name of the field being initialized
- * @param equals the token for the equal sign between the field name and the expression
- * @param expression the expression computing the value to which the field will be initialized
- */
- ConstructorFieldInitializer({Token keyword, Token period, SimpleIdentifier fieldName, Token equals, Expression expression}) : this.full(keyword, period, fieldName, equals, expression);
-
accept(ASTVisitor visitor) => visitor.visitConstructorFieldInitializer(this);
Token get beginToken {
@@ -3720,21 +3478,11 @@
* @param period the token for the period before the constructor name
* @param name the name of the constructor
*/
- ConstructorName.full(TypeName type, Token period, SimpleIdentifier name) {
+ ConstructorName(TypeName type, this.period, SimpleIdentifier name) {
this._type = becomeParentOf(type);
- this.period = period;
this._name = becomeParentOf(name);
}
- /**
- * Initialize a newly created constructor name.
- *
- * @param type the name of the type defining the constructor
- * @param period the token for the period before the constructor name
- * @param name the name of the constructor
- */
- ConstructorName({TypeName type, Token period, SimpleIdentifier name}) : this.full(type, period, name);
-
accept(ASTVisitor visitor) => visitor.visitConstructorName(this);
Token get beginToken => _type.beginToken;
@@ -3837,21 +3585,10 @@
* @param label the label associated with the statement
* @param semicolon the semicolon terminating the statement
*/
- ContinueStatement.full(Token keyword, SimpleIdentifier label, Token semicolon) {
- this.keyword = keyword;
+ ContinueStatement(this.keyword, SimpleIdentifier label, this.semicolon) {
this._label = becomeParentOf(label);
- this.semicolon = semicolon;
}
- /**
- * Initialize a newly created continue statement.
- *
- * @param keyword the token representing the 'continue' keyword
- * @param label the label associated with the statement
- * @param semicolon the semicolon terminating the statement
- */
- ContinueStatement({Token keyword, SimpleIdentifier label, Token semicolon}) : this.full(keyword, label, semicolon);
-
accept(ASTVisitor visitor) => visitor.visitContinueStatement(this);
Token get beginToken => keyword;
@@ -3892,15 +3629,7 @@
* @param comment the documentation comment associated with this declaration
* @param metadata the annotations associated with this declaration
*/
- Declaration.full(Comment comment, List<Annotation> metadata) : super.full(comment, metadata);
-
- /**
- * Initialize a newly created declaration.
- *
- * @param comment the documentation comment associated with this declaration
- * @param metadata the annotations associated with this declaration
- */
- Declaration({Comment comment, List<Annotation> metadata}) : this.full(comment, metadata);
+ Declaration(Comment comment, List<Annotation> metadata) : super(comment, metadata);
/**
* Return the element associated with this declaration, or `null` if either this node
@@ -3938,7 +3667,7 @@
/**
* The name of the variable being declared.
*/
- SimpleIdentifier identifier;
+ SimpleIdentifier _identifier;
/**
* Initialize a newly created formal parameter.
@@ -3949,23 +3678,11 @@
* @param type the name of the declared type of the parameter
* @param identifier the name of the parameter being declared
*/
- DeclaredIdentifier.full(Comment comment, List<Annotation> metadata, Token keyword, TypeName type, SimpleIdentifier identifier) : super.full(comment, metadata) {
- this.keyword = keyword;
+ DeclaredIdentifier(Comment comment, List<Annotation> metadata, this.keyword, TypeName type, SimpleIdentifier identifier) : super(comment, metadata) {
this._type = becomeParentOf(type);
- this.identifier = becomeParentOf(identifier);
+ this._identifier = becomeParentOf(identifier);
}
- /**
- * Initialize a newly created formal parameter.
- *
- * @param comment the documentation comment associated with this parameter
- * @param metadata the annotations associated with this parameter
- * @param keyword the token representing either the 'final', 'const' or 'var' keyword
- * @param type the name of the declared type of the parameter
- * @param identifier the name of the parameter being declared
- */
- DeclaredIdentifier({Comment comment, List<Annotation> metadata, Token keyword, TypeName type, SimpleIdentifier identifier}) : this.full(comment, metadata, keyword, type, identifier);
-
accept(ASTVisitor visitor) => visitor.visitDeclaredIdentifier(this);
LocalVariableElement get element {
@@ -3976,7 +3693,14 @@
return identifier.staticElement as LocalVariableElement;
}
- Token get endToken => identifier.endToken;
+ Token get endToken => _identifier.endToken;
+
+ /**
+ * Return the name of the variable being declared.
+ *
+ * @return the name of the variable being declared
+ */
+ SimpleIdentifier get identifier => _identifier;
/**
* Return the name of the declared type of the parameter, or `null` if the parameter does
@@ -4014,7 +3738,7 @@
void visitChildren(ASTVisitor visitor) {
super.visitChildren(visitor);
safelyVisitChild(_type, visitor);
- safelyVisitChild(identifier, visitor);
+ safelyVisitChild(_identifier, visitor);
}
Token get firstTokenAfterCommentAndMetadata {
@@ -4023,7 +3747,7 @@
} else if (_type != null) {
return _type.beginToken;
}
- return identifier.beginToken;
+ return _identifier.beginToken;
}
}
@@ -4051,7 +3775,7 @@
/**
* The kind of this parameter.
*/
- ParameterKind _kind;
+ ParameterKind kind;
/**
* The token separating the parameter from the default value, or `null` if there is no
@@ -4073,23 +3797,11 @@
* @param separator the token separating the parameter from the default value
* @param defaultValue the expression computing the default value for the parameter
*/
- DefaultFormalParameter.full(NormalFormalParameter parameter, ParameterKind kind, Token separator, Expression defaultValue) {
+ DefaultFormalParameter(NormalFormalParameter parameter, this.kind, this.separator, Expression defaultValue) {
this._parameter = becomeParentOf(parameter);
- this._kind = kind;
- this.separator = separator;
this._defaultValue = becomeParentOf(defaultValue);
}
- /**
- * Initialize a newly created default formal parameter.
- *
- * @param parameter the formal parameter with which the default value is associated
- * @param kind the kind of this parameter
- * @param separator the token separating the parameter from the default value
- * @param defaultValue the expression computing the default value for the parameter
- */
- DefaultFormalParameter({NormalFormalParameter parameter, ParameterKind kind, Token separator, Expression defaultValue}) : this.full(parameter, kind, separator, defaultValue);
-
accept(ASTVisitor visitor) => visitor.visitDefaultFormalParameter(this);
Token get beginToken => _parameter.beginToken;
@@ -4111,8 +3823,6 @@
SimpleIdentifier get identifier => _parameter.identifier;
- ParameterKind get kind => _kind;
-
/**
* Return the formal parameter with which the default value is associated.
*
@@ -4134,15 +3844,6 @@
}
/**
- * Set the kind of this parameter to the given kind.
- *
- * @param kind the kind of this parameter
- */
- void set kind(ParameterKind kind) {
- this._kind = kind;
- }
-
- /**
* Set the formal parameter with which the default value is associated to the given parameter.
*
* @param formalParameter the formal parameter with which the default value is associated
@@ -4185,15 +3886,7 @@
* @param comment the documentation comment associated with this directive
* @param metadata the annotations associated with the directive
*/
- Directive.full(Comment comment, List<Annotation> metadata) : super.full(comment, metadata);
-
- /**
- * Initialize a newly create directive.
- *
- * @param comment the documentation comment associated with this directive
- * @param metadata the annotations associated with the directive
- */
- Directive({Comment comment, List<Annotation> metadata}) : this.full(comment, metadata);
+ Directive(Comment comment, List<Annotation> metadata) : super(comment, metadata);
/**
* Return the element associated with this directive, or `null` if the AST structure has not
@@ -4279,29 +3972,13 @@
* @param rightParenthesis the right parenthesis
* @param semicolon the semicolon terminating the statement
*/
- DoStatement.full(Token doKeyword, Statement body, Token whileKeyword, Token leftParenthesis, Expression condition, Token rightParenthesis, Token semicolon) {
- this.doKeyword = doKeyword;
+ DoStatement(this.doKeyword, Statement body, this.whileKeyword, Token leftParenthesis, Expression condition, Token rightParenthesis, this.semicolon) {
this._body = becomeParentOf(body);
- this.whileKeyword = whileKeyword;
this._leftParenthesis = leftParenthesis;
this._condition = becomeParentOf(condition);
this._rightParenthesis = rightParenthesis;
- this.semicolon = semicolon;
}
- /**
- * Initialize a newly created do loop.
- *
- * @param doKeyword the token representing the 'do' keyword
- * @param body the body of the loop
- * @param whileKeyword the token representing the 'while' keyword
- * @param leftParenthesis the left parenthesis
- * @param condition the condition that determines when the loop will terminate
- * @param rightParenthesis the right parenthesis
- * @param semicolon the semicolon terminating the statement
- */
- DoStatement({Token doKeyword, Statement body, Token whileKeyword, Token leftParenthesis, Expression condition, Token rightParenthesis, Token semicolon}) : this.full(doKeyword, body, whileKeyword, leftParenthesis, condition, rightParenthesis, semicolon);
-
accept(ASTVisitor visitor) => visitor.visitDoStatement(this);
Token get beginToken => doKeyword;
@@ -4409,18 +4086,7 @@
* @param literal the token representing the literal
* @param value the value of the literal
*/
- DoubleLiteral.full(Token literal, double value) {
- this.literal = literal;
- this.value = value;
- }
-
- /**
- * Initialize a newly created floating point literal.
- *
- * @param literal the token representing the literal
- * @param value the value of the literal
- */
- DoubleLiteral({Token literal, double value}) : this.full(literal, value);
+ DoubleLiteral(this.literal, this.value);
accept(ASTVisitor visitor) => visitor.visitDoubleLiteral(this);
@@ -4454,16 +4120,7 @@
*
* @param semicolon the token representing the semicolon that marks the end of the function body
*/
- EmptyFunctionBody.full(Token semicolon) {
- this.semicolon = semicolon;
- }
-
- /**
- * Initialize a newly created function body.
- *
- * @param semicolon the token representing the semicolon that marks the end of the function body
- */
- EmptyFunctionBody({Token semicolon}) : this.full(semicolon);
+ EmptyFunctionBody(this.semicolon);
accept(ASTVisitor visitor) => visitor.visitEmptyFunctionBody(this);
@@ -4496,16 +4153,7 @@
*
* @param semicolon the semicolon terminating the statement
*/
- EmptyStatement.full(Token semicolon) {
- this.semicolon = semicolon;
- }
-
- /**
- * Initialize a newly created empty statement.
- *
- * @param semicolon the semicolon terminating the statement
- */
- EmptyStatement({Token semicolon}) : this.full(semicolon);
+ EmptyStatement(this.semicolon);
accept(ASTVisitor visitor) => visitor.visitEmptyStatement(this);
@@ -4523,11 +4171,9 @@
* @coverage dart.engine.ast
*/
class EphemeralIdentifier extends SimpleIdentifier {
- EphemeralIdentifier.full(ASTNode parent, int location) : super.full(new StringToken(TokenType.IDENTIFIER, "", location)) {
+ EphemeralIdentifier(ASTNode parent, int location) : super(new StringToken(TokenType.IDENTIFIER, "", location)) {
parent.becomeParentOf(this);
}
-
- EphemeralIdentifier({ASTNode parent, int location}) : this.full(parent, location);
}
/**
@@ -4551,19 +4197,7 @@
* @param combinators the combinators used to control which names are exported
* @param semicolon the semicolon terminating the directive
*/
- ExportDirective.full(Comment comment, List<Annotation> metadata, Token keyword, StringLiteral libraryUri, List<Combinator> combinators, Token semicolon) : super.full(comment, metadata, keyword, libraryUri, combinators, semicolon);
-
- /**
- * Initialize a newly created export directive.
- *
- * @param comment the documentation comment associated with this directive
- * @param metadata the annotations associated with the directive
- * @param keyword the token representing the 'export' keyword
- * @param libraryUri the URI of the library being exported
- * @param combinators the combinators used to control which names are exported
- * @param semicolon the semicolon terminating the directive
- */
- ExportDirective({Comment comment, List<Annotation> metadata, Token keyword, StringLiteral libraryUri, List<Combinator> combinators, Token semicolon}) : this.full(comment, metadata, keyword, libraryUri, combinators, semicolon);
+ ExportDirective(Comment comment, List<Annotation> metadata, Token keyword, StringLiteral libraryUri, List<Combinator> combinators, Token semicolon) : super(comment, metadata, keyword, libraryUri, combinators, semicolon);
accept(ASTVisitor visitor) => visitor.visitExportDirective(this);
@@ -4770,22 +4404,10 @@
* @param expression the expression representing the body of the function
* @param semicolon the semicolon terminating the statement
*/
- ExpressionFunctionBody.full(Token functionDefinition, Expression expression, Token semicolon) {
- this.functionDefinition = functionDefinition;
+ ExpressionFunctionBody(this.functionDefinition, Expression expression, this.semicolon) {
this._expression = becomeParentOf(expression);
- this.semicolon = semicolon;
}
- /**
- * Initialize a newly created function body consisting of a block of statements.
- *
- * @param functionDefinition the token introducing the expression that represents the body of the
- * function
- * @param expression the expression representing the body of the function
- * @param semicolon the semicolon terminating the statement
- */
- ExpressionFunctionBody({Token functionDefinition, Expression expression, Token semicolon}) : this.full(functionDefinition, expression, semicolon);
-
accept(ASTVisitor visitor) => visitor.visitExpressionFunctionBody(this);
Token get beginToken => functionDefinition;
@@ -4846,19 +4468,10 @@
* @param expression the expression that comprises the statement
* @param semicolon the semicolon terminating the statement
*/
- ExpressionStatement.full(Expression expression, Token semicolon) {
+ ExpressionStatement(Expression expression, this.semicolon) {
this._expression = becomeParentOf(expression);
- this.semicolon = semicolon;
}
- /**
- * Initialize a newly created expression statement.
- *
- * @param expression the expression that comprises the statement
- * @param semicolon the semicolon terminating the statement
- */
- ExpressionStatement({Expression expression, Token semicolon}) : this.full(expression, semicolon);
-
accept(ASTVisitor visitor) => visitor.visitExpressionStatement(this);
Token get beginToken => _expression.beginToken;
@@ -4921,19 +4534,10 @@
* @param keyword the token representing the 'extends' keyword
* @param superclass the name of the class that is being extended
*/
- ExtendsClause.full(Token keyword, TypeName superclass) {
- this.keyword = keyword;
+ ExtendsClause(this.keyword, TypeName superclass) {
this._superclass = becomeParentOf(superclass);
}
- /**
- * Initialize a newly created extends clause.
- *
- * @param keyword the token representing the 'extends' keyword
- * @param superclass the name of the class that is being extended
- */
- ExtendsClause({Token keyword, TypeName superclass}) : this.full(keyword, superclass);
-
accept(ASTVisitor visitor) => visitor.visitExtendsClause(this);
Token get beginToken => keyword;
@@ -4997,23 +4601,10 @@
* @param fieldList the fields being declared
* @param semicolon the semicolon terminating the declaration
*/
- FieldDeclaration.full(Comment comment, List<Annotation> metadata, Token staticKeyword, VariableDeclarationList fieldList, Token semicolon) : super.full(comment, metadata) {
- this.staticKeyword = staticKeyword;
+ FieldDeclaration(Comment comment, List<Annotation> metadata, this.staticKeyword, VariableDeclarationList fieldList, this.semicolon) : super(comment, metadata) {
this._fieldList = becomeParentOf(fieldList);
- this.semicolon = semicolon;
}
- /**
- * Initialize a newly created field declaration.
- *
- * @param comment the documentation comment associated with this field
- * @param metadata the annotations associated with this field
- * @param staticKeyword the token representing the 'static' keyword
- * @param fieldList the fields being declared
- * @param semicolon the semicolon terminating the declaration
- */
- FieldDeclaration({Comment comment, List<Annotation> metadata, Token staticKeyword, VariableDeclarationList fieldList, Token semicolon}) : this.full(comment, metadata, staticKeyword, fieldList, semicolon);
-
accept(ASTVisitor visitor) => visitor.visitFieldDeclaration(this);
Element get element => null;
@@ -5108,29 +4699,11 @@
* @param parameters the parameters of the function-typed parameter, or `null` if this is
* not a function-typed field formal parameter
*/
- FieldFormalParameter.full(Comment comment, List<Annotation> metadata, Token keyword, TypeName type, Token thisToken, Token period, SimpleIdentifier identifier, FormalParameterList parameters) : super.full(comment, metadata, identifier) {
- this.keyword = keyword;
+ FieldFormalParameter(Comment comment, List<Annotation> metadata, this.keyword, TypeName type, this.thisToken, this.period, SimpleIdentifier identifier, FormalParameterList parameters) : super(comment, metadata, identifier) {
this._type = becomeParentOf(type);
- this.thisToken = thisToken;
- this.period = period;
this._parameters = becomeParentOf(parameters);
}
- /**
- * Initialize a newly created formal parameter.
- *
- * @param comment the documentation comment associated with this parameter
- * @param metadata the annotations associated with this parameter
- * @param keyword the token representing either the 'final', 'const' or 'var' keyword
- * @param type the name of the declared type of the parameter
- * @param thisToken the token representing the 'this' keyword
- * @param period the token representing the period
- * @param identifier the name of the parameter being declared
- * @param parameters the parameters of the function-typed parameter, or `null` if this is
- * not a function-typed field formal parameter
- */
- FieldFormalParameter({Comment comment, List<Annotation> metadata, Token keyword, TypeName type, Token thisToken, Token period, SimpleIdentifier identifier, FormalParameterList parameters}) : this.full(comment, metadata, keyword, type, thisToken, period, identifier, parameters);
-
accept(ASTVisitor visitor) => visitor.visitFieldFormalParameter(this);
Token get beginToken {
@@ -5254,13 +4827,9 @@
* @param rightParenthesis the right parenthesis
* @param body the body of the loop
*/
- ForEachStatement.con1_full(Token forKeyword, Token leftParenthesis, DeclaredIdentifier loopVariable, Token inKeyword, Expression iterator, Token rightParenthesis, Statement body) {
- this.forKeyword = forKeyword;
- this.leftParenthesis = leftParenthesis;
+ ForEachStatement.con1(this.forKeyword, this.leftParenthesis, DeclaredIdentifier loopVariable, this.inKeyword, Expression iterator, this.rightParenthesis, Statement body) {
this._loopVariable = becomeParentOf(loopVariable);
- this.inKeyword = inKeyword;
this._iterator = becomeParentOf(iterator);
- this.rightParenthesis = rightParenthesis;
this._body = becomeParentOf(body);
}
@@ -5269,45 +4838,17 @@
*
* @param forKeyword the token representing the 'for' keyword
* @param leftParenthesis the left parenthesis
- * @param loopVariable the declaration of the loop variable
- * @param iterator the expression evaluated to produce the iterator
- * @param rightParenthesis the right parenthesis
- * @param body the body of the loop
- */
- ForEachStatement.con1({Token forKeyword, Token leftParenthesis, DeclaredIdentifier loopVariable, Token inKeyword, Expression iterator, Token rightParenthesis, Statement body}) : this.con1_full(forKeyword, leftParenthesis, loopVariable, inKeyword, iterator, rightParenthesis, body);
-
- /**
- * Initialize a newly created for-each statement.
- *
- * @param forKeyword the token representing the 'for' keyword
- * @param leftParenthesis the left parenthesis
* @param identifier the loop variable
* @param iterator the expression evaluated to produce the iterator
* @param rightParenthesis the right parenthesis
* @param body the body of the loop
*/
- ForEachStatement.con2_full(Token forKeyword, Token leftParenthesis, SimpleIdentifier identifier, Token inKeyword, Expression iterator, Token rightParenthesis, Statement body) {
- this.forKeyword = forKeyword;
- this.leftParenthesis = leftParenthesis;
+ ForEachStatement.con2(this.forKeyword, this.leftParenthesis, SimpleIdentifier identifier, this.inKeyword, Expression iterator, this.rightParenthesis, Statement body) {
this._identifier = becomeParentOf(identifier);
- this.inKeyword = inKeyword;
this._iterator = becomeParentOf(iterator);
- this.rightParenthesis = rightParenthesis;
this._body = becomeParentOf(body);
}
- /**
- * Initialize a newly created for-each statement.
- *
- * @param forKeyword the token representing the 'for' keyword
- * @param leftParenthesis the left parenthesis
- * @param identifier the loop variable
- * @param iterator the expression evaluated to produce the iterator
- * @param rightParenthesis the right parenthesis
- * @param body the body of the loop
- */
- ForEachStatement.con2({Token forKeyword, Token leftParenthesis, SimpleIdentifier identifier, Token inKeyword, Expression iterator, Token rightParenthesis, Statement body}) : this.con2_full(forKeyword, leftParenthesis, identifier, inKeyword, iterator, rightParenthesis, body);
-
accept(ASTVisitor visitor) => visitor.visitForEachStatement(this);
Token get beginToken => forKeyword;
@@ -5448,7 +4989,7 @@
/**
* The list of expressions run after each execution of the loop body.
*/
- NodeList<Expression> updaters;
+ NodeList<Expression> _updaters;
/**
* The right parenthesis.
@@ -5474,36 +5015,15 @@
* @param rightParenthesis the right parenthesis
* @param body the body of the loop
*/
- ForStatement.full(Token forKeyword, Token leftParenthesis, VariableDeclarationList variableList, Expression initialization, Token leftSeparator, Expression condition, Token rightSeparator, List<Expression> updaters, Token rightParenthesis, Statement body) {
- this.updaters = new NodeList<Expression>(this);
- this.forKeyword = forKeyword;
- this.leftParenthesis = leftParenthesis;
+ ForStatement(this.forKeyword, this.leftParenthesis, VariableDeclarationList variableList, Expression initialization, this.leftSeparator, Expression condition, this.rightSeparator, List<Expression> updaters, this.rightParenthesis, Statement body) {
+ this._updaters = new NodeList<Expression>(this);
this._variableList = becomeParentOf(variableList);
this._initialization = becomeParentOf(initialization);
- this.leftSeparator = leftSeparator;
this._condition = becomeParentOf(condition);
- this.rightSeparator = rightSeparator;
- this.updaters.addAll(updaters);
- this.rightParenthesis = rightParenthesis;
+ this._updaters.addAll(updaters);
this._body = becomeParentOf(body);
}
- /**
- * Initialize a newly created for statement.
- *
- * @param forKeyword the token representing the 'for' keyword
- * @param leftParenthesis the left parenthesis
- * @param variableList the declaration of the loop variables
- * @param initialization the initialization expression
- * @param leftSeparator the semicolon separating the initializer and the condition
- * @param condition the condition used to determine when to terminate the loop
- * @param rightSeparator the semicolon separating the condition and the updater
- * @param updaters the list of expressions run after each execution of the loop body
- * @param rightParenthesis the right parenthesis
- * @param body the body of the loop
- */
- ForStatement({Token forKeyword, Token leftParenthesis, VariableDeclarationList variableList, Expression initialization, Token leftSeparator, Expression condition, Token rightSeparator, List<Expression> updaters, Token rightParenthesis, Statement body}) : this.full(forKeyword, leftParenthesis, variableList, initialization, leftSeparator, condition, rightSeparator, updaters, rightParenthesis, body);
-
accept(ASTVisitor visitor) => visitor.visitForStatement(this);
Token get beginToken => forKeyword;
@@ -5533,6 +5053,13 @@
Expression get initialization => _initialization;
/**
+ * Return the list of expressions run after each execution of the loop body.
+ *
+ * @return the list of expressions run after each execution of the loop body
+ */
+ NodeList<Expression> get updaters => _updaters;
+
+ /**
* Return the declaration of the loop variables, or `null` if there are no variables.
*
* @return the declaration of the loop variables, or `null` if there are no variables
@@ -5579,7 +5106,7 @@
safelyVisitChild(_variableList, visitor);
safelyVisitChild(_initialization, visitor);
safelyVisitChild(_condition, visitor);
- updaters.accept(visitor);
+ _updaters.accept(visitor);
safelyVisitChild(_body, visitor);
}
}
@@ -5683,7 +5210,7 @@
/**
* The parameters associated with the method.
*/
- NodeList<FormalParameter> parameters;
+ NodeList<FormalParameter> _parameters;
/**
* The left square bracket ('[') or left curly brace ('{') introducing the optional parameters, or
@@ -5711,26 +5238,15 @@
* @param rightDelimiter the right delimiter introducing the optional parameters
* @param rightParenthesis the right parenthesis
*/
- FormalParameterList.full(Token leftParenthesis, List<FormalParameter> parameters, Token leftDelimiter, Token rightDelimiter, Token rightParenthesis) {
- this.parameters = new NodeList<FormalParameter>(this);
+ FormalParameterList(Token leftParenthesis, List<FormalParameter> parameters, Token leftDelimiter, Token rightDelimiter, Token rightParenthesis) {
+ this._parameters = new NodeList<FormalParameter>(this);
this._leftParenthesis = leftParenthesis;
- this.parameters.addAll(parameters);
+ this._parameters.addAll(parameters);
this._leftDelimiter = leftDelimiter;
this._rightDelimiter = rightDelimiter;
this._rightParenthesis = rightParenthesis;
}
- /**
- * Initialize a newly created parameter list.
- *
- * @param leftParenthesis the left parenthesis
- * @param parameters the parameters associated with the method
- * @param leftDelimiter the left delimiter introducing the optional parameters
- * @param rightDelimiter the right delimiter introducing the optional parameters
- * @param rightParenthesis the right parenthesis
- */
- FormalParameterList({Token leftParenthesis, List<FormalParameter> parameters, Token leftDelimiter, Token rightDelimiter, Token rightParenthesis}) : this.full(leftParenthesis, parameters, leftDelimiter, rightDelimiter, rightParenthesis);
-
accept(ASTVisitor visitor) => visitor.visitFormalParameterList(this);
Token get beginToken => _leftParenthesis;
@@ -5760,15 +5276,22 @@
* @return the elements representing the parameters in this list
*/
List<ParameterElement> get parameterElements {
- int count = parameters.length;
+ int count = _parameters.length;
List<ParameterElement> types = new List<ParameterElement>(count);
for (int i = 0; i < count; i++) {
- types[i] = parameters[i].element;
+ types[i] = _parameters[i].element;
}
return types;
}
/**
+ * Return the parameters associated with the method.
+ *
+ * @return the parameters associated with the method
+ */
+ NodeList<FormalParameter> get parameters => _parameters;
+
+ /**
* Return the right square bracket (']') or right curly brace ('}') introducing the optional
* parameters, or `null` if there are no optional parameters.
*
@@ -5823,7 +5346,7 @@
}
void visitChildren(ASTVisitor visitor) {
- parameters.accept(visitor);
+ _parameters.accept(visitor);
}
}
@@ -5896,27 +5419,12 @@
* @param name the name of the function
* @param functionExpression the function expression being wrapped
*/
- FunctionDeclaration.full(Comment comment, List<Annotation> metadata, Token externalKeyword, TypeName returnType, Token propertyKeyword, SimpleIdentifier name, FunctionExpression functionExpression) : super.full(comment, metadata) {
- this.externalKeyword = externalKeyword;
+ FunctionDeclaration(Comment comment, List<Annotation> metadata, this.externalKeyword, TypeName returnType, this.propertyKeyword, SimpleIdentifier name, FunctionExpression functionExpression) : super(comment, metadata) {
this._returnType = becomeParentOf(returnType);
- this.propertyKeyword = propertyKeyword;
this._name = becomeParentOf(name);
this._functionExpression = becomeParentOf(functionExpression);
}
- /**
- * Initialize a newly created function declaration.
- *
- * @param comment the documentation comment associated with this function
- * @param metadata the annotations associated with this function
- * @param externalKeyword the token representing the 'external' keyword
- * @param returnType the return type of the function
- * @param propertyKeyword the token representing the 'get' or 'set' keyword
- * @param name the name of the function
- * @param functionExpression the function expression being wrapped
- */
- FunctionDeclaration({Comment comment, List<Annotation> metadata, Token externalKeyword, TypeName returnType, Token propertyKeyword, SimpleIdentifier name, FunctionExpression functionExpression}) : this.full(comment, metadata, externalKeyword, returnType, propertyKeyword, name, functionExpression);
-
accept(ASTVisitor visitor) => visitor.visitFunctionDeclaration(this);
ExecutableElement get element => _name != null ? (_name.staticElement as ExecutableElement) : null;
@@ -6017,29 +5525,29 @@
/**
* The function declaration being wrapped.
*/
- FunctionDeclaration functionDeclaration;
+ FunctionDeclaration _functionDeclaration;
/**
* Initialize a newly created function declaration statement.
*
* @param functionDeclaration the the function declaration being wrapped
*/
- FunctionDeclarationStatement.full(FunctionDeclaration functionDeclaration) {
- this.functionDeclaration = becomeParentOf(functionDeclaration);
+ FunctionDeclarationStatement(FunctionDeclaration functionDeclaration) {
+ this._functionDeclaration = becomeParentOf(functionDeclaration);
}
- /**
- * Initialize a newly created function declaration statement.
- *
- * @param functionDeclaration the the function declaration being wrapped
- */
- FunctionDeclarationStatement({FunctionDeclaration functionDeclaration}) : this.full(functionDeclaration);
-
accept(ASTVisitor visitor) => visitor.visitFunctionDeclarationStatement(this);
- Token get beginToken => functionDeclaration.beginToken;
+ Token get beginToken => _functionDeclaration.beginToken;
- Token get endToken => functionDeclaration.endToken;
+ Token get endToken => _functionDeclaration.endToken;
+
+ /**
+ * Return the function declaration being wrapped.
+ *
+ * @return the function declaration being wrapped
+ */
+ FunctionDeclaration get functionDeclaration => _functionDeclaration;
/**
* Set the function declaration being wrapped to the given function declaration.
@@ -6047,11 +5555,11 @@
* @param functionDeclaration the function declaration being wrapped
*/
void set functionExpression(FunctionDeclaration functionDeclaration) {
- this.functionDeclaration = becomeParentOf(functionDeclaration);
+ this._functionDeclaration = becomeParentOf(functionDeclaration);
}
void visitChildren(ASTVisitor visitor) {
- safelyVisitChild(functionDeclaration, visitor);
+ safelyVisitChild(_functionDeclaration, visitor);
}
}
@@ -6088,19 +5596,11 @@
* @param parameters the parameters associated with the function
* @param body the body of the function
*/
- FunctionExpression.full(FormalParameterList parameters, FunctionBody body) {
+ FunctionExpression(FormalParameterList parameters, FunctionBody body) {
this._parameters = becomeParentOf(parameters);
this._body = becomeParentOf(body);
}
- /**
- * Initialize a newly created function declaration.
- *
- * @param parameters the parameters associated with the function
- * @param body the body of the function
- */
- FunctionExpression({FormalParameterList parameters, FunctionBody body}) : this.full(parameters, body);
-
accept(ASTVisitor visitor) => visitor.visitFunctionExpression(this);
Token get beginToken {
@@ -6204,19 +5704,11 @@
* @param function the expression producing the function being invoked
* @param argumentList the list of arguments to the method
*/
- FunctionExpressionInvocation.full(Expression function, ArgumentList argumentList) {
+ FunctionExpressionInvocation(Expression function, ArgumentList argumentList) {
this._function = becomeParentOf(function);
this._argumentList = becomeParentOf(argumentList);
}
- /**
- * Initialize a newly created function expression invocation.
- *
- * @param function the expression producing the function being invoked
- * @param argumentList the list of arguments to the method
- */
- FunctionExpressionInvocation({Expression function, ArgumentList argumentList}) : this.full(function, argumentList);
-
accept(ASTVisitor visitor) => visitor.visitFunctionExpressionInvocation(this);
/**
@@ -6347,27 +5839,13 @@
* @param parameters the parameters associated with the function
* @param semicolon the semicolon terminating the declaration
*/
- FunctionTypeAlias.full(Comment comment, List<Annotation> metadata, Token keyword, TypeName returnType, SimpleIdentifier name, TypeParameterList typeParameters, FormalParameterList parameters, Token semicolon) : super.full(comment, metadata, keyword, semicolon) {
+ FunctionTypeAlias(Comment comment, List<Annotation> metadata, Token keyword, TypeName returnType, SimpleIdentifier name, TypeParameterList typeParameters, FormalParameterList parameters, Token semicolon) : super(comment, metadata, keyword, semicolon) {
this._returnType = becomeParentOf(returnType);
this._name = becomeParentOf(name);
this._typeParameters = becomeParentOf(typeParameters);
this._parameters = becomeParentOf(parameters);
}
- /**
- * Initialize a newly created function type alias.
- *
- * @param comment the documentation comment associated with this type alias
- * @param metadata the annotations associated with this type alias
- * @param keyword the token representing the 'typedef' keyword
- * @param returnType the name of the return type of the function type being defined
- * @param name the name of the type being declared
- * @param typeParameters the type parameters for the type
- * @param parameters the parameters associated with the function
- * @param semicolon the semicolon terminating the declaration
- */
- FunctionTypeAlias({Comment comment, List<Annotation> metadata, Token keyword, TypeName returnType, SimpleIdentifier name, TypeParameterList typeParameters, FormalParameterList parameters, Token semicolon}) : this.full(comment, metadata, keyword, returnType, name, typeParameters, parameters, semicolon);
-
accept(ASTVisitor visitor) => visitor.visitFunctionTypeAlias(this);
FunctionTypeAliasElement get element => _name != null ? (_name.staticElement as FunctionTypeAliasElement) : null;
@@ -6479,23 +5957,11 @@
* @param identifier the name of the function-typed parameter
* @param parameters the parameters of the function-typed parameter
*/
- FunctionTypedFormalParameter.full(Comment comment, List<Annotation> metadata, TypeName returnType, SimpleIdentifier identifier, FormalParameterList parameters) : super.full(comment, metadata, identifier) {
+ FunctionTypedFormalParameter(Comment comment, List<Annotation> metadata, TypeName returnType, SimpleIdentifier identifier, FormalParameterList parameters) : super(comment, metadata, identifier) {
this._returnType = becomeParentOf(returnType);
this._parameters = becomeParentOf(parameters);
}
- /**
- * Initialize a newly created formal parameter.
- *
- * @param comment the documentation comment associated with this parameter
- * @param metadata the annotations associated with this parameter
- * @param returnType the return type of the function, or `null` if the function does not
- * have a return type
- * @param identifier the name of the function-typed parameter
- * @param parameters the parameters of the function-typed parameter
- */
- FunctionTypedFormalParameter({Comment comment, List<Annotation> metadata, TypeName returnType, SimpleIdentifier identifier, FormalParameterList parameters}) : this.full(comment, metadata, returnType, identifier, parameters);
-
accept(ASTVisitor visitor) => visitor.visitFunctionTypedFormalParameter(this);
Token get beginToken {
@@ -6567,7 +6033,7 @@
/**
* The list of names from the library that are hidden by this combinator.
*/
- NodeList<SimpleIdentifier> hiddenNames;
+ NodeList<SimpleIdentifier> _hiddenNames;
/**
* Initialize a newly created import show combinator.
@@ -6575,25 +6041,24 @@
* @param keyword the comma introducing the combinator
* @param hiddenNames the list of names from the library that are hidden by this combinator
*/
- HideCombinator.full(Token keyword, List<SimpleIdentifier> hiddenNames) : super.full(keyword) {
- this.hiddenNames = new NodeList<SimpleIdentifier>(this);
- this.hiddenNames.addAll(hiddenNames);
+ HideCombinator(Token keyword, List<SimpleIdentifier> hiddenNames) : super(keyword) {
+ this._hiddenNames = new NodeList<SimpleIdentifier>(this);
+ this._hiddenNames.addAll(hiddenNames);
}
- /**
- * Initialize a newly created import show combinator.
- *
- * @param keyword the comma introducing the combinator
- * @param hiddenNames the list of names from the library that are hidden by this combinator
- */
- HideCombinator({Token keyword, List<SimpleIdentifier> hiddenNames}) : this.full(keyword, hiddenNames);
-
accept(ASTVisitor visitor) => visitor.visitHideCombinator(this);
- Token get endToken => hiddenNames.endToken;
+ Token get endToken => _hiddenNames.endToken;
+
+ /**
+ * Return the list of names from the library that are hidden by this combinator.
+ *
+ * @return the list of names from the library that are hidden by this combinator
+ */
+ NodeList<SimpleIdentifier> get hiddenNames => _hiddenNames;
void visitChildren(ASTVisitor visitor) {
- hiddenNames.accept(visitor);
+ _hiddenNames.accept(visitor);
}
}
@@ -6717,29 +6182,12 @@
* @param elseKeyword the token representing the 'else' keyword
* @param elseStatement the statement that is executed if the condition evaluates to `false`
*/
- IfStatement.full(Token ifKeyword, Token leftParenthesis, Expression condition, Token rightParenthesis, Statement thenStatement, Token elseKeyword, Statement elseStatement) {
- this.ifKeyword = ifKeyword;
- this.leftParenthesis = leftParenthesis;
+ IfStatement(this.ifKeyword, this.leftParenthesis, Expression condition, this.rightParenthesis, Statement thenStatement, this.elseKeyword, Statement elseStatement) {
this._condition = becomeParentOf(condition);
- this.rightParenthesis = rightParenthesis;
this._thenStatement = becomeParentOf(thenStatement);
- this.elseKeyword = elseKeyword;
this._elseStatement = becomeParentOf(elseStatement);
}
- /**
- * Initialize a newly created if statement.
- *
- * @param ifKeyword the token representing the 'if' keyword
- * @param leftParenthesis the left parenthesis
- * @param condition the condition used to determine which of the statements is executed next
- * @param rightParenthesis the right parenthesis
- * @param thenStatement the statement that is executed if the condition evaluates to `true`
- * @param elseKeyword the token representing the 'else' keyword
- * @param elseStatement the statement that is executed if the condition evaluates to `false`
- */
- IfStatement({Token ifKeyword, Token leftParenthesis, Expression condition, Token rightParenthesis, Statement thenStatement, Token elseKeyword, Statement elseStatement}) : this.full(ifKeyword, leftParenthesis, condition, rightParenthesis, thenStatement, elseKeyword, elseStatement);
-
accept(ASTVisitor visitor) => visitor.visitIfStatement(this);
Token get beginToken => ifKeyword;
@@ -6830,7 +6278,7 @@
/**
* The interfaces that are being implemented.
*/
- NodeList<TypeName> interfaces;
+ NodeList<TypeName> _interfaces;
/**
* Initialize a newly created implements clause.
@@ -6838,28 +6286,26 @@
* @param keyword the token representing the 'implements' keyword
* @param interfaces the interfaces that are being implemented
*/
- ImplementsClause.full(Token keyword, List<TypeName> interfaces) {
- this.interfaces = new NodeList<TypeName>(this);
- this.keyword = keyword;
- this.interfaces.addAll(interfaces);
+ ImplementsClause(this.keyword, List<TypeName> interfaces) {
+ this._interfaces = new NodeList<TypeName>(this);
+ this._interfaces.addAll(interfaces);
}
- /**
- * Initialize a newly created implements clause.
- *
- * @param keyword the token representing the 'implements' keyword
- * @param interfaces the interfaces that are being implemented
- */
- ImplementsClause({Token keyword, List<TypeName> interfaces}) : this.full(keyword, interfaces);
-
accept(ASTVisitor visitor) => visitor.visitImplementsClause(this);
Token get beginToken => keyword;
- Token get endToken => interfaces.endToken;
+ Token get endToken => _interfaces.endToken;
+
+ /**
+ * Return the list of the interfaces that are being implemented.
+ *
+ * @return the list of the interfaces that are being implemented
+ */
+ NodeList<TypeName> get interfaces => _interfaces;
void visitChildren(ASTVisitor visitor) {
- interfaces.accept(visitor);
+ _interfaces.accept(visitor);
}
}
@@ -6977,25 +6423,10 @@
* @param combinators the combinators used to control how names are imported
* @param semicolon the semicolon terminating the directive
*/
- ImportDirective.full(Comment comment, List<Annotation> metadata, Token keyword, StringLiteral libraryUri, Token asToken, SimpleIdentifier prefix, List<Combinator> combinators, Token semicolon) : super.full(comment, metadata, keyword, libraryUri, combinators, semicolon) {
- this.asToken = asToken;
+ ImportDirective(Comment comment, List<Annotation> metadata, Token keyword, StringLiteral libraryUri, this.asToken, SimpleIdentifier prefix, List<Combinator> combinators, Token semicolon) : super(comment, metadata, keyword, libraryUri, combinators, semicolon) {
this._prefix = becomeParentOf(prefix);
}
- /**
- * Initialize a newly created import directive.
- *
- * @param comment the documentation comment associated with this directive
- * @param metadata the annotations associated with the directive
- * @param keyword the token representing the 'import' keyword
- * @param libraryUri the URI of the library being imported
- * @param asToken the token representing the 'as' token
- * @param prefix the prefix to be used with the imported names
- * @param combinators the combinators used to control how names are imported
- * @param semicolon the semicolon terminating the directive
- */
- ImportDirective({Comment comment, List<Annotation> metadata, Token keyword, StringLiteral libraryUri, Token asToken, SimpleIdentifier prefix, List<Combinator> combinators, Token semicolon}) : this.full(comment, metadata, keyword, libraryUri, asToken, prefix, combinators, semicolon);
-
accept(ASTVisitor visitor) => visitor.visitImportDirective(this);
ImportElement get element => super.element as ImportElement;
@@ -7099,7 +6530,7 @@
* @param index the expression used to compute the index
* @param rightBracket the right square bracket
*/
- IndexExpression.forTarget_full(Expression target, Token leftBracket, Expression index, Token rightBracket) {
+ IndexExpression.forTarget(Expression target, Token leftBracket, Expression index, Token rightBracket) {
this._target = becomeParentOf(target);
this._leftBracket = leftBracket;
this._index = becomeParentOf(index);
@@ -7109,38 +6540,17 @@
/**
* Initialize a newly created index expression.
*
- * @param target the expression used to compute the object being indexed
- * @param leftBracket the left square bracket
- * @param index the expression used to compute the index
- * @param rightBracket the right square bracket
- */
- IndexExpression.forTarget({Expression target, Token leftBracket, Expression index, Token rightBracket}) : this.forTarget_full(target, leftBracket, index, rightBracket);
-
- /**
- * Initialize a newly created index expression.
- *
* @param period the period ("..") before a cascaded index expression
* @param leftBracket the left square bracket
* @param index the expression used to compute the index
* @param rightBracket the right square bracket
*/
- IndexExpression.forCascade_full(Token period, Token leftBracket, Expression index, Token rightBracket) {
- this.period = period;
+ IndexExpression.forCascade(this.period, Token leftBracket, Expression index, Token rightBracket) {
this._leftBracket = leftBracket;
this._index = becomeParentOf(index);
this._rightBracket = rightBracket;
}
- /**
- * Initialize a newly created index expression.
- *
- * @param period the period ("..") before a cascaded index expression
- * @param leftBracket the left square bracket
- * @param index the expression used to compute the index
- * @param rightBracket the right square bracket
- */
- IndexExpression.forCascade({Token period, Token leftBracket, Expression index, Token rightBracket}) : this.forCascade_full(period, leftBracket, index, rightBracket);
-
accept(ASTVisitor visitor) => visitor.visitIndexExpression(this);
Token get beginToken {
@@ -7440,21 +6850,11 @@
* @param constructorName the name of the constructor to be invoked
* @param argumentList the list of arguments to the constructor
*/
- InstanceCreationExpression.full(Token keyword, ConstructorName constructorName, ArgumentList argumentList) {
- this.keyword = keyword;
+ InstanceCreationExpression(this.keyword, ConstructorName constructorName, ArgumentList argumentList) {
this.constructorName = becomeParentOf(constructorName);
this._argumentList = becomeParentOf(argumentList);
}
- /**
- * Initialize a newly created instance creation expression.
- *
- * @param keyword the keyword used to indicate how an object should be created
- * @param constructorName the name of the constructor to be invoked
- * @param argumentList the list of arguments to the constructor
- */
- InstanceCreationExpression({Token keyword, ConstructorName constructorName, ArgumentList argumentList}) : this.full(keyword, constructorName, argumentList);
-
accept(ASTVisitor visitor) => visitor.visitInstanceCreationExpression(this);
/**
@@ -7527,18 +6927,7 @@
* @param literal the token representing the literal
* @param value the value of the literal
*/
- IntegerLiteral.full(Token literal, int value) {
- this.literal = literal;
- this.value = value;
- }
-
- /**
- * Initialize a newly created integer literal.
- *
- * @param literal the token representing the literal
- * @param value the value of the literal
- */
- IntegerLiteral({Token literal, int value}) : this.full(literal, value);
+ IntegerLiteral(this.literal, this.value);
accept(ASTVisitor visitor) => visitor.visitIntegerLiteral(this);
@@ -7601,21 +6990,10 @@
* @param expression the expression to be evaluated for the value to be converted into a string
* @param rightBracket the right curly bracket
*/
- InterpolationExpression.full(Token leftBracket, Expression expression, Token rightBracket) {
- this.leftBracket = leftBracket;
+ InterpolationExpression(this.leftBracket, Expression expression, this.rightBracket) {
this._expression = becomeParentOf(expression);
- this.rightBracket = rightBracket;
}
- /**
- * Initialize a newly created interpolation expression.
- *
- * @param leftBracket the left curly bracket
- * @param expression the expression to be evaluated for the value to be converted into a string
- * @param rightBracket the right curly bracket
- */
- InterpolationExpression({Token leftBracket, Expression expression, Token rightBracket}) : this.full(leftBracket, expression, rightBracket);
-
accept(ASTVisitor visitor) => visitor.visitInterpolationExpression(this);
Token get beginToken => leftBracket;
@@ -7677,19 +7055,11 @@
* @param the characters that will be added to the string
* @param value the value of the literal
*/
- InterpolationString.full(Token contents, String value) {
+ InterpolationString(Token contents, String value) {
this._contents = contents;
this._value = value;
}
- /**
- * Initialize a newly created string of characters that are part of a string interpolation.
- *
- * @param the characters that will be added to the string
- * @param value the value of the literal
- */
- InterpolationString({Token contents, String value}) : this.full(contents, value);
-
accept(ASTVisitor visitor) => visitor.visitInterpolationString(this);
Token get beginToken => _contents;
@@ -7771,23 +7141,11 @@
* @param notOperator the not operator, or `null` if the sense of the test is not negated
* @param type the name of the type being tested for
*/
- IsExpression.full(Expression expression, Token isOperator, Token notOperator, TypeName type) {
+ IsExpression(Expression expression, this.isOperator, this.notOperator, TypeName type) {
this._expression = becomeParentOf(expression);
- this.isOperator = isOperator;
- this.notOperator = notOperator;
this._type = becomeParentOf(type);
}
- /**
- * Initialize a newly created is expression.
- *
- * @param expression the expression used to compute the value whose type is being tested
- * @param isOperator the is operator
- * @param notOperator the not operator, or `null` if the sense of the test is not negated
- * @param type the name of the type being tested for
- */
- IsExpression({Expression expression, Token isOperator, Token notOperator, TypeName type}) : this.full(expression, isOperator, notOperator, type);
-
accept(ASTVisitor visitor) => visitor.visitIsExpression(this);
Token get beginToken => _expression.beginToken;
@@ -7862,19 +7220,10 @@
* @param label the label being applied
* @param colon the colon that separates the label from whatever follows
*/
- Label.full(SimpleIdentifier label, Token colon) {
+ Label(SimpleIdentifier label, this.colon) {
this._label = becomeParentOf(label);
- this.colon = colon;
}
- /**
- * Initialize a newly created label.
- *
- * @param label the label being applied
- * @param colon the colon that separates the label from whatever follows
- */
- Label({SimpleIdentifier label, Token colon}) : this.full(label, colon);
-
accept(ASTVisitor visitor) => visitor.visitLabel(this);
Token get beginToken => _label.beginToken;
@@ -7917,7 +7266,7 @@
/**
* The labels being associated with the statement.
*/
- NodeList<Label> labels;
+ NodeList<Label> _labels;
/**
* The statement with which the labels are being associated.
@@ -7930,25 +7279,17 @@
* @param labels the labels being associated with the statement
* @param statement the statement with which the labels are being associated
*/
- LabeledStatement.full(List<Label> labels, Statement statement) {
- this.labels = new NodeList<Label>(this);
- this.labels.addAll(labels);
+ LabeledStatement(List<Label> labels, Statement statement) {
+ this._labels = new NodeList<Label>(this);
+ this._labels.addAll(labels);
this._statement = becomeParentOf(statement);
}
- /**
- * Initialize a newly created labeled statement.
- *
- * @param labels the labels being associated with the statement
- * @param statement the statement with which the labels are being associated
- */
- LabeledStatement({List<Label> labels, Statement statement}) : this.full(labels, statement);
-
accept(ASTVisitor visitor) => visitor.visitLabeledStatement(this);
Token get beginToken {
- if (!labels.isEmpty) {
- return labels.beginToken;
+ if (!_labels.isEmpty) {
+ return _labels.beginToken;
}
return _statement.beginToken;
}
@@ -7956,6 +7297,13 @@
Token get endToken => _statement.endToken;
/**
+ * Return the labels being associated with the statement.
+ *
+ * @return the labels being associated with the statement
+ */
+ NodeList<Label> get labels => _labels;
+
+ /**
* Return the statement with which the labels are being associated.
*
* @return the statement with which the labels are being associated
@@ -7972,7 +7320,7 @@
}
void visitChildren(ASTVisitor visitor) {
- labels.accept(visitor);
+ _labels.accept(visitor);
safelyVisitChild(_statement, visitor);
}
}
@@ -8012,23 +7360,10 @@
* @param name the name of the library being defined
* @param semicolon the semicolon terminating the directive
*/
- LibraryDirective.full(Comment comment, List<Annotation> metadata, Token libraryToken, LibraryIdentifier name, Token semicolon) : super.full(comment, metadata) {
- this.libraryToken = libraryToken;
+ LibraryDirective(Comment comment, List<Annotation> metadata, this.libraryToken, LibraryIdentifier name, this.semicolon) : super(comment, metadata) {
this._name = becomeParentOf(name);
- this.semicolon = semicolon;
}
- /**
- * Initialize a newly created library directive.
- *
- * @param comment the documentation comment associated with this directive
- * @param metadata the annotations associated with the directive
- * @param libraryToken the token representing the 'library' token
- * @param name the name of the library being defined
- * @param semicolon the semicolon terminating the directive
- */
- LibraryDirective({Comment comment, List<Annotation> metadata, Token libraryToken, LibraryIdentifier name, Token semicolon}) : this.full(comment, metadata, libraryToken, name, semicolon);
-
accept(ASTVisitor visitor) => visitor.visitLibraryDirective(this);
Token get endToken => semicolon;
@@ -8073,37 +7408,37 @@
/**
* The components of the identifier.
*/
- NodeList<SimpleIdentifier> components;
+ NodeList<SimpleIdentifier> _components;
/**
* Initialize a newly created prefixed identifier.
*
* @param components the components of the identifier
*/
- LibraryIdentifier.full(List<SimpleIdentifier> components) {
- this.components = new NodeList<SimpleIdentifier>(this);
- this.components.addAll(components);
+ LibraryIdentifier(List<SimpleIdentifier> components) {
+ this._components = new NodeList<SimpleIdentifier>(this);
+ this._components.addAll(components);
}
- /**
- * Initialize a newly created prefixed identifier.
- *
- * @param components the components of the identifier
- */
- LibraryIdentifier({List<SimpleIdentifier> components}) : this.full(components);
-
accept(ASTVisitor visitor) => visitor.visitLibraryIdentifier(this);
- Token get beginToken => components.beginToken;
+ Token get beginToken => _components.beginToken;
Element get bestElement => staticElement;
- Token get endToken => components.endToken;
+ /**
+ * Return the components of the identifier.
+ *
+ * @return the components of the identifier
+ */
+ NodeList<SimpleIdentifier> get components => _components;
+
+ Token get endToken => _components.endToken;
String get name {
JavaStringBuilder builder = new JavaStringBuilder();
bool needsPeriod = false;
- for (SimpleIdentifier identifier in components) {
+ for (SimpleIdentifier identifier in _components) {
if (needsPeriod) {
builder.append(".");
} else {
@@ -8121,7 +7456,7 @@
Element get staticElement => null;
void visitChildren(ASTVisitor visitor) {
- components.accept(visitor);
+ _components.accept(visitor);
}
}
@@ -8144,7 +7479,7 @@
/**
* The expressions used to compute the elements of the list.
*/
- NodeList<Expression> elements;
+ NodeList<Expression> _elements;
/**
* The right square bracket.
@@ -8161,25 +7496,13 @@
* @param elements the expressions used to compute the elements of the list
* @param rightBracket the right square bracket
*/
- ListLiteral.full(Token constKeyword, TypeArgumentList typeArguments, Token leftBracket, List<Expression> elements, Token rightBracket) : super.full(constKeyword, typeArguments) {
- this.elements = new NodeList<Expression>(this);
+ ListLiteral(Token constKeyword, TypeArgumentList typeArguments, Token leftBracket, List<Expression> elements, Token rightBracket) : super(constKeyword, typeArguments) {
+ this._elements = new NodeList<Expression>(this);
this._leftBracket = leftBracket;
- this.elements.addAll(elements);
+ this._elements.addAll(elements);
this._rightBracket = rightBracket;
}
- /**
- * Initialize a newly created list literal.
- *
- * @param constKeyword the token representing the 'const' keyword
- * @param typeArguments the type argument associated with this literal, or `null` if no type
- * arguments were declared
- * @param leftBracket the left square bracket
- * @param elements the expressions used to compute the elements of the list
- * @param rightBracket the right square bracket
- */
- ListLiteral({Token constKeyword, TypeArgumentList typeArguments, Token leftBracket, List<Expression> elements, Token rightBracket}) : this.full(constKeyword, typeArguments, leftBracket, elements, rightBracket);
-
accept(ASTVisitor visitor) => visitor.visitListLiteral(this);
Token get beginToken {
@@ -8194,6 +7517,13 @@
return _leftBracket;
}
+ /**
+ * Return the expressions used to compute the elements of the list.
+ *
+ * @return the expressions used to compute the elements of the list
+ */
+ NodeList<Expression> get elements => _elements;
+
Token get endToken => _rightBracket;
/**
@@ -8230,7 +7560,7 @@
void visitChildren(ASTVisitor visitor) {
super.visitChildren(visitor);
- elements.accept(visitor);
+ _elements.accept(visitor);
}
}
@@ -8274,7 +7604,7 @@
/**
* The entries in the map.
*/
- NodeList<MapLiteralEntry> entries;
+ NodeList<MapLiteralEntry> _entries;
/**
* The right curly bracket.
@@ -8291,25 +7621,13 @@
* @param entries the entries in the map
* @param rightBracket the right curly bracket
*/
- MapLiteral.full(Token constKeyword, TypeArgumentList typeArguments, Token leftBracket, List<MapLiteralEntry> entries, Token rightBracket) : super.full(constKeyword, typeArguments) {
- this.entries = new NodeList<MapLiteralEntry>(this);
+ MapLiteral(Token constKeyword, TypeArgumentList typeArguments, Token leftBracket, List<MapLiteralEntry> entries, Token rightBracket) : super(constKeyword, typeArguments) {
+ this._entries = new NodeList<MapLiteralEntry>(this);
this._leftBracket = leftBracket;
- this.entries.addAll(entries);
+ this._entries.addAll(entries);
this._rightBracket = rightBracket;
}
- /**
- * Initialize a newly created map literal.
- *
- * @param constKeyword the token representing the 'const' keyword
- * @param typeArguments the type argument associated with this literal, or `null` if no type
- * arguments were declared
- * @param leftBracket the left curly bracket
- * @param entries the entries in the map
- * @param rightBracket the right curly bracket
- */
- MapLiteral({Token constKeyword, TypeArgumentList typeArguments, Token leftBracket, List<MapLiteralEntry> entries, Token rightBracket}) : this.full(constKeyword, typeArguments, leftBracket, entries, rightBracket);
-
accept(ASTVisitor visitor) => visitor.visitMapLiteral(this);
Token get beginToken {
@@ -8327,6 +7645,13 @@
Token get endToken => _rightBracket;
/**
+ * Return the entries in the map.
+ *
+ * @return the entries in the map
+ */
+ NodeList<MapLiteralEntry> get entries => _entries;
+
+ /**
* Return the left curly bracket.
*
* @return the left curly bracket
@@ -8360,7 +7685,7 @@
void visitChildren(ASTVisitor visitor) {
super.visitChildren(visitor);
- entries.accept(visitor);
+ _entries.accept(visitor);
}
}
@@ -8398,21 +7723,11 @@
* @param separator the colon that separates the key from the value
* @param value the expression computing the value that will be associated with the key
*/
- MapLiteralEntry.full(Expression key, Token separator, Expression value) {
+ MapLiteralEntry(Expression key, this.separator, Expression value) {
this._key = becomeParentOf(key);
- this.separator = separator;
this._value = becomeParentOf(value);
}
- /**
- * Initialize a newly created map literal entry.
- *
- * @param key the expression computing the key with which the value will be associated
- * @param separator the colon that separates the key from the value
- * @param value the expression computing the value that will be associated with the key
- */
- MapLiteralEntry({Expression key, Token separator, Expression value}) : this.full(key, separator, value);
-
accept(ASTVisitor visitor) => visitor.visitMapLiteralEntry(this);
Token get beginToken => _key.beginToken;
@@ -8536,34 +7851,13 @@
* declares a getter
* @param body the body of the method
*/
- MethodDeclaration.full(Comment comment, List<Annotation> metadata, Token externalKeyword, Token modifierKeyword, TypeName returnType, Token propertyKeyword, Token operatorKeyword, SimpleIdentifier name, FormalParameterList parameters, FunctionBody body) : super.full(comment, metadata) {
- this.externalKeyword = externalKeyword;
- this.modifierKeyword = modifierKeyword;
+ MethodDeclaration(Comment comment, List<Annotation> metadata, this.externalKeyword, this.modifierKeyword, TypeName returnType, this.propertyKeyword, this.operatorKeyword, SimpleIdentifier name, FormalParameterList parameters, FunctionBody body) : super(comment, metadata) {
this._returnType = becomeParentOf(returnType);
- this.propertyKeyword = propertyKeyword;
- this.operatorKeyword = operatorKeyword;
this._name = becomeParentOf(name);
this._parameters = becomeParentOf(parameters);
this._body = becomeParentOf(body);
}
- /**
- * Initialize a newly created method declaration.
- *
- * @param externalKeyword the token for the 'external' keyword
- * @param comment the documentation comment associated with this method
- * @param metadata the annotations associated with this method
- * @param modifierKeyword the token representing the 'abstract' or 'static' keyword
- * @param returnType the return type of the method
- * @param propertyKeyword the token representing the 'get' or 'set' keyword
- * @param operatorKeyword the token representing the 'operator' keyword
- * @param name the name of the method
- * @param parameters the parameters associated with the method, or `null` if this method
- * declares a getter
- * @param body the body of the method
- */
- MethodDeclaration({Comment comment, List<Annotation> metadata, Token externalKeyword, Token modifierKeyword, TypeName returnType, Token propertyKeyword, Token operatorKeyword, SimpleIdentifier name, FormalParameterList parameters, FunctionBody body}) : this.full(comment, metadata, externalKeyword, modifierKeyword, returnType, propertyKeyword, operatorKeyword, name, parameters, body);
-
accept(ASTVisitor visitor) => visitor.visitMethodDeclaration(this);
/**
@@ -8745,23 +8039,12 @@
* @param methodName the name of the method being invoked
* @param argumentList the list of arguments to the method
*/
- MethodInvocation.full(Expression target, Token period, SimpleIdentifier methodName, ArgumentList argumentList) {
+ MethodInvocation(Expression target, this.period, SimpleIdentifier methodName, ArgumentList argumentList) {
this._target = becomeParentOf(target);
- this.period = period;
this._methodName = becomeParentOf(methodName);
this._argumentList = becomeParentOf(argumentList);
}
- /**
- * Initialize a newly created method invocation.
- *
- * @param target the expression producing the object on which the method is defined
- * @param period the period that separates the target from the method name
- * @param methodName the name of the method being invoked
- * @param argumentList the list of arguments to the method
- */
- MethodInvocation({Expression target, Token period, SimpleIdentifier methodName, ArgumentList argumentList}) : this.full(target, period, methodName, argumentList);
-
accept(ASTVisitor visitor) => visitor.visitMethodInvocation(this);
/**
@@ -8895,19 +8178,11 @@
* @param name the name associated with the expression
* @param expression the expression with which the name is associated
*/
- NamedExpression.full(Label name, Expression expression) {
+ NamedExpression(Label name, Expression expression) {
this._name = becomeParentOf(name);
this._expression = becomeParentOf(expression);
}
- /**
- * Initialize a newly created named expression.
- *
- * @param name the name associated with the expression
- * @param expression the expression with which the name is associated
- */
- NamedExpression({Label name, Expression expression}) : this.full(name, expression);
-
accept(ASTVisitor visitor) => visitor.visitNamedExpression(this);
Token get beginToken => _name.beginToken;
@@ -8985,12 +8260,12 @@
/**
* The token representing the 'import' or 'export' keyword.
*/
- Token _keyword;
+ Token keyword;
/**
* The combinators used to control which names are imported or exported.
*/
- NodeList<Combinator> combinators;
+ NodeList<Combinator> _combinators;
/**
* The semicolon terminating the directive.
@@ -9007,41 +8282,23 @@
* @param combinators the combinators used to control which names are imported or exported
* @param semicolon the semicolon terminating the directive
*/
- NamespaceDirective.full(Comment comment, List<Annotation> metadata, Token keyword, StringLiteral libraryUri, List<Combinator> combinators, Token semicolon) : super.full(comment, metadata, libraryUri) {
- this.combinators = new NodeList<Combinator>(this);
- this._keyword = keyword;
- this.combinators.addAll(combinators);
- this.semicolon = semicolon;
+ NamespaceDirective(Comment comment, List<Annotation> metadata, this.keyword, StringLiteral libraryUri, List<Combinator> combinators, this.semicolon) : super(comment, metadata, libraryUri) {
+ this._combinators = new NodeList<Combinator>(this);
+ this._combinators.addAll(combinators);
}
/**
- * Initialize a newly created namespace directive.
+ * Return the combinators used to control how names are imported or exported.
*
- * @param comment the documentation comment associated with this directive
- * @param metadata the annotations associated with the directive
- * @param keyword the token representing the 'import' or 'export' keyword
- * @param libraryUri the URI of the library being imported or exported
- * @param combinators the combinators used to control which names are imported or exported
- * @param semicolon the semicolon terminating the directive
+ * @return the combinators used to control how names are imported or exported
*/
- NamespaceDirective({Comment comment, List<Annotation> metadata, Token keyword, StringLiteral libraryUri, List<Combinator> combinators, Token semicolon}) : this.full(comment, metadata, keyword, libraryUri, combinators, semicolon);
+ NodeList<Combinator> get combinators => _combinators;
Token get endToken => semicolon;
- Token get keyword => _keyword;
-
LibraryElement get uriElement;
- /**
- * Set the token representing the 'import' or 'export' keyword to the given token.
- *
- * @param exportToken the token representing the 'import' or 'export' keyword
- */
- void set keyword(Token exportToken) {
- this._keyword = exportToken;
- }
-
- Token get firstTokenAfterCommentAndMetadata => _keyword;
+ Token get firstTokenAfterCommentAndMetadata => keyword;
}
/**
@@ -9072,18 +8329,7 @@
* @param keyword the token representing the 'native' keyword
* @param name the name of the native object that implements the class.
*/
- NativeClause.full(Token keyword, StringLiteral name) {
- this.keyword = keyword;
- this.name = name;
- }
-
- /**
- * Initialize a newly created native clause.
- *
- * @param keyword the token representing the 'native' keyword
- * @param name the name of the native object that implements the class.
- */
- NativeClause({Token keyword, StringLiteral name}) : this.full(keyword, name);
+ NativeClause(this.keyword, this.name);
accept(ASTVisitor visitor) => visitor.visitNativeClause(this);
@@ -9111,17 +8357,17 @@
/**
* The token representing 'native' that marks the start of the function body.
*/
- Token nativeToken;
+ final Token nativeToken;
/**
* The string literal, after the 'native' token.
*/
- StringLiteral stringLiteral;
+ StringLiteral _stringLiteral;
/**
* The token representing the semicolon that marks the end of the function body.
*/
- Token semicolon;
+ final Token semicolon;
/**
* Initialize a newly created function body consisting of the 'native' token, a string literal,
@@ -9131,30 +8377,25 @@
* @param stringLiteral the string literal
* @param semicolon the token representing the semicolon that marks the end of the function body
*/
- NativeFunctionBody.full(Token nativeToken, StringLiteral stringLiteral, Token semicolon) {
- this.nativeToken = nativeToken;
- this.stringLiteral = becomeParentOf(stringLiteral);
- this.semicolon = semicolon;
+ NativeFunctionBody(this.nativeToken, StringLiteral stringLiteral, this.semicolon) {
+ this._stringLiteral = becomeParentOf(stringLiteral);
}
- /**
- * Initialize a newly created function body consisting of the 'native' token, a string literal,
- * and a semicolon.
- *
- * @param nativeToken the token representing 'native' that marks the start of the function body
- * @param stringLiteral the string literal
- * @param semicolon the token representing the semicolon that marks the end of the function body
- */
- NativeFunctionBody({Token nativeToken, StringLiteral stringLiteral, Token semicolon}) : this.full(nativeToken, stringLiteral, semicolon);
-
accept(ASTVisitor visitor) => visitor.visitNativeFunctionBody(this);
Token get beginToken => nativeToken;
Token get endToken => semicolon;
+ /**
+ * Return the string literal representing the string after the 'native' token.
+ *
+ * @return the string literal representing the string after the 'native' token
+ */
+ StringLiteral get stringLiteral => _stringLiteral;
+
void visitChildren(ASTVisitor visitor) {
- safelyVisitChild(stringLiteral, visitor);
+ safelyVisitChild(_stringLiteral, visitor);
}
}
@@ -9181,7 +8422,7 @@
/**
* The annotations associated with this parameter.
*/
- NodeList<Annotation> metadata;
+ NodeList<Annotation> _metadata;
/**
* The name of the parameter being declared.
@@ -9195,23 +8436,14 @@
* @param metadata the annotations associated with this parameter
* @param identifier the name of the parameter being declared
*/
- NormalFormalParameter.full(Comment comment, List<Annotation> metadata, SimpleIdentifier identifier) {
- this.metadata = new NodeList<Annotation>(this);
+ NormalFormalParameter(Comment comment, List<Annotation> metadata, SimpleIdentifier identifier) {
+ this._metadata = new NodeList<Annotation>(this);
this._comment = becomeParentOf(comment);
- this.metadata.addAll(metadata);
+ this._metadata.addAll(metadata);
this._identifier = becomeParentOf(identifier);
}
/**
- * Initialize a newly created formal parameter.
- *
- * @param comment the documentation comment associated with this parameter
- * @param metadata the annotations associated with this parameter
- * @param identifier the name of the parameter being declared
- */
- NormalFormalParameter({Comment comment, List<Annotation> metadata, SimpleIdentifier identifier}) : this.full(comment, metadata, identifier);
-
- /**
* Return the documentation comment associated with this parameter, or `null` if this
* parameter does not have a documentation comment associated with it.
*
@@ -9230,6 +8462,13 @@
}
/**
+ * Return the annotations associated with this parameter.
+ *
+ * @return the annotations associated with this parameter
+ */
+ NodeList<Annotation> get metadata => _metadata;
+
+ /**
* Set the documentation comment associated with this parameter to the given comment
*
* @param comment the documentation comment to be associated with this parameter
@@ -9250,7 +8489,7 @@
void visitChildren(ASTVisitor visitor) {
if (commentIsBeforeAnnotations()) {
safelyVisitChild(_comment, visitor);
- metadata.accept(visitor);
+ _metadata.accept(visitor);
} else {
for (ASTNode child in sortedCommentAndAnnotations) {
child.accept(visitor);
@@ -9264,10 +8503,10 @@
* @return `true` if the comment is lexically before any annotations
*/
bool commentIsBeforeAnnotations() {
- if (_comment == null || metadata.isEmpty) {
+ if (_comment == null || _metadata.isEmpty) {
return true;
}
- Annotation firstAnnotation = metadata[0];
+ Annotation firstAnnotation = _metadata[0];
return _comment.offset < firstAnnotation.offset;
}
@@ -9281,7 +8520,7 @@
List<ASTNode> get sortedCommentAndAnnotations {
List<ASTNode> childList = new List<ASTNode>();
childList.add(_comment);
- childList.addAll(metadata);
+ childList.addAll(_metadata);
List<ASTNode> children = new List.from(childList);
children.sort(ASTNode.LEXICAL_ORDER);
return children;
@@ -9309,17 +8548,10 @@
*
* @param token the token representing the literal
*/
- NullLiteral.full(Token token) {
+ NullLiteral(Token token) {
this.literal = token;
}
- /**
- * Initialize a newly created null literal.
- *
- * @param token the token representing the literal
- */
- NullLiteral({Token token}) : this.full(token);
-
accept(ASTVisitor visitor) => visitor.visitNullLiteral(this);
Token get beginToken => literal;
@@ -9363,21 +8595,12 @@
* @param expression the expression within the parentheses
* @param rightParenthesis the right parenthesis
*/
- ParenthesizedExpression.full(Token leftParenthesis, Expression expression, Token rightParenthesis) {
+ ParenthesizedExpression(Token leftParenthesis, Expression expression, Token rightParenthesis) {
this._leftParenthesis = leftParenthesis;
this._expression = becomeParentOf(expression);
this._rightParenthesis = rightParenthesis;
}
- /**
- * Initialize a newly created parenthesized expression.
- *
- * @param leftParenthesis the left parenthesis
- * @param expression the expression within the parentheses
- * @param rightParenthesis the right parenthesis
- */
- ParenthesizedExpression({Token leftParenthesis, Expression expression, Token rightParenthesis}) : this.full(leftParenthesis, expression, rightParenthesis);
-
accept(ASTVisitor visitor) => visitor.visitParenthesizedExpression(this);
Token get beginToken => _leftParenthesis;
@@ -9469,21 +8692,7 @@
* @param partUri the URI of the part being included
* @param semicolon the semicolon terminating the directive
*/
- PartDirective.full(Comment comment, List<Annotation> metadata, Token partToken, StringLiteral partUri, Token semicolon) : super.full(comment, metadata, partUri) {
- this.partToken = partToken;
- this.semicolon = semicolon;
- }
-
- /**
- * Initialize a newly created part directive.
- *
- * @param comment the documentation comment associated with this directive
- * @param metadata the annotations associated with the directive
- * @param partToken the token representing the 'part' token
- * @param partUri the URI of the part being included
- * @param semicolon the semicolon terminating the directive
- */
- PartDirective({Comment comment, List<Annotation> metadata, Token partToken, StringLiteral partUri, Token semicolon}) : this.full(comment, metadata, partToken, partUri, semicolon);
+ PartDirective(Comment comment, List<Annotation> metadata, this.partToken, StringLiteral partUri, this.semicolon) : super(comment, metadata, partUri);
accept(ASTVisitor visitor) => visitor.visitPartDirective(this);
@@ -9537,25 +8746,10 @@
* @param libraryName the name of the library that the containing compilation unit is part of
* @param semicolon the semicolon terminating the directive
*/
- PartOfDirective.full(Comment comment, List<Annotation> metadata, Token partToken, Token ofToken, LibraryIdentifier libraryName, Token semicolon) : super.full(comment, metadata) {
- this.partToken = partToken;
- this.ofToken = ofToken;
+ PartOfDirective(Comment comment, List<Annotation> metadata, this.partToken, this.ofToken, LibraryIdentifier libraryName, this.semicolon) : super(comment, metadata) {
this._libraryName = becomeParentOf(libraryName);
- this.semicolon = semicolon;
}
- /**
- * Initialize a newly created part-of directive.
- *
- * @param comment the documentation comment associated with this directive
- * @param metadata the annotations associated with the directive
- * @param partToken the token representing the 'part' token
- * @param ofToken the token representing the 'of' token
- * @param libraryName the name of the library that the containing compilation unit is part of
- * @param semicolon the semicolon terminating the directive
- */
- PartOfDirective({Comment comment, List<Annotation> metadata, Token partToken, Token ofToken, LibraryIdentifier libraryName, Token semicolon}) : this.full(comment, metadata, partToken, ofToken, libraryName, semicolon);
-
accept(ASTVisitor visitor) => visitor.visitPartOfDirective(this);
Token get endToken => semicolon;
@@ -9627,19 +8821,10 @@
* @param operand the expression computing the operand for the operator
* @param operator the postfix operator being applied to the operand
*/
- PostfixExpression.full(Expression operand, Token operator) {
+ PostfixExpression(Expression operand, this.operator) {
this._operand = becomeParentOf(operand);
- this.operator = operator;
}
- /**
- * Initialize a newly created postfix expression.
- *
- * @param operand the expression computing the operand for the operator
- * @param operator the postfix operator being applied to the operand
- */
- PostfixExpression({Expression operand, Token operator}) : this.full(operand, operator);
-
accept(ASTVisitor visitor) => visitor.visitPostfixExpression(this);
Token get beginToken => _operand.beginToken;
@@ -9808,19 +8993,10 @@
* @param operator the prefix operator being applied to the operand
* @param operand the expression computing the operand for the operator
*/
- PrefixExpression.full(Token operator, Expression operand) {
- this.operator = operator;
+ PrefixExpression(this.operator, Expression operand) {
this._operand = becomeParentOf(operand);
}
- /**
- * Initialize a newly created prefix expression.
- *
- * @param operator the prefix operator being applied to the operand
- * @param operand the expression computing the operand for the operator
- */
- PrefixExpression({Token operator, Expression operand}) : this.full(operator, operand);
-
accept(ASTVisitor visitor) => visitor.visitPrefixExpression(this);
Token get beginToken => operator;
@@ -9983,21 +9159,11 @@
* @param period the period used to separate the prefix from the identifier
* @param identifier the prefix associated with the library in which the identifier is defined
*/
- PrefixedIdentifier.full(SimpleIdentifier prefix, Token period, SimpleIdentifier identifier) {
+ PrefixedIdentifier(SimpleIdentifier prefix, this.period, SimpleIdentifier identifier) {
this._prefix = becomeParentOf(prefix);
- this.period = period;
this._identifier = becomeParentOf(identifier);
}
- /**
- * Initialize a newly created prefixed identifier.
- *
- * @param prefix the identifier being prefixed
- * @param period the period used to separate the prefix from the identifier
- * @param identifier the prefix associated with the library in which the identifier is defined
- */
- PrefixedIdentifier({SimpleIdentifier prefix, Token period, SimpleIdentifier identifier}) : this.full(prefix, period, identifier);
-
accept(ASTVisitor visitor) => visitor.visitPrefixedIdentifier(this);
Token get beginToken => _prefix.beginToken;
@@ -10105,21 +9271,11 @@
* @param operator the property access operator
* @param propertyName the name of the property being accessed
*/
- PropertyAccess.full(Expression target, Token operator, SimpleIdentifier propertyName) {
+ PropertyAccess(Expression target, this.operator, SimpleIdentifier propertyName) {
this._target = becomeParentOf(target);
- this.operator = operator;
this._propertyName = becomeParentOf(propertyName);
}
- /**
- * Initialize a newly created property access expression.
- *
- * @param target the expression computing the object defining the property being accessed
- * @param operator the property access operator
- * @param propertyName the name of the property being accessed
- */
- PropertyAccess({Expression target, Token operator, SimpleIdentifier propertyName}) : this.full(target, operator, propertyName);
-
accept(ASTVisitor visitor) => visitor.visitPropertyAccess(this);
Token get beginToken {
@@ -10257,24 +9413,11 @@
* @param constructorName the name of the constructor that is being invoked
* @param argumentList the list of arguments to the constructor
*/
- RedirectingConstructorInvocation.full(Token keyword, Token period, SimpleIdentifier constructorName, ArgumentList argumentList) {
- this.keyword = keyword;
- this.period = period;
+ RedirectingConstructorInvocation(this.keyword, this.period, SimpleIdentifier constructorName, ArgumentList argumentList) {
this._constructorName = becomeParentOf(constructorName);
this._argumentList = becomeParentOf(argumentList);
}
- /**
- * Initialize a newly created redirecting invocation to invoke the constructor with the given name
- * with the given arguments.
- *
- * @param keyword the token for the 'this' keyword
- * @param period the token for the period before the name of the constructor that is being invoked
- * @param constructorName the name of the constructor that is being invoked
- * @param argumentList the list of arguments to the constructor
- */
- RedirectingConstructorInvocation({Token keyword, Token period, SimpleIdentifier constructorName, ArgumentList argumentList}) : this.full(keyword, period, constructorName, argumentList);
-
accept(ASTVisitor visitor) => visitor.visitRedirectingConstructorInvocation(this);
/**
@@ -10341,16 +9484,7 @@
*
* @param keyword the token representing the 'rethrow' keyword
*/
- RethrowExpression.full(Token keyword) {
- this.keyword = keyword;
- }
-
- /**
- * Initialize a newly created rethrow expression.
- *
- * @param keyword the token representing the 'rethrow' keyword
- */
- RethrowExpression({Token keyword}) : this.full(keyword);
+ RethrowExpression(this.keyword);
accept(ASTVisitor visitor) => visitor.visitRethrowExpression(this);
@@ -10398,21 +9532,10 @@
* @param expression the expression computing the value to be returned
* @param semicolon the semicolon terminating the statement
*/
- ReturnStatement.full(Token keyword, Expression expression, Token semicolon) {
- this.keyword = keyword;
+ ReturnStatement(this.keyword, Expression expression, this.semicolon) {
this._expression = becomeParentOf(expression);
- this.semicolon = semicolon;
}
- /**
- * Initialize a newly created return statement.
- *
- * @param keyword the token representing the 'return' keyword
- * @param expression the expression computing the value to be returned
- * @param semicolon the semicolon terminating the statement
- */
- ReturnStatement({Token keyword, Expression expression, Token semicolon}) : this.full(keyword, expression, semicolon);
-
accept(ASTVisitor visitor) => visitor.visitReturnStatement(this);
Token get beginToken => keyword;
@@ -10463,16 +9586,7 @@
*
* @param scriptTag the token representing this script tag
*/
- ScriptTag.full(Token scriptTag) {
- this.scriptTag = scriptTag;
- }
-
- /**
- * Initialize a newly created script tag.
- *
- * @param scriptTag the token representing this script tag
- */
- ScriptTag({Token scriptTag}) : this.full(scriptTag);
+ ScriptTag(this.scriptTag);
accept(ASTVisitor visitor) => visitor.visitScriptTag(this);
@@ -10499,7 +9613,7 @@
/**
* The list of names from the library that are made visible by this combinator.
*/
- NodeList<SimpleIdentifier> shownNames;
+ NodeList<SimpleIdentifier> _shownNames;
/**
* Initialize a newly created import show combinator.
@@ -10507,25 +9621,24 @@
* @param keyword the comma introducing the combinator
* @param shownNames the list of names from the library that are made visible by this combinator
*/
- ShowCombinator.full(Token keyword, List<SimpleIdentifier> shownNames) : super.full(keyword) {
- this.shownNames = new NodeList<SimpleIdentifier>(this);
- this.shownNames.addAll(shownNames);
+ ShowCombinator(Token keyword, List<SimpleIdentifier> shownNames) : super(keyword) {
+ this._shownNames = new NodeList<SimpleIdentifier>(this);
+ this._shownNames.addAll(shownNames);
}
- /**
- * Initialize a newly created import show combinator.
- *
- * @param keyword the comma introducing the combinator
- * @param shownNames the list of names from the library that are made visible by this combinator
- */
- ShowCombinator({Token keyword, List<SimpleIdentifier> shownNames}) : this.full(keyword, shownNames);
-
accept(ASTVisitor visitor) => visitor.visitShowCombinator(this);
- Token get endToken => shownNames.endToken;
+ Token get endToken => _shownNames.endToken;
+
+ /**
+ * Return the list of names from the library that are made visible by this combinator.
+ *
+ * @return the list of names from the library that are made visible by this combinator
+ */
+ NodeList<SimpleIdentifier> get shownNames => _shownNames;
void visitChildren(ASTVisitor visitor) {
- shownNames.accept(visitor);
+ _shownNames.accept(visitor);
}
}
@@ -10561,22 +9674,10 @@
* @param type the name of the declared type of the parameter
* @param identifier the name of the parameter being declared
*/
- SimpleFormalParameter.full(Comment comment, List<Annotation> metadata, Token keyword, TypeName type, SimpleIdentifier identifier) : super.full(comment, metadata, identifier) {
- this.keyword = keyword;
+ SimpleFormalParameter(Comment comment, List<Annotation> metadata, this.keyword, TypeName type, SimpleIdentifier identifier) : super(comment, metadata, identifier) {
this._type = becomeParentOf(type);
}
- /**
- * Initialize a newly created formal parameter.
- *
- * @param comment the documentation comment associated with this parameter
- * @param metadata the annotations associated with this parameter
- * @param keyword the token representing either the 'final', 'const' or 'var' keyword
- * @param type the name of the declared type of the parameter
- * @param identifier the name of the parameter being declared
- */
- SimpleFormalParameter({Comment comment, List<Annotation> metadata, Token keyword, TypeName type, SimpleIdentifier identifier}) : this.full(comment, metadata, keyword, type, identifier);
-
accept(ASTVisitor visitor) => visitor.visitSimpleFormalParameter(this);
Token get beginToken {
@@ -10663,16 +9764,7 @@
*
* @param token the token representing the identifier
*/
- SimpleIdentifier.full(Token token) {
- this.token = token;
- }
-
- /**
- * Initialize a newly created identifier.
- *
- * @param token the token representing the identifier
- */
- SimpleIdentifier({Token token}) : this.full(token);
+ SimpleIdentifier(this.token);
accept(ASTVisitor visitor) => visitor.visitSimpleIdentifier(this);
@@ -10926,19 +10018,10 @@
* @param literal the token representing the literal
* @param value the value of the literal
*/
- SimpleStringLiteral.full(Token literal, String value) {
- this.literal = literal;
+ SimpleStringLiteral(this.literal, String value) {
this._value = StringUtilities.intern(value);
}
- /**
- * Initialize a newly created simple string literal.
- *
- * @param literal the token representing the literal
- * @param value the value of the literal
- */
- SimpleStringLiteral({Token literal, String value}) : this.full(literal, value);
-
accept(ASTVisitor visitor) => visitor.visitSimpleStringLiteral(this);
Token get beginToken => literal;
@@ -11032,33 +10115,33 @@
/**
* The elements that will be composed to produce the resulting string.
*/
- NodeList<InterpolationElement> elements;
+ NodeList<InterpolationElement> _elements;
/**
* Initialize a newly created string interpolation expression.
*
* @param elements the elements that will be composed to produce the resulting string
*/
- StringInterpolation.full(List<InterpolationElement> elements) {
- this.elements = new NodeList<InterpolationElement>(this);
- this.elements.addAll(elements);
+ StringInterpolation(List<InterpolationElement> elements) {
+ this._elements = new NodeList<InterpolationElement>(this);
+ this._elements.addAll(elements);
}
- /**
- * Initialize a newly created string interpolation expression.
- *
- * @param elements the elements that will be composed to produce the resulting string
- */
- StringInterpolation({List<InterpolationElement> elements}) : this.full(elements);
-
accept(ASTVisitor visitor) => visitor.visitStringInterpolation(this);
- Token get beginToken => elements.beginToken;
+ Token get beginToken => _elements.beginToken;
- Token get endToken => elements.endToken;
+ /**
+ * Return the elements that will be composed to produce the resulting string.
+ *
+ * @return the elements that will be composed to produce the resulting string
+ */
+ NodeList<InterpolationElement> get elements => _elements;
+
+ Token get endToken => _elements.endToken;
void visitChildren(ASTVisitor visitor) {
- elements.accept(visitor);
+ _elements.accept(visitor);
}
void appendStringValue(JavaStringBuilder builder) {
@@ -11154,24 +10237,11 @@
* @param constructorName the name of the constructor that is being invoked
* @param argumentList the list of arguments to the constructor
*/
- SuperConstructorInvocation.full(Token keyword, Token period, SimpleIdentifier constructorName, ArgumentList argumentList) {
- this.keyword = keyword;
- this.period = period;
+ SuperConstructorInvocation(this.keyword, this.period, SimpleIdentifier constructorName, ArgumentList argumentList) {
this._constructorName = becomeParentOf(constructorName);
this._argumentList = becomeParentOf(argumentList);
}
- /**
- * Initialize a newly created super invocation to invoke the inherited constructor with the given
- * name with the given arguments.
- *
- * @param keyword the token for the 'super' keyword
- * @param period the token for the period before the name of the constructor that is being invoked
- * @param constructorName the name of the constructor that is being invoked
- * @param argumentList the list of arguments to the constructor
- */
- SuperConstructorInvocation({Token keyword, Token period, SimpleIdentifier constructorName, ArgumentList argumentList}) : this.full(keyword, period, constructorName, argumentList);
-
accept(ASTVisitor visitor) => visitor.visitSuperConstructorInvocation(this);
/**
@@ -11238,16 +10308,7 @@
*
* @param keyword the token representing the keyword
*/
- SuperExpression.full(Token keyword) {
- this.keyword = keyword;
- }
-
- /**
- * Initialize a newly created super expression.
- *
- * @param keyword the token representing the keyword
- */
- SuperExpression({Token keyword}) : this.full(keyword);
+ SuperExpression(this.keyword);
accept(ASTVisitor visitor) => visitor.visitSuperExpression(this);
@@ -11286,21 +10347,10 @@
* @param colon the colon separating the keyword or the expression from the statements
* @param statements the statements that will be executed if this switch member is selected
*/
- SwitchCase.full(List<Label> labels, Token keyword, Expression expression, Token colon, List<Statement> statements) : super.full(labels, keyword, colon, statements) {
+ SwitchCase(List<Label> labels, Token keyword, Expression expression, Token colon, List<Statement> statements) : super(labels, keyword, colon, statements) {
this._expression = becomeParentOf(expression);
}
- /**
- * Initialize a newly created switch case.
- *
- * @param labels the labels associated with the switch member
- * @param keyword the token representing the 'case' or 'default' keyword
- * @param expression the expression controlling whether the statements will be executed
- * @param colon the colon separating the keyword or the expression from the statements
- * @param statements the statements that will be executed if this switch member is selected
- */
- SwitchCase({List<Label> labels, Token keyword, Expression expression, Token colon, List<Statement> statements}) : this.full(labels, keyword, expression, colon, statements);
-
accept(ASTVisitor visitor) => visitor.visitSwitchCase(this);
/**
@@ -11345,17 +10395,7 @@
* @param colon the colon separating the keyword or the expression from the statements
* @param statements the statements that will be executed if this switch member is selected
*/
- SwitchDefault.full(List<Label> labels, Token keyword, Token colon, List<Statement> statements) : super.full(labels, keyword, colon, statements);
-
- /**
- * Initialize a newly created switch default.
- *
- * @param labels the labels associated with the switch member
- * @param keyword the token representing the 'case' or 'default' keyword
- * @param colon the colon separating the keyword or the expression from the statements
- * @param statements the statements that will be executed if this switch member is selected
- */
- SwitchDefault({List<Label> labels, Token keyword, Token colon, List<Statement> statements}) : this.full(labels, keyword, colon, statements);
+ SwitchDefault(List<Label> labels, Token keyword, Token colon, List<Statement> statements) : super(labels, keyword, colon, statements);
accept(ASTVisitor visitor) => visitor.visitSwitchDefault(this);
@@ -11381,7 +10421,7 @@
/**
* The labels associated with the switch member.
*/
- NodeList<Label> labels;
+ NodeList<Label> _labels;
/**
* The token representing the 'case' or 'default' keyword.
@@ -11396,7 +10436,7 @@
/**
* The statements that will be executed if this switch member is selected.
*/
- NodeList<Statement> statements;
+ NodeList<Statement> _statements;
/**
* Initialize a newly created switch member.
@@ -11406,38 +10446,40 @@
* @param colon the colon separating the keyword or the expression from the statements
* @param statements the statements that will be executed if this switch member is selected
*/
- SwitchMember.full(List<Label> labels, Token keyword, Token colon, List<Statement> statements) {
- this.labels = new NodeList<Label>(this);
- this.statements = new NodeList<Statement>(this);
- this.labels.addAll(labels);
- this.keyword = keyword;
- this.colon = colon;
- this.statements.addAll(statements);
+ SwitchMember(List<Label> labels, this.keyword, this.colon, List<Statement> statements) {
+ this._labels = new NodeList<Label>(this);
+ this._statements = new NodeList<Statement>(this);
+ this._labels.addAll(labels);
+ this._statements.addAll(statements);
}
- /**
- * Initialize a newly created switch member.
- *
- * @param labels the labels associated with the switch member
- * @param keyword the token representing the 'case' or 'default' keyword
- * @param colon the colon separating the keyword or the expression from the statements
- * @param statements the statements that will be executed if this switch member is selected
- */
- SwitchMember({List<Label> labels, Token keyword, Token colon, List<Statement> statements}) : this.full(labels, keyword, colon, statements);
-
Token get beginToken {
- if (!labels.isEmpty) {
- return labels.beginToken;
+ if (!_labels.isEmpty) {
+ return _labels.beginToken;
}
return keyword;
}
Token get endToken {
- if (!statements.isEmpty) {
- return statements.endToken;
+ if (!_statements.isEmpty) {
+ return _statements.endToken;
}
return colon;
}
+
+ /**
+ * Return the labels associated with the switch member.
+ *
+ * @return the labels associated with the switch member
+ */
+ NodeList<Label> get labels => _labels;
+
+ /**
+ * Return the statements that will be executed if this switch member is selected.
+ *
+ * @return the statements that will be executed if this switch member is selected
+ */
+ NodeList<Statement> get statements => _statements;
}
/**
@@ -11479,7 +10521,7 @@
/**
* The switch members that can be selected by the expression.
*/
- NodeList<SwitchMember> members;
+ NodeList<SwitchMember> _members;
/**
* The right curly bracket.
@@ -11497,30 +10539,12 @@
* @param members the switch members that can be selected by the expression
* @param rightBracket the right curly bracket
*/
- SwitchStatement.full(Token keyword, Token leftParenthesis, Expression expression, Token rightParenthesis, Token leftBracket, List<SwitchMember> members, Token rightBracket) {
- this.members = new NodeList<SwitchMember>(this);
- this.keyword = keyword;
- this.leftParenthesis = leftParenthesis;
+ SwitchStatement(this.keyword, this.leftParenthesis, Expression expression, this.rightParenthesis, this.leftBracket, List<SwitchMember> members, this.rightBracket) {
+ this._members = new NodeList<SwitchMember>(this);
this._expression = becomeParentOf(expression);
- this.rightParenthesis = rightParenthesis;
- this.leftBracket = leftBracket;
- this.members.addAll(members);
- this.rightBracket = rightBracket;
+ this._members.addAll(members);
}
- /**
- * Initialize a newly created switch statement.
- *
- * @param keyword the token representing the 'switch' keyword
- * @param leftParenthesis the left parenthesis
- * @param expression the expression used to determine which of the switch members will be selected
- * @param rightParenthesis the right parenthesis
- * @param leftBracket the left curly bracket
- * @param members the switch members that can be selected by the expression
- * @param rightBracket the right curly bracket
- */
- SwitchStatement({Token keyword, Token leftParenthesis, Expression expression, Token rightParenthesis, Token leftBracket, List<SwitchMember> members, Token rightBracket}) : this.full(keyword, leftParenthesis, expression, rightParenthesis, leftBracket, members, rightBracket);
-
accept(ASTVisitor visitor) => visitor.visitSwitchStatement(this);
Token get beginToken => keyword;
@@ -11535,6 +10559,13 @@
Expression get expression => _expression;
/**
+ * Return the switch members that can be selected by the expression.
+ *
+ * @return the switch members that can be selected by the expression
+ */
+ NodeList<SwitchMember> get members => _members;
+
+ /**
* Set the expression used to determine which of the switch members will be selected to the given
* expression.
*
@@ -11546,7 +10577,7 @@
void visitChildren(ASTVisitor visitor) {
safelyVisitChild(_expression, visitor);
- members.accept(visitor);
+ _members.accept(visitor);
}
}
@@ -11569,7 +10600,7 @@
/**
* The components of the literal.
*/
- List<Token> components;
+ final List<Token> components;
/**
* Initialize a newly created symbol literal.
@@ -11577,18 +10608,7 @@
* @param poundSign the token introducing the literal
* @param components the components of the literal
*/
- SymbolLiteral.full(Token poundSign, List<Token> components) {
- this.poundSign = poundSign;
- this.components = components;
- }
-
- /**
- * Initialize a newly created symbol literal.
- *
- * @param poundSign the token introducing the literal
- * @param components the components of the literal
- */
- SymbolLiteral({Token poundSign, List<Token> components}) : this.full(poundSign, components);
+ SymbolLiteral(this.poundSign, this.components);
accept(ASTVisitor visitor) => visitor.visitSymbolLiteral(this);
@@ -11621,16 +10641,7 @@
*
* @param keyword the token representing the keyword
*/
- ThisExpression.full(Token keyword) {
- this.keyword = keyword;
- }
-
- /**
- * Initialize a newly created this expression.
- *
- * @param keyword the token representing the keyword
- */
- ThisExpression({Token keyword}) : this.full(keyword);
+ ThisExpression(this.keyword);
accept(ASTVisitor visitor) => visitor.visitThisExpression(this);
@@ -11671,19 +10682,10 @@
* @param keyword the token representing the 'throw' keyword
* @param expression the expression computing the exception to be thrown
*/
- ThrowExpression.full(Token keyword, Expression expression) {
- this.keyword = keyword;
+ ThrowExpression(this.keyword, Expression expression) {
this._expression = becomeParentOf(expression);
}
- /**
- * Initialize a newly created throw expression.
- *
- * @param keyword the token representing the 'throw' keyword
- * @param expression the expression computing the exception to be thrown
- */
- ThrowExpression({Token keyword, Expression expression}) : this.full(keyword, expression);
-
accept(ASTVisitor visitor) => visitor.visitThrowExpression(this);
Token get beginToken => keyword;
@@ -11749,21 +10751,10 @@
* @param variableList the top-level variables being declared
* @param semicolon the semicolon terminating the declaration
*/
- TopLevelVariableDeclaration.full(Comment comment, List<Annotation> metadata, VariableDeclarationList variableList, Token semicolon) : super.full(comment, metadata) {
+ TopLevelVariableDeclaration(Comment comment, List<Annotation> metadata, VariableDeclarationList variableList, this.semicolon) : super(comment, metadata) {
this._variableList = becomeParentOf(variableList);
- this.semicolon = semicolon;
}
- /**
- * Initialize a newly created top-level variable declaration.
- *
- * @param comment the documentation comment associated with this variable
- * @param metadata the annotations associated with this variable
- * @param variableList the top-level variables being declared
- * @param semicolon the semicolon terminating the declaration
- */
- TopLevelVariableDeclaration({Comment comment, List<Annotation> metadata, VariableDeclarationList variableList, Token semicolon}) : this.full(comment, metadata, variableList, semicolon);
-
accept(ASTVisitor visitor) => visitor.visitTopLevelVariableDeclaration(this);
Element get element => null;
@@ -11821,7 +10812,7 @@
/**
* The catch clauses contained in the try statement.
*/
- NodeList<CatchClause> catchClauses;
+ NodeList<CatchClause> _catchClauses;
/**
* The token representing the 'finally' keyword, or `null` if the statement does not contain
@@ -11844,26 +10835,13 @@
* @param finallyKeyword the token representing the 'finally' keyword
* @param finallyBlock the finally block contained in the try statement
*/
- TryStatement.full(Token tryKeyword, Block body, List<CatchClause> catchClauses, Token finallyKeyword, Block finallyBlock) {
- this.catchClauses = new NodeList<CatchClause>(this);
- this.tryKeyword = tryKeyword;
+ TryStatement(this.tryKeyword, Block body, List<CatchClause> catchClauses, this.finallyKeyword, Block finallyBlock) {
+ this._catchClauses = new NodeList<CatchClause>(this);
this._body = becomeParentOf(body);
- this.catchClauses.addAll(catchClauses);
- this.finallyKeyword = finallyKeyword;
+ this._catchClauses.addAll(catchClauses);
this._finallyBlock = becomeParentOf(finallyBlock);
}
- /**
- * Initialize a newly created try statement.
- *
- * @param tryKeyword the token representing the 'try' keyword
- * @param body the body of the statement
- * @param catchClauses the catch clauses contained in the try statement
- * @param finallyKeyword the token representing the 'finally' keyword
- * @param finallyBlock the finally block contained in the try statement
- */
- TryStatement({Token tryKeyword, Block body, List<CatchClause> catchClauses, Token finallyKeyword, Block finallyBlock}) : this.full(tryKeyword, body, catchClauses, finallyKeyword, finallyBlock);
-
accept(ASTVisitor visitor) => visitor.visitTryStatement(this);
Token get beginToken => tryKeyword;
@@ -11875,13 +10853,20 @@
*/
Block get body => _body;
+ /**
+ * Return the catch clauses contained in the try statement.
+ *
+ * @return the catch clauses contained in the try statement
+ */
+ NodeList<CatchClause> get catchClauses => _catchClauses;
+
Token get endToken {
if (_finallyBlock != null) {
return _finallyBlock.endToken;
} else if (finallyKeyword != null) {
return finallyKeyword;
- } else if (!catchClauses.isEmpty) {
- return catchClauses.endToken;
+ } else if (!_catchClauses.isEmpty) {
+ return _catchClauses.endToken;
}
return _body.endToken;
}
@@ -11914,7 +10899,7 @@
void visitChildren(ASTVisitor visitor) {
safelyVisitChild(_body, visitor);
- catchClauses.accept(visitor);
+ _catchClauses.accept(visitor);
safelyVisitChild(_finallyBlock, visitor);
}
}
@@ -11952,20 +10937,7 @@
* @param keyword the token representing the 'typedef' keyword
* @param semicolon the semicolon terminating the declaration
*/
- TypeAlias.full(Comment comment, List<Annotation> metadata, Token keyword, Token semicolon) : super.full(comment, metadata) {
- this.keyword = keyword;
- this.semicolon = semicolon;
- }
-
- /**
- * Initialize a newly created type alias.
- *
- * @param comment the documentation comment associated with this type alias
- * @param metadata the annotations associated with this type alias
- * @param keyword the token representing the 'typedef' keyword
- * @param semicolon the semicolon terminating the declaration
- */
- TypeAlias({Comment comment, List<Annotation> metadata, Token keyword, Token semicolon}) : this.full(comment, metadata, keyword, semicolon);
+ TypeAlias(Comment comment, List<Annotation> metadata, this.keyword, this.semicolon) : super(comment, metadata);
Token get endToken => semicolon;
@@ -11991,7 +10963,7 @@
/**
* The type arguments associated with the type.
*/
- NodeList<TypeName> arguments;
+ NodeList<TypeName> _arguments;
/**
* The right bracket.
@@ -12005,30 +10977,26 @@
* @param arguments the type arguments associated with the type
* @param rightBracket the right bracket
*/
- TypeArgumentList.full(Token leftBracket, List<TypeName> arguments, Token rightBracket) {
- this.arguments = new NodeList<TypeName>(this);
- this.leftBracket = leftBracket;
- this.arguments.addAll(arguments);
- this.rightBracket = rightBracket;
+ TypeArgumentList(this.leftBracket, List<TypeName> arguments, this.rightBracket) {
+ this._arguments = new NodeList<TypeName>(this);
+ this._arguments.addAll(arguments);
}
- /**
- * Initialize a newly created list of type arguments.
- *
- * @param leftBracket the left bracket
- * @param arguments the type arguments associated with the type
- * @param rightBracket the right bracket
- */
- TypeArgumentList({Token leftBracket, List<TypeName> arguments, Token rightBracket}) : this.full(leftBracket, arguments, rightBracket);
-
accept(ASTVisitor visitor) => visitor.visitTypeArgumentList(this);
+ /**
+ * Return the type arguments associated with the type.
+ *
+ * @return the type arguments associated with the type
+ */
+ NodeList<TypeName> get arguments => _arguments;
+
Token get beginToken => leftBracket;
Token get endToken => rightBracket;
void visitChildren(ASTVisitor visitor) {
- arguments.accept(visitor);
+ _arguments.accept(visitor);
}
}
@@ -12066,20 +11034,11 @@
* @param typeArguments the type arguments associated with the type, or `null` if there are
* no type arguments
*/
- TypeName.full(Identifier name, TypeArgumentList typeArguments) {
+ TypeName(Identifier name, TypeArgumentList typeArguments) {
this._name = becomeParentOf(name);
this._typeArguments = becomeParentOf(typeArguments);
}
- /**
- * Initialize a newly created type name.
- *
- * @param name the name of the type
- * @param typeArguments the type arguments associated with the type, or `null` if there are
- * no type arguments
- */
- TypeName({Identifier name, TypeArgumentList typeArguments}) : this.full(name, typeArguments);
-
accept(ASTVisitor visitor) => visitor.visitTypeName(this);
Token get beginToken => _name.beginToken;
@@ -12169,23 +11128,11 @@
* @param keyword the token representing the 'extends' keyword
* @param bound the name of the upper bound for legal arguments
*/
- TypeParameter.full(Comment comment, List<Annotation> metadata, SimpleIdentifier name, Token keyword, TypeName bound) : super.full(comment, metadata) {
+ TypeParameter(Comment comment, List<Annotation> metadata, SimpleIdentifier name, this.keyword, TypeName bound) : super(comment, metadata) {
this._name = becomeParentOf(name);
- this.keyword = keyword;
this._bound = becomeParentOf(bound);
}
- /**
- * Initialize a newly created type parameter.
- *
- * @param comment the documentation comment associated with the type parameter
- * @param metadata the annotations associated with the type parameter
- * @param name the name of the type parameter
- * @param keyword the token representing the 'extends' keyword
- * @param bound the name of the upper bound for legal arguments
- */
- TypeParameter({Comment comment, List<Annotation> metadata, SimpleIdentifier name, Token keyword, TypeName bound}) : this.full(comment, metadata, name, keyword, bound);
-
accept(ASTVisitor visitor) => visitor.visitTypeParameter(this);
/**
@@ -12253,17 +11200,17 @@
/**
* The left angle bracket.
*/
- Token leftBracket;
+ final Token leftBracket;
/**
* The type parameters in the list.
*/
- NodeList<TypeParameter> typeParameters;
+ NodeList<TypeParameter> _typeParameters;
/**
* The right angle bracket.
*/
- Token rightBracket;
+ final Token rightBracket;
/**
* Initialize a newly created list of type parameters.
@@ -12272,30 +11219,26 @@
* @param typeParameters the type parameters in the list
* @param rightBracket the right angle bracket
*/
- TypeParameterList.full(Token leftBracket, List<TypeParameter> typeParameters, Token rightBracket) {
- this.typeParameters = new NodeList<TypeParameter>(this);
- this.leftBracket = leftBracket;
- this.typeParameters.addAll(typeParameters);
- this.rightBracket = rightBracket;
+ TypeParameterList(this.leftBracket, List<TypeParameter> typeParameters, this.rightBracket) {
+ this._typeParameters = new NodeList<TypeParameter>(this);
+ this._typeParameters.addAll(typeParameters);
}
- /**
- * Initialize a newly created list of type parameters.
- *
- * @param leftBracket the left angle bracket
- * @param typeParameters the type parameters in the list
- * @param rightBracket the right angle bracket
- */
- TypeParameterList({Token leftBracket, List<TypeParameter> typeParameters, Token rightBracket}) : this.full(leftBracket, typeParameters, rightBracket);
-
accept(ASTVisitor visitor) => visitor.visitTypeParameterList(this);
Token get beginToken => leftBracket;
Token get endToken => rightBracket;
+ /**
+ * Return the type parameters for the type.
+ *
+ * @return the type parameters for the type
+ */
+ NodeList<TypeParameter> get typeParameters => _typeParameters;
+
void visitChildren(ASTVisitor visitor) {
- typeParameters.accept(visitor);
+ _typeParameters.accept(visitor);
}
}
@@ -12330,20 +11273,10 @@
* @param typeArguments the type argument associated with this literal, or `null` if no type
* arguments were declared
*/
- TypedLiteral.full(Token constKeyword, TypeArgumentList typeArguments) {
- this.constKeyword = constKeyword;
+ TypedLiteral(this.constKeyword, TypeArgumentList typeArguments) {
this.typeArguments = becomeParentOf(typeArguments);
}
- /**
- * Initialize a newly created typed literal.
- *
- * @param constKeyword the token representing the 'const' keyword
- * @param typeArguments the type argument associated with this literal, or `null` if no type
- * arguments were declared
- */
- TypedLiteral({Token constKeyword, TypeArgumentList typeArguments}) : this.full(constKeyword, typeArguments);
-
void visitChildren(ASTVisitor visitor) {
safelyVisitChild(typeArguments, visitor);
}
@@ -12375,20 +11308,11 @@
* @param metadata the annotations associated with the directive
* @param uri the URI referenced by this directive
*/
- UriBasedDirective.full(Comment comment, List<Annotation> metadata, StringLiteral uri) : super.full(comment, metadata) {
+ UriBasedDirective(Comment comment, List<Annotation> metadata, StringLiteral uri) : super(comment, metadata) {
this._uri = becomeParentOf(uri);
}
/**
- * Initialize a newly create URI-based directive.
- *
- * @param comment the documentation comment associated with this directive
- * @param metadata the annotations associated with the directive
- * @param uri the URI referenced by this directive
- */
- UriBasedDirective({Comment comment, List<Annotation> metadata, StringLiteral uri}) : this.full(comment, metadata, uri);
-
- /**
* Return the URI referenced by this directive.
*
* @return the URI referenced by this directive
@@ -12458,23 +11382,11 @@
* @param equals the equal sign separating the variable name from the initial value
* @param initializer the expression used to compute the initial value for the variable
*/
- VariableDeclaration.full(Comment comment, List<Annotation> metadata, SimpleIdentifier name, Token equals, Expression initializer) : super.full(comment, metadata) {
+ VariableDeclaration(Comment comment, List<Annotation> metadata, SimpleIdentifier name, this.equals, Expression initializer) : super(comment, metadata) {
this._name = becomeParentOf(name);
- this.equals = equals;
this._initializer = becomeParentOf(initializer);
}
- /**
- * Initialize a newly created variable declaration.
- *
- * @param comment the documentation comment associated with this declaration
- * @param metadata the annotations associated with this member
- * @param name the name of the variable being declared
- * @param equals the equal sign separating the variable name from the initial value
- * @param initializer the expression used to compute the initial value for the variable
- */
- VariableDeclaration({Comment comment, List<Annotation> metadata, SimpleIdentifier name, Token equals, Expression initializer}) : this.full(comment, metadata, name, equals, initializer);
-
accept(ASTVisitor visitor) => visitor.visitVariableDeclaration(this);
/**
@@ -12599,7 +11511,7 @@
/**
* A list containing the individual variables being declared.
*/
- NodeList<VariableDeclaration> variables;
+ NodeList<VariableDeclaration> _variables;
/**
* Initialize a newly created variable declaration list.
@@ -12610,27 +11522,15 @@
* @param type the type of the variables being declared
* @param variables a list containing the individual variables being declared
*/
- VariableDeclarationList.full(Comment comment, List<Annotation> metadata, Token keyword, TypeName type, List<VariableDeclaration> variables) : super.full(comment, metadata) {
- this.variables = new NodeList<VariableDeclaration>(this);
- this.keyword = keyword;
+ VariableDeclarationList(Comment comment, List<Annotation> metadata, this.keyword, TypeName type, List<VariableDeclaration> variables) : super(comment, metadata) {
+ this._variables = new NodeList<VariableDeclaration>(this);
this._type = becomeParentOf(type);
- this.variables.addAll(variables);
+ this._variables.addAll(variables);
}
- /**
- * Initialize a newly created variable declaration list.
- *
- * @param comment the documentation comment associated with this declaration list
- * @param metadata the annotations associated with this declaration list
- * @param keyword the token representing the 'final', 'const' or 'var' keyword
- * @param type the type of the variables being declared
- * @param variables a list containing the individual variables being declared
- */
- VariableDeclarationList({Comment comment, List<Annotation> metadata, Token keyword, TypeName type, List<VariableDeclaration> variables}) : this.full(comment, metadata, keyword, type, variables);
-
accept(ASTVisitor visitor) => visitor.visitVariableDeclarationList(this);
- Token get endToken => variables.endToken;
+ Token get endToken => _variables.endToken;
/**
* Return the type of the variables being declared, or `null` if no type was provided.
@@ -12640,6 +11540,13 @@
TypeName get type => _type;
/**
+ * Return a list containing the individual variables being declared.
+ *
+ * @return a list containing the individual variables being declared
+ */
+ NodeList<VariableDeclaration> get variables => _variables;
+
+ /**
* Return `true` if the variables in this list were declared with the 'const' modifier.
*
* @return `true` if the variables in this list were declared with the 'const' modifier
@@ -12666,7 +11573,7 @@
void visitChildren(ASTVisitor visitor) {
safelyVisitChild(_type, visitor);
- variables.accept(visitor);
+ _variables.accept(visitor);
}
Token get firstTokenAfterCommentAndMetadata {
@@ -12675,7 +11582,7 @@
} else if (_type != null) {
return _type.beginToken;
}
- return variables.beginToken;
+ return _variables.beginToken;
}
}
@@ -12707,19 +11614,10 @@
* @param variableList the fields being declared
* @param semicolon the semicolon terminating the statement
*/
- VariableDeclarationStatement.full(VariableDeclarationList variableList, Token semicolon) {
+ VariableDeclarationStatement(VariableDeclarationList variableList, this.semicolon) {
this._variableList = becomeParentOf(variableList);
- this.semicolon = semicolon;
}
- /**
- * Initialize a newly created variable declaration statement.
- *
- * @param variableList the fields being declared
- * @param semicolon the semicolon terminating the statement
- */
- VariableDeclarationStatement({VariableDeclarationList variableList, Token semicolon}) : this.full(variableList, semicolon);
-
accept(ASTVisitor visitor) => visitor.visitVariableDeclarationStatement(this);
Token get beginToken => _variableList.beginToken;
@@ -12792,25 +11690,11 @@
* @param rightParenthesis the right parenthesis
* @param body the body of the loop
*/
- WhileStatement.full(Token keyword, Token leftParenthesis, Expression condition, Token rightParenthesis, Statement body) {
- this.keyword = keyword;
- this.leftParenthesis = leftParenthesis;
+ WhileStatement(this.keyword, this.leftParenthesis, Expression condition, this.rightParenthesis, Statement body) {
this._condition = becomeParentOf(condition);
- this.rightParenthesis = rightParenthesis;
this._body = becomeParentOf(body);
}
- /**
- * Initialize a newly created while statement.
- *
- * @param keyword the token representing the 'while' keyword
- * @param leftParenthesis the left parenthesis
- * @param condition the expression used to determine whether to execute the body of the loop
- * @param rightParenthesis the right parenthesis
- * @param body the body of the loop
- */
- WhileStatement({Token keyword, Token leftParenthesis, Expression condition, Token rightParenthesis, Statement body}) : this.full(keyword, leftParenthesis, condition, rightParenthesis, body);
-
accept(ASTVisitor visitor) => visitor.visitWhileStatement(this);
Token get beginToken => keyword;
@@ -12870,12 +11754,12 @@
/**
* The token representing the 'with' keyword.
*/
- Token withKeyword;
+ Token _withKeyword;
/**
* The names of the mixins that were specified.
*/
- NodeList<TypeName> mixinTypes;
+ NodeList<TypeName> _mixinTypes;
/**
* Initialize a newly created with clause.
@@ -12883,25 +11767,31 @@
* @param withKeyword the token representing the 'with' keyword
* @param mixinTypes the names of the mixins that were specified
*/
- WithClause.full(Token withKeyword, List<TypeName> mixinTypes) {
- this.mixinTypes = new NodeList<TypeName>(this);
- this.withKeyword = withKeyword;
- this.mixinTypes.addAll(mixinTypes);
+ WithClause(Token withKeyword, List<TypeName> mixinTypes) {
+ this._mixinTypes = new NodeList<TypeName>(this);
+ this._withKeyword = withKeyword;
+ this._mixinTypes.addAll(mixinTypes);
}
- /**
- * Initialize a newly created with clause.
- *
- * @param withKeyword the token representing the 'with' keyword
- * @param mixinTypes the names of the mixins that were specified
- */
- WithClause({Token withKeyword, List<TypeName> mixinTypes}) : this.full(withKeyword, mixinTypes);
-
accept(ASTVisitor visitor) => visitor.visitWithClause(this);
- Token get beginToken => withKeyword;
+ Token get beginToken => _withKeyword;
- Token get endToken => mixinTypes.endToken;
+ Token get endToken => _mixinTypes.endToken;
+
+ /**
+ * Return the names of the mixins that were specified.
+ *
+ * @return the names of the mixins that were specified
+ */
+ NodeList<TypeName> get mixinTypes => _mixinTypes;
+
+ /**
+ * Return the token representing the 'with' keyword.
+ *
+ * @return the token representing the 'with' keyword
+ */
+ Token get withKeyword => _withKeyword;
/**
* Set the token representing the 'with' keyword to the given token.
@@ -12909,11 +11799,11 @@
* @param withKeyword the token representing the 'with' keyword
*/
void set mixinKeyword(Token withKeyword) {
- this.withKeyword = withKeyword;
+ this._withKeyword = withKeyword;
}
void visitChildren(ASTVisitor visitor) {
- mixinTypes.accept(visitor);
+ _mixinTypes.accept(visitor);
}
}
@@ -13691,7 +12581,7 @@
* The element that was found that corresponds to the given source range, or `null` if there
* is no such element.
*/
- ASTNode foundNode;
+ ASTNode _foundNode;
/**
* Initialize a newly created locator to locate one or more [ASTNode] by locating
@@ -13715,6 +12605,14 @@
}
/**
+ * Return the node that was found that corresponds to the given source range, or `null` if
+ * there is no such node.
+ *
+ * @return the node that was found
+ */
+ ASTNode get foundNode => _foundNode;
+
+ /**
* Search within the given AST node for an identifier representing a [DartElement] in the specified source range. Return the element that was found, or `null` if
* no element was found.
*
@@ -13732,7 +12630,7 @@
AnalysisEngine.instance.logger.logInformation2("Unable to locate element at offset (${_startOffset} - ${_endOffset})", exception);
return null;
}
- return foundNode;
+ return _foundNode;
}
Object visitNode(ASTNode node) {
@@ -13752,7 +12650,7 @@
AnalysisEngine.instance.logger.logInformation2("Exception caught while traversing an AST structure.", exception);
}
if (start <= _startOffset && _endOffset <= end) {
- foundNode = node;
+ _foundNode = node;
throw new NodeLocator_NodeFoundException();
}
return null;
@@ -15708,41 +14606,41 @@
* results or properties associated with the nodes.
*/
class ASTCloner implements ASTVisitor<ASTNode> {
- AdjacentStrings visitAdjacentStrings(AdjacentStrings node) => new AdjacentStrings.full(clone3(node.strings));
+ AdjacentStrings visitAdjacentStrings(AdjacentStrings node) => new AdjacentStrings(clone3(node.strings));
- Annotation visitAnnotation(Annotation node) => new Annotation.full(node.atSign, clone2(node.name), node.period, clone2(node.constructorName), clone2(node.arguments));
+ Annotation visitAnnotation(Annotation node) => new Annotation(node.atSign, clone2(node.name), node.period, clone2(node.constructorName), clone2(node.arguments));
- ArgumentDefinitionTest visitArgumentDefinitionTest(ArgumentDefinitionTest node) => new ArgumentDefinitionTest.full(node.question, clone2(node.identifier));
+ ArgumentDefinitionTest visitArgumentDefinitionTest(ArgumentDefinitionTest node) => new ArgumentDefinitionTest(node.question, clone2(node.identifier));
- ArgumentList visitArgumentList(ArgumentList node) => new ArgumentList.full(node.leftParenthesis, clone3(node.arguments), node.rightParenthesis);
+ ArgumentList visitArgumentList(ArgumentList node) => new ArgumentList(node.leftParenthesis, clone3(node.arguments), node.rightParenthesis);
- AsExpression visitAsExpression(AsExpression node) => new AsExpression.full(clone2(node.expression), node.asOperator, clone2(node.type));
+ AsExpression visitAsExpression(AsExpression node) => new AsExpression(clone2(node.expression), node.asOperator, clone2(node.type));
- ASTNode visitAssertStatement(AssertStatement node) => new AssertStatement.full(node.keyword, node.leftParenthesis, clone2(node.condition), node.rightParenthesis, node.semicolon);
+ ASTNode visitAssertStatement(AssertStatement node) => new AssertStatement(node.keyword, node.leftParenthesis, clone2(node.condition), node.rightParenthesis, node.semicolon);
- AssignmentExpression visitAssignmentExpression(AssignmentExpression node) => new AssignmentExpression.full(clone2(node.leftHandSide), node.operator, clone2(node.rightHandSide));
+ AssignmentExpression visitAssignmentExpression(AssignmentExpression node) => new AssignmentExpression(clone2(node.leftHandSide), node.operator, clone2(node.rightHandSide));
- BinaryExpression visitBinaryExpression(BinaryExpression node) => new BinaryExpression.full(clone2(node.leftOperand), node.operator, clone2(node.rightOperand));
+ BinaryExpression visitBinaryExpression(BinaryExpression node) => new BinaryExpression(clone2(node.leftOperand), node.operator, clone2(node.rightOperand));
- Block visitBlock(Block node) => new Block.full(node.leftBracket, clone3(node.statements), node.rightBracket);
+ Block visitBlock(Block node) => new Block(node.leftBracket, clone3(node.statements), node.rightBracket);
- BlockFunctionBody visitBlockFunctionBody(BlockFunctionBody node) => new BlockFunctionBody.full(clone2(node.block));
+ BlockFunctionBody visitBlockFunctionBody(BlockFunctionBody node) => new BlockFunctionBody(clone2(node.block));
- BooleanLiteral visitBooleanLiteral(BooleanLiteral node) => new BooleanLiteral.full(node.literal, node.value);
+ BooleanLiteral visitBooleanLiteral(BooleanLiteral node) => new BooleanLiteral(node.literal, node.value);
- BreakStatement visitBreakStatement(BreakStatement node) => new BreakStatement.full(node.keyword, clone2(node.label), node.semicolon);
+ BreakStatement visitBreakStatement(BreakStatement node) => new BreakStatement(node.keyword, clone2(node.label), node.semicolon);
- CascadeExpression visitCascadeExpression(CascadeExpression node) => new CascadeExpression.full(clone2(node.target), clone3(node.cascadeSections));
+ CascadeExpression visitCascadeExpression(CascadeExpression node) => new CascadeExpression(clone2(node.target), clone3(node.cascadeSections));
- CatchClause visitCatchClause(CatchClause node) => new CatchClause.full(node.onKeyword, clone2(node.exceptionType), node.catchKeyword, node.leftParenthesis, clone2(node.exceptionParameter), node.comma, clone2(node.stackTraceParameter), node.rightParenthesis, clone2(node.body));
+ CatchClause visitCatchClause(CatchClause node) => new CatchClause(node.onKeyword, clone2(node.exceptionType), node.catchKeyword, node.leftParenthesis, clone2(node.exceptionParameter), node.comma, clone2(node.stackTraceParameter), node.rightParenthesis, clone2(node.body));
ClassDeclaration visitClassDeclaration(ClassDeclaration node) {
- ClassDeclaration copy = new ClassDeclaration.full(clone2(node.documentationComment), clone3(node.metadata), node.abstractKeyword, node.classKeyword, clone2(node.name), clone2(node.typeParameters), clone2(node.extendsClause), clone2(node.withClause), clone2(node.implementsClause), node.leftBracket, clone3(node.members), node.rightBracket);
+ ClassDeclaration copy = new ClassDeclaration(clone2(node.documentationComment), clone3(node.metadata), node.abstractKeyword, node.classKeyword, clone2(node.name), clone2(node.typeParameters), clone2(node.extendsClause), clone2(node.withClause), clone2(node.implementsClause), node.leftBracket, clone3(node.members), node.rightBracket);
copy.nativeClause = clone2(node.nativeClause);
return copy;
}
- ClassTypeAlias visitClassTypeAlias(ClassTypeAlias node) => new ClassTypeAlias.full(clone2(node.documentationComment), clone3(node.metadata), node.keyword, clone2(node.name), clone2(node.typeParameters), node.equals, node.abstractKeyword, clone2(node.superclass), clone2(node.withClause), clone2(node.implementsClause), node.semicolon);
+ ClassTypeAlias visitClassTypeAlias(ClassTypeAlias node) => new ClassTypeAlias(clone2(node.documentationComment), clone3(node.metadata), node.keyword, clone2(node.name), clone2(node.typeParameters), node.equals, node.abstractKeyword, clone2(node.superclass), clone2(node.withClause), clone2(node.implementsClause), node.semicolon);
Comment visitComment(Comment node) {
if (node.isDocumentation) {
@@ -15753,194 +14651,194 @@
return Comment.createEndOfLineComment(node.tokens);
}
- CommentReference visitCommentReference(CommentReference node) => new CommentReference.full(node.newKeyword, clone2(node.identifier));
+ CommentReference visitCommentReference(CommentReference node) => new CommentReference(node.newKeyword, clone2(node.identifier));
CompilationUnit visitCompilationUnit(CompilationUnit node) {
- CompilationUnit clone = new CompilationUnit.full(node.beginToken, clone2(node.scriptTag), clone3(node.directives), clone3(node.declarations), node.endToken);
+ CompilationUnit clone = new CompilationUnit(node.beginToken, clone2(node.scriptTag), clone3(node.directives), clone3(node.declarations), node.endToken);
clone.lineInfo = node.lineInfo;
return clone;
}
- ConditionalExpression visitConditionalExpression(ConditionalExpression node) => new ConditionalExpression.full(clone2(node.condition), node.question, clone2(node.thenExpression), node.colon, clone2(node.elseExpression));
+ ConditionalExpression visitConditionalExpression(ConditionalExpression node) => new ConditionalExpression(clone2(node.condition), node.question, clone2(node.thenExpression), node.colon, clone2(node.elseExpression));
- ConstructorDeclaration visitConstructorDeclaration(ConstructorDeclaration node) => new ConstructorDeclaration.full(clone2(node.documentationComment), clone3(node.metadata), node.externalKeyword, node.constKeyword, node.factoryKeyword, clone2(node.returnType), node.period, clone2(node.name), clone2(node.parameters), node.separator, clone3(node.initializers), clone2(node.redirectedConstructor), clone2(node.body));
+ ConstructorDeclaration visitConstructorDeclaration(ConstructorDeclaration node) => new ConstructorDeclaration(clone2(node.documentationComment), clone3(node.metadata), node.externalKeyword, node.constKeyword, node.factoryKeyword, clone2(node.returnType), node.period, clone2(node.name), clone2(node.parameters), node.separator, clone3(node.initializers), clone2(node.redirectedConstructor), clone2(node.body));
- ConstructorFieldInitializer visitConstructorFieldInitializer(ConstructorFieldInitializer node) => new ConstructorFieldInitializer.full(node.keyword, node.period, clone2(node.fieldName), node.equals, clone2(node.expression));
+ ConstructorFieldInitializer visitConstructorFieldInitializer(ConstructorFieldInitializer node) => new ConstructorFieldInitializer(node.keyword, node.period, clone2(node.fieldName), node.equals, clone2(node.expression));
- ConstructorName visitConstructorName(ConstructorName node) => new ConstructorName.full(clone2(node.type), node.period, clone2(node.name));
+ ConstructorName visitConstructorName(ConstructorName node) => new ConstructorName(clone2(node.type), node.period, clone2(node.name));
- ContinueStatement visitContinueStatement(ContinueStatement node) => new ContinueStatement.full(node.keyword, clone2(node.label), node.semicolon);
+ ContinueStatement visitContinueStatement(ContinueStatement node) => new ContinueStatement(node.keyword, clone2(node.label), node.semicolon);
- DeclaredIdentifier visitDeclaredIdentifier(DeclaredIdentifier node) => new DeclaredIdentifier.full(clone2(node.documentationComment), clone3(node.metadata), node.keyword, clone2(node.type), clone2(node.identifier));
+ DeclaredIdentifier visitDeclaredIdentifier(DeclaredIdentifier node) => new DeclaredIdentifier(clone2(node.documentationComment), clone3(node.metadata), node.keyword, clone2(node.type), clone2(node.identifier));
- DefaultFormalParameter visitDefaultFormalParameter(DefaultFormalParameter node) => new DefaultFormalParameter.full(clone2(node.parameter), node.kind, node.separator, clone2(node.defaultValue));
+ DefaultFormalParameter visitDefaultFormalParameter(DefaultFormalParameter node) => new DefaultFormalParameter(clone2(node.parameter), node.kind, node.separator, clone2(node.defaultValue));
- DoStatement visitDoStatement(DoStatement node) => new DoStatement.full(node.doKeyword, clone2(node.body), node.whileKeyword, node.leftParenthesis, clone2(node.condition), node.rightParenthesis, node.semicolon);
+ DoStatement visitDoStatement(DoStatement node) => new DoStatement(node.doKeyword, clone2(node.body), node.whileKeyword, node.leftParenthesis, clone2(node.condition), node.rightParenthesis, node.semicolon);
- DoubleLiteral visitDoubleLiteral(DoubleLiteral node) => new DoubleLiteral.full(node.literal, node.value);
+ DoubleLiteral visitDoubleLiteral(DoubleLiteral node) => new DoubleLiteral(node.literal, node.value);
- EmptyFunctionBody visitEmptyFunctionBody(EmptyFunctionBody node) => new EmptyFunctionBody.full(node.semicolon);
+ EmptyFunctionBody visitEmptyFunctionBody(EmptyFunctionBody node) => new EmptyFunctionBody(node.semicolon);
- EmptyStatement visitEmptyStatement(EmptyStatement node) => new EmptyStatement.full(node.semicolon);
+ EmptyStatement visitEmptyStatement(EmptyStatement node) => new EmptyStatement(node.semicolon);
- ExportDirective visitExportDirective(ExportDirective node) => new ExportDirective.full(clone2(node.documentationComment), clone3(node.metadata), node.keyword, clone2(node.uri), clone3(node.combinators), node.semicolon);
+ ExportDirective visitExportDirective(ExportDirective node) => new ExportDirective(clone2(node.documentationComment), clone3(node.metadata), node.keyword, clone2(node.uri), clone3(node.combinators), node.semicolon);
- ExpressionFunctionBody visitExpressionFunctionBody(ExpressionFunctionBody node) => new ExpressionFunctionBody.full(node.functionDefinition, clone2(node.expression), node.semicolon);
+ ExpressionFunctionBody visitExpressionFunctionBody(ExpressionFunctionBody node) => new ExpressionFunctionBody(node.functionDefinition, clone2(node.expression), node.semicolon);
- ExpressionStatement visitExpressionStatement(ExpressionStatement node) => new ExpressionStatement.full(clone2(node.expression), node.semicolon);
+ ExpressionStatement visitExpressionStatement(ExpressionStatement node) => new ExpressionStatement(clone2(node.expression), node.semicolon);
- ExtendsClause visitExtendsClause(ExtendsClause node) => new ExtendsClause.full(node.keyword, clone2(node.superclass));
+ ExtendsClause visitExtendsClause(ExtendsClause node) => new ExtendsClause(node.keyword, clone2(node.superclass));
- FieldDeclaration visitFieldDeclaration(FieldDeclaration node) => new FieldDeclaration.full(clone2(node.documentationComment), clone3(node.metadata), node.staticKeyword, clone2(node.fields), node.semicolon);
+ FieldDeclaration visitFieldDeclaration(FieldDeclaration node) => new FieldDeclaration(clone2(node.documentationComment), clone3(node.metadata), node.staticKeyword, clone2(node.fields), node.semicolon);
- FieldFormalParameter visitFieldFormalParameter(FieldFormalParameter node) => new FieldFormalParameter.full(clone2(node.documentationComment), clone3(node.metadata), node.keyword, clone2(node.type), node.thisToken, node.period, clone2(node.identifier), clone2(node.parameters));
+ FieldFormalParameter visitFieldFormalParameter(FieldFormalParameter node) => new FieldFormalParameter(clone2(node.documentationComment), clone3(node.metadata), node.keyword, clone2(node.type), node.thisToken, node.period, clone2(node.identifier), clone2(node.parameters));
ForEachStatement visitForEachStatement(ForEachStatement node) {
DeclaredIdentifier loopVariable = node.loopVariable;
if (loopVariable == null) {
- return new ForEachStatement.con2_full(node.forKeyword, node.leftParenthesis, clone2(node.identifier), node.inKeyword, clone2(node.iterator), node.rightParenthesis, clone2(node.body));
+ return new ForEachStatement.con2(node.forKeyword, node.leftParenthesis, clone2(node.identifier), node.inKeyword, clone2(node.iterator), node.rightParenthesis, clone2(node.body));
}
- return new ForEachStatement.con1_full(node.forKeyword, node.leftParenthesis, clone2(loopVariable), node.inKeyword, clone2(node.iterator), node.rightParenthesis, clone2(node.body));
+ return new ForEachStatement.con1(node.forKeyword, node.leftParenthesis, clone2(loopVariable), node.inKeyword, clone2(node.iterator), node.rightParenthesis, clone2(node.body));
}
- FormalParameterList visitFormalParameterList(FormalParameterList node) => new FormalParameterList.full(node.leftParenthesis, clone3(node.parameters), node.leftDelimiter, node.rightDelimiter, node.rightParenthesis);
+ FormalParameterList visitFormalParameterList(FormalParameterList node) => new FormalParameterList(node.leftParenthesis, clone3(node.parameters), node.leftDelimiter, node.rightDelimiter, node.rightParenthesis);
- ForStatement visitForStatement(ForStatement node) => new ForStatement.full(node.forKeyword, node.leftParenthesis, clone2(node.variables), clone2(node.initialization), node.leftSeparator, clone2(node.condition), node.rightSeparator, clone3(node.updaters), node.rightParenthesis, clone2(node.body));
+ ForStatement visitForStatement(ForStatement node) => new ForStatement(node.forKeyword, node.leftParenthesis, clone2(node.variables), clone2(node.initialization), node.leftSeparator, clone2(node.condition), node.rightSeparator, clone3(node.updaters), node.rightParenthesis, clone2(node.body));
- FunctionDeclaration visitFunctionDeclaration(FunctionDeclaration node) => new FunctionDeclaration.full(clone2(node.documentationComment), clone3(node.metadata), node.externalKeyword, clone2(node.returnType), node.propertyKeyword, clone2(node.name), clone2(node.functionExpression));
+ FunctionDeclaration visitFunctionDeclaration(FunctionDeclaration node) => new FunctionDeclaration(clone2(node.documentationComment), clone3(node.metadata), node.externalKeyword, clone2(node.returnType), node.propertyKeyword, clone2(node.name), clone2(node.functionExpression));
- FunctionDeclarationStatement visitFunctionDeclarationStatement(FunctionDeclarationStatement node) => new FunctionDeclarationStatement.full(clone2(node.functionDeclaration));
+ FunctionDeclarationStatement visitFunctionDeclarationStatement(FunctionDeclarationStatement node) => new FunctionDeclarationStatement(clone2(node.functionDeclaration));
- FunctionExpression visitFunctionExpression(FunctionExpression node) => new FunctionExpression.full(clone2(node.parameters), clone2(node.body));
+ FunctionExpression visitFunctionExpression(FunctionExpression node) => new FunctionExpression(clone2(node.parameters), clone2(node.body));
- FunctionExpressionInvocation visitFunctionExpressionInvocation(FunctionExpressionInvocation node) => new FunctionExpressionInvocation.full(clone2(node.function), clone2(node.argumentList));
+ FunctionExpressionInvocation visitFunctionExpressionInvocation(FunctionExpressionInvocation node) => new FunctionExpressionInvocation(clone2(node.function), clone2(node.argumentList));
- FunctionTypeAlias visitFunctionTypeAlias(FunctionTypeAlias node) => new FunctionTypeAlias.full(clone2(node.documentationComment), clone3(node.metadata), node.keyword, clone2(node.returnType), clone2(node.name), clone2(node.typeParameters), clone2(node.parameters), node.semicolon);
+ FunctionTypeAlias visitFunctionTypeAlias(FunctionTypeAlias node) => new FunctionTypeAlias(clone2(node.documentationComment), clone3(node.metadata), node.keyword, clone2(node.returnType), clone2(node.name), clone2(node.typeParameters), clone2(node.parameters), node.semicolon);
- FunctionTypedFormalParameter visitFunctionTypedFormalParameter(FunctionTypedFormalParameter node) => new FunctionTypedFormalParameter.full(clone2(node.documentationComment), clone3(node.metadata), clone2(node.returnType), clone2(node.identifier), clone2(node.parameters));
+ FunctionTypedFormalParameter visitFunctionTypedFormalParameter(FunctionTypedFormalParameter node) => new FunctionTypedFormalParameter(clone2(node.documentationComment), clone3(node.metadata), clone2(node.returnType), clone2(node.identifier), clone2(node.parameters));
- HideCombinator visitHideCombinator(HideCombinator node) => new HideCombinator.full(node.keyword, clone3(node.hiddenNames));
+ HideCombinator visitHideCombinator(HideCombinator node) => new HideCombinator(node.keyword, clone3(node.hiddenNames));
- IfStatement visitIfStatement(IfStatement node) => new IfStatement.full(node.ifKeyword, node.leftParenthesis, clone2(node.condition), node.rightParenthesis, clone2(node.thenStatement), node.elseKeyword, clone2(node.elseStatement));
+ IfStatement visitIfStatement(IfStatement node) => new IfStatement(node.ifKeyword, node.leftParenthesis, clone2(node.condition), node.rightParenthesis, clone2(node.thenStatement), node.elseKeyword, clone2(node.elseStatement));
- ImplementsClause visitImplementsClause(ImplementsClause node) => new ImplementsClause.full(node.keyword, clone3(node.interfaces));
+ ImplementsClause visitImplementsClause(ImplementsClause node) => new ImplementsClause(node.keyword, clone3(node.interfaces));
- ImportDirective visitImportDirective(ImportDirective node) => new ImportDirective.full(clone2(node.documentationComment), clone3(node.metadata), node.keyword, clone2(node.uri), node.asToken, clone2(node.prefix), clone3(node.combinators), node.semicolon);
+ ImportDirective visitImportDirective(ImportDirective node) => new ImportDirective(clone2(node.documentationComment), clone3(node.metadata), node.keyword, clone2(node.uri), node.asToken, clone2(node.prefix), clone3(node.combinators), node.semicolon);
IndexExpression visitIndexExpression(IndexExpression node) {
Token period = node.period;
if (period == null) {
- return new IndexExpression.forTarget_full(clone2(node.target), node.leftBracket, clone2(node.index), node.rightBracket);
+ return new IndexExpression.forTarget(clone2(node.target), node.leftBracket, clone2(node.index), node.rightBracket);
} else {
- return new IndexExpression.forCascade_full(period, node.leftBracket, clone2(node.index), node.rightBracket);
+ return new IndexExpression.forCascade(period, node.leftBracket, clone2(node.index), node.rightBracket);
}
}
- InstanceCreationExpression visitInstanceCreationExpression(InstanceCreationExpression node) => new InstanceCreationExpression.full(node.keyword, clone2(node.constructorName), clone2(node.argumentList));
+ InstanceCreationExpression visitInstanceCreationExpression(InstanceCreationExpression node) => new InstanceCreationExpression(node.keyword, clone2(node.constructorName), clone2(node.argumentList));
- IntegerLiteral visitIntegerLiteral(IntegerLiteral node) => new IntegerLiteral.full(node.literal, node.value);
+ IntegerLiteral visitIntegerLiteral(IntegerLiteral node) => new IntegerLiteral(node.literal, node.value);
- InterpolationExpression visitInterpolationExpression(InterpolationExpression node) => new InterpolationExpression.full(node.leftBracket, clone2(node.expression), node.rightBracket);
+ InterpolationExpression visitInterpolationExpression(InterpolationExpression node) => new InterpolationExpression(node.leftBracket, clone2(node.expression), node.rightBracket);
- InterpolationString visitInterpolationString(InterpolationString node) => new InterpolationString.full(node.contents, node.value);
+ InterpolationString visitInterpolationString(InterpolationString node) => new InterpolationString(node.contents, node.value);
- IsExpression visitIsExpression(IsExpression node) => new IsExpression.full(clone2(node.expression), node.isOperator, node.notOperator, clone2(node.type));
+ IsExpression visitIsExpression(IsExpression node) => new IsExpression(clone2(node.expression), node.isOperator, node.notOperator, clone2(node.type));
- Label visitLabel(Label node) => new Label.full(clone2(node.label), node.colon);
+ Label visitLabel(Label node) => new Label(clone2(node.label), node.colon);
- LabeledStatement visitLabeledStatement(LabeledStatement node) => new LabeledStatement.full(clone3(node.labels), clone2(node.statement));
+ LabeledStatement visitLabeledStatement(LabeledStatement node) => new LabeledStatement(clone3(node.labels), clone2(node.statement));
- LibraryDirective visitLibraryDirective(LibraryDirective node) => new LibraryDirective.full(clone2(node.documentationComment), clone3(node.metadata), node.libraryToken, clone2(node.name), node.semicolon);
+ LibraryDirective visitLibraryDirective(LibraryDirective node) => new LibraryDirective(clone2(node.documentationComment), clone3(node.metadata), node.libraryToken, clone2(node.name), node.semicolon);
- LibraryIdentifier visitLibraryIdentifier(LibraryIdentifier node) => new LibraryIdentifier.full(clone3(node.components));
+ LibraryIdentifier visitLibraryIdentifier(LibraryIdentifier node) => new LibraryIdentifier(clone3(node.components));
- ListLiteral visitListLiteral(ListLiteral node) => new ListLiteral.full(node.constKeyword, clone2(node.typeArguments), node.leftBracket, clone3(node.elements), node.rightBracket);
+ ListLiteral visitListLiteral(ListLiteral node) => new ListLiteral(node.constKeyword, clone2(node.typeArguments), node.leftBracket, clone3(node.elements), node.rightBracket);
- MapLiteral visitMapLiteral(MapLiteral node) => new MapLiteral.full(node.constKeyword, clone2(node.typeArguments), node.leftBracket, clone3(node.entries), node.rightBracket);
+ MapLiteral visitMapLiteral(MapLiteral node) => new MapLiteral(node.constKeyword, clone2(node.typeArguments), node.leftBracket, clone3(node.entries), node.rightBracket);
- MapLiteralEntry visitMapLiteralEntry(MapLiteralEntry node) => new MapLiteralEntry.full(clone2(node.key), node.separator, clone2(node.value));
+ MapLiteralEntry visitMapLiteralEntry(MapLiteralEntry node) => new MapLiteralEntry(clone2(node.key), node.separator, clone2(node.value));
- MethodDeclaration visitMethodDeclaration(MethodDeclaration node) => new MethodDeclaration.full(clone2(node.documentationComment), clone3(node.metadata), node.externalKeyword, node.modifierKeyword, clone2(node.returnType), node.propertyKeyword, node.operatorKeyword, clone2(node.name), clone2(node.parameters), clone2(node.body));
+ MethodDeclaration visitMethodDeclaration(MethodDeclaration node) => new MethodDeclaration(clone2(node.documentationComment), clone3(node.metadata), node.externalKeyword, node.modifierKeyword, clone2(node.returnType), node.propertyKeyword, node.operatorKeyword, clone2(node.name), clone2(node.parameters), clone2(node.body));
- MethodInvocation visitMethodInvocation(MethodInvocation node) => new MethodInvocation.full(clone2(node.target), node.period, clone2(node.methodName), clone2(node.argumentList));
+ MethodInvocation visitMethodInvocation(MethodInvocation node) => new MethodInvocation(clone2(node.target), node.period, clone2(node.methodName), clone2(node.argumentList));
- NamedExpression visitNamedExpression(NamedExpression node) => new NamedExpression.full(clone2(node.name), clone2(node.expression));
+ NamedExpression visitNamedExpression(NamedExpression node) => new NamedExpression(clone2(node.name), clone2(node.expression));
- ASTNode visitNativeClause(NativeClause node) => new NativeClause.full(node.keyword, clone2(node.name));
+ ASTNode visitNativeClause(NativeClause node) => new NativeClause(node.keyword, clone2(node.name));
- NativeFunctionBody visitNativeFunctionBody(NativeFunctionBody node) => new NativeFunctionBody.full(node.nativeToken, clone2(node.stringLiteral), node.semicolon);
+ NativeFunctionBody visitNativeFunctionBody(NativeFunctionBody node) => new NativeFunctionBody(node.nativeToken, clone2(node.stringLiteral), node.semicolon);
- NullLiteral visitNullLiteral(NullLiteral node) => new NullLiteral.full(node.literal);
+ NullLiteral visitNullLiteral(NullLiteral node) => new NullLiteral(node.literal);
- ParenthesizedExpression visitParenthesizedExpression(ParenthesizedExpression node) => new ParenthesizedExpression.full(node.leftParenthesis, clone2(node.expression), node.rightParenthesis);
+ ParenthesizedExpression visitParenthesizedExpression(ParenthesizedExpression node) => new ParenthesizedExpression(node.leftParenthesis, clone2(node.expression), node.rightParenthesis);
- PartDirective visitPartDirective(PartDirective node) => new PartDirective.full(clone2(node.documentationComment), clone3(node.metadata), node.partToken, clone2(node.uri), node.semicolon);
+ PartDirective visitPartDirective(PartDirective node) => new PartDirective(clone2(node.documentationComment), clone3(node.metadata), node.partToken, clone2(node.uri), node.semicolon);
- PartOfDirective visitPartOfDirective(PartOfDirective node) => new PartOfDirective.full(clone2(node.documentationComment), clone3(node.metadata), node.partToken, node.ofToken, clone2(node.libraryName), node.semicolon);
+ PartOfDirective visitPartOfDirective(PartOfDirective node) => new PartOfDirective(clone2(node.documentationComment), clone3(node.metadata), node.partToken, node.ofToken, clone2(node.libraryName), node.semicolon);
- PostfixExpression visitPostfixExpression(PostfixExpression node) => new PostfixExpression.full(clone2(node.operand), node.operator);
+ PostfixExpression visitPostfixExpression(PostfixExpression node) => new PostfixExpression(clone2(node.operand), node.operator);
- PrefixedIdentifier visitPrefixedIdentifier(PrefixedIdentifier node) => new PrefixedIdentifier.full(clone2(node.prefix), node.period, clone2(node.identifier));
+ PrefixedIdentifier visitPrefixedIdentifier(PrefixedIdentifier node) => new PrefixedIdentifier(clone2(node.prefix), node.period, clone2(node.identifier));
- PrefixExpression visitPrefixExpression(PrefixExpression node) => new PrefixExpression.full(node.operator, clone2(node.operand));
+ PrefixExpression visitPrefixExpression(PrefixExpression node) => new PrefixExpression(node.operator, clone2(node.operand));
- PropertyAccess visitPropertyAccess(PropertyAccess node) => new PropertyAccess.full(clone2(node.target), node.operator, clone2(node.propertyName));
+ PropertyAccess visitPropertyAccess(PropertyAccess node) => new PropertyAccess(clone2(node.target), node.operator, clone2(node.propertyName));
- RedirectingConstructorInvocation visitRedirectingConstructorInvocation(RedirectingConstructorInvocation node) => new RedirectingConstructorInvocation.full(node.keyword, node.period, clone2(node.constructorName), clone2(node.argumentList));
+ RedirectingConstructorInvocation visitRedirectingConstructorInvocation(RedirectingConstructorInvocation node) => new RedirectingConstructorInvocation(node.keyword, node.period, clone2(node.constructorName), clone2(node.argumentList));
- RethrowExpression visitRethrowExpression(RethrowExpression node) => new RethrowExpression.full(node.keyword);
+ RethrowExpression visitRethrowExpression(RethrowExpression node) => new RethrowExpression(node.keyword);
- ReturnStatement visitReturnStatement(ReturnStatement node) => new ReturnStatement.full(node.keyword, clone2(node.expression), node.semicolon);
+ ReturnStatement visitReturnStatement(ReturnStatement node) => new ReturnStatement(node.keyword, clone2(node.expression), node.semicolon);
- ScriptTag visitScriptTag(ScriptTag node) => new ScriptTag.full(node.scriptTag);
+ ScriptTag visitScriptTag(ScriptTag node) => new ScriptTag(node.scriptTag);
- ShowCombinator visitShowCombinator(ShowCombinator node) => new ShowCombinator.full(node.keyword, clone3(node.shownNames));
+ ShowCombinator visitShowCombinator(ShowCombinator node) => new ShowCombinator(node.keyword, clone3(node.shownNames));
- SimpleFormalParameter visitSimpleFormalParameter(SimpleFormalParameter node) => new SimpleFormalParameter.full(clone2(node.documentationComment), clone3(node.metadata), node.keyword, clone2(node.type), clone2(node.identifier));
+ SimpleFormalParameter visitSimpleFormalParameter(SimpleFormalParameter node) => new SimpleFormalParameter(clone2(node.documentationComment), clone3(node.metadata), node.keyword, clone2(node.type), clone2(node.identifier));
- SimpleIdentifier visitSimpleIdentifier(SimpleIdentifier node) => new SimpleIdentifier.full(node.token);
+ SimpleIdentifier visitSimpleIdentifier(SimpleIdentifier node) => new SimpleIdentifier(node.token);
- SimpleStringLiteral visitSimpleStringLiteral(SimpleStringLiteral node) => new SimpleStringLiteral.full(node.literal, node.value);
+ SimpleStringLiteral visitSimpleStringLiteral(SimpleStringLiteral node) => new SimpleStringLiteral(node.literal, node.value);
- StringInterpolation visitStringInterpolation(StringInterpolation node) => new StringInterpolation.full(clone3(node.elements));
+ StringInterpolation visitStringInterpolation(StringInterpolation node) => new StringInterpolation(clone3(node.elements));
- SuperConstructorInvocation visitSuperConstructorInvocation(SuperConstructorInvocation node) => new SuperConstructorInvocation.full(node.keyword, node.period, clone2(node.constructorName), clone2(node.argumentList));
+ SuperConstructorInvocation visitSuperConstructorInvocation(SuperConstructorInvocation node) => new SuperConstructorInvocation(node.keyword, node.period, clone2(node.constructorName), clone2(node.argumentList));
- SuperExpression visitSuperExpression(SuperExpression node) => new SuperExpression.full(node.keyword);
+ SuperExpression visitSuperExpression(SuperExpression node) => new SuperExpression(node.keyword);
- SwitchCase visitSwitchCase(SwitchCase node) => new SwitchCase.full(clone3(node.labels), node.keyword, clone2(node.expression), node.colon, clone3(node.statements));
+ SwitchCase visitSwitchCase(SwitchCase node) => new SwitchCase(clone3(node.labels), node.keyword, clone2(node.expression), node.colon, clone3(node.statements));
- SwitchDefault visitSwitchDefault(SwitchDefault node) => new SwitchDefault.full(clone3(node.labels), node.keyword, node.colon, clone3(node.statements));
+ SwitchDefault visitSwitchDefault(SwitchDefault node) => new SwitchDefault(clone3(node.labels), node.keyword, node.colon, clone3(node.statements));
- SwitchStatement visitSwitchStatement(SwitchStatement node) => new SwitchStatement.full(node.keyword, node.leftParenthesis, clone2(node.expression), node.rightParenthesis, node.leftBracket, clone3(node.members), node.rightBracket);
+ SwitchStatement visitSwitchStatement(SwitchStatement node) => new SwitchStatement(node.keyword, node.leftParenthesis, clone2(node.expression), node.rightParenthesis, node.leftBracket, clone3(node.members), node.rightBracket);
- ASTNode visitSymbolLiteral(SymbolLiteral node) => new SymbolLiteral.full(node.poundSign, node.components);
+ ASTNode visitSymbolLiteral(SymbolLiteral node) => new SymbolLiteral(node.poundSign, node.components);
- ThisExpression visitThisExpression(ThisExpression node) => new ThisExpression.full(node.keyword);
+ ThisExpression visitThisExpression(ThisExpression node) => new ThisExpression(node.keyword);
- ThrowExpression visitThrowExpression(ThrowExpression node) => new ThrowExpression.full(node.keyword, clone2(node.expression));
+ ThrowExpression visitThrowExpression(ThrowExpression node) => new ThrowExpression(node.keyword, clone2(node.expression));
- TopLevelVariableDeclaration visitTopLevelVariableDeclaration(TopLevelVariableDeclaration node) => new TopLevelVariableDeclaration.full(clone2(node.documentationComment), clone3(node.metadata), clone2(node.variables), node.semicolon);
+ TopLevelVariableDeclaration visitTopLevelVariableDeclaration(TopLevelVariableDeclaration node) => new TopLevelVariableDeclaration(clone2(node.documentationComment), clone3(node.metadata), clone2(node.variables), node.semicolon);
- TryStatement visitTryStatement(TryStatement node) => new TryStatement.full(node.tryKeyword, clone2(node.body), clone3(node.catchClauses), node.finallyKeyword, clone2(node.finallyBlock));
+ TryStatement visitTryStatement(TryStatement node) => new TryStatement(node.tryKeyword, clone2(node.body), clone3(node.catchClauses), node.finallyKeyword, clone2(node.finallyBlock));
- TypeArgumentList visitTypeArgumentList(TypeArgumentList node) => new TypeArgumentList.full(node.leftBracket, clone3(node.arguments), node.rightBracket);
+ TypeArgumentList visitTypeArgumentList(TypeArgumentList node) => new TypeArgumentList(node.leftBracket, clone3(node.arguments), node.rightBracket);
- TypeName visitTypeName(TypeName node) => new TypeName.full(clone2(node.name), clone2(node.typeArguments));
+ TypeName visitTypeName(TypeName node) => new TypeName(clone2(node.name), clone2(node.typeArguments));
- TypeParameter visitTypeParameter(TypeParameter node) => new TypeParameter.full(clone2(node.documentationComment), clone3(node.metadata), clone2(node.name), node.keyword, clone2(node.bound));
+ TypeParameter visitTypeParameter(TypeParameter node) => new TypeParameter(clone2(node.documentationComment), clone3(node.metadata), clone2(node.name), node.keyword, clone2(node.bound));
- TypeParameterList visitTypeParameterList(TypeParameterList node) => new TypeParameterList.full(node.leftBracket, clone3(node.typeParameters), node.rightBracket);
+ TypeParameterList visitTypeParameterList(TypeParameterList node) => new TypeParameterList(node.leftBracket, clone3(node.typeParameters), node.rightBracket);
- VariableDeclaration visitVariableDeclaration(VariableDeclaration node) => new VariableDeclaration.full(null, clone3(node.metadata), clone2(node.name), node.equals, clone2(node.initializer));
+ VariableDeclaration visitVariableDeclaration(VariableDeclaration node) => new VariableDeclaration(null, clone3(node.metadata), clone2(node.name), node.equals, clone2(node.initializer));
- VariableDeclarationList visitVariableDeclarationList(VariableDeclarationList node) => new VariableDeclarationList.full(null, clone3(node.metadata), node.keyword, clone2(node.type), clone3(node.variables));
+ VariableDeclarationList visitVariableDeclarationList(VariableDeclarationList node) => new VariableDeclarationList(null, clone3(node.metadata), node.keyword, clone2(node.type), clone3(node.variables));
- VariableDeclarationStatement visitVariableDeclarationStatement(VariableDeclarationStatement node) => new VariableDeclarationStatement.full(clone2(node.variables), node.semicolon);
+ VariableDeclarationStatement visitVariableDeclarationStatement(VariableDeclarationStatement node) => new VariableDeclarationStatement(clone2(node.variables), node.semicolon);
- WhileStatement visitWhileStatement(WhileStatement node) => new WhileStatement.full(node.keyword, node.leftParenthesis, clone2(node.condition), node.rightParenthesis, clone2(node.body));
+ WhileStatement visitWhileStatement(WhileStatement node) => new WhileStatement(node.keyword, node.leftParenthesis, clone2(node.condition), node.rightParenthesis, clone2(node.body));
- WithClause visitWithClause(WithClause node) => new WithClause.full(node.withKeyword, clone3(node.mixinTypes));
+ WithClause visitWithClause(WithClause node) => new WithClause(node.withKeyword, clone3(node.mixinTypes));
ASTNode clone2(ASTNode node) {
if (node == null) {
@@ -16618,34 +15516,34 @@
this._tokenMap = tokenMap;
}
- AdjacentStrings visitAdjacentStrings(AdjacentStrings node) => new AdjacentStrings.full(clone5(node.strings));
+ AdjacentStrings visitAdjacentStrings(AdjacentStrings node) => new AdjacentStrings(clone5(node.strings));
Annotation visitAnnotation(Annotation node) {
- Annotation copy = new Annotation.full(map(node.atSign), clone4(node.name), map(node.period), clone4(node.constructorName), clone4(node.arguments));
+ Annotation copy = new Annotation(map(node.atSign), clone4(node.name), map(node.period), clone4(node.constructorName), clone4(node.arguments));
copy.element = node.element;
return copy;
}
ArgumentDefinitionTest visitArgumentDefinitionTest(ArgumentDefinitionTest node) {
- ArgumentDefinitionTest copy = new ArgumentDefinitionTest.full(map(node.question), clone4(node.identifier));
+ ArgumentDefinitionTest copy = new ArgumentDefinitionTest(map(node.question), clone4(node.identifier));
copy.propagatedType = node.propagatedType;
copy.staticType = node.staticType;
return copy;
}
- ArgumentList visitArgumentList(ArgumentList node) => new ArgumentList.full(map(node.leftParenthesis), clone5(node.arguments), map(node.rightParenthesis));
+ ArgumentList visitArgumentList(ArgumentList node) => new ArgumentList(map(node.leftParenthesis), clone5(node.arguments), map(node.rightParenthesis));
AsExpression visitAsExpression(AsExpression node) {
- AsExpression copy = new AsExpression.full(clone4(node.expression), map(node.asOperator), clone4(node.type));
+ AsExpression copy = new AsExpression(clone4(node.expression), map(node.asOperator), clone4(node.type));
copy.propagatedType = node.propagatedType;
copy.staticType = node.staticType;
return copy;
}
- ASTNode visitAssertStatement(AssertStatement node) => new AssertStatement.full(map(node.keyword), map(node.leftParenthesis), clone4(node.condition), map(node.rightParenthesis), map(node.semicolon));
+ ASTNode visitAssertStatement(AssertStatement node) => new AssertStatement(map(node.keyword), map(node.leftParenthesis), clone4(node.condition), map(node.rightParenthesis), map(node.semicolon));
AssignmentExpression visitAssignmentExpression(AssignmentExpression node) {
- AssignmentExpression copy = new AssignmentExpression.full(clone4(node.leftHandSide), map(node.operator), clone4(node.rightHandSide));
+ AssignmentExpression copy = new AssignmentExpression(clone4(node.leftHandSide), map(node.operator), clone4(node.rightHandSide));
copy.propagatedElement = node.propagatedElement;
copy.propagatedType = node.propagatedType;
copy.staticElement = node.staticElement;
@@ -16654,7 +15552,7 @@
}
BinaryExpression visitBinaryExpression(BinaryExpression node) {
- BinaryExpression copy = new BinaryExpression.full(clone4(node.leftOperand), map(node.operator), clone4(node.rightOperand));
+ BinaryExpression copy = new BinaryExpression(clone4(node.leftOperand), map(node.operator), clone4(node.rightOperand));
copy.propagatedElement = node.propagatedElement;
copy.propagatedType = node.propagatedType;
copy.staticElement = node.staticElement;
@@ -16662,35 +15560,35 @@
return copy;
}
- Block visitBlock(Block node) => new Block.full(map(node.leftBracket), clone5(node.statements), map(node.rightBracket));
+ Block visitBlock(Block node) => new Block(map(node.leftBracket), clone5(node.statements), map(node.rightBracket));
- BlockFunctionBody visitBlockFunctionBody(BlockFunctionBody node) => new BlockFunctionBody.full(clone4(node.block));
+ BlockFunctionBody visitBlockFunctionBody(BlockFunctionBody node) => new BlockFunctionBody(clone4(node.block));
BooleanLiteral visitBooleanLiteral(BooleanLiteral node) {
- BooleanLiteral copy = new BooleanLiteral.full(map(node.literal), node.value);
+ BooleanLiteral copy = new BooleanLiteral(map(node.literal), node.value);
copy.propagatedType = node.propagatedType;
copy.staticType = node.staticType;
return copy;
}
- BreakStatement visitBreakStatement(BreakStatement node) => new BreakStatement.full(map(node.keyword), clone4(node.label), map(node.semicolon));
+ BreakStatement visitBreakStatement(BreakStatement node) => new BreakStatement(map(node.keyword), clone4(node.label), map(node.semicolon));
CascadeExpression visitCascadeExpression(CascadeExpression node) {
- CascadeExpression copy = new CascadeExpression.full(clone4(node.target), clone5(node.cascadeSections));
+ CascadeExpression copy = new CascadeExpression(clone4(node.target), clone5(node.cascadeSections));
copy.propagatedType = node.propagatedType;
copy.staticType = node.staticType;
return copy;
}
- CatchClause visitCatchClause(CatchClause node) => new CatchClause.full(map(node.onKeyword), clone4(node.exceptionType), map(node.catchKeyword), map(node.leftParenthesis), clone4(node.exceptionParameter), map(node.comma), clone4(node.stackTraceParameter), map(node.rightParenthesis), clone4(node.body));
+ CatchClause visitCatchClause(CatchClause node) => new CatchClause(map(node.onKeyword), clone4(node.exceptionType), map(node.catchKeyword), map(node.leftParenthesis), clone4(node.exceptionParameter), map(node.comma), clone4(node.stackTraceParameter), map(node.rightParenthesis), clone4(node.body));
ClassDeclaration visitClassDeclaration(ClassDeclaration node) {
- ClassDeclaration copy = new ClassDeclaration.full(clone4(node.documentationComment), clone5(node.metadata), map(node.abstractKeyword), map(node.classKeyword), clone4(node.name), clone4(node.typeParameters), clone4(node.extendsClause), clone4(node.withClause), clone4(node.implementsClause), map(node.leftBracket), clone5(node.members), map(node.rightBracket));
+ ClassDeclaration copy = new ClassDeclaration(clone4(node.documentationComment), clone5(node.metadata), map(node.abstractKeyword), map(node.classKeyword), clone4(node.name), clone4(node.typeParameters), clone4(node.extendsClause), clone4(node.withClause), clone4(node.implementsClause), map(node.leftBracket), clone5(node.members), map(node.rightBracket));
copy.nativeClause = clone4(node.nativeClause);
return copy;
}
- ClassTypeAlias visitClassTypeAlias(ClassTypeAlias node) => new ClassTypeAlias.full(clone4(node.documentationComment), clone5(node.metadata), map(node.keyword), clone4(node.name), clone4(node.typeParameters), map(node.equals), map(node.abstractKeyword), clone4(node.superclass), clone4(node.withClause), clone4(node.implementsClause), map(node.semicolon));
+ ClassTypeAlias visitClassTypeAlias(ClassTypeAlias node) => new ClassTypeAlias(clone4(node.documentationComment), clone5(node.metadata), map(node.keyword), clone4(node.name), clone4(node.typeParameters), map(node.equals), map(node.abstractKeyword), clone4(node.superclass), clone4(node.withClause), clone4(node.implementsClause), map(node.semicolon));
Comment visitComment(Comment node) {
if (node.isDocumentation) {
@@ -16701,89 +15599,89 @@
return Comment.createEndOfLineComment(map2(node.tokens));
}
- CommentReference visitCommentReference(CommentReference node) => new CommentReference.full(map(node.newKeyword), clone4(node.identifier));
+ CommentReference visitCommentReference(CommentReference node) => new CommentReference(map(node.newKeyword), clone4(node.identifier));
CompilationUnit visitCompilationUnit(CompilationUnit node) {
- CompilationUnit copy = new CompilationUnit.full(map(node.beginToken), clone4(node.scriptTag), clone5(node.directives), clone5(node.declarations), map(node.endToken));
+ CompilationUnit copy = new CompilationUnit(map(node.beginToken), clone4(node.scriptTag), clone5(node.directives), clone5(node.declarations), map(node.endToken));
copy.lineInfo = node.lineInfo;
copy.element = node.element;
return copy;
}
ConditionalExpression visitConditionalExpression(ConditionalExpression node) {
- ConditionalExpression copy = new ConditionalExpression.full(clone4(node.condition), map(node.question), clone4(node.thenExpression), map(node.colon), clone4(node.elseExpression));
+ ConditionalExpression copy = new ConditionalExpression(clone4(node.condition), map(node.question), clone4(node.thenExpression), map(node.colon), clone4(node.elseExpression));
copy.propagatedType = node.propagatedType;
copy.staticType = node.staticType;
return copy;
}
ConstructorDeclaration visitConstructorDeclaration(ConstructorDeclaration node) {
- ConstructorDeclaration copy = new ConstructorDeclaration.full(clone4(node.documentationComment), clone5(node.metadata), map(node.externalKeyword), map(node.constKeyword), map(node.factoryKeyword), clone4(node.returnType), map(node.period), clone4(node.name), clone4(node.parameters), map(node.separator), clone5(node.initializers), clone4(node.redirectedConstructor), clone4(node.body));
+ ConstructorDeclaration copy = new ConstructorDeclaration(clone4(node.documentationComment), clone5(node.metadata), map(node.externalKeyword), map(node.constKeyword), map(node.factoryKeyword), clone4(node.returnType), map(node.period), clone4(node.name), clone4(node.parameters), map(node.separator), clone5(node.initializers), clone4(node.redirectedConstructor), clone4(node.body));
copy.element = node.element;
return copy;
}
- ConstructorFieldInitializer visitConstructorFieldInitializer(ConstructorFieldInitializer node) => new ConstructorFieldInitializer.full(map(node.keyword), map(node.period), clone4(node.fieldName), map(node.equals), clone4(node.expression));
+ ConstructorFieldInitializer visitConstructorFieldInitializer(ConstructorFieldInitializer node) => new ConstructorFieldInitializer(map(node.keyword), map(node.period), clone4(node.fieldName), map(node.equals), clone4(node.expression));
ConstructorName visitConstructorName(ConstructorName node) {
- ConstructorName copy = new ConstructorName.full(clone4(node.type), map(node.period), clone4(node.name));
+ ConstructorName copy = new ConstructorName(clone4(node.type), map(node.period), clone4(node.name));
copy.staticElement = node.staticElement;
return copy;
}
- ContinueStatement visitContinueStatement(ContinueStatement node) => new ContinueStatement.full(map(node.keyword), clone4(node.label), map(node.semicolon));
+ ContinueStatement visitContinueStatement(ContinueStatement node) => new ContinueStatement(map(node.keyword), clone4(node.label), map(node.semicolon));
- DeclaredIdentifier visitDeclaredIdentifier(DeclaredIdentifier node) => new DeclaredIdentifier.full(clone4(node.documentationComment), clone5(node.metadata), map(node.keyword), clone4(node.type), clone4(node.identifier));
+ DeclaredIdentifier visitDeclaredIdentifier(DeclaredIdentifier node) => new DeclaredIdentifier(clone4(node.documentationComment), clone5(node.metadata), map(node.keyword), clone4(node.type), clone4(node.identifier));
- DefaultFormalParameter visitDefaultFormalParameter(DefaultFormalParameter node) => new DefaultFormalParameter.full(clone4(node.parameter), node.kind, map(node.separator), clone4(node.defaultValue));
+ DefaultFormalParameter visitDefaultFormalParameter(DefaultFormalParameter node) => new DefaultFormalParameter(clone4(node.parameter), node.kind, map(node.separator), clone4(node.defaultValue));
- DoStatement visitDoStatement(DoStatement node) => new DoStatement.full(map(node.doKeyword), clone4(node.body), map(node.whileKeyword), map(node.leftParenthesis), clone4(node.condition), map(node.rightParenthesis), map(node.semicolon));
+ DoStatement visitDoStatement(DoStatement node) => new DoStatement(map(node.doKeyword), clone4(node.body), map(node.whileKeyword), map(node.leftParenthesis), clone4(node.condition), map(node.rightParenthesis), map(node.semicolon));
DoubleLiteral visitDoubleLiteral(DoubleLiteral node) {
- DoubleLiteral copy = new DoubleLiteral.full(map(node.literal), node.value);
+ DoubleLiteral copy = new DoubleLiteral(map(node.literal), node.value);
copy.propagatedType = node.propagatedType;
copy.staticType = node.staticType;
return copy;
}
- EmptyFunctionBody visitEmptyFunctionBody(EmptyFunctionBody node) => new EmptyFunctionBody.full(map(node.semicolon));
+ EmptyFunctionBody visitEmptyFunctionBody(EmptyFunctionBody node) => new EmptyFunctionBody(map(node.semicolon));
- EmptyStatement visitEmptyStatement(EmptyStatement node) => new EmptyStatement.full(map(node.semicolon));
+ EmptyStatement visitEmptyStatement(EmptyStatement node) => new EmptyStatement(map(node.semicolon));
ExportDirective visitExportDirective(ExportDirective node) {
- ExportDirective copy = new ExportDirective.full(clone4(node.documentationComment), clone5(node.metadata), map(node.keyword), clone4(node.uri), clone5(node.combinators), map(node.semicolon));
+ ExportDirective copy = new ExportDirective(clone4(node.documentationComment), clone5(node.metadata), map(node.keyword), clone4(node.uri), clone5(node.combinators), map(node.semicolon));
copy.element = node.element;
return copy;
}
- ExpressionFunctionBody visitExpressionFunctionBody(ExpressionFunctionBody node) => new ExpressionFunctionBody.full(map(node.functionDefinition), clone4(node.expression), map(node.semicolon));
+ ExpressionFunctionBody visitExpressionFunctionBody(ExpressionFunctionBody node) => new ExpressionFunctionBody(map(node.functionDefinition), clone4(node.expression), map(node.semicolon));
- ExpressionStatement visitExpressionStatement(ExpressionStatement node) => new ExpressionStatement.full(clone4(node.expression), map(node.semicolon));
+ ExpressionStatement visitExpressionStatement(ExpressionStatement node) => new ExpressionStatement(clone4(node.expression), map(node.semicolon));
- ExtendsClause visitExtendsClause(ExtendsClause node) => new ExtendsClause.full(map(node.keyword), clone4(node.superclass));
+ ExtendsClause visitExtendsClause(ExtendsClause node) => new ExtendsClause(map(node.keyword), clone4(node.superclass));
- FieldDeclaration visitFieldDeclaration(FieldDeclaration node) => new FieldDeclaration.full(clone4(node.documentationComment), clone5(node.metadata), map(node.staticKeyword), clone4(node.fields), map(node.semicolon));
+ FieldDeclaration visitFieldDeclaration(FieldDeclaration node) => new FieldDeclaration(clone4(node.documentationComment), clone5(node.metadata), map(node.staticKeyword), clone4(node.fields), map(node.semicolon));
- FieldFormalParameter visitFieldFormalParameter(FieldFormalParameter node) => new FieldFormalParameter.full(clone4(node.documentationComment), clone5(node.metadata), map(node.keyword), clone4(node.type), map(node.thisToken), map(node.period), clone4(node.identifier), clone4(node.parameters));
+ FieldFormalParameter visitFieldFormalParameter(FieldFormalParameter node) => new FieldFormalParameter(clone4(node.documentationComment), clone5(node.metadata), map(node.keyword), clone4(node.type), map(node.thisToken), map(node.period), clone4(node.identifier), clone4(node.parameters));
ForEachStatement visitForEachStatement(ForEachStatement node) {
DeclaredIdentifier loopVariable = node.loopVariable;
if (loopVariable == null) {
- return new ForEachStatement.con2_full(map(node.forKeyword), map(node.leftParenthesis), clone4(node.identifier), map(node.inKeyword), clone4(node.iterator), map(node.rightParenthesis), clone4(node.body));
+ return new ForEachStatement.con2(map(node.forKeyword), map(node.leftParenthesis), clone4(node.identifier), map(node.inKeyword), clone4(node.iterator), map(node.rightParenthesis), clone4(node.body));
}
- return new ForEachStatement.con1_full(map(node.forKeyword), map(node.leftParenthesis), clone4(loopVariable), map(node.inKeyword), clone4(node.iterator), map(node.rightParenthesis), clone4(node.body));
+ return new ForEachStatement.con1(map(node.forKeyword), map(node.leftParenthesis), clone4(loopVariable), map(node.inKeyword), clone4(node.iterator), map(node.rightParenthesis), clone4(node.body));
}
- FormalParameterList visitFormalParameterList(FormalParameterList node) => new FormalParameterList.full(map(node.leftParenthesis), clone5(node.parameters), map(node.leftDelimiter), map(node.rightDelimiter), map(node.rightParenthesis));
+ FormalParameterList visitFormalParameterList(FormalParameterList node) => new FormalParameterList(map(node.leftParenthesis), clone5(node.parameters), map(node.leftDelimiter), map(node.rightDelimiter), map(node.rightParenthesis));
- ForStatement visitForStatement(ForStatement node) => new ForStatement.full(map(node.forKeyword), map(node.leftParenthesis), clone4(node.variables), clone4(node.initialization), map(node.leftSeparator), clone4(node.condition), map(node.rightSeparator), clone5(node.updaters), map(node.rightParenthesis), clone4(node.body));
+ ForStatement visitForStatement(ForStatement node) => new ForStatement(map(node.forKeyword), map(node.leftParenthesis), clone4(node.variables), clone4(node.initialization), map(node.leftSeparator), clone4(node.condition), map(node.rightSeparator), clone5(node.updaters), map(node.rightParenthesis), clone4(node.body));
- FunctionDeclaration visitFunctionDeclaration(FunctionDeclaration node) => new FunctionDeclaration.full(clone4(node.documentationComment), clone5(node.metadata), map(node.externalKeyword), clone4(node.returnType), map(node.propertyKeyword), clone4(node.name), clone4(node.functionExpression));
+ FunctionDeclaration visitFunctionDeclaration(FunctionDeclaration node) => new FunctionDeclaration(clone4(node.documentationComment), clone5(node.metadata), map(node.externalKeyword), clone4(node.returnType), map(node.propertyKeyword), clone4(node.name), clone4(node.functionExpression));
- FunctionDeclarationStatement visitFunctionDeclarationStatement(FunctionDeclarationStatement node) => new FunctionDeclarationStatement.full(clone4(node.functionDeclaration));
+ FunctionDeclarationStatement visitFunctionDeclarationStatement(FunctionDeclarationStatement node) => new FunctionDeclarationStatement(clone4(node.functionDeclaration));
FunctionExpression visitFunctionExpression(FunctionExpression node) {
- FunctionExpression copy = new FunctionExpression.full(clone4(node.parameters), clone4(node.body));
+ FunctionExpression copy = new FunctionExpression(clone4(node.parameters), clone4(node.body));
copy.element = node.element;
copy.propagatedType = node.propagatedType;
copy.staticType = node.staticType;
@@ -16791,7 +15689,7 @@
}
FunctionExpressionInvocation visitFunctionExpressionInvocation(FunctionExpressionInvocation node) {
- FunctionExpressionInvocation copy = new FunctionExpressionInvocation.full(clone4(node.function), clone4(node.argumentList));
+ FunctionExpressionInvocation copy = new FunctionExpressionInvocation(clone4(node.function), clone4(node.argumentList));
copy.propagatedElement = node.propagatedElement;
copy.propagatedType = node.propagatedType;
copy.staticElement = node.staticElement;
@@ -16799,25 +15697,25 @@
return copy;
}
- FunctionTypeAlias visitFunctionTypeAlias(FunctionTypeAlias node) => new FunctionTypeAlias.full(clone4(node.documentationComment), clone5(node.metadata), map(node.keyword), clone4(node.returnType), clone4(node.name), clone4(node.typeParameters), clone4(node.parameters), map(node.semicolon));
+ FunctionTypeAlias visitFunctionTypeAlias(FunctionTypeAlias node) => new FunctionTypeAlias(clone4(node.documentationComment), clone5(node.metadata), map(node.keyword), clone4(node.returnType), clone4(node.name), clone4(node.typeParameters), clone4(node.parameters), map(node.semicolon));
- FunctionTypedFormalParameter visitFunctionTypedFormalParameter(FunctionTypedFormalParameter node) => new FunctionTypedFormalParameter.full(clone4(node.documentationComment), clone5(node.metadata), clone4(node.returnType), clone4(node.identifier), clone4(node.parameters));
+ FunctionTypedFormalParameter visitFunctionTypedFormalParameter(FunctionTypedFormalParameter node) => new FunctionTypedFormalParameter(clone4(node.documentationComment), clone5(node.metadata), clone4(node.returnType), clone4(node.identifier), clone4(node.parameters));
- HideCombinator visitHideCombinator(HideCombinator node) => new HideCombinator.full(map(node.keyword), clone5(node.hiddenNames));
+ HideCombinator visitHideCombinator(HideCombinator node) => new HideCombinator(map(node.keyword), clone5(node.hiddenNames));
- IfStatement visitIfStatement(IfStatement node) => new IfStatement.full(map(node.ifKeyword), map(node.leftParenthesis), clone4(node.condition), map(node.rightParenthesis), clone4(node.thenStatement), map(node.elseKeyword), clone4(node.elseStatement));
+ IfStatement visitIfStatement(IfStatement node) => new IfStatement(map(node.ifKeyword), map(node.leftParenthesis), clone4(node.condition), map(node.rightParenthesis), clone4(node.thenStatement), map(node.elseKeyword), clone4(node.elseStatement));
- ImplementsClause visitImplementsClause(ImplementsClause node) => new ImplementsClause.full(map(node.keyword), clone5(node.interfaces));
+ ImplementsClause visitImplementsClause(ImplementsClause node) => new ImplementsClause(map(node.keyword), clone5(node.interfaces));
- ImportDirective visitImportDirective(ImportDirective node) => new ImportDirective.full(clone4(node.documentationComment), clone5(node.metadata), map(node.keyword), clone4(node.uri), map(node.asToken), clone4(node.prefix), clone5(node.combinators), map(node.semicolon));
+ ImportDirective visitImportDirective(ImportDirective node) => new ImportDirective(clone4(node.documentationComment), clone5(node.metadata), map(node.keyword), clone4(node.uri), map(node.asToken), clone4(node.prefix), clone5(node.combinators), map(node.semicolon));
IndexExpression visitIndexExpression(IndexExpression node) {
Token period = map(node.period);
IndexExpression copy;
if (period == null) {
- copy = new IndexExpression.forTarget_full(clone4(node.target), map(node.leftBracket), clone4(node.index), map(node.rightBracket));
+ copy = new IndexExpression.forTarget(clone4(node.target), map(node.leftBracket), clone4(node.index), map(node.rightBracket));
} else {
- copy = new IndexExpression.forCascade_full(period, map(node.leftBracket), clone4(node.index), map(node.rightBracket));
+ copy = new IndexExpression.forCascade(period, map(node.leftBracket), clone4(node.index), map(node.rightBracket));
}
copy.auxiliaryElements = node.auxiliaryElements;
copy.propagatedElement = node.propagatedElement;
@@ -16828,7 +15726,7 @@
}
InstanceCreationExpression visitInstanceCreationExpression(InstanceCreationExpression node) {
- InstanceCreationExpression copy = new InstanceCreationExpression.full(map(node.keyword), clone4(node.constructorName), clone4(node.argumentList));
+ InstanceCreationExpression copy = new InstanceCreationExpression(map(node.keyword), clone4(node.constructorName), clone4(node.argumentList));
copy.propagatedType = node.propagatedType;
copy.staticElement = node.staticElement;
copy.staticType = node.staticType;
@@ -16836,100 +15734,100 @@
}
IntegerLiteral visitIntegerLiteral(IntegerLiteral node) {
- IntegerLiteral copy = new IntegerLiteral.full(map(node.literal), node.value);
+ IntegerLiteral copy = new IntegerLiteral(map(node.literal), node.value);
copy.propagatedType = node.propagatedType;
copy.staticType = node.staticType;
return copy;
}
- InterpolationExpression visitInterpolationExpression(InterpolationExpression node) => new InterpolationExpression.full(map(node.leftBracket), clone4(node.expression), map(node.rightBracket));
+ InterpolationExpression visitInterpolationExpression(InterpolationExpression node) => new InterpolationExpression(map(node.leftBracket), clone4(node.expression), map(node.rightBracket));
- InterpolationString visitInterpolationString(InterpolationString node) => new InterpolationString.full(map(node.contents), node.value);
+ InterpolationString visitInterpolationString(InterpolationString node) => new InterpolationString(map(node.contents), node.value);
IsExpression visitIsExpression(IsExpression node) {
- IsExpression copy = new IsExpression.full(clone4(node.expression), map(node.isOperator), map(node.notOperator), clone4(node.type));
+ IsExpression copy = new IsExpression(clone4(node.expression), map(node.isOperator), map(node.notOperator), clone4(node.type));
copy.propagatedType = node.propagatedType;
copy.staticType = node.staticType;
return copy;
}
- Label visitLabel(Label node) => new Label.full(clone4(node.label), map(node.colon));
+ Label visitLabel(Label node) => new Label(clone4(node.label), map(node.colon));
- LabeledStatement visitLabeledStatement(LabeledStatement node) => new LabeledStatement.full(clone5(node.labels), clone4(node.statement));
+ LabeledStatement visitLabeledStatement(LabeledStatement node) => new LabeledStatement(clone5(node.labels), clone4(node.statement));
- LibraryDirective visitLibraryDirective(LibraryDirective node) => new LibraryDirective.full(clone4(node.documentationComment), clone5(node.metadata), map(node.libraryToken), clone4(node.name), map(node.semicolon));
+ LibraryDirective visitLibraryDirective(LibraryDirective node) => new LibraryDirective(clone4(node.documentationComment), clone5(node.metadata), map(node.libraryToken), clone4(node.name), map(node.semicolon));
LibraryIdentifier visitLibraryIdentifier(LibraryIdentifier node) {
- LibraryIdentifier copy = new LibraryIdentifier.full(clone5(node.components));
+ LibraryIdentifier copy = new LibraryIdentifier(clone5(node.components));
copy.propagatedType = node.propagatedType;
copy.staticType = node.staticType;
return copy;
}
ListLiteral visitListLiteral(ListLiteral node) {
- ListLiteral copy = new ListLiteral.full(map(node.constKeyword), clone4(node.typeArguments), map(node.leftBracket), clone5(node.elements), map(node.rightBracket));
+ ListLiteral copy = new ListLiteral(map(node.constKeyword), clone4(node.typeArguments), map(node.leftBracket), clone5(node.elements), map(node.rightBracket));
copy.propagatedType = node.propagatedType;
copy.staticType = node.staticType;
return copy;
}
MapLiteral visitMapLiteral(MapLiteral node) {
- MapLiteral copy = new MapLiteral.full(map(node.constKeyword), clone4(node.typeArguments), map(node.leftBracket), clone5(node.entries), map(node.rightBracket));
+ MapLiteral copy = new MapLiteral(map(node.constKeyword), clone4(node.typeArguments), map(node.leftBracket), clone5(node.entries), map(node.rightBracket));
copy.propagatedType = node.propagatedType;
copy.staticType = node.staticType;
return copy;
}
- MapLiteralEntry visitMapLiteralEntry(MapLiteralEntry node) => new MapLiteralEntry.full(clone4(node.key), map(node.separator), clone4(node.value));
+ MapLiteralEntry visitMapLiteralEntry(MapLiteralEntry node) => new MapLiteralEntry(clone4(node.key), map(node.separator), clone4(node.value));
- MethodDeclaration visitMethodDeclaration(MethodDeclaration node) => new MethodDeclaration.full(clone4(node.documentationComment), clone5(node.metadata), map(node.externalKeyword), map(node.modifierKeyword), clone4(node.returnType), map(node.propertyKeyword), map(node.operatorKeyword), clone4(node.name), clone4(node.parameters), clone4(node.body));
+ MethodDeclaration visitMethodDeclaration(MethodDeclaration node) => new MethodDeclaration(clone4(node.documentationComment), clone5(node.metadata), map(node.externalKeyword), map(node.modifierKeyword), clone4(node.returnType), map(node.propertyKeyword), map(node.operatorKeyword), clone4(node.name), clone4(node.parameters), clone4(node.body));
MethodInvocation visitMethodInvocation(MethodInvocation node) {
- MethodInvocation copy = new MethodInvocation.full(clone4(node.target), map(node.period), clone4(node.methodName), clone4(node.argumentList));
+ MethodInvocation copy = new MethodInvocation(clone4(node.target), map(node.period), clone4(node.methodName), clone4(node.argumentList));
copy.propagatedType = node.propagatedType;
copy.staticType = node.staticType;
return copy;
}
NamedExpression visitNamedExpression(NamedExpression node) {
- NamedExpression copy = new NamedExpression.full(clone4(node.name), clone4(node.expression));
+ NamedExpression copy = new NamedExpression(clone4(node.name), clone4(node.expression));
copy.propagatedType = node.propagatedType;
copy.staticType = node.staticType;
return copy;
}
- ASTNode visitNativeClause(NativeClause node) => new NativeClause.full(map(node.keyword), clone4(node.name));
+ ASTNode visitNativeClause(NativeClause node) => new NativeClause(map(node.keyword), clone4(node.name));
- NativeFunctionBody visitNativeFunctionBody(NativeFunctionBody node) => new NativeFunctionBody.full(map(node.nativeToken), clone4(node.stringLiteral), map(node.semicolon));
+ NativeFunctionBody visitNativeFunctionBody(NativeFunctionBody node) => new NativeFunctionBody(map(node.nativeToken), clone4(node.stringLiteral), map(node.semicolon));
NullLiteral visitNullLiteral(NullLiteral node) {
- NullLiteral copy = new NullLiteral.full(map(node.literal));
+ NullLiteral copy = new NullLiteral(map(node.literal));
copy.propagatedType = node.propagatedType;
copy.staticType = node.staticType;
return copy;
}
ParenthesizedExpression visitParenthesizedExpression(ParenthesizedExpression node) {
- ParenthesizedExpression copy = new ParenthesizedExpression.full(map(node.leftParenthesis), clone4(node.expression), map(node.rightParenthesis));
+ ParenthesizedExpression copy = new ParenthesizedExpression(map(node.leftParenthesis), clone4(node.expression), map(node.rightParenthesis));
copy.propagatedType = node.propagatedType;
copy.staticType = node.staticType;
return copy;
}
PartDirective visitPartDirective(PartDirective node) {
- PartDirective copy = new PartDirective.full(clone4(node.documentationComment), clone5(node.metadata), map(node.partToken), clone4(node.uri), map(node.semicolon));
+ PartDirective copy = new PartDirective(clone4(node.documentationComment), clone5(node.metadata), map(node.partToken), clone4(node.uri), map(node.semicolon));
copy.element = node.element;
return copy;
}
PartOfDirective visitPartOfDirective(PartOfDirective node) {
- PartOfDirective copy = new PartOfDirective.full(clone4(node.documentationComment), clone5(node.metadata), map(node.partToken), map(node.ofToken), clone4(node.libraryName), map(node.semicolon));
+ PartOfDirective copy = new PartOfDirective(clone4(node.documentationComment), clone5(node.metadata), map(node.partToken), map(node.ofToken), clone4(node.libraryName), map(node.semicolon));
copy.element = node.element;
return copy;
}
PostfixExpression visitPostfixExpression(PostfixExpression node) {
- PostfixExpression copy = new PostfixExpression.full(clone4(node.operand), map(node.operator));
+ PostfixExpression copy = new PostfixExpression(clone4(node.operand), map(node.operator));
copy.propagatedElement = node.propagatedElement;
copy.propagatedType = node.propagatedType;
copy.staticElement = node.staticElement;
@@ -16938,14 +15836,14 @@
}
PrefixedIdentifier visitPrefixedIdentifier(PrefixedIdentifier node) {
- PrefixedIdentifier copy = new PrefixedIdentifier.full(clone4(node.prefix), map(node.period), clone4(node.identifier));
+ PrefixedIdentifier copy = new PrefixedIdentifier(clone4(node.prefix), map(node.period), clone4(node.identifier));
copy.propagatedType = node.propagatedType;
copy.staticType = node.staticType;
return copy;
}
PrefixExpression visitPrefixExpression(PrefixExpression node) {
- PrefixExpression copy = new PrefixExpression.full(map(node.operator), clone4(node.operand));
+ PrefixExpression copy = new PrefixExpression(map(node.operator), clone4(node.operand));
copy.propagatedElement = node.propagatedElement;
copy.propagatedType = node.propagatedType;
copy.staticElement = node.staticElement;
@@ -16954,35 +15852,39 @@
}
PropertyAccess visitPropertyAccess(PropertyAccess node) {
- PropertyAccess copy = new PropertyAccess.full(clone4(node.target), map(node.operator), clone4(node.propertyName));
+ PropertyAccess copy = new PropertyAccess(clone4(node.target), map(node.operator), clone4(node.propertyName));
copy.propagatedType = node.propagatedType;
copy.staticType = node.staticType;
return copy;
}
RedirectingConstructorInvocation visitRedirectingConstructorInvocation(RedirectingConstructorInvocation node) {
- RedirectingConstructorInvocation copy = new RedirectingConstructorInvocation.full(map(node.keyword), map(node.period), clone4(node.constructorName), clone4(node.argumentList));
+ RedirectingConstructorInvocation copy = new RedirectingConstructorInvocation(map(node.keyword), map(node.period), clone4(node.constructorName), clone4(node.argumentList));
copy.staticElement = node.staticElement;
return copy;
}
RethrowExpression visitRethrowExpression(RethrowExpression node) {
- RethrowExpression copy = new RethrowExpression.full(map(node.keyword));
+ RethrowExpression copy = new RethrowExpression(map(node.keyword));
copy.propagatedType = node.propagatedType;
copy.staticType = node.staticType;
return copy;
}
- ReturnStatement visitReturnStatement(ReturnStatement node) => new ReturnStatement.full(map(node.keyword), clone4(node.expression), map(node.semicolon));
+ ReturnStatement visitReturnStatement(ReturnStatement node) => new ReturnStatement(map(node.keyword), clone4(node.expression), map(node.semicolon));
- ScriptTag visitScriptTag(ScriptTag node) => new ScriptTag.full(map(node.scriptTag));
+ ScriptTag visitScriptTag(ScriptTag node) => new ScriptTag(map(node.scriptTag));
- ShowCombinator visitShowCombinator(ShowCombinator node) => new ShowCombinator.full(map(node.keyword), clone5(node.shownNames));
+ ShowCombinator visitShowCombinator(ShowCombinator node) => new ShowCombinator(map(node.keyword), clone5(node.shownNames));
- SimpleFormalParameter visitSimpleFormalParameter(SimpleFormalParameter node) => new SimpleFormalParameter.full(clone4(node.documentationComment), clone5(node.metadata), map(node.keyword), clone4(node.type), clone4(node.identifier));
+ SimpleFormalParameter visitSimpleFormalParameter(SimpleFormalParameter node) => new SimpleFormalParameter(clone4(node.documentationComment), clone5(node.metadata), map(node.keyword), clone4(node.type), clone4(node.identifier));
SimpleIdentifier visitSimpleIdentifier(SimpleIdentifier node) {
- SimpleIdentifier copy = new SimpleIdentifier.full(map(node.token));
+ Token mappedToken = map(node.token);
+ if (mappedToken == null) {
+ mappedToken = node.token;
+ }
+ SimpleIdentifier copy = new SimpleIdentifier(mappedToken);
copy.auxiliaryElements = node.auxiliaryElements;
copy.propagatedElement = node.propagatedElement;
copy.propagatedType = node.propagatedType;
@@ -16992,84 +15894,84 @@
}
SimpleStringLiteral visitSimpleStringLiteral(SimpleStringLiteral node) {
- SimpleStringLiteral copy = new SimpleStringLiteral.full(map(node.literal), node.value);
+ SimpleStringLiteral copy = new SimpleStringLiteral(map(node.literal), node.value);
copy.propagatedType = node.propagatedType;
copy.staticType = node.staticType;
return copy;
}
StringInterpolation visitStringInterpolation(StringInterpolation node) {
- StringInterpolation copy = new StringInterpolation.full(clone5(node.elements));
+ StringInterpolation copy = new StringInterpolation(clone5(node.elements));
copy.propagatedType = node.propagatedType;
copy.staticType = node.staticType;
return copy;
}
SuperConstructorInvocation visitSuperConstructorInvocation(SuperConstructorInvocation node) {
- SuperConstructorInvocation copy = new SuperConstructorInvocation.full(map(node.keyword), map(node.period), clone4(node.constructorName), clone4(node.argumentList));
+ SuperConstructorInvocation copy = new SuperConstructorInvocation(map(node.keyword), map(node.period), clone4(node.constructorName), clone4(node.argumentList));
copy.staticElement = node.staticElement;
return copy;
}
SuperExpression visitSuperExpression(SuperExpression node) {
- SuperExpression copy = new SuperExpression.full(map(node.keyword));
+ SuperExpression copy = new SuperExpression(map(node.keyword));
copy.propagatedType = node.propagatedType;
copy.staticType = node.staticType;
return copy;
}
- SwitchCase visitSwitchCase(SwitchCase node) => new SwitchCase.full(clone5(node.labels), map(node.keyword), clone4(node.expression), map(node.colon), clone5(node.statements));
+ SwitchCase visitSwitchCase(SwitchCase node) => new SwitchCase(clone5(node.labels), map(node.keyword), clone4(node.expression), map(node.colon), clone5(node.statements));
- SwitchDefault visitSwitchDefault(SwitchDefault node) => new SwitchDefault.full(clone5(node.labels), map(node.keyword), map(node.colon), clone5(node.statements));
+ SwitchDefault visitSwitchDefault(SwitchDefault node) => new SwitchDefault(clone5(node.labels), map(node.keyword), map(node.colon), clone5(node.statements));
- SwitchStatement visitSwitchStatement(SwitchStatement node) => new SwitchStatement.full(map(node.keyword), map(node.leftParenthesis), clone4(node.expression), map(node.rightParenthesis), map(node.leftBracket), clone5(node.members), map(node.rightBracket));
+ SwitchStatement visitSwitchStatement(SwitchStatement node) => new SwitchStatement(map(node.keyword), map(node.leftParenthesis), clone4(node.expression), map(node.rightParenthesis), map(node.leftBracket), clone5(node.members), map(node.rightBracket));
ASTNode visitSymbolLiteral(SymbolLiteral node) {
- SymbolLiteral copy = new SymbolLiteral.full(map(node.poundSign), map2(node.components));
+ SymbolLiteral copy = new SymbolLiteral(map(node.poundSign), map2(node.components));
copy.propagatedType = node.propagatedType;
copy.staticType = node.staticType;
return copy;
}
ThisExpression visitThisExpression(ThisExpression node) {
- ThisExpression copy = new ThisExpression.full(map(node.keyword));
+ ThisExpression copy = new ThisExpression(map(node.keyword));
copy.propagatedType = node.propagatedType;
copy.staticType = node.staticType;
return copy;
}
ThrowExpression visitThrowExpression(ThrowExpression node) {
- ThrowExpression copy = new ThrowExpression.full(map(node.keyword), clone4(node.expression));
+ ThrowExpression copy = new ThrowExpression(map(node.keyword), clone4(node.expression));
copy.propagatedType = node.propagatedType;
copy.staticType = node.staticType;
return copy;
}
- TopLevelVariableDeclaration visitTopLevelVariableDeclaration(TopLevelVariableDeclaration node) => new TopLevelVariableDeclaration.full(clone4(node.documentationComment), clone5(node.metadata), clone4(node.variables), map(node.semicolon));
+ TopLevelVariableDeclaration visitTopLevelVariableDeclaration(TopLevelVariableDeclaration node) => new TopLevelVariableDeclaration(clone4(node.documentationComment), clone5(node.metadata), clone4(node.variables), map(node.semicolon));
- TryStatement visitTryStatement(TryStatement node) => new TryStatement.full(map(node.tryKeyword), clone4(node.body), clone5(node.catchClauses), map(node.finallyKeyword), clone4(node.finallyBlock));
+ TryStatement visitTryStatement(TryStatement node) => new TryStatement(map(node.tryKeyword), clone4(node.body), clone5(node.catchClauses), map(node.finallyKeyword), clone4(node.finallyBlock));
- TypeArgumentList visitTypeArgumentList(TypeArgumentList node) => new TypeArgumentList.full(map(node.leftBracket), clone5(node.arguments), map(node.rightBracket));
+ TypeArgumentList visitTypeArgumentList(TypeArgumentList node) => new TypeArgumentList(map(node.leftBracket), clone5(node.arguments), map(node.rightBracket));
TypeName visitTypeName(TypeName node) {
- TypeName copy = new TypeName.full(clone4(node.name), clone4(node.typeArguments));
+ TypeName copy = new TypeName(clone4(node.name), clone4(node.typeArguments));
copy.type = node.type;
return copy;
}
- TypeParameter visitTypeParameter(TypeParameter node) => new TypeParameter.full(clone4(node.documentationComment), clone5(node.metadata), clone4(node.name), map(node.keyword), clone4(node.bound));
+ TypeParameter visitTypeParameter(TypeParameter node) => new TypeParameter(clone4(node.documentationComment), clone5(node.metadata), clone4(node.name), map(node.keyword), clone4(node.bound));
- TypeParameterList visitTypeParameterList(TypeParameterList node) => new TypeParameterList.full(map(node.leftBracket), clone5(node.typeParameters), map(node.rightBracket));
+ TypeParameterList visitTypeParameterList(TypeParameterList node) => new TypeParameterList(map(node.leftBracket), clone5(node.typeParameters), map(node.rightBracket));
- VariableDeclaration visitVariableDeclaration(VariableDeclaration node) => new VariableDeclaration.full(null, clone5(node.metadata), clone4(node.name), map(node.equals), clone4(node.initializer));
+ VariableDeclaration visitVariableDeclaration(VariableDeclaration node) => new VariableDeclaration(null, clone5(node.metadata), clone4(node.name), map(node.equals), clone4(node.initializer));
- VariableDeclarationList visitVariableDeclarationList(VariableDeclarationList node) => new VariableDeclarationList.full(null, clone5(node.metadata), map(node.keyword), clone4(node.type), clone5(node.variables));
+ VariableDeclarationList visitVariableDeclarationList(VariableDeclarationList node) => new VariableDeclarationList(null, clone5(node.metadata), map(node.keyword), clone4(node.type), clone5(node.variables));
- VariableDeclarationStatement visitVariableDeclarationStatement(VariableDeclarationStatement node) => new VariableDeclarationStatement.full(clone4(node.variables), map(node.semicolon));
+ VariableDeclarationStatement visitVariableDeclarationStatement(VariableDeclarationStatement node) => new VariableDeclarationStatement(clone4(node.variables), map(node.semicolon));
- WhileStatement visitWhileStatement(WhileStatement node) => new WhileStatement.full(map(node.keyword), map(node.leftParenthesis), clone4(node.condition), map(node.rightParenthesis), clone4(node.body));
+ WhileStatement visitWhileStatement(WhileStatement node) => new WhileStatement(map(node.keyword), map(node.leftParenthesis), clone4(node.condition), map(node.rightParenthesis), clone4(node.body));
- WithClause visitWithClause(WithClause node) => new WithClause.full(map(node.withKeyword), clone5(node.mixinTypes));
+ WithClause visitWithClause(WithClause node) => new WithClause(map(node.withKeyword), clone5(node.mixinTypes));
ASTNode clone4(ASTNode node) {
if (node == null) {
@@ -17116,11 +16018,11 @@
* @coverage com.google.dart.engine.services.completion
*/
class ScopedNameFinder extends GeneralizingASTVisitor<Object> {
- Declaration declaration;
+ Declaration _declarationNode;
ASTNode _immediateChild;
- final Map<String, SimpleIdentifier> locals = new Map<String, SimpleIdentifier>();
+ Map<String, SimpleIdentifier> _locals = new Map<String, SimpleIdentifier>();
int _position = 0;
@@ -17130,6 +16032,10 @@
this._position = position;
}
+ Declaration get declaration => _declarationNode;
+
+ Map<String, SimpleIdentifier> get locals => _locals;
+
Object visitBlock(Block node) {
checkStatements(node.statements);
return super.visitBlock(node);
@@ -17145,12 +16051,12 @@
if (_immediateChild != node.parameters) {
addParameters(node.parameters.parameters);
}
- declaration = node;
+ _declarationNode = node;
return null;
}
Object visitFieldDeclaration(FieldDeclaration node) {
- declaration = node;
+ _declarationNode = node;
return null;
}
@@ -17171,7 +16077,7 @@
Object visitFunctionDeclaration(FunctionDeclaration node) {
if (node.parent is! FunctionDeclarationStatement) {
- declaration = node;
+ _declarationNode = node;
return null;
}
return super.visitFunctionDeclaration(node);
@@ -17190,7 +16096,7 @@
}
Object visitMethodDeclaration(MethodDeclaration node) {
- declaration = node;
+ _declarationNode = node;
if (node.parameters == null) {
return null;
}
@@ -17215,12 +16121,12 @@
}
Object visitTopLevelVariableDeclaration(TopLevelVariableDeclaration node) {
- declaration = node;
+ _declarationNode = node;
return null;
}
Object visitTypeAlias(TypeAlias node) {
- declaration = node;
+ _declarationNode = node;
return null;
}
@@ -17233,8 +16139,8 @@
void addToScope(SimpleIdentifier identifier) {
if (identifier != null && isInRange(identifier)) {
String name = identifier.name;
- if (!locals.containsKey(name)) {
- locals[name] = identifier;
+ if (!_locals.containsKey(name)) {
+ _locals[name] = identifier;
}
}
}
@@ -17307,8 +16213,9 @@
* @param visitor the visitor to be used to visit the elements of this list
*/
accept(ASTVisitor visitor) {
- for (E element in _elements) {
- element.accept(visitor);
+ var length = _elements.length;
+ for (var i = 0; i < length; i++) {
+ _elements[i].accept(visitor);
}
}
void add(E node) {
@@ -17323,25 +16230,15 @@
if (length == 0) {
_elements = <E> [node];
} else {
- List<E> newElements = new List<E>(length + 1);
- JavaSystem.arraycopy(_elements, 0, newElements, 0, index);
- newElements[index] = node;
- JavaSystem.arraycopy(_elements, index, newElements, index + 1, length - index);
- _elements = newElements;
+ _elements.insert(index, node);
}
}
bool addAll(Iterable<E> nodes) {
if (nodes != null && !nodes.isEmpty) {
- int oldCount = _elements.length;
- int newCount = nodes.length;
- List<E> newElements = new List<E>(oldCount + newCount);
- JavaSystem.arraycopy(_elements, 0, newElements, 0, oldCount);
- int index = oldCount;
+ _elements.addAll(nodes);
for (E node in nodes) {
owner.becomeParentOf(node);
- newElements[index++] = node;
}
- _elements = newElements;
return true;
}
return false;
@@ -17386,17 +16283,13 @@
_elements = ASTNode.EMPTY_ARRAY;
return removedNode;
}
- List<E> newElements = new List<E>(length - 1);
- JavaSystem.arraycopy(_elements, 0, newElements, 0, index);
- JavaSystem.arraycopy(_elements, index + 1, newElements, index, length - index - 1);
- _elements = newElements;
+ _elements.removeAt(index);
return removedNode;
}
void operator[]=(int index, E node) {
if (index < 0 || index >= _elements.length) {
throw new RangeError("Index: ${index}, Size: ${_elements.length}");
}
- _elements[index] as E;
owner.becomeParentOf(node);
_elements[index] = node;
}
diff --git a/pkg/analyzer/lib/src/generated/constant.dart b/pkg/analyzer/lib/src/generated/constant.dart
index 965bcbd..8fe9e12 100644
--- a/pkg/analyzer/lib/src/generated/constant.dart
+++ b/pkg/analyzer/lib/src/generated/constant.dart
@@ -105,7 +105,7 @@
/**
* The value of the expression.
*/
- Object value;
+ final Object value;
/**
* The errors that should be reported for the expression(s) that were evaluated.
@@ -119,8 +119,7 @@
* @param value the value of the expression
* @param errors the errors that should be reported for the expression(s) that were evaluated
*/
- EvaluationResult(Object value, List<AnalysisError> errors) {
- this.value = value;
+ EvaluationResult(this.value, List<AnalysisError> errors) {
this._errors = errors;
}
@@ -739,7 +738,7 @@
/**
* The errors that prevent the expression from being a valid compile time constant.
*/
- final List<ErrorResult_ErrorData> errorData = new List<ErrorResult_ErrorData>();
+ List<ErrorResult_ErrorData> _errors = new List<ErrorResult_ErrorData>();
/**
* Initialize a newly created result representing the error with the given code reported against
@@ -749,7 +748,7 @@
* @param errorCode the error code for the error to be generated
*/
ErrorResult.con1(ASTNode node, ErrorCode errorCode) {
- errorData.add(new ErrorResult_ErrorData(node, errorCode));
+ _errors.add(new ErrorResult_ErrorData(node, errorCode));
}
/**
@@ -760,8 +759,8 @@
* @param secondResult the second set of results being merged
*/
ErrorResult.con2(ErrorResult firstResult, ErrorResult secondResult) {
- errorData.addAll(firstResult.errorData);
- errorData.addAll(secondResult.errorData);
+ _errors.addAll(firstResult._errors);
+ _errors.addAll(secondResult._errors);
}
EvaluationResultImpl add(BinaryExpression node, EvaluationResultImpl rightOperand) => rightOperand.addToError(node, this);
@@ -784,6 +783,8 @@
bool equalValues(EvaluationResultImpl result) => false;
+ List<ErrorResult_ErrorData> get errorData => _errors;
+
EvaluationResultImpl greaterThan(BinaryExpression node, EvaluationResultImpl rightOperand) => rightOperand.greaterThanError(node, this);
EvaluationResultImpl greaterThanOrEqual(BinaryExpression node, EvaluationResultImpl rightOperand) => rightOperand.greaterThanOrEqualError(node, this);
@@ -901,12 +902,12 @@
/**
* The node against which the error should be reported.
*/
- ASTNode node;
+ final ASTNode node;
/**
* The error code for the error to be generated.
*/
- ErrorCode errorCode;
+ final ErrorCode errorCode;
/**
* Initialize a newly created data holder to represent the error with the given code reported
@@ -915,10 +916,7 @@
* @param node the node against which the error should be reported
* @param errorCode the error code for the error to be generated
*/
- ErrorResult_ErrorData(ASTNode node, ErrorCode errorCode) {
- this.node = node;
- this.errorCode = errorCode;
- }
+ ErrorResult_ErrorData(this.node, this.errorCode);
}
/**
@@ -1174,16 +1172,14 @@
/**
* The value of the expression.
*/
- Object value;
+ final Object value;
/**
* Initialize a newly created result to represent the given value.
*
* @param value the value of the expression
*/
- ValidResult(Object value) {
- this.value = value;
- }
+ ValidResult(this.value);
EvaluationResultImpl add(BinaryExpression node, EvaluationResultImpl rightOperand) => rightOperand.addToValid(node, this);
diff --git a/pkg/analyzer/lib/src/generated/element.dart b/pkg/analyzer/lib/src/generated/element.dart
index c024cc0..147a861 100644
--- a/pkg/analyzer/lib/src/generated/element.dart
+++ b/pkg/analyzer/lib/src/generated/element.dart
@@ -713,16 +713,14 @@
/**
* The name displayed in the UI for this kind of element.
*/
- String displayName;
+ final String displayName;
/**
* Initialize a newly created element kind to have the given display name.
*
* @param displayName the name displayed in the UI for this kind of element
*/
- ElementKind(String name, int ordinal, String displayName) : super(name, ordinal) {
- this.displayName = displayName;
- }
+ ElementKind(String name, int ordinal, this.displayName) : super(name, ordinal);
}
/**
@@ -1926,13 +1924,13 @@
* The element based on propagated type information, or `null` if the AST structure has not
* been resolved or if this identifier could not be resolved.
*/
- ExecutableElement propagatedElement;
+ final ExecutableElement propagatedElement;
/**
* The element associated with this identifier based on static type information, or `null`
* if the AST structure has not been resolved or if this identifier could not be resolved.
*/
- ExecutableElement staticElement;
+ final ExecutableElement staticElement;
/**
* Create the [AuxiliaryElements] with a static and propagated [ExecutableElement].
@@ -1940,10 +1938,7 @@
* @param staticElement the static element
* @param propagatedElement the propagated element
*/
- AuxiliaryElements(ExecutableElement staticElement, ExecutableElement propagatedElement) {
- this.staticElement = staticElement;
- this.propagatedElement = propagatedElement;
- }
+ AuxiliaryElements(this.staticElement, this.propagatedElement);
}
/**
@@ -1971,12 +1966,12 @@
* An array containing all of the mixins that are applied to the class being extended in order to
* derive the superclass of this class.
*/
- List<InterfaceType> _mixins = InterfaceTypeImpl.EMPTY_ARRAY;
+ List<InterfaceType> mixins = InterfaceTypeImpl.EMPTY_ARRAY;
/**
* An array containing all of the interfaces that are implemented by this class.
*/
- List<InterfaceType> _interfaces = InterfaceTypeImpl.EMPTY_ARRAY;
+ List<InterfaceType> interfaces = InterfaceTypeImpl.EMPTY_ARRAY;
/**
* An array containing all of the methods contained in this class.
@@ -1986,12 +1981,12 @@
/**
* The superclass of the class, or `null` if the class does not have an explicit superclass.
*/
- InterfaceType _supertype;
+ InterfaceType supertype;
/**
* The type defined by the class.
*/
- InterfaceType _type;
+ InterfaceType type;
/**
* An array containing all of the type parameters defined for this class.
@@ -2078,8 +2073,6 @@
return null;
}
- List<InterfaceType> get interfaces => _interfaces;
-
ElementKind get kind => ElementKind.CLASS;
MethodElement getMethod(String methodName) {
@@ -2093,8 +2086,6 @@
List<MethodElement> get methods => _methods;
- List<InterfaceType> get mixins => _mixins;
-
ConstructorElement getNamedConstructor(String name) {
for (ConstructorElement element in constructors) {
String elementName = element.name;
@@ -2117,10 +2108,6 @@
return null;
}
- InterfaceType get supertype => _supertype;
-
- InterfaceType get type => _type;
-
List<TypeParameterElement> get typeParameters => _typeParameters;
ConstructorElement get unnamedConstructor {
@@ -2314,15 +2301,6 @@
}
/**
- * Set the interfaces that are implemented by this class to the given types.
- *
- * @param the interfaces that are implemented by this class
- */
- void set interfaces(List<InterfaceType> interfaces) {
- this._interfaces = interfaces;
- }
-
- /**
* Set the methods contained in this class to the given methods.
*
* @param methods the methods contained in this class
@@ -2335,34 +2313,6 @@
}
/**
- * Set the mixins that are applied to the class being extended in order to derive the superclass
- * of this class to the given types.
- *
- * @param mixins the mixins that are applied to derive the superclass of this class
- */
- void set mixins(List<InterfaceType> mixins) {
- this._mixins = mixins;
- }
-
- /**
- * Set the superclass of the class to the given type.
- *
- * @param supertype the superclass of the class
- */
- void set supertype(InterfaceType supertype) {
- this._supertype = supertype;
- }
-
- /**
- * Set the type defined by the class to the given type.
- *
- * @param type the type defined by the class
- */
- void set type(InterfaceType type) {
- this._type = type;
- }
-
- /**
* Set whether this class is defined by a typedef construct to correspond to the given value.
*
* @param isTypedef `true` if the class is defined by a typedef construct
@@ -2482,7 +2432,7 @@
/**
* The source that corresponds to this compilation unit.
*/
- Source _source;
+ Source source;
/**
* An array containing all of the function type aliases contained in this compilation unit.
@@ -2498,7 +2448,7 @@
* The URI that is specified by the "part" directive in the enclosing library, or `null` if
* this is the defining compilation unit of a library.
*/
- String _uri;
+ String uri;
/**
* Initialize a newly created compilation unit element to have the given name.
@@ -2509,7 +2459,7 @@
accept(ElementVisitor visitor) => visitor.visitCompilationUnitElement(this);
- bool operator ==(Object object) => object != null && runtimeType == object.runtimeType && _source == (object as CompilationUnitElementImpl).source;
+ bool operator ==(Object object) => object != null && runtimeType == object.runtimeType && source == (object as CompilationUnitElementImpl).source;
List<PropertyAccessorElement> get accessors => _accessors;
@@ -2550,8 +2500,6 @@
ElementKind get kind => ElementKind.COMPILATION_UNIT;
- Source get source => _source;
-
List<TopLevelVariableElement> get topLevelVariables => _variables;
ClassElement getType(String className) {
@@ -2565,9 +2513,7 @@
List<ClassElement> get types => _types;
- String get uri => _uri;
-
- int get hashCode => _source.hashCode;
+ int get hashCode => source.hashCode;
/**
* Set the top-level accessors (getters and setters) contained in this compilation unit to the
@@ -2595,15 +2541,6 @@
}
/**
- * Set the source that corresponds to this compilation unit to the given source.
- *
- * @param source the source that corresponds to this compilation unit
- */
- void set source(Source source) {
- this._source = source;
- }
-
- /**
* Set the top-level variables contained in this compilation unit to the given variables.
*
* @param variables the top-level variables contained in this compilation unit
@@ -2639,15 +2576,6 @@
this._types = types;
}
- /**
- * Set the URI that is specified by the "part" directive in the enclosing library.
- *
- * @param uri the URI that is specified by the "part" directive in the enclosing library.
- */
- void set uri(String uri) {
- this._uri = uri;
- }
-
void visitChildren(ElementVisitor visitor) {
super.visitChildren(visitor);
safelyVisitChildren(_accessors, visitor);
@@ -2658,10 +2586,10 @@
}
void appendTo(JavaStringBuilder builder) {
- if (_source == null) {
+ if (source == null) {
builder.append("{compilation unit}");
} else {
- builder.append(_source.fullName);
+ builder.append(source.fullName);
}
}
@@ -2756,7 +2684,7 @@
/**
* The constructor to which this constructor is redirecting.
*/
- ConstructorElement _redirectedConstructor;
+ ConstructorElement redirectedConstructor;
/**
* Initialize a newly created constructor element to have the given name.
@@ -2771,8 +2699,6 @@
ElementKind get kind => ElementKind.CONSTRUCTOR;
- ConstructorElement get redirectedConstructor => _redirectedConstructor;
-
bool get isConst => hasModifier(Modifier.CONST);
bool get isDefaultConstructor {
@@ -2810,15 +2736,6 @@
setModifier(Modifier.FACTORY, isFactory);
}
- /**
- * Sets the constructor to which this constructor is redirecting.
- *
- * @param redirectedConstructor the constructor to which this constructor is redirecting
- */
- void set redirectedConstructor(ConstructorElement redirectedConstructor) {
- this._redirectedConstructor = redirectedConstructor;
- }
-
void appendTo(JavaStringBuilder builder) {
builder.append(enclosingElement.displayName);
String name = displayName;
@@ -2924,7 +2841,7 @@
/**
* The element representing the field, variable, or constructor being used as an annotation.
*/
- Element _element;
+ final Element element;
/**
* An empty array of annotations.
@@ -2958,22 +2875,18 @@
* @param element the element representing the field, variable, or constructor being used as an
* annotation
*/
- ElementAnnotationImpl(Element element) {
- this._element = element;
- }
-
- Element get element => _element;
+ ElementAnnotationImpl(this.element);
bool get isDeprecated {
- if (_element != null) {
- LibraryElement library = _element.library;
+ if (element != null) {
+ LibraryElement library = element.library;
if (library != null && library.isDartCore) {
- if (_element is ConstructorElement) {
- ConstructorElement constructorElement = _element as ConstructorElement;
+ if (element is ConstructorElement) {
+ ConstructorElement constructorElement = element as ConstructorElement;
if (constructorElement.enclosingElement.name == _DEPRECATED_CLASS_NAME) {
return true;
}
- } else if (_element is PropertyAccessorElement && _element.name == _DEPRECATED_VARIABLE_NAME) {
+ } else if (element is PropertyAccessorElement && element.name == _DEPRECATED_VARIABLE_NAME) {
return true;
}
}
@@ -2982,10 +2895,10 @@
}
bool get isOverride {
- if (_element != null) {
- LibraryElement library = _element.library;
+ if (element != null) {
+ LibraryElement library = element.library;
if (library != null && library.isDartCore) {
- if (_element is PropertyAccessorElement && _element.name == _OVERRIDE_VARIABLE_NAME) {
+ if (element is PropertyAccessorElement && element.name == _OVERRIDE_VARIABLE_NAME) {
return true;
}
}
@@ -2994,10 +2907,10 @@
}
bool get isProxy {
- if (_element != null) {
- LibraryElement library = _element.library;
+ if (element != null) {
+ LibraryElement library = element.library;
if (library != null && library.isDartCore) {
- if (_element is PropertyAccessorElement && _element.name == _PROXY_VARIABLE_NAME) {
+ if (element is PropertyAccessorElement && element.name == _PROXY_VARIABLE_NAME) {
return true;
}
}
@@ -3005,7 +2918,7 @@
return false;
}
- String toString() => "@${_element.toString()}";
+ String toString() => "@${element.toString()}";
}
/**
@@ -3030,7 +2943,7 @@
* The offset of the name of this element in the file that contains the declaration of this
* element.
*/
- int _nameOffset = 0;
+ int nameOffset = 0;
/**
* A bit-encoded form of the modifiers associated with this element.
@@ -3040,7 +2953,7 @@
/**
* An array containing all of the metadata associated with this element.
*/
- List<ElementAnnotation> _metadata = ElementAnnotationImpl.EMPTY_ARRAY;
+ List<ElementAnnotation> metadata = ElementAnnotationImpl.EMPTY_ARRAY;
/**
* A cached copy of the calculated hashCode for this element.
@@ -3061,9 +2974,8 @@
* @param nameOffset the offset of the name of this element in the file that contains the
* declaration of this element
*/
- ElementImpl.con2(String name, int nameOffset) {
+ ElementImpl.con2(String name, this.nameOffset) {
this._name = StringUtilities.intern(name);
- this._nameOffset = nameOffset;
}
String computeDocumentationComment() {
@@ -3116,12 +3028,8 @@
ElementLocation get location => new ElementLocationImpl.con1(this);
- List<ElementAnnotation> get metadata => _metadata;
-
String get name => _name;
- int get nameOffset => _nameOffset;
-
Source get source {
if (_enclosingElement == null) {
return null;
@@ -3144,7 +3052,7 @@
}
bool get isDeprecated {
- for (ElementAnnotation annotation in _metadata) {
+ for (ElementAnnotation annotation in metadata) {
if (annotation.isDeprecated) {
return true;
}
@@ -3155,26 +3063,6 @@
bool get isSynthetic => hasModifier(Modifier.SYNTHETIC);
/**
- * Set the metadata associate with this element to the given array of annotations.
- *
- * @param metadata the metadata to be associated with this element
- */
- void set metadata(List<ElementAnnotation> metadata) {
- this._metadata = metadata;
- }
-
- /**
- * Set the offset of the name of this element in the file that contains the declaration of this
- * element to the given value. This is normally done via the constructor, but this method is
- * provided to support unnamed constructors.
- *
- * @param nameOffset the offset to the beginning of the name
- */
- void set nameOffset(int nameOffset) {
- this._nameOffset = nameOffset;
- }
-
- /**
* Set whether this element is synthetic to correspond to the given value.
*
* @param isSynthetic `true` if the element is synthetic
@@ -3279,7 +3167,7 @@
/**
* The path to the element whose location is represented by this object.
*/
- List<String> components;
+ List<String> _components;
/**
* The character used to separate components in the encoded form.
@@ -3298,7 +3186,7 @@
components.insert(0, (ancestor as ElementImpl).identifier);
ancestor = ancestor.enclosingElement;
}
- this.components = new List.from(components);
+ this._components = new List.from(components);
}
/**
@@ -3307,7 +3195,7 @@
* @param encoding the encoded form of a location
*/
ElementLocationImpl.con2(String encoding) {
- this.components = decode(encoding);
+ this._components = decode(encoding);
}
bool operator ==(Object object) {
@@ -3318,41 +3206,48 @@
return false;
}
ElementLocationImpl location = object as ElementLocationImpl;
- List<String> otherComponents = location.components;
- int length = components.length;
+ List<String> otherComponents = location._components;
+ int length = _components.length;
if (otherComponents.length != length) {
return false;
}
for (int i = length - 1; i >= 2; i--) {
- if (components[i] != otherComponents[i]) {
+ if (_components[i] != otherComponents[i]) {
return false;
}
}
- if (length > 1 && !equalSourceComponents(components[1], otherComponents[1])) {
+ if (length > 1 && !equalSourceComponents(_components[1], otherComponents[1])) {
return false;
}
- if (length > 0 && !equalSourceComponents(components[0], otherComponents[0])) {
+ if (length > 0 && !equalSourceComponents(_components[0], otherComponents[0])) {
return false;
}
return true;
}
+ /**
+ * Return the path to the element whose location is represented by this object.
+ *
+ * @return the path to the element whose location is represented by this object
+ */
+ List<String> get components => _components;
+
String get encoding {
JavaStringBuilder builder = new JavaStringBuilder();
- int length = components.length;
+ int length = _components.length;
for (int i = 0; i < length; i++) {
if (i > 0) {
builder.appendChar(_SEPARATOR_CHAR);
}
- encode(builder, components[i]);
+ encode(builder, _components[i]);
}
return builder.toString();
}
int get hashCode {
int result = 1;
- for (int i = 0; i < components.length; i++) {
- String component = components[i];
+ for (int i = 0; i < _components.length; i++) {
+ String component = _components[i];
int componentHash;
if (i <= 1) {
componentHash = hashSourceComponent(component);
@@ -3524,12 +3419,12 @@
/**
* The return type defined by this executable element.
*/
- Type2 _returnType;
+ Type2 returnType;
/**
* The type of function defined by this executable element.
*/
- FunctionType _type;
+ FunctionType type;
/**
* An empty array of executable elements.
@@ -3584,10 +3479,6 @@
List<ParameterElement> get parameters => _parameters;
- Type2 get returnType => _returnType;
-
- FunctionType get type => _type;
-
bool get isOperator => false;
/**
@@ -3638,24 +3529,6 @@
this._parameters = parameters;
}
- /**
- * Set the return type defined by this executable element.
- *
- * @param returnType the return type defined by this executable element
- */
- void set returnType(Type2 returnType) {
- this._returnType = returnType;
- }
-
- /**
- * Set the type of function defined by this executable element to the given type.
- *
- * @param type the type of function defined by this executable element
- */
- void set type(FunctionType type) {
- this._type = type;
- }
-
void visitChildren(ElementVisitor visitor) {
super.visitChildren(visitor);
safelyVisitChildren(_functions, visitor);
@@ -3674,9 +3547,9 @@
(_parameters[i] as ParameterElementImpl).appendTo(builder);
}
builder.append(")");
- if (_type != null) {
+ if (type != null) {
builder.append(Element.RIGHT_ARROW);
- builder.append(_type.returnType);
+ builder.append(type.returnType);
}
}
}
@@ -3690,18 +3563,18 @@
/**
* The URI that is specified by this directive.
*/
- String _uri;
+ String uri;
/**
* The library that is exported from this library by this export directive.
*/
- LibraryElement _exportedLibrary;
+ LibraryElement exportedLibrary;
/**
* The combinators that were specified as part of the export directive in the order in which they
* were specified.
*/
- List<NamespaceCombinator> _combinators = NamespaceCombinator.EMPTY_ARRAY;
+ List<NamespaceCombinator> combinators = NamespaceCombinator.EMPTY_ARRAY;
/**
* Initialize a newly created export element.
@@ -3710,49 +3583,14 @@
accept(ElementVisitor visitor) => visitor.visitExportElement(this);
- List<NamespaceCombinator> get combinators => _combinators;
-
- LibraryElement get exportedLibrary => _exportedLibrary;
-
ElementKind get kind => ElementKind.EXPORT;
- String get uri => _uri;
-
- /**
- * Set the combinators that were specified as part of the export directive to the given array of
- * combinators.
- *
- * @param combinators the combinators that were specified as part of the export directive
- */
- void set combinators(List<NamespaceCombinator> combinators) {
- this._combinators = combinators;
- }
-
- /**
- * Set the library that is exported from this library by this import directive to the given
- * library.
- *
- * @param exportedLibrary the library that is exported from this library
- */
- void set exportedLibrary(LibraryElement exportedLibrary) {
- this._exportedLibrary = exportedLibrary;
- }
-
- /**
- * Set the URI that is specified by this directive.
- *
- * @param uri the URI that is specified by this directive.
- */
- void set uri(String uri) {
- this._uri = uri;
- }
-
void appendTo(JavaStringBuilder builder) {
builder.append("export ");
- (_exportedLibrary as LibraryElementImpl).appendTo(builder);
+ (exportedLibrary as LibraryElementImpl).appendTo(builder);
}
- String get identifier => _exportedLibrary.name;
+ String get identifier => exportedLibrary.name;
}
/**
@@ -3765,7 +3603,7 @@
/**
* The source specified in the `source` attribute or `null` if unspecified.
*/
- Source _scriptSource;
+ Source scriptSource;
/**
* Initialize a newly created script element to have the specified tag name and offset.
@@ -3777,17 +3615,6 @@
accept(ElementVisitor visitor) => visitor.visitExternalHtmlScriptElement(this);
ElementKind get kind => ElementKind.EXTERNAL_HTML_SCRIPT;
-
- Source get scriptSource => _scriptSource;
-
- /**
- * Set the source specified in the `source` attribute.
- *
- * @param scriptSource the script source or `null` if unspecified
- */
- void set scriptSource(Source scriptSource) {
- this._scriptSource = scriptSource;
- }
}
/**
@@ -3844,7 +3671,7 @@
/**
* The field associated with this field formal parameter.
*/
- FieldElement _field;
+ FieldElement field;
/**
* Initialize a newly created parameter element to have the given name.
@@ -3855,18 +3682,7 @@
accept(ElementVisitor visitor) => visitor.visitFieldFormalParameterElement(this);
- FieldElement get field => _field;
-
bool get isInitializingFormal => true;
-
- /**
- * Set the field element associated with this field formal parameter to the given element.
- *
- * @param field the new field element
- */
- void set field(FieldElement field) {
- this._field = field;
- }
}
/**
@@ -3892,13 +3708,6 @@
static List<FunctionElement> EMPTY_ARRAY = new List<FunctionElement>(0);
/**
- * Initialize a newly created synthetic function element.
- */
- FunctionElementImpl() : super.con2("", -1) {
- synthetic = true;
- }
-
- /**
* Initialize a newly created function element to have the given name.
*
* @param name the name of this element
@@ -3916,45 +3725,6 @@
accept(ElementVisitor visitor) => visitor.visitFunctionElement(this);
- /**
- * Treating the set of arrays defined in [ExecutableElementImpl] as one long array, this
- * returns the index position of the passed child in this [FunctionElement]. This gives a
- * unique integer for each element, this is provided primarily for function elements that do not
- * have a name (closures), which cannot use [Element#getNameOffset]. If there is no such
- * element, `-1` is returned.
- *
- * @param element the element to find and return an integer for, if there is no such element,
- * `-1` is returned
- */
- int getIndexPosition(Element element) {
- List<FunctionElement> functions = this.functions;
- List<LabelElement> labels = this.labels;
- List<LocalVariableElement> localVariables = this.localVariables;
- List<ParameterElement> parameters = this.parameters;
- int count = 0;
- for (int i = 0; i < functions.length; i++, count++) {
- if (identical(element, functions[i])) {
- return count;
- }
- }
- for (int i = 0; i < labels.length; i++, count++) {
- if (identical(element, labels[i])) {
- return count;
- }
- }
- for (int i = 0; i < localVariables.length; i++, count++) {
- if (identical(element, localVariables[i])) {
- return count;
- }
- }
- for (int i = 0; i < parameters.length; i++, count++) {
- if (identical(element, parameters[i])) {
- return count;
- }
- }
- return -1;
- }
-
ElementKind get kind => ElementKind.FUNCTION;
SourceRange get visibleRange {
@@ -4005,12 +3775,12 @@
/**
* The return type defined by this type alias.
*/
- Type2 _returnType;
+ Type2 returnType;
/**
* The type of function defined by this type alias.
*/
- FunctionType _type;
+ FunctionType type;
/**
* An array containing all of the type parameters defined for this type.
@@ -4051,10 +3821,6 @@
List<ParameterElement> get parameters => _parameters;
- Type2 get returnType => _returnType;
-
- FunctionType get type => _type;
-
List<TypeParameterElement> get typeParameters => _typeParameters;
/**
@@ -4072,24 +3838,6 @@
}
/**
- * Set the return type defined by this type alias.
- *
- * @param returnType the return type defined by this type alias
- */
- void set returnType(Type2 returnType) {
- this._returnType = returnType;
- }
-
- /**
- * Set the type of function defined by this type alias to the given type.
- *
- * @param type the type of function defined by this type alias
- */
- void set type(FunctionType type) {
- this._type = type;
- }
-
- /**
* Set the type parameters defined for this type to the given parameters.
*
* @param typeParameters the type parameters defined for this type
@@ -4152,9 +3900,9 @@
(_parameters[i] as ParameterElementImpl).appendTo(builder);
}
builder.append(")");
- if (_type != null) {
+ if (type != null) {
builder.append(Element.RIGHT_ARROW);
- builder.append(_type.returnType);
+ builder.append(type.returnType);
}
}
}
@@ -4170,29 +3918,17 @@
* The names that are not to be made visible in the importing library even if they are defined in
* the imported library.
*/
- List<String> _hiddenNames = StringUtilities.EMPTY_ARRAY;
-
- List<String> get hiddenNames => _hiddenNames;
-
- /**
- * Set the names that are not to be made visible in the importing library even if they are defined
- * in the imported library to the given names.
- *
- * @param hiddenNames the names that are not to be made visible in the importing library
- */
- void set hiddenNames(List<String> hiddenNames) {
- this._hiddenNames = hiddenNames;
- }
+ List<String> hiddenNames = StringUtilities.EMPTY_ARRAY;
String toString() {
JavaStringBuilder builder = new JavaStringBuilder();
builder.append("show ");
- int count = _hiddenNames.length;
+ int count = hiddenNames.length;
for (int i = 0; i < count; i++) {
if (i > 0) {
builder.append(", ");
}
- builder.append(_hiddenNames[i]);
+ builder.append(hiddenNames[i]);
}
return builder.toString();
}
@@ -4212,7 +3948,7 @@
/**
* The analysis context in which this library is defined.
*/
- AnalysisContext _context;
+ final AnalysisContext context;
/**
* The scripts contained in or referenced from script tags in the HTML file.
@@ -4222,7 +3958,7 @@
/**
* The source that corresponds to this HTML file.
*/
- Source _source;
+ Source source;
/**
* Initialize a newly created HTML element to have the given name.
@@ -4230,23 +3966,17 @@
* @param context the analysis context in which the HTML file is defined
* @param name the name of this element
*/
- HtmlElementImpl(AnalysisContext context, String name) : super.con2(name, -1) {
- this._context = context;
- }
+ HtmlElementImpl(this.context, String name) : super.con2(name, -1);
accept(ElementVisitor visitor) => visitor.visitHtmlElement(this);
- bool operator ==(Object object) => runtimeType == object.runtimeType && _source == (object as CompilationUnitElementImpl).source;
-
- AnalysisContext get context => _context;
+ bool operator ==(Object object) => runtimeType == object.runtimeType && source == (object as CompilationUnitElementImpl).source;
ElementKind get kind => ElementKind.HTML;
List<HtmlScriptElement> get scripts => _scripts;
- Source get source => _source;
-
- int get hashCode => _source.hashCode;
+ int get hashCode => source.hashCode;
/**
* Set the scripts contained in the HTML file to the given scripts.
@@ -4263,25 +3993,16 @@
this._scripts = scripts;
}
- /**
- * Set the source that corresponds to this HTML file to the given source.
- *
- * @param source the source that corresponds to this HTML file
- */
- void set source(Source source) {
- this._source = source;
- }
-
void visitChildren(ElementVisitor visitor) {
super.visitChildren(visitor);
safelyVisitChildren(_scripts, visitor);
}
void appendTo(JavaStringBuilder builder) {
- if (_source == null) {
+ if (source == null) {
builder.append("{HTML file}");
} else {
- builder.append(_source.fullName);
+ builder.append(source.fullName);
}
}
}
@@ -4320,35 +4041,35 @@
* The offset of the character immediately following the last character of this node's URI, may be
* `-1` if synthetic.
*/
- int _uriEnd = -1;
+ int uriEnd = -1;
/**
* The offset of the prefix of this import in the file that contains the this import directive, or
* `-1` if this import is synthetic.
*/
- int _prefixOffset = 0;
+ int prefixOffset = 0;
/**
* The URI that is specified by this directive.
*/
- String _uri;
+ String uri;
/**
* The library that is imported into this library by this import directive.
*/
- LibraryElement _importedLibrary;
+ LibraryElement importedLibrary;
/**
* The combinators that were specified as part of the import directive in the order in which they
* were specified.
*/
- List<NamespaceCombinator> _combinators = NamespaceCombinator.EMPTY_ARRAY;
+ List<NamespaceCombinator> combinators = NamespaceCombinator.EMPTY_ARRAY;
/**
* The prefix that was specified as part of the import directive, or `null` if there was no
* prefix specified.
*/
- PrefixElement _prefix;
+ PrefixElement prefix;
/**
* Initialize a newly created import element.
@@ -4357,40 +4078,8 @@
accept(ElementVisitor visitor) => visitor.visitImportElement(this);
- List<NamespaceCombinator> get combinators => _combinators;
-
- LibraryElement get importedLibrary => _importedLibrary;
-
ElementKind get kind => ElementKind.IMPORT;
- PrefixElement get prefix => _prefix;
-
- int get prefixOffset => _prefixOffset;
-
- String get uri => _uri;
-
- int get uriEnd => _uriEnd;
-
- /**
- * Set the combinators that were specified as part of the import directive to the given array of
- * combinators.
- *
- * @param combinators the combinators that were specified as part of the import directive
- */
- void set combinators(List<NamespaceCombinator> combinators) {
- this._combinators = combinators;
- }
-
- /**
- * Set the library that is imported into this library by this import directive to the given
- * library.
- *
- * @param importedLibrary the library that is imported into this library
- */
- void set importedLibrary(LibraryElement importedLibrary) {
- this._importedLibrary = importedLibrary;
- }
-
/**
* Set the offset of this directive.
*/
@@ -4398,51 +4087,17 @@
this._offset = offset;
}
- /**
- * Set the prefix that was specified as part of the import directive to the given prefix.
- *
- * @param prefix the prefix that was specified as part of the import directive
- */
- void set prefix(PrefixElement prefix) {
- this._prefix = prefix;
- }
-
- /**
- * Set the offset of the prefix of this import in the file that contains the this import
- * directive.
- */
- void set prefixOffset(int prefixOffset) {
- this._prefixOffset = prefixOffset;
- }
-
- /**
- * Set the URI that is specified by this directive.
- *
- * @param uri the URI that is specified by this directive.
- */
- void set uri(String uri) {
- this._uri = uri;
- }
-
- /**
- * Set the the offset of the character immediately following the last character of this node's
- * URI. `-1` for synthetic import.
- */
- void set uriEnd(int uriEnd) {
- this._uriEnd = uriEnd;
- }
-
void visitChildren(ElementVisitor visitor) {
super.visitChildren(visitor);
- safelyVisitChild(_prefix, visitor);
+ safelyVisitChild(prefix, visitor);
}
void appendTo(JavaStringBuilder builder) {
builder.append("import ");
- (_importedLibrary as LibraryElementImpl).appendTo(builder);
+ (importedLibrary as LibraryElementImpl).appendTo(builder);
}
- String get identifier => "${(_importedLibrary as LibraryElementImpl).identifier}@${_offset}";
+ String get identifier => "${(importedLibrary as LibraryElementImpl).identifier}@${_offset}";
}
/**
@@ -4454,13 +4109,13 @@
/**
* A flag indicating whether this label is associated with a `switch` statement.
*/
- bool isOnSwitchStatement = false;
+ bool _onSwitchStatement = false;
/**
* A flag indicating whether this label is associated with a `switch` member (`case`
* or `default`).
*/
- bool isOnSwitchMember = false;
+ bool _onSwitchMember = false;
/**
* An empty array of label elements.
@@ -4476,8 +4131,8 @@
* @param onSwitchMember `true` if this label is associated with a `switch` member
*/
LabelElementImpl(Identifier name, bool onSwitchStatement, bool onSwitchMember) : super.con1(name) {
- this.isOnSwitchStatement = onSwitchStatement;
- this.isOnSwitchMember = onSwitchMember;
+ this._onSwitchStatement = onSwitchStatement;
+ this._onSwitchMember = onSwitchMember;
}
accept(ElementVisitor visitor) => visitor.visitLabelElement(this);
@@ -4485,6 +4140,21 @@
ExecutableElement get enclosingElement => super.enclosingElement as ExecutableElement;
ElementKind get kind => ElementKind.LABEL;
+
+ /**
+ * Return `true` if this label is associated with a `switch` member (`case` or
+ * `default`).
+ *
+ * @return `true` if this label is associated with a `switch` member
+ */
+ bool get isOnSwitchMember => _onSwitchMember;
+
+ /**
+ * Return `true` if this label is associated with a `switch` statement.
+ *
+ * @return `true` if this label is associated with a `switch` statement
+ */
+ bool get isOnSwitchStatement => _onSwitchStatement;
}
/**
@@ -4533,7 +4203,7 @@
/**
* The analysis context in which this library is defined.
*/
- AnalysisContext _context;
+ final AnalysisContext context;
/**
* The compilation unit that defines this library.
@@ -4543,7 +4213,7 @@
/**
* The entry point for this library, or `null` if this library does not have an entry point.
*/
- FunctionElement _entryPoint;
+ FunctionElement entryPoint;
/**
* An array containing specifications of all of the imports defined in this library.
@@ -4567,9 +4237,7 @@
* @param context the analysis context in which the library is defined
* @param name the name of this element
*/
- LibraryElementImpl(AnalysisContext context, LibraryIdentifier name) : super.con1(name) {
- this._context = context;
- }
+ LibraryElementImpl(this.context, LibraryIdentifier name) : super.con1(name);
accept(ElementVisitor visitor) => visitor.visitLibraryElement(this);
@@ -4597,12 +4265,8 @@
return null;
}
- AnalysisContext get context => _context;
-
CompilationUnitElement get definingCompilationUnit => _definingCompilationUnit;
- FunctionElement get entryPoint => _entryPoint;
-
List<LibraryElement> get exportedLibraries {
Set<LibraryElement> libraries = new Set<LibraryElement>();
for (ExportElement element in _exports) {
@@ -4669,7 +4333,7 @@
int get hashCode => _definingCompilationUnit.hashCode;
- bool get isBrowserApplication => _entryPoint != null && isOrImportsBrowserLibrary;
+ bool get isBrowserApplication => entryPoint != null && isOrImportsBrowserLibrary;
bool get isDartCore => name == "dart.core";
@@ -4691,15 +4355,6 @@
}
/**
- * Set the entry point for this library to the given function.
- *
- * @param entryPoint the entry point for this library
- */
- void set entryPoint(FunctionElement entryPoint) {
- this._entryPoint = entryPoint;
- }
-
- /**
* Set the specifications of all of the exports defined in this library to the given array.
*
* @param exports the specifications of all of the exports defined in this library
@@ -4757,7 +4412,7 @@
*/
bool get isOrImportsBrowserLibrary {
List<LibraryElement> visited = new List<LibraryElement>();
- Source htmlLibSource = _context.sourceFactory.forUri(DartSdk.DART_HTML);
+ Source htmlLibSource = context.sourceFactory.forUri(DartSdk.DART_HTML);
visited.add(this);
for (int index = 0; index < visited.length; index++) {
LibraryElement library = visited[index];
@@ -5031,7 +4686,7 @@
*/
static void add(Set<Element> elements, Element element) {
if (element is MultiplyDefinedElementImpl) {
- for (Element conflictingElement in (element as MultiplyDefinedElementImpl)._conflictingElements) {
+ for (Element conflictingElement in (element as MultiplyDefinedElementImpl).conflictingElements) {
elements.add(conflictingElement);
}
} else {
@@ -5058,7 +4713,7 @@
/**
* The analysis context in which the multiply defined elements are defined.
*/
- AnalysisContext _context;
+ final AnalysisContext context;
/**
* The name of the conflicting elements.
@@ -5068,7 +4723,7 @@
/**
* A list containing all of the elements that conflict.
*/
- List<Element> _conflictingElements;
+ final List<Element> conflictingElements;
/**
* Initialize a newly created element to represent a list of conflicting elements.
@@ -5076,10 +4731,8 @@
* @param context the analysis context in which the multiply defined elements are defined
* @param conflictingElements the elements that conflict
*/
- MultiplyDefinedElementImpl(AnalysisContext context, List<Element> conflictingElements) {
- this._context = context;
+ MultiplyDefinedElementImpl(this.context, this.conflictingElements) {
_name = conflictingElements[0].name;
- this._conflictingElements = conflictingElements;
}
accept(ElementVisitor visitor) => visitor.visitMultiplyDefinedElement(this);
@@ -5088,10 +4741,6 @@
Element getAncestor(Type elementClass) => null;
- List<Element> get conflictingElements => _conflictingElements;
-
- AnalysisContext get context => _context;
-
String get displayName => _name;
Element get enclosingElement => null;
@@ -5113,7 +4762,7 @@
Type2 get type => DynamicTypeImpl.instance;
bool isAccessibleIn(LibraryElement library) {
- for (Element element in _conflictingElements) {
+ for (Element element in conflictingElements) {
if (element.isAccessibleIn(library)) {
return true;
}
@@ -5128,12 +4777,12 @@
String toString() {
JavaStringBuilder builder = new JavaStringBuilder();
builder.append("[");
- int count = _conflictingElements.length;
+ int count = conflictingElements.length;
for (int i = 0; i < count; i++) {
if (i > 0) {
builder.append(", ");
}
- (_conflictingElements[i] as ElementImpl).appendTo(builder);
+ (conflictingElements[i] as ElementImpl).appendTo(builder);
}
builder.append("]");
return builder.toString();
@@ -5168,7 +4817,7 @@
/**
* The kind of this parameter.
*/
- ParameterKind _parameterKind;
+ ParameterKind parameterKind;
/**
* The offset to the beginning of the default value range for this element.
@@ -5224,8 +4873,6 @@
ElementKind get kind => ElementKind.PARAMETER;
- ParameterKind get parameterKind => _parameterKind;
-
List<ParameterElement> get parameters => _parameters;
SourceRange get visibleRange {
@@ -5269,15 +4916,6 @@
}
/**
- * Set the kind of this parameter to the given kind.
- *
- * @param parameterKind the new kind of this parameter
- */
- void set parameterKind(ParameterKind parameterKind) {
- this._parameterKind = parameterKind;
- }
-
- /**
* Set the parameters defined by this executable element to the given parameters.
*
* @param parameters the parameters defined by this executable element
@@ -5389,7 +5027,7 @@
/**
* The variable associated with this accessor.
*/
- PropertyInducingElement _variable;
+ PropertyInducingElement variable;
/**
* An empty array of property accessor elements.
@@ -5410,7 +5048,7 @@
* @param variable the variable with which this access is associated
*/
PropertyAccessorElementImpl.con2(PropertyInducingElementImpl variable) : super.con2(variable.name, variable.nameOffset) {
- this._variable = variable;
+ this.variable = variable;
synthetic = true;
}
@@ -5419,17 +5057,17 @@
bool operator ==(Object object) => super == object && identical(isGetter, (object as PropertyAccessorElement).isGetter);
PropertyAccessorElement get correspondingGetter {
- if (isGetter || _variable == null) {
+ if (isGetter || variable == null) {
return null;
}
- return _variable.getter;
+ return variable.getter;
}
PropertyAccessorElement get correspondingSetter {
- if (isSetter || _variable == null) {
+ if (isSetter || variable == null) {
return null;
}
- return _variable.setter;
+ return variable.setter;
}
ElementKind get kind {
@@ -5446,7 +5084,7 @@
return super.name;
}
- PropertyInducingElement get variable => _variable;
+ int get hashCode => ObjectUtilities.combineHashCodes(super.hashCode, isGetter ? 1 : 2);
bool get isAbstract => hasModifier(Modifier.ABSTRACT);
@@ -5492,15 +5130,6 @@
setModifier(Modifier.STATIC, isStatic);
}
- /**
- * Set the variable associated with this accessor to the given variable.
- *
- * @param variable the variable associated with this accessor
- */
- void set variable(PropertyInducingElement variable) {
- this._variable = variable;
- }
-
void appendTo(JavaStringBuilder builder) {
builder.append(isGetter ? "get " : "set ");
builder.append(variable.displayName);
@@ -5518,13 +5147,13 @@
/**
* The getter associated with this element.
*/
- PropertyAccessorElement _getter;
+ PropertyAccessorElement getter;
/**
* The setter associated with this element, or `null` if the element is effectively
* `final` and therefore does not have a setter associated with it.
*/
- PropertyAccessorElement _setter;
+ PropertyAccessorElement setter;
/**
* An empty array of elements.
@@ -5546,28 +5175,6 @@
PropertyInducingElementImpl.con2(String name) : super.con2(name, -1) {
synthetic = true;
}
-
- PropertyAccessorElement get getter => _getter;
-
- PropertyAccessorElement get setter => _setter;
-
- /**
- * Set the getter associated with this element to the given accessor.
- *
- * @param getter the getter associated with this element
- */
- void set getter(PropertyAccessorElement getter) {
- this._getter = getter;
- }
-
- /**
- * Set the setter associated with this element to the given accessor.
- *
- * @param setter the setter associated with this element
- */
- void set setter(PropertyAccessorElement setter) {
- this._setter = setter;
- }
}
/**
@@ -5581,57 +5188,27 @@
* The names that are to be made visible in the importing library if they are defined in the
* imported library.
*/
- List<String> _shownNames = StringUtilities.EMPTY_ARRAY;
+ List<String> shownNames = StringUtilities.EMPTY_ARRAY;
/**
* The offset of the character immediately following the last character of this node.
*/
- int _end = -1;
+ int end = -1;
/**
* The offset of the 'show' keyword of this element.
*/
- int _offset = 0;
-
- int get end => _end;
-
- int get offset => _offset;
-
- List<String> get shownNames => _shownNames;
-
- /**
- * Set the the offset of the character immediately following the last character of this node.
- */
- void set end(int endOffset) {
- this._end = endOffset;
- }
-
- /**
- * Sets the offset of the 'show' keyword of this directive.
- */
- void set offset(int offset) {
- this._offset = offset;
- }
-
- /**
- * Set the names that are to be made visible in the importing library if they are defined in the
- * imported library to the given names.
- *
- * @param shownNames the names that are to be made visible in the importing library
- */
- void set shownNames(List<String> shownNames) {
- this._shownNames = shownNames;
- }
+ int offset = 0;
String toString() {
JavaStringBuilder builder = new JavaStringBuilder();
builder.append("show ");
- int count = _shownNames.length;
+ int count = shownNames.length;
for (int i = 0; i < count; i++) {
if (i > 0) {
builder.append(", ");
}
- builder.append(_shownNames[i]);
+ builder.append(shownNames[i]);
}
return builder.toString();
}
@@ -5679,13 +5256,13 @@
/**
* The type defined by this type parameter.
*/
- TypeParameterType _type;
+ TypeParameterType type;
/**
* The type representing the bound associated with this parameter, or `null` if this
* parameter does not have an explicit bound.
*/
- Type2 _bound;
+ Type2 bound;
/**
* An empty array of type parameter elements.
@@ -5701,35 +5278,13 @@
accept(ElementVisitor visitor) => visitor.visitTypeParameterElement(this);
- Type2 get bound => _bound;
-
ElementKind get kind => ElementKind.TYPE_PARAMETER;
- TypeParameterType get type => _type;
-
- /**
- * Set the type representing the bound associated with this parameter to the given type.
- *
- * @param bound the type representing the bound associated with this parameter
- */
- void set bound(Type2 bound) {
- this._bound = bound;
- }
-
- /**
- * Set the type defined by this type parameter to the given type
- *
- * @param type the type defined by this type parameter
- */
- void set type(TypeParameterType type) {
- this._type = type;
- }
-
void appendTo(JavaStringBuilder builder) {
builder.append(displayName);
- if (_bound != null) {
+ if (bound != null) {
builder.append(" extends ");
- builder.append(_bound);
+ builder.append(bound);
}
}
}
@@ -5743,7 +5298,7 @@
/**
* The declared type of this variable.
*/
- Type2 _type;
+ Type2 type;
/**
* A synthetic function representing this variable's initializer, or `null` if this variable
@@ -5783,8 +5338,6 @@
FunctionElement get initializer => _initializer;
- Type2 get type => _type;
-
bool get isConst => hasModifier(Modifier.CONST);
bool get isFinal => hasModifier(Modifier.FINAL);
@@ -5845,15 +5398,6 @@
this._initializer = initializer;
}
- /**
- * Set the declared type of this variable to the given type.
- *
- * @param type the declared type of this variable
- */
- void set type(Type2 type) {
- this._type = type;
- }
-
void visitChildren(ElementVisitor visitor) {
super.visitChildren(visitor);
safelyVisitChild(_initializer, visitor);
@@ -6533,7 +6077,14 @@
/**
* The unique instance of this class.
*/
- static final BottomTypeImpl instance = new BottomTypeImpl();
+ static BottomTypeImpl _INSTANCE = new BottomTypeImpl();
+
+ /**
+ * Return the unique instance of this class.
+ *
+ * @return the unique instance of this class
+ */
+ static BottomTypeImpl get instance => _INSTANCE;
/**
* Prevent the creation of instances of this class.
@@ -6542,6 +6093,8 @@
bool operator ==(Object object) => identical(object, this);
+ int get hashCode => 0;
+
bool get isBottom => true;
bool isSupertypeOf(Type2 type) => false;
@@ -6562,7 +6115,14 @@
/**
* The unique instance of this class.
*/
- static final DynamicTypeImpl instance = new DynamicTypeImpl();
+ static DynamicTypeImpl _INSTANCE = new DynamicTypeImpl();
+
+ /**
+ * Return the unique instance of this class.
+ *
+ * @return the unique instance of this class
+ */
+ static DynamicTypeImpl get instance => _INSTANCE;
/**
* Prevent the creation of instances of this class.
@@ -6571,7 +6131,9 @@
(element as DynamicElementImpl).type = this;
}
- bool operator ==(Object object) => object is DynamicTypeImpl;
+ bool operator ==(Object object) => identical(object, this);
+
+ int get hashCode => 1;
bool get isDynamic => true;
@@ -6633,7 +6195,7 @@
/**
* An array containing the actual types of the type arguments.
*/
- List<Type2> _typeArguments = TypeImpl.EMPTY_ARRAY;
+ List<Type2> typeArguments = TypeImpl.EMPTY_ARRAY;
/**
* Initialize a newly created function type to be declared by the given element and to have the
@@ -6736,7 +6298,7 @@
List<Type2> typeParameters = TypeParameterTypeImpl.getTypes(this.typeParameters);
for (ParameterElement parameter in parameters) {
if (identical(parameter.parameterKind, ParameterKind.NAMED)) {
- namedParameterTypes[parameter.name] = parameter.type.substitute2(_typeArguments, typeParameters);
+ namedParameterTypes[parameter.name] = parameter.type.substitute2(typeArguments, typeParameters);
}
}
return namedParameterTypes;
@@ -6751,7 +6313,7 @@
List<Type2> types = new List<Type2>();
for (ParameterElement parameter in parameters) {
if (identical(parameter.parameterKind, ParameterKind.REQUIRED)) {
- types.add(parameter.type.substitute2(_typeArguments, typeParameters));
+ types.add(parameter.type.substitute2(typeArguments, typeParameters));
}
}
return new List.from(types);
@@ -6766,7 +6328,7 @@
List<Type2> types = new List<Type2>();
for (ParameterElement parameter in parameters) {
if (identical(parameter.parameterKind, ParameterKind.POSITIONAL)) {
- types.add(parameter.type.substitute2(_typeArguments, typeParameters));
+ types.add(parameter.type.substitute2(typeArguments, typeParameters));
}
}
return new List.from(types);
@@ -6790,11 +6352,9 @@
if (baseReturnType == null) {
return DynamicTypeImpl.instance;
}
- return baseReturnType.substitute2(_typeArguments, TypeParameterTypeImpl.getTypes(typeParameters));
+ return baseReturnType.substitute2(typeArguments, TypeParameterTypeImpl.getTypes(typeParameters));
}
- List<Type2> get typeArguments => _typeArguments;
-
List<TypeParameterElement> get typeParameters {
Element element = this.element;
if (element is FunctionTypeAliasElement) {
@@ -6903,15 +6463,6 @@
bool isAssignableTo(Type2 type) => isSubtypeOf3(type, new Set<TypeImpl_TypePair>());
- /**
- * Set the actual types of the type arguments to the given types.
- *
- * @param typeArguments the actual types of the type arguments
- */
- void set typeArguments(List<Type2> typeArguments) {
- this._typeArguments = typeArguments;
- }
-
FunctionTypeImpl substitute3(List<Type2> argumentTypes) => substitute2(argumentTypes, typeArguments);
FunctionTypeImpl substitute2(List<Type2> argumentTypes, List<Type2> parameterTypes) {
@@ -6923,7 +6474,7 @@
}
Element element = this.element;
FunctionTypeImpl newType = (element is ExecutableElement) ? new FunctionTypeImpl.con1(element as ExecutableElement) : new FunctionTypeImpl.con2(element as FunctionTypeAliasElement);
- newType.typeArguments = TypeImpl.substitute(_typeArguments, argumentTypes, parameterTypes);
+ newType.typeArguments = TypeImpl.substitute(typeArguments, argumentTypes, parameterTypes);
return newType;
}
@@ -7269,7 +6820,7 @@
/**
* An array containing the actual types of the type arguments.
*/
- List<Type2> _typeArguments = TypeImpl.EMPTY_ARRAY;
+ List<Type2> typeArguments = TypeImpl.EMPTY_ARRAY;
/**
* Initialize a newly created type to be declared by the given element.
@@ -7291,7 +6842,7 @@
return false;
}
InterfaceTypeImpl otherType = object as InterfaceTypeImpl;
- return (element == otherType.element) && JavaArrays.equals(_typeArguments, otherType._typeArguments);
+ return (element == otherType.element) && JavaArrays.equals(typeArguments, otherType.typeArguments);
}
List<PropertyAccessorElement> get accessors {
@@ -7345,7 +6896,7 @@
int count = interfaces.length;
List<InterfaceType> typedInterfaces = new List<InterfaceType>(count);
for (int i = 0; i < count; i++) {
- typedInterfaces[i] = interfaces[i].substitute2(_typeArguments, parameterTypes);
+ typedInterfaces[i] = interfaces[i].substitute2(typeArguments, parameterTypes);
}
return typedInterfaces;
}
@@ -7414,7 +6965,7 @@
int count = mixins.length;
List<InterfaceType> typedMixins = new List<InterfaceType>(count);
for (int i = 0; i < count; i++) {
- typedMixins[i] = mixins[i].substitute2(_typeArguments, parameterTypes);
+ typedMixins[i] = mixins[i].substitute2(typeArguments, parameterTypes);
}
return typedMixins;
}
@@ -7427,11 +6978,9 @@
if (supertype == null) {
return null;
}
- return supertype.substitute2(_typeArguments, classElement.type.typeArguments);
+ return supertype.substitute2(typeArguments, classElement.type.typeArguments);
}
- List<Type2> get typeArguments => _typeArguments;
-
List<TypeParameterElement> get typeParameters => element.typeParameters;
int get hashCode {
@@ -7602,26 +7151,17 @@
return null;
}
- /**
- * Set the actual types of the type arguments to those in the given array.
- *
- * @param typeArguments the actual types of the type arguments
- */
- void set typeArguments(List<Type2> typeArguments) {
- this._typeArguments = typeArguments;
- }
-
InterfaceTypeImpl substitute4(List<Type2> argumentTypes) => substitute2(argumentTypes, typeArguments);
InterfaceTypeImpl substitute2(List<Type2> argumentTypes, List<Type2> parameterTypes) {
if (argumentTypes.length != parameterTypes.length) {
throw new IllegalArgumentException("argumentTypes.length (${argumentTypes.length}) != parameterTypes.length (${parameterTypes.length})");
}
- if (argumentTypes.length == 0 || _typeArguments.length == 0) {
+ if (argumentTypes.length == 0 || typeArguments.length == 0) {
return this;
}
- List<Type2> newTypeArguments = TypeImpl.substitute(_typeArguments, argumentTypes, parameterTypes);
- if (JavaArrays.equals(newTypeArguments, _typeArguments)) {
+ List<Type2> newTypeArguments = TypeImpl.substitute(typeArguments, argumentTypes, parameterTypes);
+ if (JavaArrays.equals(newTypeArguments, typeArguments)) {
return this;
}
InterfaceTypeImpl newType = new InterfaceTypeImpl.con1(element);
@@ -7631,14 +7171,14 @@
void appendTo(JavaStringBuilder builder) {
builder.append(name);
- int argumentCount = _typeArguments.length;
+ int argumentCount = typeArguments.length;
if (argumentCount > 0) {
builder.append("<");
for (int i = 0; i < argumentCount; i++) {
if (i > 0) {
builder.append(", ");
}
- (_typeArguments[i] as TypeImpl).appendTo(builder);
+ (typeArguments[i] as TypeImpl).appendTo(builder);
}
builder.append(">");
}
@@ -7799,7 +7339,7 @@
/**
* The name of this type, or `null` if the type does not have a name.
*/
- String _name;
+ final String name;
/**
* An empty array of types.
@@ -7812,9 +7352,8 @@
* @param element the element representing the declaration of the type
* @param name the name of the type
*/
- TypeImpl(Element element, String name) {
+ TypeImpl(Element element, this.name) {
this._element = element;
- this._name = name;
}
String get displayName => name;
@@ -7823,8 +7362,6 @@
Type2 getLeastUpperBound(Type2 type) => null;
- String get name => _name;
-
bool isAssignableTo(Type2 type) => isAssignableTo2(type, new Set<TypeImpl_TypePair>());
/**
@@ -7913,10 +7450,10 @@
* @param builder the builder to which the text is to be appended
*/
void appendTo(JavaStringBuilder builder) {
- if (_name == null) {
+ if (name == null) {
builder.append("<unnamed type>");
} else {
- builder.append(_name);
+ builder.append(name);
}
}
@@ -8062,7 +7599,14 @@
/**
* The unique instance of this class.
*/
- static final VoidTypeImpl instance = new VoidTypeImpl();
+ static VoidTypeImpl _INSTANCE = new VoidTypeImpl();
+
+ /**
+ * Return the unique instance of this class.
+ *
+ * @return the unique instance of this class
+ */
+ static VoidTypeImpl get instance => _INSTANCE;
/**
* Prevent the creation of instances of this class.
@@ -8071,6 +7615,8 @@
bool operator ==(Object object) => identical(object, this);
+ int get hashCode => 2;
+
bool get isVoid => true;
VoidTypeImpl substitute2(List<Type2> argumentTypes, List<Type2> parameterTypes) => this;
diff --git a/pkg/analyzer/lib/src/generated/engine.dart b/pkg/analyzer/lib/src/generated/engine.dart
index 2e6b37e..8d7eed5 100644
--- a/pkg/analyzer/lib/src/generated/engine.dart
+++ b/pkg/analyzer/lib/src/generated/engine.dart
@@ -10,9 +10,9 @@
import 'instrumentation.dart';
import 'error.dart';
import 'source.dart';
-import 'scanner.dart' show Token, Scanner, CharSequenceReader;
+import 'scanner.dart' show Token, Scanner, CharSequenceReader, CharacterReader, IncrementalScanner;
import 'ast.dart';
-import 'parser.dart' show Parser;
+import 'parser.dart' show Parser, IncrementalParser;
import 'sdk.dart' show DartSdk;
import 'element.dart';
import 'resolver.dart';
@@ -43,7 +43,14 @@
/**
* The unique instance of this class.
*/
- static final AnalysisEngine instance = new AnalysisEngine();
+ static AnalysisEngine _UniqueInstance = new AnalysisEngine();
+
+ /**
+ * Return the unique instance of this class.
+ *
+ * @return the unique instance of this class
+ */
+ static AnalysisEngine get instance => _UniqueInstance;
/**
* Return `true` if the given file name is assumed to contain Dart source code.
@@ -691,6 +698,13 @@
*/
abstract class AnalysisOptions {
/**
+ * Return `true` if analysis is to parse and analyze function bodies.
+ *
+ * @return `true` if analysis is to parse and analyzer function bodies
+ */
+ bool get analyzeFunctionBodies;
+
+ /**
* Return the maximum number of sources for which AST structures should be kept in the cache.
*
* @return the maximum number of sources for which AST structures should be kept in the cache
@@ -711,6 +725,20 @@
* @return `true` if analysis is to generate hint results
*/
bool get hint;
+
+ /**
+ * Return `true` if incremental analysis should be used.
+ *
+ * @return `true` if incremental analysis should be used
+ */
+ bool get incremental;
+
+ /**
+ * Return `true` if analysis is to parse comments.
+ *
+ * @return `true` if analysis is to parse comments
+ */
+ bool get preserveComments;
}
/**
@@ -721,22 +749,22 @@
* The change notices associated with this result, or `null` if there were no changes and
* there is no more work to be done.
*/
- List<ChangeNotice> changeNotices;
+ List<ChangeNotice> _notices;
/**
* The number of milliseconds required to determine which task was to be performed.
*/
- int getTime = 0;
+ final int getTime;
/**
* The name of the class of the task that was performed.
*/
- String taskClassName;
+ final String taskClassName;
/**
* The number of milliseconds required to perform the task.
*/
- int performTime = 0;
+ final int performTime;
/**
* Initialize a newly created analysis result to have the given values.
@@ -746,12 +774,17 @@
* @param taskClassName the name of the class of the task that was performed
* @param performTime the number of milliseconds required to perform the task
*/
- AnalysisResult(List<ChangeNotice> notices, int getTime, String taskClassName, int performTime) {
- this.changeNotices = notices;
- this.getTime = getTime;
- this.taskClassName = taskClassName;
- this.performTime = performTime;
+ AnalysisResult(List<ChangeNotice> notices, this.getTime, this.taskClassName, this.performTime) {
+ this._notices = notices;
}
+
+ /**
+ * Return the change notices associated with this result, or `null` if there were no changes
+ * and there is no more work to be done.
+ *
+ * @return the change notices associated with this result
+ */
+ List<ChangeNotice> get changeNotices => _notices;
}
/**
@@ -2756,7 +2789,7 @@
/**
* The exception that caused one or more values to have a state of [CacheState#ERROR].
*/
- AnalysisException _exception;
+ AnalysisException exception;
/**
* The state of the cached line information.
@@ -2769,14 +2802,6 @@
*/
LineInfo _lineInfo;
- /**
- * Return the exception that caused one or more values to have a state of [CacheState#ERROR]
- * .
- *
- * @return the exception that caused one or more values to be uncomputable
- */
- AnalysisException get exception => _exception;
-
int get modificationTime => _modificationTime;
CacheState getState(DataDescriptor descriptor) {
@@ -2796,16 +2821,6 @@
}
/**
- * Set the exception that caused one or more values to have a state of [CacheState#ERROR] to
- * the given exception.
- *
- * @param exception the exception that caused one or more values to be uncomputable
- */
- void set exception(AnalysisException exception) {
- this._exception = exception;
- }
-
- /**
* Set the most recent time at which the state of the source matched the state represented by this
* entry to the given time.
*
@@ -2935,7 +2950,7 @@
}
class AnalysisContentStatisticsImpl_CacheRowImpl implements AnalysisContentStatistics_CacheRow {
- String _name;
+ final String name;
int _errorCount = 0;
@@ -2947,11 +2962,9 @@
int _validCount = 0;
- AnalysisContentStatisticsImpl_CacheRowImpl(String name) {
- this._name = name;
- }
+ AnalysisContentStatisticsImpl_CacheRowImpl(this.name);
- bool operator ==(Object obj) => obj is AnalysisContentStatisticsImpl_CacheRowImpl && (obj as AnalysisContentStatisticsImpl_CacheRowImpl)._name == _name;
+ bool operator ==(Object obj) => obj is AnalysisContentStatisticsImpl_CacheRowImpl && (obj as AnalysisContentStatisticsImpl_CacheRowImpl).name == name;
int get errorCount => _errorCount;
@@ -2961,11 +2974,9 @@
int get invalidCount => _invalidCount;
- String get name => _name;
-
int get validCount => _validCount;
- int get hashCode => _name.hashCode;
+ int get hashCode => name.hashCode;
void incState(CacheState state) {
if (identical(state, CacheState.ERROR)) {
@@ -3564,6 +3575,11 @@
return statistics;
}
+ TypeProvider get typeProvider {
+ Source coreSource = sourceFactory.forUri(DartSdk.DART_CORE);
+ return new TypeProviderImpl(computeLibraryElement(coreSource));
+ }
+
TimestampedData<CompilationUnit> internalResolveCompilationUnit(Source unitSource, LibraryElement libraryElement) {
DartEntry dartEntry = getReadableDartEntry(unitSource);
if (dartEntry == null) {
@@ -3663,7 +3679,7 @@
void set analysisOptions(AnalysisOptions options) {
{
- bool needsRecompute = this._options.dart2jsHint != options.dart2jsHint || (this._options.hint && !options.hint);
+ bool needsRecompute = this._options.analyzeFunctionBodies != options.analyzeFunctionBodies || this._options.dart2jsHint != options.dart2jsHint || (this._options.hint && !options.hint) || this._options.preserveComments != options.preserveComments;
int cacheSize = options.cacheSize;
if (this._options.cacheSize != cacheSize) {
this._options.cacheSize = cacheSize;
@@ -3675,8 +3691,11 @@
_priorityOrder = newPriorityOrder;
}
}
+ this._options.analyzeFunctionBodies = options.analyzeFunctionBodies;
this._options.dart2jsHint = options.dart2jsHint;
this._options.hint = options.hint;
+ this._options.incremental = options.incremental;
+ this._options.preserveComments = options.preserveComments;
if (needsRecompute) {
invalidateAllResolutionInformation();
}
@@ -3707,7 +3726,9 @@
String originalContents = _sourceFactory.setContents(source, contents);
if (contents != null) {
if (contents != originalContents) {
- _incrementalAnalysisCache = IncrementalAnalysisCache.update(_incrementalAnalysisCache, source, originalContents, contents, offset, oldLength, newLength, getReadableSourceEntry(source));
+ if (_options.incremental) {
+ _incrementalAnalysisCache = IncrementalAnalysisCache.update(_incrementalAnalysisCache, source, originalContents, contents, offset, oldLength, newLength, getReadableSourceEntry(source));
+ }
sourceChanged(source);
}
} else if (originalContents != null) {
@@ -3759,6 +3780,111 @@
}
/**
+ * Record the results produced by performing a [ResolveDartLibraryTask]. If the results were
+ * computed from data that is now out-of-date, then the results will not be recorded.
+ *
+ * @param task the task that was performed
+ * @return an entry containing the computed results
+ * @throws AnalysisException if the results could not be recorded
+ */
+ DartEntry recordResolveDartLibraryTaskResults(ResolveDartLibraryTask task) {
+ LibraryResolver resolver = task.libraryResolver;
+ AnalysisException thrownException = task.exception;
+ DartEntry unitEntry = null;
+ Source unitSource = task.unitSource;
+ if (resolver != null) {
+ Set<Library> resolvedLibraries = resolver.resolvedLibraries;
+ if (resolvedLibraries == null) {
+ unitEntry = getReadableDartEntry(unitSource);
+ if (unitEntry == null) {
+ throw new AnalysisException.con1("A Dart file became a non-Dart file: ${unitSource.fullName}");
+ }
+ DartEntryImpl dartCopy = unitEntry.writableCopy;
+ dartCopy.recordResolutionError();
+ dartCopy.exception = thrownException;
+ _cache.put(unitSource, dartCopy);
+ if (thrownException != null) {
+ throw thrownException;
+ }
+ return dartCopy;
+ }
+ {
+ if (allModificationTimesMatch(resolvedLibraries)) {
+ Source htmlSource = sourceFactory.forUri(DartSdk.DART_HTML);
+ RecordingErrorListener errorListener = resolver.errorListener;
+ for (Library library in resolvedLibraries) {
+ Source librarySource = library.librarySource;
+ for (Source source in library.compilationUnitSources) {
+ CompilationUnit unit = library.getAST(source);
+ List<AnalysisError> errors = errorListener.getErrors2(source);
+ LineInfo lineInfo = getLineInfo(source);
+ DartEntry dartEntry = _cache.get(source) as DartEntry;
+ int sourceTime = source.modificationStamp;
+ if (dartEntry.modificationTime != sourceTime) {
+ sourceChanged(source);
+ dartEntry = getReadableDartEntry(source);
+ if (dartEntry == null) {
+ throw new AnalysisException.con1("A Dart file became a non-Dart file: ${source.fullName}");
+ }
+ }
+ DartEntryImpl dartCopy = dartEntry.writableCopy;
+ if (thrownException == null) {
+ dartCopy.setValue(SourceEntry.LINE_INFO, lineInfo);
+ dartCopy.setState(DartEntry.PARSED_UNIT, CacheState.FLUSHED);
+ dartCopy.setValue2(DartEntry.RESOLVED_UNIT, librarySource, unit);
+ dartCopy.setValue2(DartEntry.RESOLUTION_ERRORS, librarySource, errors);
+ if (identical(source, librarySource)) {
+ recordElementData(dartCopy, library.libraryElement, htmlSource);
+ }
+ } else {
+ dartCopy.recordResolutionError();
+ }
+ dartCopy.exception = thrownException;
+ _cache.put(source, dartCopy);
+ if (source == unitSource) {
+ unitEntry = dartCopy;
+ }
+ ChangeNoticeImpl notice = getNotice(source);
+ notice.compilationUnit = unit;
+ notice.setErrors(dartCopy.allErrors, lineInfo);
+ }
+ }
+ } else {
+ for (Library library in resolvedLibraries) {
+ for (Source source in library.compilationUnitSources) {
+ DartEntry dartEntry = getReadableDartEntry(source);
+ if (dartEntry != null) {
+ int resultTime = library.getModificationTime(source);
+ DartEntryImpl dartCopy = dartEntry.writableCopy;
+ if (thrownException == null || resultTime >= 0) {
+ dartCopy.recordResolutionNotInProcess();
+ } else {
+ dartCopy.recordResolutionError();
+ }
+ dartCopy.exception = thrownException;
+ _cache.put(source, dartCopy);
+ if (source == unitSource) {
+ unitEntry = dartCopy;
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ if (thrownException != null) {
+ throw thrownException;
+ }
+ if (unitEntry == null) {
+ unitEntry = getReadableDartEntry(unitSource);
+ if (unitEntry == null) {
+ throw new AnalysisException.con1("A Dart file became a non-Dart file: ${unitSource.fullName}");
+ }
+ }
+ return unitEntry;
+ }
+
+ /**
* Add all of the sources contained in the given source container to the given list of sources.
*
* Note: This method must only be invoked while we are synchronized on [cacheLock].
@@ -4214,6 +4340,7 @@
if (_incrementalAnalysisCache != null && _incrementalAnalysisCache.hasWork()) {
AnalysisTask task = new IncrementalAnalysisTask(this, _incrementalAnalysisCache);
_incrementalAnalysisCache = null;
+ return task;
}
for (Source source in _priorityOrder) {
AnalysisTask task = getNextTaskAnalysisTask2(source, _cache.get(source), true, hintsEnabled);
@@ -4917,111 +5044,6 @@
}
/**
- * Record the results produced by performing a [ResolveDartLibraryTask]. If the results were
- * computed from data that is now out-of-date, then the results will not be recorded.
- *
- * @param task the task that was performed
- * @return an entry containing the computed results
- * @throws AnalysisException if the results could not be recorded
- */
- DartEntry recordResolveDartLibraryTaskResults(ResolveDartLibraryTask task) {
- LibraryResolver resolver = task.libraryResolver;
- AnalysisException thrownException = task.exception;
- DartEntry unitEntry = null;
- Source unitSource = task.unitSource;
- if (resolver != null) {
- Set<Library> resolvedLibraries = resolver.resolvedLibraries;
- if (resolvedLibraries == null) {
- unitEntry = getReadableDartEntry(unitSource);
- if (unitEntry == null) {
- throw new AnalysisException.con1("A Dart file became a non-Dart file: ${unitSource.fullName}");
- }
- DartEntryImpl dartCopy = unitEntry.writableCopy;
- dartCopy.recordResolutionError();
- dartCopy.exception = thrownException;
- _cache.put(unitSource, dartCopy);
- if (thrownException != null) {
- throw thrownException;
- }
- return dartCopy;
- }
- {
- if (allModificationTimesMatch(resolvedLibraries)) {
- Source htmlSource = sourceFactory.forUri(DartSdk.DART_HTML);
- RecordingErrorListener errorListener = resolver.errorListener;
- for (Library library in resolvedLibraries) {
- Source librarySource = library.librarySource;
- for (Source source in library.compilationUnitSources) {
- CompilationUnit unit = library.getAST(source);
- List<AnalysisError> errors = errorListener.getErrors2(source);
- LineInfo lineInfo = getLineInfo(source);
- DartEntry dartEntry = _cache.get(source) as DartEntry;
- int sourceTime = source.modificationStamp;
- if (dartEntry.modificationTime != sourceTime) {
- sourceChanged(source);
- dartEntry = getReadableDartEntry(source);
- if (dartEntry == null) {
- throw new AnalysisException.con1("A Dart file became a non-Dart file: ${source.fullName}");
- }
- }
- DartEntryImpl dartCopy = dartEntry.writableCopy;
- if (thrownException == null) {
- dartCopy.setValue(SourceEntry.LINE_INFO, lineInfo);
- dartCopy.setState(DartEntry.PARSED_UNIT, CacheState.FLUSHED);
- dartCopy.setValue2(DartEntry.RESOLVED_UNIT, librarySource, unit);
- dartCopy.setValue2(DartEntry.RESOLUTION_ERRORS, librarySource, errors);
- if (identical(source, librarySource)) {
- recordElementData(dartCopy, library.libraryElement, htmlSource);
- }
- } else {
- dartCopy.recordResolutionError();
- }
- dartCopy.exception = thrownException;
- _cache.put(source, dartCopy);
- if (source == unitSource) {
- unitEntry = dartCopy;
- }
- ChangeNoticeImpl notice = getNotice(source);
- notice.compilationUnit = unit;
- notice.setErrors(dartCopy.allErrors, lineInfo);
- }
- }
- } else {
- for (Library library in resolvedLibraries) {
- for (Source source in library.compilationUnitSources) {
- DartEntry dartEntry = getReadableDartEntry(source);
- if (dartEntry != null) {
- int resultTime = library.getModificationTime(source);
- DartEntryImpl dartCopy = dartEntry.writableCopy;
- if (thrownException == null || resultTime >= 0) {
- dartCopy.recordResolutionNotInProcess();
- } else {
- dartCopy.recordResolutionError();
- }
- dartCopy.exception = thrownException;
- _cache.put(source, dartCopy);
- if (source == unitSource) {
- unitEntry = dartCopy;
- }
- }
- }
- }
- }
- }
- }
- if (thrownException != null) {
- throw thrownException;
- }
- if (unitEntry == null) {
- unitEntry = getReadableDartEntry(unitSource);
- if (unitEntry == null) {
- throw new AnalysisException.con1("A Dart file became a non-Dart file: ${unitSource.fullName}");
- }
- }
- return unitEntry;
- }
-
- /**
* Record the results produced by performing a [ResolveDartUnitTask]. If the results were
* computed from data that is now out-of-date, then the results will not be recorded.
*
@@ -5172,6 +5194,9 @@
*/
void sourceChanged(Source source) {
SourceEntry sourceEntry = _cache.get(source);
+ if (sourceEntry == null || sourceEntry.modificationTime == source.modificationStamp) {
+ return;
+ }
if (sourceEntry is HtmlEntry) {
HtmlEntryImpl htmlCopy = (sourceEntry as HtmlEntry).writableCopy;
htmlCopy.modificationTime = source.modificationStamp;
@@ -5276,12 +5301,12 @@
/**
* The analysis errors associated with a source, or `null` if there are no errors.
*/
- List<AnalysisError> _errors;
+ final List<AnalysisError> errors;
/**
* The line information associated with the errors, or `null` if there are no errors.
*/
- LineInfo _lineInfo;
+ final LineInfo lineInfo;
/**
* Initialize an newly created error info with the errors and line information
@@ -5289,25 +5314,7 @@
* @param errors the errors as a result of analysis
* @param lineinfo the line info for the errors
*/
- AnalysisErrorInfoImpl(List<AnalysisError> errors, LineInfo lineInfo) {
- this._errors = errors;
- this._lineInfo = lineInfo;
- }
-
- /**
- * Return the errors of analysis, or `null` if there were no errors.
- *
- * @return the errors as a result of the analysis
- */
- List<AnalysisError> get errors => _errors;
-
- /**
- * Return the line information associated with the errors, or `null` if there were no
- * errors.
- *
- * @return the line information associated with the errors
- */
- LineInfo get lineInfo => _lineInfo;
+ AnalysisErrorInfoImpl(this.errors, this.lineInfo);
}
/**
@@ -5323,18 +5330,33 @@
/**
* The maximum number of sources for which AST structures should be kept in the cache.
*/
- int _cacheSize = DEFAULT_CACHE_SIZE;
+ int cacheSize = DEFAULT_CACHE_SIZE;
+
+ /**
+ * A flag indicating whether analysis is to parse and analyze function bodies.
+ */
+ bool analyzeFunctionBodies = true;
/**
* A flag indicating whether analysis is to generate dart2js related hint results.
*/
- bool _dart2jsHint = true;
+ bool dart2jsHint = true;
/**
* A flag indicating whether analysis is to generate hint results (e.g. type inference based
* information and pub best practices).
*/
- bool _hint = true;
+ bool hint = true;
+
+ /**
+ * A flag indicating whether incremental analysis should be used.
+ */
+ bool incremental = false;
+
+ /**
+ * flag indicating whether analysis is to parse comments.
+ */
+ bool preserveComments = true;
/**
* Initialize a newly created set of analysis options to have their default values.
@@ -5348,45 +5370,10 @@
* @param options the analysis options whose values are being copied
*/
AnalysisOptionsImpl.con1(AnalysisOptions options) {
- _cacheSize = options.cacheSize;
- _dart2jsHint = options.dart2jsHint;
- _hint = options.hint;
- }
-
- int get cacheSize => _cacheSize;
-
- bool get dart2jsHint => _dart2jsHint;
-
- bool get hint => _hint;
-
- /**
- * Set the maximum number of sources for which AST structures should be kept in the cache to the
- * given size.
- *
- * @param cacheSize the maximum number of sources for which AST structures should be kept in the
- * cache
- */
- void set cacheSize(int cacheSize) {
- this._cacheSize = cacheSize;
- }
-
- /**
- * Set whether analysis is to generate dart2js related hint results.
- *
- * @param hint `true` if analysis is to generate dart2js related hint results
- */
- void set dart2jsHint(bool dart2jsHints) {
- this._dart2jsHint = dart2jsHints;
- }
-
- /**
- * Set whether analysis is to generate hint results (e.g. type inference based information and pub
- * best practices).
- *
- * @param hint `true` if analysis is to generate hint results
- */
- void set hint(bool hint) {
- this._hint = hint;
+ cacheSize = options.cacheSize;
+ dart2jsHint = options.dart2jsHint;
+ hint = options.hint;
+ incremental = options.incremental;
}
}
@@ -5400,13 +5387,13 @@
/**
* The source for which the result is being reported.
*/
- Source _source;
+ final Source source;
/**
* The fully resolved AST that changed as a result of the analysis, or `null` if the AST was
* not changed.
*/
- CompilationUnit _compilationUnit;
+ CompilationUnit compilationUnit;
/**
* The errors that changed as a result of the analysis, or `null` if errors were not
@@ -5429,17 +5416,7 @@
*
* @param source the source for which the change is being reported
*/
- ChangeNoticeImpl(Source source) {
- this._source = source;
- }
-
- /**
- * Return the fully resolved AST that changed as a result of the analysis, or `null` if the
- * AST was not changed.
- *
- * @return the fully resolved AST that changed as a result of the analysis
- */
- CompilationUnit get compilationUnit => _compilationUnit;
+ ChangeNoticeImpl(this.source);
/**
* Return the errors that changed as a result of the analysis, or `null` if errors were not
@@ -5458,22 +5435,6 @@
LineInfo get lineInfo => _lineInfo;
/**
- * Return the source for which the result is being reported.
- *
- * @return the source for which the result is being reported
- */
- Source get source => _source;
-
- /**
- * Set the fully resolved AST that changed as a result of the analysis to the given AST.
- *
- * @param compilationUnit the fully resolved AST that changed as a result of the analysis
- */
- void set compilationUnit(CompilationUnit compilationUnit) {
- this._compilationUnit = compilationUnit;
- }
-
- /**
* Set the errors that changed as a result of the analysis to the given errors and set the line
* information to the given line information.
*
@@ -5484,11 +5445,11 @@
this._errors = errors;
this._lineInfo = lineInfo;
if (lineInfo == null) {
- AnalysisEngine.instance.logger.logError2("No line info: ${_source}", new JavaException());
+ AnalysisEngine.instance.logger.logError2("No line info: ${source}", new JavaException());
}
}
- String toString() => "Changes for ${_source.fullName}";
+ String toString() => "Changes for ${source.fullName}";
}
/**
@@ -5795,7 +5756,7 @@
*/
static IncrementalAnalysisCache cacheResult(IncrementalAnalysisCache cache, CompilationUnit unit) {
if (cache != null && unit != null) {
- return new IncrementalAnalysisCache(cache.librarySource, cache.source, unit, cache.newContents, cache.newContents, 0, 0, 0);
+ return new IncrementalAnalysisCache(cache.librarySource, cache.source, unit, cache._newContents, cache._newContents, 0, 0, 0);
}
return null;
}
@@ -5854,17 +5815,17 @@
}
return new IncrementalAnalysisCache(librarySource, source, unit, oldContents, newContents, offset, oldLength, newLength);
}
- if (cache.oldLength == 0 && cache.newLength == 0) {
- cache.offset = offset;
- cache.oldLength = oldLength;
- cache.newLength = newLength;
+ if (cache._oldLength == 0 && cache._newLength == 0) {
+ cache._offset = offset;
+ cache._oldLength = oldLength;
+ cache._newLength = newLength;
} else {
- if (cache.offset > offset || offset > cache.offset + cache.newLength) {
+ if (cache._offset > offset || offset > cache._offset + cache._newLength) {
return null;
}
- cache.newLength += newLength - oldLength;
+ cache._newLength += newLength - oldLength;
}
- cache.newContents = newContents;
+ cache._newContents = newContents;
return cache;
}
@@ -5887,39 +5848,63 @@
return cache;
}
- Source librarySource;
+ final Source librarySource;
- Source source;
+ final Source source;
- String oldContents;
+ final String oldContents;
- CompilationUnit resolvedUnit;
+ final CompilationUnit resolvedUnit;
- String newContents;
+ String _newContents;
- int offset = 0;
+ int _offset = 0;
- int oldLength = 0;
+ int _oldLength = 0;
- int newLength = 0;
+ int _newLength = 0;
- IncrementalAnalysisCache(Source librarySource, Source source, CompilationUnit resolvedUnit, String oldContents, String newContents, int offset, int oldLength, int newLength) {
- this.librarySource = librarySource;
- this.source = source;
- this.resolvedUnit = resolvedUnit;
- this.oldContents = oldContents;
- this.newContents = newContents;
- this.offset = offset;
- this.oldLength = oldLength;
- this.newLength = newLength;
+ IncrementalAnalysisCache(this.librarySource, this.source, this.resolvedUnit, this.oldContents, String newContents, int offset, int oldLength, int newLength) {
+ this._newContents = newContents;
+ this._offset = offset;
+ this._oldLength = oldLength;
+ this._newLength = newLength;
}
/**
+ * Return the current contents for the receiver's source.
+ *
+ * @return the contents (not `null`)
+ */
+ String get newContents => _newContents;
+
+ /**
+ * Return the number of characters in the replacement text.
+ *
+ * @return the replacement length (zero or greater)
+ */
+ int get newLength => _newLength;
+
+ /**
+ * Return the character position of the first changed character.
+ *
+ * @return the offset (zero or greater)
+ */
+ int get offset => _offset;
+
+ /**
+ * Return the number of characters that were replaced.
+ *
+ * @return the replaced length (zero or greater)
+ */
+ int get oldLength => _oldLength;
+
+ /**
* Determine if the cache contains source changes that need to be analyzed
*
* @return `true` if the cache contains changes to be analyzed, else `false`
*/
- bool hasWork() => oldLength > 0 || newLength > 0;
+ bool hasWork() => _oldLength > 0 || _newLength > 0;
}
/**
@@ -5948,7 +5933,7 @@
/**
* The analysis context to which all of the non-instrumentation work is delegated.
*/
- InternalAnalysisContext basis;
+ InternalAnalysisContext _basis;
/**
* Create a new [InstrumentedAnalysisContextImpl] which wraps a new
@@ -5963,18 +5948,18 @@
* @param context some [InstrumentedAnalysisContext] to wrap and instrument
*/
InstrumentedAnalysisContextImpl.con1(InternalAnalysisContext context) {
- basis = context;
+ _basis = context;
}
void addSourceInfo(Source source, SourceEntry info) {
- basis.addSourceInfo(source, info);
+ _basis.addSourceInfo(source, info);
}
void applyChanges(ChangeSet changeSet) {
InstrumentationBuilder instrumentation = Instrumentation.builder2("Analysis-applyChanges");
try {
instrumentation.metric3("contextId", _contextId);
- basis.applyChanges(changeSet);
+ _basis.applyChanges(changeSet);
} finally {
instrumentation.log();
}
@@ -5984,7 +5969,7 @@
InstrumentationBuilder instrumentation = Instrumentation.builder2("Analysis-computeDocumentationComment");
try {
instrumentation.metric3("contextId", _contextId);
- return basis.computeDocumentationComment(element);
+ return _basis.computeDocumentationComment(element);
} finally {
instrumentation.log();
}
@@ -5994,7 +5979,7 @@
InstrumentationBuilder instrumentation = Instrumentation.builder2("Analysis-computeErrors");
try {
instrumentation.metric3("contextId", _contextId);
- List<AnalysisError> errors = basis.computeErrors(source);
+ List<AnalysisError> errors = _basis.computeErrors(source);
instrumentation.metric2("Errors-count", errors.length);
return errors;
} finally {
@@ -6006,7 +5991,7 @@
InstrumentationBuilder instrumentation = Instrumentation.builder2("Analysis-computeExportedLibraries");
try {
instrumentation.metric3("contextId", _contextId);
- return basis.computeExportedLibraries(source);
+ return _basis.computeExportedLibraries(source);
} finally {
instrumentation.log();
}
@@ -6016,7 +6001,7 @@
InstrumentationBuilder instrumentation = Instrumentation.builder2("Analysis-computeHtmlElement");
try {
instrumentation.metric3("contextId", _contextId);
- return basis.computeHtmlElement(source);
+ return _basis.computeHtmlElement(source);
} on AnalysisException catch (e) {
recordAnalysisException(instrumentation, e);
throw e;
@@ -6029,7 +6014,7 @@
InstrumentationBuilder instrumentation = Instrumentation.builder2("Analysis-computeImportedLibraries");
try {
instrumentation.metric3("contextId", _contextId);
- return basis.computeImportedLibraries(source);
+ return _basis.computeImportedLibraries(source);
} finally {
instrumentation.log();
}
@@ -6039,7 +6024,7 @@
InstrumentationBuilder instrumentation = Instrumentation.builder2("Analysis-computeKindOf");
try {
instrumentation.metric3("contextId", _contextId);
- return basis.computeKindOf(source);
+ return _basis.computeKindOf(source);
} finally {
instrumentation.log();
}
@@ -6049,7 +6034,7 @@
InstrumentationBuilder instrumentation = Instrumentation.builder2("Analysis-computeLibraryElement");
try {
instrumentation.metric3("contextId", _contextId);
- return basis.computeLibraryElement(source);
+ return _basis.computeLibraryElement(source);
} on AnalysisException catch (e) {
recordAnalysisException(instrumentation, e);
throw e;
@@ -6062,7 +6047,7 @@
InstrumentationBuilder instrumentation = Instrumentation.builder2("Analysis-computeLineInfo");
try {
instrumentation.metric3("contextId", _contextId);
- return basis.computeLineInfo(source);
+ return _basis.computeLineInfo(source);
} on AnalysisException catch (e) {
recordAnalysisException(instrumentation, e);
throw e;
@@ -6071,39 +6056,44 @@
}
}
- ResolvableCompilationUnit computeResolvableCompilationUnit(Source source) => basis.computeResolvableCompilationUnit(source);
+ ResolvableCompilationUnit computeResolvableCompilationUnit(Source source) => _basis.computeResolvableCompilationUnit(source);
- ResolvableHtmlUnit computeResolvableHtmlUnit(Source source) => basis.computeResolvableHtmlUnit(source);
+ ResolvableHtmlUnit computeResolvableHtmlUnit(Source source) => _basis.computeResolvableHtmlUnit(source);
AnalysisContext extractContext(SourceContainer container) {
InstrumentationBuilder instrumentation = Instrumentation.builder2("Analysis-extractContext");
try {
instrumentation.metric3("contextId", _contextId);
InstrumentedAnalysisContextImpl newContext = new InstrumentedAnalysisContextImpl();
- basis.extractContextInto(container, newContext.basis);
+ _basis.extractContextInto(container, newContext._basis);
return newContext;
} finally {
instrumentation.log();
}
}
- InternalAnalysisContext extractContextInto(SourceContainer container, InternalAnalysisContext newContext) => basis.extractContextInto(container, newContext);
+ InternalAnalysisContext extractContextInto(SourceContainer container, InternalAnalysisContext newContext) => _basis.extractContextInto(container, newContext);
AnalysisOptions get analysisOptions {
InstrumentationBuilder instrumentation = Instrumentation.builder2("Analysis-getAnalysisOptions");
try {
instrumentation.metric3("contextId", _contextId);
- return basis.analysisOptions;
+ return _basis.analysisOptions;
} finally {
instrumentation.log();
}
}
+ /**
+ * @return the underlying [AnalysisContext].
+ */
+ AnalysisContext get basis => _basis;
+
Element getElement(ElementLocation location) {
InstrumentationBuilder instrumentation = Instrumentation.builder2("Analysis-getElement");
try {
instrumentation.metric3("contextId", _contextId);
- return basis.getElement(location);
+ return _basis.getElement(location);
} finally {
instrumentation.log();
}
@@ -6113,7 +6103,7 @@
InstrumentationBuilder instrumentation = Instrumentation.builder2("Analysis-getErrors");
try {
instrumentation.metric3("contextId", _contextId);
- AnalysisErrorInfo ret = basis.getErrors(source);
+ AnalysisErrorInfo ret = _basis.getErrors(source);
if (ret != null) {
instrumentation.metric2("Errors-count", ret.errors.length);
}
@@ -6127,7 +6117,7 @@
InstrumentationBuilder instrumentation = Instrumentation.builder2("Analysis-getHtmlElement");
try {
instrumentation.metric3("contextId", _contextId);
- return basis.getHtmlElement(source);
+ return _basis.getHtmlElement(source);
} finally {
instrumentation.log();
}
@@ -6137,7 +6127,7 @@
InstrumentationBuilder instrumentation = Instrumentation.builder2("Analysis-getHtmlFilesReferencing");
try {
instrumentation.metric3("contextId", _contextId);
- List<Source> ret = basis.getHtmlFilesReferencing(source);
+ List<Source> ret = _basis.getHtmlFilesReferencing(source);
if (ret != null) {
instrumentation.metric2("Source-count", ret.length);
}
@@ -6151,7 +6141,7 @@
InstrumentationBuilder instrumentation = Instrumentation.builder2("Analysis-getHtmlSources");
try {
instrumentation.metric3("contextId", _contextId);
- List<Source> ret = basis.htmlSources;
+ List<Source> ret = _basis.htmlSources;
if (ret != null) {
instrumentation.metric2("Source-count", ret.length);
}
@@ -6165,7 +6155,7 @@
InstrumentationBuilder instrumentation = Instrumentation.builder2("Analysis-getKindOf");
try {
instrumentation.metric3("contextId", _contextId);
- return basis.getKindOf(source);
+ return _basis.getKindOf(source);
} finally {
instrumentation.log();
}
@@ -6175,7 +6165,7 @@
InstrumentationBuilder instrumentation = Instrumentation.builder2("Analysis-getLaunchableClientLibrarySources");
try {
instrumentation.metric3("contextId", _contextId);
- List<Source> ret = basis.launchableClientLibrarySources;
+ List<Source> ret = _basis.launchableClientLibrarySources;
if (ret != null) {
instrumentation.metric2("Source-count", ret.length);
}
@@ -6189,7 +6179,7 @@
InstrumentationBuilder instrumentation = Instrumentation.builder2("Analysis-getLaunchableServerLibrarySources");
try {
instrumentation.metric3("contextId", _contextId);
- List<Source> ret = basis.launchableServerLibrarySources;
+ List<Source> ret = _basis.launchableServerLibrarySources;
if (ret != null) {
instrumentation.metric2("Source-count", ret.length);
}
@@ -6203,7 +6193,7 @@
InstrumentationBuilder instrumentation = Instrumentation.builder2("Analysis-getLibrariesContaining");
try {
instrumentation.metric3("contextId", _contextId);
- List<Source> ret = basis.getLibrariesContaining(source);
+ List<Source> ret = _basis.getLibrariesContaining(source);
if (ret != null) {
instrumentation.metric2("Source-count", ret.length);
}
@@ -6217,7 +6207,7 @@
InstrumentationBuilder instrumentation = Instrumentation.builder2("Analysis-getLibrariesDependingOn");
try {
instrumentation.metric3("contextId", _contextId);
- List<Source> ret = basis.getLibrariesDependingOn(librarySource);
+ List<Source> ret = _basis.getLibrariesDependingOn(librarySource);
if (ret != null) {
instrumentation.metric2("Source-count", ret.length);
}
@@ -6231,7 +6221,7 @@
InstrumentationBuilder instrumentation = Instrumentation.builder2("Analysis-getLibraryElement");
try {
instrumentation.metric3("contextId", _contextId);
- return basis.getLibraryElement(source);
+ return _basis.getLibraryElement(source);
} finally {
instrumentation.log();
}
@@ -6241,7 +6231,7 @@
InstrumentationBuilder instrumentation = Instrumentation.builder2("Analysis-getLibrarySources");
try {
instrumentation.metric3("contextId", _contextId);
- List<Source> ret = basis.librarySources;
+ List<Source> ret = _basis.librarySources;
if (ret != null) {
instrumentation.metric2("Source-count", ret.length);
}
@@ -6255,23 +6245,23 @@
InstrumentationBuilder instrumentation = Instrumentation.builder2("Analysis-getLineInfo");
try {
instrumentation.metric3("contextId", _contextId);
- return basis.getLineInfo(source);
+ return _basis.getLineInfo(source);
} finally {
instrumentation.log();
}
}
- Namespace getPublicNamespace(LibraryElement library) => basis.getPublicNamespace(library);
+ Namespace getPublicNamespace(LibraryElement library) => _basis.getPublicNamespace(library);
- Namespace getPublicNamespace2(Source source) => basis.getPublicNamespace2(source);
+ Namespace getPublicNamespace2(Source source) => _basis.getPublicNamespace2(source);
- List<Source> get refactoringUnsafeSources => basis.refactoringUnsafeSources;
+ List<Source> get refactoringUnsafeSources => _basis.refactoringUnsafeSources;
CompilationUnit getResolvedCompilationUnit(Source unitSource, LibraryElement library) {
InstrumentationBuilder instrumentation = Instrumentation.builder2("Analysis-getResolvedCompilationUnit");
try {
instrumentation.metric3("contextId", _contextId);
- return basis.getResolvedCompilationUnit(unitSource, library);
+ return _basis.getResolvedCompilationUnit(unitSource, library);
} finally {
instrumentation.log();
}
@@ -6281,7 +6271,7 @@
InstrumentationBuilder instrumentation = Instrumentation.builder2("Analysis-getResolvedCompilationUnit");
try {
instrumentation.metric3("contextId", _contextId);
- return basis.getResolvedCompilationUnit2(unitSource, librarySource);
+ return _basis.getResolvedCompilationUnit2(unitSource, librarySource);
} finally {
instrumentation.log2(2);
}
@@ -6291,21 +6281,23 @@
InstrumentationBuilder instrumentation = Instrumentation.builder2("Analysis-getSourceFactory");
try {
instrumentation.metric3("contextId", _contextId);
- return basis.sourceFactory;
+ return _basis.sourceFactory;
} finally {
instrumentation.log2(2);
}
}
- AnalysisContentStatistics get statistics => basis.statistics;
+ AnalysisContentStatistics get statistics => _basis.statistics;
- TimestampedData<CompilationUnit> internalResolveCompilationUnit(Source unitSource, LibraryElement libraryElement) => basis.internalResolveCompilationUnit(unitSource, libraryElement);
+ TypeProvider get typeProvider => _basis.typeProvider;
+
+ TimestampedData<CompilationUnit> internalResolveCompilationUnit(Source unitSource, LibraryElement libraryElement) => _basis.internalResolveCompilationUnit(unitSource, libraryElement);
bool isClientLibrary(Source librarySource) {
InstrumentationBuilder instrumentation = Instrumentation.builder2("Analysis-isClientLibrary");
try {
instrumentation.metric3("contextId", _contextId);
- return basis.isClientLibrary(librarySource);
+ return _basis.isClientLibrary(librarySource);
} finally {
instrumentation.log();
}
@@ -6315,7 +6307,7 @@
InstrumentationBuilder instrumentation = Instrumentation.builder2("Analysis-isServerLibrary");
try {
instrumentation.metric3("contextId", _contextId);
- return basis.isServerLibrary(librarySource);
+ return _basis.isServerLibrary(librarySource);
} finally {
instrumentation.log();
}
@@ -6326,9 +6318,9 @@
try {
instrumentation.metric3("contextId", _contextId);
if (context is InstrumentedAnalysisContextImpl) {
- context = (context as InstrumentedAnalysisContextImpl).basis;
+ context = (context as InstrumentedAnalysisContextImpl)._basis;
}
- basis.mergeContext(context);
+ _basis.mergeContext(context);
} finally {
instrumentation.log();
}
@@ -6338,7 +6330,7 @@
InstrumentationBuilder instrumentation = Instrumentation.builder2("Analysis-parseCompilationUnit");
try {
instrumentation.metric3("contextId", _contextId);
- return basis.parseCompilationUnit(source);
+ return _basis.parseCompilationUnit(source);
} on AnalysisException catch (e) {
recordAnalysisException(instrumentation, e);
throw e;
@@ -6351,7 +6343,7 @@
InstrumentationBuilder instrumentation = Instrumentation.builder2("Analysis-parseHtmlUnit");
try {
instrumentation.metric3("contextId", _contextId);
- return basis.parseHtmlUnit(source);
+ return _basis.parseHtmlUnit(source);
} on AnalysisException catch (e) {
recordAnalysisException(instrumentation, e);
throw e;
@@ -6364,7 +6356,7 @@
InstrumentationBuilder instrumentation = Instrumentation.builder2("Analysis-performAnalysisTask");
try {
instrumentation.metric3("contextId", _contextId);
- AnalysisResult result = basis.performAnalysisTask();
+ AnalysisResult result = _basis.performAnalysisTask();
if (result.changeNotices != null) {
instrumentation.metric2("ChangeNotice-count", result.changeNotices.length);
}
@@ -6375,14 +6367,14 @@
}
void recordLibraryElements(Map<Source, LibraryElement> elementMap) {
- basis.recordLibraryElements(elementMap);
+ _basis.recordLibraryElements(elementMap);
}
CompilationUnit resolveCompilationUnit(Source unitSource, LibraryElement library) {
InstrumentationBuilder instrumentation = Instrumentation.builder2("Analysis-resolveCompilationUnit");
try {
instrumentation.metric3("contextId", _contextId);
- return basis.resolveCompilationUnit(unitSource, library);
+ return _basis.resolveCompilationUnit(unitSource, library);
} on AnalysisException catch (e) {
recordAnalysisException(instrumentation, e);
throw e;
@@ -6395,7 +6387,7 @@
InstrumentationBuilder instrumentation = Instrumentation.builder2("Analysis-resolveCompilationUnit");
try {
instrumentation.metric3("contextId", _contextId);
- return basis.resolveCompilationUnit2(unitSource, librarySource);
+ return _basis.resolveCompilationUnit2(unitSource, librarySource);
} on AnalysisException catch (e) {
recordAnalysisException(instrumentation, e);
throw e;
@@ -6408,7 +6400,7 @@
InstrumentationBuilder instrumentation = Instrumentation.builder2("Analysis-resolveHtmlUnit");
try {
instrumentation.metric3("contextId", _contextId);
- return basis.resolveHtmlUnit(htmlSource);
+ return _basis.resolveHtmlUnit(htmlSource);
} on AnalysisException catch (e) {
recordAnalysisException(instrumentation, e);
throw e;
@@ -6421,7 +6413,7 @@
InstrumentationBuilder instrumentation = Instrumentation.builder2("Analysis-setAnalysisOptions");
try {
instrumentation.metric3("contextId", _contextId);
- basis.analysisOptions = options;
+ _basis.analysisOptions = options;
} finally {
instrumentation.log();
}
@@ -6431,7 +6423,7 @@
InstrumentationBuilder instrumentation = Instrumentation.builder2("Analysis-setAnalysisPriorityOrder");
try {
instrumentation.metric3("contextId", _contextId);
- basis.analysisPriorityOrder = sources;
+ _basis.analysisPriorityOrder = sources;
} finally {
instrumentation.log();
}
@@ -6441,7 +6433,7 @@
InstrumentationBuilder instrumentation = Instrumentation.builder2("Analysis-setChangedContents");
try {
instrumentation.metric3("contextId", _contextId);
- basis.setChangedContents(source, contents, offset, oldLength, newLength);
+ _basis.setChangedContents(source, contents, offset, oldLength, newLength);
} finally {
instrumentation.log();
}
@@ -6451,7 +6443,7 @@
InstrumentationBuilder instrumentation = Instrumentation.builder2("Analysis-setContents");
try {
instrumentation.metric3("contextId", _contextId);
- basis.setContents(source, contents);
+ _basis.setContents(source, contents);
} finally {
instrumentation.log();
}
@@ -6461,7 +6453,7 @@
InstrumentationBuilder instrumentation = Instrumentation.builder2("Analysis-setSourceFactory");
try {
instrumentation.metric3("contextId", _contextId);
- basis.sourceFactory = factory;
+ _basis.sourceFactory = factory;
} finally {
instrumentation.log();
}
@@ -6471,7 +6463,7 @@
InstrumentationBuilder instrumentation = Instrumentation.builder2("Analysis-sourcesToResolve");
try {
instrumentation.metric3("contextId", _contextId);
- return basis.sourcesToResolve(changedSources);
+ return _basis.sourcesToResolve(changedSources);
} finally {
instrumentation.log();
}
@@ -6570,6 +6562,15 @@
AnalysisContentStatistics get statistics;
/**
+ * Returns a type provider for this context or throws an exception if dart:core cannot be
+ * resolved.
+ *
+ * @return the type provider (not `null`)
+ * @throws AnalysisException if dart:core cannot be resolved
+ */
+ TypeProvider get typeProvider;
+
+ /**
* Return a time-stamped fully-resolved compilation unit for the given source in the given
* library.
*
@@ -6837,12 +6838,12 @@
/**
* The modification time of the source from which the data was created.
*/
- int modificationTime = 0;
+ final int modificationTime;
/**
* The data that was created from the source.
*/
- E data;
+ final E data;
/**
* Initialize a newly created holder to hold the given values.
@@ -6850,10 +6851,7 @@
* @param modificationTime the modification time of the source from which the data was created
* @param unit the data that was created from the source
*/
- TimestampedData(int modificationTime, E data) {
- this.modificationTime = modificationTime;
- this.data = data;
- }
+ TimestampedData(this.modificationTime, this.data);
}
/**
@@ -6864,22 +6862,20 @@
/**
* The context in which the task is to be performed.
*/
- InternalAnalysisContext context;
+ final InternalAnalysisContext context;
/**
* The exception that was thrown while performing this task, or `null` if the task completed
* successfully.
*/
- AnalysisException exception;
+ AnalysisException _thrownException;
/**
* Initialize a newly created task to perform analysis within the given context.
*
* @param context the context in which the task is to be performed
*/
- AnalysisTask(InternalAnalysisContext context) {
- this.context = context;
- }
+ AnalysisTask(this.context);
/**
* Use the given visitor to visit this task.
@@ -6891,6 +6887,14 @@
accept(AnalysisTaskVisitor visitor);
/**
+ * Return the exception that was thrown while performing this task, or `null` if the task
+ * completed successfully.
+ *
+ * @return the exception that was thrown while performing this task
+ */
+ AnalysisException get exception => _thrownException;
+
+ /**
* Perform this analysis task and use the given visitor to visit this task after it has completed.
*
* @param visitor the visitor used to visit this task after it has completed
@@ -6901,7 +6905,7 @@
try {
safelyPerform();
} on AnalysisException catch (exception) {
- this.exception = exception;
+ _thrownException = exception;
AnalysisEngine.instance.logger.logInformation2("Task failed: ${taskDescription}", exception);
}
return accept(visitor);
@@ -7027,22 +7031,22 @@
/**
* The source for which errors and warnings are to be produced.
*/
- Source source;
+ final Source source;
/**
* The element model for the library containing the source.
*/
- LibraryElement libraryElement;
+ final LibraryElement libraryElement;
/**
* The time at which the contents of the source were last modified.
*/
- int modificationTime = -1;
+ int _modificationTime = -1;
/**
* The errors that were generated for the source.
*/
- List<AnalysisError> errors;
+ List<AnalysisError> _errors;
/**
* Initialize a newly created task to perform analysis within the given context.
@@ -7051,13 +7055,25 @@
* @param source the source for which errors and warnings are to be produced
* @param libraryElement the element model for the library containing the source
*/
- GenerateDartErrorsTask(InternalAnalysisContext context, Source source, LibraryElement libraryElement) : super(context) {
- this.source = source;
- this.libraryElement = libraryElement;
- }
+ GenerateDartErrorsTask(InternalAnalysisContext context, this.source, this.libraryElement) : super(context);
accept(AnalysisTaskVisitor visitor) => visitor.visitGenerateDartErrorsTask(this);
+ /**
+ * Return the errors that were generated for the source.
+ *
+ * @return the errors that were generated for the source
+ */
+ List<AnalysisError> get errors => _errors;
+
+ /**
+ * Return the time at which the contents of the source that was verified were last modified, or a
+ * negative value if the task has not yet been performed or if an exception occurred.
+ *
+ * @return the time at which the contents of the source that was verified were last modified
+ */
+ int get modificationTime => _modificationTime;
+
String get taskDescription => "generate errors and warnings for ${source.fullName}";
void internalPerform() {
@@ -7065,18 +7081,16 @@
TimestampedData<CompilationUnit> data = context.internalResolveCompilationUnit(source, libraryElement);
TimeCounter_TimeCounterHandle timeCounter = PerformanceStatistics.errors.start();
try {
- modificationTime = data.modificationTime;
+ _modificationTime = data.modificationTime;
CompilationUnit unit = data.data;
RecordingErrorListener errorListener = new RecordingErrorListener();
ErrorReporter errorReporter = new ErrorReporter(errorListener, source);
- Source coreSource = context.sourceFactory.forUri(DartSdk.DART_CORE);
- LibraryElement coreLibrary = context.getLibraryElement(coreSource);
- TypeProvider typeProvider = new TypeProviderImpl(coreLibrary);
+ TypeProvider typeProvider = context.typeProvider;
ConstantVerifier constantVerifier = new ConstantVerifier(errorReporter, typeProvider);
unit.accept(constantVerifier);
ErrorVerifier errorVerifier = new ErrorVerifier(errorReporter, libraryElement, typeProvider, new InheritanceManager(libraryElement));
unit.accept(errorVerifier);
- errors = errorListener.getErrors2(source);
+ _errors = errorListener.getErrors2(source);
} finally {
timeCounter.stop();
}
@@ -7090,13 +7104,13 @@
/**
* The element model for the library being analyzed.
*/
- LibraryElement libraryElement;
+ final LibraryElement libraryElement;
/**
* A table mapping the sources that were analyzed to the hints that were generated for the
* sources.
*/
- Map<Source, TimestampedData<List<AnalysisError>>> hintMap;
+ Map<Source, TimestampedData<List<AnalysisError>>> _hintMap;
/**
* Initialize a newly created task to perform analysis within the given context.
@@ -7104,12 +7118,20 @@
* @param context the context in which the task is to be performed
* @param libraryElement the element model for the library being analyzed
*/
- GenerateDartHintsTask(InternalAnalysisContext context, LibraryElement libraryElement) : super(context) {
- this.libraryElement = libraryElement;
- }
+ GenerateDartHintsTask(InternalAnalysisContext context, this.libraryElement) : super(context);
accept(AnalysisTaskVisitor visitor) => visitor.visitGenerateDartHintsTask(this);
+ /**
+ * Return a table mapping the sources that were analyzed to the hints that were generated for the
+ * sources, or `null` if the task has not been performed or if the analysis did not complete
+ * normally.
+ *
+ * @return a table mapping the sources that were analyzed to the hints that were generated for the
+ * sources
+ */
+ Map<Source, TimestampedData<List<AnalysisError>>> get hintMap => _hintMap;
+
String get taskDescription {
Source librarySource = libraryElement.source;
if (librarySource == null) {
@@ -7144,12 +7166,12 @@
}
HintGenerator hintGenerator = new HintGenerator(compilationUnits, context, errorListener);
hintGenerator.generateForLibrary();
- hintMap = new Map<Source, TimestampedData<List<AnalysisError>>>();
+ _hintMap = new Map<Source, TimestampedData<List<AnalysisError>>>();
for (MapEntry<Source, TimestampedData<CompilationUnit>> entry in getMapEntrySet(timestampMap)) {
Source source = entry.getKey();
TimestampedData<CompilationUnit> unitData = entry.getValue();
List<AnalysisError> errors = errorListener.getErrors2(source);
- hintMap[source] = new TimestampedData<List<AnalysisError>>(unitData.modificationTime, errors);
+ _hintMap[source] = new TimestampedData<List<AnalysisError>>(unitData.modificationTime, errors);
}
}
@@ -7170,12 +7192,12 @@
/**
* The information used to perform incremental analysis.
*/
- IncrementalAnalysisCache cache;
+ final IncrementalAnalysisCache cache;
/**
* The compilation unit that was produced by incrementally updating the existing unit.
*/
- CompilationUnit compilationUnit;
+ CompilationUnit _updatedUnit;
/**
* Initialize a newly created task to perform analysis within the given context.
@@ -7183,13 +7205,20 @@
* @param context the context in which the task is to be performed
* @param cache the incremental analysis cache used to perform the analysis
*/
- IncrementalAnalysisTask(InternalAnalysisContext context, IncrementalAnalysisCache cache) : super(context) {
- this.cache = cache;
- }
+ IncrementalAnalysisTask(InternalAnalysisContext context, this.cache) : super(context);
accept(AnalysisTaskVisitor visitor) => visitor.visitIncrementalAnalysisTask(this);
/**
+ * Return the compilation unit that was produced by incrementally updating the existing
+ * compilation unit, or `null` if the task has not yet been performed, could not be
+ * performed, or if an exception occurred.
+ *
+ * @return the compilation unit
+ */
+ CompilationUnit get compilationUnit => _updatedUnit;
+
+ /**
* Return the source that is to be incrementally analyzed.
*
* @return the source
@@ -7202,7 +7231,42 @@
if (cache == null) {
return;
}
- compilationUnit = cache.resolvedUnit;
+ if (cache.oldLength > 0 || cache.newLength > 30) {
+ return;
+ }
+ CharacterReader reader = new CharSequenceReader(new CharSequence(cache.newContents));
+ BooleanErrorListener errorListener = new BooleanErrorListener();
+ IncrementalScanner scanner = new IncrementalScanner(cache.source, reader, errorListener);
+ scanner.rescan(cache.resolvedUnit.beginToken, cache.offset, cache.oldLength, cache.newLength);
+ if (errorListener.errorReported) {
+ return;
+ }
+ IncrementalParser parser = new IncrementalParser(cache.source, scanner.tokenMap, AnalysisErrorListener.NULL_LISTENER);
+ _updatedUnit = parser.reparse(cache.resolvedUnit, scanner.leftToken, scanner.rightToken, cache.offset, cache.offset + cache.oldLength);
+ TypeProvider typeProvider = this.typeProvider;
+ if (_updatedUnit != null && typeProvider != null) {
+ CompilationUnitElement element = _updatedUnit.element;
+ if (element != null) {
+ LibraryElement library = element.library;
+ if (library != null) {
+ IncrementalResolver resolver = new IncrementalResolver(library, cache.source, typeProvider, errorListener);
+ resolver.resolve(parser.updatedNode);
+ }
+ }
+ }
+ }
+
+ /**
+ * Return the type provider used for incremental resolution.
+ *
+ * @return the type provider (or `null` if an exception occurs)
+ */
+ TypeProvider get typeProvider {
+ try {
+ return context.typeProvider;
+ } on AnalysisException catch (exception) {
+ return null;
+ }
}
}
@@ -7213,27 +7277,27 @@
/**
* The source to be parsed.
*/
- Source source;
+ final Source source;
/**
* The time at which the contents of the source were last modified.
*/
- int modificationTime = -1;
+ int _modificationTime = -1;
/**
* The line information that was produced.
*/
- LineInfo lineInfo;
+ LineInfo _lineInfo;
/**
* The compilation unit that was produced by parsing the source.
*/
- CompilationUnit compilationUnit;
+ CompilationUnit _unit;
/**
* The errors that were produced by scanning and parsing the source.
*/
- List<AnalysisError> errors = AnalysisError.NO_ERRORS;
+ List<AnalysisError> _errors = AnalysisError.NO_ERRORS;
/**
* A flag indicating whether the source contains a 'part of' directive.
@@ -7266,13 +7330,27 @@
* @param context the context in which the task is to be performed
* @param source the source to be parsed
*/
- ParseDartTask(InternalAnalysisContext context, Source source) : super(context) {
- this.source = source;
- }
+ ParseDartTask(InternalAnalysisContext context, this.source) : super(context);
accept(AnalysisTaskVisitor visitor) => visitor.visitParseDartTask(this);
/**
+ * Return the compilation unit that was produced by parsing the source, or `null` if the
+ * task has not yet been performed or if an exception occurred.
+ *
+ * @return the compilation unit that was produced by parsing the source
+ */
+ CompilationUnit get compilationUnit => _unit;
+
+ /**
+ * Return the errors that were produced by scanning and parsing the source, or `null` if the
+ * task has not yet been performed or if an exception occurred.
+ *
+ * @return the errors that were produced by scanning and parsing the source
+ */
+ List<AnalysisError> get errors => _errors;
+
+ /**
* Return an array containing the sources referenced by 'export' directives, or an empty array if
* the task has not yet been performed or if an exception occurred.
*
@@ -7297,6 +7375,22 @@
List<Source> get includedSources => toArray(_includedSources);
/**
+ * Return the line information that was produced, or `null` if the task has not yet been
+ * performed or if an exception occurred.
+ *
+ * @return the line information that was produced
+ */
+ LineInfo get lineInfo => _lineInfo;
+
+ /**
+ * Return the time at which the contents of the source that was parsed were last modified, or a
+ * negative value if the task has not yet been performed or if an exception occurred.
+ *
+ * @return the time at which the contents of the source that was parsed were last modified
+ */
+ int get modificationTime => _modificationTime;
+
+ /**
* Return `true` if the source contains a 'library' directive, or `false` if the task
* has not yet been performed or if an exception occurred.
*
@@ -7328,7 +7422,7 @@
try {
source.getContents(receiver);
} on JavaException catch (exception) {
- modificationTime = source.modificationStamp;
+ _modificationTime = source.modificationStamp;
throw new AnalysisException.con3(exception);
}
} finally {
@@ -7337,9 +7431,10 @@
TimeCounter_TimeCounterHandle timeCounterParse = PerformanceStatistics.parse.start();
try {
Parser parser = new Parser(source, errorListener);
- compilationUnit = parser.parseCompilationUnit(token[0]);
- errors = errorListener.getErrors2(source);
- for (Directive directive in compilationUnit.directives) {
+ parser.parseFunctionBodies = context.analysisOptions.analyzeFunctionBodies;
+ _unit = parser.parseCompilationUnit(token[0]);
+ _errors = errorListener.getErrors2(source);
+ for (Directive directive in _unit.directives) {
if (directive is ExportDirective) {
Source exportSource = resolveSource(source, directive as ExportDirective);
if (exportSource != null) {
@@ -7361,7 +7456,7 @@
_hasPartOfDirective2 = true;
}
}
- compilationUnit.lineInfo = lineInfo;
+ _unit.lineInfo = _lineInfo;
} finally {
timeCounterParse.stop();
}
@@ -7418,17 +7513,19 @@
Source_ContentReceiver_11(this.ParseDartTask_this, this.errorListener, this.token);
void accept(CharBuffer contents, int modificationTime) {
- ParseDartTask_this.modificationTime = modificationTime;
- Scanner scanner = new Scanner(ParseDartTask_this.source, new CharSequenceReader(contents), errorListener);
- token[0] = scanner.tokenize();
- ParseDartTask_this.lineInfo = new LineInfo(scanner.lineStarts);
+ doScan(contents, modificationTime);
}
void accept2(String contents, int modificationTime) {
- ParseDartTask_this.modificationTime = modificationTime;
- Scanner scanner = new Scanner(ParseDartTask_this.source, new CharSequenceReader(new CharSequence(contents)), errorListener);
+ doScan(new CharSequence(contents), modificationTime);
+ }
+
+ void doScan(CharSequence contents, int modificationTime) {
+ ParseDartTask_this._modificationTime = modificationTime;
+ Scanner scanner = new Scanner(ParseDartTask_this.source, new CharSequenceReader(contents), errorListener);
+ scanner.preserveComments = ParseDartTask_this.context.analysisOptions.preserveComments;
token[0] = scanner.tokenize();
- ParseDartTask_this.lineInfo = new LineInfo(scanner.lineStarts);
+ ParseDartTask_this._lineInfo = new LineInfo(scanner.lineStarts);
}
}
@@ -7439,32 +7536,32 @@
/**
* The source to be parsed.
*/
- Source source;
+ final Source source;
/**
* The time at which the contents of the source were last modified.
*/
- int modificationTime = -1;
+ int _modificationTime = -1;
/**
* The line information that was produced.
*/
- LineInfo lineInfo;
+ LineInfo _lineInfo;
/**
* The HTML unit that was produced by parsing the source.
*/
- HtmlUnit htmlUnit;
+ HtmlUnit _unit;
/**
* The errors that were produced by scanning and parsing the source.
*/
- List<AnalysisError> errors = AnalysisError.NO_ERRORS;
+ List<AnalysisError> _errors = AnalysisError.NO_ERRORS;
/**
* An array containing the sources of the libraries that are referenced within the HTML.
*/
- List<Source> referencedLibraries = Source.EMPTY_ARRAY;
+ List<Source> _referencedLibraries = Source.EMPTY_ARRAY;
/**
* The name of the 'src' attribute in a HTML tag.
@@ -7493,12 +7590,48 @@
* @param context the context in which the task is to be performed
* @param source the source to be parsed
*/
- ParseHtmlTask(InternalAnalysisContext context, Source source) : super(context) {
- this.source = source;
- }
+ ParseHtmlTask(InternalAnalysisContext context, this.source) : super(context);
accept(AnalysisTaskVisitor visitor) => visitor.visitParseHtmlTask(this);
+ /**
+ * Return the errors that were produced by scanning and parsing the source, or `null` if the
+ * task has not yet been performed or if an exception occurred.
+ *
+ * @return the errors that were produced by scanning and parsing the source
+ */
+ List<AnalysisError> get errors => _errors;
+
+ /**
+ * Return the HTML unit that was produced by parsing the source.
+ *
+ * @return the HTML unit that was produced by parsing the source
+ */
+ HtmlUnit get htmlUnit => _unit;
+
+ /**
+ * Return the line information that was produced, or `null` if the task has not yet been
+ * performed or if an exception occurred.
+ *
+ * @return the line information that was produced
+ */
+ LineInfo get lineInfo => _lineInfo;
+
+ /**
+ * Return the time at which the contents of the source that was parsed were last modified, or a
+ * negative value if the task has not yet been performed or if an exception occurred.
+ *
+ * @return the time at which the contents of the source that was parsed were last modified
+ */
+ int get modificationTime => _modificationTime;
+
+ /**
+ * Return an array containing the sources of the libraries that are referenced within the HTML.
+ *
+ * @return the sources of the libraries that are referenced within the HTML
+ */
+ List<Source> get referencedLibraries => _referencedLibraries;
+
String get taskDescription {
if (source == null) {
return "parse as html null source";
@@ -7514,13 +7647,13 @@
throw new AnalysisException.con3(exception);
}
HtmlScanResult scannerResult = scanner.result;
- modificationTime = scannerResult.modificationTime;
- lineInfo = new LineInfo(scannerResult.lineStarts);
+ _modificationTime = scannerResult.modificationTime;
+ _lineInfo = new LineInfo(scannerResult.lineStarts);
RecordingErrorListener errorListener = new RecordingErrorListener();
HtmlParseResult result = new HtmlParser(source, errorListener).parse(scannerResult);
- htmlUnit = result.htmlUnit;
- errors = errorListener.getErrors2(source);
- referencedLibraries = librarySources;
+ _unit = result.htmlUnit;
+ _errors = errorListener.getErrors2(source);
+ _referencedLibraries = librarySources;
}
/**
@@ -7530,7 +7663,7 @@
*/
List<Source> get librarySources {
List<Source> libraries = new List<Source>();
- htmlUnit.accept(new RecursiveXmlVisitor_12(this, libraries));
+ _unit.accept(new RecursiveXmlVisitor_12(this, libraries));
if (libraries.isEmpty) {
return Source.EMPTY_ARRAY;
}
@@ -7574,17 +7707,17 @@
/**
* The source representing the file whose compilation unit is to be returned.
*/
- Source unitSource;
+ final Source unitSource;
/**
* The source representing the library to be resolved.
*/
- Source librarySource;
+ final Source librarySource;
/**
* The library resolver holding information about the libraries that were resolved.
*/
- LibraryResolver libraryResolver;
+ LibraryResolver _resolver;
/**
* Initialize a newly created task to perform analysis within the given context.
@@ -7593,13 +7726,17 @@
* @param unitSource the source representing the file whose compilation unit is to be returned
* @param librarySource the source representing the library to be resolved
*/
- ResolveDartLibraryTask(InternalAnalysisContext context, Source unitSource, Source librarySource) : super(context) {
- this.unitSource = unitSource;
- this.librarySource = librarySource;
- }
+ ResolveDartLibraryTask(InternalAnalysisContext context, this.unitSource, this.librarySource) : super(context);
accept(AnalysisTaskVisitor visitor) => visitor.visitResolveDartLibraryTask(this);
+ /**
+ * Return the library resolver holding information about the libraries that were resolved.
+ *
+ * @return the library resolver holding information about the libraries that were resolved
+ */
+ LibraryResolver get libraryResolver => _resolver;
+
String get taskDescription {
if (librarySource == null) {
return "resolve library null source";
@@ -7608,8 +7745,8 @@
}
void internalPerform() {
- libraryResolver = new LibraryResolver(context);
- libraryResolver.resolveLibrary(librarySource, true);
+ _resolver = new LibraryResolver(context);
+ _resolver.resolveLibrary(librarySource, true);
}
}
@@ -7621,7 +7758,7 @@
/**
* The source that is to be resolved.
*/
- Source source;
+ final Source source;
/**
* The element model for the library containing the source.
@@ -7631,12 +7768,12 @@
/**
* The time at which the contents of the source were last modified.
*/
- int modificationTime = -1;
+ int _modificationTime = -1;
/**
* The compilation unit that was resolved by this task.
*/
- CompilationUnit resolvedUnit;
+ CompilationUnit _resolvedUnit;
/**
* Initialize a newly created task to perform analysis within the given context.
@@ -7645,8 +7782,7 @@
* @param source the source to be parsed
* @param libraryElement the element model for the library containing the source
*/
- ResolveDartUnitTask(InternalAnalysisContext context, Source source, LibraryElement libraryElement) : super(context) {
- this.source = source;
+ ResolveDartUnitTask(InternalAnalysisContext context, this.source, LibraryElement libraryElement) : super(context) {
this._libraryElement = libraryElement;
}
@@ -7659,6 +7795,21 @@
*/
Source get librarySource => _libraryElement.source;
+ /**
+ * Return the time at which the contents of the source that was parsed were last modified, or a
+ * negative value if the task has not yet been performed or if an exception occurred.
+ *
+ * @return the time at which the contents of the source that was parsed were last modified
+ */
+ int get modificationTime => _modificationTime;
+
+ /**
+ * Return the compilation unit that was resolved by this task.
+ *
+ * @return the compilation unit that was resolved by this task
+ */
+ CompilationUnit get resolvedUnit => _resolvedUnit;
+
String get taskDescription {
Source librarySource = _libraryElement.source;
if (librarySource == null) {
@@ -7668,11 +7819,9 @@
}
void internalPerform() {
- Source coreLibrarySource = _libraryElement.context.sourceFactory.forUri(DartSdk.DART_CORE);
- LibraryElement coreElement = context.computeLibraryElement(coreLibrarySource);
- TypeProvider typeProvider = new TypeProviderImpl(coreElement);
+ TypeProvider typeProvider = (_libraryElement.context as InternalAnalysisContext).typeProvider;
ResolvableCompilationUnit resolvableUnit = context.computeResolvableCompilationUnit(source);
- modificationTime = resolvableUnit.modificationTime;
+ _modificationTime = resolvableUnit.modificationTime;
CompilationUnit unit = resolvableUnit.compilationUnit;
if (unit == null) {
throw new AnalysisException.con1("Internal error: computeResolvableCompilationUnit returned a value without a parsed Dart unit");
@@ -7699,7 +7848,7 @@
} finally {
counterHandleErrors.stop();
}
- resolvedUnit = unit;
+ _resolvedUnit = unit;
}
/**
@@ -7732,22 +7881,22 @@
/**
* The source to be resolved.
*/
- Source source;
+ final Source source;
/**
* The time at which the contents of the source were last modified.
*/
- int modificationTime = -1;
+ int _modificationTime = -1;
/**
* The element produced by resolving the source.
*/
- HtmlElement element = null;
+ HtmlElement _element = null;
/**
* The resolution errors that were discovered while resolving the source.
*/
- List<AnalysisError> resolutionErrors = AnalysisError.NO_ERRORS;
+ List<AnalysisError> _resolutionErrors = AnalysisError.NO_ERRORS;
/**
* Initialize a newly created task to perform analysis within the given context.
@@ -7755,12 +7904,22 @@
* @param context the context in which the task is to be performed
* @param source the source to be resolved
*/
- ResolveHtmlTask(InternalAnalysisContext context, Source source) : super(context) {
- this.source = source;
- }
+ ResolveHtmlTask(InternalAnalysisContext context, this.source) : super(context);
accept(AnalysisTaskVisitor visitor) => visitor.visitResolveHtmlTask(this);
+ HtmlElement get element => _element;
+
+ /**
+ * Return the time at which the contents of the source that was parsed were last modified, or a
+ * negative value if the task has not yet been performed or if an exception occurred.
+ *
+ * @return the time at which the contents of the source that was parsed were last modified
+ */
+ int get modificationTime => _modificationTime;
+
+ List<AnalysisError> get resolutionErrors => _resolutionErrors;
+
String get taskDescription {
if (source == null) {
return "resolve as html null source";
@@ -7774,10 +7933,10 @@
if (unit == null) {
throw new AnalysisException.con1("Internal error: computeResolvableHtmlUnit returned a value without a parsed HTML unit");
}
- modificationTime = resolvableHtmlUnit.modificationTime;
+ _modificationTime = resolvableHtmlUnit.modificationTime;
HtmlUnitBuilder builder = new HtmlUnitBuilder(context);
- element = builder.buildHtmlElement2(source, modificationTime, unit);
- resolutionErrors = builder.errorListener.getErrors2(source);
+ _element = builder.buildHtmlElement2(source, _modificationTime, unit);
+ _resolutionErrors = builder.errorListener.getErrors2(source);
}
}
diff --git a/pkg/analyzer/lib/src/generated/error.dart b/pkg/analyzer/lib/src/generated/error.dart
index 804608e..0b80972 100644
--- a/pkg/analyzer/lib/src/generated/error.dart
+++ b/pkg/analyzer/lib/src/generated/error.dart
@@ -43,12 +43,12 @@
/**
* The name of the severity used when producing machine output.
*/
- String machineCode;
+ final String machineCode;
/**
* The name of the severity used when producing readable output.
*/
- String displayName;
+ final String displayName;
/**
* Initialize a newly created severity with the given names.
@@ -56,10 +56,7 @@
* @param machineCode the name of the severity used when producing machine output
* @param displayName the name of the severity used when producing readable output
*/
- ErrorSeverity(String name, int ordinal, String machineCode, String displayName) : super(name, ordinal) {
- this.machineCode = machineCode;
- this.displayName = displayName;
- }
+ ErrorSeverity(String name, int ordinal, this.machineCode, this.displayName) : super(name, ordinal);
/**
* Return the severity constant that represents the greatest severity.
@@ -122,10 +119,17 @@
/**
* A flag indicating whether an error has been reported to this listener.
*/
- bool errorReported = false;
+ bool _errorReported = false;
+
+ /**
+ * Return `true` if an error has been reported to this listener.
+ *
+ * @return `true` if an error has been reported to this listener
+ */
+ bool get errorReported => _errorReported;
void onError(AnalysisError error) {
- errorReported = true;
+ _errorReported = true;
}
}
@@ -282,18 +286,18 @@
/**
* The error code associated with the error.
*/
- ErrorCode errorCode;
+ final ErrorCode errorCode;
/**
* The localized error message.
*/
- String message;
+ String _message;
/**
* The correction to be displayed for this error, or `null` if there is no correction
* information for this error.
*/
- String correction;
+ String _correction;
/**
* The source in which the error occurred, or `null` if unknown.
@@ -303,13 +307,13 @@
/**
* The character offset from the beginning of the source (zero based) where the error occurred.
*/
- int offset = 0;
+ int _offset = 0;
/**
* The number of characters from the offset to the end of the source which encompasses the
* compilation error.
*/
- int length = 0;
+ int _length = 0;
/**
* A flag indicating whether this error can be shown to be a non-issue because of the result of
@@ -325,10 +329,8 @@
* @param errorCode the error code to be associated with this error
* @param arguments the arguments used to build the error message
*/
- AnalysisError.con1(Source source, ErrorCode errorCode, List<Object> arguments) {
- this.source = source;
- this.errorCode = errorCode;
- this.message = JavaString.format(errorCode.message, arguments);
+ AnalysisError.con1(this.source, this.errorCode, List<Object> arguments) {
+ this._message = JavaString.format(errorCode.message, arguments);
}
/**
@@ -340,15 +342,13 @@
* @param errorCode the error code to be associated with this error
* @param arguments the arguments used to build the error message
*/
- AnalysisError.con2(Source source, int offset, int length, ErrorCode errorCode, List<Object> arguments) {
- this.source = source;
- this.offset = offset;
- this.length = length;
- this.errorCode = errorCode;
- this.message = JavaString.format(errorCode.message, arguments);
+ AnalysisError.con2(this.source, int offset, int length, this.errorCode, List<Object> arguments) {
+ this._offset = offset;
+ this._length = length;
+ this._message = JavaString.format(errorCode.message, arguments);
String correctionTemplate = errorCode.correction;
if (correctionTemplate != null) {
- this.correction = JavaString.format(correctionTemplate, arguments);
+ this._correction = JavaString.format(correctionTemplate, arguments);
}
}
@@ -363,13 +363,13 @@
if (errorCode != other.errorCode) {
return false;
}
- if (offset != other.offset || length != other.length) {
+ if (_offset != other._offset || _length != other._length) {
return false;
}
if (isStaticOnly != other.isStaticOnly) {
return false;
}
- if (message != other.message) {
+ if (_message != other._message) {
return false;
}
if (source != other.source) {
@@ -379,6 +379,38 @@
}
/**
+ * Return the correction to be displayed for this error, or `null` if there is no correction
+ * information for this error. The correction should indicate how the user can fix the error.
+ *
+ * @return the template used to create the correction to be displayed for this error
+ */
+ String get correction => _correction;
+
+ /**
+ * Return the number of characters from the offset to the end of the source which encompasses the
+ * compilation error.
+ *
+ * @return the length of the error location
+ */
+ int get length => _length;
+
+ /**
+ * Return the message to be displayed for this error. The message should indicate what is wrong
+ * and why it is wrong.
+ *
+ * @return the message to be displayed for this error
+ */
+ String get message => _message;
+
+ /**
+ * Return the character offset from the beginning of the source (zero based) where the error
+ * occurred.
+ *
+ * @return the offset to the start of the error location
+ */
+ int get offset => _offset;
+
+ /**
* Return the value of the given property, or `null` if the given property is not defined
* for this error.
*
@@ -388,8 +420,8 @@
Object getProperty(ErrorProperty property) => null;
int get hashCode {
- int hashCode = offset;
- hashCode ^= (message != null) ? message.hashCode : 0;
+ int hashCode = _offset;
+ hashCode ^= (_message != null) ? _message.hashCode : 0;
hashCode ^= (source != null) ? source.hashCode : 0;
return hashCode;
}
@@ -398,11 +430,11 @@
JavaStringBuilder builder = new JavaStringBuilder();
builder.append((source != null) ? source.fullName : "<unknown source>");
builder.append("(");
- builder.append(offset);
+ builder.append(_offset);
builder.append("..");
- builder.append(offset + length - 1);
+ builder.append(_offset + _length - 1);
builder.append("): ");
- builder.append(message);
+ builder.append(_message);
return builder.toString();
}
}
@@ -642,7 +674,7 @@
/**
* The template used to create the message to be displayed for this error.
*/
- String _message;
+ final String message;
/**
* The template used to create the correction to be displayed for this error, or `null` if
@@ -655,9 +687,7 @@
*
* @param message the message template used to create the message to be displayed for the error
*/
- HintCode.con1(String name, int ordinal, String message) : super(name, ordinal) {
- this._message = message;
- }
+ HintCode.con1(String name, int ordinal, this.message) : super(name, ordinal);
/**
* Initialize a newly created error code to have the given message and correction.
@@ -665,8 +695,7 @@
* @param message the template used to create the message to be displayed for the error
* @param correction the template used to create the correction to be displayed for the error
*/
- HintCode.con2(String name, int ordinal, String message, String correction) : super(name, ordinal) {
- this._message = message;
+ HintCode.con2(String name, int ordinal, this.message, String correction) : super(name, ordinal) {
this.correction3 = correction;
}
@@ -674,8 +703,6 @@
ErrorSeverity get errorSeverity => ErrorType.HINT.severity;
- String get message => _message;
-
ErrorType get type => ErrorType.HINT;
}
@@ -780,16 +807,14 @@
/**
* The severity of this type of error.
*/
- ErrorSeverity severity;
+ final ErrorSeverity severity;
/**
* Initialize a newly created error type to have the given severity.
*
* @param severity the severity of this type of error
*/
- ErrorType(String name, int ordinal, ErrorSeverity severity) : super(name, ordinal) {
- this.severity = severity;
- }
+ ErrorType(String name, int ordinal, this.severity) : super(name, ordinal);
String get displayName => name.toLowerCase().replaceAll('_', ' ');
}
@@ -2113,7 +2138,7 @@
/**
* The template used to create the message to be displayed for this error.
*/
- String _message;
+ final String message;
/**
* The template used to create the correction to be displayed for this error, or `null` if
@@ -2126,9 +2151,7 @@
*
* @param message the message template used to create the message to be displayed for the error
*/
- CompileTimeErrorCode.con1(String name, int ordinal, String message) : super(name, ordinal) {
- this._message = message;
- }
+ CompileTimeErrorCode.con1(String name, int ordinal, this.message) : super(name, ordinal);
/**
* Initialize a newly created error code to have the given message and correction.
@@ -2136,8 +2159,7 @@
* @param message the template used to create the message to be displayed for the error
* @param correction the template used to create the correction to be displayed for the error
*/
- CompileTimeErrorCode.con2(String name, int ordinal, String message, String correction) : super(name, ordinal) {
- this._message = message;
+ CompileTimeErrorCode.con2(String name, int ordinal, this.message, String correction) : super(name, ordinal) {
this.correction2 = correction;
}
@@ -2145,8 +2167,6 @@
ErrorSeverity get errorSeverity => ErrorType.COMPILE_TIME_ERROR.severity;
- String get message => _message;
-
ErrorType get type => ErrorType.COMPILE_TIME_ERROR;
}
@@ -2188,7 +2208,7 @@
/**
* The template used to create the message to be displayed for this error.
*/
- String _message;
+ final String message;
/**
* The template used to create the correction to be displayed for this error, or `null` if
@@ -2201,9 +2221,7 @@
*
* @param message the message template used to create the message to be displayed for the error
*/
- PubSuggestionCode.con1(String name, int ordinal, String message) : super(name, ordinal) {
- this._message = message;
- }
+ PubSuggestionCode.con1(String name, int ordinal, this.message) : super(name, ordinal);
/**
* Initialize a newly created error code to have the given message and correction.
@@ -2211,8 +2229,7 @@
* @param message the template used to create the message to be displayed for the error
* @param correction the template used to create the correction to be displayed for the error
*/
- PubSuggestionCode.con2(String name, int ordinal, String message, String correction) : super(name, ordinal) {
- this._message = message;
+ PubSuggestionCode.con2(String name, int ordinal, this.message, String correction) : super(name, ordinal) {
this.correction5 = correction;
}
@@ -2220,8 +2237,6 @@
ErrorSeverity get errorSeverity => ErrorType.PUB_SUGGESTION.severity;
- String get message => _message;
-
ErrorType get type => ErrorType.PUB_SUGGESTION;
}
@@ -3083,7 +3098,7 @@
/**
* The template used to create the message to be displayed for this error.
*/
- String _message;
+ final String message;
/**
* The template used to create the correction to be displayed for this error, or `null` if
@@ -3096,9 +3111,7 @@
*
* @param message the message template used to create the message to be displayed for the error
*/
- StaticWarningCode.con1(String name, int ordinal, String message) : super(name, ordinal) {
- this._message = message;
- }
+ StaticWarningCode.con1(String name, int ordinal, this.message) : super(name, ordinal);
/**
* Initialize a newly created error code to have the given message and correction.
@@ -3106,8 +3119,7 @@
* @param message the template used to create the message to be displayed for the error
* @param correction the template used to create the correction to be displayed for the error
*/
- StaticWarningCode.con2(String name, int ordinal, String message, String correction) : super(name, ordinal) {
- this._message = message;
+ StaticWarningCode.con2(String name, int ordinal, this.message, String correction) : super(name, ordinal) {
this.correction7 = correction;
}
@@ -3115,8 +3127,6 @@
ErrorSeverity get errorSeverity => ErrorType.STATIC_WARNING.severity;
- String get message => _message;
-
ErrorType get type => ErrorType.STATIC_WARNING;
}
@@ -3130,7 +3140,7 @@
/**
* An error listener that ignores errors that are reported to it.
*/
- static final AnalysisErrorListener _NULL_LISTENER = new AnalysisErrorListener_6();
+ static final AnalysisErrorListener NULL_LISTENER = new AnalysisErrorListener_6();
/**
* This method is invoked when an error has been found by the analysis engine.
@@ -3175,7 +3185,7 @@
/**
* The template used to create the message to be displayed for this error.
*/
- String _message;
+ final String message;
/**
* The template used to create the correction to be displayed for this error, or `null` if
@@ -3188,9 +3198,7 @@
*
* @param message the message template used to create the message to be displayed for the error
*/
- HtmlWarningCode.con1(String name, int ordinal, String message) : super(name, ordinal) {
- this._message = message;
- }
+ HtmlWarningCode.con1(String name, int ordinal, this.message) : super(name, ordinal);
/**
* Initialize a newly created error code to have the given message and correction.
@@ -3198,8 +3206,7 @@
* @param message the template used to create the message to be displayed for the error
* @param correction the template used to create the correction to be displayed for the error
*/
- HtmlWarningCode.con2(String name, int ordinal, String message, String correction) : super(name, ordinal) {
- this._message = message;
+ HtmlWarningCode.con2(String name, int ordinal, this.message, String correction) : super(name, ordinal) {
this.correction4 = correction;
}
@@ -3207,8 +3214,6 @@
ErrorSeverity get errorSeverity => ErrorSeverity.WARNING;
- String get message => _message;
-
ErrorType get type => ErrorType.STATIC_WARNING;
}
@@ -3507,7 +3512,7 @@
/**
* The template used to create the message to be displayed for this error.
*/
- String _message;
+ final String message;
/**
* The template used to create the correction to be displayed for this error, or `null` if
@@ -3520,9 +3525,7 @@
*
* @param message the message template used to create the message to be displayed for the error
*/
- StaticTypeWarningCode.con1(String name, int ordinal, String message) : super(name, ordinal) {
- this._message = message;
- }
+ StaticTypeWarningCode.con1(String name, int ordinal, this.message) : super(name, ordinal);
/**
* Initialize a newly created error code to have the given message and correction.
@@ -3530,8 +3533,7 @@
* @param message the template used to create the message to be displayed for the error
* @param correction the template used to create the correction to be displayed for the error
*/
- StaticTypeWarningCode.con2(String name, int ordinal, String message, String correction) : super(name, ordinal) {
- this._message = message;
+ StaticTypeWarningCode.con2(String name, int ordinal, this.message, String correction) : super(name, ordinal) {
this.correction6 = correction;
}
@@ -3539,7 +3541,5 @@
ErrorSeverity get errorSeverity => ErrorType.STATIC_TYPE_WARNING.severity;
- String get message => _message;
-
ErrorType get type => ErrorType.STATIC_TYPE_WARNING;
}
\ No newline at end of file
diff --git a/pkg/analyzer/lib/src/generated/html.dart b/pkg/analyzer/lib/src/generated/html.dart
index 3924cec..d373bbc 100644
--- a/pkg/analyzer/lib/src/generated/html.dart
+++ b/pkg/analyzer/lib/src/generated/html.dart
@@ -24,7 +24,7 @@
/**
* The offset from the beginning of the file to the first character in the token.
*/
- int offset = 0;
+ int _offset = 0;
/**
* The previous token in the token stream.
@@ -34,17 +34,17 @@
/**
* The next token in the token stream.
*/
- Token next;
+ Token _next;
/**
* The type of the token.
*/
- TokenType type;
+ TokenType _type;
/**
* The lexeme represented by this token.
*/
- String lexeme;
+ String _value;
/**
* Initialize a newly created token.
@@ -62,9 +62,9 @@
* @param value the lexeme represented by this token (not `null`)
*/
Token.con2(TokenType type, int offset, String value) {
- this.type = type;
- this.lexeme = StringUtilities.intern(value);
- this.offset = offset;
+ this._type = type;
+ this._value = StringUtilities.intern(value);
+ this._offset = offset;
}
/**
@@ -74,7 +74,7 @@
* @return the offset from the beginning of the file to the first character after last character
* of the token
*/
- int get end => offset + length;
+ int get end => _offset + length;
/**
* Return the number of characters in the node's source range.
@@ -84,6 +84,34 @@
int get length => lexeme.length;
/**
+ * Return the lexeme that represents this token.
+ *
+ * @return the lexeme (not `null`)
+ */
+ String get lexeme => _value;
+
+ /**
+ * Return the next token in the token stream.
+ *
+ * @return the next token in the token stream
+ */
+ Token get next => _next;
+
+ /**
+ * Return the offset from the beginning of the file to the first character in the token.
+ *
+ * @return the offset from the beginning of the file to the first character in the token
+ */
+ int get offset => _offset;
+
+ /**
+ * Answer the token type for the receiver.
+ *
+ * @return the token type (not `null`)
+ */
+ TokenType get type => _type;
+
+ /**
* Return `true` if this token is a synthetic token. A synthetic token is a token that was
* introduced by the parser in order to recover from an error in the code. Synthetic tokens always
* have a length of zero (`0`).
@@ -100,7 +128,7 @@
* @return the token that was passed in
*/
Token setNext(Token token) {
- next = token;
+ _next = token;
token.previous = this;
return token;
}
@@ -116,17 +144,17 @@
/**
* The offset of the first character of the opening delimiter.
*/
- int openingOffset = 0;
+ final int openingOffset;
/**
* The expression that is enclosed between the delimiters.
*/
- Expression expression;
+ final Expression expression;
/**
* The offset of the first character of the closing delimiter.
*/
- int closingOffset = 0;
+ final int closingOffset;
/**
* An empty array of embedded expressions.
@@ -140,11 +168,7 @@
* @param expression the expression that is enclosed between the delimiters
* @param closingOffset the offset of the first character of the closing delimiter
*/
- EmbeddedExpression(int openingOffset, Expression expression, int closingOffset) {
- this.openingOffset = openingOffset;
- this.expression = expression;
- this.closingOffset = closingOffset;
- }
+ EmbeddedExpression(this.openingOffset, this.expression, this.closingOffset);
}
/**
@@ -156,11 +180,18 @@
/**
* The unit containing the parsed information (not `null`).
*/
- HtmlUnit htmlUnit;
+ HtmlUnit _unit;
HtmlParseResult(int modificationTime, Token token, List<int> lineStarts, HtmlUnit unit) : super(modificationTime, token, lineStarts) {
- this.htmlUnit = unit;
+ this._unit = unit;
}
+
+ /**
+ * Answer the unit generated by parsing the source
+ *
+ * @return the unit (not `null`)
+ */
+ HtmlUnit get htmlUnit => _unit;
}
/**
@@ -171,7 +202,7 @@
/**
* The expressions that are embedded in the tag's content.
*/
- List<EmbeddedExpression> _expressions;
+ final List<EmbeddedExpression> expressions;
/**
* Initialize a newly created tag whose text content contains one or more embedded expressions.
@@ -186,11 +217,7 @@
* @param nodeEnd the last token in the tag
* @param expressions the expressions that are embedded in the value
*/
- TagWithEmbeddedExpressions(Token nodeStart, Token tag, List<XmlAttributeNode> attributes, Token attributeEnd, List<XmlTagNode> tagNodes, Token contentEnd, Token closingTag, Token nodeEnd, List<EmbeddedExpression> expressions) : super(nodeStart, tag, attributes, attributeEnd, tagNodes, contentEnd, closingTag, nodeEnd) {
- this._expressions = expressions;
- }
-
- List<EmbeddedExpression> get expressions => _expressions;
+ TagWithEmbeddedExpressions(Token nodeStart, Token tag, List<XmlAttributeNode> attributes, Token attributeEnd, List<XmlTagNode> tagNodes, Token contentEnd, Token closingTag, Token nodeEnd, this.expressions) : super(nodeStart, tag, attributes, attributeEnd, tagNodes, contentEnd, closingTag, nodeEnd);
}
/**
@@ -465,7 +492,7 @@
/**
* The expressions that are embedded in the attribute's value.
*/
- List<EmbeddedExpression> _expressions;
+ final List<EmbeddedExpression> expressions;
/**
* Initialize a newly created attribute whose value contains one or more embedded expressions.
@@ -475,11 +502,7 @@
* @param value the value of the attribute
* @param expressions the expressions that are embedded in the value
*/
- AttributeWithEmbeddedExpressions(Token name, Token equals, Token value, List<EmbeddedExpression> expressions) : super(name, equals, value) {
- this._expressions = expressions;
- }
-
- List<EmbeddedExpression> get expressions => _expressions;
+ AttributeWithEmbeddedExpressions(Token name, Token equals, Token value, this.expressions) : super(name, equals, value);
}
/**
@@ -510,7 +533,7 @@
/**
* The source being scanned.
*/
- Source source;
+ final Source source;
/**
* The token pointing to the head of the linked list of tokens.
@@ -537,8 +560,7 @@
*
* @param source the source being scanned
*/
- AbstractScanner(Source source) {
- this.source = source;
+ AbstractScanner(this.source) {
_tokens = new Token.con1(TokenType.EOF, -1);
_tokens.setNext(_tokens);
_tail = _tokens;
@@ -816,23 +838,19 @@
/**
* The time at which the contents of the source were last set.
*/
- int modificationTime = 0;
+ final int modificationTime;
/**
* The first token in the token stream (not `null`).
*/
- Token token;
+ final Token token;
/**
* The line start information that was produced.
*/
- List<int> lineStarts;
+ final List<int> lineStarts;
- HtmlScanResult(int modificationTime, Token token, List<int> lineStarts) {
- this.modificationTime = modificationTime;
- this.token = token;
- this.lineStarts = lineStarts;
- }
+ HtmlScanResult(this.modificationTime, this.token, this.lineStarts);
}
/**
@@ -1079,11 +1097,9 @@
* The lexeme that defines this type of token, or `null` if there is more than one possible
* lexeme for this type of token.
*/
- String lexeme;
+ final String lexeme;
- TokenType(String name, int ordinal, String lexeme) : super(name, ordinal) {
- this.lexeme = lexeme;
- }
+ TokenType(String name, int ordinal, this.lexeme) : super(name, ordinal);
}
class TokenType_EOF extends TokenType {
@@ -1098,11 +1114,11 @@
* @coverage dart.engine.html
*/
class XmlAttributeNode extends XmlNode {
- Token name;
+ final Token name;
- Token equals;
+ final Token equals;
- Token value;
+ final Token value;
/**
* Construct a new instance representing an XML attribute.
@@ -1112,11 +1128,7 @@
* @param equals the equals sign or `null` if none
* @param value the value token (not `null`)
*/
- XmlAttributeNode(Token name, Token equals, Token value) {
- this.name = name;
- this.equals = equals;
- this.value = value;
- }
+ XmlAttributeNode(this.name, this.equals, this.value);
accept(XmlVisitor visitor) => visitor.visitXmlAttributeNode(this);
@@ -1307,21 +1319,19 @@
/**
* The source being parsed.
*/
- Source source;
+ final Source source;
/**
* The next token to be parsed.
*/
- Token currentToken;
+ Token _currentToken;
/**
* Construct a parser for the specified source.
*
* @param source the source being parsed
*/
- XmlParser(Source source) {
- this.source = source;
- }
+ XmlParser(this.source);
/**
* Create a node representing an attribute.
@@ -1364,19 +1374,19 @@
* @return the list of tag nodes found (not `null`, contains no `null`)
*/
List<XmlTagNode> parseTopTagNodes(Token firstToken) {
- currentToken = firstToken;
+ _currentToken = firstToken;
List<XmlTagNode> tagNodes = new List<XmlTagNode>();
while (true) {
while (true) {
- if (currentToken.type == TokenType.LT) {
+ if (_currentToken.type == TokenType.LT) {
tagNodes.add(parseTagNode());
- } else if (currentToken.type == TokenType.DECLARATION || currentToken.type == TokenType.DIRECTIVE || currentToken.type == TokenType.COMMENT) {
- currentToken = currentToken.next;
- } else if (currentToken.type == TokenType.EOF) {
+ } else if (_currentToken.type == TokenType.DECLARATION || _currentToken.type == TokenType.DIRECTIVE || _currentToken.type == TokenType.COMMENT) {
+ _currentToken = _currentToken.next;
+ } else if (_currentToken.type == TokenType.EOF) {
return tagNodes;
} else {
reportUnexpectedToken();
- currentToken = currentToken.next;
+ _currentToken = _currentToken.next;
}
break;
}
@@ -1384,15 +1394,22 @@
}
/**
+ * Answer the current token.
+ *
+ * @return the current token
+ */
+ Token get currentToken => _currentToken;
+
+ /**
* Insert a synthetic token of the specified type before the current token
*
* @param type the type of token to be inserted (not `null`)
* @return the synthetic token that was inserted (not `null`)
*/
Token insertSyntheticToken(TokenType type) {
- Token token = new Token.con2(type, currentToken.offset, "");
- currentToken.previous.setNext(token);
- token.setNext(currentToken);
+ Token token = new Token.con2(type, _currentToken.offset, "");
+ _currentToken.previous.setNext(token);
+ token.setNext(_currentToken);
return token;
}
@@ -1403,20 +1420,20 @@
* @return the attribute (not `null`)
*/
XmlAttributeNode parseAttribute() {
- Token name = currentToken;
- currentToken = currentToken.next;
+ Token name = _currentToken;
+ _currentToken = _currentToken.next;
Token equals;
- if (identical(currentToken.type, TokenType.EQ)) {
- equals = currentToken;
- currentToken = currentToken.next;
+ if (identical(_currentToken.type, TokenType.EQ)) {
+ equals = _currentToken;
+ _currentToken = _currentToken.next;
} else {
reportUnexpectedToken();
equals = insertSyntheticToken(TokenType.EQ);
}
Token value;
- if (identical(currentToken.type, TokenType.STRING)) {
- value = currentToken;
- currentToken = currentToken.next;
+ if (identical(_currentToken.type, TokenType.STRING)) {
+ value = _currentToken;
+ _currentToken = _currentToken.next;
} else {
reportUnexpectedToken();
value = insertSyntheticToken(TokenType.STRING);
@@ -1431,20 +1448,20 @@
* @return a collection of zero or more attributes (not `null`, contains no `null`s)
*/
List<XmlAttributeNode> parseAttributes() {
- TokenType type = currentToken.type;
+ TokenType type = _currentToken.type;
if (identical(type, TokenType.GT) || identical(type, TokenType.SLASH_GT) || identical(type, TokenType.EOF)) {
return XmlTagNode.NO_ATTRIBUTES;
}
List<XmlAttributeNode> attributes = new List<XmlAttributeNode>();
while (true) {
while (true) {
- if (currentToken.type == TokenType.GT || currentToken.type == TokenType.SLASH_GT || currentToken.type == TokenType.EOF) {
+ if (_currentToken.type == TokenType.GT || _currentToken.type == TokenType.SLASH_GT || _currentToken.type == TokenType.EOF) {
return attributes;
- } else if (currentToken.type == TokenType.TAG) {
+ } else if (_currentToken.type == TokenType.TAG) {
attributes.add(parseAttribute());
} else {
reportUnexpectedToken();
- currentToken = currentToken.next;
+ _currentToken = _currentToken.next;
}
break;
}
@@ -1458,22 +1475,22 @@
* @return a list of nodes (not `null`, contains no `null`s)
*/
List<XmlTagNode> parseChildTagNodes() {
- TokenType type = currentToken.type;
+ TokenType type = _currentToken.type;
if (identical(type, TokenType.LT_SLASH) || identical(type, TokenType.EOF)) {
return XmlTagNode.NO_TAG_NODES;
}
List<XmlTagNode> nodes = new List<XmlTagNode>();
while (true) {
while (true) {
- if (currentToken.type == TokenType.LT) {
+ if (_currentToken.type == TokenType.LT) {
nodes.add(parseTagNode());
- } else if (currentToken.type == TokenType.LT_SLASH || currentToken.type == TokenType.EOF) {
+ } else if (_currentToken.type == TokenType.LT_SLASH || _currentToken.type == TokenType.EOF) {
return nodes;
- } else if (currentToken.type == TokenType.COMMENT) {
- currentToken = currentToken.next;
+ } else if (_currentToken.type == TokenType.COMMENT) {
+ _currentToken = _currentToken.next;
} else {
reportUnexpectedToken();
- currentToken = currentToken.next;
+ _currentToken = _currentToken.next;
}
break;
}
@@ -1487,49 +1504,49 @@
* @return the tag node or `null` if none found
*/
XmlTagNode parseTagNode() {
- Token nodeStart = currentToken;
- currentToken = currentToken.next;
+ Token nodeStart = _currentToken;
+ _currentToken = _currentToken.next;
Token tag;
- if (identical(currentToken.type, TokenType.TAG)) {
- tag = currentToken;
- currentToken = currentToken.next;
+ if (identical(_currentToken.type, TokenType.TAG)) {
+ tag = _currentToken;
+ _currentToken = _currentToken.next;
} else {
reportUnexpectedToken();
tag = insertSyntheticToken(TokenType.TAG);
}
List<XmlAttributeNode> attributes = parseAttributes();
Token attributeEnd;
- if (identical(currentToken.type, TokenType.GT) || identical(currentToken.type, TokenType.SLASH_GT)) {
- attributeEnd = currentToken;
- currentToken = currentToken.next;
+ if (identical(_currentToken.type, TokenType.GT) || identical(_currentToken.type, TokenType.SLASH_GT)) {
+ attributeEnd = _currentToken;
+ _currentToken = _currentToken.next;
} else {
reportUnexpectedToken();
attributeEnd = insertSyntheticToken(TokenType.SLASH_GT);
}
if (identical(attributeEnd.type, TokenType.SLASH_GT) || isSelfClosing(tag)) {
- return createTagNode(nodeStart, tag, attributes, attributeEnd, XmlTagNode.NO_TAG_NODES, currentToken, null, attributeEnd);
+ return createTagNode(nodeStart, tag, attributes, attributeEnd, XmlTagNode.NO_TAG_NODES, _currentToken, null, attributeEnd);
}
List<XmlTagNode> tagNodes = parseChildTagNodes();
Token contentEnd;
- if (identical(currentToken.type, TokenType.LT_SLASH)) {
- contentEnd = currentToken;
- currentToken = currentToken.next;
+ if (identical(_currentToken.type, TokenType.LT_SLASH)) {
+ contentEnd = _currentToken;
+ _currentToken = _currentToken.next;
} else {
reportUnexpectedToken();
contentEnd = insertSyntheticToken(TokenType.LT_SLASH);
}
Token closingTag;
- if (identical(currentToken.type, TokenType.TAG)) {
- closingTag = currentToken;
- currentToken = currentToken.next;
+ if (identical(_currentToken.type, TokenType.TAG)) {
+ closingTag = _currentToken;
+ _currentToken = _currentToken.next;
} else {
reportUnexpectedToken();
closingTag = insertSyntheticToken(TokenType.TAG);
}
Token nodeEnd;
- if (identical(currentToken.type, TokenType.GT)) {
- nodeEnd = currentToken;
- currentToken = currentToken.next;
+ if (identical(_currentToken.type, TokenType.GT)) {
+ nodeEnd = _currentToken;
+ _currentToken = _currentToken.next;
} else {
reportUnexpectedToken();
nodeEnd = insertSyntheticToken(TokenType.GT);
@@ -1564,29 +1581,29 @@
/**
* The starting [TokenType#LT] token (not `null`).
*/
- Token nodeStart;
+ final Token nodeStart;
/**
* The [TokenType#TAG] token after the starting '<' (not `null`).
*/
- Token tag;
+ final Token tag;
/**
* The attributes contained by the receiver (not `null`, contains no `null`s).
*/
- List<XmlAttributeNode> attributes;
+ List<XmlAttributeNode> _attributes;
/**
* The [TokenType#GT] or [TokenType#SLASH_GT] token after the attributes (not
* `null`). The token may be the same token as [nodeEnd] if there are no child
* [tagNodes].
*/
- Token attributeEnd;
+ final Token attributeEnd;
/**
* The tag nodes contained in the receiver (not `null`, contains no `null`s).
*/
- List<XmlTagNode> tagNodes;
+ List<XmlTagNode> _tagNodes;
/**
* The token (not `null`) after the content, which may be
@@ -1599,18 +1616,18 @@
* content and the attributes ended with [TokenType#SLASH_GT].
*
*/
- Token contentEnd;
+ final Token contentEnd;
/**
* The closing [TokenType#TAG] after the child elements or `null` if there is no
* content and the attributes ended with [TokenType#SLASH_GT]
*/
- Token closingTag;
+ final Token closingTag;
/**
* The ending [TokenType#GT] or [TokenType#SLASH_GT] token (not `null`).
*/
- Token nodeEnd;
+ final Token nodeEnd;
/**
* Construct a new instance representing an XML or HTML element
@@ -1638,15 +1655,9 @@
* @param nodeEnd the ending [TokenType#GT] or [TokenType#SLASH_GT] token (not
* `null`)
*/
- XmlTagNode(Token nodeStart, Token tag, List<XmlAttributeNode> attributes, Token attributeEnd, List<XmlTagNode> tagNodes, Token contentEnd, Token closingTag, Token nodeEnd) {
- this.nodeStart = nodeStart;
- this.tag = tag;
- this.attributes = becomeParentOfEmpty(attributes, NO_ATTRIBUTES);
- this.attributeEnd = attributeEnd;
- this.tagNodes = becomeParentOfEmpty(tagNodes, NO_TAG_NODES);
- this.contentEnd = contentEnd;
- this.closingTag = closingTag;
- this.nodeEnd = nodeEnd;
+ XmlTagNode(this.nodeStart, this.tag, List<XmlAttributeNode> attributes, this.attributeEnd, List<XmlTagNode> tagNodes, this.contentEnd, this.closingTag, this.nodeEnd) {
+ this._attributes = becomeParentOfEmpty(attributes, NO_ATTRIBUTES);
+ this._tagNodes = becomeParentOfEmpty(tagNodes, NO_TAG_NODES);
}
accept(XmlVisitor visitor) => visitor.visitXmlTagNode(this);
@@ -1658,7 +1669,7 @@
* @return the attribute or `null` if no matching attribute is found
*/
XmlAttributeNode getAttribute(String name) {
- for (XmlAttributeNode attribute in attributes) {
+ for (XmlAttributeNode attribute in _attributes) {
if (attribute.name.lexeme == name) {
return attribute;
}
@@ -1667,6 +1678,14 @@
}
/**
+ * Answer the receiver's attributes. Callers should not manipulate the returned list to edit the
+ * AST structure.
+ *
+ * @return the attributes (not `null`, contains no `null`s)
+ */
+ List<XmlAttributeNode> get attributes => _attributes;
+
+ /**
* Find the attribute with the given name (see [getAttribute] and answer the lexeme
* for the attribute's value token without the leading and trailing quotes (see
* [XmlAttributeNode#getText]).
@@ -1716,14 +1735,14 @@
if (contentEnd != null) {
return contentEnd;
}
- if (!tagNodes.isEmpty) {
- return tagNodes[tagNodes.length - 1].endToken;
+ if (!_tagNodes.isEmpty) {
+ return _tagNodes[_tagNodes.length - 1].endToken;
}
if (attributeEnd != null) {
return attributeEnd;
}
- if (!attributes.isEmpty) {
- return attributes[attributes.length - 1].endToken;
+ if (!_attributes.isEmpty) {
+ return _attributes[_attributes.length - 1].endToken;
}
return tag;
}
@@ -1735,11 +1754,19 @@
*/
List<EmbeddedExpression> get expressions => EmbeddedExpression.EMPTY_ARRAY;
+ /**
+ * Answer the tag nodes contained in the receiver. Callers should not manipulate the returned list
+ * to edit the AST structure.
+ *
+ * @return the children (not `null`, contains no `null`s)
+ */
+ List<XmlTagNode> get tagNodes => _tagNodes;
+
void visitChildren(XmlVisitor visitor) {
- for (XmlAttributeNode node in attributes) {
+ for (XmlAttributeNode node in _attributes) {
node.accept(visitor);
}
- for (XmlTagNode node in tagNodes) {
+ for (XmlTagNode node in _tagNodes) {
node.accept(visitor);
}
}
@@ -1962,18 +1989,18 @@
/**
* The first token in the token stream that was parsed to form this HTML unit.
*/
- Token _beginToken;
+ final Token beginToken;
/**
* The last token in the token stream that was parsed to form this compilation unit. This token
* should always have a type of [TokenType.EOF].
*/
- Token _endToken;
+ final Token endToken;
/**
* The tag nodes contained in the receiver (not `null`, contains no `null`s).
*/
- List<XmlTagNode> tagNodes;
+ List<XmlTagNode> _tagNodes;
/**
* The element associated with this HTML unit or `null` if the receiver is not resolved.
@@ -1988,20 +2015,22 @@
* @param endToken the last token in the token stream which should be of type
* [TokenType.EOF]
*/
- HtmlUnit(Token beginToken, List<XmlTagNode> tagNodes, Token endToken) {
- this._beginToken = beginToken;
- this.tagNodes = becomeParentOf(tagNodes);
- this._endToken = endToken;
+ HtmlUnit(this.beginToken, List<XmlTagNode> tagNodes, this.endToken) {
+ this._tagNodes = becomeParentOf(tagNodes);
}
accept(XmlVisitor visitor) => visitor.visitHtmlUnit(this);
- Token get beginToken => _beginToken;
-
- Token get endToken => _endToken;
+ /**
+ * Answer the tag nodes contained in the receiver. Callers should not manipulate the returned list
+ * to edit the AST structure.
+ *
+ * @return the children (not `null`, contains no `null`s)
+ */
+ List<XmlTagNode> get tagNodes => _tagNodes;
void visitChildren(XmlVisitor visitor) {
- for (XmlTagNode node in tagNodes) {
+ for (XmlTagNode node in _tagNodes) {
node.accept(visitor);
}
}
diff --git a/pkg/analyzer/lib/src/generated/instrumentation.dart b/pkg/analyzer/lib/src/generated/instrumentation.dart
index a9c7b7b..f75ac2a 100644
--- a/pkg/analyzer/lib/src/generated/instrumentation.dart
+++ b/pkg/analyzer/lib/src/generated/instrumentation.dart
@@ -40,7 +40,7 @@
/**
* A builder that will silently ignore all data and logging requests.
*/
- static final InstrumentationBuilder nullBuilder = new InstrumentationBuilder_18();
+ static InstrumentationBuilder _NULL_INSTRUMENTATION_BUILDER = new InstrumentationBuilder_18();
/**
* An instrumentation logger that can be used when no other instrumentation logger has been
@@ -75,6 +75,13 @@
static InstrumentationLogger get logger => _CURRENT_LOGGER;
/**
+ * Return a builder that will silently ignore all data and logging requests.
+ *
+ * @return the builder (not `null`)
+ */
+ static InstrumentationBuilder get nullBuilder => _NULL_INSTRUMENTATION_BUILDER;
+
+ /**
* Is this instrumentation system currently configured to drop instrumentation data provided to
* it?
*
@@ -121,7 +128,7 @@
}
class InstrumentationLogger_19 implements InstrumentationLogger {
- InstrumentationBuilder createBuilder(String name) => Instrumentation.nullBuilder;
+ InstrumentationBuilder createBuilder(String name) => Instrumentation._NULL_INSTRUMENTATION_BUILDER;
}
/**
diff --git a/pkg/analyzer/lib/src/generated/java_engine.dart b/pkg/analyzer/lib/src/generated/java_engine.dart
index 265e323..21a205b 100644
--- a/pkg/analyzer/lib/src/generated/java_engine.dart
+++ b/pkg/analyzer/lib/src/generated/java_engine.dart
@@ -37,6 +37,10 @@
}
}
+class ObjectUtilities {
+ static int combineHashCodes(int first, int second) => first * 31 + second;
+}
+
class UUID {
static int __nextId = 0;
final String id;
diff --git a/pkg/analyzer/lib/src/generated/parser.dart b/pkg/analyzer/lib/src/generated/parser.dart
index fc20dc5..2d26f34 100644
--- a/pkg/analyzer/lib/src/generated/parser.dart
+++ b/pkg/analyzer/lib/src/generated/parser.dart
@@ -24,12 +24,12 @@
/**
* The documentation comment that was parsed, or `null` if none was given.
*/
- Comment comment;
+ final Comment comment;
/**
* The metadata that was parsed.
*/
- List<Annotation> metadata;
+ final List<Annotation> metadata;
/**
* Initialize a newly created holder with the given data.
@@ -37,10 +37,7 @@
* @param comment the documentation comment that was parsed
* @param metadata the metadata that was parsed
*/
- CommentAndMetadata(Comment comment, List<Annotation> metadata) {
- this.comment = comment;
- this.metadata = metadata;
- }
+ CommentAndMetadata(this.comment, this.metadata);
}
/**
@@ -53,12 +50,12 @@
/**
* The 'final', 'const' or 'var' keyword, or `null` if none was given.
*/
- Token keyword;
+ final Token keyword;
/**
* The type, of `null` if no type was specified.
*/
- TypeName type;
+ final TypeName type;
/**
* Initialize a newly created holder with the given data.
@@ -66,10 +63,7 @@
* @param keyword the 'final', 'const' or 'var' keyword
* @param type the type
*/
- FinalConstVarOrType(Token keyword, TypeName type) {
- this.keyword = keyword;
- this.type = type;
- }
+ FinalConstVarOrType(this.keyword, this.type);
}
/**
@@ -1148,6 +1142,11 @@
AnalysisErrorListener _errorListener;
/**
+ * The node in the AST structure that contains the revised content.
+ */
+ ASTNode _updatedNode;
+
+ /**
* Initialize a newly created incremental parser to parse a portion of the content of the given
* source.
*
@@ -1163,6 +1162,13 @@
}
/**
+ * Return the node in the AST structure that contains the revised content.
+ *
+ * @return the updated node
+ */
+ ASTNode get updatedNode => _updatedNode;
+
+ /**
* Given a range of tokens that were re-scanned, re-parse the minimum number of tokens to produce
* a consistent AST structure. The range is represented by the first and last tokens in the range.
* The tokens are assumed to be contained in the same token stream.
@@ -1221,6 +1227,7 @@
parser.currentToken = parseToken;
}
}
+ _updatedNode = newNode;
if (identical(oldNode, originalStructure)) {
ResolutionCopier.copyResolutionData(oldNode, newNode);
return newNode as ASTNode;
@@ -1255,10 +1262,7 @@
while (firstToken.offset > offset && firstToken.type != TokenType.EOF) {
firstToken = firstToken.previous;
}
- if (firstToken.offset == offset) {
- return firstToken;
- }
- return null;
+ return firstToken;
}
}
@@ -1305,6 +1309,16 @@
AnalysisErrorListener _errorListener;
/**
+ * An [errorListener] lock, if more than `0`, then errors are not reported.
+ */
+ int _errorListenerLock = 0;
+
+ /**
+ * A flag indicating whether parser is to parse function bodies.
+ */
+ bool _parseFunctionBodies = true;
+
+ /**
* The next token to be parsed.
*/
Token _currentToken;
@@ -1409,6 +1423,15 @@
}
/**
+ * Set whether parser is to parse function bodies.
+ *
+ * @param parseFunctionBodies `true` if parser is to parse function bodies
+ */
+ void set parseFunctionBodies(bool parseFunctionBodies) {
+ this._parseFunctionBodies = parseFunctionBodies;
+ }
+
+ /**
* Parse an annotation.
*
* <pre>
@@ -1431,7 +1454,7 @@
if (matches5(TokenType.OPEN_PAREN)) {
arguments = parseArgumentList();
}
- return new Annotation.full(atSign, name, period, constructorName, arguments);
+ return new Annotation(atSign, name, period, constructorName, arguments);
}
/**
@@ -1450,7 +1473,7 @@
*/
Expression parseArgument() {
if (matchesIdentifier() && matches4(peek(), TokenType.COLON)) {
- return new NamedExpression.full(parseLabel(), parseExpression2());
+ return new NamedExpression(parseLabel(), parseExpression2());
} else {
return parseExpression2();
}
@@ -1474,7 +1497,7 @@
Token leftParenthesis = expect2(TokenType.OPEN_PAREN);
List<Expression> arguments = new List<Expression>();
if (matches5(TokenType.CLOSE_PAREN)) {
- return new ArgumentList.full(leftParenthesis, arguments, andAdvance);
+ return new ArgumentList(leftParenthesis, arguments, andAdvance);
}
Expression argument = parseArgument();
arguments.add(argument);
@@ -1485,7 +1508,7 @@
arguments.add(argument);
if (foundNamedArgument) {
if (!generatedError && argument is! NamedExpression) {
- reportError9(ParserErrorCode.POSITIONAL_AFTER_NAMED_ARGUMENT, []);
+ reportError10(ParserErrorCode.POSITIONAL_AFTER_NAMED_ARGUMENT, []);
generatedError = true;
}
} else if (argument is NamedExpression) {
@@ -1493,7 +1516,7 @@
}
}
Token rightParenthesis = expect2(TokenType.CLOSE_PAREN);
- return new ArgumentList.full(leftParenthesis, arguments, rightParenthesis);
+ return new ArgumentList(leftParenthesis, arguments, rightParenthesis);
}
/**
@@ -1510,13 +1533,13 @@
Expression parseBitwiseOrExpression() {
Expression expression;
if (matches(Keyword.SUPER) && matches4(peek(), TokenType.BAR)) {
- expression = new SuperExpression.full(andAdvance);
+ expression = new SuperExpression(andAdvance);
} else {
expression = parseBitwiseXorExpression();
}
while (matches5(TokenType.BAR)) {
Token operator = andAdvance;
- expression = new BinaryExpression.full(expression, operator, parseBitwiseXorExpression());
+ expression = new BinaryExpression(expression, operator, parseBitwiseXorExpression());
}
return expression;
}
@@ -1541,13 +1564,13 @@
statements.add(statement);
}
if (identical(_currentToken, statementStart)) {
- reportError10(ParserErrorCode.UNEXPECTED_TOKEN, _currentToken, [_currentToken.lexeme]);
+ reportError11(ParserErrorCode.UNEXPECTED_TOKEN, _currentToken, [_currentToken.lexeme]);
advance();
}
statementStart = _currentToken;
}
Token rightBracket = expect2(TokenType.CLOSE_CURLY_BRACKET);
- return new Block.full(leftBracket, statements, rightBracket);
+ return new Block(leftBracket, statements, rightBracket);
}
/**
@@ -1586,7 +1609,7 @@
} else {
if (matchesIdentifier()) {
if (matchesAny(peek(), [TokenType.EQ, TokenType.COMMA, TokenType.SEMICOLON])) {
- reportError(ParserErrorCode.VOID_VARIABLE, returnType, []);
+ reportError9(ParserErrorCode.VOID_VARIABLE, returnType, []);
return parseInitializedIdentifierList(commentAndMetadata, modifiers.staticKeyword, validateModifiersForField(modifiers), returnType);
}
}
@@ -1594,7 +1617,7 @@
validateModifiersForOperator(modifiers);
return parseOperator(commentAndMetadata, modifiers.externalKeyword, returnType);
}
- reportError10(ParserErrorCode.EXPECTED_EXECUTABLE, _currentToken, []);
+ reportError11(ParserErrorCode.EXPECTED_EXECUTABLE, _currentToken, []);
return null;
}
} else if (matches(Keyword.GET) && matchesIdentifier2(peek())) {
@@ -1611,7 +1634,7 @@
validateModifiersForOperator(modifiers);
return parseOperator(commentAndMetadata, modifiers.externalKeyword, null);
}
- reportError10(ParserErrorCode.EXPECTED_CLASS_MEMBER, _currentToken, []);
+ reportError11(ParserErrorCode.EXPECTED_CLASS_MEMBER, _currentToken, []);
return null;
} else if (matches4(peek(), TokenType.PERIOD) && matchesIdentifier2(peek2(2)) && matches4(peek2(3), TokenType.OPEN_PAREN)) {
return parseConstructor(commentAndMetadata, modifiers.externalKeyword, validateModifiersForConstructor(modifiers), modifiers.factoryKeyword, parseSimpleIdentifier(), andAdvance, parseSimpleIdentifier(), parseFormalParameterList());
@@ -1626,7 +1649,7 @@
return parseMethodDeclaration2(commentAndMetadata, modifiers.externalKeyword, modifiers.staticKeyword, null, methodName, parameters);
} else if (matchesAny(peek(), [TokenType.EQ, TokenType.COMMA, TokenType.SEMICOLON])) {
if (modifiers.constKeyword == null && modifiers.finalKeyword == null && modifiers.varKeyword == null) {
- reportError9(ParserErrorCode.MISSING_CONST_FINAL_VAR_OR_TYPE, []);
+ reportError10(ParserErrorCode.MISSING_CONST_FINAL_VAR_OR_TYPE, []);
}
return parseInitializedIdentifierList(commentAndMetadata, modifiers.staticKeyword, validateModifiersForField(modifiers), null);
}
@@ -1648,13 +1671,18 @@
validateModifiersForOperator(modifiers);
return parseOperator(commentAndMetadata, modifiers.externalKeyword, type);
}
- reportError10(ParserErrorCode.EXPECTED_CLASS_MEMBER, _currentToken, []);
- return null;
+ reportError11(ParserErrorCode.EXPECTED_CLASS_MEMBER, _currentToken, []);
+ try {
+ lockErrorListener();
+ return parseInitializedIdentifierList(commentAndMetadata, modifiers.staticKeyword, validateModifiersForField(modifiers), type);
+ } finally {
+ unlockErrorListener();
+ }
} else if (matches4(peek(), TokenType.OPEN_PAREN)) {
SimpleIdentifier methodName = parseSimpleIdentifier();
FormalParameterList parameters = parseFormalParameterList();
if (methodName.name == className) {
- reportError(ParserErrorCode.CONSTRUCTOR_WITH_RETURN_TYPE, type, []);
+ reportError9(ParserErrorCode.CONSTRUCTOR_WITH_RETURN_TYPE, type, []);
return parseConstructor(commentAndMetadata, modifiers.externalKeyword, validateModifiersForConstructor(modifiers), modifiers.factoryKeyword, methodName, null, null, parameters);
}
validateModifiersForGetterOrSetterOrMethod(modifiers);
@@ -1690,7 +1718,7 @@
Token firstToken = _currentToken;
ScriptTag scriptTag = null;
if (matches5(TokenType.SCRIPT_TAG)) {
- scriptTag = new ScriptTag.full(andAdvance);
+ scriptTag = new ScriptTag(andAdvance);
}
bool libraryDirectiveFound = false;
bool partOfDirectiveFound = false;
@@ -1704,15 +1732,15 @@
if ((matches(Keyword.IMPORT) || matches(Keyword.EXPORT) || matches(Keyword.LIBRARY) || matches(Keyword.PART)) && !matches4(peek(), TokenType.PERIOD) && !matches4(peek(), TokenType.LT) && !matches4(peek(), TokenType.OPEN_PAREN)) {
Directive directive = parseDirective(commentAndMetadata);
if (declarations.length > 0 && !directiveFoundAfterDeclaration) {
- reportError9(ParserErrorCode.DIRECTIVE_AFTER_DECLARATION, []);
+ reportError10(ParserErrorCode.DIRECTIVE_AFTER_DECLARATION, []);
directiveFoundAfterDeclaration = true;
}
if (directive is LibraryDirective) {
if (libraryDirectiveFound) {
- reportError9(ParserErrorCode.MULTIPLE_LIBRARY_DIRECTIVES, []);
+ reportError10(ParserErrorCode.MULTIPLE_LIBRARY_DIRECTIVES, []);
} else {
if (directives.length > 0) {
- reportError9(ParserErrorCode.LIBRARY_DIRECTIVE_NOT_FIRST, []);
+ reportError10(ParserErrorCode.LIBRARY_DIRECTIVE_NOT_FIRST, []);
}
libraryDirectiveFound = true;
}
@@ -1720,29 +1748,29 @@
partDirectiveFound = true;
} else if (partDirectiveFound) {
if (directive is ExportDirective) {
- reportError10(ParserErrorCode.EXPORT_DIRECTIVE_AFTER_PART_DIRECTIVE, (directive as NamespaceDirective).keyword, []);
+ reportError11(ParserErrorCode.EXPORT_DIRECTIVE_AFTER_PART_DIRECTIVE, (directive as NamespaceDirective).keyword, []);
} else if (directive is ImportDirective) {
- reportError10(ParserErrorCode.IMPORT_DIRECTIVE_AFTER_PART_DIRECTIVE, (directive as NamespaceDirective).keyword, []);
+ reportError11(ParserErrorCode.IMPORT_DIRECTIVE_AFTER_PART_DIRECTIVE, (directive as NamespaceDirective).keyword, []);
}
}
if (directive is PartOfDirective) {
if (partOfDirectiveFound) {
- reportError9(ParserErrorCode.MULTIPLE_PART_OF_DIRECTIVES, []);
+ reportError10(ParserErrorCode.MULTIPLE_PART_OF_DIRECTIVES, []);
} else {
int directiveCount = directives.length;
for (int i = 0; i < directiveCount; i++) {
- reportError10(ParserErrorCode.NON_PART_OF_DIRECTIVE_IN_PART, directives[i].keyword, []);
+ reportError11(ParserErrorCode.NON_PART_OF_DIRECTIVE_IN_PART, directives[i].keyword, []);
}
partOfDirectiveFound = true;
}
} else {
if (partOfDirectiveFound) {
- reportError10(ParserErrorCode.NON_PART_OF_DIRECTIVE_IN_PART, directive.keyword, []);
+ reportError11(ParserErrorCode.NON_PART_OF_DIRECTIVE_IN_PART, directive.keyword, []);
}
}
directives.add(directive);
} else if (matches5(TokenType.SEMICOLON)) {
- reportError10(ParserErrorCode.UNEXPECTED_TOKEN, _currentToken, [_currentToken.lexeme]);
+ reportError11(ParserErrorCode.UNEXPECTED_TOKEN, _currentToken, [_currentToken.lexeme]);
advance();
} else {
CompilationUnitMember member = parseCompilationUnitMember(commentAndMetadata);
@@ -1751,7 +1779,7 @@
}
}
if (identical(_currentToken, memberStart)) {
- reportError10(ParserErrorCode.UNEXPECTED_TOKEN, _currentToken, [_currentToken.lexeme]);
+ reportError11(ParserErrorCode.UNEXPECTED_TOKEN, _currentToken, [_currentToken.lexeme]);
advance();
while (!matches5(TokenType.EOF) && !couldBeStartOfCompilationUnitMember()) {
advance();
@@ -1759,7 +1787,7 @@
}
memberStart = _currentToken;
}
- return new CompilationUnit.full(firstToken, scriptTag, directives, declarations, _currentToken);
+ return new CompilationUnit(firstToken, scriptTag, directives, declarations, _currentToken);
}
/**
@@ -1781,7 +1809,7 @@
Expression thenExpression = parseExpressionWithoutCascade();
Token colon = expect2(TokenType.COLON);
Expression elseExpression = parseExpressionWithoutCascade();
- return new ConditionalExpression.full(condition, question, thenExpression, colon, elseExpression);
+ return new ConditionalExpression(condition, question, thenExpression, colon, elseExpression);
}
/**
@@ -1802,7 +1830,7 @@
period = andAdvance;
name = parseSimpleIdentifier();
}
- return new ConstructorName.full(type, period, name);
+ return new ConstructorName(type, period, name);
}
/**
@@ -1834,11 +1862,11 @@
}
tokenType = _currentToken.type;
}
- return new CascadeExpression.full(expression, cascadeSections);
+ return new CascadeExpression(expression, cascadeSections);
} else if (tokenType.isAssignmentOperator) {
Token operator = andAdvance;
ensureAssignable(expression);
- return new AssignmentExpression.full(expression, operator, parseExpression2());
+ return new AssignmentExpression(expression, operator, parseExpression2());
}
return expression;
}
@@ -1865,7 +1893,7 @@
if (_currentToken.type.isAssignmentOperator) {
Token operator = andAdvance;
ensureAssignable(expression);
- expression = new AssignmentExpression.full(expression, operator, parseExpressionWithoutCascade());
+ expression = new AssignmentExpression(expression, operator, parseExpressionWithoutCascade());
}
return expression;
}
@@ -1883,7 +1911,7 @@
ExtendsClause parseExtendsClause() {
Token keyword = expect(Keyword.EXTENDS);
TypeName superclass = parseTypeName();
- return new ExtendsClause.full(keyword, superclass);
+ return new ExtendsClause(keyword, superclass);
}
/**
@@ -1914,7 +1942,7 @@
FormalParameterList parseFormalParameterList() {
Token leftParenthesis = expect2(TokenType.OPEN_PAREN);
if (matches5(TokenType.CLOSE_PAREN)) {
- return new FormalParameterList.full(leftParenthesis, null, null, null, andAdvance);
+ return new FormalParameterList(leftParenthesis, null, null, null, andAdvance);
}
List<FormalParameter> parameters = new List<FormalParameter>();
List<FormalParameter> normalParameters = new List<FormalParameter>();
@@ -1937,9 +1965,9 @@
firstParameter = false;
} else if (!optional(TokenType.COMMA)) {
if (getEndToken(leftParenthesis) != null) {
- reportError9(ParserErrorCode.EXPECTED_TOKEN, [TokenType.COMMA.lexeme]);
+ reportError10(ParserErrorCode.EXPECTED_TOKEN, [TokenType.COMMA.lexeme]);
} else {
- reportError10(ParserErrorCode.MISSING_CLOSING_PARENTHESIS, _currentToken.previous, []);
+ reportError11(ParserErrorCode.MISSING_CLOSING_PARENTHESIS, _currentToken.previous, []);
break;
}
}
@@ -1947,11 +1975,11 @@
if (matches5(TokenType.OPEN_SQUARE_BRACKET)) {
wasOptionalParameter = true;
if (leftSquareBracket != null && !reportedMuliplePositionalGroups) {
- reportError9(ParserErrorCode.MULTIPLE_POSITIONAL_PARAMETER_GROUPS, []);
+ reportError10(ParserErrorCode.MULTIPLE_POSITIONAL_PARAMETER_GROUPS, []);
reportedMuliplePositionalGroups = true;
}
if (leftCurlyBracket != null && !reportedMixedGroups) {
- reportError9(ParserErrorCode.MIXED_PARAMETER_GROUPS, []);
+ reportError10(ParserErrorCode.MIXED_PARAMETER_GROUPS, []);
reportedMixedGroups = true;
}
leftSquareBracket = andAdvance;
@@ -1960,11 +1988,11 @@
} else if (matches5(TokenType.OPEN_CURLY_BRACKET)) {
wasOptionalParameter = true;
if (leftCurlyBracket != null && !reportedMulipleNamedGroups) {
- reportError9(ParserErrorCode.MULTIPLE_NAMED_PARAMETER_GROUPS, []);
+ reportError10(ParserErrorCode.MULTIPLE_NAMED_PARAMETER_GROUPS, []);
reportedMulipleNamedGroups = true;
}
if (leftSquareBracket != null && !reportedMixedGroups) {
- reportError9(ParserErrorCode.MIXED_PARAMETER_GROUPS, []);
+ reportError10(ParserErrorCode.MIXED_PARAMETER_GROUPS, []);
reportedMixedGroups = true;
}
leftCurlyBracket = andAdvance;
@@ -1975,18 +2003,18 @@
parameters.add(parameter);
currentParameters.add(parameter);
if (identical(kind, ParameterKind.REQUIRED) && wasOptionalParameter) {
- reportError(ParserErrorCode.NORMAL_BEFORE_OPTIONAL_PARAMETERS, parameter, []);
+ reportError9(ParserErrorCode.NORMAL_BEFORE_OPTIONAL_PARAMETERS, parameter, []);
}
if (matches5(TokenType.CLOSE_SQUARE_BRACKET)) {
rightSquareBracket = andAdvance;
currentParameters = normalParameters;
if (leftSquareBracket == null) {
if (leftCurlyBracket != null) {
- reportError9(ParserErrorCode.WRONG_TERMINATOR_FOR_PARAMETER_GROUP, ["}"]);
+ reportError10(ParserErrorCode.WRONG_TERMINATOR_FOR_PARAMETER_GROUP, ["}"]);
rightCurlyBracket = rightSquareBracket;
rightSquareBracket = null;
} else {
- reportError9(ParserErrorCode.UNEXPECTED_TERMINATOR_FOR_PARAMETER_GROUP, ["["]);
+ reportError10(ParserErrorCode.UNEXPECTED_TERMINATOR_FOR_PARAMETER_GROUP, ["["]);
}
}
kind = ParameterKind.REQUIRED;
@@ -1995,11 +2023,11 @@
currentParameters = normalParameters;
if (leftCurlyBracket == null) {
if (leftSquareBracket != null) {
- reportError9(ParserErrorCode.WRONG_TERMINATOR_FOR_PARAMETER_GROUP, ["]"]);
+ reportError10(ParserErrorCode.WRONG_TERMINATOR_FOR_PARAMETER_GROUP, ["]"]);
rightSquareBracket = rightCurlyBracket;
rightCurlyBracket = null;
} else {
- reportError9(ParserErrorCode.UNEXPECTED_TERMINATOR_FOR_PARAMETER_GROUP, ["{"]);
+ reportError10(ParserErrorCode.UNEXPECTED_TERMINATOR_FOR_PARAMETER_GROUP, ["{"]);
}
}
kind = ParameterKind.REQUIRED;
@@ -2007,10 +2035,10 @@
} while (!matches5(TokenType.CLOSE_PAREN) && initialToken != _currentToken);
Token rightParenthesis = expect2(TokenType.CLOSE_PAREN);
if (leftSquareBracket != null && rightSquareBracket == null) {
- reportError9(ParserErrorCode.MISSING_TERMINATOR_FOR_PARAMETER_GROUP, ["]"]);
+ reportError10(ParserErrorCode.MISSING_TERMINATOR_FOR_PARAMETER_GROUP, ["]"]);
}
if (leftCurlyBracket != null && rightCurlyBracket == null) {
- reportError9(ParserErrorCode.MISSING_TERMINATOR_FOR_PARAMETER_GROUP, ["}"]);
+ reportError10(ParserErrorCode.MISSING_TERMINATOR_FOR_PARAMETER_GROUP, ["}"]);
}
if (leftSquareBracket == null) {
leftSquareBracket = leftCurlyBracket;
@@ -2018,7 +2046,7 @@
if (rightSquareBracket == null) {
rightSquareBracket = rightCurlyBracket;
}
- return new FormalParameterList.full(leftParenthesis, parameters, leftSquareBracket, rightSquareBracket, rightParenthesis);
+ return new FormalParameterList(leftParenthesis, parameters, leftSquareBracket, rightSquareBracket, rightParenthesis);
}
/**
@@ -2035,7 +2063,7 @@
FormalParameterList parameters = parseFormalParameterList();
validateFormalParameterList(parameters);
FunctionBody body = parseFunctionBody(false, ParserErrorCode.MISSING_FUNCTION_BODY, true);
- return new FunctionExpression.full(parameters, body);
+ return new FunctionExpression(parameters, body);
}
/**
@@ -2055,7 +2083,7 @@
while (optional(TokenType.COMMA)) {
interfaces.add(parseTypeName());
}
- return new ImplementsClause.full(keyword, interfaces);
+ return new ImplementsClause(keyword, interfaces);
}
/**
@@ -2071,7 +2099,7 @@
Label parseLabel() {
SimpleIdentifier label = parseSimpleIdentifier();
Token colon = expect2(TokenType.COLON);
- return new Label.full(label, colon);
+ return new Label(label, colon);
}
/**
@@ -2091,7 +2119,7 @@
advance();
components.add(parseSimpleIdentifier());
}
- return new LibraryIdentifier.full(components);
+ return new LibraryIdentifier(components);
}
/**
@@ -2108,7 +2136,7 @@
Expression expression = parseLogicalAndExpression();
while (matches5(TokenType.BAR_BAR)) {
Token operator = andAdvance;
- expression = new BinaryExpression.full(expression, operator, parseLogicalAndExpression());
+ expression = new BinaryExpression(expression, operator, parseLogicalAndExpression());
}
return expression;
}
@@ -2127,7 +2155,7 @@
Expression key = parseExpression2();
Token separator = expect2(TokenType.COLON);
Expression value = parseExpression2();
- return new MapLiteralEntry.full(key, separator, value);
+ return new MapLiteralEntry(key, separator, value);
}
/**
@@ -2166,25 +2194,25 @@
FormalParameterList parameters = parseFormalParameterList();
if (thisKeyword == null) {
if (holder.keyword != null) {
- reportError10(ParserErrorCode.FUNCTION_TYPED_PARAMETER_VAR, holder.keyword, []);
+ reportError11(ParserErrorCode.FUNCTION_TYPED_PARAMETER_VAR, holder.keyword, []);
}
- return new FunctionTypedFormalParameter.full(commentAndMetadata.comment, commentAndMetadata.metadata, holder.type, identifier, parameters);
+ return new FunctionTypedFormalParameter(commentAndMetadata.comment, commentAndMetadata.metadata, holder.type, identifier, parameters);
} else {
- return new FieldFormalParameter.full(commentAndMetadata.comment, commentAndMetadata.metadata, holder.keyword, holder.type, thisKeyword, period, identifier, parameters);
+ return new FieldFormalParameter(commentAndMetadata.comment, commentAndMetadata.metadata, holder.keyword, holder.type, thisKeyword, period, identifier, parameters);
}
}
TypeName type = holder.type;
if (type != null) {
if (matches3(type.name.beginToken, Keyword.VOID)) {
- reportError10(ParserErrorCode.VOID_PARAMETER, type.name.beginToken, []);
+ reportError11(ParserErrorCode.VOID_PARAMETER, type.name.beginToken, []);
} else if (holder.keyword != null && matches3(holder.keyword, Keyword.VAR)) {
- reportError10(ParserErrorCode.VAR_AND_TYPE, holder.keyword, []);
+ reportError11(ParserErrorCode.VAR_AND_TYPE, holder.keyword, []);
}
}
if (thisKeyword != null) {
- return new FieldFormalParameter.full(commentAndMetadata.comment, commentAndMetadata.metadata, holder.keyword, holder.type, thisKeyword, period, identifier, null);
+ return new FieldFormalParameter(commentAndMetadata.comment, commentAndMetadata.metadata, holder.keyword, holder.type, thisKeyword, period, identifier, null);
}
- return new SimpleFormalParameter.full(commentAndMetadata.comment, commentAndMetadata.metadata, holder.keyword, holder.type, identifier);
+ return new SimpleFormalParameter(commentAndMetadata.comment, commentAndMetadata.metadata, holder.keyword, holder.type, identifier);
}
/**
@@ -2204,7 +2232,7 @@
}
Token period = andAdvance;
SimpleIdentifier qualified = parseSimpleIdentifier();
- return new PrefixedIdentifier.full(qualifier, period, qualified);
+ return new PrefixedIdentifier(qualifier, period, qualified);
}
/**
@@ -2220,7 +2248,7 @@
*/
TypeName parseReturnType() {
if (matches(Keyword.VOID)) {
- return new TypeName.full(new SimpleIdentifier.full(andAdvance), null);
+ return new TypeName(new SimpleIdentifier(andAdvance), null);
} else {
return parseTypeName();
}
@@ -2238,9 +2266,9 @@
*/
SimpleIdentifier parseSimpleIdentifier() {
if (matchesIdentifier()) {
- return new SimpleIdentifier.full(andAdvance);
+ return new SimpleIdentifier(andAdvance);
}
- reportError9(ParserErrorCode.MISSING_IDENTIFIER, []);
+ reportError10(ParserErrorCode.MISSING_IDENTIFIER, []);
return createSyntheticIdentifier();
}
@@ -2263,7 +2291,7 @@
if (labels.isEmpty) {
return statement;
}
- return new LabeledStatement.full(labels, statement);
+ return new LabeledStatement(labels, statement);
}
/**
@@ -2284,16 +2312,16 @@
if (matches5(TokenType.STRING_INTERPOLATION_EXPRESSION) || matches5(TokenType.STRING_INTERPOLATION_IDENTIFIER)) {
strings.add(parseStringInterpolation(string));
} else {
- strings.add(new SimpleStringLiteral.full(string, computeStringValue(string.lexeme, true, true)));
+ strings.add(new SimpleStringLiteral(string, computeStringValue(string.lexeme, true, true)));
}
}
if (strings.length < 1) {
- reportError9(ParserErrorCode.EXPECTED_STRING_LITERAL, []);
+ reportError10(ParserErrorCode.EXPECTED_STRING_LITERAL, []);
return createSyntheticStringLiteral();
} else if (strings.length == 1) {
return strings[0];
} else {
- return new AdjacentStrings.full(strings);
+ return new AdjacentStrings(strings);
}
}
@@ -2318,7 +2346,7 @@
arguments.add(parseTypeName());
}
Token rightBracket = expect2(TokenType.GT);
- return new TypeArgumentList.full(leftBracket, arguments, rightBracket);
+ return new TypeArgumentList(leftBracket, arguments, rightBracket);
}
/**
@@ -2334,19 +2362,19 @@
TypeName parseTypeName() {
Identifier typeName;
if (matches(Keyword.VAR)) {
- reportError9(ParserErrorCode.VAR_AS_TYPE_NAME, []);
- typeName = new SimpleIdentifier.full(andAdvance);
+ reportError10(ParserErrorCode.VAR_AS_TYPE_NAME, []);
+ typeName = new SimpleIdentifier(andAdvance);
} else if (matchesIdentifier()) {
typeName = parsePrefixedIdentifier();
} else {
typeName = createSyntheticIdentifier();
- reportError9(ParserErrorCode.EXPECTED_TYPE_NAME, []);
+ reportError10(ParserErrorCode.EXPECTED_TYPE_NAME, []);
}
TypeArgumentList typeArguments = null;
if (matches5(TokenType.LT)) {
typeArguments = parseTypeArgumentList();
}
- return new TypeName.full(typeName, typeArguments);
+ return new TypeName(typeName, typeArguments);
}
/**
@@ -2365,9 +2393,9 @@
if (matches(Keyword.EXTENDS)) {
Token keyword = andAdvance;
TypeName bound = parseTypeName();
- return new TypeParameter.full(commentAndMetadata.comment, commentAndMetadata.metadata, name, keyword, bound);
+ return new TypeParameter(commentAndMetadata.comment, commentAndMetadata.metadata, name, keyword, bound);
}
- return new TypeParameter.full(commentAndMetadata.comment, commentAndMetadata.metadata, name, null, null);
+ return new TypeParameter(commentAndMetadata.comment, commentAndMetadata.metadata, name, null, null);
}
/**
@@ -2388,7 +2416,7 @@
typeParameters.add(parseTypeParameter());
}
Token rightBracket = expect2(TokenType.GT);
- return new TypeParameterList.full(leftBracket, typeParameters, rightBracket);
+ return new TypeParameterList(leftBracket, typeParameters, rightBracket);
}
/**
@@ -2408,7 +2436,7 @@
while (optional(TokenType.COMMA)) {
types.add(parseTypeName());
}
- return new WithClause.full(with2, types);
+ return new WithClause(with2, types);
}
void set currentToken(Token currentToken) {
@@ -2435,7 +2463,7 @@
*/
void appendScalarValue(JavaStringBuilder builder, String escapeSequence, int scalarValue, int startIndex, int endIndex) {
if (scalarValue < 0 || scalarValue > Character.MAX_CODE_POINT || (scalarValue >= 0xD800 && scalarValue <= 0xDFFF)) {
- reportError9(ParserErrorCode.INVALID_CODE_POINT, [escapeSequence]);
+ reportError10(ParserErrorCode.INVALID_CODE_POINT, [escapeSequence]);
return;
}
if (scalarValue < Character.MAX_VALUE) {
@@ -2499,7 +2527,7 @@
* @return the function declaration that most closely captures the components of the given method
* declaration
*/
- FunctionDeclaration convertToFunctionDeclaration(MethodDeclaration method) => new FunctionDeclaration.full(method.documentationComment, method.metadata, method.externalKeyword, method.returnType, method.propertyKeyword, method.name, new FunctionExpression.full(method.parameters, method.body));
+ FunctionDeclaration convertToFunctionDeclaration(MethodDeclaration method) => new FunctionDeclaration(method.documentationComment, method.metadata, method.externalKeyword, method.returnType, method.propertyKeyword, method.name, new FunctionExpression(method.parameters, method.body));
/**
* Return `true` if the current token could be the start of a compilation unit member. This
@@ -2544,7 +2572,7 @@
} else {
syntheticToken = createSyntheticToken2(TokenType.IDENTIFIER);
}
- return new SimpleIdentifier.full(syntheticToken);
+ return new SimpleIdentifier(syntheticToken);
}
/**
@@ -2552,7 +2580,7 @@
*
* @return the synthetic string literal that was created
*/
- SimpleStringLiteral createSyntheticStringLiteral() => new SimpleStringLiteral.full(createSyntheticToken2(TokenType.STRING), "");
+ SimpleStringLiteral createSyntheticStringLiteral() => new SimpleStringLiteral(createSyntheticToken2(TokenType.STRING), "");
/**
* Create a synthetic token representing the given keyword.
@@ -2586,7 +2614,7 @@
*/
void ensureAssignable(Expression expression) {
if (expression != null && !expression.isAssignable) {
- reportError9(ParserErrorCode.ILLEGAL_ASSIGNMENT_TO_NON_ASSIGNABLE, []);
+ reportError10(ParserErrorCode.ILLEGAL_ASSIGNMENT_TO_NON_ASSIGNABLE, []);
}
}
@@ -2601,7 +2629,7 @@
if (matches(keyword)) {
return andAdvance;
}
- reportError9(ParserErrorCode.EXPECTED_TOKEN, [keyword.syntax]);
+ reportError10(ParserErrorCode.EXPECTED_TOKEN, [keyword.syntax]);
return _currentToken;
}
@@ -2617,9 +2645,9 @@
return andAdvance;
}
if (identical(type, TokenType.SEMICOLON)) {
- reportError10(ParserErrorCode.EXPECTED_TOKEN, _currentToken.previous, [type.lexeme]);
+ reportError11(ParserErrorCode.EXPECTED_TOKEN, _currentToken.previous, [type.lexeme]);
} else {
- reportError9(ParserErrorCode.EXPECTED_TOKEN, [type.lexeme]);
+ reportError10(ParserErrorCode.EXPECTED_TOKEN, [type.lexeme]);
}
return _currentToken;
}
@@ -2962,6 +2990,14 @@
}
/**
+ * Increments the error reporting lock level. If level is more than `0`, then
+ * [reportError] wont report any error.
+ */
+ void lockErrorListener() {
+ _errorListenerLock++;
+ }
+
+ /**
* Return `true` if the current token matches the given keyword.
*
* @param keyword the keyword that can optionally appear in the current location
@@ -3106,13 +3142,13 @@
Expression parseAdditiveExpression() {
Expression expression;
if (matches(Keyword.SUPER) && _currentToken.next.type.isAdditiveOperator) {
- expression = new SuperExpression.full(andAdvance);
+ expression = new SuperExpression(andAdvance);
} else {
expression = parseMultiplicativeExpression();
}
while (_currentToken.type.isAdditiveOperator) {
Token operator = andAdvance;
- expression = new BinaryExpression.full(expression, operator, parseMultiplicativeExpression());
+ expression = new BinaryExpression(expression, operator, parseMultiplicativeExpression());
}
return expression;
}
@@ -3130,8 +3166,8 @@
ArgumentDefinitionTest parseArgumentDefinitionTest() {
Token question = expect2(TokenType.QUESTION);
SimpleIdentifier identifier = parseSimpleIdentifier();
- reportError10(ParserErrorCode.DEPRECATED_ARGUMENT_DEFINITION_TEST, question, []);
- return new ArgumentDefinitionTest.full(question, identifier);
+ reportError11(ParserErrorCode.DEPRECATED_ARGUMENT_DEFINITION_TEST, question, []);
+ return new ArgumentDefinitionTest(question, identifier);
}
/**
@@ -3149,17 +3185,17 @@
Token leftParen = expect2(TokenType.OPEN_PAREN);
Expression expression = parseExpression2();
if (expression is AssignmentExpression) {
- reportError(ParserErrorCode.ASSERT_DOES_NOT_TAKE_ASSIGNMENT, expression, []);
+ reportError9(ParserErrorCode.ASSERT_DOES_NOT_TAKE_ASSIGNMENT, expression, []);
} else if (expression is CascadeExpression) {
- reportError(ParserErrorCode.ASSERT_DOES_NOT_TAKE_CASCADE, expression, []);
+ reportError9(ParserErrorCode.ASSERT_DOES_NOT_TAKE_CASCADE, expression, []);
} else if (expression is ThrowExpression) {
- reportError(ParserErrorCode.ASSERT_DOES_NOT_TAKE_THROW, expression, []);
+ reportError9(ParserErrorCode.ASSERT_DOES_NOT_TAKE_THROW, expression, []);
} else if (expression is RethrowExpression) {
- reportError(ParserErrorCode.ASSERT_DOES_NOT_TAKE_RETHROW, expression, []);
+ reportError9(ParserErrorCode.ASSERT_DOES_NOT_TAKE_RETHROW, expression, []);
}
Token rightParen = expect2(TokenType.CLOSE_PAREN);
Token semicolon = expect2(TokenType.SEMICOLON);
- return new AssertStatement.full(keyword, leftParen, expression, rightParen, semicolon);
+ return new AssertStatement(keyword, leftParen, expression, rightParen, semicolon);
}
/**
@@ -3178,7 +3214,7 @@
*/
Expression parseAssignableExpression(bool primaryAllowed) {
if (matches(Keyword.SUPER)) {
- return parseAssignableSelector(new SuperExpression.full(andAdvance), false);
+ return parseAssignableSelector(new SuperExpression(andAdvance), false);
}
Expression expression = parsePrimaryExpression();
bool isOptional = primaryAllowed || expression is SimpleIdentifier;
@@ -3186,15 +3222,15 @@
while (matches5(TokenType.OPEN_PAREN)) {
ArgumentList argumentList = parseArgumentList();
if (expression is SimpleIdentifier) {
- expression = new MethodInvocation.full(null, null, expression as SimpleIdentifier, argumentList);
+ expression = new MethodInvocation(null, null, expression as SimpleIdentifier, argumentList);
} else if (expression is PrefixedIdentifier) {
PrefixedIdentifier identifier = expression as PrefixedIdentifier;
- expression = new MethodInvocation.full(identifier.prefix, identifier.period, identifier.identifier, argumentList);
+ expression = new MethodInvocation(identifier.prefix, identifier.period, identifier.identifier, argumentList);
} else if (expression is PropertyAccess) {
PropertyAccess access = expression as PropertyAccess;
- expression = new MethodInvocation.full(access.target, access.operator, access.propertyName, argumentList);
+ expression = new MethodInvocation(access.target, access.operator, access.propertyName, argumentList);
} else {
- expression = new FunctionExpressionInvocation.full(expression, argumentList);
+ expression = new FunctionExpressionInvocation(expression, argumentList);
}
if (!primaryAllowed) {
isOptional = false;
@@ -3204,7 +3240,7 @@
if (identical(selectorExpression, expression)) {
if (!isOptional && (expression is PrefixedIdentifier)) {
PrefixedIdentifier identifier = expression as PrefixedIdentifier;
- expression = new PropertyAccess.full(identifier.prefix, identifier.period, identifier.identifier);
+ expression = new PropertyAccess(identifier.prefix, identifier.period, identifier.identifier);
}
return expression;
}
@@ -3231,13 +3267,13 @@
Token leftBracket = andAdvance;
Expression index = parseExpression2();
Token rightBracket = expect2(TokenType.CLOSE_SQUARE_BRACKET);
- return new IndexExpression.forTarget_full(prefix, leftBracket, index, rightBracket);
+ return new IndexExpression.forTarget(prefix, leftBracket, index, rightBracket);
} else if (matches5(TokenType.PERIOD)) {
Token period = andAdvance;
- return new PropertyAccess.full(prefix, period, parseSimpleIdentifier());
+ return new PropertyAccess(prefix, period, parseSimpleIdentifier());
} else {
if (!optional) {
- reportError9(ParserErrorCode.MISSING_ASSIGNABLE_SELECTOR, []);
+ reportError10(ParserErrorCode.MISSING_ASSIGNABLE_SELECTOR, []);
}
return prefix;
}
@@ -3257,13 +3293,13 @@
Expression parseBitwiseAndExpression() {
Expression expression;
if (matches(Keyword.SUPER) && matches4(peek(), TokenType.AMPERSAND)) {
- expression = new SuperExpression.full(andAdvance);
+ expression = new SuperExpression(andAdvance);
} else {
expression = parseShiftExpression();
}
while (matches5(TokenType.AMPERSAND)) {
Token operator = andAdvance;
- expression = new BinaryExpression.full(expression, operator, parseShiftExpression());
+ expression = new BinaryExpression(expression, operator, parseShiftExpression());
}
return expression;
}
@@ -3282,13 +3318,13 @@
Expression parseBitwiseXorExpression() {
Expression expression;
if (matches(Keyword.SUPER) && matches4(peek(), TokenType.CARET)) {
- expression = new SuperExpression.full(andAdvance);
+ expression = new SuperExpression(andAdvance);
} else {
expression = parseBitwiseAndExpression();
}
while (matches5(TokenType.CARET)) {
Token operator = andAdvance;
- expression = new BinaryExpression.full(expression, operator, parseBitwiseAndExpression());
+ expression = new BinaryExpression(expression, operator, parseBitwiseAndExpression());
}
return expression;
}
@@ -3310,10 +3346,10 @@
label = parseSimpleIdentifier();
}
if (!_inLoop && !_inSwitch && label == null) {
- reportError10(ParserErrorCode.BREAK_OUTSIDE_OF_LOOP, breakKeyword, []);
+ reportError11(ParserErrorCode.BREAK_OUTSIDE_OF_LOOP, breakKeyword, []);
}
Token semicolon = expect2(TokenType.SEMICOLON);
- return new BreakStatement.full(breakKeyword, label, semicolon);
+ return new BreakStatement(breakKeyword, label, semicolon);
}
/**
@@ -3343,26 +3379,26 @@
Token leftBracket = andAdvance;
Expression index = parseExpression2();
Token rightBracket = expect2(TokenType.CLOSE_SQUARE_BRACKET);
- expression = new IndexExpression.forCascade_full(period, leftBracket, index, rightBracket);
+ expression = new IndexExpression.forCascade(period, leftBracket, index, rightBracket);
period = null;
} else {
- reportError10(ParserErrorCode.MISSING_IDENTIFIER, _currentToken, [_currentToken.lexeme]);
+ reportError11(ParserErrorCode.MISSING_IDENTIFIER, _currentToken, [_currentToken.lexeme]);
functionName = createSyntheticIdentifier();
}
if (identical(_currentToken.type, TokenType.OPEN_PAREN)) {
while (identical(_currentToken.type, TokenType.OPEN_PAREN)) {
if (functionName != null) {
- expression = new MethodInvocation.full(expression, period, functionName, parseArgumentList());
+ expression = new MethodInvocation(expression, period, functionName, parseArgumentList());
period = null;
functionName = null;
} else if (expression == null) {
- expression = new MethodInvocation.full(expression, period, createSyntheticIdentifier(), parseArgumentList());
+ expression = new MethodInvocation(expression, period, createSyntheticIdentifier(), parseArgumentList());
} else {
- expression = new FunctionExpressionInvocation.full(expression, parseArgumentList());
+ expression = new FunctionExpressionInvocation(expression, parseArgumentList());
}
}
} else if (functionName != null) {
- expression = new PropertyAccess.full(expression, period, functionName);
+ expression = new PropertyAccess(expression, period, functionName);
period = null;
}
bool progress = true;
@@ -3375,9 +3411,9 @@
while (identical(_currentToken.type, TokenType.OPEN_PAREN)) {
if (expression is PropertyAccess) {
PropertyAccess propertyAccess = expression as PropertyAccess;
- expression = new MethodInvocation.full(propertyAccess.target, propertyAccess.operator, propertyAccess.propertyName, parseArgumentList());
+ expression = new MethodInvocation(propertyAccess.target, propertyAccess.operator, propertyAccess.propertyName, parseArgumentList());
} else {
- expression = new FunctionExpressionInvocation.full(expression, parseArgumentList());
+ expression = new FunctionExpressionInvocation(expression, parseArgumentList());
}
}
}
@@ -3385,7 +3421,7 @@
if (_currentToken.type.isAssignmentOperator) {
Token operator = andAdvance;
ensureAssignable(expression);
- expression = new AssignmentExpression.full(expression, operator, parseExpressionWithoutCascade());
+ expression = new AssignmentExpression(expression, operator, parseExpressionWithoutCascade());
}
return expression;
}
@@ -3432,29 +3468,29 @@
if (extendsClause == null) {
extendsClause = parseExtendsClause();
if (withClause != null) {
- reportError10(ParserErrorCode.WITH_BEFORE_EXTENDS, withClause.withKeyword, []);
+ reportError11(ParserErrorCode.WITH_BEFORE_EXTENDS, withClause.withKeyword, []);
} else if (implementsClause != null) {
- reportError10(ParserErrorCode.IMPLEMENTS_BEFORE_EXTENDS, implementsClause.keyword, []);
+ reportError11(ParserErrorCode.IMPLEMENTS_BEFORE_EXTENDS, implementsClause.keyword, []);
}
} else {
- reportError10(ParserErrorCode.MULTIPLE_EXTENDS_CLAUSES, extendsClause.keyword, []);
+ reportError11(ParserErrorCode.MULTIPLE_EXTENDS_CLAUSES, extendsClause.keyword, []);
parseExtendsClause();
}
} else if (matches(Keyword.WITH)) {
if (withClause == null) {
withClause = parseWithClause();
if (implementsClause != null) {
- reportError10(ParserErrorCode.IMPLEMENTS_BEFORE_WITH, implementsClause.keyword, []);
+ reportError11(ParserErrorCode.IMPLEMENTS_BEFORE_WITH, implementsClause.keyword, []);
}
} else {
- reportError10(ParserErrorCode.MULTIPLE_WITH_CLAUSES, withClause.withKeyword, []);
+ reportError11(ParserErrorCode.MULTIPLE_WITH_CLAUSES, withClause.withKeyword, []);
parseWithClause();
}
} else if (matches(Keyword.IMPLEMENTS)) {
if (implementsClause == null) {
implementsClause = parseImplementsClause();
} else {
- reportError10(ParserErrorCode.MULTIPLE_IMPLEMENTS_CLAUSES, implementsClause.keyword, []);
+ reportError11(ParserErrorCode.MULTIPLE_IMPLEMENTS_CLAUSES, implementsClause.keyword, []);
parseImplementsClause();
}
} else {
@@ -3462,7 +3498,7 @@
}
}
if (withClause != null && extendsClause == null) {
- reportError10(ParserErrorCode.WITH_WITHOUT_EXTENDS, withClause.withKeyword, []);
+ reportError11(ParserErrorCode.WITH_WITHOUT_EXTENDS, withClause.withKeyword, []);
}
NativeClause nativeClause = null;
if (matches2(_NATIVE) && matches4(peek(), TokenType.STRING)) {
@@ -3478,9 +3514,9 @@
} else {
leftBracket = createSyntheticToken2(TokenType.OPEN_CURLY_BRACKET);
rightBracket = createSyntheticToken2(TokenType.CLOSE_CURLY_BRACKET);
- reportError9(ParserErrorCode.MISSING_CLASS_BODY, []);
+ reportError10(ParserErrorCode.MISSING_CLASS_BODY, []);
}
- ClassDeclaration classDeclaration = new ClassDeclaration.full(commentAndMetadata.comment, commentAndMetadata.metadata, abstractKeyword, keyword, name, typeParameters, extendsClause, withClause, implementsClause, leftBracket, members, rightBracket);
+ ClassDeclaration classDeclaration = new ClassDeclaration(commentAndMetadata.comment, commentAndMetadata.metadata, abstractKeyword, keyword, name, typeParameters, extendsClause, withClause, implementsClause, leftBracket, members, rightBracket);
classDeclaration.nativeClause = nativeClause;
return classDeclaration;
}
@@ -3503,7 +3539,7 @@
Token memberStart = _currentToken;
while (!matches5(TokenType.EOF) && !matches5(TokenType.CLOSE_CURLY_BRACKET) && (closingBracket != null || (!matches(Keyword.CLASS) && !matches(Keyword.TYPEDEF)))) {
if (matches5(TokenType.SEMICOLON)) {
- reportError10(ParserErrorCode.UNEXPECTED_TOKEN, _currentToken, [_currentToken.lexeme]);
+ reportError11(ParserErrorCode.UNEXPECTED_TOKEN, _currentToken, [_currentToken.lexeme]);
advance();
} else {
ClassMember member = parseClassMember(className);
@@ -3512,7 +3548,7 @@
}
}
if (identical(_currentToken, memberStart)) {
- reportError10(ParserErrorCode.UNEXPECTED_TOKEN, _currentToken, [_currentToken.lexeme]);
+ reportError11(ParserErrorCode.UNEXPECTED_TOKEN, _currentToken, [_currentToken.lexeme]);
advance();
}
memberStart = _currentToken;
@@ -3560,16 +3596,16 @@
semicolon = andAdvance;
} else {
if (matches5(TokenType.OPEN_CURLY_BRACKET)) {
- reportError9(ParserErrorCode.EXPECTED_TOKEN, [TokenType.SEMICOLON.lexeme]);
+ reportError10(ParserErrorCode.EXPECTED_TOKEN, [TokenType.SEMICOLON.lexeme]);
Token leftBracket = andAdvance;
parseClassMembers(className.name, getEndToken(leftBracket));
expect2(TokenType.CLOSE_CURLY_BRACKET);
} else {
- reportError10(ParserErrorCode.EXPECTED_TOKEN, _currentToken.previous, [TokenType.SEMICOLON.lexeme]);
+ reportError11(ParserErrorCode.EXPECTED_TOKEN, _currentToken.previous, [TokenType.SEMICOLON.lexeme]);
}
semicolon = createSyntheticToken2(TokenType.SEMICOLON);
}
- return new ClassTypeAlias.full(commentAndMetadata.comment, commentAndMetadata.metadata, keyword, className, typeParameters, equals, abstractKeyword, superclass, withClause, implementsClause, semicolon);
+ return new ClassTypeAlias(commentAndMetadata.comment, commentAndMetadata.metadata, keyword, className, typeParameters, equals, abstractKeyword, superclass, withClause, implementsClause, semicolon);
}
/**
@@ -3589,10 +3625,10 @@
Token keyword = expect2(TokenType.IDENTIFIER);
if (keyword.lexeme == _SHOW) {
List<SimpleIdentifier> shownNames = parseIdentifierList();
- combinators.add(new ShowCombinator.full(keyword, shownNames));
+ combinators.add(new ShowCombinator(keyword, shownNames));
} else {
List<SimpleIdentifier> hiddenNames = parseIdentifierList();
- combinators.add(new HideCombinator.full(keyword, hiddenNames));
+ combinators.add(new HideCombinator(keyword, hiddenNames));
}
}
return combinators;
@@ -3659,16 +3695,16 @@
Token nextToken;
Identifier identifier;
if (matches4(secondToken, TokenType.PERIOD) && matchesIdentifier2(thirdToken)) {
- identifier = new PrefixedIdentifier.full(new SimpleIdentifier.full(firstToken), secondToken, new SimpleIdentifier.full(thirdToken));
+ identifier = new PrefixedIdentifier(new SimpleIdentifier(firstToken), secondToken, new SimpleIdentifier(thirdToken));
nextToken = thirdToken.next;
} else {
- identifier = new SimpleIdentifier.full(firstToken);
+ identifier = new SimpleIdentifier(firstToken);
nextToken = firstToken.next;
}
if (nextToken.type != TokenType.EOF) {
return null;
}
- return new CommentReference.full(newKeyword, identifier);
+ return new CommentReference(newKeyword, identifier);
} else if (matches3(firstToken, Keyword.THIS) || matches3(firstToken, Keyword.NULL) || matches3(firstToken, Keyword.TRUE) || matches3(firstToken, Keyword.FALSE)) {
return null;
}
@@ -3759,7 +3795,7 @@
validateModifiersForTopLevelFunction(modifiers);
return parseFunctionDeclaration(commentAndMetadata, modifiers.externalKeyword, null);
} else if (matches(Keyword.OPERATOR) && isOperator(peek())) {
- reportError10(ParserErrorCode.TOP_LEVEL_OPERATOR, _currentToken, []);
+ reportError11(ParserErrorCode.TOP_LEVEL_OPERATOR, _currentToken, []);
return convertToFunctionDeclaration(parseOperator(commentAndMetadata, modifiers.externalKeyword, returnType));
} else if (matchesIdentifier() && matchesAny(peek(), [
TokenType.OPEN_PAREN,
@@ -3770,42 +3806,42 @@
} else {
if (matchesIdentifier()) {
if (matchesAny(peek(), [TokenType.EQ, TokenType.COMMA, TokenType.SEMICOLON])) {
- reportError(ParserErrorCode.VOID_VARIABLE, returnType, []);
- return new TopLevelVariableDeclaration.full(commentAndMetadata.comment, commentAndMetadata.metadata, parseVariableDeclarationList2(null, validateModifiersForTopLevelVariable(modifiers), null), expect2(TokenType.SEMICOLON));
+ reportError9(ParserErrorCode.VOID_VARIABLE, returnType, []);
+ return new TopLevelVariableDeclaration(commentAndMetadata.comment, commentAndMetadata.metadata, parseVariableDeclarationList2(null, validateModifiersForTopLevelVariable(modifiers), null), expect2(TokenType.SEMICOLON));
}
}
- reportError10(ParserErrorCode.EXPECTED_EXECUTABLE, _currentToken, []);
+ reportError11(ParserErrorCode.EXPECTED_EXECUTABLE, _currentToken, []);
return null;
}
} else if ((matches(Keyword.GET) || matches(Keyword.SET)) && matchesIdentifier2(peek())) {
validateModifiersForTopLevelFunction(modifiers);
return parseFunctionDeclaration(commentAndMetadata, modifiers.externalKeyword, null);
} else if (matches(Keyword.OPERATOR) && isOperator(peek())) {
- reportError10(ParserErrorCode.TOP_LEVEL_OPERATOR, _currentToken, []);
+ reportError11(ParserErrorCode.TOP_LEVEL_OPERATOR, _currentToken, []);
return convertToFunctionDeclaration(parseOperator(commentAndMetadata, modifiers.externalKeyword, null));
} else if (!matchesIdentifier()) {
- reportError10(ParserErrorCode.EXPECTED_EXECUTABLE, _currentToken, []);
+ reportError11(ParserErrorCode.EXPECTED_EXECUTABLE, _currentToken, []);
return null;
} else if (matches4(peek(), TokenType.OPEN_PAREN)) {
validateModifiersForTopLevelFunction(modifiers);
return parseFunctionDeclaration(commentAndMetadata, modifiers.externalKeyword, null);
} else if (matchesAny(peek(), [TokenType.EQ, TokenType.COMMA, TokenType.SEMICOLON])) {
if (modifiers.constKeyword == null && modifiers.finalKeyword == null && modifiers.varKeyword == null) {
- reportError9(ParserErrorCode.MISSING_CONST_FINAL_VAR_OR_TYPE, []);
+ reportError10(ParserErrorCode.MISSING_CONST_FINAL_VAR_OR_TYPE, []);
}
- return new TopLevelVariableDeclaration.full(commentAndMetadata.comment, commentAndMetadata.metadata, parseVariableDeclarationList2(null, validateModifiersForTopLevelVariable(modifiers), null), expect2(TokenType.SEMICOLON));
+ return new TopLevelVariableDeclaration(commentAndMetadata.comment, commentAndMetadata.metadata, parseVariableDeclarationList2(null, validateModifiersForTopLevelVariable(modifiers), null), expect2(TokenType.SEMICOLON));
}
TypeName returnType = parseReturnType();
if ((matches(Keyword.GET) || matches(Keyword.SET)) && matchesIdentifier2(peek())) {
validateModifiersForTopLevelFunction(modifiers);
return parseFunctionDeclaration(commentAndMetadata, modifiers.externalKeyword, returnType);
} else if (matches(Keyword.OPERATOR) && isOperator(peek())) {
- reportError10(ParserErrorCode.TOP_LEVEL_OPERATOR, _currentToken, []);
+ reportError11(ParserErrorCode.TOP_LEVEL_OPERATOR, _currentToken, []);
return convertToFunctionDeclaration(parseOperator(commentAndMetadata, modifiers.externalKeyword, returnType));
} else if (matches5(TokenType.AT)) {
- return new TopLevelVariableDeclaration.full(commentAndMetadata.comment, commentAndMetadata.metadata, parseVariableDeclarationList2(null, validateModifiersForTopLevelVariable(modifiers), returnType), expect2(TokenType.SEMICOLON));
+ return new TopLevelVariableDeclaration(commentAndMetadata.comment, commentAndMetadata.metadata, parseVariableDeclarationList2(null, validateModifiersForTopLevelVariable(modifiers), returnType), expect2(TokenType.SEMICOLON));
} else if (!matchesIdentifier()) {
- reportError10(ParserErrorCode.EXPECTED_EXECUTABLE, _currentToken, []);
+ reportError11(ParserErrorCode.EXPECTED_EXECUTABLE, _currentToken, []);
Token semicolon;
if (matches5(TokenType.SEMICOLON)) {
semicolon = andAdvance;
@@ -3813,8 +3849,8 @@
semicolon = createSyntheticToken2(TokenType.SEMICOLON);
}
List<VariableDeclaration> variables = new List<VariableDeclaration>();
- variables.add(new VariableDeclaration.full(null, null, createSyntheticIdentifier(), null, null));
- return new TopLevelVariableDeclaration.full(commentAndMetadata.comment, commentAndMetadata.metadata, new VariableDeclarationList.full(null, null, null, returnType, variables), semicolon);
+ variables.add(new VariableDeclaration(null, null, createSyntheticIdentifier(), null, null));
+ return new TopLevelVariableDeclaration(commentAndMetadata.comment, commentAndMetadata.metadata, new VariableDeclarationList(null, null, null, returnType, variables), semicolon);
}
if (matchesAny(peek(), [
TokenType.OPEN_PAREN,
@@ -3823,7 +3859,7 @@
validateModifiersForTopLevelFunction(modifiers);
return parseFunctionDeclaration(commentAndMetadata, modifiers.externalKeyword, returnType);
}
- return new TopLevelVariableDeclaration.full(commentAndMetadata.comment, commentAndMetadata.metadata, parseVariableDeclarationList2(null, validateModifiersForTopLevelVariable(modifiers), returnType), expect2(TokenType.SEMICOLON));
+ return new TopLevelVariableDeclaration(commentAndMetadata.comment, commentAndMetadata.metadata, parseVariableDeclarationList2(null, validateModifiersForTopLevelVariable(modifiers), returnType), expect2(TokenType.SEMICOLON));
}
/**
@@ -3880,27 +3916,27 @@
if (matches5(TokenType.EQ)) {
separator = andAdvance;
redirectedConstructor = parseConstructorName();
- body = new EmptyFunctionBody.full(expect2(TokenType.SEMICOLON));
+ body = new EmptyFunctionBody(expect2(TokenType.SEMICOLON));
if (factoryKeyword == null) {
- reportError(ParserErrorCode.REDIRECTION_IN_NON_FACTORY_CONSTRUCTOR, redirectedConstructor, []);
+ reportError9(ParserErrorCode.REDIRECTION_IN_NON_FACTORY_CONSTRUCTOR, redirectedConstructor, []);
}
} else {
body = parseFunctionBody(true, ParserErrorCode.MISSING_FUNCTION_BODY, false);
if (constKeyword != null && factoryKeyword != null && externalKeyword == null) {
- reportError10(ParserErrorCode.CONST_FACTORY, factoryKeyword, []);
+ reportError11(ParserErrorCode.CONST_FACTORY, factoryKeyword, []);
} else if (body is EmptyFunctionBody) {
if (factoryKeyword != null && externalKeyword == null) {
- reportError10(ParserErrorCode.FACTORY_WITHOUT_BODY, factoryKeyword, []);
+ reportError11(ParserErrorCode.FACTORY_WITHOUT_BODY, factoryKeyword, []);
}
} else {
if (constKeyword != null) {
- reportError(ParserErrorCode.CONST_CONSTRUCTOR_WITH_BODY, body, []);
+ reportError9(ParserErrorCode.CONST_CONSTRUCTOR_WITH_BODY, body, []);
} else if (!bodyAllowed) {
- reportError(ParserErrorCode.EXTERNAL_CONSTRUCTOR_WITH_BODY, body, []);
+ reportError9(ParserErrorCode.EXTERNAL_CONSTRUCTOR_WITH_BODY, body, []);
}
}
}
- return new ConstructorDeclaration.full(commentAndMetadata.comment, commentAndMetadata.metadata, externalKeyword, constKeyword, factoryKeyword, returnType, period, name, parameters, separator, initializers, redirectedConstructor, body);
+ return new ConstructorDeclaration(commentAndMetadata.comment, commentAndMetadata.metadata, externalKeyword, constKeyword, factoryKeyword, returnType, period, name, parameters, separator, initializers, redirectedConstructor, body);
}
/**
@@ -3933,9 +3969,9 @@
}
tokenType = _currentToken.type;
}
- expression = new CascadeExpression.full(expression, cascadeSections);
+ expression = new CascadeExpression(expression, cascadeSections);
}
- return new ConstructorFieldInitializer.full(keyword, period, fieldName, equals, expression);
+ return new ConstructorFieldInitializer(keyword, period, fieldName, equals, expression);
}
/**
@@ -3951,17 +3987,17 @@
Statement parseContinueStatement() {
Token continueKeyword = expect(Keyword.CONTINUE);
if (!_inLoop && !_inSwitch) {
- reportError10(ParserErrorCode.CONTINUE_OUTSIDE_OF_LOOP, continueKeyword, []);
+ reportError11(ParserErrorCode.CONTINUE_OUTSIDE_OF_LOOP, continueKeyword, []);
}
SimpleIdentifier label = null;
if (matchesIdentifier()) {
label = parseSimpleIdentifier();
}
if (_inSwitch && !_inLoop && label == null) {
- reportError10(ParserErrorCode.CONTINUE_WITHOUT_LABEL_IN_CASE, continueKeyword, []);
+ reportError11(ParserErrorCode.CONTINUE_WITHOUT_LABEL_IN_CASE, continueKeyword, []);
}
Token semicolon = expect2(TokenType.SEMICOLON);
- return new ContinueStatement.full(continueKeyword, label, semicolon);
+ return new ContinueStatement(continueKeyword, label, semicolon);
}
/**
@@ -4051,7 +4087,7 @@
Expression condition = parseExpression2();
Token rightParenthesis = expect2(TokenType.CLOSE_PAREN);
Token semicolon = expect2(TokenType.SEMICOLON);
- return new DoStatement.full(doKeyword, body, whileKeyword, leftParenthesis, condition, rightParenthesis, semicolon);
+ return new DoStatement(doKeyword, body, whileKeyword, leftParenthesis, condition, rightParenthesis, semicolon);
} finally {
_inLoop = wasInLoop;
}
@@ -4067,7 +4103,7 @@
*
* @return the empty statement that was parsed
*/
- Statement parseEmptyStatement() => new EmptyStatement.full(andAdvance);
+ Statement parseEmptyStatement() => new EmptyStatement(andAdvance);
/**
* Parse an equality expression.
@@ -4083,7 +4119,7 @@
Expression parseEqualityExpression() {
Expression expression;
if (matches(Keyword.SUPER) && _currentToken.next.type.isEqualityOperator) {
- expression = new SuperExpression.full(andAdvance);
+ expression = new SuperExpression(andAdvance);
} else {
expression = parseRelationalExpression();
}
@@ -4091,9 +4127,9 @@
while (_currentToken.type.isEqualityOperator) {
Token operator = andAdvance;
if (leftEqualityExpression) {
- reportError(ParserErrorCode.EQUALITY_CANNOT_BE_EQUALITY_OPERAND, expression, []);
+ reportError9(ParserErrorCode.EQUALITY_CANNOT_BE_EQUALITY_OPERAND, expression, []);
}
- expression = new BinaryExpression.full(expression, operator, parseRelationalExpression());
+ expression = new BinaryExpression(expression, operator, parseRelationalExpression());
leftEqualityExpression = true;
}
return expression;
@@ -4115,7 +4151,7 @@
StringLiteral libraryUri = parseStringLiteral();
List<Combinator> combinators = parseCombinators();
Token semicolon = expect2(TokenType.SEMICOLON);
- return new ExportDirective.full(commentAndMetadata.comment, commentAndMetadata.metadata, exportKeyword, libraryUri, combinators, semicolon);
+ return new ExportDirective(commentAndMetadata.comment, commentAndMetadata.metadata, exportKeyword, libraryUri, combinators, semicolon);
}
/**
@@ -4165,7 +4201,7 @@
if (isTypedIdentifier(_currentToken)) {
type = parseReturnType();
} else if (!optional) {
- reportError9(ParserErrorCode.MISSING_CONST_FINAL_VAR_OR_TYPE, []);
+ reportError10(ParserErrorCode.MISSING_CONST_FINAL_VAR_OR_TYPE, []);
}
}
return new FinalConstVarOrType(keyword, type);
@@ -4193,22 +4229,22 @@
Token seperator = andAdvance;
Expression defaultValue = parseExpression2();
if (identical(kind, ParameterKind.NAMED)) {
- reportError10(ParserErrorCode.WRONG_SEPARATOR_FOR_NAMED_PARAMETER, seperator, []);
+ reportError11(ParserErrorCode.WRONG_SEPARATOR_FOR_NAMED_PARAMETER, seperator, []);
} else if (identical(kind, ParameterKind.REQUIRED)) {
- reportError(ParserErrorCode.POSITIONAL_PARAMETER_OUTSIDE_GROUP, parameter, []);
+ reportError9(ParserErrorCode.POSITIONAL_PARAMETER_OUTSIDE_GROUP, parameter, []);
}
- return new DefaultFormalParameter.full(parameter, kind, seperator, defaultValue);
+ return new DefaultFormalParameter(parameter, kind, seperator, defaultValue);
} else if (matches5(TokenType.COLON)) {
Token seperator = andAdvance;
Expression defaultValue = parseExpression2();
if (identical(kind, ParameterKind.POSITIONAL)) {
- reportError10(ParserErrorCode.WRONG_SEPARATOR_FOR_POSITIONAL_PARAMETER, seperator, []);
+ reportError11(ParserErrorCode.WRONG_SEPARATOR_FOR_POSITIONAL_PARAMETER, seperator, []);
} else if (identical(kind, ParameterKind.REQUIRED)) {
- reportError(ParserErrorCode.NAMED_PARAMETER_OUTSIDE_GROUP, parameter, []);
+ reportError9(ParserErrorCode.NAMED_PARAMETER_OUTSIDE_GROUP, parameter, []);
}
- return new DefaultFormalParameter.full(parameter, kind, seperator, defaultValue);
+ return new DefaultFormalParameter(parameter, kind, seperator, defaultValue);
} else if (kind != ParameterKind.REQUIRED) {
- return new DefaultFormalParameter.full(parameter, kind, null, null);
+ return new DefaultFormalParameter(parameter, kind, null, null);
}
return parameter;
}
@@ -4245,8 +4281,8 @@
if (matchesIdentifier() && matches3(peek(), Keyword.IN)) {
List<VariableDeclaration> variables = new List<VariableDeclaration>();
SimpleIdentifier variableName = parseSimpleIdentifier();
- variables.add(new VariableDeclaration.full(null, null, variableName, null, null));
- variableList = new VariableDeclarationList.full(commentAndMetadata.comment, commentAndMetadata.metadata, null, null, variables);
+ variables.add(new VariableDeclaration(null, null, variableName, null, null));
+ variableList = new VariableDeclarationList(commentAndMetadata.comment, commentAndMetadata.metadata, null, null, variables);
} else if (isInitializedVariableDeclaration()) {
variableList = parseVariableDeclarationList(commentAndMetadata);
} else {
@@ -4256,20 +4292,20 @@
DeclaredIdentifier loopVariable = null;
SimpleIdentifier identifier = null;
if (variableList == null) {
- reportError9(ParserErrorCode.MISSING_VARIABLE_IN_FOR_EACH, []);
+ reportError10(ParserErrorCode.MISSING_VARIABLE_IN_FOR_EACH, []);
} else {
NodeList<VariableDeclaration> variables = variableList.variables;
if (variables.length > 1) {
- reportError9(ParserErrorCode.MULTIPLE_VARIABLES_IN_FOR_EACH, [variables.length.toString()]);
+ reportError10(ParserErrorCode.MULTIPLE_VARIABLES_IN_FOR_EACH, [variables.length.toString()]);
}
VariableDeclaration variable = variables[0];
if (variable.initializer != null) {
- reportError9(ParserErrorCode.INITIALIZED_VARIABLE_IN_FOR_EACH, []);
+ reportError10(ParserErrorCode.INITIALIZED_VARIABLE_IN_FOR_EACH, []);
}
Token keyword = variableList.keyword;
TypeName type = variableList.type;
if (keyword != null || type != null) {
- loopVariable = new DeclaredIdentifier.full(commentAndMetadata.comment, commentAndMetadata.metadata, keyword, type, variable.name);
+ loopVariable = new DeclaredIdentifier(commentAndMetadata.comment, commentAndMetadata.metadata, keyword, type, variable.name);
} else {
if (!commentAndMetadata.metadata.isEmpty) {
}
@@ -4281,9 +4317,9 @@
Token rightParenthesis = expect2(TokenType.CLOSE_PAREN);
Statement body = parseStatement2();
if (loopVariable == null) {
- return new ForEachStatement.con2_full(forKeyword, leftParenthesis, identifier, inKeyword, iterator, rightParenthesis, body);
+ return new ForEachStatement.con2(forKeyword, leftParenthesis, identifier, inKeyword, iterator, rightParenthesis, body);
}
- return new ForEachStatement.con1_full(forKeyword, leftParenthesis, loopVariable, inKeyword, iterator, rightParenthesis, body);
+ return new ForEachStatement.con1(forKeyword, leftParenthesis, loopVariable, inKeyword, iterator, rightParenthesis, body);
}
}
Token leftSeparator = expect2(TokenType.SEMICOLON);
@@ -4298,7 +4334,7 @@
}
Token rightParenthesis = expect2(TokenType.CLOSE_PAREN);
Statement body = parseStatement2();
- return new ForStatement.full(forKeyword, leftParenthesis, variableList, initialization, leftSeparator, condition, rightSeparator, updaters, rightParenthesis, body);
+ return new ForStatement(forKeyword, leftParenthesis, variableList, initialization, leftSeparator, condition, rightSeparator, updaters, rightParenthesis, body);
} finally {
_inLoop = wasInLoop;
}
@@ -4318,7 +4354,7 @@
* </pre>
*
* @param mayBeEmpty `true` if the function body is allowed to be empty
- * @param emptyErrorCode the error code to report if function body expecte, but not found
+ * @param emptyErrorCode the error code to report if function body expected, but not found
* @param inExpression `true` if the function body is being parsed as part of an expression
* and therefore does not have a terminating semicolon
* @return the function body that was parsed
@@ -4331,9 +4367,9 @@
try {
if (matches5(TokenType.SEMICOLON)) {
if (!mayBeEmpty) {
- reportError9(emptyErrorCode, []);
+ reportError10(emptyErrorCode, []);
}
- return new EmptyFunctionBody.full(andAdvance);
+ return new EmptyFunctionBody(andAdvance);
} else if (matches5(TokenType.FUNCTION)) {
Token functionDefinition = andAdvance;
Expression expression = parseExpression2();
@@ -4341,19 +4377,26 @@
if (!inExpression) {
semicolon = expect2(TokenType.SEMICOLON);
}
- return new ExpressionFunctionBody.full(functionDefinition, expression, semicolon);
+ if (!_parseFunctionBodies) {
+ return new EmptyFunctionBody(createSyntheticToken2(TokenType.SEMICOLON));
+ }
+ return new ExpressionFunctionBody(functionDefinition, expression, semicolon);
} else if (matches5(TokenType.OPEN_CURLY_BRACKET)) {
- return new BlockFunctionBody.full(parseBlock());
+ if (!_parseFunctionBodies) {
+ skipBlock();
+ return new EmptyFunctionBody(createSyntheticToken2(TokenType.SEMICOLON));
+ }
+ return new BlockFunctionBody(parseBlock());
} else if (matches2(_NATIVE)) {
Token nativeToken = andAdvance;
StringLiteral stringLiteral = null;
if (matches5(TokenType.STRING)) {
stringLiteral = parseStringLiteral();
}
- return new NativeFunctionBody.full(nativeToken, stringLiteral, expect2(TokenType.SEMICOLON));
+ return new NativeFunctionBody(nativeToken, stringLiteral, expect2(TokenType.SEMICOLON));
} else {
- reportError9(emptyErrorCode, []);
- return new EmptyFunctionBody.full(createSyntheticToken2(TokenType.SEMICOLON));
+ reportError10(emptyErrorCode, []);
+ return new EmptyFunctionBody(createSyntheticToken2(TokenType.SEMICOLON));
}
} finally {
_inLoop = wasInLoop;
@@ -4393,19 +4436,19 @@
parameters = parseFormalParameterList();
validateFormalParameterList(parameters);
} else {
- reportError9(ParserErrorCode.MISSING_FUNCTION_PARAMETERS, []);
+ reportError10(ParserErrorCode.MISSING_FUNCTION_PARAMETERS, []);
}
} else if (matches5(TokenType.OPEN_PAREN)) {
- reportError9(ParserErrorCode.GETTER_WITH_PARAMETERS, []);
+ reportError10(ParserErrorCode.GETTER_WITH_PARAMETERS, []);
parseFormalParameterList();
}
FunctionBody body;
if (externalKeyword == null) {
body = parseFunctionBody(false, ParserErrorCode.MISSING_FUNCTION_BODY, false);
} else {
- body = new EmptyFunctionBody.full(expect2(TokenType.SEMICOLON));
+ body = new EmptyFunctionBody(expect2(TokenType.SEMICOLON));
}
- return new FunctionDeclaration.full(commentAndMetadata.comment, commentAndMetadata.metadata, externalKeyword, returnType, keyword, name, new FunctionExpression.full(parameters, body));
+ return new FunctionDeclaration(commentAndMetadata.comment, commentAndMetadata.metadata, externalKeyword, returnType, keyword, name, new FunctionExpression(parameters, body));
}
/**
@@ -4442,12 +4485,12 @@
Token propertyKeyword = declaration.propertyKeyword;
if (propertyKeyword != null) {
if (identical((propertyKeyword as KeywordToken).keyword, Keyword.GET)) {
- reportError10(ParserErrorCode.GETTER_IN_FUNCTION, propertyKeyword, []);
+ reportError11(ParserErrorCode.GETTER_IN_FUNCTION, propertyKeyword, []);
} else {
- reportError10(ParserErrorCode.SETTER_IN_FUNCTION, propertyKeyword, []);
+ reportError11(ParserErrorCode.SETTER_IN_FUNCTION, propertyKeyword, []);
}
}
- return new FunctionDeclarationStatement.full(declaration);
+ return new FunctionDeclarationStatement(declaration);
}
/**
@@ -4476,18 +4519,18 @@
typeParameters = parseTypeParameterList();
}
if (matches5(TokenType.SEMICOLON) || matches5(TokenType.EOF)) {
- reportError9(ParserErrorCode.MISSING_TYPEDEF_PARAMETERS, []);
- FormalParameterList parameters = new FormalParameterList.full(createSyntheticToken2(TokenType.OPEN_PAREN), null, null, null, createSyntheticToken2(TokenType.CLOSE_PAREN));
+ reportError10(ParserErrorCode.MISSING_TYPEDEF_PARAMETERS, []);
+ FormalParameterList parameters = new FormalParameterList(createSyntheticToken2(TokenType.OPEN_PAREN), null, null, null, createSyntheticToken2(TokenType.CLOSE_PAREN));
Token semicolon = expect2(TokenType.SEMICOLON);
- return new FunctionTypeAlias.full(commentAndMetadata.comment, commentAndMetadata.metadata, keyword, returnType, name, typeParameters, parameters, semicolon);
+ return new FunctionTypeAlias(commentAndMetadata.comment, commentAndMetadata.metadata, keyword, returnType, name, typeParameters, parameters, semicolon);
} else if (!matches5(TokenType.OPEN_PAREN)) {
- reportError9(ParserErrorCode.MISSING_TYPEDEF_PARAMETERS, []);
- return new FunctionTypeAlias.full(commentAndMetadata.comment, commentAndMetadata.metadata, keyword, returnType, name, typeParameters, new FormalParameterList.full(createSyntheticToken2(TokenType.OPEN_PAREN), null, null, null, createSyntheticToken2(TokenType.CLOSE_PAREN)), createSyntheticToken2(TokenType.SEMICOLON));
+ reportError10(ParserErrorCode.MISSING_TYPEDEF_PARAMETERS, []);
+ return new FunctionTypeAlias(commentAndMetadata.comment, commentAndMetadata.metadata, keyword, returnType, name, typeParameters, new FormalParameterList(createSyntheticToken2(TokenType.OPEN_PAREN), null, null, null, createSyntheticToken2(TokenType.CLOSE_PAREN)), createSyntheticToken2(TokenType.SEMICOLON));
}
FormalParameterList parameters = parseFormalParameterList();
validateFormalParameterList(parameters);
Token semicolon = expect2(TokenType.SEMICOLON);
- return new FunctionTypeAlias.full(commentAndMetadata.comment, commentAndMetadata.metadata, keyword, returnType, name, typeParameters, parameters, semicolon);
+ return new FunctionTypeAlias(commentAndMetadata.comment, commentAndMetadata.metadata, keyword, returnType, name, typeParameters, parameters, semicolon);
}
/**
@@ -4513,15 +4556,15 @@
Token propertyKeyword = expect(Keyword.GET);
SimpleIdentifier name = parseSimpleIdentifier();
if (matches5(TokenType.OPEN_PAREN) && matches4(peek(), TokenType.CLOSE_PAREN)) {
- reportError9(ParserErrorCode.GETTER_WITH_PARAMETERS, []);
+ reportError10(ParserErrorCode.GETTER_WITH_PARAMETERS, []);
advance();
advance();
}
FunctionBody body = parseFunctionBody(externalKeyword != null || staticKeyword == null, ParserErrorCode.STATIC_GETTER_WITHOUT_BODY, false);
if (externalKeyword != null && body is! EmptyFunctionBody) {
- reportError9(ParserErrorCode.EXTERNAL_GETTER_WITH_BODY, []);
+ reportError10(ParserErrorCode.EXTERNAL_GETTER_WITH_BODY, []);
}
- return new MethodDeclaration.full(commentAndMetadata.comment, commentAndMetadata.metadata, externalKeyword, staticKeyword, returnType, propertyKeyword, null, name, null, body);
+ return new MethodDeclaration(commentAndMetadata.comment, commentAndMetadata.metadata, externalKeyword, staticKeyword, returnType, propertyKeyword, null, name, null, body);
}
/**
@@ -4566,7 +4609,7 @@
elseKeyword = andAdvance;
elseStatement = parseStatement2();
}
- return new IfStatement.full(ifKeyword, leftParenthesis, condition, rightParenthesis, thenStatement, elseKeyword, elseStatement);
+ return new IfStatement(ifKeyword, leftParenthesis, condition, rightParenthesis, thenStatement, elseKeyword, elseStatement);
}
/**
@@ -4591,7 +4634,7 @@
}
List<Combinator> combinators = parseCombinators();
Token semicolon = expect2(TokenType.SEMICOLON);
- return new ImportDirective.full(commentAndMetadata.comment, commentAndMetadata.metadata, importKeyword, libraryUri, asToken, prefix, combinators, semicolon);
+ return new ImportDirective(commentAndMetadata.comment, commentAndMetadata.metadata, importKeyword, libraryUri, asToken, prefix, combinators, semicolon);
}
/**
@@ -4619,7 +4662,7 @@
*/
FieldDeclaration parseInitializedIdentifierList(CommentAndMetadata commentAndMetadata, Token staticKeyword, Token keyword, TypeName type) {
VariableDeclarationList fieldList = parseVariableDeclarationList2(null, keyword, type);
- return new FieldDeclaration.full(commentAndMetadata.comment, commentAndMetadata.metadata, staticKeyword, fieldList, expect2(TokenType.SEMICOLON));
+ return new FieldDeclaration(commentAndMetadata.comment, commentAndMetadata.metadata, staticKeyword, fieldList, expect2(TokenType.SEMICOLON));
}
/**
@@ -4636,7 +4679,7 @@
InstanceCreationExpression parseInstanceCreationExpression(Token keyword) {
ConstructorName constructorName = parseConstructorName();
ArgumentList argumentList = parseArgumentList();
- return new InstanceCreationExpression.full(keyword, constructorName, argumentList);
+ return new InstanceCreationExpression(keyword, constructorName, argumentList);
}
/**
@@ -4654,7 +4697,7 @@
Token keyword = expect(Keyword.LIBRARY);
LibraryIdentifier libraryName = parseLibraryName(ParserErrorCode.MISSING_NAME_IN_LIBRARY_DIRECTIVE, keyword);
Token semicolon = expect2(TokenType.SEMICOLON);
- return new LibraryDirective.full(commentAndMetadata.comment, commentAndMetadata.metadata, keyword, libraryName, semicolon);
+ return new LibraryDirective(commentAndMetadata.comment, commentAndMetadata.metadata, keyword, libraryName, semicolon);
}
/**
@@ -4675,13 +4718,13 @@
return parseLibraryIdentifier();
} else if (matches5(TokenType.STRING)) {
StringLiteral string = parseStringLiteral();
- reportError(ParserErrorCode.NON_IDENTIFIER_LIBRARY_NAME, string, []);
+ reportError9(ParserErrorCode.NON_IDENTIFIER_LIBRARY_NAME, string, []);
} else {
- reportError10(missingNameError, missingNameToken, []);
+ reportError11(missingNameError, missingNameToken, []);
}
List<SimpleIdentifier> components = new List<SimpleIdentifier>();
components.add(createSyntheticIdentifier());
- return new LibraryIdentifier.full(components);
+ return new LibraryIdentifier(components);
}
/**
@@ -4707,22 +4750,22 @@
leftBracket.setNext(rightBracket);
_currentToken.previous.setNext(leftBracket);
_currentToken = _currentToken.next;
- return new ListLiteral.full(modifier, typeArguments, leftBracket, null, rightBracket);
+ return new ListLiteral(modifier, typeArguments, leftBracket, null, rightBracket);
}
Token leftBracket = expect2(TokenType.OPEN_SQUARE_BRACKET);
if (matches5(TokenType.CLOSE_SQUARE_BRACKET)) {
- return new ListLiteral.full(modifier, typeArguments, leftBracket, null, andAdvance);
+ return new ListLiteral(modifier, typeArguments, leftBracket, null, andAdvance);
}
List<Expression> elements = new List<Expression>();
elements.add(parseExpression2());
while (optional(TokenType.COMMA)) {
if (matches5(TokenType.CLOSE_SQUARE_BRACKET)) {
- return new ListLiteral.full(modifier, typeArguments, leftBracket, elements, andAdvance);
+ return new ListLiteral(modifier, typeArguments, leftBracket, elements, andAdvance);
}
elements.add(parseExpression2());
}
Token rightBracket = expect2(TokenType.CLOSE_SQUARE_BRACKET);
- return new ListLiteral.full(modifier, typeArguments, leftBracket, elements, rightBracket);
+ return new ListLiteral(modifier, typeArguments, leftBracket, elements, rightBracket);
}
/**
@@ -4748,8 +4791,8 @@
} else if (matches5(TokenType.OPEN_SQUARE_BRACKET) || matches5(TokenType.INDEX)) {
return parseListLiteral(modifier, typeArguments);
}
- reportError9(ParserErrorCode.EXPECTED_LIST_OR_MAP_LITERAL, []);
- return new ListLiteral.full(modifier, typeArguments, createSyntheticToken2(TokenType.OPEN_SQUARE_BRACKET), null, createSyntheticToken2(TokenType.CLOSE_SQUARE_BRACKET));
+ reportError10(ParserErrorCode.EXPECTED_LIST_OR_MAP_LITERAL, []);
+ return new ListLiteral(modifier, typeArguments, createSyntheticToken2(TokenType.OPEN_SQUARE_BRACKET), null, createSyntheticToken2(TokenType.CLOSE_SQUARE_BRACKET));
}
/**
@@ -4766,7 +4809,7 @@
Expression expression = parseEqualityExpression();
while (matches5(TokenType.AMPERSAND_AMPERSAND)) {
Token operator = andAdvance;
- expression = new BinaryExpression.full(expression, operator, parseEqualityExpression());
+ expression = new BinaryExpression(expression, operator, parseEqualityExpression());
}
return expression;
}
@@ -4789,17 +4832,17 @@
Token leftBracket = expect2(TokenType.OPEN_CURLY_BRACKET);
List<MapLiteralEntry> entries = new List<MapLiteralEntry>();
if (matches5(TokenType.CLOSE_CURLY_BRACKET)) {
- return new MapLiteral.full(modifier, typeArguments, leftBracket, entries, andAdvance);
+ return new MapLiteral(modifier, typeArguments, leftBracket, entries, andAdvance);
}
entries.add(parseMapLiteralEntry());
while (optional(TokenType.COMMA)) {
if (matches5(TokenType.CLOSE_CURLY_BRACKET)) {
- return new MapLiteral.full(modifier, typeArguments, leftBracket, entries, andAdvance);
+ return new MapLiteral(modifier, typeArguments, leftBracket, entries, andAdvance);
}
entries.add(parseMapLiteralEntry());
}
Token rightBracket = expect2(TokenType.CLOSE_CURLY_BRACKET);
- return new MapLiteral.full(modifier, typeArguments, leftBracket, entries, rightBracket);
+ return new MapLiteral(modifier, typeArguments, leftBracket, entries, rightBracket);
}
/**
@@ -4847,14 +4890,14 @@
FunctionBody body = parseFunctionBody(externalKeyword != null || staticKeyword == null, ParserErrorCode.MISSING_FUNCTION_BODY, false);
if (externalKeyword != null) {
if (body is! EmptyFunctionBody) {
- reportError(ParserErrorCode.EXTERNAL_METHOD_WITH_BODY, body, []);
+ reportError9(ParserErrorCode.EXTERNAL_METHOD_WITH_BODY, body, []);
}
} else if (staticKeyword != null) {
if (body is EmptyFunctionBody) {
- reportError(ParserErrorCode.ABSTRACT_STATIC_METHOD, body, []);
+ reportError9(ParserErrorCode.ABSTRACT_STATIC_METHOD, body, []);
}
}
- return new MethodDeclaration.full(commentAndMetadata.comment, commentAndMetadata.metadata, externalKeyword, staticKeyword, returnType, null, null, name, parameters, body);
+ return new MethodDeclaration(commentAndMetadata.comment, commentAndMetadata.metadata, externalKeyword, staticKeyword, returnType, null, null, name, parameters, body);
}
/**
@@ -4879,49 +4922,49 @@
}
if (matches(Keyword.ABSTRACT)) {
if (modifiers.abstractKeyword != null) {
- reportError9(ParserErrorCode.DUPLICATED_MODIFIER, [_currentToken.lexeme]);
+ reportError10(ParserErrorCode.DUPLICATED_MODIFIER, [_currentToken.lexeme]);
advance();
} else {
modifiers.abstractKeyword = andAdvance;
}
} else if (matches(Keyword.CONST)) {
if (modifiers.constKeyword != null) {
- reportError9(ParserErrorCode.DUPLICATED_MODIFIER, [_currentToken.lexeme]);
+ reportError10(ParserErrorCode.DUPLICATED_MODIFIER, [_currentToken.lexeme]);
advance();
} else {
modifiers.constKeyword = andAdvance;
}
} else if (matches(Keyword.EXTERNAL) && !matches4(peek(), TokenType.PERIOD) && !matches4(peek(), TokenType.LT)) {
if (modifiers.externalKeyword != null) {
- reportError9(ParserErrorCode.DUPLICATED_MODIFIER, [_currentToken.lexeme]);
+ reportError10(ParserErrorCode.DUPLICATED_MODIFIER, [_currentToken.lexeme]);
advance();
} else {
modifiers.externalKeyword = andAdvance;
}
} else if (matches(Keyword.FACTORY) && !matches4(peek(), TokenType.PERIOD) && !matches4(peek(), TokenType.LT)) {
if (modifiers.factoryKeyword != null) {
- reportError9(ParserErrorCode.DUPLICATED_MODIFIER, [_currentToken.lexeme]);
+ reportError10(ParserErrorCode.DUPLICATED_MODIFIER, [_currentToken.lexeme]);
advance();
} else {
modifiers.factoryKeyword = andAdvance;
}
} else if (matches(Keyword.FINAL)) {
if (modifiers.finalKeyword != null) {
- reportError9(ParserErrorCode.DUPLICATED_MODIFIER, [_currentToken.lexeme]);
+ reportError10(ParserErrorCode.DUPLICATED_MODIFIER, [_currentToken.lexeme]);
advance();
} else {
modifiers.finalKeyword = andAdvance;
}
} else if (matches(Keyword.STATIC) && !matches4(peek(), TokenType.PERIOD) && !matches4(peek(), TokenType.LT)) {
if (modifiers.staticKeyword != null) {
- reportError9(ParserErrorCode.DUPLICATED_MODIFIER, [_currentToken.lexeme]);
+ reportError10(ParserErrorCode.DUPLICATED_MODIFIER, [_currentToken.lexeme]);
advance();
} else {
modifiers.staticKeyword = andAdvance;
}
} else if (matches(Keyword.VAR)) {
if (modifiers.varKeyword != null) {
- reportError9(ParserErrorCode.DUPLICATED_MODIFIER, [_currentToken.lexeme]);
+ reportError10(ParserErrorCode.DUPLICATED_MODIFIER, [_currentToken.lexeme]);
advance();
} else {
modifiers.varKeyword = andAdvance;
@@ -4947,13 +4990,13 @@
Expression parseMultiplicativeExpression() {
Expression expression;
if (matches(Keyword.SUPER) && _currentToken.next.type.isMultiplicativeOperator) {
- expression = new SuperExpression.full(andAdvance);
+ expression = new SuperExpression(andAdvance);
} else {
expression = parseUnaryExpression();
}
while (_currentToken.type.isMultiplicativeOperator) {
Token operator = andAdvance;
- expression = new BinaryExpression.full(expression, operator, parseUnaryExpression());
+ expression = new BinaryExpression(expression, operator, parseUnaryExpression());
}
return expression;
}
@@ -4971,7 +5014,7 @@
NativeClause parseNativeClause() {
Token keyword = andAdvance;
StringLiteral name = parseStringLiteral();
- return new NativeClause.full(keyword, name);
+ return new NativeClause(keyword, name);
}
/**
@@ -5015,7 +5058,7 @@
if (matches4(peek(), TokenType.STRING)) {
Token afterString = skipStringLiteral(_currentToken.next);
if (afterString != null && identical(afterString.type, TokenType.COLON)) {
- return new ExpressionStatement.full(parseExpression2(), expect2(TokenType.SEMICOLON));
+ return new ExpressionStatement(parseExpression2(), expect2(TokenType.SEMICOLON));
}
}
return parseBlock();
@@ -5034,13 +5077,13 @@
} else if (identical(keyword, Keyword.IF)) {
return parseIfStatement();
} else if (identical(keyword, Keyword.RETHROW)) {
- return new ExpressionStatement.full(parseRethrowExpression(), expect2(TokenType.SEMICOLON));
+ return new ExpressionStatement(parseRethrowExpression(), expect2(TokenType.SEMICOLON));
} else if (identical(keyword, Keyword.RETURN)) {
return parseReturnStatement();
} else if (identical(keyword, Keyword.SWITCH)) {
return parseSwitchStatement();
} else if (identical(keyword, Keyword.THROW)) {
- return new ExpressionStatement.full(parseThrowExpression(), expect2(TokenType.SEMICOLON));
+ return new ExpressionStatement(parseThrowExpression(), expect2(TokenType.SEMICOLON));
} else if (identical(keyword, Keyword.TRY)) {
return parseTryStatement();
} else if (identical(keyword, Keyword.WHILE)) {
@@ -5057,14 +5100,14 @@
} else {
if (matchesIdentifier()) {
if (matchesAny(peek(), [TokenType.EQ, TokenType.COMMA, TokenType.SEMICOLON])) {
- reportError(ParserErrorCode.VOID_VARIABLE, returnType, []);
+ reportError9(ParserErrorCode.VOID_VARIABLE, returnType, []);
return parseVariableDeclarationStatement(commentAndMetadata);
}
} else if (matches5(TokenType.CLOSE_CURLY_BRACKET)) {
return parseVariableDeclarationStatement2(commentAndMetadata, null, returnType);
}
- reportError9(ParserErrorCode.MISSING_STATEMENT, []);
- return new EmptyStatement.full(createSyntheticToken2(TokenType.SEMICOLON));
+ reportError10(ParserErrorCode.MISSING_STATEMENT, []);
+ return new EmptyStatement(createSyntheticToken2(TokenType.SEMICOLON));
}
} else if (identical(keyword, Keyword.CONST)) {
if (matchesAny(peek(), [
@@ -5072,21 +5115,21 @@
TokenType.OPEN_CURLY_BRACKET,
TokenType.OPEN_SQUARE_BRACKET,
TokenType.INDEX])) {
- return new ExpressionStatement.full(parseExpression2(), expect2(TokenType.SEMICOLON));
+ return new ExpressionStatement(parseExpression2(), expect2(TokenType.SEMICOLON));
} else if (matches4(peek(), TokenType.IDENTIFIER)) {
Token afterType = skipTypeName(peek());
if (afterType != null) {
if (matches4(afterType, TokenType.OPEN_PAREN) || (matches4(afterType, TokenType.PERIOD) && matches4(afterType.next, TokenType.IDENTIFIER) && matches4(afterType.next.next, TokenType.OPEN_PAREN))) {
- return new ExpressionStatement.full(parseExpression2(), expect2(TokenType.SEMICOLON));
+ return new ExpressionStatement(parseExpression2(), expect2(TokenType.SEMICOLON));
}
}
}
return parseVariableDeclarationStatement(commentAndMetadata);
} else if (identical(keyword, Keyword.NEW) || identical(keyword, Keyword.TRUE) || identical(keyword, Keyword.FALSE) || identical(keyword, Keyword.NULL) || identical(keyword, Keyword.SUPER) || identical(keyword, Keyword.THIS)) {
- return new ExpressionStatement.full(parseExpression2(), expect2(TokenType.SEMICOLON));
+ return new ExpressionStatement(parseExpression2(), expect2(TokenType.SEMICOLON));
} else {
- reportError9(ParserErrorCode.MISSING_STATEMENT, []);
- return new EmptyStatement.full(createSyntheticToken2(TokenType.SEMICOLON));
+ reportError10(ParserErrorCode.MISSING_STATEMENT, []);
+ return new EmptyStatement(createSyntheticToken2(TokenType.SEMICOLON));
}
} else if (matches5(TokenType.SEMICOLON)) {
return parseEmptyStatement();
@@ -5095,10 +5138,10 @@
} else if (isFunctionDeclaration()) {
return parseFunctionDeclarationStatement();
} else if (matches5(TokenType.CLOSE_CURLY_BRACKET)) {
- reportError9(ParserErrorCode.MISSING_STATEMENT, []);
- return new EmptyStatement.full(createSyntheticToken2(TokenType.SEMICOLON));
+ reportError10(ParserErrorCode.MISSING_STATEMENT, []);
+ return new EmptyStatement(createSyntheticToken2(TokenType.SEMICOLON));
} else {
- return new ExpressionStatement.full(parseExpression2(), expect2(TokenType.SEMICOLON));
+ return new ExpressionStatement(parseExpression2(), expect2(TokenType.SEMICOLON));
}
}
@@ -5125,17 +5168,17 @@
if (matches(Keyword.OPERATOR)) {
operatorKeyword = andAdvance;
} else {
- reportError10(ParserErrorCode.MISSING_KEYWORD_OPERATOR, _currentToken, []);
+ reportError11(ParserErrorCode.MISSING_KEYWORD_OPERATOR, _currentToken, []);
operatorKeyword = createSyntheticToken(Keyword.OPERATOR);
}
if (!_currentToken.isUserDefinableOperator) {
- reportError9(ParserErrorCode.NON_USER_DEFINABLE_OPERATOR, [_currentToken.lexeme]);
+ reportError10(ParserErrorCode.NON_USER_DEFINABLE_OPERATOR, [_currentToken.lexeme]);
}
- SimpleIdentifier name = new SimpleIdentifier.full(andAdvance);
+ SimpleIdentifier name = new SimpleIdentifier(andAdvance);
if (matches5(TokenType.EQ)) {
Token previous = _currentToken.previous;
if ((matches4(previous, TokenType.EQ_EQ) || matches4(previous, TokenType.BANG_EQ)) && _currentToken.offset == previous.offset + 2) {
- reportError9(ParserErrorCode.INVALID_OPERATOR, ["${previous.lexeme}${_currentToken.lexeme}"]);
+ reportError10(ParserErrorCode.INVALID_OPERATOR, ["${previous.lexeme}${_currentToken.lexeme}"]);
advance();
}
}
@@ -5143,9 +5186,9 @@
validateFormalParameterList(parameters);
FunctionBody body = parseFunctionBody(true, ParserErrorCode.MISSING_FUNCTION_BODY, false);
if (externalKeyword != null && body is! EmptyFunctionBody) {
- reportError9(ParserErrorCode.EXTERNAL_OPERATOR_WITH_BODY, []);
+ reportError10(ParserErrorCode.EXTERNAL_OPERATOR_WITH_BODY, []);
}
- return new MethodDeclaration.full(commentAndMetadata.comment, commentAndMetadata.metadata, externalKeyword, null, returnType, null, operatorKeyword, name, parameters, body);
+ return new MethodDeclaration(commentAndMetadata.comment, commentAndMetadata.metadata, externalKeyword, null, returnType, null, operatorKeyword, name, parameters, body);
}
/**
@@ -5184,11 +5227,11 @@
Token ofKeyword = andAdvance;
LibraryIdentifier libraryName = parseLibraryName(ParserErrorCode.MISSING_NAME_IN_PART_OF_DIRECTIVE, ofKeyword);
Token semicolon = expect2(TokenType.SEMICOLON);
- return new PartOfDirective.full(commentAndMetadata.comment, commentAndMetadata.metadata, partKeyword, ofKeyword, libraryName, semicolon);
+ return new PartOfDirective(commentAndMetadata.comment, commentAndMetadata.metadata, partKeyword, ofKeyword, libraryName, semicolon);
}
StringLiteral partUri = parseStringLiteral();
Token semicolon = expect2(TokenType.SEMICOLON);
- return new PartDirective.full(commentAndMetadata.comment, commentAndMetadata.metadata, partKeyword, partUri, semicolon);
+ return new PartDirective(commentAndMetadata.comment, commentAndMetadata.metadata, partKeyword, partUri, semicolon);
}
/**
@@ -5214,9 +5257,9 @@
ArgumentList argumentList = parseArgumentList();
if (operand is PropertyAccess) {
PropertyAccess access = operand as PropertyAccess;
- operand = new MethodInvocation.full(access.target, access.operator, access.propertyName, argumentList);
+ operand = new MethodInvocation(access.target, access.operator, access.propertyName, argumentList);
} else {
- operand = new FunctionExpressionInvocation.full(operand, argumentList);
+ operand = new FunctionExpressionInvocation(operand, argumentList);
}
} else {
operand = parseAssignableSelector(operand, true);
@@ -5228,10 +5271,10 @@
return operand;
}
if (operand is Literal || operand is FunctionExpressionInvocation) {
- reportError9(ParserErrorCode.MISSING_ASSIGNABLE_SELECTOR, []);
+ reportError10(ParserErrorCode.MISSING_ASSIGNABLE_SELECTOR, []);
}
Token operator = andAdvance;
- return new PostfixExpression.full(operand, operator);
+ return new PostfixExpression(operand, operator);
}
/**
@@ -5263,15 +5306,15 @@
*/
Expression parsePrimaryExpression() {
if (matches(Keyword.THIS)) {
- return new ThisExpression.full(andAdvance);
+ return new ThisExpression(andAdvance);
} else if (matches(Keyword.SUPER)) {
- return parseAssignableSelector(new SuperExpression.full(andAdvance), false);
+ return parseAssignableSelector(new SuperExpression(andAdvance), false);
} else if (matches(Keyword.NULL)) {
- return new NullLiteral.full(andAdvance);
+ return new NullLiteral(andAdvance);
} else if (matches(Keyword.FALSE)) {
- return new BooleanLiteral.full(andAdvance, false);
+ return new BooleanLiteral(andAdvance, false);
} else if (matches(Keyword.TRUE)) {
- return new BooleanLiteral.full(andAdvance, true);
+ return new BooleanLiteral(andAdvance, true);
} else if (matches5(TokenType.DOUBLE)) {
Token token = andAdvance;
double value = 0.0;
@@ -5279,7 +5322,7 @@
value = double.parse(token.lexeme);
} on FormatException catch (exception) {
}
- return new DoubleLiteral.full(token, value);
+ return new DoubleLiteral(token, value);
} else if (matches5(TokenType.HEXADECIMAL)) {
Token token = andAdvance;
int value = null;
@@ -5287,7 +5330,7 @@
value = int.parse(token.lexeme.substring(2), radix: 16);
} on FormatException catch (exception) {
}
- return new IntegerLiteral.full(token, value);
+ return new IntegerLiteral(token, value);
} else if (matches5(TokenType.INT)) {
Token token = andAdvance;
int value = null;
@@ -5295,7 +5338,7 @@
value = int.parse(token.lexeme);
} on FormatException catch (exception) {
}
- return new IntegerLiteral.full(token, value);
+ return new IntegerLiteral(token, value);
} else if (matches5(TokenType.STRING)) {
return parseStringLiteral();
} else if (matches5(TokenType.OPEN_CURLY_BRACKET)) {
@@ -5315,19 +5358,19 @@
Token leftParenthesis = andAdvance;
Expression expression = parseExpression2();
Token rightParenthesis = expect2(TokenType.CLOSE_PAREN);
- return new ParenthesizedExpression.full(leftParenthesis, expression, rightParenthesis);
+ return new ParenthesizedExpression(leftParenthesis, expression, rightParenthesis);
} else if (matches5(TokenType.LT)) {
return parseListOrMapLiteral(null);
} else if (matches5(TokenType.QUESTION)) {
return parseArgumentDefinitionTest();
} else if (matches(Keyword.VOID)) {
- reportError9(ParserErrorCode.UNEXPECTED_TOKEN, [_currentToken.lexeme]);
+ reportError10(ParserErrorCode.UNEXPECTED_TOKEN, [_currentToken.lexeme]);
advance();
return parsePrimaryExpression();
} else if (matches5(TokenType.HASH)) {
return parseSymbolLiteral();
} else {
- reportError9(ParserErrorCode.MISSING_IDENTIFIER, []);
+ reportError10(ParserErrorCode.MISSING_IDENTIFIER, []);
return createSyntheticIdentifier();
}
}
@@ -5351,7 +5394,7 @@
constructorName = parseSimpleIdentifier();
}
ArgumentList argumentList = parseArgumentList();
- return new RedirectingConstructorInvocation.full(keyword, period, constructorName, argumentList);
+ return new RedirectingConstructorInvocation(keyword, period, constructorName, argumentList);
}
/**
@@ -5367,25 +5410,25 @@
*/
Expression parseRelationalExpression() {
if (matches(Keyword.SUPER) && _currentToken.next.type.isRelationalOperator) {
- Expression expression = new SuperExpression.full(andAdvance);
+ Expression expression = new SuperExpression(andAdvance);
Token operator = andAdvance;
- expression = new BinaryExpression.full(expression, operator, parseBitwiseOrExpression());
+ expression = new BinaryExpression(expression, operator, parseBitwiseOrExpression());
return expression;
}
Expression expression = parseBitwiseOrExpression();
if (matches(Keyword.AS)) {
Token asOperator = andAdvance;
- expression = new AsExpression.full(expression, asOperator, parseTypeName());
+ expression = new AsExpression(expression, asOperator, parseTypeName());
} else if (matches(Keyword.IS)) {
Token isOperator = andAdvance;
Token notOperator = null;
if (matches5(TokenType.BANG)) {
notOperator = andAdvance;
}
- expression = new IsExpression.full(expression, isOperator, notOperator, parseTypeName());
+ expression = new IsExpression(expression, isOperator, notOperator, parseTypeName());
} else if (_currentToken.type.isRelationalOperator) {
Token operator = andAdvance;
- expression = new BinaryExpression.full(expression, operator, parseBitwiseOrExpression());
+ expression = new BinaryExpression(expression, operator, parseBitwiseOrExpression());
}
return expression;
}
@@ -5400,7 +5443,7 @@
*
* @return the rethrow expression that was parsed
*/
- Expression parseRethrowExpression() => new RethrowExpression.full(expect(Keyword.RETHROW));
+ Expression parseRethrowExpression() => new RethrowExpression(expect(Keyword.RETHROW));
/**
* Parse a return statement.
@@ -5415,11 +5458,11 @@
Statement parseReturnStatement() {
Token returnKeyword = expect(Keyword.RETURN);
if (matches5(TokenType.SEMICOLON)) {
- return new ReturnStatement.full(returnKeyword, null, andAdvance);
+ return new ReturnStatement(returnKeyword, null, andAdvance);
}
Expression expression = parseExpression2();
Token semicolon = expect2(TokenType.SEMICOLON);
- return new ReturnStatement.full(returnKeyword, expression, semicolon);
+ return new ReturnStatement(returnKeyword, expression, semicolon);
}
/**
@@ -5448,9 +5491,9 @@
validateFormalParameterList(parameters);
FunctionBody body = parseFunctionBody(externalKeyword != null || staticKeyword == null, ParserErrorCode.STATIC_SETTER_WITHOUT_BODY, false);
if (externalKeyword != null && body is! EmptyFunctionBody) {
- reportError9(ParserErrorCode.EXTERNAL_SETTER_WITH_BODY, []);
+ reportError10(ParserErrorCode.EXTERNAL_SETTER_WITH_BODY, []);
}
- return new MethodDeclaration.full(commentAndMetadata.comment, commentAndMetadata.metadata, externalKeyword, staticKeyword, returnType, propertyKeyword, null, name, parameters, body);
+ return new MethodDeclaration(commentAndMetadata.comment, commentAndMetadata.metadata, externalKeyword, staticKeyword, returnType, propertyKeyword, null, name, parameters, body);
}
/**
@@ -5467,13 +5510,13 @@
Expression parseShiftExpression() {
Expression expression;
if (matches(Keyword.SUPER) && _currentToken.next.type.isShiftOperator) {
- expression = new SuperExpression.full(andAdvance);
+ expression = new SuperExpression(andAdvance);
} else {
expression = parseAdditiveExpression();
}
while (_currentToken.type.isShiftOperator) {
Token operator = andAdvance;
- expression = new BinaryExpression.full(expression, operator, parseAdditiveExpression());
+ expression = new BinaryExpression(expression, operator, parseAdditiveExpression());
}
return expression;
}
@@ -5494,7 +5537,7 @@
while (!matches5(TokenType.EOF) && !matches5(TokenType.CLOSE_CURLY_BRACKET) && !isSwitchMember()) {
statements.add(parseStatement2());
if (identical(_currentToken, statementStart)) {
- reportError10(ParserErrorCode.UNEXPECTED_TOKEN, _currentToken, [_currentToken.lexeme]);
+ reportError11(ParserErrorCode.UNEXPECTED_TOKEN, _currentToken, [_currentToken.lexeme]);
advance();
}
statementStart = _currentToken;
@@ -5510,30 +5553,30 @@
StringInterpolation parseStringInterpolation(Token string) {
List<InterpolationElement> elements = new List<InterpolationElement>();
bool hasMore = matches5(TokenType.STRING_INTERPOLATION_EXPRESSION) || matches5(TokenType.STRING_INTERPOLATION_IDENTIFIER);
- elements.add(new InterpolationString.full(string, computeStringValue(string.lexeme, true, !hasMore)));
+ elements.add(new InterpolationString(string, computeStringValue(string.lexeme, true, !hasMore)));
while (hasMore) {
if (matches5(TokenType.STRING_INTERPOLATION_EXPRESSION)) {
Token openToken = andAdvance;
Expression expression = parseExpression2();
Token rightBracket = expect2(TokenType.CLOSE_CURLY_BRACKET);
- elements.add(new InterpolationExpression.full(openToken, expression, rightBracket));
+ elements.add(new InterpolationExpression(openToken, expression, rightBracket));
} else {
Token openToken = andAdvance;
Expression expression = null;
if (matches(Keyword.THIS)) {
- expression = new ThisExpression.full(andAdvance);
+ expression = new ThisExpression(andAdvance);
} else {
expression = parseSimpleIdentifier();
}
- elements.add(new InterpolationExpression.full(openToken, expression, null));
+ elements.add(new InterpolationExpression(openToken, expression, null));
}
if (matches5(TokenType.STRING)) {
string = andAdvance;
hasMore = matches5(TokenType.STRING_INTERPOLATION_EXPRESSION) || matches5(TokenType.STRING_INTERPOLATION_IDENTIFIER);
- elements.add(new InterpolationString.full(string, computeStringValue(string.lexeme, false, !hasMore)));
+ elements.add(new InterpolationString(string, computeStringValue(string.lexeme, false, !hasMore)));
}
}
- return new StringInterpolation.full(elements);
+ return new StringInterpolation(elements);
}
/**
@@ -5555,7 +5598,7 @@
constructorName = parseSimpleIdentifier();
}
ArgumentList argumentList = parseArgumentList();
- return new SuperConstructorInvocation.full(keyword, period, constructorName, argumentList);
+ return new SuperConstructorInvocation(keyword, period, constructorName, argumentList);
}
/**
@@ -5592,37 +5635,37 @@
SimpleIdentifier identifier = parseSimpleIdentifier();
String label = identifier.token.lexeme;
if (definedLabels.contains(label)) {
- reportError10(ParserErrorCode.DUPLICATE_LABEL_IN_SWITCH_STATEMENT, identifier.token, [label]);
+ reportError11(ParserErrorCode.DUPLICATE_LABEL_IN_SWITCH_STATEMENT, identifier.token, [label]);
} else {
definedLabels.add(label);
}
Token colon = expect2(TokenType.COLON);
- labels.add(new Label.full(identifier, colon));
+ labels.add(new Label(identifier, colon));
}
if (matches(Keyword.CASE)) {
Token caseKeyword = andAdvance;
Expression caseExpression = parseExpression2();
Token colon = expect2(TokenType.COLON);
- members.add(new SwitchCase.full(labels, caseKeyword, caseExpression, colon, parseStatements2()));
+ members.add(new SwitchCase(labels, caseKeyword, caseExpression, colon, parseStatements2()));
if (defaultKeyword != null) {
- reportError10(ParserErrorCode.SWITCH_HAS_CASE_AFTER_DEFAULT_CASE, caseKeyword, []);
+ reportError11(ParserErrorCode.SWITCH_HAS_CASE_AFTER_DEFAULT_CASE, caseKeyword, []);
}
} else if (matches(Keyword.DEFAULT)) {
if (defaultKeyword != null) {
- reportError10(ParserErrorCode.SWITCH_HAS_MULTIPLE_DEFAULT_CASES, peek(), []);
+ reportError11(ParserErrorCode.SWITCH_HAS_MULTIPLE_DEFAULT_CASES, peek(), []);
}
defaultKeyword = andAdvance;
Token colon = expect2(TokenType.COLON);
- members.add(new SwitchDefault.full(labels, defaultKeyword, colon, parseStatements2()));
+ members.add(new SwitchDefault(labels, defaultKeyword, colon, parseStatements2()));
} else {
- reportError9(ParserErrorCode.EXPECTED_CASE_OR_DEFAULT, []);
+ reportError10(ParserErrorCode.EXPECTED_CASE_OR_DEFAULT, []);
while (!matches5(TokenType.EOF) && !matches5(TokenType.CLOSE_CURLY_BRACKET) && !matches(Keyword.CASE) && !matches(Keyword.DEFAULT)) {
advance();
}
}
}
Token rightBracket = expect2(TokenType.CLOSE_CURLY_BRACKET);
- return new SwitchStatement.full(keyword, leftParenthesis, expression, rightParenthesis, leftBracket, members, rightBracket);
+ return new SwitchStatement(keyword, leftParenthesis, expression, rightParenthesis, leftBracket, members, rightBracket);
} finally {
_inSwitch = wasInSwitch;
}
@@ -5648,7 +5691,7 @@
if (matchesIdentifier()) {
components.add(andAdvance);
} else {
- reportError9(ParserErrorCode.MISSING_IDENTIFIER, []);
+ reportError10(ParserErrorCode.MISSING_IDENTIFIER, []);
components.add(createSyntheticToken2(TokenType.IDENTIFIER));
break;
}
@@ -5656,10 +5699,10 @@
} else if (_currentToken.isOperator) {
components.add(andAdvance);
} else {
- reportError9(ParserErrorCode.MISSING_IDENTIFIER, []);
+ reportError10(ParserErrorCode.MISSING_IDENTIFIER, []);
components.add(createSyntheticToken2(TokenType.IDENTIFIER));
}
- return new SymbolLiteral.full(poundSign, new List.from(components));
+ return new SymbolLiteral(poundSign, new List.from(components));
}
/**
@@ -5675,11 +5718,11 @@
Expression parseThrowExpression() {
Token keyword = expect(Keyword.THROW);
if (matches5(TokenType.SEMICOLON) || matches5(TokenType.CLOSE_PAREN)) {
- reportError10(ParserErrorCode.MISSING_EXPRESSION_IN_THROW, _currentToken, []);
- return new ThrowExpression.full(keyword, createSyntheticIdentifier());
+ reportError11(ParserErrorCode.MISSING_EXPRESSION_IN_THROW, _currentToken, []);
+ return new ThrowExpression(keyword, createSyntheticIdentifier());
}
Expression expression = parseExpression2();
- return new ThrowExpression.full(keyword, expression);
+ return new ThrowExpression(keyword, expression);
}
/**
@@ -5695,11 +5738,11 @@
Expression parseThrowExpressionWithoutCascade() {
Token keyword = expect(Keyword.THROW);
if (matches5(TokenType.SEMICOLON) || matches5(TokenType.CLOSE_PAREN)) {
- reportError10(ParserErrorCode.MISSING_EXPRESSION_IN_THROW, _currentToken, []);
- return new ThrowExpression.full(keyword, createSyntheticIdentifier());
+ reportError11(ParserErrorCode.MISSING_EXPRESSION_IN_THROW, _currentToken, []);
+ return new ThrowExpression(keyword, createSyntheticIdentifier());
}
Expression expression = parseExpressionWithoutCascade();
- return new ThrowExpression.full(keyword, expression);
+ return new ThrowExpression(keyword, expression);
}
/**
@@ -5751,7 +5794,7 @@
rightParenthesis = expect2(TokenType.CLOSE_PAREN);
}
Block catchBody = parseBlock();
- catchClauses.add(new CatchClause.full(onKeyword, exceptionType, catchKeyword, leftParenthesis, exceptionParameter, comma, stackTraceParameter, rightParenthesis, catchBody));
+ catchClauses.add(new CatchClause(onKeyword, exceptionType, catchKeyword, leftParenthesis, exceptionParameter, comma, stackTraceParameter, rightParenthesis, catchBody));
}
Token finallyKeyword = null;
if (matches(Keyword.FINALLY)) {
@@ -5759,10 +5802,10 @@
finallyClause = parseBlock();
} else {
if (catchClauses.isEmpty) {
- reportError9(ParserErrorCode.MISSING_CATCH_OR_FINALLY, []);
+ reportError10(ParserErrorCode.MISSING_CATCH_OR_FINALLY, []);
}
}
- return new TryStatement.full(tryKeyword, body, catchClauses, finallyKeyword, finallyClause);
+ return new TryStatement(tryKeyword, body, catchClauses, finallyKeyword, finallyClause);
}
/**
@@ -5800,12 +5843,12 @@
next = skipTypeParameterList(next);
if (next != null && matches4(next, TokenType.EQ)) {
TypeAlias typeAlias = parseClassTypeAlias(commentAndMetadata, keyword);
- reportError10(ParserErrorCode.DEPRECATED_CLASS_TYPE_ALIAS, keyword, []);
+ reportError11(ParserErrorCode.DEPRECATED_CLASS_TYPE_ALIAS, keyword, []);
return typeAlias;
}
} else if (matches4(next, TokenType.EQ)) {
TypeAlias typeAlias = parseClassTypeAlias(commentAndMetadata, keyword);
- reportError10(ParserErrorCode.DEPRECATED_CLASS_TYPE_ALIAS, keyword, []);
+ reportError11(ParserErrorCode.DEPRECATED_CLASS_TYPE_ALIAS, keyword, []);
return typeAlias;
}
}
@@ -5831,16 +5874,16 @@
Token operator = andAdvance;
if (matches(Keyword.SUPER)) {
if (matches4(peek(), TokenType.OPEN_SQUARE_BRACKET) || matches4(peek(), TokenType.PERIOD)) {
- return new PrefixExpression.full(operator, parseUnaryExpression());
+ return new PrefixExpression(operator, parseUnaryExpression());
}
- return new PrefixExpression.full(operator, new SuperExpression.full(andAdvance));
+ return new PrefixExpression(operator, new SuperExpression(andAdvance));
}
- return new PrefixExpression.full(operator, parseUnaryExpression());
+ return new PrefixExpression(operator, parseUnaryExpression());
} else if (_currentToken.type.isIncrementOperator) {
Token operator = andAdvance;
if (matches(Keyword.SUPER)) {
if (matches4(peek(), TokenType.OPEN_SQUARE_BRACKET) || matches4(peek(), TokenType.PERIOD)) {
- return new PrefixExpression.full(operator, parseUnaryExpression());
+ return new PrefixExpression(operator, parseUnaryExpression());
}
if (identical(operator.type, TokenType.MINUS_MINUS)) {
int offset = operator.offset;
@@ -5849,15 +5892,15 @@
secondOperator.setNext(_currentToken);
firstOperator.setNext(secondOperator);
operator.previous.setNext(firstOperator);
- return new PrefixExpression.full(firstOperator, new PrefixExpression.full(secondOperator, new SuperExpression.full(andAdvance)));
+ return new PrefixExpression(firstOperator, new PrefixExpression(secondOperator, new SuperExpression(andAdvance)));
} else {
- reportError9(ParserErrorCode.INVALID_OPERATOR_FOR_SUPER, [operator.lexeme]);
- return new PrefixExpression.full(operator, new SuperExpression.full(andAdvance));
+ reportError10(ParserErrorCode.INVALID_OPERATOR_FOR_SUPER, [operator.lexeme]);
+ return new PrefixExpression(operator, new SuperExpression(andAdvance));
}
}
- return new PrefixExpression.full(operator, parseAssignableExpression(false));
+ return new PrefixExpression(operator, parseAssignableExpression(false));
} else if (matches5(TokenType.PLUS)) {
- reportError9(ParserErrorCode.MISSING_IDENTIFIER, []);
+ reportError10(ParserErrorCode.MISSING_IDENTIFIER, []);
return createSyntheticIdentifier();
}
return parsePostfixExpression();
@@ -5882,7 +5925,7 @@
equals = andAdvance;
initializer = parseExpression2();
}
- return new VariableDeclaration.full(commentAndMetadata.comment, commentAndMetadata.metadata, name, equals, initializer);
+ return new VariableDeclaration(commentAndMetadata.comment, commentAndMetadata.metadata, name, equals, initializer);
}
/**
@@ -5918,7 +5961,7 @@
*/
VariableDeclarationList parseVariableDeclarationList2(CommentAndMetadata commentAndMetadata, Token keyword, TypeName type) {
if (type != null && keyword != null && matches3(keyword, Keyword.VAR)) {
- reportError10(ParserErrorCode.VAR_AND_TYPE, keyword, []);
+ reportError11(ParserErrorCode.VAR_AND_TYPE, keyword, []);
}
List<VariableDeclaration> variables = new List<VariableDeclaration>();
variables.add(parseVariableDeclaration());
@@ -5926,7 +5969,7 @@
advance();
variables.add(parseVariableDeclaration());
}
- return new VariableDeclarationList.full(commentAndMetadata != null ? commentAndMetadata.comment : null, commentAndMetadata != null ? commentAndMetadata.metadata : null, keyword, type, variables);
+ return new VariableDeclarationList(commentAndMetadata != null ? commentAndMetadata.comment : null, commentAndMetadata != null ? commentAndMetadata.metadata : null, keyword, type, variables);
}
/**
@@ -5944,7 +5987,7 @@
VariableDeclarationStatement parseVariableDeclarationStatement(CommentAndMetadata commentAndMetadata) {
VariableDeclarationList variableList = parseVariableDeclarationList(commentAndMetadata);
Token semicolon = expect2(TokenType.SEMICOLON);
- return new VariableDeclarationStatement.full(variableList, semicolon);
+ return new VariableDeclarationStatement(variableList, semicolon);
}
/**
@@ -5965,7 +6008,7 @@
VariableDeclarationStatement parseVariableDeclarationStatement2(CommentAndMetadata commentAndMetadata, Token keyword, TypeName type) {
VariableDeclarationList variableList = parseVariableDeclarationList2(commentAndMetadata, keyword, type);
Token semicolon = expect2(TokenType.SEMICOLON);
- return new VariableDeclarationStatement.full(variableList, semicolon);
+ return new VariableDeclarationStatement(variableList, semicolon);
}
/**
@@ -5987,7 +6030,7 @@
Expression condition = parseExpression2();
Token rightParenthesis = expect2(TokenType.CLOSE_PAREN);
Statement body = parseStatement2();
- return new WhileStatement.full(keyword, leftParenthesis, condition, rightParenthesis, body);
+ return new WhileStatement(keyword, leftParenthesis, condition, rightParenthesis, body);
} finally {
_inLoop = wasInLoop;
}
@@ -6017,14 +6060,26 @@
}
/**
+ * Report the given [AnalysisError].
+ *
+ * @param error the error to be reported
+ */
+ void reportError(AnalysisError error) {
+ if (_errorListenerLock != 0) {
+ return;
+ }
+ _errorListener.onError(error);
+ }
+
+ /**
* Report an error with the given error code and arguments.
*
* @param errorCode the error code of the error to be reported
* @param node the node specifying the location of the error
* @param arguments the arguments to the error, used to compose the error message
*/
- void reportError(ParserErrorCode errorCode, ASTNode node, List<Object> arguments) {
- _errorListener.onError(new AnalysisError.con2(_source, node.offset, node.length, errorCode, arguments));
+ void reportError9(ParserErrorCode errorCode, ASTNode node, List<Object> arguments) {
+ reportError(new AnalysisError.con2(_source, node.offset, node.length, errorCode, arguments));
}
/**
@@ -6033,8 +6088,8 @@
* @param errorCode the error code of the error to be reported
* @param arguments the arguments to the error, used to compose the error message
*/
- void reportError9(ParserErrorCode errorCode, List<Object> arguments) {
- reportError10(errorCode, _currentToken, arguments);
+ void reportError10(ParserErrorCode errorCode, List<Object> arguments) {
+ reportError11(errorCode, _currentToken, arguments);
}
/**
@@ -6044,8 +6099,15 @@
* @param token the token specifying the location of the error
* @param arguments the arguments to the error, used to compose the error message
*/
- void reportError10(ParserErrorCode errorCode, Token token, List<Object> arguments) {
- _errorListener.onError(new AnalysisError.con2(_source, token.offset, token.length, errorCode, arguments));
+ void reportError11(ParserErrorCode errorCode, Token token, List<Object> arguments) {
+ reportError(new AnalysisError.con2(_source, token.offset, token.length, errorCode, arguments));
+ }
+
+ /**
+ * Skips a block with all containing blocks.
+ */
+ void skipBlock() {
+ _currentToken = (_currentToken as BeginToken).endToken.next;
}
/**
@@ -6486,13 +6548,13 @@
builder.appendChar(0xB);
} else if (currentChar == 0x78) {
if (currentIndex + 2 >= length) {
- reportError9(ParserErrorCode.INVALID_HEX_ESCAPE, []);
+ reportError10(ParserErrorCode.INVALID_HEX_ESCAPE, []);
return length;
}
int firstDigit = lexeme.codeUnitAt(currentIndex + 1);
int secondDigit = lexeme.codeUnitAt(currentIndex + 2);
if (!isHexDigit(firstDigit) || !isHexDigit(secondDigit)) {
- reportError9(ParserErrorCode.INVALID_HEX_ESCAPE, []);
+ reportError10(ParserErrorCode.INVALID_HEX_ESCAPE, []);
} else {
builder.appendChar(((Character.digit(firstDigit, 16) << 4) + Character.digit(secondDigit, 16)) as int);
}
@@ -6500,14 +6562,14 @@
} else if (currentChar == 0x75) {
currentIndex++;
if (currentIndex >= length) {
- reportError9(ParserErrorCode.INVALID_UNICODE_ESCAPE, []);
+ reportError10(ParserErrorCode.INVALID_UNICODE_ESCAPE, []);
return length;
}
currentChar = lexeme.codeUnitAt(currentIndex);
if (currentChar == 0x7B) {
currentIndex++;
if (currentIndex >= length) {
- reportError9(ParserErrorCode.INVALID_UNICODE_ESCAPE, []);
+ reportError10(ParserErrorCode.INVALID_UNICODE_ESCAPE, []);
return length;
}
currentChar = lexeme.codeUnitAt(currentIndex);
@@ -6515,7 +6577,7 @@
int value = 0;
while (currentChar != 0x7D) {
if (!isHexDigit(currentChar)) {
- reportError9(ParserErrorCode.INVALID_UNICODE_ESCAPE, []);
+ reportError10(ParserErrorCode.INVALID_UNICODE_ESCAPE, []);
currentIndex++;
while (currentIndex < length && lexeme.codeUnitAt(currentIndex) != 0x7D) {
currentIndex++;
@@ -6526,19 +6588,19 @@
value = (value << 4) + Character.digit(currentChar, 16);
currentIndex++;
if (currentIndex >= length) {
- reportError9(ParserErrorCode.INVALID_UNICODE_ESCAPE, []);
+ reportError10(ParserErrorCode.INVALID_UNICODE_ESCAPE, []);
return length;
}
currentChar = lexeme.codeUnitAt(currentIndex);
}
if (digitCount < 1 || digitCount > 6) {
- reportError9(ParserErrorCode.INVALID_UNICODE_ESCAPE, []);
+ reportError10(ParserErrorCode.INVALID_UNICODE_ESCAPE, []);
}
appendScalarValue(builder, lexeme.substring(index, currentIndex + 1), value, index, currentIndex);
return currentIndex + 1;
} else {
if (currentIndex + 3 >= length) {
- reportError9(ParserErrorCode.INVALID_UNICODE_ESCAPE, []);
+ reportError10(ParserErrorCode.INVALID_UNICODE_ESCAPE, []);
return length;
}
int firstDigit = currentChar;
@@ -6546,7 +6608,7 @@
int thirdDigit = lexeme.codeUnitAt(currentIndex + 2);
int fourthDigit = lexeme.codeUnitAt(currentIndex + 3);
if (!isHexDigit(firstDigit) || !isHexDigit(secondDigit) || !isHexDigit(thirdDigit) || !isHexDigit(fourthDigit)) {
- reportError9(ParserErrorCode.INVALID_UNICODE_ESCAPE, []);
+ reportError10(ParserErrorCode.INVALID_UNICODE_ESCAPE, []);
} else {
appendScalarValue(builder, lexeme.substring(index, currentIndex + 1), (((((Character.digit(firstDigit, 16) << 4) + Character.digit(secondDigit, 16)) << 4) + Character.digit(thirdDigit, 16)) << 4) + Character.digit(fourthDigit, 16), index, currentIndex + 3);
}
@@ -6559,6 +6621,17 @@
}
/**
+ * Decrements the error reporting lock level. If level is more than `0`, then
+ * [reportError] wont report any error.
+ */
+ void unlockErrorListener() {
+ if (_errorListenerLock == 0) {
+ throw new IllegalStateException("Attempt to unlock not locked error listener.");
+ }
+ _errorListenerLock--;
+ }
+
+ /**
* Validate that the given parameter list does not contain any field initializers.
*
* @param parameterList the parameter list to be validated
@@ -6566,7 +6639,7 @@
void validateFormalParameterList(FormalParameterList parameterList) {
for (FormalParameter parameter in parameterList.parameters) {
if (parameter is FieldFormalParameter) {
- reportError(ParserErrorCode.FIELD_INITIALIZER_OUTSIDE_CONSTRUCTOR, (parameter as FieldFormalParameter).identifier, []);
+ reportError9(ParserErrorCode.FIELD_INITIALIZER_OUTSIDE_CONSTRUCTOR, (parameter as FieldFormalParameter).identifier, []);
}
}
}
@@ -6580,16 +6653,16 @@
Token validateModifiersForClass(Modifiers modifiers) {
validateModifiersForTopLevelDeclaration(modifiers);
if (modifiers.constKeyword != null) {
- reportError10(ParserErrorCode.CONST_CLASS, modifiers.constKeyword, []);
+ reportError11(ParserErrorCode.CONST_CLASS, modifiers.constKeyword, []);
}
if (modifiers.externalKeyword != null) {
- reportError10(ParserErrorCode.EXTERNAL_CLASS, modifiers.externalKeyword, []);
+ reportError11(ParserErrorCode.EXTERNAL_CLASS, modifiers.externalKeyword, []);
}
if (modifiers.finalKeyword != null) {
- reportError10(ParserErrorCode.FINAL_CLASS, modifiers.finalKeyword, []);
+ reportError11(ParserErrorCode.FINAL_CLASS, modifiers.finalKeyword, []);
}
if (modifiers.varKeyword != null) {
- reportError10(ParserErrorCode.VAR_CLASS, modifiers.varKeyword, []);
+ reportError11(ParserErrorCode.VAR_CLASS, modifiers.varKeyword, []);
}
return modifiers.abstractKeyword;
}
@@ -6603,25 +6676,25 @@
*/
Token validateModifiersForConstructor(Modifiers modifiers) {
if (modifiers.abstractKeyword != null) {
- reportError9(ParserErrorCode.ABSTRACT_CLASS_MEMBER, []);
+ reportError10(ParserErrorCode.ABSTRACT_CLASS_MEMBER, []);
}
if (modifiers.finalKeyword != null) {
- reportError10(ParserErrorCode.FINAL_CONSTRUCTOR, modifiers.finalKeyword, []);
+ reportError11(ParserErrorCode.FINAL_CONSTRUCTOR, modifiers.finalKeyword, []);
}
if (modifiers.staticKeyword != null) {
- reportError10(ParserErrorCode.STATIC_CONSTRUCTOR, modifiers.staticKeyword, []);
+ reportError11(ParserErrorCode.STATIC_CONSTRUCTOR, modifiers.staticKeyword, []);
}
if (modifiers.varKeyword != null) {
- reportError10(ParserErrorCode.CONSTRUCTOR_WITH_RETURN_TYPE, modifiers.varKeyword, []);
+ reportError11(ParserErrorCode.CONSTRUCTOR_WITH_RETURN_TYPE, modifiers.varKeyword, []);
}
Token externalKeyword = modifiers.externalKeyword;
Token constKeyword = modifiers.constKeyword;
Token factoryKeyword = modifiers.factoryKeyword;
if (externalKeyword != null && constKeyword != null && constKeyword.offset < externalKeyword.offset) {
- reportError10(ParserErrorCode.EXTERNAL_AFTER_CONST, externalKeyword, []);
+ reportError11(ParserErrorCode.EXTERNAL_AFTER_CONST, externalKeyword, []);
}
if (externalKeyword != null && factoryKeyword != null && factoryKeyword.offset < externalKeyword.offset) {
- reportError10(ParserErrorCode.EXTERNAL_AFTER_FACTORY, externalKeyword, []);
+ reportError11(ParserErrorCode.EXTERNAL_AFTER_FACTORY, externalKeyword, []);
}
return constKeyword;
}
@@ -6635,13 +6708,13 @@
*/
Token validateModifiersForField(Modifiers modifiers) {
if (modifiers.abstractKeyword != null) {
- reportError9(ParserErrorCode.ABSTRACT_CLASS_MEMBER, []);
+ reportError10(ParserErrorCode.ABSTRACT_CLASS_MEMBER, []);
}
if (modifiers.externalKeyword != null) {
- reportError10(ParserErrorCode.EXTERNAL_FIELD, modifiers.externalKeyword, []);
+ reportError11(ParserErrorCode.EXTERNAL_FIELD, modifiers.externalKeyword, []);
}
if (modifiers.factoryKeyword != null) {
- reportError10(ParserErrorCode.NON_CONSTRUCTOR_FACTORY, modifiers.factoryKeyword, []);
+ reportError11(ParserErrorCode.NON_CONSTRUCTOR_FACTORY, modifiers.factoryKeyword, []);
}
Token staticKeyword = modifiers.staticKeyword;
Token constKeyword = modifiers.constKeyword;
@@ -6649,23 +6722,23 @@
Token varKeyword = modifiers.varKeyword;
if (constKeyword != null) {
if (finalKeyword != null) {
- reportError10(ParserErrorCode.CONST_AND_FINAL, finalKeyword, []);
+ reportError11(ParserErrorCode.CONST_AND_FINAL, finalKeyword, []);
}
if (varKeyword != null) {
- reportError10(ParserErrorCode.CONST_AND_VAR, varKeyword, []);
+ reportError11(ParserErrorCode.CONST_AND_VAR, varKeyword, []);
}
if (staticKeyword != null && constKeyword.offset < staticKeyword.offset) {
- reportError10(ParserErrorCode.STATIC_AFTER_CONST, staticKeyword, []);
+ reportError11(ParserErrorCode.STATIC_AFTER_CONST, staticKeyword, []);
}
} else if (finalKeyword != null) {
if (varKeyword != null) {
- reportError10(ParserErrorCode.FINAL_AND_VAR, varKeyword, []);
+ reportError11(ParserErrorCode.FINAL_AND_VAR, varKeyword, []);
}
if (staticKeyword != null && finalKeyword.offset < staticKeyword.offset) {
- reportError10(ParserErrorCode.STATIC_AFTER_FINAL, staticKeyword, []);
+ reportError11(ParserErrorCode.STATIC_AFTER_FINAL, staticKeyword, []);
}
} else if (varKeyword != null && staticKeyword != null && varKeyword.offset < staticKeyword.offset) {
- reportError10(ParserErrorCode.STATIC_AFTER_VAR, staticKeyword, []);
+ reportError11(ParserErrorCode.STATIC_AFTER_VAR, staticKeyword, []);
}
return lexicallyFirst([constKeyword, finalKeyword, varKeyword]);
}
@@ -6677,7 +6750,7 @@
*/
void validateModifiersForFunctionDeclarationStatement(Modifiers modifiers) {
if (modifiers.abstractKeyword != null || modifiers.constKeyword != null || modifiers.externalKeyword != null || modifiers.factoryKeyword != null || modifiers.finalKeyword != null || modifiers.staticKeyword != null || modifiers.varKeyword != null) {
- reportError9(ParserErrorCode.LOCAL_FUNCTION_DECLARATION_MODIFIER, []);
+ reportError10(ParserErrorCode.LOCAL_FUNCTION_DECLARATION_MODIFIER, []);
}
}
@@ -6688,24 +6761,24 @@
*/
void validateModifiersForGetterOrSetterOrMethod(Modifiers modifiers) {
if (modifiers.abstractKeyword != null) {
- reportError9(ParserErrorCode.ABSTRACT_CLASS_MEMBER, []);
+ reportError10(ParserErrorCode.ABSTRACT_CLASS_MEMBER, []);
}
if (modifiers.constKeyword != null) {
- reportError10(ParserErrorCode.CONST_METHOD, modifiers.constKeyword, []);
+ reportError11(ParserErrorCode.CONST_METHOD, modifiers.constKeyword, []);
}
if (modifiers.factoryKeyword != null) {
- reportError10(ParserErrorCode.NON_CONSTRUCTOR_FACTORY, modifiers.factoryKeyword, []);
+ reportError11(ParserErrorCode.NON_CONSTRUCTOR_FACTORY, modifiers.factoryKeyword, []);
}
if (modifiers.finalKeyword != null) {
- reportError10(ParserErrorCode.FINAL_METHOD, modifiers.finalKeyword, []);
+ reportError11(ParserErrorCode.FINAL_METHOD, modifiers.finalKeyword, []);
}
if (modifiers.varKeyword != null) {
- reportError10(ParserErrorCode.VAR_RETURN_TYPE, modifiers.varKeyword, []);
+ reportError11(ParserErrorCode.VAR_RETURN_TYPE, modifiers.varKeyword, []);
}
Token externalKeyword = modifiers.externalKeyword;
Token staticKeyword = modifiers.staticKeyword;
if (externalKeyword != null && staticKeyword != null && staticKeyword.offset < externalKeyword.offset) {
- reportError10(ParserErrorCode.EXTERNAL_AFTER_STATIC, externalKeyword, []);
+ reportError11(ParserErrorCode.EXTERNAL_AFTER_STATIC, externalKeyword, []);
}
}
@@ -6716,22 +6789,22 @@
*/
void validateModifiersForOperator(Modifiers modifiers) {
if (modifiers.abstractKeyword != null) {
- reportError9(ParserErrorCode.ABSTRACT_CLASS_MEMBER, []);
+ reportError10(ParserErrorCode.ABSTRACT_CLASS_MEMBER, []);
}
if (modifiers.constKeyword != null) {
- reportError10(ParserErrorCode.CONST_METHOD, modifiers.constKeyword, []);
+ reportError11(ParserErrorCode.CONST_METHOD, modifiers.constKeyword, []);
}
if (modifiers.factoryKeyword != null) {
- reportError10(ParserErrorCode.NON_CONSTRUCTOR_FACTORY, modifiers.factoryKeyword, []);
+ reportError11(ParserErrorCode.NON_CONSTRUCTOR_FACTORY, modifiers.factoryKeyword, []);
}
if (modifiers.finalKeyword != null) {
- reportError10(ParserErrorCode.FINAL_METHOD, modifiers.finalKeyword, []);
+ reportError11(ParserErrorCode.FINAL_METHOD, modifiers.finalKeyword, []);
}
if (modifiers.staticKeyword != null) {
- reportError10(ParserErrorCode.STATIC_OPERATOR, modifiers.staticKeyword, []);
+ reportError11(ParserErrorCode.STATIC_OPERATOR, modifiers.staticKeyword, []);
}
if (modifiers.varKeyword != null) {
- reportError10(ParserErrorCode.VAR_RETURN_TYPE, modifiers.varKeyword, []);
+ reportError11(ParserErrorCode.VAR_RETURN_TYPE, modifiers.varKeyword, []);
}
}
@@ -6742,10 +6815,10 @@
*/
void validateModifiersForTopLevelDeclaration(Modifiers modifiers) {
if (modifiers.factoryKeyword != null) {
- reportError10(ParserErrorCode.FACTORY_TOP_LEVEL_DECLARATION, modifiers.factoryKeyword, []);
+ reportError11(ParserErrorCode.FACTORY_TOP_LEVEL_DECLARATION, modifiers.factoryKeyword, []);
}
if (modifiers.staticKeyword != null) {
- reportError10(ParserErrorCode.STATIC_TOP_LEVEL_DECLARATION, modifiers.staticKeyword, []);
+ reportError11(ParserErrorCode.STATIC_TOP_LEVEL_DECLARATION, modifiers.staticKeyword, []);
}
}
@@ -6757,16 +6830,16 @@
void validateModifiersForTopLevelFunction(Modifiers modifiers) {
validateModifiersForTopLevelDeclaration(modifiers);
if (modifiers.abstractKeyword != null) {
- reportError9(ParserErrorCode.ABSTRACT_TOP_LEVEL_FUNCTION, []);
+ reportError10(ParserErrorCode.ABSTRACT_TOP_LEVEL_FUNCTION, []);
}
if (modifiers.constKeyword != null) {
- reportError10(ParserErrorCode.CONST_CLASS, modifiers.constKeyword, []);
+ reportError11(ParserErrorCode.CONST_CLASS, modifiers.constKeyword, []);
}
if (modifiers.finalKeyword != null) {
- reportError10(ParserErrorCode.FINAL_CLASS, modifiers.finalKeyword, []);
+ reportError11(ParserErrorCode.FINAL_CLASS, modifiers.finalKeyword, []);
}
if (modifiers.varKeyword != null) {
- reportError10(ParserErrorCode.VAR_RETURN_TYPE, modifiers.varKeyword, []);
+ reportError11(ParserErrorCode.VAR_RETURN_TYPE, modifiers.varKeyword, []);
}
}
@@ -6780,24 +6853,24 @@
Token validateModifiersForTopLevelVariable(Modifiers modifiers) {
validateModifiersForTopLevelDeclaration(modifiers);
if (modifiers.abstractKeyword != null) {
- reportError9(ParserErrorCode.ABSTRACT_TOP_LEVEL_VARIABLE, []);
+ reportError10(ParserErrorCode.ABSTRACT_TOP_LEVEL_VARIABLE, []);
}
if (modifiers.externalKeyword != null) {
- reportError10(ParserErrorCode.EXTERNAL_FIELD, modifiers.externalKeyword, []);
+ reportError11(ParserErrorCode.EXTERNAL_FIELD, modifiers.externalKeyword, []);
}
Token constKeyword = modifiers.constKeyword;
Token finalKeyword = modifiers.finalKeyword;
Token varKeyword = modifiers.varKeyword;
if (constKeyword != null) {
if (finalKeyword != null) {
- reportError10(ParserErrorCode.CONST_AND_FINAL, finalKeyword, []);
+ reportError11(ParserErrorCode.CONST_AND_FINAL, finalKeyword, []);
}
if (varKeyword != null) {
- reportError10(ParserErrorCode.CONST_AND_VAR, varKeyword, []);
+ reportError11(ParserErrorCode.CONST_AND_VAR, varKeyword, []);
}
} else if (finalKeyword != null) {
if (varKeyword != null) {
- reportError10(ParserErrorCode.FINAL_AND_VAR, varKeyword, []);
+ reportError11(ParserErrorCode.FINAL_AND_VAR, varKeyword, []);
}
}
return lexicallyFirst([constKeyword, finalKeyword, varKeyword]);
@@ -6812,19 +6885,19 @@
void validateModifiersForTypedef(Modifiers modifiers) {
validateModifiersForTopLevelDeclaration(modifiers);
if (modifiers.abstractKeyword != null) {
- reportError10(ParserErrorCode.ABSTRACT_TYPEDEF, modifiers.abstractKeyword, []);
+ reportError11(ParserErrorCode.ABSTRACT_TYPEDEF, modifiers.abstractKeyword, []);
}
if (modifiers.constKeyword != null) {
- reportError10(ParserErrorCode.CONST_TYPEDEF, modifiers.constKeyword, []);
+ reportError11(ParserErrorCode.CONST_TYPEDEF, modifiers.constKeyword, []);
}
if (modifiers.externalKeyword != null) {
- reportError10(ParserErrorCode.EXTERNAL_TYPEDEF, modifiers.externalKeyword, []);
+ reportError11(ParserErrorCode.EXTERNAL_TYPEDEF, modifiers.externalKeyword, []);
}
if (modifiers.finalKeyword != null) {
- reportError10(ParserErrorCode.FINAL_TYPEDEF, modifiers.finalKeyword, []);
+ reportError11(ParserErrorCode.FINAL_TYPEDEF, modifiers.finalKeyword, []);
}
if (modifiers.varKeyword != null) {
- reportError10(ParserErrorCode.VAR_TYPEDEF, modifiers.varKeyword, []);
+ reportError11(ParserErrorCode.VAR_TYPEDEF, modifiers.varKeyword, []);
}
}
}
diff --git a/pkg/analyzer/lib/src/generated/resolver.dart b/pkg/analyzer/lib/src/generated/resolver.dart
index c9f6551..021db55 100644
--- a/pkg/analyzer/lib/src/generated/resolver.dart
+++ b/pkg/analyzer/lib/src/generated/resolver.dart
@@ -239,12 +239,6 @@
Object visitDefaultFormalParameter(DefaultFormalParameter node) {
ElementHolder holder = new ElementHolder();
- visit(holder, node.defaultValue);
- FunctionElementImpl initializer = new FunctionElementImpl();
- initializer.functions = holder.functions;
- initializer.labels = holder.labels;
- initializer.localVariables = holder.localVariables;
- initializer.parameters = holder.parameters;
SimpleIdentifier parameterName = node.parameter.identifier;
ParameterElementImpl parameter;
if (node.parameter is FieldFormalParameter) {
@@ -254,10 +248,17 @@
}
parameter.const3 = node.isConst;
parameter.final2 = node.isFinal;
- parameter.initializer = initializer;
parameter.parameterKind = node.kind;
Expression defaultValue = node.defaultValue;
if (defaultValue != null) {
+ visit(holder, defaultValue);
+ FunctionElementImpl initializer = new FunctionElementImpl.con2(defaultValue.beginToken.offset);
+ initializer.functions = holder.functions;
+ initializer.labels = holder.labels;
+ initializer.localVariables = holder.localVariables;
+ initializer.parameters = holder.parameters;
+ initializer.synthetic = true;
+ parameter.initializer = initializer;
parameter.setDefaultValueRange(defaultValue.offset, defaultValue.length);
}
setParameterVisibleRange(node, parameter);
@@ -623,7 +624,7 @@
} finally {
_inFieldContext = wasInFieldContext;
}
- FunctionElementImpl initializer = new FunctionElementImpl();
+ FunctionElementImpl initializer = new FunctionElementImpl.con2(node.initializer.beginToken.offset);
initializer.functions = holder.functions;
initializer.labels = holder.labels;
initializer.localVariables = holder.localVariables;
@@ -1119,7 +1120,7 @@
/**
* The error listener to which errors will be reported.
*/
- RecordingErrorListener errorListener;
+ RecordingErrorListener _errorListener;
/**
* The modification time of the source for which an element is being built.
@@ -1150,7 +1151,7 @@
/**
* A set of the libraries that were resolved while resolving the HTML unit.
*/
- final Set<Library> resolvedLibraries = new Set<Library>();
+ Set<Library> _resolvedLibraries = new Set<Library>();
/**
* Initialize a newly created HTML unit builder.
@@ -1159,7 +1160,7 @@
*/
HtmlUnitBuilder(InternalAnalysisContext context) {
this._context = context;
- this.errorListener = new RecordingErrorListener();
+ this._errorListener = new RecordingErrorListener();
}
/**
@@ -1192,6 +1193,20 @@
return result;
}
+ /**
+ * Return the listener to which analysis errors will be reported.
+ *
+ * @return the listener to which analysis errors will be reported
+ */
+ RecordingErrorListener get errorListener => _errorListener;
+
+ /**
+ * Return an array containing information about all of the libraries that were resolved.
+ *
+ * @return an array containing the libraries that were resolved
+ */
+ Set<Library> get resolvedLibraries => _resolvedLibraries;
+
Object visitHtmlScriptTagNode(ht.HtmlScriptTagNode node) {
if (_parentNodes.contains(node)) {
return reportCircularity(node);
@@ -1207,8 +1222,8 @@
LibraryResolver resolver = new LibraryResolver(_context);
LibraryElementImpl library = resolver.resolveEmbeddedLibrary(htmlSource, _modificationStamp, node.script, true) as LibraryElementImpl;
script.scriptLibrary = library;
- resolvedLibraries.addAll(resolver.resolvedLibraries);
- errorListener.addAll(resolver.errorListener);
+ _resolvedLibraries.addAll(resolver.resolvedLibraries);
+ _errorListener.addAll(resolver.errorListener);
} on AnalysisException catch (exception) {
AnalysisEngine.instance.logger.logError3(exception);
}
@@ -1322,7 +1337,7 @@
* @param arguments the arguments used to compose the error message
*/
void reportError(ErrorCode errorCode, int offset, int length, List<Object> arguments) {
- errorListener.onError(new AnalysisError.con2(_htmlElement.source, offset, length, errorCode, arguments));
+ _errorListener.onError(new AnalysisError.con2(_htmlElement.source, offset, length, errorCode, arguments));
}
/**
@@ -2538,6 +2553,55 @@
}
/**
+ * Instances of the class `ReturnDetector` determine whether the visited AST node is
+ * guaranteed (modulo exceptions) to terminate by executing a return statement.
+ */
+class ReturnDetector extends UnifyingASTVisitor<bool> {
+ bool visitBlock(Block node) => visitStatements(node.statements);
+
+ bool visitBlockFunctionBody(BlockFunctionBody node) => node.block.accept(this);
+
+ bool visitIfStatement(IfStatement node) {
+ Statement thenStatement = node.thenStatement;
+ Statement elseStatement = node.elseStatement;
+ if (thenStatement == null || elseStatement == null) {
+ return false;
+ }
+ return thenStatement.accept(this) && elseStatement.accept(this);
+ }
+
+ bool visitNode(ASTNode node) => false;
+
+ bool visitReturnStatement(ReturnStatement node) => true;
+
+ bool visitSwitchCase(SwitchCase node) => visitStatements(node.statements);
+
+ bool visitSwitchDefault(SwitchDefault node) => visitStatements(node.statements);
+
+ bool visitSwitchStatement(SwitchStatement node) {
+ bool hasDefault = false;
+ for (SwitchMember member in node.members) {
+ if (!member.accept(this)) {
+ return false;
+ }
+ if (member is SwitchDefault) {
+ hasDefault = true;
+ }
+ }
+ return hasDefault;
+ }
+
+ bool visitStatements(NodeList<Statement> statements) {
+ for (int i = statements.length - 1; i >= 0; i--) {
+ if (statements[i].accept(this)) {
+ return true;
+ }
+ }
+ return false;
+ }
+}
+
+/**
* Instances of the class `ToDoFinder` find to-do comments in Dart code.
*/
class ToDoFinder {
@@ -5866,16 +5930,14 @@
/**
* The name of the synthetic identifier.
*/
- String _name;
+ final String name;
/**
* Initialize a newly created synthetic identifier to have the given name.
*
* @param name the name of the synthetic identifier
*/
- ElementResolver_SyntheticIdentifier(String name) {
- this._name = name;
- }
+ ElementResolver_SyntheticIdentifier(this.name);
accept(ASTVisitor visitor) => null;
@@ -5885,8 +5947,6 @@
sc.Token get endToken => null;
- String get name => _name;
-
int get precedence => 16;
Element get propagatedElement => null;
@@ -6575,7 +6635,7 @@
/**
* The source specifying the defining compilation unit of this library.
*/
- Source librarySource;
+ final Source librarySource;
/**
* The library element representing this library.
@@ -6585,7 +6645,7 @@
/**
* A list containing all of the libraries that are imported into this library.
*/
- List<Library> imports = _EMPTY_ARRAY;
+ List<Library> _importedLibraries = _EMPTY_ARRAY;
/**
* A table mapping URI-based directive to the actual URI value.
@@ -6600,7 +6660,7 @@
/**
* A list containing all of the libraries that are exported from this library.
*/
- List<Library> exports = _EMPTY_ARRAY;
+ List<Library> _exportedLibraries = _EMPTY_ARRAY;
/**
* A table mapping the sources for the compilation units in this library to their corresponding
@@ -6619,16 +6679,20 @@
static List<Library> _EMPTY_ARRAY = new List<Library>(0);
/**
+ * The prefix of a URI using the dart-ext scheme to reference a native code library.
+ */
+ static String _DART_EXT_SCHEME = "dart-ext:";
+
+ /**
* Initialize a newly created data holder that can maintain the data associated with a library.
*
* @param analysisContext the analysis context in which this library is being analyzed
* @param errorListener the listener to which analysis errors will be reported
* @param librarySource the source specifying the defining compilation unit of this library
*/
- Library(InternalAnalysisContext analysisContext, AnalysisErrorListener errorListener, Source librarySource) {
+ Library(InternalAnalysisContext analysisContext, AnalysisErrorListener errorListener, this.librarySource) {
this._analysisContext = analysisContext;
this._errorListener = errorListener;
- this.librarySource = librarySource;
this._libraryElement = analysisContext.getLibraryElement(librarySource) as LibraryElementImpl;
}
@@ -6684,6 +6748,20 @@
CompilationUnit get definingCompilationUnit => getAST(librarySource);
/**
+ * Return an array containing the libraries that are exported from this library.
+ *
+ * @return an array containing the libraries that are exported from this library
+ */
+ List<Library> get exports => _exportedLibraries;
+
+ /**
+ * Return an array containing the libraries that are imported into this library.
+ *
+ * @return an array containing the libraries that are imported into this library
+ */
+ List<Library> get imports => _importedLibraries;
+
+ /**
* Return an array containing the libraries that are either imported or exported from this
* library.
*
@@ -6691,10 +6769,10 @@
*/
List<Library> get importsAndExports {
Set<Library> libraries = new Set<Library>();
- for (Library library in imports) {
+ for (Library library in _importedLibraries) {
libraries.add(library);
}
- for (Library library in exports) {
+ for (Library library in _exportedLibraries) {
libraries.add(library);
}
return new List.from(libraries);
@@ -6773,6 +6851,20 @@
String uriContent = uriLiteral.stringValue.trim();
_directiveUris[directive] = uriContent;
uriContent = Uri.encodeFull(uriContent);
+ if (directive is ImportDirective && uriContent.startsWith(_DART_EXT_SCHEME)) {
+ String uriBase = uriContent.substring(_DART_EXT_SCHEME.length);
+ Source source = _analysisContext.sourceFactory.resolveUri(librarySource, "${uriBase}.dll");
+ if (source == null || !source.exists()) {
+ source = _analysisContext.sourceFactory.resolveUri(librarySource, "${uriBase}.so");
+ if (source == null || !source.exists()) {
+ source = _analysisContext.sourceFactory.resolveUri(librarySource, "${uriBase}.dylib");
+ if (source == null || !source.exists()) {
+ _errorListener.onError(new AnalysisError.con2(librarySource, uriLiteral.offset, uriLiteral.length, CompileTimeErrorCode.URI_DOES_NOT_EXIST, [uriContent]));
+ }
+ }
+ }
+ return null;
+ }
try {
parseUriWithException(uriContent);
Source source = _analysisContext.sourceFactory.resolveUri(librarySource, uriContent);
@@ -6809,7 +6901,7 @@
* @param exportedLibraries the libraries that are exported by this library
*/
void set exportedLibraries(List<Library> exportedLibraries) {
- this.exports = exportedLibraries;
+ this._exportedLibraries = exportedLibraries;
}
/**
@@ -6818,7 +6910,7 @@
* @param importedLibraries the libraries that are imported into this library
*/
void set importedLibraries(List<Library> importedLibraries) {
- this.imports = importedLibraries;
+ this._importedLibraries = importedLibraries;
}
/**
@@ -7034,14 +7126,14 @@
/**
* The analysis context in which the libraries are being analyzed.
*/
- InternalAnalysisContext analysisContext;
+ final InternalAnalysisContext analysisContext;
/**
* The listener to which analysis errors will be reported, this error listener is either
* references [recordingErrorListener], or it unions the passed
* [AnalysisErrorListener] with the [recordingErrorListener].
*/
- RecordingErrorListener errorListener;
+ RecordingErrorListener _errorListener;
/**
* A source object representing the core library (dart:core).
@@ -7066,20 +7158,33 @@
/**
* A collection containing the libraries that are being resolved together.
*/
- Set<Library> resolvedLibraries;
+ Set<Library> _librariesInCycles;
/**
* Initialize a newly created library resolver to resolve libraries within the given context.
*
* @param analysisContext the analysis context in which the library is being analyzed
*/
- LibraryResolver(InternalAnalysisContext analysisContext) {
- this.analysisContext = analysisContext;
- this.errorListener = new RecordingErrorListener();
+ LibraryResolver(this.analysisContext) {
+ this._errorListener = new RecordingErrorListener();
_coreLibrarySource = analysisContext.sourceFactory.forUri(DartSdk.DART_CORE);
}
/**
+ * Return the listener to which analysis errors will be reported.
+ *
+ * @return the listener to which analysis errors will be reported
+ */
+ RecordingErrorListener get errorListener => _errorListener;
+
+ /**
+ * Return an array containing information about all of the libraries that were resolved.
+ *
+ * @return an array containing the libraries that were resolved
+ */
+ Set<Library> get resolvedLibraries => _librariesInCycles;
+
+ /**
* Resolve the library specified by the given source in the given context. The library is assumed
* to be embedded in the given source.
*
@@ -7104,7 +7209,7 @@
}
instrumentation.metric3("createLibrary", "complete");
computeLibraryDependencies2(targetLibrary, unit);
- resolvedLibraries = computeLibrariesInCycles(targetLibrary);
+ _librariesInCycles = computeLibrariesInCycles(targetLibrary);
buildElementModels();
instrumentation.metric3("buildElementModels", "complete");
LibraryElement coreElement = _coreLibrary.libraryElement;
@@ -7154,7 +7259,7 @@
}
instrumentation.metric3("createLibrary", "complete");
computeLibraryDependencies(targetLibrary);
- resolvedLibraries = computeLibrariesInCycles(targetLibrary);
+ _librariesInCycles = computeLibrariesInCycles(targetLibrary);
buildElementModels();
instrumentation.metric3("buildElementModels", "complete");
LibraryElement coreElement = _coreLibrary.libraryElement;
@@ -7170,8 +7275,8 @@
instrumentation.metric3("resolveReferencesAndTypes", "complete");
performConstantEvaluation();
instrumentation.metric3("performConstantEvaluation", "complete");
- instrumentation.metric2("librariesInCycles", resolvedLibraries.length);
- for (Library lib in resolvedLibraries) {
+ instrumentation.metric2("librariesInCycles", _librariesInCycles.length);
+ for (Library lib in _librariesInCycles) {
instrumentation.metric2("librariesInCycles-CompilationUnitSources-Size", lib.compilationUnitSources.length);
}
return targetLibrary.libraryElement;
@@ -7270,7 +7375,7 @@
* be accessed
*/
void buildDirectiveModels() {
- for (Library library in resolvedLibraries) {
+ for (Library library in _librariesInCycles) {
Map<String, PrefixElementImpl> nameToPrefixMap = new Map<String, PrefixElementImpl>();
List<ImportElement> imports = new List<ImportElement>();
List<ExportElement> exports = new List<ExportElement>();
@@ -7308,7 +7413,7 @@
directive.element = importElement;
imports.add(importElement);
if (analysisContext.computeKindOf(importedSource) != SourceKind.LIBRARY) {
- errorListener.onError(new AnalysisError.con2(library.librarySource, uriLiteral.offset, uriLiteral.length, CompileTimeErrorCode.IMPORT_OF_NON_LIBRARY, [uriLiteral.toSource()]));
+ _errorListener.onError(new AnalysisError.con2(library.librarySource, uriLiteral.offset, uriLiteral.length, CompileTimeErrorCode.IMPORT_OF_NON_LIBRARY, [uriLiteral.toSource()]));
}
}
}
@@ -7329,7 +7434,7 @@
exports.add(exportElement);
if (analysisContext.computeKindOf(exportedSource) != SourceKind.LIBRARY) {
StringLiteral uriLiteral = exportDirective.uri;
- errorListener.onError(new AnalysisError.con2(library.librarySource, uriLiteral.offset, uriLiteral.length, CompileTimeErrorCode.EXPORT_OF_NON_LIBRARY, [uriLiteral.toSource()]));
+ _errorListener.onError(new AnalysisError.con2(library.librarySource, uriLiteral.offset, uriLiteral.length, CompileTimeErrorCode.EXPORT_OF_NON_LIBRARY, [uriLiteral.toSource()]));
}
}
}
@@ -7354,7 +7459,7 @@
* @throws AnalysisException if any of the element models cannot be built
*/
void buildElementModels() {
- for (Library library in resolvedLibraries) {
+ for (Library library in _librariesInCycles) {
LibraryElementBuilder builder = new LibraryElementBuilder(this);
LibraryElementImpl libraryElement = builder.buildLibrary(library);
library.libraryElement = libraryElement;
@@ -7370,7 +7475,7 @@
void buildTypeHierarchies() {
TimeCounter_TimeCounterHandle timeCounter = PerformanceStatistics.resolve.start();
try {
- for (Library library in resolvedLibraries) {
+ for (Library library in _librariesInCycles) {
for (Source source in library.compilationUnitSources) {
TypeResolverVisitor visitor = new TypeResolverVisitor.con1(library, source, _typeProvider);
library.getAST(source).accept(visitor);
@@ -7515,7 +7620,7 @@
* @throws AnalysisException if the library source is not valid
*/
Library createLibrary(Source librarySource) {
- Library library = new Library(analysisContext, errorListener, librarySource);
+ Library library = new Library(analysisContext, _errorListener, librarySource);
library.definingCompilationUnit;
_libraryMap[librarySource] = library;
return library;
@@ -7533,7 +7638,7 @@
* @throws AnalysisException if the library source is not valid
*/
Library createLibrary2(Source librarySource, int modificationStamp, CompilationUnit unit) {
- Library library = new Library(analysisContext, errorListener, librarySource);
+ Library library = new Library(analysisContext, _errorListener, librarySource);
library.setDefiningCompilationUnit(modificationStamp, unit);
_libraryMap[librarySource] = library;
return library;
@@ -7551,7 +7656,7 @@
if (!librarySource.exists()) {
return null;
}
- Library library = new Library(analysisContext, errorListener, librarySource);
+ Library library = new Library(analysisContext, _errorListener, librarySource);
_libraryMap[librarySource] = library;
return library;
}
@@ -7578,7 +7683,7 @@
TimeCounter_TimeCounterHandle timeCounter = PerformanceStatistics.resolve.start();
try {
ConstantValueComputer computer = new ConstantValueComputer();
- for (Library library in resolvedLibraries) {
+ for (Library library in _librariesInCycles) {
for (Source source in library.compilationUnitSources) {
try {
CompilationUnit unit = library.getAST(source);
@@ -7603,7 +7708,7 @@
* libraries could not have their types analyzed
*/
void resolveReferencesAndTypes() {
- for (Library library in resolvedLibraries) {
+ for (Library library in _librariesInCycles) {
resolveReferencesAndTypes2(library);
}
}
@@ -7664,7 +7769,7 @@
/**
* The current size of this map.
*/
- int size = 0;
+ int _size = 0;
/**
* The array of keys.
@@ -7694,12 +7799,12 @@
* Copy constructor.
*/
MemberMap.con2(MemberMap memberMap) {
- initArrays(memberMap.size + 5);
- for (int i = 0; i < memberMap.size; i++) {
+ initArrays(memberMap._size + 5);
+ for (int i = 0; i < memberMap._size; i++) {
_keys[i] = memberMap._keys[i];
_values[i] = memberMap._values[i];
}
- size = memberMap.size;
+ _size = memberMap._size;
}
/**
@@ -7711,7 +7816,7 @@
* map, `null` is returned
*/
ExecutableElement get(String key) {
- for (int i = 0; i < size; i++) {
+ for (int i = 0; i < _size; i++) {
if (_keys[i] != null && _keys[i] == key) {
return _values[i];
}
@@ -7731,6 +7836,13 @@
String getKey(int i) => _keys[i];
/**
+ * The size of the map.
+ *
+ * @return the size of the map.
+ */
+ int get size => _size;
+
+ /**
* Get and return the ExecutableElement at the specified location. If the key/value pair has been
* removed from the set, then then `null` is returned.
*
@@ -7749,28 +7861,28 @@
* @param value the ExecutableElement value to store in the map
*/
void put(String key, ExecutableElement value) {
- for (int i = 0; i < size; i++) {
+ for (int i = 0; i < _size; i++) {
if (_keys[i] != null && _keys[i] == key) {
_values[i] = value;
return;
}
}
- if (size == _keys.length) {
- int newArrayLength = size * 2;
+ if (_size == _keys.length) {
+ int newArrayLength = _size * 2;
List<String> keys_new_array = new List<String>(newArrayLength);
List<ExecutableElement> values_new_array = new List<ExecutableElement>(newArrayLength);
- for (int i = 0; i < size; i++) {
+ for (int i = 0; i < _size; i++) {
keys_new_array[i] = _keys[i];
}
- for (int i = 0; i < size; i++) {
+ for (int i = 0; i < _size; i++) {
values_new_array[i] = _values[i];
}
_keys = keys_new_array;
_values = values_new_array;
}
- _keys[size] = key;
- _values[size] = value;
- size++;
+ _keys[_size] = key;
+ _values[_size] = value;
+ _size++;
}
/**
@@ -7781,7 +7893,7 @@
* @param key the key of the key/value pair to remove from the map
*/
void remove(String key) {
- for (int i = 0; i < size; i++) {
+ for (int i = 0; i < _size; i++) {
if (_keys[i] == key) {
_keys[i] = null;
_values[i] = null;
@@ -7836,7 +7948,7 @@
/**
* The conditional analysis error.
*/
- AnalysisError analysisError;
+ final AnalysisError analysisError;
/**
* Instantiate a new ProxyConditionalErrorCode with some enclosing element and the conditional
@@ -7845,9 +7957,8 @@
* @param enclosingElement the enclosing element
* @param analysisError the conditional analysis error
*/
- ProxyConditionalAnalysisError(Element enclosingElement, AnalysisError analysisError) {
+ ProxyConditionalAnalysisError(Element enclosingElement, this.analysisError) {
this._enclosingElement = enclosingElement;
- this.analysisError = analysisError;
}
/**
@@ -7884,28 +7995,28 @@
* The class element representing the class containing the current node, or `null` if the
* current node is not contained in a class.
*/
- ClassElement enclosingClass = null;
+ ClassElement _enclosingClass = null;
/**
* The element representing the function containing the current node, or `null` if the
* current node is not contained in a function.
*/
- ExecutableElement enclosingFunction = null;
+ ExecutableElement _enclosingFunction = null;
/**
* The object keeping track of which elements have had their types overridden.
*/
- final TypeOverrideManager overrideManager = new TypeOverrideManager();
+ TypeOverrideManager _overrideManager = new TypeOverrideManager();
/**
* The object keeping track of which elements have had their types promoted.
*/
- final TypePromotionManager promoteManager = new TypePromotionManager();
+ TypePromotionManager _promoteManager = new TypePromotionManager();
/**
* Proxy conditional error codes.
*/
- final List<ProxyConditionalAnalysisError> proxyConditionalAnalysisErrors = new List<ProxyConditionalAnalysisError>();
+ List<ProxyConditionalAnalysisError> _proxyConditionalAnalysisErrors = new List<ProxyConditionalAnalysisError>();
/**
* Initialize a newly created visitor to resolve the nodes in a compilation unit.
@@ -7952,6 +8063,22 @@
this._typeAnalyzer = new StaticTypeAnalyzer(this);
}
+ /**
+ * Return the object keeping track of which elements have had their types overridden.
+ *
+ * @return the object keeping track of which elements have had their types overridden
+ */
+ TypeOverrideManager get overrideManager => _overrideManager;
+
+ /**
+ * Return the object keeping track of which elements have had their types promoted.
+ *
+ * @return the object keeping track of which elements have had their types promoted
+ */
+ TypePromotionManager get promoteManager => _promoteManager;
+
+ List<ProxyConditionalAnalysisError> get proxyConditionalAnalysisErrors => _proxyConditionalAnalysisErrors;
+
Object visitAsExpression(AsExpression node) {
super.visitAsExpression(node);
override(node.expression, node.type.type);
@@ -7972,8 +8099,8 @@
safelyVisit(leftOperand);
if (rightOperand != null) {
try {
- overrideManager.enterScope();
- promoteManager.enterScope();
+ _overrideManager.enterScope();
+ _promoteManager.enterScope();
propagateTrueState(leftOperand);
promoteTypes(leftOperand);
clearTypePromotionsIfPotentiallyMutatedIn(leftOperand);
@@ -7981,19 +8108,19 @@
clearTypePromotionsIfAccessedInClosureAndProtentiallyMutated(rightOperand);
rightOperand.accept(this);
} finally {
- overrideManager.exitScope();
- promoteManager.exitScope();
+ _overrideManager.exitScope();
+ _promoteManager.exitScope();
}
}
} else if (identical(operatorType, sc.TokenType.BAR_BAR)) {
safelyVisit(leftOperand);
if (rightOperand != null) {
try {
- overrideManager.enterScope();
+ _overrideManager.enterScope();
propagateFalseState(leftOperand);
rightOperand.accept(this);
} finally {
- overrideManager.exitScope();
+ _overrideManager.exitScope();
}
}
} else {
@@ -8007,10 +8134,10 @@
Object visitBlockFunctionBody(BlockFunctionBody node) {
try {
- overrideManager.enterScope();
+ _overrideManager.enterScope();
super.visitBlockFunctionBody(node);
} finally {
- overrideManager.exitScope();
+ _overrideManager.exitScope();
}
return null;
}
@@ -8022,14 +8149,14 @@
}
Object visitClassDeclaration(ClassDeclaration node) {
- ClassElement outerType = enclosingClass;
+ ClassElement outerType = _enclosingClass;
try {
- enclosingClass = node.element;
- _typeAnalyzer.thisType = enclosingClass == null ? null : enclosingClass.type;
+ _enclosingClass = node.element;
+ _typeAnalyzer.thisType = _enclosingClass == null ? null : _enclosingClass.type;
super.visitClassDeclaration(node);
} finally {
_typeAnalyzer.thisType = outerType == null ? null : outerType.type;
- enclosingClass = outerType;
+ _enclosingClass = outerType;
}
return null;
}
@@ -8042,7 +8169,7 @@
Object visitCompilationUnit(CompilationUnit node) {
try {
- overrideManager.enterScope();
+ _overrideManager.enterScope();
NodeList<Directive> directives = node.directives;
int directiveCount = directives.length;
for (int i = 0; i < directiveCount; i++) {
@@ -8063,7 +8190,7 @@
}
}
} finally {
- overrideManager.exitScope();
+ _overrideManager.exitScope();
}
node.accept(_elementResolver);
node.accept(_typeAnalyzer);
@@ -8076,26 +8203,26 @@
Expression thenExpression = node.thenExpression;
if (thenExpression != null) {
try {
- overrideManager.enterScope();
- promoteManager.enterScope();
+ _overrideManager.enterScope();
+ _promoteManager.enterScope();
propagateTrueState(condition);
promoteTypes(condition);
clearTypePromotionsIfPotentiallyMutatedIn(thenExpression);
clearTypePromotionsIfAccessedInClosureAndProtentiallyMutated(thenExpression);
thenExpression.accept(this);
} finally {
- overrideManager.exitScope();
- promoteManager.exitScope();
+ _overrideManager.exitScope();
+ _promoteManager.exitScope();
}
}
Expression elseExpression = node.elseExpression;
if (elseExpression != null) {
try {
- overrideManager.enterScope();
+ _overrideManager.enterScope();
propagateFalseState(condition);
elseExpression.accept(this);
} finally {
- overrideManager.exitScope();
+ _overrideManager.exitScope();
}
}
node.accept(_elementResolver);
@@ -8113,12 +8240,12 @@
}
Object visitConstructorDeclaration(ConstructorDeclaration node) {
- ExecutableElement outerFunction = enclosingFunction;
+ ExecutableElement outerFunction = _enclosingFunction;
try {
- enclosingFunction = node.element;
+ _enclosingFunction = node.element;
super.visitConstructorDeclaration(node);
} finally {
- enclosingFunction = outerFunction;
+ _enclosingFunction = outerFunction;
}
return null;
}
@@ -8144,77 +8271,77 @@
Object visitDoStatement(DoStatement node) {
try {
- overrideManager.enterScope();
+ _overrideManager.enterScope();
super.visitDoStatement(node);
} finally {
- overrideManager.exitScope();
+ _overrideManager.exitScope();
}
return null;
}
Object visitExpressionFunctionBody(ExpressionFunctionBody node) {
try {
- overrideManager.enterScope();
+ _overrideManager.enterScope();
super.visitExpressionFunctionBody(node);
} finally {
- overrideManager.exitScope();
+ _overrideManager.exitScope();
}
return null;
}
Object visitFieldDeclaration(FieldDeclaration node) {
try {
- overrideManager.enterScope();
+ _overrideManager.enterScope();
super.visitFieldDeclaration(node);
} finally {
- Map<Element, Type2> overrides = overrideManager.captureOverrides(node.fields);
- overrideManager.exitScope();
- overrideManager.applyOverrides(overrides);
+ Map<Element, Type2> overrides = _overrideManager.captureOverrides(node.fields);
+ _overrideManager.exitScope();
+ _overrideManager.applyOverrides(overrides);
}
return null;
}
Object visitForEachStatement(ForEachStatement node) {
try {
- overrideManager.enterScope();
+ _overrideManager.enterScope();
super.visitForEachStatement(node);
} finally {
- overrideManager.exitScope();
+ _overrideManager.exitScope();
}
return null;
}
Object visitForStatement(ForStatement node) {
try {
- overrideManager.enterScope();
+ _overrideManager.enterScope();
super.visitForStatement(node);
} finally {
- overrideManager.exitScope();
+ _overrideManager.exitScope();
}
return null;
}
Object visitFunctionDeclaration(FunctionDeclaration node) {
- ExecutableElement outerFunction = enclosingFunction;
+ ExecutableElement outerFunction = _enclosingFunction;
try {
SimpleIdentifier functionName = node.name;
- enclosingFunction = functionName.staticElement as ExecutableElement;
+ _enclosingFunction = functionName.staticElement as ExecutableElement;
super.visitFunctionDeclaration(node);
} finally {
- enclosingFunction = outerFunction;
+ _enclosingFunction = outerFunction;
}
return null;
}
Object visitFunctionExpression(FunctionExpression node) {
- ExecutableElement outerFunction = enclosingFunction;
+ ExecutableElement outerFunction = _enclosingFunction;
try {
- enclosingFunction = node.element;
- overrideManager.enterScope();
+ _enclosingFunction = node.element;
+ _overrideManager.enterScope();
super.visitFunctionExpression(node);
} finally {
- overrideManager.exitScope();
- enclosingFunction = outerFunction;
+ _overrideManager.exitScope();
+ _enclosingFunction = outerFunction;
}
return null;
}
@@ -8237,29 +8364,29 @@
Statement thenStatement = node.thenStatement;
if (thenStatement != null) {
try {
- overrideManager.enterScope();
- promoteManager.enterScope();
+ _overrideManager.enterScope();
+ _promoteManager.enterScope();
propagateTrueState(condition);
promoteTypes(condition);
clearTypePromotionsIfPotentiallyMutatedIn(thenStatement);
clearTypePromotionsIfAccessedInClosureAndProtentiallyMutated(thenStatement);
visitStatementInScope(thenStatement);
} finally {
- thenOverrides = overrideManager.captureLocalOverrides();
- overrideManager.exitScope();
- promoteManager.exitScope();
+ thenOverrides = _overrideManager.captureLocalOverrides();
+ _overrideManager.exitScope();
+ _promoteManager.exitScope();
}
}
Map<Element, Type2> elseOverrides = null;
Statement elseStatement = node.elseStatement;
if (elseStatement != null) {
try {
- overrideManager.enterScope();
+ _overrideManager.enterScope();
propagateFalseState(condition);
visitStatementInScope(elseStatement);
} finally {
- elseOverrides = overrideManager.captureLocalOverrides();
- overrideManager.exitScope();
+ elseOverrides = _overrideManager.captureLocalOverrides();
+ _overrideManager.exitScope();
}
}
node.accept(_elementResolver);
@@ -8269,12 +8396,12 @@
if (elseIsAbrupt && !thenIsAbrupt) {
propagateTrueState(condition);
if (thenOverrides != null) {
- overrideManager.applyOverrides(thenOverrides);
+ _overrideManager.applyOverrides(thenOverrides);
}
} else if (thenIsAbrupt && !elseIsAbrupt) {
propagateFalseState(condition);
if (elseOverrides != null) {
- overrideManager.applyOverrides(elseOverrides);
+ _overrideManager.applyOverrides(elseOverrides);
}
}
return null;
@@ -8285,12 +8412,12 @@
Object visitLibraryIdentifier(LibraryIdentifier node) => null;
Object visitMethodDeclaration(MethodDeclaration node) {
- ExecutableElement outerFunction = enclosingFunction;
+ ExecutableElement outerFunction = _enclosingFunction;
try {
- enclosingFunction = node.element;
+ _enclosingFunction = node.element;
super.visitMethodDeclaration(node);
} finally {
- enclosingFunction = outerFunction;
+ _enclosingFunction = outerFunction;
}
return null;
}
@@ -8343,32 +8470,32 @@
Object visitSwitchCase(SwitchCase node) {
try {
- overrideManager.enterScope();
+ _overrideManager.enterScope();
super.visitSwitchCase(node);
} finally {
- overrideManager.exitScope();
+ _overrideManager.exitScope();
}
return null;
}
Object visitSwitchDefault(SwitchDefault node) {
try {
- overrideManager.enterScope();
+ _overrideManager.enterScope();
super.visitSwitchDefault(node);
} finally {
- overrideManager.exitScope();
+ _overrideManager.exitScope();
}
return null;
}
Object visitTopLevelVariableDeclaration(TopLevelVariableDeclaration node) {
try {
- overrideManager.enterScope();
+ _overrideManager.enterScope();
super.visitTopLevelVariableDeclaration(node);
} finally {
- Map<Element, Type2> overrides = overrideManager.captureOverrides(node.variables);
- overrideManager.exitScope();
- overrideManager.applyOverrides(overrides);
+ Map<Element, Type2> overrides = _overrideManager.captureOverrides(node.variables);
+ _overrideManager.exitScope();
+ _overrideManager.applyOverrides(overrides);
}
return null;
}
@@ -8381,11 +8508,11 @@
Statement body = node.body;
if (body != null) {
try {
- overrideManager.enterScope();
+ _overrideManager.enterScope();
propagateTrueState(condition);
visitStatementInScope(body);
} finally {
- overrideManager.exitScope();
+ _overrideManager.exitScope();
}
}
node.accept(_elementResolver);
@@ -8394,6 +8521,22 @@
}
/**
+ * Return the class element representing the class containing the current node, or `null` if
+ * the current node is not contained in a class.
+ *
+ * @return the class element representing the class containing the current node
+ */
+ ClassElement get enclosingClass => _enclosingClass;
+
+ /**
+ * Return the element representing the function containing the current node, or `null` if
+ * the current node is not contained in a function.
+ *
+ * @return the element representing the function containing the current node
+ */
+ ExecutableElement get enclosingFunction => _enclosingFunction;
+
+ /**
* Return the propagated element associated with the given expression whose type can be
* overridden, or `null` if there is no element whose type can be overridden.
*
@@ -8506,7 +8649,7 @@
}
Type2 currentType = getBestType(element);
if (currentType == null || !currentType.isMoreSpecificThan(potentialType)) {
- overrideManager.setType(element, potentialType);
+ _overrideManager.setType(element, potentialType);
}
}
@@ -8519,7 +8662,7 @@
* @param arguments the arguments to the error, used to compose the error message
*/
void reportErrorProxyConditionalAnalysisError(Element enclosingElement, ErrorCode errorCode, ASTNode node, List<Object> arguments) {
- proxyConditionalAnalysisErrors.add(new ProxyConditionalAnalysisError(enclosingElement, new AnalysisError.con2(source, node.offset, node.length, errorCode, arguments)));
+ _proxyConditionalAnalysisErrors.add(new ProxyConditionalAnalysisError(enclosingElement, new AnalysisError.con2(source, node.offset, node.length, errorCode, arguments)));
}
/**
@@ -8532,7 +8675,7 @@
* @param arguments the arguments to the error, used to compose the error message
*/
void reportErrorProxyConditionalAnalysisError2(Element enclosingElement, ErrorCode errorCode, int offset, int length, List<Object> arguments) {
- proxyConditionalAnalysisErrors.add(new ProxyConditionalAnalysisError(enclosingElement, new AnalysisError.con2(source, offset, length, errorCode, arguments)));
+ _proxyConditionalAnalysisErrors.add(new ProxyConditionalAnalysisError(enclosingElement, new AnalysisError.con2(source, offset, length, errorCode, arguments)));
}
/**
@@ -8544,7 +8687,7 @@
* @param arguments the arguments to the error, used to compose the error message
*/
void reportErrorProxyConditionalAnalysisError3(Element enclosingElement, ErrorCode errorCode, sc.Token token, List<Object> arguments) {
- proxyConditionalAnalysisErrors.add(new ProxyConditionalAnalysisError(enclosingElement, new AnalysisError.con2(source, token.offset, token.length, errorCode, arguments)));
+ _proxyConditionalAnalysisErrors.add(new ProxyConditionalAnalysisError(enclosingElement, new AnalysisError.con2(source, token.offset, token.length, errorCode, arguments)));
}
void visitForEachStatementInScope(ForEachStatement node) {
@@ -8557,7 +8700,7 @@
Statement body = node.body;
if (body != null) {
try {
- overrideManager.enterScope();
+ _overrideManager.enterScope();
if (loopVariable != null && iterator != null) {
LocalVariableElement loopElement = loopVariable.element;
if (loopElement != null) {
@@ -8575,7 +8718,7 @@
}
visitStatementInScope(body);
} finally {
- overrideManager.exitScope();
+ _overrideManager.exitScope();
}
}
node.accept(_elementResolver);
@@ -8586,13 +8729,13 @@
safelyVisit(node.variables);
safelyVisit(node.initialization);
safelyVisit(node.condition);
- overrideManager.enterScope();
+ _overrideManager.enterScope();
try {
propagateTrueState(node.condition);
visitStatementInScope(node.body);
node.updaters.accept(this);
} finally {
- overrideManager.exitScope();
+ _overrideManager.exitScope();
}
}
@@ -8604,10 +8747,10 @@
* <i>v</i> is not potentially mutated anywhere in the scope of <i>v</i>.
*/
void clearTypePromotionsIfAccessedInClosureAndProtentiallyMutated(ASTNode target) {
- for (Element element in promoteManager.promotedElements) {
+ for (Element element in _promoteManager.promotedElements) {
if ((element as VariableElementImpl).isPotentiallyMutatedInScope) {
if (isVariableAccessedInClosure(element, target)) {
- promoteManager.setType(element, null);
+ _promoteManager.setType(element, null);
}
}
}
@@ -8620,9 +8763,9 @@
* <i>v</i> is not potentially mutated in <i>s<sub>1</sub></i> or within a closure.
*/
void clearTypePromotionsIfPotentiallyMutatedIn(ASTNode target) {
- for (Element element in promoteManager.promotedElements) {
+ for (Element element in _promoteManager.promotedElements) {
if (isVariablePotentiallyMutatedIn(element, target)) {
- promoteManager.setType(element, null);
+ _promoteManager.setType(element, null);
}
}
}
@@ -8635,7 +8778,7 @@
* @return the best type information available for the given element
*/
Type2 getBestType(Element element) {
- Type2 bestType = overrideManager.getType(element);
+ Type2 bestType = _overrideManager.getType(element);
if (bestType == null) {
if (element is LocalVariableElement) {
bestType = (element as LocalVariableElement).type;
@@ -8697,7 +8840,7 @@
Type2 currentType = getBestType(element);
Type2 expectedType = expectedParameters[i].type;
if (currentType == null || expectedType.isMoreSpecificThan(currentType)) {
- overrideManager.setType(element, expectedType);
+ _overrideManager.setType(element, expectedType);
}
}
}
@@ -8798,7 +8941,7 @@
if ((element as VariableElementImpl).isPotentiallyMutatedInClosure) {
return;
}
- Type2 type = promoteManager.getType(element);
+ Type2 type = _promoteManager.getType(element);
if (type == null) {
type = expression.staticType;
}
@@ -8811,7 +8954,7 @@
if (!potentialType.isMoreSpecificThan(type)) {
return;
}
- promoteManager.setType(element, potentialType);
+ _promoteManager.setType(element, potentialType);
}
}
@@ -8919,21 +9062,21 @@
set elementResolver_J2DAccessor(__v) => _elementResolver = __v;
- get labelScope_J2DAccessor => labelScope;
+ get labelScope_J2DAccessor => _labelScope;
- set labelScope_J2DAccessor(__v) => labelScope = __v;
+ set labelScope_J2DAccessor(__v) => _labelScope = __v;
- get nameScope_J2DAccessor => nameScope;
+ get nameScope_J2DAccessor => _nameScope;
- set nameScope_J2DAccessor(__v) => nameScope = __v;
+ set nameScope_J2DAccessor(__v) => _nameScope = __v;
get typeAnalyzer_J2DAccessor => _typeAnalyzer;
set typeAnalyzer_J2DAccessor(__v) => _typeAnalyzer = __v;
- get enclosingClass_J2DAccessor => enclosingClass;
+ get enclosingClass_J2DAccessor => _enclosingClass;
- set enclosingClass_J2DAccessor(__v) => enclosingClass = __v;
+ set enclosingClass_J2DAccessor(__v) => _enclosingClass = __v;
}
class RecursiveASTVisitor_8 extends RecursiveASTVisitor<Object> {
@@ -8996,12 +9139,12 @@
/**
* The element for the library containing the compilation unit being visited.
*/
- LibraryElement definingLibrary;
+ LibraryElement _definingLibrary;
/**
* The source representing the compilation unit being visited.
*/
- Source source;
+ final Source source;
/**
* The error listener that will be informed of any errors that are found during resolution.
@@ -9011,18 +9154,18 @@
/**
* The scope used to resolve identifiers.
*/
- Scope nameScope;
+ Scope _nameScope;
/**
* The object used to access the types from the core library.
*/
- TypeProvider typeProvider;
+ final TypeProvider typeProvider;
/**
* The scope used to resolve labels for `break` and `continue` statements, or
* `null` if no labels have been defined in the current context.
*/
- LabelScope labelScope;
+ LabelScope _labelScope;
/**
* Initialize a newly created visitor to resolve the nodes in a compilation unit.
@@ -9031,13 +9174,11 @@
* @param source the source representing the compilation unit being visited
* @param typeProvider the object used to access the types from the core library
*/
- ScopedVisitor.con1(Library library, Source source, TypeProvider typeProvider) {
- this.definingLibrary = library.libraryElement;
- this.source = source;
+ ScopedVisitor.con1(Library library, this.source, this.typeProvider) {
+ this._definingLibrary = library.libraryElement;
LibraryScope libraryScope = library.libraryScope;
this._errorListener = libraryScope.errorListener;
- this.nameScope = libraryScope;
- this.typeProvider = typeProvider;
+ this._nameScope = libraryScope;
}
/**
@@ -9050,12 +9191,10 @@
* @param errorListener the error listener that will be informed of any errors that are found
* during resolution
*/
- ScopedVisitor.con2(LibraryElement definingLibrary, Source source, TypeProvider typeProvider, AnalysisErrorListener errorListener) {
- this.definingLibrary = definingLibrary;
- this.source = source;
+ ScopedVisitor.con2(LibraryElement definingLibrary, this.source, this.typeProvider, AnalysisErrorListener errorListener) {
+ this._definingLibrary = definingLibrary;
this._errorListener = errorListener;
- this.nameScope = new LibraryScope(definingLibrary, errorListener);
- this.typeProvider = typeProvider;
+ this._nameScope = new LibraryScope(definingLibrary, errorListener);
}
/**
@@ -9069,15 +9208,20 @@
* @param errorListener the error listener that will be informed of any errors that are found
* during resolution
*/
- ScopedVisitor.con3(LibraryElement definingLibrary, Source source, TypeProvider typeProvider, Scope nameScope, AnalysisErrorListener errorListener) {
- this.definingLibrary = definingLibrary;
- this.source = source;
+ ScopedVisitor.con3(LibraryElement definingLibrary, this.source, this.typeProvider, Scope nameScope, AnalysisErrorListener errorListener) {
+ this._definingLibrary = definingLibrary;
this._errorListener = errorListener;
- this.nameScope = nameScope;
- this.typeProvider = typeProvider;
+ this._nameScope = nameScope;
}
/**
+ * Return the library element for the library containing the compilation unit being resolved.
+ *
+ * @return the library element for the library containing the compilation unit being resolved
+ */
+ LibraryElement get definingLibrary => _definingLibrary;
+
+ /**
* Report an error with the given analysis error.
*
* @param errorCode analysis error
@@ -9087,14 +9231,14 @@
}
Object visitBlock(Block node) {
- Scope outerScope = nameScope;
+ Scope outerScope = _nameScope;
try {
- EnclosedScope enclosedScope = new EnclosedScope(nameScope);
+ EnclosedScope enclosedScope = new EnclosedScope(_nameScope);
hideNamesDefinedInBlock(enclosedScope, node);
- nameScope = enclosedScope;
+ _nameScope = enclosedScope;
super.visitBlock(node);
} finally {
- nameScope = outerScope;
+ _nameScope = outerScope;
}
return null;
}
@@ -9102,17 +9246,17 @@
Object visitCatchClause(CatchClause node) {
SimpleIdentifier exception = node.exceptionParameter;
if (exception != null) {
- Scope outerScope = nameScope;
+ Scope outerScope = _nameScope;
try {
- nameScope = new EnclosedScope(nameScope);
- nameScope.define(exception.staticElement);
+ _nameScope = new EnclosedScope(_nameScope);
+ _nameScope.define(exception.staticElement);
SimpleIdentifier stackTrace = node.stackTraceParameter;
if (stackTrace != null) {
- nameScope.define(stackTrace.staticElement);
+ _nameScope.define(stackTrace.staticElement);
}
super.visitCatchClause(node);
} finally {
- nameScope = outerScope;
+ _nameScope = outerScope;
}
} else {
super.visitCatchClause(node);
@@ -9121,34 +9265,34 @@
}
Object visitClassDeclaration(ClassDeclaration node) {
- Scope outerScope = nameScope;
+ Scope outerScope = _nameScope;
try {
- nameScope = new ClassScope(nameScope, node.element);
+ _nameScope = new ClassScope(_nameScope, node.element);
super.visitClassDeclaration(node);
} finally {
- nameScope = outerScope;
+ _nameScope = outerScope;
}
return null;
}
Object visitClassTypeAlias(ClassTypeAlias node) {
- Scope outerScope = nameScope;
+ Scope outerScope = _nameScope;
try {
- nameScope = new ClassScope(nameScope, node.element);
+ _nameScope = new ClassScope(_nameScope, node.element);
super.visitClassTypeAlias(node);
} finally {
- nameScope = outerScope;
+ _nameScope = outerScope;
}
return null;
}
Object visitConstructorDeclaration(ConstructorDeclaration node) {
- Scope outerScope = nameScope;
+ Scope outerScope = _nameScope;
try {
- nameScope = new FunctionScope(nameScope, node.element);
+ _nameScope = new FunctionScope(_nameScope, node.element);
super.visitConstructorDeclaration(node);
} finally {
- nameScope = outerScope;
+ _nameScope = outerScope;
}
return null;
}
@@ -9156,74 +9300,74 @@
Object visitDeclaredIdentifier(DeclaredIdentifier node) {
VariableElement element = node.element;
if (element != null) {
- nameScope.define(element);
+ _nameScope.define(element);
}
super.visitDeclaredIdentifier(node);
return null;
}
Object visitDoStatement(DoStatement node) {
- LabelScope outerLabelScope = labelScope;
+ LabelScope outerLabelScope = _labelScope;
try {
- labelScope = new LabelScope.con1(labelScope, false, false);
+ _labelScope = new LabelScope.con1(_labelScope, false, false);
visitStatementInScope(node.body);
safelyVisit(node.condition);
} finally {
- labelScope = outerLabelScope;
+ _labelScope = outerLabelScope;
}
return null;
}
Object visitForEachStatement(ForEachStatement node) {
- Scope outerNameScope = nameScope;
- LabelScope outerLabelScope = labelScope;
+ Scope outerNameScope = _nameScope;
+ LabelScope outerLabelScope = _labelScope;
try {
- nameScope = new EnclosedScope(nameScope);
- labelScope = new LabelScope.con1(outerLabelScope, false, false);
+ _nameScope = new EnclosedScope(_nameScope);
+ _labelScope = new LabelScope.con1(outerLabelScope, false, false);
visitForEachStatementInScope(node);
} finally {
- labelScope = outerLabelScope;
- nameScope = outerNameScope;
+ _labelScope = outerLabelScope;
+ _nameScope = outerNameScope;
}
return null;
}
Object visitFormalParameterList(FormalParameterList node) {
super.visitFormalParameterList(node);
- if (nameScope is FunctionScope) {
- (nameScope as FunctionScope).defineParameters();
+ if (_nameScope is FunctionScope) {
+ (_nameScope as FunctionScope).defineParameters();
}
- if (nameScope is FunctionTypeScope) {
- (nameScope as FunctionTypeScope).defineParameters();
+ if (_nameScope is FunctionTypeScope) {
+ (_nameScope as FunctionTypeScope).defineParameters();
}
return null;
}
Object visitForStatement(ForStatement node) {
- Scope outerNameScope = nameScope;
- LabelScope outerLabelScope = labelScope;
+ Scope outerNameScope = _nameScope;
+ LabelScope outerLabelScope = _labelScope;
try {
- nameScope = new EnclosedScope(nameScope);
- labelScope = new LabelScope.con1(outerLabelScope, false, false);
+ _nameScope = new EnclosedScope(_nameScope);
+ _labelScope = new LabelScope.con1(outerLabelScope, false, false);
visitForStatementInScope(node);
} finally {
- labelScope = outerLabelScope;
- nameScope = outerNameScope;
+ _labelScope = outerLabelScope;
+ _nameScope = outerNameScope;
}
return null;
}
Object visitFunctionDeclaration(FunctionDeclaration node) {
ExecutableElement function = node.element;
- Scope outerScope = nameScope;
+ Scope outerScope = _nameScope;
try {
- nameScope = new FunctionScope(nameScope, function);
+ _nameScope = new FunctionScope(_nameScope, function);
super.visitFunctionDeclaration(node);
} finally {
- nameScope = outerScope;
+ _nameScope = outerScope;
}
if (function.enclosingElement is! CompilationUnitElement) {
- nameScope.define(function);
+ _nameScope.define(function);
}
return null;
}
@@ -9232,28 +9376,28 @@
if (node.parent is FunctionDeclaration) {
super.visitFunctionExpression(node);
} else {
- Scope outerScope = nameScope;
+ Scope outerScope = _nameScope;
try {
ExecutableElement functionElement = node.element;
if (functionElement == null) {
} else {
- nameScope = new FunctionScope(nameScope, functionElement);
+ _nameScope = new FunctionScope(_nameScope, functionElement);
}
super.visitFunctionExpression(node);
} finally {
- nameScope = outerScope;
+ _nameScope = outerScope;
}
}
return null;
}
Object visitFunctionTypeAlias(FunctionTypeAlias node) {
- Scope outerScope = nameScope;
+ Scope outerScope = _nameScope;
try {
- nameScope = new FunctionTypeScope(nameScope, node.element);
+ _nameScope = new FunctionTypeScope(_nameScope, node.element);
super.visitFunctionTypeAlias(node);
} finally {
- nameScope = outerScope;
+ _nameScope = outerScope;
}
return null;
}
@@ -9270,59 +9414,59 @@
try {
super.visitLabeledStatement(node);
} finally {
- labelScope = outerScope;
+ _labelScope = outerScope;
}
return null;
}
Object visitMethodDeclaration(MethodDeclaration node) {
- Scope outerScope = nameScope;
+ Scope outerScope = _nameScope;
try {
- nameScope = new FunctionScope(nameScope, node.element);
+ _nameScope = new FunctionScope(_nameScope, node.element);
super.visitMethodDeclaration(node);
} finally {
- nameScope = outerScope;
+ _nameScope = outerScope;
}
return null;
}
Object visitSwitchCase(SwitchCase node) {
node.expression.accept(this);
- Scope outerNameScope = nameScope;
+ Scope outerNameScope = _nameScope;
try {
- nameScope = new EnclosedScope(nameScope);
+ _nameScope = new EnclosedScope(_nameScope);
node.statements.accept(this);
} finally {
- nameScope = outerNameScope;
+ _nameScope = outerNameScope;
}
return null;
}
Object visitSwitchDefault(SwitchDefault node) {
- Scope outerNameScope = nameScope;
+ Scope outerNameScope = _nameScope;
try {
- nameScope = new EnclosedScope(nameScope);
+ _nameScope = new EnclosedScope(_nameScope);
node.statements.accept(this);
} finally {
- nameScope = outerNameScope;
+ _nameScope = outerNameScope;
}
return null;
}
Object visitSwitchStatement(SwitchStatement node) {
- LabelScope outerScope = labelScope;
+ LabelScope outerScope = _labelScope;
try {
- labelScope = new LabelScope.con1(outerScope, true, false);
+ _labelScope = new LabelScope.con1(outerScope, true, false);
for (SwitchMember member in node.members) {
for (Label label in member.labels) {
SimpleIdentifier labelName = label.label;
LabelElement labelElement = labelName.staticElement as LabelElement;
- labelScope = new LabelScope.con2(labelScope, labelName.name, labelElement);
+ _labelScope = new LabelScope.con2(_labelScope, labelName.name, labelElement);
}
}
super.visitSwitchStatement(node);
} finally {
- labelScope = outerScope;
+ _labelScope = outerScope;
}
return null;
}
@@ -9332,25 +9476,39 @@
if (node.parent.parent is! TopLevelVariableDeclaration && node.parent.parent is! FieldDeclaration) {
VariableElement element = node.element;
if (element != null) {
- nameScope.define(element);
+ _nameScope.define(element);
}
}
return null;
}
Object visitWhileStatement(WhileStatement node) {
- LabelScope outerScope = labelScope;
+ LabelScope outerScope = _labelScope;
try {
- labelScope = new LabelScope.con1(outerScope, false, false);
+ _labelScope = new LabelScope.con1(outerScope, false, false);
safelyVisit(node.condition);
visitStatementInScope(node.body);
} finally {
- labelScope = outerScope;
+ _labelScope = outerScope;
}
return null;
}
/**
+ * Return the label scope in which the current node is being resolved.
+ *
+ * @return the label scope in which the current node is being resolved
+ */
+ LabelScope get labelScope => _labelScope;
+
+ /**
+ * Return the name scope in which the current node is being resolved.
+ *
+ * @return the name scope in which the current node is being resolved
+ */
+ Scope get nameScope => _nameScope;
+
+ /**
* Report an error with the given error code and arguments.
*
* @param errorCode the error code of the error to be reported
@@ -9434,12 +9592,12 @@
if (node is Block) {
visitBlock(node as Block);
} else if (node != null) {
- Scope outerNameScope = nameScope;
+ Scope outerNameScope = _nameScope;
try {
- nameScope = new EnclosedScope(nameScope);
+ _nameScope = new EnclosedScope(_nameScope);
node.accept(this);
} finally {
- nameScope = outerNameScope;
+ _nameScope = outerNameScope;
}
}
}
@@ -9451,12 +9609,12 @@
* @return the scope that was in effect before the new scopes were added
*/
LabelScope addScopesFor(NodeList<Label> labels) {
- LabelScope outerScope = labelScope;
+ LabelScope outerScope = _labelScope;
for (Label label in labels) {
SimpleIdentifier labelNameNode = label.label;
String labelName = labelNameNode.name;
LabelElement labelElement = labelNameNode.staticElement as LabelElement;
- labelScope = new LabelScope.con2(labelScope, labelName, labelElement);
+ _labelScope = new LabelScope.con2(_labelScope, labelName, labelElement);
}
return outerScope;
}
@@ -12945,7 +13103,7 @@
/**
* The scope in which this scope is lexically enclosed.
*/
- Scope _enclosingScope;
+ final Scope enclosingScope;
/**
* A table mapping names that will be defined in this scope, but right now are not initialized.
@@ -12955,17 +13113,18 @@
Map<String, Element> _hiddenElements = new Map<String, Element>();
/**
+ * A flag indicating whether there are any names defined in this scope.
+ */
+ bool _hasHiddenName = false;
+
+ /**
* Initialize a newly created scope enclosed within another scope.
*
* @param enclosingScope the scope in which this scope is lexically enclosed
*/
- EnclosedScope(Scope enclosingScope) {
- this._enclosingScope = enclosingScope;
- }
+ EnclosedScope(this.enclosingScope);
- Scope get enclosingScope => _enclosingScope;
-
- AnalysisErrorListener get errorListener => _enclosingScope.errorListener;
+ AnalysisErrorListener get errorListener => enclosingScope.errorListener;
/**
* Record that given element is declared in this scope, but hasn't been initialized yet, so it is
@@ -12979,6 +13138,7 @@
String name = element.name;
if (name != null && !name.isEmpty) {
_hiddenElements[name] = element;
+ _hasHiddenName = true;
}
}
}
@@ -12988,12 +13148,14 @@
if (element != null) {
return element;
}
- Element hiddenElement = _hiddenElements[name];
- if (hiddenElement != null) {
- errorListener.onError(new AnalysisError.con2(getSource(identifier), identifier.offset, identifier.length, CompileTimeErrorCode.REFERENCED_BEFORE_DECLARATION, []));
- return hiddenElement;
+ if (_hasHiddenName) {
+ Element hiddenElement = _hiddenElements[name];
+ if (hiddenElement != null) {
+ errorListener.onError(new AnalysisError.con2(getSource(identifier), identifier.offset, identifier.length, CompileTimeErrorCode.REFERENCED_BEFORE_DECLARATION, []));
+ return hiddenElement;
+ }
}
- return _enclosingScope.lookup3(identifier, name, referencingLibrary);
+ return enclosingScope.lookup3(identifier, name, referencingLibrary);
}
}
@@ -13120,7 +13282,7 @@
* The label element returned for scopes that can be the target of an unlabeled `break` or
* `continue`.
*/
- static SimpleIdentifier _EMPTY_LABEL_IDENTIFIER = new SimpleIdentifier.full(new sc.StringToken(sc.TokenType.IDENTIFIER, "", 0));
+ static SimpleIdentifier _EMPTY_LABEL_IDENTIFIER = new SimpleIdentifier(new sc.StringToken(sc.TokenType.IDENTIFIER, "", 0));
/**
* Initialize a newly created scope to represent the potential target of an unlabeled
@@ -13188,7 +13350,7 @@
/**
* The listener that is to be informed when an error is encountered.
*/
- AnalysisErrorListener _errorListener;
+ final AnalysisErrorListener errorListener;
/**
* A list of the namespaces representing the names that are available in this scope from imported
@@ -13203,9 +13365,8 @@
* this scope
* @param errorListener the listener that is to be informed when an error is encountered
*/
- LibraryImportScope(LibraryElement definingLibrary, AnalysisErrorListener errorListener) {
+ LibraryImportScope(LibraryElement definingLibrary, this.errorListener) {
this._definingLibrary = definingLibrary;
- this._errorListener = errorListener;
createImportedNamespaces(definingLibrary);
}
@@ -13215,8 +13376,6 @@
}
}
- AnalysisErrorListener get errorListener => _errorListener;
-
Element lookup3(Identifier identifier, String name, LibraryElement referencingLibrary) {
Element foundElement = localLookup(name, referencingLibrary);
if (foundElement != null) {
@@ -13240,7 +13399,7 @@
List<Element> conflictingMembers = (foundElement as MultiplyDefinedElementImpl).conflictingElements;
String libName1 = getLibraryName(conflictingMembers[0], "");
String libName2 = getLibraryName(conflictingMembers[1], "");
- _errorListener.onError(new AnalysisError.con2(getSource(identifier), identifier.offset, identifier.length, StaticWarningCode.AMBIGUOUS_IMPORT, [foundEltName, libName1, libName2]));
+ errorListener.onError(new AnalysisError.con2(getSource(identifier), identifier.offset, identifier.length, StaticWarningCode.AMBIGUOUS_IMPORT, [foundEltName, libName1, libName2]));
return foundElement;
}
if (foundElement != null) {
@@ -13309,7 +13468,7 @@
if (sdkElement != null && to > 0) {
String sdkLibName = getLibraryName(sdkElement, "");
String otherLibName = getLibraryName(conflictingMembers[0], "");
- _errorListener.onError(new AnalysisError.con2(getSource(identifier), identifier.offset, identifier.length, StaticWarningCode.CONFLICTING_DART_IMPORT, [name, sdkLibName, otherLibName]));
+ errorListener.onError(new AnalysisError.con2(getSource(identifier), identifier.offset, identifier.length, StaticWarningCode.CONFLICTING_DART_IMPORT, [name, sdkLibName, otherLibName]));
}
if (to == length) {
return foundElement;
@@ -13705,6 +13864,11 @@
Map<String, Element> _definedNames = new Map<String, Element>();
/**
+ * A flag indicating whether there are any names defined in this scope.
+ */
+ bool _hasName = false;
+
+ /**
* Add the given element to this scope. If there is already an element with the given name defined
* in this scope, then an error will be generated and the original element will continue to be
* mapped to the name. If there is an element with the given name in an enclosing scope, then a
@@ -13719,6 +13883,7 @@
errorListener.onError(getErrorForDuplicate(_definedNames[name], element));
} else {
_definedNames[name] = element;
+ _hasName = true;
}
}
}
@@ -13748,6 +13913,7 @@
*/
void defineWithoutChecking(Element element) {
_definedNames[getName(element)] = element;
+ _hasName = true;
}
/**
@@ -13758,6 +13924,7 @@
*/
void defineWithoutChecking2(String name, Element element) {
_definedNames[name] = element;
+ _hasName = true;
}
/**
@@ -13808,7 +13975,12 @@
* implement library-level privacy
* @return the element with which the given name is associated
*/
- Element localLookup(String name, LibraryElement referencingLibrary) => _definedNames[name];
+ Element localLookup(String name, LibraryElement referencingLibrary) {
+ if (_hasName) {
+ return _definedNames[name];
+ }
+ return null;
+ }
/**
* Return the element with which the given name is associated, or `null` if the name is not
@@ -16143,7 +16315,7 @@
if (initializer is SuperConstructorInvocation) {
SuperConstructorInvocation superInvocation = initializer as SuperConstructorInvocation;
ConstructorElement element = superInvocation.staticElement;
- if (element.isConst) {
+ if (element == null || element.isConst) {
return false;
}
_errorReporter.reportError2(CompileTimeErrorCode.CONST_CONSTRUCTOR_WITH_NON_CONST_SUPER, superInvocation, []);
@@ -18702,12 +18874,12 @@
/**
* The type of this error.
*/
- ErrorType _type;
+ final ErrorType type;
/**
* The template used to create the message to be displayed for this error.
*/
- String _message;
+ final String message;
/**
* The template used to create the correction to be displayed for this error, or `null` if
@@ -18721,10 +18893,7 @@
* @param type the type of this error
* @param message the message template used to create the message to be displayed for the error
*/
- ResolverErrorCode.con1(String name, int ordinal, ErrorType type, String message) : super(name, ordinal) {
- this._type = type;
- this._message = message;
- }
+ ResolverErrorCode.con1(String name, int ordinal, this.type, this.message) : super(name, ordinal);
/**
* Initialize a newly created error code to have the given type, message and correction.
@@ -18733,17 +18902,11 @@
* @param message the template used to create the message to be displayed for the error
* @param correction the template used to create the correction to be displayed for the error
*/
- ResolverErrorCode.con2(String name, int ordinal, ErrorType type, String message, String correction) : super(name, ordinal) {
- this._type = type;
- this._message = message;
+ ResolverErrorCode.con2(String name, int ordinal, this.type, this.message, String correction) : super(name, ordinal) {
this.correction9 = correction;
}
String get correction => correction9;
- ErrorSeverity get errorSeverity => _type.severity;
-
- String get message => _message;
-
- ErrorType get type => _type;
+ ErrorSeverity get errorSeverity => type.severity;
}
\ No newline at end of file
diff --git a/pkg/analyzer/lib/src/generated/scanner.dart b/pkg/analyzer/lib/src/generated/scanner.dart
index 413cf3b..6d0fe31 100644
--- a/pkg/analyzer/lib/src/generated/scanner.dart
+++ b/pkg/analyzer/lib/src/generated/scanner.dart
@@ -163,7 +163,7 @@
/**
* The template used to create the message to be displayed for this error.
*/
- String _message;
+ final String message;
/**
* The template used to create the correction to be displayed for this error, or `null` if
@@ -176,9 +176,7 @@
*
* @param message the message template used to create the message to be displayed for this error
*/
- ScannerErrorCode.con1(String name, int ordinal, String message) : super(name, ordinal) {
- this._message = message;
- }
+ ScannerErrorCode.con1(String name, int ordinal, this.message) : super(name, ordinal);
/**
* Initialize a newly created error code to have the given message and correction.
@@ -186,8 +184,7 @@
* @param message the template used to create the message to be displayed for the error
* @param correction the template used to create the correction to be displayed for the error
*/
- ScannerErrorCode.con2(String name, int ordinal, String message, String correction) : super(name, ordinal) {
- this._message = message;
+ ScannerErrorCode.con2(String name, int ordinal, this.message, String correction) : super(name, ordinal) {
this.correction10 = correction;
}
@@ -195,8 +192,6 @@
ErrorSeverity get errorSeverity => ErrorSeverity.ERROR;
- String get message => _message;
-
ErrorType get type => ErrorType.SYNTACTIC_ERROR;
}
@@ -424,13 +419,13 @@
/**
* The lexeme for the keyword.
*/
- String syntax;
+ String _syntax;
/**
* A flag indicating whether the keyword is a pseudo-keyword. Pseudo keywords can be used as
* identifiers.
*/
- bool isPseudoKeyword = false;
+ bool _isPseudoKeyword2 = false;
/**
* A table mapping the lexemes of keywords to the corresponding keyword.
@@ -445,7 +440,7 @@
static Map<String, Keyword> createKeywordMap() {
LinkedHashMap<String, Keyword> result = new LinkedHashMap<String, Keyword>();
for (Keyword keyword in values) {
- result[keyword.syntax] = keyword;
+ result[keyword._syntax] = keyword;
}
return result;
}
@@ -466,9 +461,24 @@
* @param isPseudoKeyword `true` if this keyword is a pseudo-keyword
*/
Keyword.con2(String name, int ordinal, String syntax, bool isPseudoKeyword) : super(name, ordinal) {
- this.syntax = syntax;
- this.isPseudoKeyword = isPseudoKeyword;
+ this._syntax = syntax;
+ this._isPseudoKeyword2 = isPseudoKeyword;
}
+
+ /**
+ * Return the lexeme for the keyword.
+ *
+ * @return the lexeme for the keyword
+ */
+ String get syntax => _syntax;
+
+ /**
+ * Return `true` if this keyword is a pseudo-keyword. Pseudo keywords can be used as
+ * identifiers.
+ *
+ * @return `true` if this keyword is a pseudo-keyword
+ */
+ bool get isPseudoKeyword => _isPseudoKeyword2;
}
/**
@@ -558,21 +568,21 @@
/**
* A map from tokens that were copied to the copies of the tokens.
*/
- final TokenMap tokenMap = new TokenMap();
+ TokenMap _tokenMap = new TokenMap();
/**
* The token in the new token stream immediately to the left of the range of tokens that were
* inserted, or the token immediately to the left of the modified region if there were no new
* tokens.
*/
- Token leftToken;
+ Token _leftToken;
/**
* The token in the new token stream immediately to the right of the range of tokens that were
* inserted, or the token immediately to the right of the modified region if there were no new
* tokens.
*/
- Token rightToken;
+ Token _rightToken;
/**
* A flag indicating whether there were any tokens changed as a result of the modification.
@@ -591,6 +601,31 @@
}
/**
+ * Return the token in the new token stream immediately to the left of the range of tokens that
+ * were inserted, or the token immediately to the left of the modified region if there were no new
+ * tokens.
+ *
+ * @return the token to the left of the inserted tokens
+ */
+ Token get leftToken => _leftToken;
+
+ /**
+ * Return the token in the new token stream immediately to the right of the range of tokens that
+ * were inserted, or the token immediately to the right of the modified region if there were no
+ * new tokens.
+ *
+ * @return the token to the right of the inserted tokens
+ */
+ Token get rightToken => _rightToken;
+
+ /**
+ * Return a map from tokens that were copied to the copies of the tokens.
+ *
+ * @return a map from tokens that were copied to the copies of the tokens
+ */
+ TokenMap get tokenMap => _tokenMap;
+
+ /**
* Return `true` if there were any tokens either added or removed (or both) as a result of
* the modification.
*
@@ -616,7 +651,7 @@
}
Token oldFirst = originalStream;
Token oldLeftToken = originalStream.previous;
- leftToken = tail;
+ _leftToken = tail;
int removedEnd = index + (removedLength == 0 ? 0 : removedLength - 1);
while (originalStream.type != TokenType.EOF && originalStream.offset <= removedEnd) {
originalStream = originalStream.next;
@@ -643,46 +678,46 @@
}
if (identical(originalStream.type, TokenType.EOF)) {
copyAndAdvance(originalStream, delta);
- rightToken = tail;
- rightToken.setNextWithoutSettingPrevious(rightToken);
+ _rightToken = tail;
+ _rightToken.setNextWithoutSettingPrevious(_rightToken);
} else {
originalStream = copyAndAdvance(originalStream, delta);
- rightToken = tail;
+ _rightToken = tail;
while (originalStream.type != TokenType.EOF) {
originalStream = copyAndAdvance(originalStream, delta);
}
Token eof = copyAndAdvance(originalStream, delta);
eof.setNextWithoutSettingPrevious(eof);
}
- Token newFirst = leftToken.next;
- while (newFirst != rightToken && oldFirst != oldRightToken && newFirst.type != TokenType.EOF && equals3(oldFirst, newFirst)) {
- tokenMap.put(oldFirst, newFirst);
+ Token newFirst = _leftToken.next;
+ while (newFirst != _rightToken && oldFirst != oldRightToken && newFirst.type != TokenType.EOF && equals3(oldFirst, newFirst)) {
+ _tokenMap.put(oldFirst, newFirst);
oldLeftToken = oldFirst;
oldFirst = oldFirst.next;
- leftToken = newFirst;
+ _leftToken = newFirst;
newFirst = newFirst.next;
}
- Token newLast = rightToken.previous;
- while (newLast != leftToken && oldLast != oldLeftToken && newLast.type != TokenType.EOF && equals3(oldLast, newLast)) {
- tokenMap.put(oldLast, newLast);
+ Token newLast = _rightToken.previous;
+ while (newLast != _leftToken && oldLast != oldLeftToken && newLast.type != TokenType.EOF && equals3(oldLast, newLast)) {
+ _tokenMap.put(oldLast, newLast);
oldRightToken = oldLast;
oldLast = oldLast.previous;
- rightToken = newLast;
+ _rightToken = newLast;
newLast = newLast.previous;
}
- _hasNonWhitespaceChange2 = leftToken.next != rightToken || oldLeftToken.next != oldRightToken;
+ _hasNonWhitespaceChange2 = _leftToken.next != _rightToken || oldLeftToken.next != oldRightToken;
return firstToken;
}
Token copyAndAdvance(Token originalToken, int delta) {
Token copiedToken = originalToken.copy();
- tokenMap.put(originalToken, copiedToken);
+ _tokenMap.put(originalToken, copiedToken);
copiedToken.applyDelta(delta);
appendToken(copiedToken);
Token originalComment = originalToken.precedingComments;
Token copiedComment = originalToken.precedingComments;
while (originalComment != null) {
- tokenMap.put(originalComment, copiedComment);
+ _tokenMap.put(originalComment, copiedComment);
originalComment = originalComment.next;
copiedComment = copiedComment.next;
}
@@ -715,7 +750,7 @@
/**
* The source being scanned.
*/
- Source source;
+ final Source source;
/**
* The reader used to access the characters in the source.
@@ -728,6 +763,11 @@
AnalysisErrorListener _errorListener;
/**
+ * The flag specifying if documentation comments should be parsed.
+ */
+ bool _preserveComments = true;
+
+ /**
* The token pointing to the head of the linked list of tokens.
*/
Token _tokens;
@@ -735,7 +775,7 @@
/**
* The last token that was scanned.
*/
- Token tail;
+ Token _tail;
/**
* The first token in the list of comment tokens found since the last non-comment token.
@@ -780,13 +820,12 @@
* @param reader the character reader used to read the characters in the source
* @param errorListener the error listener that will be informed of any errors that are found
*/
- Scanner(Source source, CharacterReader reader, AnalysisErrorListener errorListener) {
- this.source = source;
+ Scanner(this.source, CharacterReader reader, AnalysisErrorListener errorListener) {
this._reader = reader;
this._errorListener = errorListener;
_tokens = new Token(TokenType.EOF, -1);
_tokens.setNext(_tokens);
- tail = _tokens;
+ _tail = _tokens;
_tokenStart = -1;
_lineStarts.add(0);
}
@@ -806,6 +845,15 @@
bool hasUnmatchedGroups() => _hasUnmatchedGroups2;
/**
+ * Set whether documentation tokens should be scanned.
+ *
+ * @param preserveComments `true` if documentation tokens should be scanned
+ */
+ void set preserveComments(bool preserveComments) {
+ this._preserveComments = preserveComments;
+ }
+
+ /**
* Record that the source begins on the given line and column at the current offset as given by
* the reader. The line starts for lines before the given line will not be correct.
*
@@ -857,7 +905,7 @@
* @param token the token to be appended
*/
void appendToken(Token token) {
- tail = tail.setNext(token);
+ _tail = _tail.setNext(token);
}
int bigSwitch(int next) {
@@ -1009,6 +1057,13 @@
Token get firstToken => _tokens.next;
/**
+ * Return the last token that was scanned.
+ *
+ * @return the last token that was scanned
+ */
+ Token get tail => _tail;
+
+ /**
* Record the fact that we are at the beginning of a new line in the source.
*/
void recordStartOfLine() {
@@ -1024,12 +1079,15 @@
_firstComment = null;
_lastComment = null;
}
- tail = tail.setNext(token);
+ _tail = _tail.setNext(token);
_groupingStack.add(token);
_stackEnd++;
}
void appendCommentToken(TokenType type, String value) {
+ if (!_preserveComments) {
+ return;
+ }
if (_firstComment == null) {
_firstComment = new StringToken(type, value, _tokenStart);
_lastComment = _firstComment;
@@ -1047,7 +1105,7 @@
_firstComment = null;
_lastComment = null;
}
- tail = tail.setNext(token);
+ _tail = _tail.setNext(token);
if (_stackEnd >= 0) {
BeginToken begin = _groupingStack[_stackEnd];
if (identical(begin.type, beginType)) {
@@ -1067,7 +1125,7 @@
_lastComment = null;
}
eofToken.setNext(eofToken);
- tail = tail.setNext(eofToken);
+ _tail = _tail.setNext(eofToken);
if (_stackEnd >= 0) {
_hasUnmatchedGroups2 = true;
}
@@ -1075,9 +1133,9 @@
void appendKeywordToken(Keyword keyword) {
if (_firstComment == null) {
- tail = tail.setNext(new KeywordToken(keyword, _tokenStart));
+ _tail = _tail.setNext(new KeywordToken(keyword, _tokenStart));
} else {
- tail = tail.setNext(new KeywordTokenWithComment(keyword, _tokenStart, _firstComment));
+ _tail = _tail.setNext(new KeywordTokenWithComment(keyword, _tokenStart, _firstComment));
_firstComment = null;
_lastComment = null;
}
@@ -1085,9 +1143,9 @@
void appendStringToken(TokenType type, String value) {
if (_firstComment == null) {
- tail = tail.setNext(new StringToken(type, value, _tokenStart));
+ _tail = _tail.setNext(new StringToken(type, value, _tokenStart));
} else {
- tail = tail.setNext(new StringTokenWithComment(type, value, _tokenStart, _firstComment));
+ _tail = _tail.setNext(new StringTokenWithComment(type, value, _tokenStart, _firstComment));
_firstComment = null;
_lastComment = null;
}
@@ -1095,9 +1153,9 @@
void appendStringToken2(TokenType type, String value, int offset) {
if (_firstComment == null) {
- tail = tail.setNext(new StringToken(type, value, _tokenStart + offset));
+ _tail = _tail.setNext(new StringToken(type, value, _tokenStart + offset));
} else {
- tail = tail.setNext(new StringTokenWithComment(type, value, _tokenStart + offset, _firstComment));
+ _tail = _tail.setNext(new StringTokenWithComment(type, value, _tokenStart + offset, _firstComment));
_firstComment = null;
_lastComment = null;
}
@@ -1105,9 +1163,9 @@
void appendToken2(TokenType type) {
if (_firstComment == null) {
- tail = tail.setNext(new Token(type, _tokenStart));
+ _tail = _tail.setNext(new Token(type, _tokenStart));
} else {
- tail = tail.setNext(new TokenWithComment(type, _tokenStart, _firstComment));
+ _tail = _tail.setNext(new TokenWithComment(type, _tokenStart, _firstComment));
_firstComment = null;
_lastComment = null;
}
@@ -1115,9 +1173,9 @@
void appendToken3(TokenType type, int offset) {
if (_firstComment == null) {
- tail = tail.setNext(new Token(type, offset));
+ _tail = _tail.setNext(new Token(type, offset));
} else {
- tail = tail.setNext(new TokenWithComment(type, offset, _firstComment));
+ _tail = _tail.setNext(new TokenWithComment(type, offset, _firstComment));
_firstComment = null;
_lastComment = null;
}
@@ -1805,7 +1863,7 @@
/**
* The type of the token.
*/
- TokenType type;
+ final TokenType type;
/**
* The offset from the beginning of the file to the first character in the token.
@@ -1820,7 +1878,7 @@
/**
* The next token in the token stream.
*/
- Token next;
+ Token _next;
/**
* Initialize a newly created token to have the given type and offset.
@@ -1828,8 +1886,7 @@
* @param type the type of the token
* @param offset the offset from the beginning of the file to the first character in the token
*/
- Token(TokenType type, int offset) {
- this.type = type;
+ Token(this.type, int offset) {
this.offset = offset;
}
@@ -1865,6 +1922,13 @@
String get lexeme => type.lexeme;
/**
+ * Return the next token in the token stream.
+ *
+ * @return the next token in the token stream
+ */
+ Token get next => _next;
+
+ /**
* Return the first comment in the list of comments that precede this token, or `null` if
* there are no comments preceding this token. Additional comments can be reached by following the
* token stream using [getNext] until `null` is returned.
@@ -1903,7 +1967,7 @@
* @return the token that was passed in
*/
Token setNext(Token token) {
- next = token;
+ _next = token;
token.previous = this;
return token;
}
@@ -1916,7 +1980,7 @@
* @return the token that was passed in
*/
Token setNextWithoutSettingPrevious(Token token) {
- next = token;
+ _next = token;
return token;
}
@@ -2055,7 +2119,7 @@
/**
* The keyword being represented by this token.
*/
- Keyword keyword;
+ final Keyword keyword;
/**
* Initialize a newly created token to represent the given keyword.
@@ -2063,9 +2127,7 @@
* @param keyword the keyword being represented by this token
* @param offset the offset from the beginning of the file to the first character in the token
*/
- KeywordToken(Keyword keyword, int offset) : super(TokenType.KEYWORD, offset) {
- this.keyword = keyword;
- }
+ KeywordToken(this.keyword, int offset) : super(TokenType.KEYWORD, offset);
Token copy() => new KeywordToken(keyword, offset);
@@ -2207,13 +2269,21 @@
* The precedence of tokens of this class, or `0` if the such tokens do not represent an
* operator.
*/
- int precedence = 0;
+ int _precedence = 0;
TokenClass.con1(String name, int ordinal) : this.con2(name, ordinal, 0);
TokenClass.con2(String name, int ordinal, int precedence) : super(name, ordinal) {
- this.precedence = precedence;
+ this._precedence = precedence;
}
+
+ /**
+ * Return the precedence of tokens of this class, or `0` if the such tokens do not represent
+ * an operator.
+ *
+ * @return the precedence of tokens of this class
+ */
+ int get precedence => _precedence;
}
/**
@@ -2479,16 +2549,24 @@
* The lexeme that defines this type of token, or `null` if there is more than one possible
* lexeme for this type of token.
*/
- String lexeme;
+ String _lexeme;
TokenType.con1(String name, int ordinal) : this.con2(name, ordinal, TokenClass.NO_CLASS, null);
TokenType.con2(String name, int ordinal, TokenClass tokenClass, String lexeme) : super(name, ordinal) {
this._tokenClass = tokenClass == null ? TokenClass.NO_CLASS : tokenClass;
- this.lexeme = lexeme;
+ this._lexeme = lexeme;
}
/**
+ * Return the lexeme that defines this type of token, or `null` if there is more than one
+ * possible lexeme for this type of token.
+ *
+ * @return the lexeme that defines this type of token
+ */
+ String get lexeme => _lexeme;
+
+ /**
* Return the precedence of the token, or `0` if the token does not represent an operator.
*
* @return the precedence of the token
@@ -2535,7 +2613,7 @@
*
* @return `true` if this type of token represents an increment operator
*/
- bool get isIncrementOperator => identical(lexeme, "++") || identical(lexeme, "--");
+ bool get isIncrementOperator => identical(_lexeme, "++") || identical(_lexeme, "--");
/**
* Return `true` if this type of token represents a multiplicative operator.
@@ -2584,7 +2662,7 @@
*
* @return `true` if this token type represents an operator that can be defined by users
*/
- bool get isUserDefinableOperator => identical(lexeme, "==") || identical(lexeme, "~") || identical(lexeme, "[]") || identical(lexeme, "[]=") || identical(lexeme, "*") || identical(lexeme, "/") || identical(lexeme, "%") || identical(lexeme, "~/") || identical(lexeme, "+") || identical(lexeme, "-") || identical(lexeme, "<<") || identical(lexeme, ">>") || identical(lexeme, ">=") || identical(lexeme, ">") || identical(lexeme, "<=") || identical(lexeme, "<") || identical(lexeme, "&") || identical(lexeme, "^") || identical(lexeme, "|");
+ bool get isUserDefinableOperator => identical(_lexeme, "==") || identical(_lexeme, "~") || identical(_lexeme, "[]") || identical(_lexeme, "[]=") || identical(_lexeme, "*") || identical(_lexeme, "/") || identical(_lexeme, "%") || identical(_lexeme, "~/") || identical(_lexeme, "+") || identical(_lexeme, "-") || identical(_lexeme, "<<") || identical(_lexeme, ">>") || identical(_lexeme, ">=") || identical(_lexeme, ">") || identical(_lexeme, "<=") || identical(_lexeme, "<") || identical(_lexeme, "&") || identical(_lexeme, "^") || identical(_lexeme, "|");
}
class TokenType_EOF extends TokenType {
diff --git a/pkg/analyzer/lib/src/generated/sdk.dart b/pkg/analyzer/lib/src/generated/sdk.dart
index 2329da1..327b3e5 100644
--- a/pkg/analyzer/lib/src/generated/sdk.dart
+++ b/pkg/analyzer/lib/src/generated/sdk.dart
@@ -91,13 +91,13 @@
* The path to the file defining the library. The path is relative to the `lib` directory
* within the SDK.
*/
- String _path = null;
+ String path = null;
/**
* The name of the category containing the library. Unless otherwise specified in the libraries
* file all libraries are assumed to be shared between server and client.
*/
- String _category = "Shared";
+ String category = "Shared";
/**
* A flag indicating whether the library is documented.
@@ -135,10 +135,6 @@
this._shortName = name;
}
- String get category => _category;
-
- String get path => _path;
-
String get shortName => _shortName;
bool get isDart2JsLibrary => (_platforms & DART2JS_PLATFORM) != 0;
@@ -147,12 +143,12 @@
bool get isImplementation => _implementation;
- bool get isInternal => "Internal" == _category;
+ bool get isInternal => "Internal" == category;
/**
* Return `true` if library can be used for both client and server
*/
- bool get isShared => _category == "Shared";
+ bool get isShared => category == "Shared";
/**
* Return `true` if this library can be run on the VM.
@@ -162,15 +158,6 @@
bool get isVmLibrary => (_platforms & VM_PLATFORM) != 0;
/**
- * Set the name of the category containing the library to the given name.
- *
- * @param category the name of the category containing the library
- */
- void set category(String category) {
- this._category = category;
- }
-
- /**
* Record that this library can be compiled to JavaScript by dart2js.
*/
void setDart2JsLibrary() {
@@ -196,16 +183,6 @@
}
/**
- * Set the path to the file defining the library to the given path. The path is relative to the
- * `lib` directory within the SDK.
- *
- * @param path the path to the file defining the library
- */
- void set path(String path) {
- this._path = path;
- }
-
- /**
* Record that this library can be run on the VM.
*/
void setVmLibrary() {
diff --git a/pkg/analyzer/lib/src/generated/sdk_io.dart b/pkg/analyzer/lib/src/generated/sdk_io.dart
index e06e06b..018b655 100644
--- a/pkg/analyzer/lib/src/generated/sdk_io.dart
+++ b/pkg/analyzer/lib/src/generated/sdk_io.dart
@@ -29,7 +29,7 @@
/**
* The directory containing the SDK.
*/
- JavaFile directory;
+ JavaFile _sdkDirectory;
/**
* The revision number of this SDK, or `"0"` if the revision number cannot be discovered.
@@ -173,7 +173,7 @@
* @param sdkDirectory the directory containing the SDK
*/
DirectoryBasedDartSdk(JavaFile sdkDirectory) {
- this.directory = sdkDirectory.getAbsoluteFile();
+ this._sdkDirectory = sdkDirectory.getAbsoluteFile();
initializeSdk();
initializeLibraryMap();
_analysisContext = new AnalysisContextImpl();
@@ -194,7 +194,7 @@
* @param sdkDirectory the directory containing the SDK
*/
DirectoryBasedDartSdk.con1(JavaFile sdkDirectory, bool ignored) {
- this.directory = sdkDirectory.getAbsoluteFile();
+ this._sdkDirectory = sdkDirectory.getAbsoluteFile();
initializeSdk();
initializeLibraryMap();
_analysisContext = new AnalysisContextImpl();
@@ -234,14 +234,21 @@
*
* @return the directory where dartium can be found
*/
- JavaFile get dartiumWorkingDirectory => new JavaFile.relative(directory.getParentFile(), _CHROMIUM_DIRECTORY_NAME);
+ JavaFile get dartiumWorkingDirectory => new JavaFile.relative(_sdkDirectory.getParentFile(), _CHROMIUM_DIRECTORY_NAME);
+
+ /**
+ * Return the directory containing the SDK.
+ *
+ * @return the directory containing the SDK
+ */
+ JavaFile get directory => _sdkDirectory;
/**
* Return the directory containing documentation for the SDK.
*
* @return the SDK's documentation directory
*/
- JavaFile get docDirectory => new JavaFile.relative(directory, _DOCS_DIRECTORY_NAME);
+ JavaFile get docDirectory => new JavaFile.relative(_sdkDirectory, _DOCS_DIRECTORY_NAME);
/**
* Return the auxiliary documentation file for the given library, or `null` if no such file
@@ -269,7 +276,7 @@
*
* @return the directory that contains the libraries
*/
- JavaFile get libraryDirectory => new JavaFile.relative(directory, _LIB_DIRECTORY_NAME);
+ JavaFile get libraryDirectory => new JavaFile.relative(_sdkDirectory, _LIB_DIRECTORY_NAME);
/**
* Return the file containing the Pub executable, or `null` if it does not exist.
@@ -278,7 +285,7 @@
*/
JavaFile get pubExecutable {
String pubBinaryName = OSUtilities.isWindows() ? _PUB_EXECUTABLE_NAME_WIN : _PUB_EXECUTABLE_NAME;
- JavaFile file = new JavaFile.relative(new JavaFile.relative(directory, _BIN_DIRECTORY_NAME), pubBinaryName);
+ JavaFile file = new JavaFile.relative(new JavaFile.relative(_sdkDirectory, _BIN_DIRECTORY_NAME), pubBinaryName);
return file.exists() ? file : null;
}
@@ -296,7 +303,7 @@
{
if (_sdkVersion == null) {
_sdkVersion = DartSdk.DEFAULT_VERSION;
- JavaFile revisionFile = new JavaFile.relative(directory, _REVISION_FILE_NAME);
+ JavaFile revisionFile = new JavaFile.relative(_sdkDirectory, _REVISION_FILE_NAME);
try {
String revision = revisionFile.readAsStringSync();
if (revision != null) {
@@ -324,7 +331,7 @@
JavaFile get vmExecutable {
{
if (_vmExecutable == null) {
- JavaFile file = new JavaFile.relative(new JavaFile.relative(directory, _BIN_DIRECTORY_NAME), vmBinaryName);
+ JavaFile file = new JavaFile.relative(new JavaFile.relative(_sdkDirectory, _BIN_DIRECTORY_NAME), vmBinaryName);
if (file.exists()) {
_vmExecutable = file;
}
diff --git a/pkg/analyzer/lib/src/generated/source.dart b/pkg/analyzer/lib/src/generated/source.dart
index f817d7b..1a812c6 100644
--- a/pkg/analyzer/lib/src/generated/source.dart
+++ b/pkg/analyzer/lib/src/generated/source.dart
@@ -17,18 +17,18 @@
/**
* Instance of [LocalSourcePredicate] that always returns `false`.
*/
- static final LocalSourcePredicate _FALSE = new LocalSourcePredicate_15();
+ static final LocalSourcePredicate FALSE = new LocalSourcePredicate_15();
/**
* Instance of [LocalSourcePredicate] that always returns `true`.
*/
- static final LocalSourcePredicate _TRUE = new LocalSourcePredicate_16();
+ static final LocalSourcePredicate TRUE = new LocalSourcePredicate_16();
/**
* Instance of [LocalSourcePredicate] that returns `true` for all [Source]s
* except of SDK.
*/
- static final LocalSourcePredicate _NOT_SDK = new LocalSourcePredicate_17();
+ static final LocalSourcePredicate NOT_SDK = new LocalSourcePredicate_17();
/**
* Determines if the given [Source] is local.
@@ -66,7 +66,7 @@
/**
* A cache of content used to override the default content of a source.
*/
- ContentCache contentCache;
+ ContentCache _contentCache;
/**
* The resolvers used to resolve absolute URI's.
@@ -85,9 +85,9 @@
* @param resolvers the resolvers used to resolve absolute URI's
*/
SourceFactory.con1(ContentCache contentCache, List<UriResolver> resolvers) {
- this.contentCache = contentCache;
+ this._contentCache = contentCache;
this._resolvers = resolvers;
- this._localSourcePredicate = LocalSourcePredicate._NOT_SDK;
+ this._localSourcePredicate = LocalSourcePredicate.NOT_SDK;
}
/**
@@ -134,7 +134,7 @@
try {
Uri uri = parseUriWithException(encoding.substring(1));
for (UriResolver resolver in _resolvers) {
- Source result = resolver.fromEncoding(contentCache, kind, uri);
+ Source result = resolver.fromEncoding(_contentCache, kind, uri);
if (result != null) {
return result;
}
@@ -146,6 +146,13 @@
}
/**
+ * Return a cache of content used to override the default content of a source.
+ *
+ * @return a cache of content used to override the default content of a source
+ */
+ ContentCache get contentCache => _contentCache;
+
+ /**
* Return the [DartSdk] associated with this [SourceFactory], or `null` if there
* is no such SDK.
*
@@ -216,7 +223,7 @@
* @param contents the new contents of the source
* @return the original cached contents or `null` if none
*/
- String setContents(Source source, String contents) => contentCache.setContents(source, contents);
+ String setContents(Source source, String contents) => _contentCache.setContents(source, contents);
/**
* Sets the [LocalSourcePredicate].
@@ -237,7 +244,7 @@
* @param source the source whose content is to be returned
* @return the contents of the given source
*/
- String getContents(Source source) => contentCache.getContents(source);
+ String getContents(Source source) => _contentCache.getContents(source);
/**
* Return the modification stamp of the given source, or `null` if this factory does not
@@ -249,7 +256,7 @@
* @param source the source whose modification stamp is to be returned
* @return the modification stamp of the given source
*/
- int getModificationStamp(Source source) => contentCache.getModificationStamp(source);
+ int getModificationStamp(Source source) => _contentCache.getModificationStamp(source);
/**
* Return a source object representing the URI that results from resolving the given (possibly
@@ -264,7 +271,7 @@
Source resolveUri2(Source containingSource, Uri containedUri) {
if (containedUri.isAbsolute) {
for (UriResolver resolver in _resolvers) {
- Source result = resolver.resolveAbsolute(contentCache, containedUri);
+ Source result = resolver.resolveAbsolute(_contentCache, containedUri);
if (result != null) {
return result;
}
@@ -549,16 +556,14 @@
/**
* The single character encoding used to identify this kind of URI.
*/
- int encoding = 0;
+ final int encoding;
/**
* Initialize a newly created URI kind to have the given encoding.
*
* @param encoding the single character encoding used to identify this kind of URI.
*/
- UriKind(String name, int ordinal, int encoding) : super(name, ordinal) {
- this.encoding = encoding;
- }
+ UriKind(String name, int ordinal, this.encoding) : super(name, ordinal);
}
/**
@@ -576,13 +581,13 @@
* The 0-based index of the first character of the source code for this element, relative to the
* source buffer in which this element is contained.
*/
- int offset = 0;
+ final int offset;
/**
* The number of characters of the source code for this element, relative to the source buffer in
* which this element is contained.
*/
- int length = 0;
+ final int length;
/**
* Initialize a newly created source range using the given offset and the given length.
@@ -590,10 +595,7 @@
* @param offset the given offset
* @param length the given length
*/
- SourceRange(int offset, int length) {
- this.offset = offset;
- this.length = length;
- }
+ SourceRange(this.offset, this.length);
/**
* @return `true` if <code>x</code> is in [offset, offset + length) interval.
@@ -715,7 +717,7 @@
/**
* The Dart SDK against which URI's are to be resolved.
*/
- DartSdk dartSdk;
+ DartSdk _sdk;
/**
* The name of the `dart` scheme.
@@ -737,21 +739,28 @@
* @param sdk the Dart SDK against which URI's are to be resolved
*/
DartUriResolver(DartSdk sdk) {
- this.dartSdk = sdk;
+ this._sdk = sdk;
}
Source fromEncoding(ContentCache contentCache, UriKind kind, Uri uri) {
if (identical(kind, UriKind.DART_URI)) {
- return dartSdk.fromEncoding(contentCache, kind, uri);
+ return _sdk.fromEncoding(contentCache, kind, uri);
}
return null;
}
+ /**
+ * Return the [DartSdk] against which URIs are to be resolved.
+ *
+ * @return the [DartSdk] against which URIs are to be resolved.
+ */
+ DartSdk get dartSdk => _sdk;
+
Source resolveAbsolute(ContentCache contentCache, Uri uri) {
if (!isDartUri(uri)) {
return null;
}
- return dartSdk.mapDartUri(uri.toString());
+ return _sdk.mapDartUri(uri.toString());
}
}
@@ -807,12 +816,12 @@
/**
* The one-based index of the line containing the character.
*/
- int lineNumber = 0;
+ final int lineNumber;
/**
* The one-based index of the column containing the character.
*/
- int columnNumber = 0;
+ final int columnNumber;
/**
* Initialize a newly created location to represent the location of the character at the given
@@ -821,10 +830,7 @@
* @param lineNumber the one-based index of the line containing the character
* @param columnNumber the one-based index of the column containing the character
*/
- LineInfo_Location(int lineNumber, int columnNumber) {
- this.lineNumber = lineNumber;
- this.columnNumber = columnNumber;
- }
+ LineInfo_Location(this.lineNumber, this.columnNumber);
}
/**
@@ -884,7 +890,11 @@
_stampMap.remove(source);
return _contentMap.remove(source);
} else {
- _stampMap[source] = JavaSystem.currentTimeMillis();
+ int newStamp = JavaSystem.currentTimeMillis();
+ int oldStamp = javaMapPut(_stampMap, source, newStamp);
+ if (newStamp == oldStamp) {
+ _stampMap[source] = newStamp + 1;
+ }
return javaMapPut(_contentMap, source, contents);
}
}
diff --git a/pkg/analyzer/lib/src/generated/source_io.dart b/pkg/analyzer/lib/src/generated/source_io.dart
index 60bc557..60fe02c 100644
--- a/pkg/analyzer/lib/src/generated/source_io.dart
+++ b/pkg/analyzer/lib/src/generated/source_io.dart
@@ -19,18 +19,18 @@
/**
* Instance of [LocalSourcePredicate] that always returns `false`.
*/
- static final LocalSourcePredicate _FALSE = new LocalSourcePredicate_15();
+ static final LocalSourcePredicate FALSE = new LocalSourcePredicate_15();
/**
* Instance of [LocalSourcePredicate] that always returns `true`.
*/
- static final LocalSourcePredicate _TRUE = new LocalSourcePredicate_16();
+ static final LocalSourcePredicate TRUE = new LocalSourcePredicate_16();
/**
* Instance of [LocalSourcePredicate] that returns `true` for all [Source]s
* except of SDK.
*/
- static final LocalSourcePredicate _NOT_SDK = new LocalSourcePredicate_17();
+ static final LocalSourcePredicate NOT_SDK = new LocalSourcePredicate_17();
/**
* Determines if the given [Source] is local.
@@ -68,7 +68,7 @@
/**
* The file represented by this source.
*/
- JavaFile file;
+ JavaFile _file;
/**
* The cached encoding for this source.
@@ -98,13 +98,13 @@
*/
FileBasedSource.con2(ContentCache contentCache, JavaFile file, UriKind uriKind) {
this._contentCache = contentCache;
- this.file = file;
+ this._file = file;
this._uriKind = uriKind;
}
- bool operator ==(Object object) => object != null && this.runtimeType == object.runtimeType && file == (object as FileBasedSource).file;
+ bool operator ==(Object object) => object != null && this.runtimeType == object.runtimeType && _file == (object as FileBasedSource)._file;
- bool exists() => _contentCache.getContents(this) != null || (file.exists() && !file.isDirectory());
+ bool exists() => _contentCache.getContents(this) != null || (_file.exists() && !_file.isDirectory());
void getContents(Source_ContentReceiver receiver) {
String contents = _contentCache.getContents(this);
@@ -117,26 +117,26 @@
String get encoding {
if (_encoding == null) {
- _encoding = "${_uriKind.encoding}${file.toURI().toString()}";
+ _encoding = "${_uriKind.encoding}${_file.toURI().toString()}";
}
return _encoding;
}
- String get fullName => file.getAbsolutePath();
+ String get fullName => _file.getAbsolutePath();
int get modificationStamp {
int stamp = _contentCache.getModificationStamp(this);
if (stamp != null) {
return stamp;
}
- return file.lastModified();
+ return _file.lastModified();
}
- String get shortName => file.getName();
+ String get shortName => _file.getName();
UriKind get uriKind => _uriKind;
- int get hashCode => file.hashCode;
+ int get hashCode => _file.hashCode;
bool get isInSystemLibrary => identical(_uriKind, UriKind.DART_URI);
@@ -150,10 +150,10 @@
}
String toString() {
- if (file == null) {
+ if (_file == null) {
return "<unknown source>";
}
- return file.getAbsolutePath();
+ return _file.getAbsolutePath();
}
/**
@@ -171,6 +171,14 @@
}
receiver.accept2(file.readAsStringSync(), file.lastModified());
}
+
+ /**
+ * Return the file represented by this source. This is an internal method that is only intended to
+ * be used by [UriResolver].
+ *
+ * @return the file represented by this source
+ */
+ JavaFile get file => _file;
}
/**
@@ -347,7 +355,7 @@
/**
* The container's path (not `null`).
*/
- String path;
+ String _path;
/**
* Construct a container representing the specified directory and containing any sources whose
@@ -366,16 +374,23 @@
* @param path the path (not `null` and not empty)
*/
DirectoryBasedSourceContainer.con2(String path) {
- this.path = appendFileSeparator(path);
+ this._path = appendFileSeparator(path);
}
- bool contains(Source source) => source.fullName.startsWith(path);
+ bool contains(Source source) => source.fullName.startsWith(_path);
bool operator ==(Object obj) => (obj is DirectoryBasedSourceContainer) && (obj as DirectoryBasedSourceContainer).path == path;
- int get hashCode => path.hashCode;
+ /**
+ * Answer the receiver's path, used to determine if a source is contained in the receiver.
+ *
+ * @return the path (not `null`, not empty)
+ */
+ String get path => _path;
- String toString() => "SourceContainer[${path}]";
+ int get hashCode => _path.hashCode;
+
+ String toString() => "SourceContainer[${_path}]";
}
/**
diff --git a/pkg/analyzer/lib/src/generated/utilities_dart.dart b/pkg/analyzer/lib/src/generated/utilities_dart.dart
index 5344a94..bfefac5 100644
--- a/pkg/analyzer/lib/src/generated/utilities_dart.dart
+++ b/pkg/analyzer/lib/src/generated/utilities_dart.dart
@@ -24,7 +24,7 @@
/**
* A flag indicating whether this is an optional parameter.
*/
- bool isOptional = false;
+ bool _isOptional2 = false;
/**
* Initialize a newly created kind with the given state.
@@ -32,6 +32,13 @@
* @param isOptional `true` if this is an optional parameter
*/
ParameterKind(String name, int ordinal, bool isOptional) : super(name, ordinal) {
- this.isOptional = isOptional;
+ this._isOptional2 = isOptional;
}
+
+ /**
+ * Return `true` if this is an optional parameter.
+ *
+ * @return `true` if this is an optional parameter
+ */
+ bool get isOptional => _isOptional2;
}
\ No newline at end of file
diff --git a/pkg/analyzer/lib/src/generated/utilities_general.dart b/pkg/analyzer/lib/src/generated/utilities_general.dart
index d90cc3b..2d7b26d 100644
--- a/pkg/analyzer/lib/src/generated/utilities_general.dart
+++ b/pkg/analyzer/lib/src/generated/utilities_general.dart
@@ -9,7 +9,12 @@
* Helper for measuring how much time is spent doing some operation.
*/
class TimeCounter {
- int result = 0;
+ int _result = 0;
+
+ /**
+ * @return the number of milliseconds spent between [start] and [stop].
+ */
+ int get result => _result;
/**
* Starts counting time.
@@ -34,7 +39,7 @@
*/
void stop() {
{
- TimeCounter_this.result += JavaSystem.currentTimeMillis() - _startTime;
+ TimeCounter_this._result += JavaSystem.currentTimeMillis() - _startTime;
}
}
}
\ No newline at end of file
diff --git a/pkg/analyzer/pubspec.yaml b/pkg/analyzer/pubspec.yaml
index fc47861..bc61dc1 100644
--- a/pkg/analyzer/pubspec.yaml
+++ b/pkg/analyzer/pubspec.yaml
@@ -1,12 +1,12 @@
name: analyzer
-version: 0.10.3
+version: 0.11.1
author: Dart Team <misc@dartlang.org>
description: Static analyzer for Dart.
homepage: http://www.dartlang.org
dependencies:
args: ">=0.9.0 <0.10.0"
logging: ">=0.9.0 <0.10.0"
- path: ">=0.9.0 <0.10.0"
+ path: ">=0.9.0 <2.0.0"
dev_dependencies:
unittest: ">=0.9.0 <0.10.0"
environment:
diff --git a/pkg/analyzer/test/generated/ast_test.dart b/pkg/analyzer/test/generated/ast_test.dart
index ab7d96c..2d5f33a 100644
--- a/pkg/analyzer/test/generated/ast_test.dart
+++ b/pkg/analyzer/test/generated/ast_test.dart
@@ -211,6 +211,30 @@
}
}
+class ClassDeclarationTest extends ParserTestCase {
+ void test_getField() {
+ VariableDeclaration aVar = ASTFactory.variableDeclaration("a");
+ VariableDeclaration bVar = ASTFactory.variableDeclaration("b");
+ VariableDeclaration cVar = ASTFactory.variableDeclaration("c");
+ ClassDeclaration clazz = ASTFactory.classDeclaration(null, "Test", null, null, null, null, [
+ ASTFactory.fieldDeclaration2(false, null, [aVar]),
+ ASTFactory.fieldDeclaration2(false, null, [bVar, cVar])]);
+ JUnitTestCase.assertSame(aVar, clazz.getField("a"));
+ JUnitTestCase.assertSame(bVar, clazz.getField("b"));
+ JUnitTestCase.assertSame(cVar, clazz.getField("c"));
+ JUnitTestCase.assertSame(null, clazz.getField("noSuchField"));
+ }
+
+ static dartSuite() {
+ _ut.group('ClassDeclarationTest', () {
+ _ut.test('test_getField', () {
+ final __test = new ClassDeclarationTest();
+ runJUnitTest(__test, __test.test_getField);
+ });
+ });
+ }
+}
+
class VariableDeclarationTest extends ParserTestCase {
void test_getDocumentationComment_onGrandParent() {
VariableDeclaration varDecl = ASTFactory.variableDeclaration("a");
@@ -256,43 +280,43 @@
* 'identifier' rather than 'prefixedIdentifier', or 'integer' rather than 'integerLiteral'.
*/
class ASTFactory {
- static AdjacentStrings adjacentStrings(List<StringLiteral> strings) => new AdjacentStrings.full(list(strings));
+ static AdjacentStrings adjacentStrings(List<StringLiteral> strings) => new AdjacentStrings(list(strings));
- static Annotation annotation(Identifier name) => new Annotation.full(TokenFactory.token3(TokenType.AT), name, null, null, null);
+ static Annotation annotation(Identifier name) => new Annotation(TokenFactory.token3(TokenType.AT), name, null, null, null);
- static Annotation annotation2(Identifier name, SimpleIdentifier constructorName, ArgumentList arguments) => new Annotation.full(TokenFactory.token3(TokenType.AT), name, TokenFactory.token3(TokenType.PERIOD), constructorName, arguments);
+ static Annotation annotation2(Identifier name, SimpleIdentifier constructorName, ArgumentList arguments) => new Annotation(TokenFactory.token3(TokenType.AT), name, TokenFactory.token3(TokenType.PERIOD), constructorName, arguments);
- static ArgumentDefinitionTest argumentDefinitionTest(String identifier) => new ArgumentDefinitionTest.full(TokenFactory.token3(TokenType.QUESTION), identifier3(identifier));
+ static ArgumentDefinitionTest argumentDefinitionTest(String identifier) => new ArgumentDefinitionTest(TokenFactory.token3(TokenType.QUESTION), identifier3(identifier));
- static ArgumentList argumentList(List<Expression> arguments) => new ArgumentList.full(TokenFactory.token3(TokenType.OPEN_PAREN), list(arguments), TokenFactory.token3(TokenType.CLOSE_PAREN));
+ static ArgumentList argumentList(List<Expression> arguments) => new ArgumentList(TokenFactory.token3(TokenType.OPEN_PAREN), list(arguments), TokenFactory.token3(TokenType.CLOSE_PAREN));
- static AsExpression asExpression(Expression expression, TypeName type) => new AsExpression.full(expression, TokenFactory.token(Keyword.AS), type);
+ static AsExpression asExpression(Expression expression, TypeName type) => new AsExpression(expression, TokenFactory.token(Keyword.AS), type);
- static AssertStatement assertStatement(Expression condition) => new AssertStatement.full(TokenFactory.token(Keyword.ASSERT), TokenFactory.token3(TokenType.OPEN_PAREN), condition, TokenFactory.token3(TokenType.CLOSE_PAREN), TokenFactory.token3(TokenType.SEMICOLON));
+ static AssertStatement assertStatement(Expression condition) => new AssertStatement(TokenFactory.token(Keyword.ASSERT), TokenFactory.token3(TokenType.OPEN_PAREN), condition, TokenFactory.token3(TokenType.CLOSE_PAREN), TokenFactory.token3(TokenType.SEMICOLON));
- static AssignmentExpression assignmentExpression(Expression leftHandSide, TokenType operator, Expression rightHandSide) => new AssignmentExpression.full(leftHandSide, TokenFactory.token3(operator), rightHandSide);
+ static AssignmentExpression assignmentExpression(Expression leftHandSide, TokenType operator, Expression rightHandSide) => new AssignmentExpression(leftHandSide, TokenFactory.token3(operator), rightHandSide);
- static BinaryExpression binaryExpression(Expression leftOperand, TokenType operator, Expression rightOperand) => new BinaryExpression.full(leftOperand, TokenFactory.token3(operator), rightOperand);
+ static BinaryExpression binaryExpression(Expression leftOperand, TokenType operator, Expression rightOperand) => new BinaryExpression(leftOperand, TokenFactory.token3(operator), rightOperand);
- static Block block(List<Statement> statements) => new Block.full(TokenFactory.token3(TokenType.OPEN_CURLY_BRACKET), list(statements), TokenFactory.token3(TokenType.CLOSE_CURLY_BRACKET));
+ static Block block(List<Statement> statements) => new Block(TokenFactory.token3(TokenType.OPEN_CURLY_BRACKET), list(statements), TokenFactory.token3(TokenType.CLOSE_CURLY_BRACKET));
- static BlockFunctionBody blockFunctionBody(Block block) => new BlockFunctionBody.full(block);
+ static BlockFunctionBody blockFunctionBody(Block block) => new BlockFunctionBody(block);
- static BlockFunctionBody blockFunctionBody2(List<Statement> statements) => new BlockFunctionBody.full(block(statements));
+ static BlockFunctionBody blockFunctionBody2(List<Statement> statements) => new BlockFunctionBody(block(statements));
- static BooleanLiteral booleanLiteral(bool value) => new BooleanLiteral.full(value ? TokenFactory.token(Keyword.TRUE) : TokenFactory.token(Keyword.FALSE), value);
+ static BooleanLiteral booleanLiteral(bool value) => new BooleanLiteral(value ? TokenFactory.token(Keyword.TRUE) : TokenFactory.token(Keyword.FALSE), value);
- static BreakStatement breakStatement() => new BreakStatement.full(TokenFactory.token(Keyword.BREAK), null, TokenFactory.token3(TokenType.SEMICOLON));
+ static BreakStatement breakStatement() => new BreakStatement(TokenFactory.token(Keyword.BREAK), null, TokenFactory.token3(TokenType.SEMICOLON));
- static BreakStatement breakStatement2(String label) => new BreakStatement.full(TokenFactory.token(Keyword.BREAK), identifier3(label), TokenFactory.token3(TokenType.SEMICOLON));
+ static BreakStatement breakStatement2(String label) => new BreakStatement(TokenFactory.token(Keyword.BREAK), identifier3(label), TokenFactory.token3(TokenType.SEMICOLON));
- static IndexExpression cascadedIndexExpression(Expression index) => new IndexExpression.forCascade_full(TokenFactory.token3(TokenType.PERIOD_PERIOD), TokenFactory.token3(TokenType.OPEN_SQUARE_BRACKET), index, TokenFactory.token3(TokenType.CLOSE_SQUARE_BRACKET));
+ static IndexExpression cascadedIndexExpression(Expression index) => new IndexExpression.forCascade(TokenFactory.token3(TokenType.PERIOD_PERIOD), TokenFactory.token3(TokenType.OPEN_SQUARE_BRACKET), index, TokenFactory.token3(TokenType.CLOSE_SQUARE_BRACKET));
- static MethodInvocation cascadedMethodInvocation(String methodName, List<Expression> arguments) => new MethodInvocation.full(null, TokenFactory.token3(TokenType.PERIOD_PERIOD), identifier3(methodName), argumentList(arguments));
+ static MethodInvocation cascadedMethodInvocation(String methodName, List<Expression> arguments) => new MethodInvocation(null, TokenFactory.token3(TokenType.PERIOD_PERIOD), identifier3(methodName), argumentList(arguments));
- static PropertyAccess cascadedPropertyAccess(String propertyName) => new PropertyAccess.full(null, TokenFactory.token3(TokenType.PERIOD_PERIOD), identifier3(propertyName));
+ static PropertyAccess cascadedPropertyAccess(String propertyName) => new PropertyAccess(null, TokenFactory.token3(TokenType.PERIOD_PERIOD), identifier3(propertyName));
- static CascadeExpression cascadeExpression(Expression target, List<Expression> cascadeSections) => new CascadeExpression.full(target, list(cascadeSections));
+ static CascadeExpression cascadeExpression(Expression target, List<Expression> cascadeSections) => new CascadeExpression(target, list(cascadeSections));
static CatchClause catchClause(String exceptionParameter, List<Statement> statements) => catchClause5(null, exceptionParameter, null, statements);
@@ -302,11 +326,11 @@
static CatchClause catchClause4(TypeName exceptionType, String exceptionParameter, List<Statement> statements) => catchClause5(exceptionType, exceptionParameter, null, statements);
- static CatchClause catchClause5(TypeName exceptionType, String exceptionParameter, String stackTraceParameter, List<Statement> statements) => new CatchClause.full(exceptionType == null ? null : TokenFactory.token4(TokenType.IDENTIFIER, "on"), exceptionType, exceptionParameter == null ? null : TokenFactory.token(Keyword.CATCH), exceptionParameter == null ? null : TokenFactory.token3(TokenType.OPEN_PAREN), identifier3(exceptionParameter), stackTraceParameter == null ? null : TokenFactory.token3(TokenType.COMMA), stackTraceParameter == null ? null : identifier3(stackTraceParameter), exceptionParameter == null ? null : TokenFactory.token3(TokenType.CLOSE_PAREN), block(statements));
+ static CatchClause catchClause5(TypeName exceptionType, String exceptionParameter, String stackTraceParameter, List<Statement> statements) => new CatchClause(exceptionType == null ? null : TokenFactory.token4(TokenType.IDENTIFIER, "on"), exceptionType, exceptionParameter == null ? null : TokenFactory.token(Keyword.CATCH), exceptionParameter == null ? null : TokenFactory.token3(TokenType.OPEN_PAREN), identifier3(exceptionParameter), stackTraceParameter == null ? null : TokenFactory.token3(TokenType.COMMA), stackTraceParameter == null ? null : identifier3(stackTraceParameter), exceptionParameter == null ? null : TokenFactory.token3(TokenType.CLOSE_PAREN), block(statements));
- static ClassDeclaration classDeclaration(Keyword abstractKeyword, String name, TypeParameterList typeParameters, ExtendsClause extendsClause, WithClause withClause, ImplementsClause implementsClause, List<ClassMember> members) => new ClassDeclaration.full(null, null, abstractKeyword == null ? null : TokenFactory.token(abstractKeyword), TokenFactory.token(Keyword.CLASS), identifier3(name), typeParameters, extendsClause, withClause, implementsClause, TokenFactory.token3(TokenType.OPEN_CURLY_BRACKET), list(members), TokenFactory.token3(TokenType.CLOSE_CURLY_BRACKET));
+ static ClassDeclaration classDeclaration(Keyword abstractKeyword, String name, TypeParameterList typeParameters, ExtendsClause extendsClause, WithClause withClause, ImplementsClause implementsClause, List<ClassMember> members) => new ClassDeclaration(null, null, abstractKeyword == null ? null : TokenFactory.token(abstractKeyword), TokenFactory.token(Keyword.CLASS), identifier3(name), typeParameters, extendsClause, withClause, implementsClause, TokenFactory.token3(TokenType.OPEN_CURLY_BRACKET), list(members), TokenFactory.token3(TokenType.CLOSE_CURLY_BRACKET));
- static ClassTypeAlias classTypeAlias(String name, TypeParameterList typeParameters, Keyword abstractKeyword, TypeName superclass, WithClause withClause, ImplementsClause implementsClause) => new ClassTypeAlias.full(null, null, TokenFactory.token(Keyword.CLASS), identifier3(name), typeParameters, TokenFactory.token3(TokenType.EQ), abstractKeyword == null ? null : TokenFactory.token(abstractKeyword), superclass, withClause, implementsClause, TokenFactory.token3(TokenType.SEMICOLON));
+ static ClassTypeAlias classTypeAlias(String name, TypeParameterList typeParameters, Keyword abstractKeyword, TypeName superclass, WithClause withClause, ImplementsClause implementsClause) => new ClassTypeAlias(null, null, TokenFactory.token(Keyword.CLASS), identifier3(name), typeParameters, TokenFactory.token3(TokenType.EQ), abstractKeyword == null ? null : TokenFactory.token(abstractKeyword), superclass, withClause, implementsClause, TokenFactory.token3(TokenType.SEMICOLON));
static CompilationUnit compilationUnit() => compilationUnit8(null, null, null);
@@ -322,142 +346,142 @@
static CompilationUnit compilationUnit7(String scriptTag, List<Directive> directives) => compilationUnit8(scriptTag, list(directives), null);
- static CompilationUnit compilationUnit8(String scriptTag, List<Directive> directives, List<CompilationUnitMember> declarations) => new CompilationUnit.full(TokenFactory.token3(TokenType.EOF), scriptTag == null ? null : ASTFactory.scriptTag(scriptTag), directives == null ? new List<Directive>() : directives, declarations == null ? new List<CompilationUnitMember>() : declarations, TokenFactory.token3(TokenType.EOF));
+ static CompilationUnit compilationUnit8(String scriptTag, List<Directive> directives, List<CompilationUnitMember> declarations) => new CompilationUnit(TokenFactory.token3(TokenType.EOF), scriptTag == null ? null : ASTFactory.scriptTag(scriptTag), directives == null ? new List<Directive>() : directives, declarations == null ? new List<CompilationUnitMember>() : declarations, TokenFactory.token3(TokenType.EOF));
- static ConditionalExpression conditionalExpression(Expression condition, Expression thenExpression, Expression elseExpression) => new ConditionalExpression.full(condition, TokenFactory.token3(TokenType.QUESTION), thenExpression, TokenFactory.token3(TokenType.COLON), elseExpression);
+ static ConditionalExpression conditionalExpression(Expression condition, Expression thenExpression, Expression elseExpression) => new ConditionalExpression(condition, TokenFactory.token3(TokenType.QUESTION), thenExpression, TokenFactory.token3(TokenType.COLON), elseExpression);
- static ConstructorDeclaration constructorDeclaration(Identifier returnType, String name, FormalParameterList parameters, List<ConstructorInitializer> initializers) => new ConstructorDeclaration.full(null, null, TokenFactory.token(Keyword.EXTERNAL), null, null, returnType, name == null ? null : TokenFactory.token3(TokenType.PERIOD), name == null ? null : identifier3(name), parameters, initializers == null || initializers.isEmpty ? null : TokenFactory.token3(TokenType.PERIOD), initializers == null ? new List<ConstructorInitializer>() : initializers, null, emptyFunctionBody());
+ static ConstructorDeclaration constructorDeclaration(Identifier returnType, String name, FormalParameterList parameters, List<ConstructorInitializer> initializers) => new ConstructorDeclaration(null, null, TokenFactory.token(Keyword.EXTERNAL), null, null, returnType, name == null ? null : TokenFactory.token3(TokenType.PERIOD), name == null ? null : identifier3(name), parameters, initializers == null || initializers.isEmpty ? null : TokenFactory.token3(TokenType.PERIOD), initializers == null ? new List<ConstructorInitializer>() : initializers, null, emptyFunctionBody());
- static ConstructorDeclaration constructorDeclaration2(Keyword constKeyword, Keyword factoryKeyword, Identifier returnType, String name, FormalParameterList parameters, List<ConstructorInitializer> initializers, FunctionBody body) => new ConstructorDeclaration.full(null, null, null, constKeyword == null ? null : TokenFactory.token(constKeyword), factoryKeyword == null ? null : TokenFactory.token(factoryKeyword), returnType, name == null ? null : TokenFactory.token3(TokenType.PERIOD), name == null ? null : identifier3(name), parameters, initializers == null || initializers.isEmpty ? null : TokenFactory.token3(TokenType.PERIOD), initializers == null ? new List<ConstructorInitializer>() : initializers, null, body);
+ static ConstructorDeclaration constructorDeclaration2(Keyword constKeyword, Keyword factoryKeyword, Identifier returnType, String name, FormalParameterList parameters, List<ConstructorInitializer> initializers, FunctionBody body) => new ConstructorDeclaration(null, null, null, constKeyword == null ? null : TokenFactory.token(constKeyword), factoryKeyword == null ? null : TokenFactory.token(factoryKeyword), returnType, name == null ? null : TokenFactory.token3(TokenType.PERIOD), name == null ? null : identifier3(name), parameters, initializers == null || initializers.isEmpty ? null : TokenFactory.token3(TokenType.PERIOD), initializers == null ? new List<ConstructorInitializer>() : initializers, null, body);
- static ConstructorFieldInitializer constructorFieldInitializer(bool prefixedWithThis, String fieldName, Expression expression) => new ConstructorFieldInitializer.full(prefixedWithThis ? TokenFactory.token(Keyword.THIS) : null, prefixedWithThis ? TokenFactory.token3(TokenType.PERIOD) : null, identifier3(fieldName), TokenFactory.token3(TokenType.EQ), expression);
+ static ConstructorFieldInitializer constructorFieldInitializer(bool prefixedWithThis, String fieldName, Expression expression) => new ConstructorFieldInitializer(prefixedWithThis ? TokenFactory.token(Keyword.THIS) : null, prefixedWithThis ? TokenFactory.token3(TokenType.PERIOD) : null, identifier3(fieldName), TokenFactory.token3(TokenType.EQ), expression);
- static ConstructorName constructorName(TypeName type, String name) => new ConstructorName.full(type, name == null ? null : TokenFactory.token3(TokenType.PERIOD), name == null ? null : identifier3(name));
+ static ConstructorName constructorName(TypeName type, String name) => new ConstructorName(type, name == null ? null : TokenFactory.token3(TokenType.PERIOD), name == null ? null : identifier3(name));
- static ContinueStatement continueStatement() => new ContinueStatement.full(TokenFactory.token(Keyword.CONTINUE), null, TokenFactory.token3(TokenType.SEMICOLON));
+ static ContinueStatement continueStatement() => new ContinueStatement(TokenFactory.token(Keyword.CONTINUE), null, TokenFactory.token3(TokenType.SEMICOLON));
- static ContinueStatement continueStatement2(String label) => new ContinueStatement.full(TokenFactory.token(Keyword.CONTINUE), identifier3(label), TokenFactory.token3(TokenType.SEMICOLON));
+ static ContinueStatement continueStatement2(String label) => new ContinueStatement(TokenFactory.token(Keyword.CONTINUE), identifier3(label), TokenFactory.token3(TokenType.SEMICOLON));
static DeclaredIdentifier declaredIdentifier(Keyword keyword, String identifier) => declaredIdentifier2(keyword, null, identifier);
- static DeclaredIdentifier declaredIdentifier2(Keyword keyword, TypeName type, String identifier) => new DeclaredIdentifier.full(null, null, keyword == null ? null : TokenFactory.token(keyword), type, identifier3(identifier));
+ static DeclaredIdentifier declaredIdentifier2(Keyword keyword, TypeName type, String identifier) => new DeclaredIdentifier(null, null, keyword == null ? null : TokenFactory.token(keyword), type, identifier3(identifier));
static DeclaredIdentifier declaredIdentifier3(String identifier) => declaredIdentifier2(null, null, identifier);
static DeclaredIdentifier declaredIdentifier4(TypeName type, String identifier) => declaredIdentifier2(null, type, identifier);
- static DoStatement doStatement(Statement body, Expression condition) => new DoStatement.full(TokenFactory.token(Keyword.DO), body, TokenFactory.token(Keyword.WHILE), TokenFactory.token3(TokenType.OPEN_PAREN), condition, TokenFactory.token3(TokenType.CLOSE_PAREN), TokenFactory.token3(TokenType.SEMICOLON));
+ static DoStatement doStatement(Statement body, Expression condition) => new DoStatement(TokenFactory.token(Keyword.DO), body, TokenFactory.token(Keyword.WHILE), TokenFactory.token3(TokenType.OPEN_PAREN), condition, TokenFactory.token3(TokenType.CLOSE_PAREN), TokenFactory.token3(TokenType.SEMICOLON));
- static DoubleLiteral doubleLiteral(double value) => new DoubleLiteral.full(TokenFactory.token2(value.toString()), value);
+ static DoubleLiteral doubleLiteral(double value) => new DoubleLiteral(TokenFactory.token2(value.toString()), value);
- static EmptyFunctionBody emptyFunctionBody() => new EmptyFunctionBody.full(TokenFactory.token3(TokenType.SEMICOLON));
+ static EmptyFunctionBody emptyFunctionBody() => new EmptyFunctionBody(TokenFactory.token3(TokenType.SEMICOLON));
- static EmptyStatement emptyStatement() => new EmptyStatement.full(TokenFactory.token3(TokenType.SEMICOLON));
+ static EmptyStatement emptyStatement() => new EmptyStatement(TokenFactory.token3(TokenType.SEMICOLON));
- static ExportDirective exportDirective(List<Annotation> metadata, String uri, List<Combinator> combinators) => new ExportDirective.full(null, metadata, TokenFactory.token(Keyword.EXPORT), string2(uri), list(combinators), TokenFactory.token3(TokenType.SEMICOLON));
+ static ExportDirective exportDirective(List<Annotation> metadata, String uri, List<Combinator> combinators) => new ExportDirective(null, metadata, TokenFactory.token(Keyword.EXPORT), string2(uri), list(combinators), TokenFactory.token3(TokenType.SEMICOLON));
static ExportDirective exportDirective2(String uri, List<Combinator> combinators) => exportDirective(new List<Annotation>(), uri, combinators);
- static ExpressionFunctionBody expressionFunctionBody(Expression expression) => new ExpressionFunctionBody.full(TokenFactory.token3(TokenType.FUNCTION), expression, TokenFactory.token3(TokenType.SEMICOLON));
+ static ExpressionFunctionBody expressionFunctionBody(Expression expression) => new ExpressionFunctionBody(TokenFactory.token3(TokenType.FUNCTION), expression, TokenFactory.token3(TokenType.SEMICOLON));
- static ExpressionStatement expressionStatement(Expression expression) => new ExpressionStatement.full(expression, TokenFactory.token3(TokenType.SEMICOLON));
+ static ExpressionStatement expressionStatement(Expression expression) => new ExpressionStatement(expression, TokenFactory.token3(TokenType.SEMICOLON));
- static ExtendsClause extendsClause(TypeName type) => new ExtendsClause.full(TokenFactory.token(Keyword.EXTENDS), type);
+ static ExtendsClause extendsClause(TypeName type) => new ExtendsClause(TokenFactory.token(Keyword.EXTENDS), type);
- static FieldDeclaration fieldDeclaration(bool isStatic, Keyword keyword, TypeName type, List<VariableDeclaration> variables) => new FieldDeclaration.full(null, null, isStatic ? TokenFactory.token(Keyword.STATIC) : null, variableDeclarationList(keyword, type, variables), TokenFactory.token3(TokenType.SEMICOLON));
+ static FieldDeclaration fieldDeclaration(bool isStatic, Keyword keyword, TypeName type, List<VariableDeclaration> variables) => new FieldDeclaration(null, null, isStatic ? TokenFactory.token(Keyword.STATIC) : null, variableDeclarationList(keyword, type, variables), TokenFactory.token3(TokenType.SEMICOLON));
static FieldDeclaration fieldDeclaration2(bool isStatic, Keyword keyword, List<VariableDeclaration> variables) => fieldDeclaration(isStatic, keyword, null, variables);
- static FieldFormalParameter fieldFormalParameter(Keyword keyword, TypeName type, String identifier) => new FieldFormalParameter.full(null, null, keyword == null ? null : TokenFactory.token(keyword), type, TokenFactory.token(Keyword.THIS), TokenFactory.token3(TokenType.PERIOD), identifier3(identifier), null);
+ static FieldFormalParameter fieldFormalParameter(Keyword keyword, TypeName type, String identifier) => new FieldFormalParameter(null, null, keyword == null ? null : TokenFactory.token(keyword), type, TokenFactory.token(Keyword.THIS), TokenFactory.token3(TokenType.PERIOD), identifier3(identifier), null);
- static FieldFormalParameter fieldFormalParameter2(Keyword keyword, TypeName type, String identifier, FormalParameterList parameterList) => new FieldFormalParameter.full(null, null, keyword == null ? null : TokenFactory.token(keyword), type, TokenFactory.token(Keyword.THIS), TokenFactory.token3(TokenType.PERIOD), identifier3(identifier), parameterList);
+ static FieldFormalParameter fieldFormalParameter2(Keyword keyword, TypeName type, String identifier, FormalParameterList parameterList) => new FieldFormalParameter(null, null, keyword == null ? null : TokenFactory.token(keyword), type, TokenFactory.token(Keyword.THIS), TokenFactory.token3(TokenType.PERIOD), identifier3(identifier), parameterList);
static FieldFormalParameter fieldFormalParameter3(String identifier) => fieldFormalParameter(null, null, identifier);
- static ForEachStatement forEachStatement(DeclaredIdentifier loopVariable, Expression iterator, Statement body) => new ForEachStatement.con1_full(TokenFactory.token(Keyword.FOR), TokenFactory.token3(TokenType.OPEN_PAREN), loopVariable, TokenFactory.token(Keyword.IN), iterator, TokenFactory.token3(TokenType.CLOSE_PAREN), body);
+ static ForEachStatement forEachStatement(DeclaredIdentifier loopVariable, Expression iterator, Statement body) => new ForEachStatement.con1(TokenFactory.token(Keyword.FOR), TokenFactory.token3(TokenType.OPEN_PAREN), loopVariable, TokenFactory.token(Keyword.IN), iterator, TokenFactory.token3(TokenType.CLOSE_PAREN), body);
- static FormalParameterList formalParameterList(List<FormalParameter> parameters) => new FormalParameterList.full(TokenFactory.token3(TokenType.OPEN_PAREN), list(parameters), null, null, TokenFactory.token3(TokenType.CLOSE_PAREN));
+ static FormalParameterList formalParameterList(List<FormalParameter> parameters) => new FormalParameterList(TokenFactory.token3(TokenType.OPEN_PAREN), list(parameters), null, null, TokenFactory.token3(TokenType.CLOSE_PAREN));
- static ForStatement forStatement(Expression initialization, Expression condition, List<Expression> updaters, Statement body) => new ForStatement.full(TokenFactory.token(Keyword.FOR), TokenFactory.token3(TokenType.OPEN_PAREN), null, initialization, TokenFactory.token3(TokenType.SEMICOLON), condition, TokenFactory.token3(TokenType.SEMICOLON), updaters, TokenFactory.token3(TokenType.CLOSE_PAREN), body);
+ static ForStatement forStatement(Expression initialization, Expression condition, List<Expression> updaters, Statement body) => new ForStatement(TokenFactory.token(Keyword.FOR), TokenFactory.token3(TokenType.OPEN_PAREN), null, initialization, TokenFactory.token3(TokenType.SEMICOLON), condition, TokenFactory.token3(TokenType.SEMICOLON), updaters, TokenFactory.token3(TokenType.CLOSE_PAREN), body);
- static ForStatement forStatement2(VariableDeclarationList variableList, Expression condition, List<Expression> updaters, Statement body) => new ForStatement.full(TokenFactory.token(Keyword.FOR), TokenFactory.token3(TokenType.OPEN_PAREN), variableList, null, TokenFactory.token3(TokenType.SEMICOLON), condition, TokenFactory.token3(TokenType.SEMICOLON), updaters, TokenFactory.token3(TokenType.CLOSE_PAREN), body);
+ static ForStatement forStatement2(VariableDeclarationList variableList, Expression condition, List<Expression> updaters, Statement body) => new ForStatement(TokenFactory.token(Keyword.FOR), TokenFactory.token3(TokenType.OPEN_PAREN), variableList, null, TokenFactory.token3(TokenType.SEMICOLON), condition, TokenFactory.token3(TokenType.SEMICOLON), updaters, TokenFactory.token3(TokenType.CLOSE_PAREN), body);
- static FunctionDeclaration functionDeclaration(TypeName type, Keyword keyword, String name, FunctionExpression functionExpression) => new FunctionDeclaration.full(null, null, null, type, keyword == null ? null : TokenFactory.token(keyword), identifier3(name), functionExpression);
+ static FunctionDeclaration functionDeclaration(TypeName type, Keyword keyword, String name, FunctionExpression functionExpression) => new FunctionDeclaration(null, null, null, type, keyword == null ? null : TokenFactory.token(keyword), identifier3(name), functionExpression);
- static FunctionDeclarationStatement functionDeclarationStatement(TypeName type, Keyword keyword, String name, FunctionExpression functionExpression) => new FunctionDeclarationStatement.full(functionDeclaration(type, keyword, name, functionExpression));
+ static FunctionDeclarationStatement functionDeclarationStatement(TypeName type, Keyword keyword, String name, FunctionExpression functionExpression) => new FunctionDeclarationStatement(functionDeclaration(type, keyword, name, functionExpression));
- static FunctionExpression functionExpression() => new FunctionExpression.full(formalParameterList([]), blockFunctionBody2([]));
+ static FunctionExpression functionExpression() => new FunctionExpression(formalParameterList([]), blockFunctionBody2([]));
- static FunctionExpression functionExpression2(FormalParameterList parameters, FunctionBody body) => new FunctionExpression.full(parameters, body);
+ static FunctionExpression functionExpression2(FormalParameterList parameters, FunctionBody body) => new FunctionExpression(parameters, body);
- static FunctionExpressionInvocation functionExpressionInvocation(Expression function, List<Expression> arguments) => new FunctionExpressionInvocation.full(function, argumentList(arguments));
+ static FunctionExpressionInvocation functionExpressionInvocation(Expression function, List<Expression> arguments) => new FunctionExpressionInvocation(function, argumentList(arguments));
- static FunctionTypedFormalParameter functionTypedFormalParameter(TypeName returnType, String identifier, List<FormalParameter> parameters) => new FunctionTypedFormalParameter.full(null, null, returnType, identifier3(identifier), formalParameterList(parameters));
+ static FunctionTypedFormalParameter functionTypedFormalParameter(TypeName returnType, String identifier, List<FormalParameter> parameters) => new FunctionTypedFormalParameter(null, null, returnType, identifier3(identifier), formalParameterList(parameters));
- static HideCombinator hideCombinator(List<SimpleIdentifier> identifiers) => new HideCombinator.full(TokenFactory.token2("hide"), list(identifiers));
+ static HideCombinator hideCombinator(List<SimpleIdentifier> identifiers) => new HideCombinator(TokenFactory.token2("hide"), list(identifiers));
static HideCombinator hideCombinator2(List<String> identifiers) {
List<SimpleIdentifier> identifierList = new List<SimpleIdentifier>();
for (String identifier in identifiers) {
identifierList.add(identifier3(identifier));
}
- return new HideCombinator.full(TokenFactory.token2("hide"), identifierList);
+ return new HideCombinator(TokenFactory.token2("hide"), identifierList);
}
- static PrefixedIdentifier identifier(SimpleIdentifier prefix, SimpleIdentifier identifier) => new PrefixedIdentifier.full(prefix, TokenFactory.token3(TokenType.PERIOD), identifier);
+ static PrefixedIdentifier identifier(SimpleIdentifier prefix, SimpleIdentifier identifier) => new PrefixedIdentifier(prefix, TokenFactory.token3(TokenType.PERIOD), identifier);
- static SimpleIdentifier identifier3(String lexeme) => new SimpleIdentifier.full(TokenFactory.token4(TokenType.IDENTIFIER, lexeme));
+ static SimpleIdentifier identifier3(String lexeme) => new SimpleIdentifier(TokenFactory.token4(TokenType.IDENTIFIER, lexeme));
- static PrefixedIdentifier identifier4(String prefix, SimpleIdentifier identifier) => new PrefixedIdentifier.full(identifier3(prefix), TokenFactory.token3(TokenType.PERIOD), identifier);
+ static PrefixedIdentifier identifier4(String prefix, SimpleIdentifier identifier) => new PrefixedIdentifier(identifier3(prefix), TokenFactory.token3(TokenType.PERIOD), identifier);
- static PrefixedIdentifier identifier5(String prefix, String identifier) => new PrefixedIdentifier.full(identifier3(prefix), TokenFactory.token3(TokenType.PERIOD), identifier3(identifier));
+ static PrefixedIdentifier identifier5(String prefix, String identifier) => new PrefixedIdentifier(identifier3(prefix), TokenFactory.token3(TokenType.PERIOD), identifier3(identifier));
static IfStatement ifStatement(Expression condition, Statement thenStatement) => ifStatement2(condition, thenStatement, null);
- static IfStatement ifStatement2(Expression condition, Statement thenStatement, Statement elseStatement) => new IfStatement.full(TokenFactory.token(Keyword.IF), TokenFactory.token3(TokenType.OPEN_PAREN), condition, TokenFactory.token3(TokenType.CLOSE_PAREN), thenStatement, elseStatement == null ? null : TokenFactory.token(Keyword.ELSE), elseStatement);
+ static IfStatement ifStatement2(Expression condition, Statement thenStatement, Statement elseStatement) => new IfStatement(TokenFactory.token(Keyword.IF), TokenFactory.token3(TokenType.OPEN_PAREN), condition, TokenFactory.token3(TokenType.CLOSE_PAREN), thenStatement, elseStatement == null ? null : TokenFactory.token(Keyword.ELSE), elseStatement);
- static ImplementsClause implementsClause(List<TypeName> types) => new ImplementsClause.full(TokenFactory.token(Keyword.IMPLEMENTS), list(types));
+ static ImplementsClause implementsClause(List<TypeName> types) => new ImplementsClause(TokenFactory.token(Keyword.IMPLEMENTS), list(types));
- static ImportDirective importDirective(List<Annotation> metadata, String uri, String prefix, List<Combinator> combinators) => new ImportDirective.full(null, metadata, TokenFactory.token(Keyword.IMPORT), string2(uri), prefix == null ? null : TokenFactory.token(Keyword.AS), prefix == null ? null : identifier3(prefix), list(combinators), TokenFactory.token3(TokenType.SEMICOLON));
+ static ImportDirective importDirective(List<Annotation> metadata, String uri, String prefix, List<Combinator> combinators) => new ImportDirective(null, metadata, TokenFactory.token(Keyword.IMPORT), string2(uri), prefix == null ? null : TokenFactory.token(Keyword.AS), prefix == null ? null : identifier3(prefix), list(combinators), TokenFactory.token3(TokenType.SEMICOLON));
static ImportDirective importDirective2(String uri, String prefix, List<Combinator> combinators) => importDirective(new List<Annotation>(), uri, prefix, combinators);
- static IndexExpression indexExpression(Expression array, Expression index) => new IndexExpression.forTarget_full(array, TokenFactory.token3(TokenType.OPEN_SQUARE_BRACKET), index, TokenFactory.token3(TokenType.CLOSE_SQUARE_BRACKET));
+ static IndexExpression indexExpression(Expression array, Expression index) => new IndexExpression.forTarget(array, TokenFactory.token3(TokenType.OPEN_SQUARE_BRACKET), index, TokenFactory.token3(TokenType.CLOSE_SQUARE_BRACKET));
- static InstanceCreationExpression instanceCreationExpression(Keyword keyword, ConstructorName name, List<Expression> arguments) => new InstanceCreationExpression.full(keyword == null ? null : TokenFactory.token(keyword), name, argumentList(arguments));
+ static InstanceCreationExpression instanceCreationExpression(Keyword keyword, ConstructorName name, List<Expression> arguments) => new InstanceCreationExpression(keyword == null ? null : TokenFactory.token(keyword), name, argumentList(arguments));
static InstanceCreationExpression instanceCreationExpression2(Keyword keyword, TypeName type, List<Expression> arguments) => instanceCreationExpression3(keyword, type, null, arguments);
- static InstanceCreationExpression instanceCreationExpression3(Keyword keyword, TypeName type, String identifier, List<Expression> arguments) => instanceCreationExpression(keyword, new ConstructorName.full(type, identifier == null ? null : TokenFactory.token3(TokenType.PERIOD), identifier == null ? null : identifier3(identifier)), arguments);
+ static InstanceCreationExpression instanceCreationExpression3(Keyword keyword, TypeName type, String identifier, List<Expression> arguments) => instanceCreationExpression(keyword, new ConstructorName(type, identifier == null ? null : TokenFactory.token3(TokenType.PERIOD), identifier == null ? null : identifier3(identifier)), arguments);
- static IntegerLiteral integer(int value) => new IntegerLiteral.full(TokenFactory.token4(TokenType.INT, value.toString()), value);
+ static IntegerLiteral integer(int value) => new IntegerLiteral(TokenFactory.token4(TokenType.INT, value.toString()), value);
- static InterpolationExpression interpolationExpression(Expression expression) => new InterpolationExpression.full(TokenFactory.token3(TokenType.STRING_INTERPOLATION_EXPRESSION), expression, TokenFactory.token3(TokenType.CLOSE_CURLY_BRACKET));
+ static InterpolationExpression interpolationExpression(Expression expression) => new InterpolationExpression(TokenFactory.token3(TokenType.STRING_INTERPOLATION_EXPRESSION), expression, TokenFactory.token3(TokenType.CLOSE_CURLY_BRACKET));
- static InterpolationExpression interpolationExpression2(String identifier) => new InterpolationExpression.full(TokenFactory.token3(TokenType.STRING_INTERPOLATION_IDENTIFIER), identifier3(identifier), null);
+ static InterpolationExpression interpolationExpression2(String identifier) => new InterpolationExpression(TokenFactory.token3(TokenType.STRING_INTERPOLATION_IDENTIFIER), identifier3(identifier), null);
- static InterpolationString interpolationString(String contents, String value) => new InterpolationString.full(TokenFactory.token2(contents), value);
+ static InterpolationString interpolationString(String contents, String value) => new InterpolationString(TokenFactory.token2(contents), value);
- static IsExpression isExpression(Expression expression, bool negated, TypeName type) => new IsExpression.full(expression, TokenFactory.token(Keyword.IS), negated ? TokenFactory.token3(TokenType.BANG) : null, type);
+ static IsExpression isExpression(Expression expression, bool negated, TypeName type) => new IsExpression(expression, TokenFactory.token(Keyword.IS), negated ? TokenFactory.token3(TokenType.BANG) : null, type);
- static Label label(SimpleIdentifier label) => new Label.full(label, TokenFactory.token3(TokenType.COLON));
+ static Label label(SimpleIdentifier label) => new Label(label, TokenFactory.token3(TokenType.COLON));
static Label label2(String label) => ASTFactory.label(identifier3(label));
- static LabeledStatement labeledStatement(List<Label> labels, Statement statement) => new LabeledStatement.full(labels, statement);
+ static LabeledStatement labeledStatement(List<Label> labels, Statement statement) => new LabeledStatement(labels, statement);
- static LibraryDirective libraryDirective(List<Annotation> metadata, LibraryIdentifier libraryName) => new LibraryDirective.full(null, metadata, TokenFactory.token(Keyword.LIBRARY), libraryName, TokenFactory.token3(TokenType.SEMICOLON));
+ static LibraryDirective libraryDirective(List<Annotation> metadata, LibraryIdentifier libraryName) => new LibraryDirective(null, metadata, TokenFactory.token(Keyword.LIBRARY), libraryName, TokenFactory.token3(TokenType.SEMICOLON));
static LibraryDirective libraryDirective2(String libraryName) => libraryDirective(new List<Annotation>(), libraryIdentifier2([libraryName]));
- static LibraryIdentifier libraryIdentifier(List<SimpleIdentifier> components) => new LibraryIdentifier.full(list(components));
+ static LibraryIdentifier libraryIdentifier(List<SimpleIdentifier> components) => new LibraryIdentifier(list(components));
static LibraryIdentifier libraryIdentifier2(List<String> components) {
List<SimpleIdentifier> componentList = new List<SimpleIdentifier>();
for (String component in components) {
componentList.add(identifier3(component));
}
- return new LibraryIdentifier.full(componentList);
+ return new LibraryIdentifier(componentList);
}
static List list(List<Object> elements) {
@@ -470,131 +494,131 @@
static ListLiteral listLiteral(List<Expression> elements) => listLiteral2(null, null, elements);
- static ListLiteral listLiteral2(Keyword keyword, TypeArgumentList typeArguments, List<Expression> elements) => new ListLiteral.full(keyword == null ? null : TokenFactory.token(keyword), null, TokenFactory.token3(TokenType.OPEN_SQUARE_BRACKET), list(elements), TokenFactory.token3(TokenType.CLOSE_SQUARE_BRACKET));
+ static ListLiteral listLiteral2(Keyword keyword, TypeArgumentList typeArguments, List<Expression> elements) => new ListLiteral(keyword == null ? null : TokenFactory.token(keyword), null, TokenFactory.token3(TokenType.OPEN_SQUARE_BRACKET), list(elements), TokenFactory.token3(TokenType.CLOSE_SQUARE_BRACKET));
- static MapLiteral mapLiteral(Keyword keyword, TypeArgumentList typeArguments, List<MapLiteralEntry> entries) => new MapLiteral.full(keyword == null ? null : TokenFactory.token(keyword), typeArguments, TokenFactory.token3(TokenType.OPEN_CURLY_BRACKET), list(entries), TokenFactory.token3(TokenType.CLOSE_CURLY_BRACKET));
+ static MapLiteral mapLiteral(Keyword keyword, TypeArgumentList typeArguments, List<MapLiteralEntry> entries) => new MapLiteral(keyword == null ? null : TokenFactory.token(keyword), typeArguments, TokenFactory.token3(TokenType.OPEN_CURLY_BRACKET), list(entries), TokenFactory.token3(TokenType.CLOSE_CURLY_BRACKET));
static MapLiteral mapLiteral2(List<MapLiteralEntry> entries) => mapLiteral(null, null, entries);
- static MapLiteralEntry mapLiteralEntry(String key, Expression value) => new MapLiteralEntry.full(string2(key), TokenFactory.token3(TokenType.COLON), value);
+ static MapLiteralEntry mapLiteralEntry(String key, Expression value) => new MapLiteralEntry(string2(key), TokenFactory.token3(TokenType.COLON), value);
- static MethodDeclaration methodDeclaration(Keyword modifier, TypeName returnType, Keyword property, Keyword operator, SimpleIdentifier name, FormalParameterList parameters) => new MethodDeclaration.full(null, null, TokenFactory.token(Keyword.EXTERNAL), modifier == null ? null : TokenFactory.token(modifier), returnType, property == null ? null : TokenFactory.token(property), operator == null ? null : TokenFactory.token(operator), name, parameters, emptyFunctionBody());
+ static MethodDeclaration methodDeclaration(Keyword modifier, TypeName returnType, Keyword property, Keyword operator, SimpleIdentifier name, FormalParameterList parameters) => new MethodDeclaration(null, null, TokenFactory.token(Keyword.EXTERNAL), modifier == null ? null : TokenFactory.token(modifier), returnType, property == null ? null : TokenFactory.token(property), operator == null ? null : TokenFactory.token(operator), name, parameters, emptyFunctionBody());
- static MethodDeclaration methodDeclaration2(Keyword modifier, TypeName returnType, Keyword property, Keyword operator, SimpleIdentifier name, FormalParameterList parameters, FunctionBody body) => new MethodDeclaration.full(null, null, null, modifier == null ? null : TokenFactory.token(modifier), returnType, property == null ? null : TokenFactory.token(property), operator == null ? null : TokenFactory.token(operator), name, parameters, body);
+ static MethodDeclaration methodDeclaration2(Keyword modifier, TypeName returnType, Keyword property, Keyword operator, SimpleIdentifier name, FormalParameterList parameters, FunctionBody body) => new MethodDeclaration(null, null, null, modifier == null ? null : TokenFactory.token(modifier), returnType, property == null ? null : TokenFactory.token(property), operator == null ? null : TokenFactory.token(operator), name, parameters, body);
- static MethodInvocation methodInvocation(Expression target, String methodName, List<Expression> arguments) => new MethodInvocation.full(target, target == null ? null : TokenFactory.token3(TokenType.PERIOD), identifier3(methodName), argumentList(arguments));
+ static MethodInvocation methodInvocation(Expression target, String methodName, List<Expression> arguments) => new MethodInvocation(target, target == null ? null : TokenFactory.token3(TokenType.PERIOD), identifier3(methodName), argumentList(arguments));
static MethodInvocation methodInvocation2(String methodName, List<Expression> arguments) => methodInvocation(null, methodName, arguments);
- static NamedExpression namedExpression(Label label, Expression expression) => new NamedExpression.full(label, expression);
+ static NamedExpression namedExpression(Label label, Expression expression) => new NamedExpression(label, expression);
static NamedExpression namedExpression2(String label, Expression expression) => namedExpression(label2(label), expression);
- static DefaultFormalParameter namedFormalParameter(NormalFormalParameter parameter, Expression expression) => new DefaultFormalParameter.full(parameter, ParameterKind.NAMED, expression == null ? null : TokenFactory.token3(TokenType.COLON), expression);
+ static DefaultFormalParameter namedFormalParameter(NormalFormalParameter parameter, Expression expression) => new DefaultFormalParameter(parameter, ParameterKind.NAMED, expression == null ? null : TokenFactory.token3(TokenType.COLON), expression);
- static NativeClause nativeClause(String nativeCode) => new NativeClause.full(TokenFactory.token2("native"), string2(nativeCode));
+ static NativeClause nativeClause(String nativeCode) => new NativeClause(TokenFactory.token2("native"), string2(nativeCode));
- static NativeFunctionBody nativeFunctionBody(String nativeMethodName) => new NativeFunctionBody.full(TokenFactory.token2("native"), string2(nativeMethodName), TokenFactory.token3(TokenType.SEMICOLON));
+ static NativeFunctionBody nativeFunctionBody(String nativeMethodName) => new NativeFunctionBody(TokenFactory.token2("native"), string2(nativeMethodName), TokenFactory.token3(TokenType.SEMICOLON));
- static NullLiteral nullLiteral() => new NullLiteral.full(TokenFactory.token(Keyword.NULL));
+ static NullLiteral nullLiteral() => new NullLiteral(TokenFactory.token(Keyword.NULL));
- static ParenthesizedExpression parenthesizedExpression(Expression expression) => new ParenthesizedExpression.full(TokenFactory.token3(TokenType.OPEN_PAREN), expression, TokenFactory.token3(TokenType.CLOSE_PAREN));
+ static ParenthesizedExpression parenthesizedExpression(Expression expression) => new ParenthesizedExpression(TokenFactory.token3(TokenType.OPEN_PAREN), expression, TokenFactory.token3(TokenType.CLOSE_PAREN));
- static PartDirective partDirective(List<Annotation> metadata, String url) => new PartDirective.full(null, metadata, TokenFactory.token(Keyword.PART), string2(url), TokenFactory.token3(TokenType.SEMICOLON));
+ static PartDirective partDirective(List<Annotation> metadata, String url) => new PartDirective(null, metadata, TokenFactory.token(Keyword.PART), string2(url), TokenFactory.token3(TokenType.SEMICOLON));
static PartDirective partDirective2(String url) => partDirective(new List<Annotation>(), url);
static PartOfDirective partOfDirective(LibraryIdentifier libraryName) => partOfDirective2(new List<Annotation>(), libraryName);
- static PartOfDirective partOfDirective2(List<Annotation> metadata, LibraryIdentifier libraryName) => new PartOfDirective.full(null, metadata, TokenFactory.token(Keyword.PART), TokenFactory.token2("of"), libraryName, TokenFactory.token3(TokenType.SEMICOLON));
+ static PartOfDirective partOfDirective2(List<Annotation> metadata, LibraryIdentifier libraryName) => new PartOfDirective(null, metadata, TokenFactory.token(Keyword.PART), TokenFactory.token2("of"), libraryName, TokenFactory.token3(TokenType.SEMICOLON));
- static DefaultFormalParameter positionalFormalParameter(NormalFormalParameter parameter, Expression expression) => new DefaultFormalParameter.full(parameter, ParameterKind.POSITIONAL, expression == null ? null : TokenFactory.token3(TokenType.EQ), expression);
+ static DefaultFormalParameter positionalFormalParameter(NormalFormalParameter parameter, Expression expression) => new DefaultFormalParameter(parameter, ParameterKind.POSITIONAL, expression == null ? null : TokenFactory.token3(TokenType.EQ), expression);
- static PostfixExpression postfixExpression(Expression expression, TokenType operator) => new PostfixExpression.full(expression, TokenFactory.token3(operator));
+ static PostfixExpression postfixExpression(Expression expression, TokenType operator) => new PostfixExpression(expression, TokenFactory.token3(operator));
- static PrefixExpression prefixExpression(TokenType operator, Expression expression) => new PrefixExpression.full(TokenFactory.token3(operator), expression);
+ static PrefixExpression prefixExpression(TokenType operator, Expression expression) => new PrefixExpression(TokenFactory.token3(operator), expression);
- static PropertyAccess propertyAccess(Expression target, SimpleIdentifier propertyName) => new PropertyAccess.full(target, TokenFactory.token3(TokenType.PERIOD), propertyName);
+ static PropertyAccess propertyAccess(Expression target, SimpleIdentifier propertyName) => new PropertyAccess(target, TokenFactory.token3(TokenType.PERIOD), propertyName);
- static PropertyAccess propertyAccess2(Expression target, String propertyName) => new PropertyAccess.full(target, TokenFactory.token3(TokenType.PERIOD), identifier3(propertyName));
+ static PropertyAccess propertyAccess2(Expression target, String propertyName) => new PropertyAccess(target, TokenFactory.token3(TokenType.PERIOD), identifier3(propertyName));
static RedirectingConstructorInvocation redirectingConstructorInvocation(List<Expression> arguments) => redirectingConstructorInvocation2(null, arguments);
- static RedirectingConstructorInvocation redirectingConstructorInvocation2(String constructorName, List<Expression> arguments) => new RedirectingConstructorInvocation.full(TokenFactory.token(Keyword.THIS), constructorName == null ? null : TokenFactory.token3(TokenType.PERIOD), constructorName == null ? null : identifier3(constructorName), argumentList(arguments));
+ static RedirectingConstructorInvocation redirectingConstructorInvocation2(String constructorName, List<Expression> arguments) => new RedirectingConstructorInvocation(TokenFactory.token(Keyword.THIS), constructorName == null ? null : TokenFactory.token3(TokenType.PERIOD), constructorName == null ? null : identifier3(constructorName), argumentList(arguments));
- static RethrowExpression rethrowExpression() => new RethrowExpression.full(TokenFactory.token(Keyword.RETHROW));
+ static RethrowExpression rethrowExpression() => new RethrowExpression(TokenFactory.token(Keyword.RETHROW));
static ReturnStatement returnStatement() => returnStatement2(null);
- static ReturnStatement returnStatement2(Expression expression) => new ReturnStatement.full(TokenFactory.token(Keyword.RETURN), expression, TokenFactory.token3(TokenType.SEMICOLON));
+ static ReturnStatement returnStatement2(Expression expression) => new ReturnStatement(TokenFactory.token(Keyword.RETURN), expression, TokenFactory.token3(TokenType.SEMICOLON));
- static ScriptTag scriptTag(String scriptTag) => new ScriptTag.full(TokenFactory.token2(scriptTag));
+ static ScriptTag scriptTag(String scriptTag) => new ScriptTag(TokenFactory.token2(scriptTag));
- static ShowCombinator showCombinator(List<SimpleIdentifier> identifiers) => new ShowCombinator.full(TokenFactory.token2("show"), list(identifiers));
+ static ShowCombinator showCombinator(List<SimpleIdentifier> identifiers) => new ShowCombinator(TokenFactory.token2("show"), list(identifiers));
static ShowCombinator showCombinator2(List<String> identifiers) {
List<SimpleIdentifier> identifierList = new List<SimpleIdentifier>();
for (String identifier in identifiers) {
identifierList.add(identifier3(identifier));
}
- return new ShowCombinator.full(TokenFactory.token2("show"), identifierList);
+ return new ShowCombinator(TokenFactory.token2("show"), identifierList);
}
static SimpleFormalParameter simpleFormalParameter(Keyword keyword, String parameterName) => simpleFormalParameter2(keyword, null, parameterName);
- static SimpleFormalParameter simpleFormalParameter2(Keyword keyword, TypeName type, String parameterName) => new SimpleFormalParameter.full(null, null, keyword == null ? null : TokenFactory.token(keyword), type, identifier3(parameterName));
+ static SimpleFormalParameter simpleFormalParameter2(Keyword keyword, TypeName type, String parameterName) => new SimpleFormalParameter(null, null, keyword == null ? null : TokenFactory.token(keyword), type, identifier3(parameterName));
static SimpleFormalParameter simpleFormalParameter3(String parameterName) => simpleFormalParameter2(null, null, parameterName);
static SimpleFormalParameter simpleFormalParameter4(TypeName type, String parameterName) => simpleFormalParameter2(null, type, parameterName);
- static StringInterpolation string(List<InterpolationElement> elements) => new StringInterpolation.full(list(elements));
+ static StringInterpolation string(List<InterpolationElement> elements) => new StringInterpolation(list(elements));
- static SimpleStringLiteral string2(String content) => new SimpleStringLiteral.full(TokenFactory.token2("'${content}'"), content);
+ static SimpleStringLiteral string2(String content) => new SimpleStringLiteral(TokenFactory.token2("'${content}'"), content);
static SuperConstructorInvocation superConstructorInvocation(List<Expression> arguments) => superConstructorInvocation2(null, arguments);
- static SuperConstructorInvocation superConstructorInvocation2(String name, List<Expression> arguments) => new SuperConstructorInvocation.full(TokenFactory.token(Keyword.SUPER), name == null ? null : TokenFactory.token3(TokenType.PERIOD), name == null ? null : identifier3(name), argumentList(arguments));
+ static SuperConstructorInvocation superConstructorInvocation2(String name, List<Expression> arguments) => new SuperConstructorInvocation(TokenFactory.token(Keyword.SUPER), name == null ? null : TokenFactory.token3(TokenType.PERIOD), name == null ? null : identifier3(name), argumentList(arguments));
- static SuperExpression superExpression() => new SuperExpression.full(TokenFactory.token(Keyword.SUPER));
+ static SuperExpression superExpression() => new SuperExpression(TokenFactory.token(Keyword.SUPER));
static SwitchCase switchCase(Expression expression, List<Statement> statements) => switchCase2(new List<Label>(), expression, statements);
- static SwitchCase switchCase2(List<Label> labels, Expression expression, List<Statement> statements) => new SwitchCase.full(labels, TokenFactory.token(Keyword.CASE), expression, TokenFactory.token3(TokenType.COLON), list(statements));
+ static SwitchCase switchCase2(List<Label> labels, Expression expression, List<Statement> statements) => new SwitchCase(labels, TokenFactory.token(Keyword.CASE), expression, TokenFactory.token3(TokenType.COLON), list(statements));
- static SwitchDefault switchDefault(List<Label> labels, List<Statement> statements) => new SwitchDefault.full(labels, TokenFactory.token(Keyword.DEFAULT), TokenFactory.token3(TokenType.COLON), list(statements));
+ static SwitchDefault switchDefault(List<Label> labels, List<Statement> statements) => new SwitchDefault(labels, TokenFactory.token(Keyword.DEFAULT), TokenFactory.token3(TokenType.COLON), list(statements));
static SwitchDefault switchDefault2(List<Statement> statements) => switchDefault(new List<Label>(), statements);
- static SwitchStatement switchStatement(Expression expression, List<SwitchMember> members) => new SwitchStatement.full(TokenFactory.token(Keyword.SWITCH), TokenFactory.token3(TokenType.OPEN_PAREN), expression, TokenFactory.token3(TokenType.CLOSE_PAREN), TokenFactory.token3(TokenType.OPEN_CURLY_BRACKET), list(members), TokenFactory.token3(TokenType.CLOSE_CURLY_BRACKET));
+ static SwitchStatement switchStatement(Expression expression, List<SwitchMember> members) => new SwitchStatement(TokenFactory.token(Keyword.SWITCH), TokenFactory.token3(TokenType.OPEN_PAREN), expression, TokenFactory.token3(TokenType.CLOSE_PAREN), TokenFactory.token3(TokenType.OPEN_CURLY_BRACKET), list(members), TokenFactory.token3(TokenType.CLOSE_CURLY_BRACKET));
static SymbolLiteral symbolLiteral(List<String> components) {
List<Token> identifierList = new List<Token>();
for (String component in components) {
identifierList.add(TokenFactory.token4(TokenType.IDENTIFIER, component));
}
- return new SymbolLiteral.full(TokenFactory.token3(TokenType.HASH), new List.from(identifierList));
+ return new SymbolLiteral(TokenFactory.token3(TokenType.HASH), new List.from(identifierList));
}
- static ThisExpression thisExpression() => new ThisExpression.full(TokenFactory.token(Keyword.THIS));
+ static ThisExpression thisExpression() => new ThisExpression(TokenFactory.token(Keyword.THIS));
static ThrowExpression throwExpression() => throwExpression2(null);
- static ThrowExpression throwExpression2(Expression expression) => new ThrowExpression.full(TokenFactory.token(Keyword.THROW), expression);
+ static ThrowExpression throwExpression2(Expression expression) => new ThrowExpression(TokenFactory.token(Keyword.THROW), expression);
- static TopLevelVariableDeclaration topLevelVariableDeclaration(Keyword keyword, TypeName type, List<VariableDeclaration> variables) => new TopLevelVariableDeclaration.full(null, null, variableDeclarationList(keyword, type, variables), TokenFactory.token3(TokenType.SEMICOLON));
+ static TopLevelVariableDeclaration topLevelVariableDeclaration(Keyword keyword, TypeName type, List<VariableDeclaration> variables) => new TopLevelVariableDeclaration(null, null, variableDeclarationList(keyword, type, variables), TokenFactory.token3(TokenType.SEMICOLON));
- static TopLevelVariableDeclaration topLevelVariableDeclaration2(Keyword keyword, List<VariableDeclaration> variables) => new TopLevelVariableDeclaration.full(null, null, variableDeclarationList(keyword, null, variables), TokenFactory.token3(TokenType.SEMICOLON));
+ static TopLevelVariableDeclaration topLevelVariableDeclaration2(Keyword keyword, List<VariableDeclaration> variables) => new TopLevelVariableDeclaration(null, null, variableDeclarationList(keyword, null, variables), TokenFactory.token3(TokenType.SEMICOLON));
static TryStatement tryStatement(Block body, Block finallyClause) => tryStatement3(body, new List<CatchClause>(), finallyClause);
static TryStatement tryStatement2(Block body, List<CatchClause> catchClauses) => tryStatement3(body, list(catchClauses), null);
- static TryStatement tryStatement3(Block body, List<CatchClause> catchClauses, Block finallyClause) => new TryStatement.full(TokenFactory.token(Keyword.TRY), body, catchClauses, finallyClause == null ? null : TokenFactory.token(Keyword.FINALLY), finallyClause);
+ static TryStatement tryStatement3(Block body, List<CatchClause> catchClauses, Block finallyClause) => new TryStatement(TokenFactory.token(Keyword.TRY), body, catchClauses, finallyClause == null ? null : TokenFactory.token(Keyword.FINALLY), finallyClause);
- static FunctionTypeAlias typeAlias(TypeName returnType, String name, TypeParameterList typeParameters, FormalParameterList parameters) => new FunctionTypeAlias.full(null, null, TokenFactory.token(Keyword.TYPEDEF), returnType, identifier3(name), typeParameters, parameters, TokenFactory.token3(TokenType.SEMICOLON));
+ static FunctionTypeAlias typeAlias(TypeName returnType, String name, TypeParameterList typeParameters, FormalParameterList parameters) => new FunctionTypeAlias(null, null, TokenFactory.token(Keyword.TYPEDEF), returnType, identifier3(name), typeParameters, parameters, TokenFactory.token3(TokenType.SEMICOLON));
- static TypeArgumentList typeArgumentList(List<TypeName> typeNames) => new TypeArgumentList.full(TokenFactory.token3(TokenType.LT), list(typeNames), TokenFactory.token3(TokenType.GT));
+ static TypeArgumentList typeArgumentList(List<TypeName> typeNames) => new TypeArgumentList(TokenFactory.token3(TokenType.LT), list(typeNames), TokenFactory.token3(TokenType.GT));
/**
* Create a type name whose name has been resolved to the given element and whose type has been
@@ -615,45 +639,45 @@
static TypeName typeName3(Identifier name, List<TypeName> arguments) {
if (arguments.length == 0) {
- return new TypeName.full(name, null);
+ return new TypeName(name, null);
}
- return new TypeName.full(name, typeArgumentList(arguments));
+ return new TypeName(name, typeArgumentList(arguments));
}
static TypeName typeName4(String name, List<TypeName> arguments) {
if (arguments.length == 0) {
- return new TypeName.full(identifier3(name), null);
+ return new TypeName(identifier3(name), null);
}
- return new TypeName.full(identifier3(name), typeArgumentList(arguments));
+ return new TypeName(identifier3(name), typeArgumentList(arguments));
}
- static TypeParameter typeParameter(String name) => new TypeParameter.full(null, null, identifier3(name), null, null);
+ static TypeParameter typeParameter(String name) => new TypeParameter(null, null, identifier3(name), null, null);
- static TypeParameter typeParameter2(String name, TypeName bound) => new TypeParameter.full(null, null, identifier3(name), TokenFactory.token(Keyword.EXTENDS), bound);
+ static TypeParameter typeParameter2(String name, TypeName bound) => new TypeParameter(null, null, identifier3(name), TokenFactory.token(Keyword.EXTENDS), bound);
static TypeParameterList typeParameterList(List<String> typeNames) {
List<TypeParameter> typeParameters = new List<TypeParameter>();
for (String typeName in typeNames) {
typeParameters.add(typeParameter(typeName));
}
- return new TypeParameterList.full(TokenFactory.token3(TokenType.LT), typeParameters, TokenFactory.token3(TokenType.GT));
+ return new TypeParameterList(TokenFactory.token3(TokenType.LT), typeParameters, TokenFactory.token3(TokenType.GT));
}
- static VariableDeclaration variableDeclaration(String name) => new VariableDeclaration.full(null, null, identifier3(name), null, null);
+ static VariableDeclaration variableDeclaration(String name) => new VariableDeclaration(null, null, identifier3(name), null, null);
- static VariableDeclaration variableDeclaration2(String name, Expression initializer) => new VariableDeclaration.full(null, null, identifier3(name), TokenFactory.token3(TokenType.EQ), initializer);
+ static VariableDeclaration variableDeclaration2(String name, Expression initializer) => new VariableDeclaration(null, null, identifier3(name), TokenFactory.token3(TokenType.EQ), initializer);
- static VariableDeclarationList variableDeclarationList(Keyword keyword, TypeName type, List<VariableDeclaration> variables) => new VariableDeclarationList.full(null, null, keyword == null ? null : TokenFactory.token(keyword), type, list(variables));
+ static VariableDeclarationList variableDeclarationList(Keyword keyword, TypeName type, List<VariableDeclaration> variables) => new VariableDeclarationList(null, null, keyword == null ? null : TokenFactory.token(keyword), type, list(variables));
static VariableDeclarationList variableDeclarationList2(Keyword keyword, List<VariableDeclaration> variables) => variableDeclarationList(keyword, null, variables);
- static VariableDeclarationStatement variableDeclarationStatement(Keyword keyword, TypeName type, List<VariableDeclaration> variables) => new VariableDeclarationStatement.full(variableDeclarationList(keyword, type, variables), TokenFactory.token3(TokenType.SEMICOLON));
+ static VariableDeclarationStatement variableDeclarationStatement(Keyword keyword, TypeName type, List<VariableDeclaration> variables) => new VariableDeclarationStatement(variableDeclarationList(keyword, type, variables), TokenFactory.token3(TokenType.SEMICOLON));
static VariableDeclarationStatement variableDeclarationStatement2(Keyword keyword, List<VariableDeclaration> variables) => variableDeclarationStatement(keyword, null, variables);
- static WhileStatement whileStatement(Expression condition, Statement body) => new WhileStatement.full(TokenFactory.token(Keyword.WHILE), TokenFactory.token3(TokenType.OPEN_PAREN), condition, TokenFactory.token3(TokenType.CLOSE_PAREN), body);
+ static WhileStatement whileStatement(Expression condition, Statement body) => new WhileStatement(TokenFactory.token(Keyword.WHILE), TokenFactory.token3(TokenType.OPEN_PAREN), condition, TokenFactory.token3(TokenType.CLOSE_PAREN), body);
- static WithClause withClause(List<TypeName> types) => new WithClause.full(TokenFactory.token(Keyword.WITH), list(types));
+ static WithClause withClause(List<TypeName> types) => new WithClause(TokenFactory.token(Keyword.WITH), list(types));
}
class SimpleIdentifierTest extends ParserTestCase {
@@ -2063,7 +2087,7 @@
}
void test_visitCommentReference() {
- assertSource("", new CommentReference.full(null, ASTFactory.identifier3("a")));
+ assertSource("", new CommentReference(null, ASTFactory.identifier3("a")));
}
void test_visitCompilationUnit_declaration() {
@@ -3953,6 +3977,7 @@
NodeLocatorTest.dartSuite();
ToSourceVisitorTest.dartSuite();
BreadthFirstVisitorTest.dartSuite();
+ ClassDeclarationTest.dartSuite();
IndexExpressionTest.dartSuite();
NodeListTest.dartSuite();
SimpleIdentifierTest.dartSuite();
diff --git a/pkg/analyzer/test/generated/element_test.dart b/pkg/analyzer/test/generated/element_test.dart
index cfa5913..c7d032b 100644
--- a/pkg/analyzer/test/generated/element_test.dart
+++ b/pkg/analyzer/test/generated/element_test.dart
@@ -2813,7 +2813,7 @@
void test_isSubtypeOf_baseCase_classFunction() {
ClassElementImpl functionElement = ElementFactory.classElement2("Function", []);
- InterfaceTypeImpl functionType = new InterfaceTypeImpl_25(functionElement);
+ InterfaceTypeImpl functionType = new InterfaceTypeImpl_26(functionElement);
FunctionType f = ElementFactory.functionElement("f").type;
JUnitTestCase.assertTrue(f.isSubtypeOf(functionType));
}
@@ -3312,8 +3312,8 @@
}
}
-class InterfaceTypeImpl_25 extends InterfaceTypeImpl {
- InterfaceTypeImpl_25(ClassElement arg0) : super.con1(arg0);
+class InterfaceTypeImpl_26 extends InterfaceTypeImpl {
+ InterfaceTypeImpl_26(ClassElement arg0) : super.con1(arg0);
bool get isDartCoreFunction => true;
}
diff --git a/pkg/analyzer/test/generated/parser_test.dart b/pkg/analyzer/test/generated/parser_test.dart
index 38a08d5..81c0306 100644
--- a/pkg/analyzer/test/generated/parser_test.dart
+++ b/pkg/analyzer/test/generated/parser_test.dart
@@ -499,7 +499,7 @@
}
void test_parseAssignableSelector_none() {
- SimpleIdentifier selector = ParserTestCase.parse("parseAssignableSelector", <Object> [new SimpleIdentifier.full(null), true], ";");
+ SimpleIdentifier selector = ParserTestCase.parse("parseAssignableSelector", <Object> [new SimpleIdentifier(null), true], ";");
JUnitTestCase.assertNotNull(selector);
}
@@ -1494,6 +1494,13 @@
EngineTestCase.assertSize(0, unit.declarations);
}
+ void test_parseCompilationUnit_skipFunctionBody_withInterpolation() {
+ ParserTestCase._parseFunctionBodies = false;
+ CompilationUnit unit = ParserTestCase.parse5("parseCompilationUnit", "f() { '\${n}'; }", []);
+ JUnitTestCase.assertNull(unit.scriptTag);
+ EngineTestCase.assertSize(1, unit.declarations);
+ }
+
void test_parseCompilationUnit_topLevelDeclaration() {
CompilationUnit unit = ParserTestCase.parse5("parseCompilationUnit", "class A {}", []);
JUnitTestCase.assertNull(unit.scriptTag);
@@ -2511,9 +2518,27 @@
JUnitTestCase.assertNotNull(functionBody.semicolon);
}
+ void test_parseFunctionBody_skip_block() {
+ ParserTestCase._parseFunctionBodies = false;
+ FunctionBody functionBody = ParserTestCase.parse("parseFunctionBody", <Object> [false, null, false], "{}");
+ EngineTestCase.assertInstanceOf(EmptyFunctionBody, functionBody);
+ }
+
+ void test_parseFunctionBody_skip_blocks() {
+ ParserTestCase._parseFunctionBodies = false;
+ FunctionBody functionBody = ParserTestCase.parse("parseFunctionBody", <Object> [false, null, false], "{ {} }");
+ EngineTestCase.assertInstanceOf(EmptyFunctionBody, functionBody);
+ }
+
+ void test_parseFunctionBody_skip_expression() {
+ ParserTestCase._parseFunctionBodies = false;
+ FunctionBody functionBody = ParserTestCase.parse("parseFunctionBody", <Object> [false, null, false], "=> y;");
+ EngineTestCase.assertInstanceOf(EmptyFunctionBody, functionBody);
+ }
+
void test_parseFunctionDeclaration_function() {
Comment comment = Comment.createDocumentationComment(new List<Token>(0));
- TypeName returnType = new TypeName.full(new SimpleIdentifier.full(null), null);
+ TypeName returnType = new TypeName(new SimpleIdentifier(null), null);
FunctionDeclaration declaration = ParserTestCase.parse("parseFunctionDeclaration", <Object> [commentAndMetadata(comment, []), null, returnType], "f() {}");
JUnitTestCase.assertEquals(comment, declaration.documentationComment);
JUnitTestCase.assertEquals(returnType, declaration.returnType);
@@ -2527,7 +2552,7 @@
void test_parseFunctionDeclaration_getter() {
Comment comment = Comment.createDocumentationComment(new List<Token>(0));
- TypeName returnType = new TypeName.full(new SimpleIdentifier.full(null), null);
+ TypeName returnType = new TypeName(new SimpleIdentifier(null), null);
FunctionDeclaration declaration = ParserTestCase.parse("parseFunctionDeclaration", <Object> [commentAndMetadata(comment, []), null, returnType], "get p => 0;");
JUnitTestCase.assertEquals(comment, declaration.documentationComment);
JUnitTestCase.assertEquals(returnType, declaration.returnType);
@@ -2541,7 +2566,7 @@
void test_parseFunctionDeclaration_setter() {
Comment comment = Comment.createDocumentationComment(new List<Token>(0));
- TypeName returnType = new TypeName.full(new SimpleIdentifier.full(null), null);
+ TypeName returnType = new TypeName(new SimpleIdentifier(null), null);
FunctionDeclaration declaration = ParserTestCase.parse("parseFunctionDeclaration", <Object> [commentAndMetadata(comment, []), null, returnType], "set p(v) {}");
JUnitTestCase.assertEquals(comment, declaration.documentationComment);
JUnitTestCase.assertEquals(returnType, declaration.returnType);
@@ -2573,7 +2598,7 @@
void test_parseGetter_nonStatic() {
Comment comment = Comment.createDocumentationComment(new List<Token>(0));
- TypeName returnType = new TypeName.full(new SimpleIdentifier.full(null), null);
+ TypeName returnType = new TypeName(new SimpleIdentifier(null), null);
MethodDeclaration method = ParserTestCase.parse("parseGetter", <Object> [commentAndMetadata(comment, []), null, null, returnType], "get a;");
JUnitTestCase.assertNotNull(method.body);
JUnitTestCase.assertEquals(comment, method.documentationComment);
@@ -2589,7 +2614,7 @@
void test_parseGetter_static() {
Comment comment = Comment.createDocumentationComment(new List<Token>(0));
Token staticKeyword = TokenFactory.token(Keyword.STATIC);
- TypeName returnType = new TypeName.full(new SimpleIdentifier.full(null), null);
+ TypeName returnType = new TypeName(new SimpleIdentifier(null), null);
MethodDeclaration method = ParserTestCase.parse("parseGetter", <Object> [
commentAndMetadata(comment, []),
null,
@@ -2735,7 +2760,7 @@
void test_parseInitializedIdentifierList_type() {
Comment comment = Comment.createDocumentationComment(new List<Token>(0));
Token staticKeyword = TokenFactory.token(Keyword.STATIC);
- TypeName type = new TypeName.full(new SimpleIdentifier.full(null), null);
+ TypeName type = new TypeName(new SimpleIdentifier(null), null);
FieldDeclaration declaration = ParserTestCase.parse("parseInitializedIdentifierList", <Object> [
commentAndMetadata(comment, []),
staticKeyword,
@@ -3270,7 +3295,7 @@
void test_parseOperator() {
Comment comment = Comment.createDocumentationComment(new List<Token>(0));
- TypeName returnType = new TypeName.full(new SimpleIdentifier.full(null), null);
+ TypeName returnType = new TypeName(new SimpleIdentifier(null), null);
MethodDeclaration method = ParserTestCase.parse("parseOperator", <Object> [commentAndMetadata(comment, []), null, returnType], "operator +(A a);");
JUnitTestCase.assertNotNull(method.body);
JUnitTestCase.assertEquals(comment, method.documentationComment);
@@ -3557,7 +3582,7 @@
void test_parseSetter_nonStatic() {
Comment comment = Comment.createDocumentationComment(new List<Token>(0));
- TypeName returnType = new TypeName.full(new SimpleIdentifier.full(null), null);
+ TypeName returnType = new TypeName(new SimpleIdentifier(null), null);
MethodDeclaration method = ParserTestCase.parse("parseSetter", <Object> [commentAndMetadata(comment, []), null, null, returnType], "set a(var x);");
JUnitTestCase.assertNotNull(method.body);
JUnitTestCase.assertEquals(comment, method.documentationComment);
@@ -3573,7 +3598,7 @@
void test_parseSetter_static() {
Comment comment = Comment.createDocumentationComment(new List<Token>(0));
Token staticKeyword = TokenFactory.token(Keyword.STATIC);
- TypeName returnType = new TypeName.full(new SimpleIdentifier.full(null), null);
+ TypeName returnType = new TypeName(new SimpleIdentifier(null), null);
MethodDeclaration method = ParserTestCase.parse("parseSetter", <Object> [
commentAndMetadata(comment, []),
null,
@@ -4209,7 +4234,7 @@
}
void test_parseVariableDeclarationList2_type() {
- TypeName type = new TypeName.full(new SimpleIdentifier.full(null), null);
+ TypeName type = new TypeName(new SimpleIdentifier(null), null);
VariableDeclarationList declarationList = ParserTestCase.parse("parseVariableDeclarationList", <Object> [emptyCommentAndMetadata(), null, type], "a");
JUnitTestCase.assertNull(declarationList.keyword);
JUnitTestCase.assertEquals(type, declarationList.type);
@@ -4379,7 +4404,7 @@
* @throws Exception if the method could not be invoked or throws an exception
*/
String computeStringValue(String lexeme, bool first, bool last) {
- AnalysisErrorListener listener = new AnalysisErrorListener_26();
+ AnalysisErrorListener listener = new AnalysisErrorListener_27();
Parser parser = new Parser(null, listener);
return invokeParserMethodImpl(parser, "computeStringValue", <Object> [lexeme, first, last], null) as String;
}
@@ -5329,6 +5354,10 @@
final __test = new SimpleParserTest();
runJUnitTest(__test, __test.test_parseCompilationUnit_script);
});
+ _ut.test('test_parseCompilationUnit_skipFunctionBody_withInterpolation', () {
+ final __test = new SimpleParserTest();
+ runJUnitTest(__test, __test.test_parseCompilationUnit_skipFunctionBody_withInterpolation);
+ });
_ut.test('test_parseCompilationUnit_topLevelDeclaration', () {
final __test = new SimpleParserTest();
runJUnitTest(__test, __test.test_parseCompilationUnit_topLevelDeclaration);
@@ -5689,6 +5718,18 @@
final __test = new SimpleParserTest();
runJUnitTest(__test, __test.test_parseFunctionBody_nativeFunctionBody);
});
+ _ut.test('test_parseFunctionBody_skip_block', () {
+ final __test = new SimpleParserTest();
+ runJUnitTest(__test, __test.test_parseFunctionBody_skip_block);
+ });
+ _ut.test('test_parseFunctionBody_skip_blocks', () {
+ final __test = new SimpleParserTest();
+ runJUnitTest(__test, __test.test_parseFunctionBody_skip_blocks);
+ });
+ _ut.test('test_parseFunctionBody_skip_expression', () {
+ final __test = new SimpleParserTest();
+ runJUnitTest(__test, __test.test_parseFunctionBody_skip_expression);
+ });
_ut.test('test_parseFunctionDeclarationStatement', () {
final __test = new SimpleParserTest();
runJUnitTest(__test, __test.test_parseFunctionDeclarationStatement);
@@ -6633,7 +6674,7 @@
}
}
-class AnalysisErrorListener_26 implements AnalysisErrorListener {
+class AnalysisErrorListener_27 implements AnalysisErrorListener {
void onError(AnalysisError event) {
JUnitTestCase.fail("Unexpected compilation error: ${event.message} (${event.offset}, ${event.length})");
}
@@ -7203,6 +7244,11 @@
static List<Object> _EMPTY_ARGUMENTS = new List<Object>(0);
/**
+ * A flag indicating whether parser is to parse function bodies.
+ */
+ static bool _parseFunctionBodies = true;
+
+ /**
* Invoke a parse method in [Parser]. The method is assumed to have the given number and
* type of parameters and will be invoked with the given arguments.
*
@@ -7387,6 +7433,7 @@
Token tokenStream = scanner.tokenize();
listener.setLineInfo(new TestSource(), scanner.lineStarts);
Parser parser = new Parser(null, listener);
+ parser.parseFunctionBodies = _parseFunctionBodies;
Object result = invokeParserMethodImpl(parser, methodName, objects, tokenStream);
if (!listener.hasErrors()) {
JUnitTestCase.assertNotNull(result);
@@ -7432,6 +7479,11 @@
*/
CommentAndMetadata emptyCommentAndMetadata() => new CommentAndMetadata(null, new List<Annotation>());
+ void setUp() {
+ super.setUp();
+ _parseFunctionBodies = true;
+ }
+
static dartSuite() {
_ut.group('ParserTestCase', () {
});
@@ -9091,7 +9143,7 @@
}
class IncrementalParserTest extends EngineTestCase {
- void fail_delete_everything() {
+ void test_delete_everything() {
assertParse("", "f() => a + b;", "", "");
}
@@ -9147,6 +9199,14 @@
assertParse("f() => a;", "", "b", " c;");
}
+ void test_insert_newIdentifier3() {
+ assertParse("/** A simple function. */ f() => a;", "", " b", " c;");
+ }
+
+ void test_insert_newIdentifier4() {
+ assertParse("/** An [A]. */ class A {} class B { m() { return 1", "", " + 2", "; } }");
+ }
+
void test_insert_period() {
assertParse("f() => a + b", "", ".", ";");
}
@@ -9171,6 +9231,10 @@
assertParse("f() => a + b", "", ".x", ";");
}
+ void test_insert_simpleToComplexExression() {
+ assertParse("/** An [A]. */ class A {} class B { m() => 1", "", " + 2", "; }");
+ }
+
void test_insert_whitespace_end() {
assertParse("f() => a + b;", "", " ", "");
}
@@ -9247,6 +9311,10 @@
static dartSuite() {
_ut.group('IncrementalParserTest', () {
+ _ut.test('test_delete_everything', () {
+ final __test = new IncrementalParserTest();
+ runJUnitTest(__test, __test.test_delete_everything);
+ });
_ut.test('test_delete_identifier_beginning', () {
final __test = new IncrementalParserTest();
runJUnitTest(__test, __test.test_delete_identifier_beginning);
@@ -9299,6 +9367,14 @@
final __test = new IncrementalParserTest();
runJUnitTest(__test, __test.test_insert_newIdentifier2);
});
+ _ut.test('test_insert_newIdentifier3', () {
+ final __test = new IncrementalParserTest();
+ runJUnitTest(__test, __test.test_insert_newIdentifier3);
+ });
+ _ut.test('test_insert_newIdentifier4', () {
+ final __test = new IncrementalParserTest();
+ runJUnitTest(__test, __test.test_insert_newIdentifier4);
+ });
_ut.test('test_insert_period', () {
final __test = new IncrementalParserTest();
runJUnitTest(__test, __test.test_insert_period);
@@ -9323,6 +9399,10 @@
final __test = new IncrementalParserTest();
runJUnitTest(__test, __test.test_insert_period_insideExistingIdentifier);
});
+ _ut.test('test_insert_simpleToComplexExression', () {
+ final __test = new IncrementalParserTest();
+ runJUnitTest(__test, __test.test_insert_simpleToComplexExression);
+ });
_ut.test('test_insert_whitespace_end', () {
final __test = new IncrementalParserTest();
runJUnitTest(__test, __test.test_insert_whitespace_end);
@@ -11433,6 +11513,7 @@
'isSwitchMember_0': new MethodTrampoline(0, (Parser target) => target.isSwitchMember()),
'isTypedIdentifier_1': new MethodTrampoline(1, (Parser target, arg0) => target.isTypedIdentifier(arg0)),
'lexicallyFirst_1': new MethodTrampoline(1, (Parser target, arg0) => target.lexicallyFirst(arg0)),
+ 'lockErrorListener_0': new MethodTrampoline(0, (Parser target) => target.lockErrorListener()),
'matches_1': new MethodTrampoline(1, (Parser target, arg0) => target.matches(arg0)),
'matches_2': new MethodTrampoline(2, (Parser target, arg0, arg1) => target.matches3(arg0, arg1)),
'matchesAny_2': new MethodTrampoline(2, (Parser target, arg0, arg1) => target.matchesAny(arg0, arg1)),
@@ -11523,8 +11604,10 @@
'parseWhileStatement_0': new MethodTrampoline(0, (Parser target) => target.parseWhileStatement()),
'peek_0': new MethodTrampoline(0, (Parser target) => target.peek()),
'peek_1': new MethodTrampoline(1, (Parser target, arg0) => target.peek2(arg0)),
- 'reportError_3': new MethodTrampoline(3, (Parser target, arg0, arg1, arg2) => target.reportError(arg0, arg1, arg2)),
- 'reportError_2': new MethodTrampoline(2, (Parser target, arg0, arg1) => target.reportError9(arg0, arg1)),
+ 'reportError_1': new MethodTrampoline(1, (Parser target, arg0) => target.reportError(arg0)),
+ 'reportError_3': new MethodTrampoline(3, (Parser target, arg0, arg1, arg2) => target.reportError9(arg0, arg1, arg2)),
+ 'reportError_2': new MethodTrampoline(2, (Parser target, arg0, arg1) => target.reportError10(arg0, arg1)),
+ 'skipBlock_0': new MethodTrampoline(0, (Parser target) => target.skipBlock()),
'skipFinalConstVarOrType_1': new MethodTrampoline(1, (Parser target, arg0) => target.skipFinalConstVarOrType(arg0)),
'skipFormalParameterList_1': new MethodTrampoline(1, (Parser target, arg0) => target.skipFormalParameterList(arg0)),
'skipPastMatchingToken_1': new MethodTrampoline(1, (Parser target, arg0) => target.skipPastMatchingToken(arg0)),
@@ -11537,6 +11620,7 @@
'skipTypeName_1': new MethodTrampoline(1, (Parser target, arg0) => target.skipTypeName(arg0)),
'skipTypeParameterList_1': new MethodTrampoline(1, (Parser target, arg0) => target.skipTypeParameterList(arg0)),
'translateCharacter_3': new MethodTrampoline(3, (Parser target, arg0, arg1, arg2) => target.translateCharacter(arg0, arg1, arg2)),
+ 'unlockErrorListener_0': new MethodTrampoline(0, (Parser target) => target.unlockErrorListener()),
'validateFormalParameterList_1': new MethodTrampoline(1, (Parser target, arg0) => target.validateFormalParameterList(arg0)),
'validateModifiersForClass_1': new MethodTrampoline(1, (Parser target, arg0) => target.validateModifiersForClass(arg0)),
'validateModifiersForConstructor_1': new MethodTrampoline(1, (Parser target, arg0) => target.validateModifiersForConstructor(arg0)),
diff --git a/pkg/analyzer/test/generated/resolver_test.dart b/pkg/analyzer/test/generated/resolver_test.dart
index 3bc159c..d77f200 100644
--- a/pkg/analyzer/test/generated/resolver_test.dart
+++ b/pkg/analyzer/test/generated/resolver_test.dart
@@ -1247,6 +1247,19 @@
verify([source]);
}
+ void test_constConstructorWithNonConstSuper_explicit() {
+ Source source = addSource(EngineTestCase.createSource([
+ "class A {",
+ " const A();",
+ "}",
+ "class B extends A {",
+ " const B(): super();",
+ "}"]));
+ resolve(source);
+ assertNoErrors(source);
+ verify([source]);
+ }
+
void test_constConstructorWithNonConstSuper_redirectingFactory() {
Source source = addSource(EngineTestCase.createSource([
"class A {",
@@ -1263,6 +1276,19 @@
verify([source]);
}
+ void test_constConstructorWithNonConstSuper_unresolved() {
+ Source source = addSource(EngineTestCase.createSource([
+ "class A {",
+ " A.a();",
+ "}",
+ "class B extends A {",
+ " const B(): super();",
+ "}"]));
+ resolve(source);
+ assertErrors(source, [CompileTimeErrorCode.UNDEFINED_CONSTRUCTOR_IN_INITIALIZER_DEFAULT]);
+ verify([source]);
+ }
+
void test_constConstructorWithNonFinalField_finalInstanceVar() {
Source source = addSource(EngineTestCase.createSource(["class A {", " final int x = 0;", " const A();", "}"]));
resolve(source);
@@ -4244,6 +4270,27 @@
verify([source]);
}
+ void test_uriDoesNotExist_dll() {
+ addSource2("/lib.dll", "");
+ Source source = addSource(EngineTestCase.createSource(["import 'dart-ext:lib';"]));
+ resolve(source);
+ assertNoErrors(source);
+ }
+
+ void test_uriDoesNotExist_dylib() {
+ addSource2("/lib.dylib", "");
+ Source source = addSource(EngineTestCase.createSource(["import 'dart-ext:lib';"]));
+ resolve(source);
+ assertNoErrors(source);
+ }
+
+ void test_uriDoesNotExist_so() {
+ addSource2("/lib.so", "");
+ Source source = addSource(EngineTestCase.createSource(["import 'dart-ext:lib';"]));
+ resolve(source);
+ assertNoErrors(source);
+ }
+
void test_wrongNumberOfParametersForOperator_index() {
Source source = addSource(EngineTestCase.createSource(["class A {", " operator []=(a, b) {}", "}"]));
resolve(source);
@@ -4403,10 +4450,18 @@
final __test = new NonErrorResolverTest();
runJUnitTest(__test, __test.test_conflictingStaticSetterAndInstanceMember_thisClass_method);
});
+ _ut.test('test_constConstructorWithNonConstSuper_explicit', () {
+ final __test = new NonErrorResolverTest();
+ runJUnitTest(__test, __test.test_constConstructorWithNonConstSuper_explicit);
+ });
_ut.test('test_constConstructorWithNonConstSuper_redirectingFactory', () {
final __test = new NonErrorResolverTest();
runJUnitTest(__test, __test.test_constConstructorWithNonConstSuper_redirectingFactory);
});
+ _ut.test('test_constConstructorWithNonConstSuper_unresolved', () {
+ final __test = new NonErrorResolverTest();
+ runJUnitTest(__test, __test.test_constConstructorWithNonConstSuper_unresolved);
+ });
_ut.test('test_constConstructorWithNonFinalField_finalInstanceVar', () {
final __test = new NonErrorResolverTest();
runJUnitTest(__test, __test.test_constConstructorWithNonFinalField_finalInstanceVar);
@@ -5459,6 +5514,18 @@
final __test = new NonErrorResolverTest();
runJUnitTest(__test, __test.test_unqualifiedReferenceToNonLocalStaticMember_fromComment_new);
});
+ _ut.test('test_uriDoesNotExist_dll', () {
+ final __test = new NonErrorResolverTest();
+ runJUnitTest(__test, __test.test_uriDoesNotExist_dll);
+ });
+ _ut.test('test_uriDoesNotExist_dylib', () {
+ final __test = new NonErrorResolverTest();
+ runJUnitTest(__test, __test.test_uriDoesNotExist_dylib);
+ });
+ _ut.test('test_uriDoesNotExist_so', () {
+ final __test = new NonErrorResolverTest();
+ runJUnitTest(__test, __test.test_uriDoesNotExist_so);
+ });
_ut.test('test_wrongNumberOfParametersForOperator1', () {
final __test = new NonErrorResolverTest();
runJUnitTest(__test, __test.test_wrongNumberOfParametersForOperator1);
@@ -8743,12 +8810,12 @@
/**
* The source factory used to create [Source].
*/
- SourceFactory sourceFactory;
+ SourceFactory _sourceFactory;
/**
* The analysis context used to parse the compilation units being resolved.
*/
- AnalysisContextImpl analysisContext;
+ AnalysisContextImpl _analysisContext;
void setUp() {
reset();
@@ -8773,7 +8840,7 @@
Source source = cacheSource(filePath, contents);
ChangeSet changeSet = new ChangeSet();
changeSet.added(source);
- analysisContext.applyChanges(changeSet);
+ _analysisContext.applyChanges(changeSet);
return source;
}
@@ -8790,7 +8857,7 @@
*/
void assertErrors(Source source, List<ErrorCode> expectedErrorCodes) {
GatheringErrorListener errorListener = new GatheringErrorListener();
- for (AnalysisError error in analysisContext.computeErrors(source)) {
+ for (AnalysisError error in _analysisContext.computeErrors(source)) {
errorListener.onError(error);
}
errorListener.assertErrors2(expectedErrorCodes);
@@ -8816,8 +8883,8 @@
* @return the source object representing the cached file
*/
Source cacheSource(String filePath, String contents) {
- Source source = new FileBasedSource.con1(sourceFactory.contentCache, FileUtilities2.createFile(filePath));
- sourceFactory.setContents(source, contents);
+ Source source = new FileBasedSource.con1(_sourceFactory.contentCache, FileUtilities2.createFile(filePath));
+ _sourceFactory.setContents(source, contents);
return source;
}
@@ -8857,24 +8924,25 @@
return library;
}
+ AnalysisContext get analysisContext => _analysisContext;
+
+ SourceFactory get sourceFactory => _sourceFactory;
+
/**
* Return a type provider that can be used to test the results of resolution.
*
* @return a type provider
+ * @throws AnalysisException if dart:core cannot be resolved
*/
- TypeProvider get typeProvider {
- Source coreSource = analysisContext.sourceFactory.forUri(DartSdk.DART_CORE);
- LibraryElement coreElement = analysisContext.getLibraryElement(coreSource);
- return new TypeProviderImpl(coreElement);
- }
+ TypeProvider get typeProvider => _analysisContext.typeProvider;
/**
* In the rare cases we want to group several tests into single "test_" method, so need a way to
* reset test instance to reuse it.
*/
void reset() {
- analysisContext = AnalysisContextFactory.contextWithCore();
- sourceFactory = analysisContext.sourceFactory;
+ _analysisContext = AnalysisContextFactory.contextWithCore();
+ _sourceFactory = _analysisContext.sourceFactory;
}
/**
@@ -8886,7 +8954,7 @@
* @return the element representing the resolved library
* @throws AnalysisException if the analysis could not be performed
*/
- LibraryElement resolve(Source librarySource) => analysisContext.computeLibraryElement(librarySource);
+ LibraryElement resolve(Source librarySource) => _analysisContext.computeLibraryElement(librarySource);
/**
* Return the resolved compilation unit corresponding to the given source in the given library.
@@ -8896,7 +8964,7 @@
* @return the resolved compilation unit
* @throws Exception if the compilation unit could not be resolved
*/
- CompilationUnit resolveCompilationUnit(Source source, LibraryElement library) => analysisContext.resolveCompilationUnit(source, library);
+ CompilationUnit resolveCompilationUnit(Source source, LibraryElement library) => _analysisContext.resolveCompilationUnit(source, library);
/**
* Verify that all of the identifiers in the compilation units associated with the given sources
@@ -8910,7 +8978,7 @@
void verify(List<Source> sources) {
ResolutionVerifier verifier = new ResolutionVerifier();
for (Source source in sources) {
- analysisContext.parseCompilationUnit(source).accept(verifier);
+ _analysisContext.parseCompilationUnit(source).accept(verifier);
}
verifier.assertResolved();
}
@@ -8922,8 +8990,8 @@
* @return the source that was created
*/
FileBasedSource createSource2(String fileName) {
- FileBasedSource source = new FileBasedSource.con1(sourceFactory.contentCache, FileUtilities2.createFile(fileName));
- sourceFactory.setContents(source, "");
+ FileBasedSource source = new FileBasedSource.con1(_sourceFactory.contentCache, FileUtilities2.createFile(fileName));
+ _sourceFactory.setContents(source, "");
return source;
}
@@ -12694,6 +12762,12 @@
assertErrors(source, [CompileTimeErrorCode.URI_DOES_NOT_EXIST]);
}
+ void test_uriDoesNotExist_nativeLibrary() {
+ Source source = addSource(EngineTestCase.createSource(["import 'dart-ext:lib';"]));
+ resolve(source);
+ assertErrors(source, [CompileTimeErrorCode.URI_DOES_NOT_EXIST]);
+ }
+
void test_uriDoesNotExist_part() {
Source source = addSource(EngineTestCase.createSource(["part 'unknown.dart';"]));
resolve(source);
@@ -14104,6 +14178,10 @@
final __test = new CompileTimeErrorCodeTest();
runJUnitTest(__test, __test.test_uriDoesNotExist_import);
});
+ _ut.test('test_uriDoesNotExist_nativeLibrary', () {
+ final __test = new CompileTimeErrorCodeTest();
+ runJUnitTest(__test, __test.test_uriDoesNotExist_nativeLibrary);
+ });
_ut.test('test_uriDoesNotExist_part', () {
final __test = new CompileTimeErrorCodeTest();
runJUnitTest(__test, __test.test_uriDoesNotExist_part);
@@ -18876,7 +18954,15 @@
*
* @return the analysis context that was created
*/
- static AnalysisContextImpl contextWithCore() {
+ static AnalysisContextImpl contextWithCore() => initContextWithCore(new DelegatingAnalysisContextImpl());
+
+ /**
+ * Initialize the given analysis context with a fake core library already resolved.
+ *
+ * @param context the context to be initialized (not `null`)
+ * @return the analysis context that was created
+ */
+ static AnalysisContextImpl initContextWithCore(AnalysisContextImpl context) {
AnalysisContext sdkContext = DirectoryBasedDartSdk.defaultSdk.context;
SourceFactory sourceFactory = sdkContext.sourceFactory;
TestTypeProvider provider = new TestTypeProvider();
@@ -18939,7 +19025,6 @@
elementMap[coreSource] = coreLibrary;
elementMap[htmlSource] = htmlLibrary;
(sdkContext as AnalysisContextImpl).recordLibraryElements(elementMap);
- AnalysisContextImpl context = new DelegatingAnalysisContextImpl();
sourceFactory = new SourceFactory.con2([
new DartUriResolver(sdkContext.sourceFactory.dartSdk),
new FileUriResolver()]);
@@ -21329,7 +21414,7 @@
class EnclosedScopeTest extends ResolverTestCase {
void test_define_duplicate() {
GatheringErrorListener errorListener2 = new GatheringErrorListener();
- Scope rootScope = new Scope_23(errorListener2);
+ Scope rootScope = new Scope_24(errorListener2);
EnclosedScope scope = new EnclosedScope(rootScope);
VariableElement element1 = ElementFactory.localVariableElement(ASTFactory.identifier3("v1"));
VariableElement element2 = ElementFactory.localVariableElement(ASTFactory.identifier3("v1"));
@@ -21340,7 +21425,7 @@
void test_define_normal() {
GatheringErrorListener errorListener3 = new GatheringErrorListener();
- Scope rootScope = new Scope_24(errorListener3);
+ Scope rootScope = new Scope_25(errorListener3);
EnclosedScope outerScope = new EnclosedScope(rootScope);
EnclosedScope innerScope = new EnclosedScope(outerScope);
VariableElement element1 = ElementFactory.localVariableElement(ASTFactory.identifier3("v1"));
@@ -21364,20 +21449,20 @@
}
}
-class Scope_23 extends Scope {
+class Scope_24 extends Scope {
GatheringErrorListener errorListener2;
- Scope_23(this.errorListener2) : super();
+ Scope_24(this.errorListener2) : super();
AnalysisErrorListener get errorListener => errorListener2;
Element lookup3(Identifier identifier, String name, LibraryElement referencingLibrary) => null;
}
-class Scope_24 extends Scope {
+class Scope_25 extends Scope {
GatheringErrorListener errorListener3;
- Scope_24(this.errorListener3) : super();
+ Scope_25(this.errorListener3) : super();
AnalysisErrorListener get errorListener => errorListener3;
@@ -21648,13 +21733,9 @@
/**
* The listener that is to be informed when an error is encountered.
*/
- AnalysisErrorListener _errorListener;
+ final AnalysisErrorListener errorListener;
- ScopeTest_TestScope(AnalysisErrorListener errorListener) {
- this._errorListener = errorListener;
- }
-
- AnalysisErrorListener get errorListener => _errorListener;
+ ScopeTest_TestScope(this.errorListener);
Element lookup3(Identifier identifier, String name, LibraryElement referencingLibrary) => localLookup(name, referencingLibrary);
}
@@ -22112,7 +22193,11 @@
CompilationUnit unit = analysisContext.getResolvedCompilationUnit(source, library);
JUnitTestCase.assertNotNull(unit);
List<bool> found = [false];
- unit.accept(new RecursiveASTVisitor_27(this, found));
+ List<AnalysisException> thrownException = new List<AnalysisException>(1);
+ unit.accept(new RecursiveASTVisitor_28(this, found, thrownException));
+ if (thrownException[0] != null) {
+ throw new AnalysisException.con3(thrownException[0]);
+ }
JUnitTestCase.assertTrue(found[0]);
}
@@ -22505,20 +22590,26 @@
}
}
-class RecursiveASTVisitor_27 extends RecursiveASTVisitor<Object> {
+class RecursiveASTVisitor_28 extends RecursiveASTVisitor<Object> {
final SimpleResolverTest SimpleResolverTest_this;
List<bool> found;
- RecursiveASTVisitor_27(this.SimpleResolverTest_this, this.found) : super();
+ List<AnalysisException> thrownException;
+
+ RecursiveASTVisitor_28(this.SimpleResolverTest_this, this.found, this.thrownException) : super();
Object visitSimpleIdentifier(SimpleIdentifier node) {
if (node.name == "myVar" && node.parent is MethodInvocation) {
- found[0] = true;
- Type2 staticType = node.staticType;
- JUnitTestCase.assertSame(SimpleResolverTest_this.typeProvider.dynamicType, staticType);
- FunctionType propagatedType = node.propagatedType as FunctionType;
- JUnitTestCase.assertEquals(SimpleResolverTest_this.typeProvider.stringType, propagatedType.returnType);
+ try {
+ found[0] = true;
+ Type2 staticType = node.staticType;
+ JUnitTestCase.assertSame(SimpleResolverTest_this.typeProvider.dynamicType, staticType);
+ FunctionType propagatedType = node.propagatedType as FunctionType;
+ JUnitTestCase.assertEquals(SimpleResolverTest_this.typeProvider.stringType, propagatedType.returnType);
+ } on AnalysisException catch (e) {
+ thrownException[0] = e;
+ }
}
return null;
}
diff --git a/pkg/analyzer/test/generated/scanner_test.dart b/pkg/analyzer/test/generated/scanner_test.dart
index 04350a5..50ad8cb 100644
--- a/pkg/analyzer/test/generated/scanner_test.dart
+++ b/pkg/analyzer/test/generated/scanner_test.dart
@@ -361,6 +361,14 @@
assertToken(TokenType.COMMA, ",");
}
+ void test_comment_disabled_multi() {
+ Scanner scanner = new Scanner(null, new CharSequenceReader(new CharSequence("/* comment */ ")), AnalysisErrorListener.NULL_LISTENER);
+ scanner.preserveComments = false;
+ Token token = scanner.tokenize();
+ JUnitTestCase.assertNotNull(token);
+ JUnitTestCase.assertNull(token.precedingComments);
+ }
+
void test_comment_multi() {
assertComment(TokenType.MULTI_LINE_COMMENT, "/* comment */");
}
@@ -1262,6 +1270,10 @@
final __test = new ScannerTest();
runJUnitTest(__test, __test.test_comma);
});
+ _ut.test('test_comment_disabled_multi', () {
+ final __test = new ScannerTest();
+ runJUnitTest(__test, __test.test_comment_disabled_multi);
+ });
_ut.test('test_comment_multi', () {
final __test = new ScannerTest();
runJUnitTest(__test, __test.test_comment_multi);
diff --git a/pkg/analyzer/test/generated/test_support.dart b/pkg/analyzer/test/generated/test_support.dart
index 91f0ba6..8186ce4 100644
--- a/pkg/analyzer/test/generated/test_support.dart
+++ b/pkg/analyzer/test/generated/test_support.dart
@@ -32,7 +32,7 @@
/**
* A list containing the errors that were collected.
*/
- final List<AnalysisError> errors = new List<AnalysisError>();
+ List<AnalysisError> _errors = new List<AnalysisError>();
/**
* A table mapping sources to the line information for the source.
@@ -78,14 +78,14 @@
* expected or if they do not have the same codes and locations
*/
void assertErrors(List<AnalysisError> expectedErrors) {
- if (errors.length != expectedErrors.length) {
+ if (_errors.length != expectedErrors.length) {
fail(expectedErrors);
}
List<AnalysisError> remainingErrors = new List<AnalysisError>();
for (AnalysisError error in expectedErrors) {
remainingErrors.add(error);
}
- for (AnalysisError error in errors) {
+ for (AnalysisError error in _errors) {
if (!foundAndRemoved(remainingErrors, error)) {
fail(expectedErrors);
}
@@ -117,7 +117,7 @@
expectedCounts[code] = count;
}
Map<ErrorCode, List<AnalysisError>> errorsByCode = new Map<ErrorCode, List<AnalysisError>>();
- for (AnalysisError error in errors) {
+ for (AnalysisError error in _errors) {
ErrorCode code = error.errorCode;
List<AnalysisError> list = errorsByCode[code];
if (list == null) {
@@ -198,7 +198,7 @@
}
int actualErrorCount = 0;
int actualWarningCount = 0;
- for (AnalysisError error in errors) {
+ for (AnalysisError error in _errors) {
if (identical(error.errorCode.errorSeverity, ErrorSeverity.ERROR)) {
actualErrorCount++;
} else {
@@ -220,6 +220,13 @@
}
/**
+ * Return the errors that were collected.
+ *
+ * @return the errors that were collected
+ */
+ List<AnalysisError> get errors => _errors;
+
+ /**
* Return the line information associated with the given source, or `null` if no line
* information has been associated with the source.
*
@@ -235,7 +242,7 @@
* @return `true` if an error with the given error code has been gathered
*/
bool hasError(ErrorCode errorCode) {
- for (AnalysisError error in errors) {
+ for (AnalysisError error in _errors) {
if (identical(error.errorCode, errorCode)) {
return true;
}
@@ -248,7 +255,7 @@
*
* @return `true` if at least one error has been gathered
*/
- bool hasErrors() => errors.length > 0;
+ bool hasErrors() => _errors.length > 0;
void onError(AnalysisError error) {
if (_rawSource != null) {
@@ -256,7 +263,7 @@
int right = left + error.length - 1;
_markedSource = "${_rawSource.substring(0, left)}^${_rawSource.substring(left, right)}^${_rawSource.substring(right)}";
}
- errors.add(error);
+ _errors.add(error);
}
/**
@@ -340,9 +347,9 @@
}
writer.newLine();
writer.print("found ");
- writer.print(errors.length);
+ writer.print(_errors.length);
writer.print(" errors:");
- for (AnalysisError error in errors) {
+ for (AnalysisError error in _errors) {
Source source = error.source;
LineInfo lineInfo = _lineInfoMap[source];
writer.newLine();
diff --git a/pkg/args/pubspec.yaml b/pkg/args/pubspec.yaml
index 06e201f..f907300 100644
--- a/pkg/args/pubspec.yaml
+++ b/pkg/args/pubspec.yaml
@@ -8,7 +8,7 @@
a set of options and values using GNU and POSIX style options.
dependencies:
- collection_helpers: ">=0.9.0 <0.10.0"
+ collection_helpers: ">=0.9.1 <0.10.0"
dev_dependencies:
unittest: ">=0.9.0 <0.10.0"
environment:
diff --git a/pkg/barback/lib/src/phase.dart b/pkg/barback/lib/src/phase.dart
index d712354..2136a12 100644
--- a/pkg/barback/lib/src/phase.dart
+++ b/pkg/barback/lib/src/phase.dart
@@ -116,8 +116,10 @@
_onDirtyPool.add(_onDirtyController.stream);
for (var group in transformers.where((op) => op is TransformerGroup)) {
- _groups[group] = new GroupRunner(cascade, group);
- _onDirtyPool.add(_groups[group].onDirty);
+ var runner = new GroupRunner(cascade, group);
+ _groups[group] = runner;
+ _onDirtyPool.add(runner.onDirty);
+ _onLogPool.add(runner.onLog);
}
}
@@ -206,6 +208,7 @@
var runner = new GroupRunner(cascade, added);
_groups[added] = runner;
_onDirtyPool.add(runner.onDirty);
+ _onLogPool.add(runner.onLog);
for (var input in _inputs.values) {
runner.addInput(input.input);
}
diff --git a/pkg/barback/pubspec.yaml b/pkg/barback/pubspec.yaml
index 3032f3d..5a7b410 100644
--- a/pkg/barback/pubspec.yaml
+++ b/pkg/barback/pubspec.yaml
@@ -8,7 +8,7 @@
# When the minor version of this is upgraded, you *must* update that version
# number in pub to stay in sync with this. New patch versions are considered
# backwards compatible, and pub will allow later patch versions automatically.
-version: 0.10.2+1
+version: 0.11.0 # Minor version bumped
author: "Dart Team <misc@dartlang.org>"
homepage: http://www.dartlang.org
@@ -23,9 +23,9 @@
Runs transforms asynchronously and in parallel when possible to maximize
responsiveness.
dependencies:
- path: ">=0.9.0 <0.10.0"
+ path: ">=0.9.0 <2.0.0"
source_maps: ">=0.9.0 <0.10.0"
- stack_trace: ">=0.9.0 <0.10.0"
+ stack_trace: ">=0.9.1 <0.10.0"
dev_dependencies:
scheduled_test: ">=0.9.0 <0.10.0"
unittest: ">=0.9.0 <0.10.0"
diff --git a/pkg/barback/test/logger_test.dart b/pkg/barback/test/logger_test.dart
new file mode 100644
index 0000000..778f42f
--- /dev/null
+++ b/pkg/barback/test/logger_test.dart
@@ -0,0 +1,48 @@
+// Copyright (c) 2013, the Dart project authors. Please see the AUTHORS file
+// for details. All rights reserved. Use of this source code is governed by a
+// BSD-style license that can be found in the LICENSE file.
+
+library barback.test.logger_test;
+
+import 'package:barback/barback.dart';
+import 'package:scheduled_test/scheduled_test.dart';
+
+import 'utils.dart';
+import 'transformer/log.dart';
+
+main() {
+ initConfig();
+
+ test("logs messages from a transformer", () {
+ var transformer = new LogTransformer([
+ "error: This is an error.",
+ "warning: This is a warning.",
+ "info: This is info."
+ ]);
+ initGraph(["app|foo.txt"], {
+ "app": [[transformer]]
+ });
+
+ updateSources(["app|foo.txt"]);
+ buildShouldLog(LogLevel.ERROR, equals("This is an error."));
+ buildShouldLog(LogLevel.WARNING, equals("This is a warning."));
+ buildShouldLog(LogLevel.INFO, equals("This is info."));
+ });
+
+ test("logs messages from a transformer group", () {
+ var transformer = new LogTransformer([
+ "error: This is an error.",
+ "warning: This is a warning.",
+ "info: This is info."
+ ]);
+
+ initGraph(["app|foo.txt"], {"app": [
+ [new TransformerGroup([[transformer]])]
+ ]});
+
+ updateSources(["app|foo.txt"]);
+ buildShouldLog(LogLevel.ERROR, equals("This is an error."));
+ buildShouldLog(LogLevel.WARNING, equals("This is a warning."));
+ buildShouldLog(LogLevel.INFO, equals("This is info."));
+ });
+}
diff --git a/pkg/barback/test/mutliset_test.dart b/pkg/barback/test/multiset_test.dart
similarity index 99%
rename from pkg/barback/test/mutliset_test.dart
rename to pkg/barback/test/multiset_test.dart
index ad5f6c5..ab5e311 100644
--- a/pkg/barback/test/mutliset_test.dart
+++ b/pkg/barback/test/multiset_test.dart
@@ -4,8 +4,6 @@
library barback.test.multiset_test;
-import 'dart:async';
-
import 'package:barback/src/multiset.dart';
import 'package:unittest/unittest.dart';
diff --git a/pkg/barback/test/package_graph/many_parallel_transformers_test.dart b/pkg/barback/test/package_graph/many_parallel_transformers_test.dart
index 389beb1..72f19ac 100644
--- a/pkg/barback/test/package_graph/many_parallel_transformers_test.dart
+++ b/pkg/barback/test/package_graph/many_parallel_transformers_test.dart
@@ -13,6 +13,7 @@
initConfig();
test("handles many parallel transformers", () {
+ currentSchedule.timeout *= 3;
var files = new List.generate(100, (i) => "app|$i.txt");
var rewrite = new RewriteTransformer("txt", "out");
initGraph(files, {"app": [[rewrite]]});
diff --git a/pkg/barback/test/transformer/log.dart b/pkg/barback/test/transformer/log.dart
new file mode 100644
index 0000000..f2b63fc
--- /dev/null
+++ b/pkg/barback/test/transformer/log.dart
@@ -0,0 +1,42 @@
+// Copyright (c) 2013, the Dart project authors. Please see the AUTHORS file
+// for details. All rights reserved. Use of this source code is governed by a
+// BSD-style license that can be found in the LICENSE file.
+
+library barback.test.transformer.log;
+
+import 'dart:async';
+
+import 'package:barback/barback.dart';
+import 'package:barback/src/utils.dart';
+
+import 'mock.dart';
+
+/// A transformer that logs given entries during its apply.
+class LogTransformer extends MockTransformer {
+ /// The list of entries that it should log.
+ ///
+ /// Each entry has the log level followed by the message, like:
+ ///
+ /// error: This is the error message.
+ final List<String> _entries;
+
+ LogTransformer(this._entries);
+
+ Future<bool> doIsPrimary(Asset asset) => new Future.value(true);
+
+ Future doApply(Transform transform) {
+ return newFuture(() {
+ for (var entry in _entries) {
+ var parts = entry.split(":");
+ var logFn;
+ switch (parts[0]) {
+ case "error": logFn = transform.logger.error; break;
+ case "warning": logFn = transform.logger.warning; break;
+ case "info": logFn = transform.logger.info; break;
+ }
+
+ logFn(parts[1].trim());
+ }
+ });
+ }
+}
diff --git a/pkg/barback/test/utils.dart b/pkg/barback/test/utils.dart
index 167a534..2f58753 100644
--- a/pkg/barback/test/utils.dart
+++ b/pkg/barback/test/utils.dart
@@ -35,6 +35,11 @@
/// calls have already been made so later calls know which result to look for.
int _nextBuildResult;
+/// Calls to [buildShouldLog] set expectations on successive log entries from
+/// [_barback]. This keeps track of how many calls have already been made so
+/// later calls know which result to look for.
+int _nextLog;
+
void initConfig() {
if (_configured) return;
_configured = true;
@@ -88,6 +93,7 @@
_provider = new MockProvider(assetMap);
_barback = new Barback(_provider);
_nextBuildResult = 0;
+ _nextLog = 0;
transformers.forEach(_barback.updateTransformers);
@@ -216,12 +222,27 @@
}), completes);
}
+/// Expects that the nexted logged [LogEntry] matches [matcher] which may be
+/// either a [Matcher] or a string to match a literal string.
+void buildShouldLog(LogLevel level, matcher) {
+ expect(_getNextLog("build should log").then((log) {
+ expect(log.level, equals(level));
+ expect(log.message, matcher);
+ }), completes);
+}
+
Future<BuildResult> _getNextBuildResult(String description) {
var result = currentSchedule.wrapFuture(
_barback.results.elementAt(_nextBuildResult++));
return schedule(() => result, description);
}
+Future<LogEntry> _getNextLog(String description) {
+ var result = currentSchedule.wrapFuture(
+ _barback.log.elementAt(_nextLog++));
+ return schedule(() => result, description);
+}
+
/// Schedules an expectation that the graph will deliver an asset matching
/// [name] and [contents].
///
diff --git a/pkg/collection_helpers/pubspec.yaml b/pkg/collection_helpers/pubspec.yaml
index 30e95d4..482ca1c 100644
--- a/pkg/collection_helpers/pubspec.yaml
+++ b/pkg/collection_helpers/pubspec.yaml
@@ -1,9 +1,9 @@
name: collection_helpers
-version: 0.9.2
-author: '"Dart Team <misc@dartlang.org>"'
+version: 0.9.1
+author: "Dart Team <misc@dartlang.org>"
description: Utility functions and classes for working with collections.
homepage: http://www.dartlang.org
dev_dependencies:
unittest: ">=0.9.0 <0.10.0"
environment:
- sdk: ">=0.8.10+6 <2.0.0"
+ sdk: ">=1.0.0 <2.0.0"
diff --git a/pkg/csslib/LICENSE b/pkg/csslib/LICENSE
new file mode 100644
index 0000000..ee99930
--- /dev/null
+++ b/pkg/csslib/LICENSE
@@ -0,0 +1,26 @@
+Copyright 2013, the Dart project authors. All rights reserved.
+Redistribution and use in source and binary forms, with or without
+modification, are permitted provided that the following conditions are
+met:
+
+ * Redistributions of source code must retain the above copyright
+ notice, this list of conditions and the following disclaimer.
+ * Redistributions in binary form must reproduce the above
+ copyright notice, this list of conditions and the following
+ disclaimer in the documentation and/or other materials provided
+ with the distribution.
+ * Neither the name of Google Inc. nor the names of its
+ contributors may be used to endorse or promote products derived
+ from this software without specific prior written permission.
+
+THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
diff --git a/pkg/csslib/pubspec.yaml b/pkg/csslib/pubspec.yaml
index a995672..8ec9421 100644
--- a/pkg/csslib/pubspec.yaml
+++ b/pkg/csslib/pubspec.yaml
@@ -1,15 +1,15 @@
name: csslib
-version: 0.9.0
-author: "Web UI Team <web-ui-dev@dartlang.org>"
+version: 0.9.1
+author: "Polymer.dart Team <web-ui-dev@dartlang.org>"
description: A library for parsing CSS.
homepage: https://www.dartlang.org
dependencies:
args: ">=0.9.0 <0.10.0"
logging: ">=0.9.0 <0.10.0"
- path: ">=0.9.0 <0.10.0"
+ path: ">=0.9.0 <2.0.0"
source_maps: ">=0.9.0 <0.10.0"
dev_dependencies:
browser: ">=0.9.0 <0.10.0"
unittest: ">=0.9.0 <0.10.0"
environment:
- sdk: ">=0.8.10+6 <2.0.0"
+ sdk: ">=1.0.0 <2.0.0"
diff --git a/pkg/custom_element/AUTHORS b/pkg/custom_element/AUTHORS
new file mode 100644
index 0000000..0617765
--- /dev/null
+++ b/pkg/custom_element/AUTHORS
@@ -0,0 +1,9 @@
+# Names should be added to this file with this pattern:
+#
+# For individuals:
+# Name <email address>
+#
+# For organizations:
+# Organization <fnmatch pattern>
+#
+Google Inc. <*@google.com>
diff --git a/pkg/custom_element/LICENSE b/pkg/custom_element/LICENSE
new file mode 100644
index 0000000..92d60b0
--- /dev/null
+++ b/pkg/custom_element/LICENSE
@@ -0,0 +1,27 @@
+// Copyright (c) 2012 The Polymer Authors. All rights reserved.
+//
+// Redistribution and use in source and binary forms, with or without
+// modification, are permitted provided that the following conditions are
+// met:
+//
+// * Redistributions of source code must retain the above copyright
+// notice, this list of conditions and the following disclaimer.
+// * Redistributions in binary form must reproduce the above
+// copyright notice, this list of conditions and the following disclaimer
+// in the documentation and/or other materials provided with the
+// distribution.
+// * Neither the name of Google Inc. nor the names of its
+// contributors may be used to endorse or promote products derived from
+// this software without specific prior written permission.
+//
+// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
diff --git a/pkg/custom_element/PATENTS b/pkg/custom_element/PATENTS
new file mode 100644
index 0000000..e120963
--- /dev/null
+++ b/pkg/custom_element/PATENTS
@@ -0,0 +1,23 @@
+Additional IP Rights Grant (Patents)
+
+"This implementation" means the copyrightable works distributed by
+Google as part of the Polymer project.
+
+Google hereby grants to You a perpetual, worldwide, non-exclusive,
+no-charge, royalty-free, irrevocable (except as stated in this section)
+patent license to make, have made, use, offer to sell, sell, import,
+transfer and otherwise run, modify and propagate the contents of this
+implementation of Polymer, where such license applies only to those
+patent claims, both currently owned or controlled by Google and acquired
+in the future, licensable by Google that are necessarily infringed by
+this implementation of Polymer. This grant does not include claims
+that would be infringed only as a consequence of further modification of
+this implementation. If you or your agent or exclusive licensee
+institute or order or agree to the institution of patent litigation
+against any entity (including a cross-claim or counterclaim in a
+lawsuit) alleging that this implementation of Polymer or any code
+incorporated within this implementation of Polymer constitutes
+direct or contributory patent infringement, or inducement of patent
+infringement, then any patent rights granted to you under this License
+for this implementation of Polymer shall terminate as of the date
+such litigation is filed.
diff --git a/pkg/custom_element/lib/custom-elements.debug.js b/pkg/custom_element/lib/custom-elements.debug.js
index 11ae624..fff3b8a 100644
--- a/pkg/custom_element/lib/custom-elements.debug.js
+++ b/pkg/custom_element/lib/custom-elements.debug.js
@@ -25,23 +25,16 @@
// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
-window.CustomElements = {flags:{}};
-// SideTable is a weak map where possible. If WeakMap is not available the
-// association is stored as an expando property.
-var SideTable;
-// TODO(arv): WeakMap does not allow for Node etc to be keys in Firefox
-if (typeof WeakMap !== 'undefined' && navigator.userAgent.indexOf('Firefox/') < 0) {
- SideTable = WeakMap;
-} else {
+if (typeof WeakMap === 'undefined') {
(function() {
var defineProperty = Object.defineProperty;
var counter = Date.now() % 1e9;
- SideTable = function() {
+ var WeakMap = function() {
this.name = '__st' + (Math.random() * 1e9 >>> 0) + (counter++ + '__');
};
- SideTable.prototype = {
+ WeakMap.prototype = {
set: function(key, value) {
var entry = key[this.name];
if (entry && entry[0] === key)
@@ -57,13 +50,15 @@
delete: function(key) {
this.set(key, undefined);
}
- }
+ };
+
+ window.WeakMap = WeakMap;
})();
}
(function(global) {
- var registrationsTable = new SideTable();
+ var registrationsTable = new WeakMap();
// We use setImmediate or postMessage for our future callback.
var setImmediate = window.msSetImmediate;
@@ -596,344 +591,333 @@
global.JsMutationObserver = JsMutationObserver;
+ // Provide unprefixed MutationObserver with native or JS implementation
+ if (!global.MutationObserver && global.WebKitMutationObserver)
+ global.MutationObserver = global.WebKitMutationObserver;
+
+ if (!global.MutationObserver)
+ global.MutationObserver = JsMutationObserver;
+
+
})(this);
-if (!window.MutationObserver) {
- window.MutationObserver =
- window.WebKitMutationObserver ||
- window.JsMutationObserver;
- if (!MutationObserver) {
- throw new Error("no mutation observer support");
- }
-}
-
-(function(scope){
-
-var logFlags = window.logFlags || {};
-
-// walk the subtree rooted at node, applying 'find(element, data)' function
-// to each element
-// if 'find' returns true for 'element', do not search element's subtree
-function findAll(node, find, data) {
- var e = node.firstElementChild;
- if (!e) {
- e = node.firstChild;
- while (e && e.nodeType !== Node.ELEMENT_NODE) {
- e = e.nextSibling;
- }
- }
- while (e) {
- if (find(e, data) !== true) {
- findAll(e, find, data);
- }
- e = e.nextElementSibling;
- }
- return null;
-}
-
-// walk all shadowRoots on a given node.
-function forRoots(node, cb) {
- var root = node.shadowRoot;
- while(root) {
- forSubtree(root, cb);
- root = root.olderShadowRoot;
- }
-}
-
-// walk the subtree rooted at node, including descent into shadow-roots,
-// applying 'cb' to each element
-function forSubtree(node, cb) {
- //logFlags.dom && node.childNodes && node.childNodes.length && console.group('subTree: ', node);
- findAll(node, function(e) {
- if (cb(e)) {
- return true;
- }
- forRoots(e, cb);
- });
- forRoots(node, cb);
- //logFlags.dom && node.childNodes && node.childNodes.length && console.groupEnd();
-}
-
-// manage lifecycle on added node
-function added(node) {
- if (upgrade(node)) {
- insertedNode(node);
- return true;
- }
- inserted(node);
-}
-
-// manage lifecycle on added node's subtree only
-function addedSubtree(node) {
- forSubtree(node, function(e) {
- if (added(e)) {
- return true;
- }
- });
-}
-
-// manage lifecycle on added node and it's subtree
-function addedNode(node) {
- return added(node) || addedSubtree(node);
-}
-
-// upgrade custom elements at node, if applicable
-function upgrade(node) {
- if (!node.__upgraded__ && node.nodeType === Node.ELEMENT_NODE) {
- var type = node.getAttribute('is') || node.localName;
- var definition = scope.registry[type];
- if (definition) {
- logFlags.dom && console.group('upgrade:', node.localName);
- scope.upgrade(node);
- logFlags.dom && console.groupEnd();
- return true;
- }
- }
-}
-
-function insertedNode(node) {
- inserted(node);
- if (inDocument(node)) {
- forSubtree(node, function(e) {
- inserted(e);
- });
- }
-}
-
-
-// TODO(sorvell): on platforms without MutationObserver, mutations may not be
-// reliable and therefore entered/leftView are not reliable.
-// To make these callbacks less likely to fail, we defer all inserts and removes
-// to give a chance for elements to be inserted into dom.
-// This ensures enteredViewCallback fires for elements that are created and
-// immediately added to dom.
-var hasPolyfillMutations = (!window.MutationObserver ||
- (window.MutationObserver === window.JsMutationObserver));
-scope.hasPolyfillMutations = hasPolyfillMutations;
-
-var isPendingMutations = false;
-var pendingMutations = [];
-function deferMutation(fn) {
- pendingMutations.push(fn);
- if (!isPendingMutations) {
- isPendingMutations = true;
- var async = (window.Platform && window.Platform.endOfMicrotask) ||
- setTimeout;
- async(takeMutations);
- }
-}
-
-function takeMutations() {
- isPendingMutations = false;
- var $p = pendingMutations;
- for (var i=0, l=$p.length, p; (i<l) && (p=$p[i]); i++) {
- p();
- }
- pendingMutations = [];
-}
-
-function inserted(element) {
- if (hasPolyfillMutations) {
- deferMutation(function() {
- _inserted(element);
- });
- } else {
- _inserted(element);
- }
-}
-
-// TODO(sjmiles): if there are descents into trees that can never have inDocument(*) true, fix this
-function _inserted(element) {
- // TODO(sjmiles): it's possible we were inserted and removed in the space
- // of one microtask, in which case we won't be 'inDocument' here
- // But there are other cases where we are testing for inserted without
- // specific knowledge of mutations, and must test 'inDocument' to determine
- // whether to call inserted
- // If we can factor these cases into separate code paths we can have
- // better diagnostics.
- // TODO(sjmiles): when logging, do work on all custom elements so we can
- // track behavior even when callbacks not defined
- //console.log('inserted: ', element.localName);
- if (element.enteredViewCallback || (element.__upgraded__ && logFlags.dom)) {
- logFlags.dom && console.group('inserted:', element.localName);
- if (inDocument(element)) {
- element.__inserted = (element.__inserted || 0) + 1;
- // if we are in a 'removed' state, bluntly adjust to an 'inserted' state
- if (element.__inserted < 1) {
- element.__inserted = 1;
- }
- // if we are 'over inserted', squelch the callback
- if (element.__inserted > 1) {
- logFlags.dom && console.warn('inserted:', element.localName,
- 'insert/remove count:', element.__inserted)
- } else if (element.enteredViewCallback) {
- logFlags.dom && console.log('inserted:', element.localName);
- element.enteredViewCallback();
- }
- }
- logFlags.dom && console.groupEnd();
- }
-}
-
-function removedNode(node) {
- removed(node);
- forSubtree(node, function(e) {
- removed(e);
- });
-}
-
-
-function removed(element) {
- if (hasPolyfillMutations) {
- deferMutation(function() {
- _removed(element);
- });
- } else {
- _removed(element);
- }
-}
-
-function removed(element) {
- // TODO(sjmiles): temporary: do work on all custom elements so we can track
- // behavior even when callbacks not defined
- if (element.leftViewCallback || (element.__upgraded__ && logFlags.dom)) {
- logFlags.dom && console.log('removed:', element.localName);
- if (!inDocument(element)) {
- element.__inserted = (element.__inserted || 0) - 1;
- // if we are in a 'inserted' state, bluntly adjust to an 'removed' state
- if (element.__inserted > 0) {
- element.__inserted = 0;
- }
- // if we are 'over removed', squelch the callback
- if (element.__inserted < 0) {
- logFlags.dom && console.warn('removed:', element.localName,
- 'insert/remove count:', element.__inserted)
- } else if (element.leftViewCallback) {
- element.leftViewCallback();
- }
- }
- }
-}
-
-function inDocument(element) {
- var p = element;
- var doc = window.ShadowDOMPolyfill &&
- window.ShadowDOMPolyfill.wrapIfNeeded(document) || document;
- while (p) {
- if (p == doc) {
- return true;
- }
- p = p.parentNode || p.host;
- }
-}
-
-function watchShadow(node) {
- if (node.shadowRoot && !node.shadowRoot.__watched) {
- logFlags.dom && console.log('watching shadow-root for: ', node.localName);
- // watch all unwatched roots...
- var root = node.shadowRoot;
- while (root) {
- watchRoot(root);
- root = root.olderShadowRoot;
- }
- }
-}
-
-function watchRoot(root) {
- if (!root.__watched) {
- observe(root);
- root.__watched = true;
- }
-}
-
-function filter(inNode) {
- switch (inNode.localName) {
- case 'style':
- case 'script':
- case 'template':
- case undefined:
- return true;
- }
-}
-
-function handler(mutations) {
- //
- if (logFlags.dom) {
- var mx = mutations[0];
- if (mx && mx.type === 'childList' && mx.addedNodes) {
- if (mx.addedNodes) {
- var d = mx.addedNodes[0];
- while (d && d !== document && !d.host) {
- d = d.parentNode;
- }
- var u = d && (d.URL || d._URL || (d.host && d.host.localName)) || '';
- u = u.split('/?').shift().split('/').pop();
- }
- }
- console.group('mutations (%d) [%s]', mutations.length, u || '');
- }
- //
- mutations.forEach(function(mx) {
- //logFlags.dom && console.group('mutation');
- if (mx.type === 'childList') {
- forEach(mx.addedNodes, function(n) {
- //logFlags.dom && console.log(n.localName);
- if (filter(n)) {
- return;
- }
- // nodes added may need lifecycle management
- addedNode(n);
- });
- // removed nodes may need lifecycle management
- forEach(mx.removedNodes, function(n) {
- //logFlags.dom && console.log(n.localName);
- if (filter(n)) {
- return;
- }
- removedNode(n);
- });
- }
- //logFlags.dom && console.groupEnd();
- });
- logFlags.dom && console.groupEnd();
-};
-
-var observer = new MutationObserver(handler);
-
-function takeRecords() {
- // TODO(sjmiles): ask Raf why we have to call handler ourselves
- handler(observer.takeRecords());
- takeMutations();
-}
-
-var forEach = Array.prototype.forEach.call.bind(Array.prototype.forEach);
-
-function observe(inRoot) {
- observer.observe(inRoot, {childList: true, subtree: true});
-}
-
-function observeDocument(document) {
- observe(document);
-}
-
-function upgradeDocument(document) {
- logFlags.dom && console.group('upgradeDocument: ', (document.URL || document._URL || '').split('/').pop());
- addedNode(document);
- logFlags.dom && console.groupEnd();
-}
-
-// exports
-
-scope.watchShadow = watchShadow;
-scope.upgradeAll = addedNode;
-scope.upgradeSubtree = addedSubtree;
-
-scope.observeDocument = observeDocument;
-scope.upgradeDocument = upgradeDocument;
-
-scope.takeRecords = takeRecords;
-
-})(window.CustomElements);
+window.CustomElements = window.CustomElements || {flags:{}};
+(function(scope){
+
+var logFlags = window.logFlags || {};
+
+// walk the subtree rooted at node, applying 'find(element, data)' function
+// to each element
+// if 'find' returns true for 'element', do not search element's subtree
+function findAll(node, find, data) {
+ var e = node.firstElementChild;
+ if (!e) {
+ e = node.firstChild;
+ while (e && e.nodeType !== Node.ELEMENT_NODE) {
+ e = e.nextSibling;
+ }
+ }
+ while (e) {
+ if (find(e, data) !== true) {
+ findAll(e, find, data);
+ }
+ e = e.nextElementSibling;
+ }
+ return null;
+}
+
+// walk all shadowRoots on a given node.
+function forRoots(node, cb) {
+ var root = node.shadowRoot;
+ while(root) {
+ forSubtree(root, cb);
+ root = root.olderShadowRoot;
+ }
+}
+
+// walk the subtree rooted at node, including descent into shadow-roots,
+// applying 'cb' to each element
+function forSubtree(node, cb) {
+ //logFlags.dom && node.childNodes && node.childNodes.length && console.group('subTree: ', node);
+ findAll(node, function(e) {
+ if (cb(e)) {
+ return true;
+ }
+ forRoots(e, cb);
+ });
+ forRoots(node, cb);
+ //logFlags.dom && node.childNodes && node.childNodes.length && console.groupEnd();
+}
+
+// manage lifecycle on added node
+function added(node) {
+ if (upgrade(node)) {
+ insertedNode(node);
+ return true;
+ }
+ inserted(node);
+}
+
+// manage lifecycle on added node's subtree only
+function addedSubtree(node) {
+ forSubtree(node, function(e) {
+ if (added(e)) {
+ return true;
+ }
+ });
+}
+
+// manage lifecycle on added node and it's subtree
+function addedNode(node) {
+ return added(node) || addedSubtree(node);
+}
+
+// upgrade custom elements at node, if applicable
+function upgrade(node) {
+ if (!node.__upgraded__ && node.nodeType === Node.ELEMENT_NODE) {
+ var type = node.getAttribute('is') || node.localName;
+ var definition = scope.registry[type];
+ if (definition) {
+ logFlags.dom && console.group('upgrade:', node.localName);
+ scope.upgrade(node);
+ logFlags.dom && console.groupEnd();
+ return true;
+ }
+ }
+}
+
+function insertedNode(node) {
+ inserted(node);
+ if (inDocument(node)) {
+ forSubtree(node, function(e) {
+ inserted(e);
+ });
+ }
+}
+
+
+// TODO(sorvell): on platforms without MutationObserver, mutations may not be
+// reliable and therefore entered/leftView are not reliable.
+// To make these callbacks less likely to fail, we defer all inserts and removes
+// to give a chance for elements to be inserted into dom.
+// This ensures enteredViewCallback fires for elements that are created and
+// immediately added to dom.
+var hasPolyfillMutations = (!window.MutationObserver ||
+ (window.MutationObserver === window.JsMutationObserver));
+scope.hasPolyfillMutations = hasPolyfillMutations;
+
+var isPendingMutations = false;
+var pendingMutations = [];
+function deferMutation(fn) {
+ pendingMutations.push(fn);
+ if (!isPendingMutations) {
+ isPendingMutations = true;
+ var async = (window.Platform && window.Platform.endOfMicrotask) ||
+ setTimeout;
+ async(takeMutations);
+ }
+}
+
+function takeMutations() {
+ isPendingMutations = false;
+ var $p = pendingMutations;
+ for (var i=0, l=$p.length, p; (i<l) && (p=$p[i]); i++) {
+ p();
+ }
+ pendingMutations = [];
+}
+
+function inserted(element) {
+ if (hasPolyfillMutations) {
+ deferMutation(function() {
+ _inserted(element);
+ });
+ } else {
+ _inserted(element);
+ }
+}
+
+// TODO(sjmiles): if there are descents into trees that can never have inDocument(*) true, fix this
+function _inserted(element) {
+ // TODO(sjmiles): it's possible we were inserted and removed in the space
+ // of one microtask, in which case we won't be 'inDocument' here
+ // But there are other cases where we are testing for inserted without
+ // specific knowledge of mutations, and must test 'inDocument' to determine
+ // whether to call inserted
+ // If we can factor these cases into separate code paths we can have
+ // better diagnostics.
+ // TODO(sjmiles): when logging, do work on all custom elements so we can
+ // track behavior even when callbacks not defined
+ //console.log('inserted: ', element.localName);
+ if (element.enteredViewCallback || (element.__upgraded__ && logFlags.dom)) {
+ logFlags.dom && console.group('inserted:', element.localName);
+ if (inDocument(element)) {
+ element.__inserted = (element.__inserted || 0) + 1;
+ // if we are in a 'removed' state, bluntly adjust to an 'inserted' state
+ if (element.__inserted < 1) {
+ element.__inserted = 1;
+ }
+ // if we are 'over inserted', squelch the callback
+ if (element.__inserted > 1) {
+ logFlags.dom && console.warn('inserted:', element.localName,
+ 'insert/remove count:', element.__inserted)
+ } else if (element.enteredViewCallback) {
+ logFlags.dom && console.log('inserted:', element.localName);
+ element.enteredViewCallback();
+ }
+ }
+ logFlags.dom && console.groupEnd();
+ }
+}
+
+function removedNode(node) {
+ removed(node);
+ forSubtree(node, function(e) {
+ removed(e);
+ });
+}
+
+function removed(element) {
+ if (hasPolyfillMutations) {
+ deferMutation(function() {
+ _removed(element);
+ });
+ } else {
+ _removed(element);
+ }
+}
+
+function _removed(element) {
+ // TODO(sjmiles): temporary: do work on all custom elements so we can track
+ // behavior even when callbacks not defined
+ if (element.leftViewCallback || (element.__upgraded__ && logFlags.dom)) {
+ logFlags.dom && console.log('removed:', element.localName);
+ if (!inDocument(element)) {
+ element.__inserted = (element.__inserted || 0) - 1;
+ // if we are in a 'inserted' state, bluntly adjust to an 'removed' state
+ if (element.__inserted > 0) {
+ element.__inserted = 0;
+ }
+ // if we are 'over removed', squelch the callback
+ if (element.__inserted < 0) {
+ logFlags.dom && console.warn('removed:', element.localName,
+ 'insert/remove count:', element.__inserted)
+ } else if (element.leftViewCallback) {
+ element.leftViewCallback();
+ }
+ }
+ }
+}
+
+function inDocument(element) {
+ var p = element;
+ var doc = window.ShadowDOMPolyfill &&
+ window.ShadowDOMPolyfill.wrapIfNeeded(document) || document;
+ while (p) {
+ if (p == doc) {
+ return true;
+ }
+ p = p.parentNode || p.host;
+ }
+}
+
+function watchShadow(node) {
+ if (node.shadowRoot && !node.shadowRoot.__watched) {
+ logFlags.dom && console.log('watching shadow-root for: ', node.localName);
+ // watch all unwatched roots...
+ var root = node.shadowRoot;
+ while (root) {
+ watchRoot(root);
+ root = root.olderShadowRoot;
+ }
+ }
+}
+
+function watchRoot(root) {
+ if (!root.__watched) {
+ observe(root);
+ root.__watched = true;
+ }
+}
+
+function handler(mutations) {
+ //
+ if (logFlags.dom) {
+ var mx = mutations[0];
+ if (mx && mx.type === 'childList' && mx.addedNodes) {
+ if (mx.addedNodes) {
+ var d = mx.addedNodes[0];
+ while (d && d !== document && !d.host) {
+ d = d.parentNode;
+ }
+ var u = d && (d.URL || d._URL || (d.host && d.host.localName)) || '';
+ u = u.split('/?').shift().split('/').pop();
+ }
+ }
+ console.group('mutations (%d) [%s]', mutations.length, u || '');
+ }
+ //
+ mutations.forEach(function(mx) {
+ //logFlags.dom && console.group('mutation');
+ if (mx.type === 'childList') {
+ forEach(mx.addedNodes, function(n) {
+ //logFlags.dom && console.log(n.localName);
+ if (!n.localName) {
+ return;
+ }
+ // nodes added may need lifecycle management
+ addedNode(n);
+ });
+ // removed nodes may need lifecycle management
+ forEach(mx.removedNodes, function(n) {
+ //logFlags.dom && console.log(n.localName);
+ if (!n.localName) {
+ return;
+ }
+ removedNode(n);
+ });
+ }
+ //logFlags.dom && console.groupEnd();
+ });
+ logFlags.dom && console.groupEnd();
+};
+
+var observer = new MutationObserver(handler);
+
+function takeRecords() {
+ // TODO(sjmiles): ask Raf why we have to call handler ourselves
+ handler(observer.takeRecords());
+ takeMutations();
+}
+
+var forEach = Array.prototype.forEach.call.bind(Array.prototype.forEach);
+
+function observe(inRoot) {
+ observer.observe(inRoot, {childList: true, subtree: true});
+}
+
+function observeDocument(document) {
+ observe(document);
+}
+
+function upgradeDocument(document) {
+ logFlags.dom && console.group('upgradeDocument: ', (document.URL || document._URL || '').split('/').pop());
+ addedNode(document);
+ logFlags.dom && console.groupEnd();
+}
+
+// exports
+
+scope.watchShadow = watchShadow;
+scope.upgradeAll = addedNode;
+scope.upgradeSubtree = addedSubtree;
+
+scope.observeDocument = observeDocument;
+scope.upgradeDocument = upgradeDocument;
+
+scope.takeRecords = takeRecords;
+
+})(window.CustomElements);
/**
* Implements `document.register`
@@ -1031,8 +1015,10 @@
// offer guidance)
throw new Error('document.register: first argument (\'name\') must contain a dash (\'-\'). Argument provided was \'' + String(name) + '\'.');
}
- // record name
- definition.name = name;
+ // elements may only be registered once
+ if (getRegisteredDefinition(name)) {
+ throw new Error('DuplicateDefinitionError: a type with name \'' + String(name) + '\' is already registered');
+ }
// must have a prototype, default to an extension of HTMLElement
// TODO(sjmiles): probably should throw if no prototype, check spec
if (!definition.prototype) {
@@ -1040,6 +1026,8 @@
// offer guidance)
throw new Error('Options missing required prototype property');
}
+ // record name
+ definition.name = name.toLowerCase();
// ensure a lifecycle object so we don't have to null test it
definition.lifecycle = definition.lifecycle || {};
// build a list of ancestral custom elements (for native base detection)
@@ -1055,7 +1043,7 @@
// overrides to implement attributeChanged callback
overrideAttributeApi(definition.prototype);
// 7.1.5: Register the DEFINITION with DOCUMENT
- registerDefinition(name, definition);
+ registerDefinition(definition.name, definition);
// 7.1.7. Run custom element constructor generation algorithm with PROTOTYPE
// 7.1.8. Return the output of the previous step.
definition.ctor = generateConstructor(definition);
@@ -1071,7 +1059,7 @@
}
function ancestry(extnds) {
- var extendee = registry[extnds];
+ var extendee = getRegisteredDefinition(extnds);
if (extendee) {
return ancestry(extendee.extends).concat([extendee]);
}
@@ -1139,6 +1127,8 @@
if (definition.is) {
element.setAttribute('is', definition.is);
}
+ // remove 'unresolved' attr, which is a standin for :unresolved.
+ element.removeAttribute('unresolved');
// make 'element' implement definition.prototype
implement(element, definition);
// flag as upgraded
@@ -1176,7 +1166,7 @@
// HTMLElement.prototype, so we add a test
// the idea is to avoid mixing in native prototypes, so adding
// the second test is WLOG
- while (p && p !== inNative && p !== HTMLUnknownElement.prototype) {
+ while (p !== inNative && p !== HTMLUnknownElement.prototype) {
var keys = Object.getOwnPropertyNames(p);
for (var i=0, k; k=keys[i]; i++) {
if (!used[k]) {
@@ -1202,6 +1192,9 @@
// overrides to implement callbacks
// TODO(sjmiles): should support access via .attributes NamedNodeMap
// TODO(sjmiles): preserves user defined overrides, if any
+ if (prototype.setAttribute._polyfilled) {
+ return;
+ }
var setAttribute = prototype.setAttribute;
prototype.setAttribute = function(name, value) {
changeAttribute.call(this, name, value, setAttribute);
@@ -1210,14 +1203,18 @@
prototype.removeAttribute = function(name) {
changeAttribute.call(this, name, null, removeAttribute);
}
+ prototype.setAttribute._polyfilled = true;
}
+ // https://dvcs.w3.org/hg/webcomponents/raw-file/tip/spec/custom/
+ // index.html#dfn-attribute-changed-callback
function changeAttribute(name, value, operation) {
var oldValue = this.getAttribute(name);
operation.apply(this, arguments);
+ var newValue = this.getAttribute(name);
if (this.attributeChangedCallback
- && (this.getAttribute(name) !== oldValue)) {
- this.attributeChangedCallback(name, oldValue, value);
+ && (newValue !== oldValue)) {
+ this.attributeChangedCallback(name, oldValue, newValue);
}
}
@@ -1225,9 +1222,15 @@
var registry = {};
+ function getRegisteredDefinition(name) {
+ if (name) {
+ return registry[name.toLowerCase()];
+ }
+ }
+
function registerDefinition(name, definition) {
if (registry[name]) {
- throw new Error('Cannot register a tag more than once');
+ throw new Error('a type with that name is already registered.');
}
registry[name] = definition;
}
@@ -1239,7 +1242,9 @@
}
function createElement(tag, typeExtension) {
- var definition = registry[typeExtension || tag];
+ // TODO(sjmiles): ignore 'tag' when using 'typeExtension', we could
+ // error check it, or perhaps there should only ever be one argument
+ var definition = getRegisteredDefinition(typeExtension || tag);
if (definition) {
if (tag == definition.tag && typeExtension == definition.is) {
return new definition.ctor();
@@ -1377,7 +1382,7 @@
CustomElements.parser = parser;
})();
-(function(){
+(function(scope){
// bootstrap parsing
function bootstrap() {
@@ -1409,44 +1414,50 @@
// CustomEvent shim for IE
if (typeof window.CustomEvent !== 'function') {
window.CustomEvent = function(inType) {
- var e = document.createEvent('HTMLEvents');
- e.initEvent(inType, true, true);
- return e;
+ var e = document.createEvent('HTMLEvents');
+ e.initEvent(inType, true, true);
+ return e;
};
}
-if (document.readyState === 'complete') {
+// When loading at readyState complete time (or via flag), boot custom elements
+// immediately.
+// If relevant, HTMLImports must already be loaded.
+if (document.readyState === 'complete' || scope.flags.eager) {
bootstrap();
+// When loading at readyState interactive time, bootstrap only if HTMLImports
+// are not pending. Also avoid IE as the semantics of this state are unreliable.
+} else if (document.readyState === 'interactive' && !window.attachEvent &&
+ (!window.HTMLImports || window.HTMLImports.ready)) {
+ bootstrap();
+// When loading at other readyStates, wait for the appropriate DOM event to
+// bootstrap.
} else {
var loadEvent = window.HTMLImports ? 'HTMLImportsLoaded' :
document.readyState == 'loading' ? 'DOMContentLoaded' : 'load';
window.addEventListener(loadEvent, bootstrap);
}
-})();
+})(window.CustomElements);
(function() {
// Patch to allow custom element and shadow dom to work together, from:
-// https://github.com/Polymer/platform/blob/master/src/patches-shadowdom-polyfill.js
+// https://github.com/Polymer/platform-dev/blob/60ece8c323c5d9325cbfdfd6e8cd180d4f38a3bc/src/patches-shadowdom-polyfill.js
// include .host reference
if (HTMLElement.prototype.createShadowRoot) {
var originalCreateShadowRoot = HTMLElement.prototype.createShadowRoot;
HTMLElement.prototype.createShadowRoot = function() {
var root = originalCreateShadowRoot.call(this);
root.host = this;
+ CustomElements.watchShadow(this);
return root;
}
}
// Patch to allow custom elements and shadow dom to work together, from:
-// https://github.com/Polymer/platform/blob/master/src/patches-custom-elements.js
+// https://github.com/Polymer/platform-dev/blob/2bb9c56d90f9ac19c2e65cdad368668aff514f14/src/patches-custom-elements.js
if (window.ShadowDOMPolyfill) {
- function nop() {};
-
- // disable shadow dom watching
- CustomElements.watchShadow = nop;
- CustomElements.watchAllShadows = nop;
// ensure wrapped inputs for these functions
var fns = ['upgradeAll', 'upgradeSubtree', 'observeDocument',
@@ -1461,9 +1472,21 @@
// override
fns.forEach(function(fn) {
CustomElements[fn] = function(inNode) {
- return original[fn](ShadowDOMPolyfill.wrapIfNeeded(inNode));
+ return original[fn](window.ShadowDOMPolyfill.wrapIfNeeded(inNode));
};
});
+
+}
+
+// Patch to make importNode work.
+// https://github.com/Polymer/platform-dev/blob/64a92f273462f04a84abbe2f054294f2b62dbcd6/src/patches-mdv.js
+if (window.CustomElements && !CustomElements.useNative) {
+ var originalImportNode = Document.prototype.importNode;
+ Document.prototype.importNode = function(node, deep) {
+ var imported = originalImportNode.call(this, node, deep);
+ CustomElements.upgradeAll(imported);
+ return imported;
+ }
}
})();
diff --git a/pkg/custom_element/lib/custom-elements.min.js b/pkg/custom_element/lib/custom-elements.min.js
index 68a7b78..cb5746f 100644
--- a/pkg/custom_element/lib/custom-elements.min.js
+++ b/pkg/custom_element/lib/custom-elements.min.js
@@ -25,4 +25,4 @@
// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
-window.CustomElements={flags:{}};var SideTable;if("undefined"!=typeof WeakMap&&navigator.userAgent.indexOf("Firefox/")<0?SideTable=WeakMap:function(){var a=Object.defineProperty,b=Date.now()%1e9;SideTable=function(){this.name="__st"+(1e9*Math.random()>>>0)+(b++ +"__")},SideTable.prototype={set:function(b,c){var d=b[this.name];d&&d[0]===b?d[1]=c:a(b,this.name,{value:[b,c],writable:!0})},get:function(a){var b;return(b=a[this.name])&&b[0]===a?b[1]:void 0},"delete":function(a){this.set(a,void 0)}}}(),function(a){function b(a){u.push(a),t||(t=!0,q(d))}function c(a){return window.ShadowDOMPolyfill&&window.ShadowDOMPolyfill.wrapIfNeeded(a)||a}function d(){t=!1;var a=u;u=[],a.sort(function(a,b){return a.uid_-b.uid_});var b=!1;a.forEach(function(a){var c=a.takeRecords();e(a),c.length&&(a.callback_(c,a),b=!0)}),b&&d()}function e(a){a.nodes_.forEach(function(b){var c=p.get(b);c&&c.forEach(function(b){b.observer===a&&b.removeTransientObservers()})})}function f(a,b){for(var c=a;c;c=c.parentNode){var d=p.get(c);if(d)for(var e=0;e<d.length;e++){var f=d[e],g=f.options;if(c===a||g.subtree){var h=b(g);h&&f.enqueue(h)}}}}function g(a){this.callback_=a,this.nodes_=[],this.records_=[],this.uid_=++v}function h(a,b){this.type=a,this.target=b,this.addedNodes=[],this.removedNodes=[],this.previousSibling=null,this.nextSibling=null,this.attributeName=null,this.attributeNamespace=null,this.oldValue=null}function i(a){var b=new h(a.type,a.target);return b.addedNodes=a.addedNodes.slice(),b.removedNodes=a.removedNodes.slice(),b.previousSibling=a.previousSibling,b.nextSibling=a.nextSibling,b.attributeName=a.attributeName,b.attributeNamespace=a.attributeNamespace,b.oldValue=a.oldValue,b}function j(a,b){return w=new h(a,b)}function k(a){return x?x:(x=i(w),x.oldValue=a,x)}function l(){w=x=void 0}function m(a){return a===x||a===w}function n(a,b){return a===b?a:x&&m(a)?x:null}function o(a,b,c){this.observer=a,this.target=b,this.options=c,this.transientObservedNodes=[]}var p=new SideTable,q=window.msSetImmediate;if(!q){var r=[],s=String(Math.random());window.addEventListener("message",function(a){if(a.data===s){var b=r;r=[],b.forEach(function(a){a()})}}),q=function(a){r.push(a),window.postMessage(s,"*")}}var t=!1,u=[],v=0;g.prototype={observe:function(a,b){if(a=c(a),!b.childList&&!b.attributes&&!b.characterData||b.attributeOldValue&&!b.attributes||b.attributeFilter&&b.attributeFilter.length&&!b.attributes||b.characterDataOldValue&&!b.characterData)throw new SyntaxError;var d=p.get(a);d||p.set(a,d=[]);for(var e,f=0;f<d.length;f++)if(d[f].observer===this){e=d[f],e.removeListeners(),e.options=b;break}e||(e=new o(this,a,b),d.push(e),this.nodes_.push(a)),e.addListeners()},disconnect:function(){this.nodes_.forEach(function(a){for(var b=p.get(a),c=0;c<b.length;c++){var d=b[c];if(d.observer===this){d.removeListeners(),b.splice(c,1);break}}},this),this.records_=[]},takeRecords:function(){var a=this.records_;return this.records_=[],a}};var w,x;o.prototype={enqueue:function(a){var c=this.observer.records_,d=c.length;if(c.length>0){var e=c[d-1],f=n(e,a);if(f)return c[d-1]=f,void 0}else b(this.observer);c[d]=a},addListeners:function(){this.addListeners_(this.target)},addListeners_:function(a){var b=this.options;b.attributes&&a.addEventListener("DOMAttrModified",this,!0),b.characterData&&a.addEventListener("DOMCharacterDataModified",this,!0),b.childList&&a.addEventListener("DOMNodeInserted",this,!0),(b.childList||b.subtree)&&a.addEventListener("DOMNodeRemoved",this,!0)},removeListeners:function(){this.removeListeners_(this.target)},removeListeners_:function(a){var b=this.options;b.attributes&&a.removeEventListener("DOMAttrModified",this,!0),b.characterData&&a.removeEventListener("DOMCharacterDataModified",this,!0),b.childList&&a.removeEventListener("DOMNodeInserted",this,!0),(b.childList||b.subtree)&&a.removeEventListener("DOMNodeRemoved",this,!0)},addTransientObserver:function(a){if(a!==this.target){this.addListeners_(a),this.transientObservedNodes.push(a);var b=p.get(a);b||p.set(a,b=[]),b.push(this)}},removeTransientObservers:function(){var a=this.transientObservedNodes;this.transientObservedNodes=[],a.forEach(function(a){this.removeListeners_(a);for(var b=p.get(a),c=0;c<b.length;c++)if(b[c]===this){b.splice(c,1);break}},this)},handleEvent:function(a){switch(a.stopImmediatePropagation(),a.type){case"DOMAttrModified":var b=a.attrName,c=a.relatedNode.namespaceURI,d=a.target,e=new j("attributes",d);e.attributeName=b,e.attributeNamespace=c;var g=a.attrChange===MutationEvent.ADDITION?null:a.prevValue;f(d,function(a){return!a.attributes||a.attributeFilter&&a.attributeFilter.length&&-1===a.attributeFilter.indexOf(b)&&-1===a.attributeFilter.indexOf(c)?void 0:a.attributeOldValue?k(g):e});break;case"DOMCharacterDataModified":var d=a.target,e=j("characterData",d),g=a.prevValue;f(d,function(a){return a.characterData?a.characterDataOldValue?k(g):e:void 0});break;case"DOMNodeRemoved":this.addTransientObserver(a.target);case"DOMNodeInserted":var h,i,d=a.relatedNode,m=a.target;"DOMNodeInserted"===a.type?(h=[m],i=[]):(h=[],i=[m]);var n=m.previousSibling,o=m.nextSibling,e=j("childList",d);e.addedNodes=h,e.removedNodes=i,e.previousSibling=n,e.nextSibling=o,f(d,function(a){return a.childList?e:void 0})}l()}},a.JsMutationObserver=g}(this),!window.MutationObserver&&(window.MutationObserver=window.WebKitMutationObserver||window.JsMutationObserver,!MutationObserver))throw new Error("no mutation observer support");!function(a){function b(a,c,d){var e=a.firstElementChild;if(!e)for(e=a.firstChild;e&&e.nodeType!==Node.ELEMENT_NODE;)e=e.nextSibling;for(;e;)c(e,d)!==!0&&b(e,c,d),e=e.nextElementSibling;return null}function c(a,b){for(var c=a.shadowRoot;c;)d(c,b),c=c.olderShadowRoot}function d(a,d){b(a,function(a){return d(a)?!0:(c(a,d),void 0)}),c(a,d)}function e(a){return h(a)?(i(a),!0):(l(a),void 0)}function f(a){d(a,function(a){return e(a)?!0:void 0})}function g(a){return e(a)||f(a)}function h(b){if(!b.__upgraded__&&b.nodeType===Node.ELEMENT_NODE){var c=b.getAttribute("is")||b.localName,d=a.registry[c];if(d)return y.dom&&console.group("upgrade:",b.localName),a.upgrade(b),y.dom&&console.groupEnd(),!0}}function i(a){l(a),p(a)&&d(a,function(a){l(a)})}function j(a){if(B.push(a),!A){A=!0;var b=window.Platform&&window.Platform.endOfMicrotask||setTimeout;b(k)}}function k(){A=!1;for(var a,b=B,c=0,d=b.length;d>c&&(a=b[c]);c++)a();B=[]}function l(a){z?j(function(){m(a)}):m(a)}function m(a){(a.enteredViewCallback||a.__upgraded__&&y.dom)&&(y.dom&&console.group("inserted:",a.localName),p(a)&&(a.__inserted=(a.__inserted||0)+1,a.__inserted<1&&(a.__inserted=1),a.__inserted>1?y.dom&&console.warn("inserted:",a.localName,"insert/remove count:",a.__inserted):a.enteredViewCallback&&(y.dom&&console.log("inserted:",a.localName),a.enteredViewCallback())),y.dom&&console.groupEnd())}function n(a){o(a),d(a,function(a){o(a)})}function o(a){z?j(function(){_removed(a)}):_removed(a)}function o(a){(a.leftViewCallback||a.__upgraded__&&y.dom)&&(y.dom&&console.log("removed:",a.localName),p(a)||(a.__inserted=(a.__inserted||0)-1,a.__inserted>0&&(a.__inserted=0),a.__inserted<0?y.dom&&console.warn("removed:",a.localName,"insert/remove count:",a.__inserted):a.leftViewCallback&&a.leftViewCallback()))}function p(a){for(var b=a,c=window.ShadowDOMPolyfill&&window.ShadowDOMPolyfill.wrapIfNeeded(document)||document;b;){if(b==c)return!0;b=b.parentNode||b.host}}function q(a){if(a.shadowRoot&&!a.shadowRoot.__watched){y.dom&&console.log("watching shadow-root for: ",a.localName);for(var b=a.shadowRoot;b;)r(b),b=b.olderShadowRoot}}function r(a){a.__watched||(v(a),a.__watched=!0)}function s(a){switch(a.localName){case"style":case"script":case"template":case void 0:return!0}}function t(a){if(y.dom){var b=a[0];if(b&&"childList"===b.type&&b.addedNodes&&b.addedNodes){for(var c=b.addedNodes[0];c&&c!==document&&!c.host;)c=c.parentNode;var d=c&&(c.URL||c._URL||c.host&&c.host.localName)||"";d=d.split("/?").shift().split("/").pop()}console.group("mutations (%d) [%s]",a.length,d||"")}a.forEach(function(a){"childList"===a.type&&(D(a.addedNodes,function(a){s(a)||g(a)}),D(a.removedNodes,function(a){s(a)||n(a)}))}),y.dom&&console.groupEnd()}function u(){t(C.takeRecords()),k()}function v(a){C.observe(a,{childList:!0,subtree:!0})}function w(a){v(a)}function x(a){y.dom&&console.group("upgradeDocument: ",(a.URL||a._URL||"").split("/").pop()),g(a),y.dom&&console.groupEnd()}var y=window.logFlags||{},z=!window.MutationObserver||window.MutationObserver===window.JsMutationObserver;a.hasPolyfillMutations=z;var A=!1,B=[],C=new MutationObserver(t),D=Array.prototype.forEach.call.bind(Array.prototype.forEach);a.watchShadow=q,a.upgradeAll=g,a.upgradeSubtree=f,a.observeDocument=w,a.upgradeDocument=x,a.takeRecords=u}(window.CustomElements),function(a){function b(b,f){var g=f||{};if(!b)throw new Error("document.register: first argument `name` must not be empty");if(b.indexOf("-")<0)throw new Error("document.register: first argument ('name') must contain a dash ('-'). Argument provided was '"+String(b)+"'.");if(g.name=b,!g.prototype)throw new Error("Options missing required prototype property");return g.lifecycle=g.lifecycle||{},g.ancestry=c(g.extends),d(g),e(g),k(g.prototype),m(b,g),g.ctor=n(g),g.ctor.prototype=g.prototype,g.prototype.constructor=g.ctor,(a.ready||a.performedInitialDocumentUpgrade)&&a.upgradeAll(document),g.ctor}function c(a){var b=v[a];return b?c(b.extends).concat([b]):[]}function d(a){for(var b,c=a.extends,d=0;b=a.ancestry[d];d++)c=b.is&&b.tag;a.tag=c||a.name,c&&(a.is=a.name)}function e(a){if(!Object.__proto__){var b=HTMLElement.prototype;if(a.is){var c=document.createElement(a.tag);b=Object.getPrototypeOf(c)}for(var d,e=a.prototype;e&&e!==b;){var d=Object.getPrototypeOf(e);e.__proto__=d,e=d}}a.native=b}function f(a){return g(w(a.tag),a)}function g(b,c){return c.is&&b.setAttribute("is",c.is),h(b,c),b.__upgraded__=!0,a.upgradeSubtree(b),j(b),b}function h(a,b){Object.__proto__?a.__proto__=b.prototype:(i(a,b.prototype,b.native),a.__proto__=b.prototype)}function i(a,b,c){for(var d={},e=b;e&&e!==c&&e!==HTMLUnknownElement.prototype;){for(var f,g=Object.getOwnPropertyNames(e),h=0;f=g[h];h++)d[f]||(Object.defineProperty(a,f,Object.getOwnPropertyDescriptor(e,f)),d[f]=1);e=Object.getPrototypeOf(e)}}function j(a){a.createdCallback&&a.createdCallback()}function k(a){var b=a.setAttribute;a.setAttribute=function(a,c){l.call(this,a,c,b)};var c=a.removeAttribute;a.removeAttribute=function(a){l.call(this,a,null,c)}}function l(a,b,c){var d=this.getAttribute(a);c.apply(this,arguments),this.attributeChangedCallback&&this.getAttribute(a)!==d&&this.attributeChangedCallback(a,d,b)}function m(a,b){if(v[a])throw new Error("Cannot register a tag more than once");v[a]=b}function n(a){return function(){return f(a)}}function o(a,b){var c=v[b||a];if(c){if(a==c.tag&&b==c.is)return new c.ctor;if(!b&&!c.is)return new c.ctor}if(b){var d=o(a);return d.setAttribute("is",b),d}var d=w(a);return a.indexOf("-")>=0&&h(d,HTMLElement),d}function p(a){if(!a.__upgraded__&&a.nodeType===Node.ELEMENT_NODE){var b=a.getAttribute("is"),c=v[b||a.localName];if(c){if(b&&c.tag==a.localName)return g(a,c);if(!b&&!c.extends)return g(a,c)}}}function q(b){var c=x.call(this,b);return a.upgradeAll(c),c}a||(a=window.CustomElements={flags:{}});var r=a.flags,s=Boolean(document.register),t=!r.register&&s;if(t){var u=function(){};a.registry={},a.upgradeElement=u,a.watchShadow=u,a.upgrade=u,a.upgradeAll=u,a.upgradeSubtree=u,a.observeDocument=u,a.upgradeDocument=u,a.takeRecords=u}else{var v={},w=document.createElement.bind(document),x=Node.prototype.cloneNode;document.register=b,document.createElement=o,Node.prototype.cloneNode=q,a.registry=v,a.upgrade=p}a.hasNative=s,a.useNative=t}(window.CustomElements),function(){function a(a){return"link"===a.localName&&a.getAttribute("rel")===b}var b=window.HTMLImports?HTMLImports.IMPORT_LINK_TYPE:"none",c={selectors:["link[rel="+b+"]"],map:{link:"parseLink"},parse:function(a){if(!a.__parsed){a.__parsed=!0;var b=a.querySelectorAll(c.selectors);d(b,function(a){c[c.map[a.localName]](a)}),CustomElements.upgradeDocument(a),CustomElements.observeDocument(a)}},parseLink:function(b){a(b)&&this.parseImport(b)},parseImport:function(a){a.content&&c.parse(a.content)}},d=Array.prototype.forEach.call.bind(Array.prototype.forEach);CustomElements.parser=c}(),function(){function a(){CustomElements.parser.parse(document),CustomElements.upgradeDocument(document),CustomElements.performedInitialDocumentUpgrade=!0;var a=window.Platform&&Platform.endOfMicrotask?Platform.endOfMicrotask:setTimeout;a(function(){CustomElements.ready=!0,CustomElements.readyTime=Date.now(),window.HTMLImports&&(CustomElements.elapsed=CustomElements.readyTime-HTMLImports.readyTime),document.body.dispatchEvent(new CustomEvent("WebComponentsReady",{bubbles:!0}))})}if("function"!=typeof window.CustomEvent&&(window.CustomEvent=function(a){var b=document.createEvent("HTMLEvents");return b.initEvent(a,!0,!0),b}),"complete"===document.readyState)a();else{var b=window.HTMLImports?"HTMLImportsLoaded":"loading"==document.readyState?"DOMContentLoaded":"load";window.addEventListener(b,a)}}(),function(){function a(){}if(HTMLElement.prototype.createShadowRoot){var b=HTMLElement.prototype.createShadowRoot;HTMLElement.prototype.createShadowRoot=function(){var a=b.call(this);return a.host=this,a}}if(window.ShadowDOMPolyfill){CustomElements.watchShadow=a,CustomElements.watchAllShadows=a;var c=["upgradeAll","upgradeSubtree","observeDocument","upgradeDocument"],d={};c.forEach(function(a){d[a]=CustomElements[a]}),c.forEach(function(a){CustomElements[a]=function(b){return d[a](ShadowDOMPolyfill.wrapIfNeeded(b))}})}}();
+"undefined"==typeof WeakMap&&!function(){var a=Object.defineProperty,b=Date.now()%1e9,c=function(){this.name="__st"+(1e9*Math.random()>>>0)+(b++ +"__")};c.prototype={set:function(b,c){var d=b[this.name];d&&d[0]===b?d[1]=c:a(b,this.name,{value:[b,c],writable:!0})},get:function(a){var b;return(b=a[this.name])&&b[0]===a?b[1]:void 0},"delete":function(a){this.set(a,void 0)}},window.WeakMap=c}(),function(a){function b(a){u.push(a),t||(t=!0,q(d))}function c(a){return window.ShadowDOMPolyfill&&window.ShadowDOMPolyfill.wrapIfNeeded(a)||a}function d(){t=!1;var a=u;u=[],a.sort(function(a,b){return a.uid_-b.uid_});var b=!1;a.forEach(function(a){var c=a.takeRecords();e(a),c.length&&(a.callback_(c,a),b=!0)}),b&&d()}function e(a){a.nodes_.forEach(function(b){var c=p.get(b);c&&c.forEach(function(b){b.observer===a&&b.removeTransientObservers()})})}function f(a,b){for(var c=a;c;c=c.parentNode){var d=p.get(c);if(d)for(var e=0;e<d.length;e++){var f=d[e],g=f.options;if(c===a||g.subtree){var h=b(g);h&&f.enqueue(h)}}}}function g(a){this.callback_=a,this.nodes_=[],this.records_=[],this.uid_=++v}function h(a,b){this.type=a,this.target=b,this.addedNodes=[],this.removedNodes=[],this.previousSibling=null,this.nextSibling=null,this.attributeName=null,this.attributeNamespace=null,this.oldValue=null}function i(a){var b=new h(a.type,a.target);return b.addedNodes=a.addedNodes.slice(),b.removedNodes=a.removedNodes.slice(),b.previousSibling=a.previousSibling,b.nextSibling=a.nextSibling,b.attributeName=a.attributeName,b.attributeNamespace=a.attributeNamespace,b.oldValue=a.oldValue,b}function j(a,b){return w=new h(a,b)}function k(a){return x?x:(x=i(w),x.oldValue=a,x)}function l(){w=x=void 0}function m(a){return a===x||a===w}function n(a,b){return a===b?a:x&&m(a)?x:null}function o(a,b,c){this.observer=a,this.target=b,this.options=c,this.transientObservedNodes=[]}var p=new WeakMap,q=window.msSetImmediate;if(!q){var r=[],s=String(Math.random());window.addEventListener("message",function(a){if(a.data===s){var b=r;r=[],b.forEach(function(a){a()})}}),q=function(a){r.push(a),window.postMessage(s,"*")}}var t=!1,u=[],v=0;g.prototype={observe:function(a,b){if(a=c(a),!b.childList&&!b.attributes&&!b.characterData||b.attributeOldValue&&!b.attributes||b.attributeFilter&&b.attributeFilter.length&&!b.attributes||b.characterDataOldValue&&!b.characterData)throw new SyntaxError;var d=p.get(a);d||p.set(a,d=[]);for(var e,f=0;f<d.length;f++)if(d[f].observer===this){e=d[f],e.removeListeners(),e.options=b;break}e||(e=new o(this,a,b),d.push(e),this.nodes_.push(a)),e.addListeners()},disconnect:function(){this.nodes_.forEach(function(a){for(var b=p.get(a),c=0;c<b.length;c++){var d=b[c];if(d.observer===this){d.removeListeners(),b.splice(c,1);break}}},this),this.records_=[]},takeRecords:function(){var a=this.records_;return this.records_=[],a}};var w,x;o.prototype={enqueue:function(a){var c=this.observer.records_,d=c.length;if(c.length>0){var e=c[d-1],f=n(e,a);if(f)return c[d-1]=f,void 0}else b(this.observer);c[d]=a},addListeners:function(){this.addListeners_(this.target)},addListeners_:function(a){var b=this.options;b.attributes&&a.addEventListener("DOMAttrModified",this,!0),b.characterData&&a.addEventListener("DOMCharacterDataModified",this,!0),b.childList&&a.addEventListener("DOMNodeInserted",this,!0),(b.childList||b.subtree)&&a.addEventListener("DOMNodeRemoved",this,!0)},removeListeners:function(){this.removeListeners_(this.target)},removeListeners_:function(a){var b=this.options;b.attributes&&a.removeEventListener("DOMAttrModified",this,!0),b.characterData&&a.removeEventListener("DOMCharacterDataModified",this,!0),b.childList&&a.removeEventListener("DOMNodeInserted",this,!0),(b.childList||b.subtree)&&a.removeEventListener("DOMNodeRemoved",this,!0)},addTransientObserver:function(a){if(a!==this.target){this.addListeners_(a),this.transientObservedNodes.push(a);var b=p.get(a);b||p.set(a,b=[]),b.push(this)}},removeTransientObservers:function(){var a=this.transientObservedNodes;this.transientObservedNodes=[],a.forEach(function(a){this.removeListeners_(a);for(var b=p.get(a),c=0;c<b.length;c++)if(b[c]===this){b.splice(c,1);break}},this)},handleEvent:function(a){switch(a.stopImmediatePropagation(),a.type){case"DOMAttrModified":var b=a.attrName,c=a.relatedNode.namespaceURI,d=a.target,e=new j("attributes",d);e.attributeName=b,e.attributeNamespace=c;var g=a.attrChange===MutationEvent.ADDITION?null:a.prevValue;f(d,function(a){return!a.attributes||a.attributeFilter&&a.attributeFilter.length&&-1===a.attributeFilter.indexOf(b)&&-1===a.attributeFilter.indexOf(c)?void 0:a.attributeOldValue?k(g):e});break;case"DOMCharacterDataModified":var d=a.target,e=j("characterData",d),g=a.prevValue;f(d,function(a){return a.characterData?a.characterDataOldValue?k(g):e:void 0});break;case"DOMNodeRemoved":this.addTransientObserver(a.target);case"DOMNodeInserted":var h,i,d=a.relatedNode,m=a.target;"DOMNodeInserted"===a.type?(h=[m],i=[]):(h=[],i=[m]);var n=m.previousSibling,o=m.nextSibling,e=j("childList",d);e.addedNodes=h,e.removedNodes=i,e.previousSibling=n,e.nextSibling=o,f(d,function(a){return a.childList?e:void 0})}l()}},a.JsMutationObserver=g,!a.MutationObserver&&a.WebKitMutationObserver&&(a.MutationObserver=a.WebKitMutationObserver),a.MutationObserver||(a.MutationObserver=g)}(this),window.CustomElements=window.CustomElements||{flags:{}},function(a){function b(a,c,d){var e=a.firstElementChild;if(!e)for(e=a.firstChild;e&&e.nodeType!==Node.ELEMENT_NODE;)e=e.nextSibling;for(;e;)c(e,d)!==!0&&b(e,c,d),e=e.nextElementSibling;return null}function c(a,b){for(var c=a.shadowRoot;c;)d(c,b),c=c.olderShadowRoot}function d(a,d){b(a,function(a){return d(a)?!0:(c(a,d),void 0)}),c(a,d)}function e(a){return h(a)?(i(a),!0):(l(a),void 0)}function f(a){d(a,function(a){return e(a)?!0:void 0})}function g(a){return e(a)||f(a)}function h(b){if(!b.__upgraded__&&b.nodeType===Node.ELEMENT_NODE){var c=b.getAttribute("is")||b.localName,d=a.registry[c];if(d)return y.dom&&console.group("upgrade:",b.localName),a.upgrade(b),y.dom&&console.groupEnd(),!0}}function i(a){l(a),q(a)&&d(a,function(a){l(a)})}function j(a){if(B.push(a),!A){A=!0;var b=window.Platform&&window.Platform.endOfMicrotask||setTimeout;b(k)}}function k(){A=!1;for(var a,b=B,c=0,d=b.length;d>c&&(a=b[c]);c++)a();B=[]}function l(a){z?j(function(){m(a)}):m(a)}function m(a){(a.enteredViewCallback||a.__upgraded__&&y.dom)&&(y.dom&&console.group("inserted:",a.localName),q(a)&&(a.__inserted=(a.__inserted||0)+1,a.__inserted<1&&(a.__inserted=1),a.__inserted>1?y.dom&&console.warn("inserted:",a.localName,"insert/remove count:",a.__inserted):a.enteredViewCallback&&(y.dom&&console.log("inserted:",a.localName),a.enteredViewCallback())),y.dom&&console.groupEnd())}function n(a){o(a),d(a,function(a){o(a)})}function o(a){z?j(function(){p(a)}):p(a)}function p(a){(a.leftViewCallback||a.__upgraded__&&y.dom)&&(y.dom&&console.log("removed:",a.localName),q(a)||(a.__inserted=(a.__inserted||0)-1,a.__inserted>0&&(a.__inserted=0),a.__inserted<0?y.dom&&console.warn("removed:",a.localName,"insert/remove count:",a.__inserted):a.leftViewCallback&&a.leftViewCallback()))}function q(a){for(var b=a,c=window.ShadowDOMPolyfill&&window.ShadowDOMPolyfill.wrapIfNeeded(document)||document;b;){if(b==c)return!0;b=b.parentNode||b.host}}function r(a){if(a.shadowRoot&&!a.shadowRoot.__watched){y.dom&&console.log("watching shadow-root for: ",a.localName);for(var b=a.shadowRoot;b;)s(b),b=b.olderShadowRoot}}function s(a){a.__watched||(v(a),a.__watched=!0)}function t(a){if(y.dom){var b=a[0];if(b&&"childList"===b.type&&b.addedNodes&&b.addedNodes){for(var c=b.addedNodes[0];c&&c!==document&&!c.host;)c=c.parentNode;var d=c&&(c.URL||c._URL||c.host&&c.host.localName)||"";d=d.split("/?").shift().split("/").pop()}console.group("mutations (%d) [%s]",a.length,d||"")}a.forEach(function(a){"childList"===a.type&&(D(a.addedNodes,function(a){a.localName&&g(a)}),D(a.removedNodes,function(a){a.localName&&n(a)}))}),y.dom&&console.groupEnd()}function u(){t(C.takeRecords()),k()}function v(a){C.observe(a,{childList:!0,subtree:!0})}function w(a){v(a)}function x(a){y.dom&&console.group("upgradeDocument: ",(a.URL||a._URL||"").split("/").pop()),g(a),y.dom&&console.groupEnd()}var y=window.logFlags||{},z=!window.MutationObserver||window.MutationObserver===window.JsMutationObserver;a.hasPolyfillMutations=z;var A=!1,B=[],C=new MutationObserver(t),D=Array.prototype.forEach.call.bind(Array.prototype.forEach);a.watchShadow=r,a.upgradeAll=g,a.upgradeSubtree=f,a.observeDocument=w,a.upgradeDocument=x,a.takeRecords=u}(window.CustomElements),function(a){function b(b,f){var g=f||{};if(!b)throw new Error("document.register: first argument `name` must not be empty");if(b.indexOf("-")<0)throw new Error("document.register: first argument ('name') must contain a dash ('-'). Argument provided was '"+String(b)+"'.");if(m(b))throw new Error("DuplicateDefinitionError: a type with name '"+String(b)+"' is already registered");if(!g.prototype)throw new Error("Options missing required prototype property");return g.name=b.toLowerCase(),g.lifecycle=g.lifecycle||{},g.ancestry=c(g.extends),d(g),e(g),k(g.prototype),n(g.name,g),g.ctor=o(g),g.ctor.prototype=g.prototype,g.prototype.constructor=g.ctor,(a.ready||a.performedInitialDocumentUpgrade)&&a.upgradeAll(document),g.ctor}function c(a){var b=m(a);return b?c(b.extends).concat([b]):[]}function d(a){for(var b,c=a.extends,d=0;b=a.ancestry[d];d++)c=b.is&&b.tag;a.tag=c||a.name,c&&(a.is=a.name)}function e(a){if(!Object.__proto__){var b=HTMLElement.prototype;if(a.is){var c=document.createElement(a.tag);b=Object.getPrototypeOf(c)}for(var d,e=a.prototype;e&&e!==b;){var d=Object.getPrototypeOf(e);e.__proto__=d,e=d}}a.native=b}function f(a){return g(x(a.tag),a)}function g(b,c){return c.is&&b.setAttribute("is",c.is),b.removeAttribute("unresolved"),h(b,c),b.__upgraded__=!0,a.upgradeSubtree(b),j(b),b}function h(a,b){Object.__proto__?a.__proto__=b.prototype:(i(a,b.prototype,b.native),a.__proto__=b.prototype)}function i(a,b,c){for(var d={},e=b;e!==c&&e!==HTMLUnknownElement.prototype;){for(var f,g=Object.getOwnPropertyNames(e),h=0;f=g[h];h++)d[f]||(Object.defineProperty(a,f,Object.getOwnPropertyDescriptor(e,f)),d[f]=1);e=Object.getPrototypeOf(e)}}function j(a){a.createdCallback&&a.createdCallback()}function k(a){if(!a.setAttribute._polyfilled){var b=a.setAttribute;a.setAttribute=function(a,c){l.call(this,a,c,b)};var c=a.removeAttribute;a.removeAttribute=function(a){l.call(this,a,null,c)},a.setAttribute._polyfilled=!0}}function l(a,b,c){var d=this.getAttribute(a);c.apply(this,arguments);var e=this.getAttribute(a);this.attributeChangedCallback&&e!==d&&this.attributeChangedCallback(a,d,e)}function m(a){return a?w[a.toLowerCase()]:void 0}function n(a,b){if(w[a])throw new Error("a type with that name is already registered.");w[a]=b}function o(a){return function(){return f(a)}}function p(a,b){var c=m(b||a);if(c){if(a==c.tag&&b==c.is)return new c.ctor;if(!b&&!c.is)return new c.ctor}if(b){var d=p(a);return d.setAttribute("is",b),d}var d=x(a);return a.indexOf("-")>=0&&h(d,HTMLElement),d}function q(a){if(!a.__upgraded__&&a.nodeType===Node.ELEMENT_NODE){var b=a.getAttribute("is"),c=w[b||a.localName];if(c){if(b&&c.tag==a.localName)return g(a,c);if(!b&&!c.extends)return g(a,c)}}}function r(b){var c=y.call(this,b);return a.upgradeAll(c),c}a||(a=window.CustomElements={flags:{}});var s=a.flags,t=Boolean(document.register),u=!s.register&&t;if(u){var v=function(){};a.registry={},a.upgradeElement=v,a.watchShadow=v,a.upgrade=v,a.upgradeAll=v,a.upgradeSubtree=v,a.observeDocument=v,a.upgradeDocument=v,a.takeRecords=v}else{var w={},x=document.createElement.bind(document),y=Node.prototype.cloneNode;document.register=b,document.createElement=p,Node.prototype.cloneNode=r,a.registry=w,a.upgrade=q}a.hasNative=t,a.useNative=u}(window.CustomElements),function(){function a(a){return"link"===a.localName&&a.getAttribute("rel")===b}var b=window.HTMLImports?HTMLImports.IMPORT_LINK_TYPE:"none",c={selectors:["link[rel="+b+"]"],map:{link:"parseLink"},parse:function(a){if(!a.__parsed){a.__parsed=!0;var b=a.querySelectorAll(c.selectors);d(b,function(a){c[c.map[a.localName]](a)}),CustomElements.upgradeDocument(a),CustomElements.observeDocument(a)}},parseLink:function(b){a(b)&&this.parseImport(b)},parseImport:function(a){a.content&&c.parse(a.content)}},d=Array.prototype.forEach.call.bind(Array.prototype.forEach);CustomElements.parser=c}(),function(a){function b(){CustomElements.parser.parse(document),CustomElements.upgradeDocument(document),CustomElements.performedInitialDocumentUpgrade=!0;var a=window.Platform&&Platform.endOfMicrotask?Platform.endOfMicrotask:setTimeout;a(function(){CustomElements.ready=!0,CustomElements.readyTime=Date.now(),window.HTMLImports&&(CustomElements.elapsed=CustomElements.readyTime-HTMLImports.readyTime),document.body.dispatchEvent(new CustomEvent("WebComponentsReady",{bubbles:!0}))})}if("function"!=typeof window.CustomEvent&&(window.CustomEvent=function(a){var b=document.createEvent("HTMLEvents");return b.initEvent(a,!0,!0),b}),"complete"===document.readyState||a.flags.eager)b();else if("interactive"!==document.readyState||window.attachEvent||window.HTMLImports&&!window.HTMLImports.ready){var c=window.HTMLImports?"HTMLImportsLoaded":"loading"==document.readyState?"DOMContentLoaded":"load";window.addEventListener(c,b)}else b()}(window.CustomElements),function(){if(HTMLElement.prototype.createShadowRoot){var a=HTMLElement.prototype.createShadowRoot;HTMLElement.prototype.createShadowRoot=function(){var b=a.call(this);return b.host=this,CustomElements.watchShadow(this),b}}if(window.ShadowDOMPolyfill){var b=["upgradeAll","upgradeSubtree","observeDocument","upgradeDocument"],c={};b.forEach(function(a){c[a]=CustomElements[a]}),b.forEach(function(a){CustomElements[a]=function(b){return c[a](window.ShadowDOMPolyfill.wrapIfNeeded(b))}})}if(window.CustomElements&&!CustomElements.useNative){var d=Document.prototype.importNode;Document.prototype.importNode=function(a,b){var c=d.call(this,a,b);return CustomElements.upgradeAll(c),c}}}();
\ No newline at end of file
diff --git a/pkg/custom_element/pubspec.yaml b/pkg/custom_element/pubspec.yaml
index 772a543..2ed1f29 100644
--- a/pkg/custom_element/pubspec.yaml
+++ b/pkg/custom_element/pubspec.yaml
@@ -1,6 +1,6 @@
name: custom_element
-version: 0.9.0
-author: "Web UI Team <web-ui-dev@dartlang.org>"
+version: 0.9.1+1
+author: "Polymer.dart Team <web-ui-dev@dartlang.org>"
homepage: http://www.dartlang.org/
description: >
Custom Elements let authors define their own elements. Authors associate code
@@ -11,4 +11,4 @@
dev_dependencies:
unittest: ">=0.9.0 <0.10.0"
environment:
- sdk: ">=0.8.10+6 <2.0.0"
+ sdk: ">=1.0.0 <2.0.0"
diff --git a/pkg/docgen/bin/docgen.dart b/pkg/docgen/bin/docgen.dart
index d81e5bc..7a19f65 100644
--- a/pkg/docgen/bin/docgen.dart
+++ b/pkg/docgen/bin/docgen.dart
@@ -34,7 +34,8 @@
append: results['append'] && new Directory(results['out']).existsSync(),
introduction: introduction,
out: results['out'],
- excludeLibraries: excludedLibraries);
+ excludeLibraries: excludedLibraries,
+ includeDependentPackages: results['include-dependent-packages']);
}
/**
@@ -84,5 +85,10 @@
help: 'Exclude the library by this name from the documentation',
allowMultiple: true,
callback: (libs) => excludedLibraries.addAll(libs));
+ parser.addFlag('include-dependent-packages',
+ help: 'Assumes we are documenting a single package and are running '
+ 'in the directory with its pubspec. Includes documentation for all '
+ 'of its dependent packages.',
+ defaultsTo: false, negatable: false);
return parser;
}
diff --git a/pkg/docgen/lib/docgen.dart b/pkg/docgen/lib/docgen.dart
index fb0094f..d75b60f 100644
--- a/pkg/docgen/lib/docgen.dart
+++ b/pkg/docgen/lib/docgen.dart
@@ -66,6 +66,9 @@
/// This is set from the command line arguments flag --include-private
bool _includePrivate = false;
+/// This is set from the command line flag --include-dependent-packages
+bool _includeDependentPackages = false;
+
/// Library names to explicitly exclude.
///
/// Set from the command line option
@@ -90,10 +93,12 @@
Future<bool> docgen(List<String> files, {String packageRoot,
bool outputToYaml: true, bool includePrivate: false, bool includeSdk: false,
bool parseSdk: false, bool append: false, String introduction: '',
- out: DEFAULT_OUTPUT_DIRECTORY, List<String> excludeLibraries}) {
+ out: DEFAULT_OUTPUT_DIRECTORY, List<String> excludeLibraries,
+ bool includeDependentPackages}) {
_excluded = excludeLibraries;
_includePrivate = includePrivate;
_outputDirectory = out;
+ _includeDependentPackages = includeDependentPackages;
if (!append) {
var dir = new Directory(_outputDirectory);
if (dir.existsSync()) dir.deleteSync(recursive: true);
@@ -109,6 +114,9 @@
}
}
logger.info('Package Root: ${packageRoot}');
+ if (_includeDependentPackages) {
+ files.addAll(allDependentPackageDirs(files.first));
+ }
var requestedLibraries = _listLibraries(files);
var allLibraries = []..addAll(requestedLibraries);
if (includeSdk) {
@@ -142,6 +150,17 @@
});
}
+/// All of the directories for our dependent packages
+List<String> allDependentPackageDirs(String packageDirectory) {
+ var dependentsJson = Process.runSync('pub', ['list-package-dirs'],
+ workingDirectory: packageDirectory, runInShell: true);
+ if (dependentsJson.exitCode != 0) {
+ print(dependentsJson.stderr);
+ }
+ var dependents = JSON.decode(dependentsJson.stdout)['packages'];
+ return dependents.values.toList();
+}
+
/// For a library's [mirror], determine the name of the package (if any) we
/// believe it came from (because of its file URI).
///
@@ -180,7 +199,7 @@
.startsWith('README'))).toList();
if (readmes.isEmpty) return '';
// If there are multiples, pick the shortest name.
- readmes.sort((a, b) => a.length.compareTo(b.length));
+ readmes.sort((a, b) => a.path.length.compareTo(b.path.length));
var readme = readmes.first;
var linkResolver = (name) => fixReference(name, null, null, null);
var contents = markdown.markdownToHtml(readme
@@ -1137,7 +1156,7 @@
// and tell them to update their links, given these other exported
// names within the library.
for (Exported member in library._exportedMembers.values) {
- member.updateExports(library._exportedMembers.keys);
+ member.updateExports(library._exportedMembers);
}
}
}
diff --git a/pkg/docgen/pubspec.yaml b/pkg/docgen/pubspec.yaml
index 5afaebe..01d6d5e 100644
--- a/pkg/docgen/pubspec.yaml
+++ b/pkg/docgen/pubspec.yaml
@@ -1,5 +1,5 @@
name: docgen
-version: 0.9.0
+version: 0.9.1
author: "Dart Team <misc@dartlang.org>"
homepage: https://github.com/dart-lang/dartdoc-viewer
description: A documentation generator for the Dart repository.
@@ -10,7 +10,7 @@
git:
ref: emilysEdits
url: https://github.com/efortuna/dart-markdown
- path: ">=0.9.0 <0.10.0"
+ path: ">=0.9.0 <2.0.0"
yaml: ">=0.9.0 <0.10.0"
dev_dependencies:
unittest: ">=0.9.0 <0.10.0"
diff --git a/pkg/html_import/pubspec.yaml b/pkg/html_import/pubspec.yaml
index 9d2ca0e..edcaebb 100644
--- a/pkg/html_import/pubspec.yaml
+++ b/pkg/html_import/pubspec.yaml
@@ -1,6 +1,6 @@
name: html_import
version: 0.9.0
-author: "Web UI Team <web-ui-dev@dartlang.org>"
+author: "Polymer.dart Team <web-ui-dev@dartlang.org>"
homepage: https://github.com/Polymer/HTMLImports/tree/master
description: >
HTML Imports are a way to include and reuse HTML documents in other HTML
@@ -8,4 +8,4 @@
pages, imports let authors load full HTML resources. In particular, imports
let authors include Custom Element definitions from external URLs.
environment:
- sdk: ">=0.8.10+6 <2.0.0"
+ sdk: ">=1.0.0 <2.0.0"
diff --git a/pkg/http/pubspec.yaml b/pkg/http/pubspec.yaml
index 80018b1..d3c751b 100644
--- a/pkg/http/pubspec.yaml
+++ b/pkg/http/pubspec.yaml
@@ -1,11 +1,11 @@
name: http
-version: 0.9.0
+version: 0.9.2
author: "Dart Team <misc@dartlang.org>"
homepage: https://pub.dartlang.org/packages/http
description: A composable, Future-based API for making HTTP requests.
dependencies:
- path: ">=0.9.0 <0.10.0"
- stack_trace: ">=0.9.0 <0.10.0"
+ path: ">=0.9.0 <2.0.0"
+ stack_trace: ">=0.9.1 <0.10.0"
dev_dependencies:
unittest: ">=0.9.0 <0.10.0"
environment:
diff --git a/pkg/http_server/README.md b/pkg/http_server/README.md
index 9d82386..f0b90f4 100644
--- a/pkg/http_server/README.md
+++ b/pkg/http_server/README.md
@@ -1,44 +1,19 @@
-Library of HTTP server classes.
+# http_server
This package contains a set of high-level classes that, together with
HttpServer, makes is easy to provide content through HTTP servers.
-## Virtual directory
+**NOTE:** This package currently only works for
+server-side or command-line Dart applications. In other words, if the app
+imports `dart:io`, it can use this package.
-The VirtualDirectory class makes it possible to easy serve static content from
-the drive. It supports:
+## Using
- * Range-based request, making it possible to pause/resume downloads and stream
- videos.
- * If-Modified-Since based caching.
- * Automatic GZip-compression of content.
- * Ability to follow links within, either throughout the system or in a jailed
- root.
- * Optional directory listing.
+Please see the [API docs][docs] for explanations and examples.
- The following example shows how to set up a Virtual Directory of a given path
+## Filing issues
- var virtualDirectory = new VirtualDirectory('/var/www/');
- virtualDirectory.serve(new HttpServer('0.0.0.0', 8080));
+Please file issues for the http package at [http://dartbug.com/new][bugs].
-See [VirtualDirectory](
-http://api.dartlang.org/docs/http_server/VirtualDirectory.html)
-for more info about how to customize the class.
-
-## Virtual host
-
-The VirtualHost class makes it possible to serve multiple hosts on the same
-address, by using the `Host` field of the incoming requests. It also provides
-the ability to work on wildcards for sub-domains.
-
- var virtualHost = new VirtualHost(server);
- // Filter out on a specific host
- var stream1 = virtualServer.addHost('static.myserver.com');
- // Wildcard for any other sub-domains.
- var stream2 = virtualServer.addHost('*.myserver.com');
- // Requets not matching any hosts.
- var stream3 = virtualServer.unhandled;
-
-See [VirtualHost](
-http://api.dartlang.org/docs/http_server/VirtualHost.html)
-for more information.
+[bugs]: http://dartbug.com/new
+[docs]: https://api.dartlang.org/docs/channels/stable/latest/http_server.html
\ No newline at end of file
diff --git a/pkg/http_server/lib/http_server.dart b/pkg/http_server/lib/http_server.dart
index aad6401..afaf71c 100644
--- a/pkg/http_server/lib/http_server.dart
+++ b/pkg/http_server/lib/http_server.dart
@@ -2,6 +2,76 @@
// for details. All rights reserved. Use of this source code is governed by a
// BSD-style license that can be found in the LICENSE file.
+/**
+ * A library for serving HTTP requests and resources.
+ *
+ * ## Installing ##
+ *
+ * Use [pub][] to install this package. Add the following to your
+ * `pubspec.yaml` file.
+ *
+ * dependencies:
+ * http_server: any
+ *
+ * Then run `pub install`.
+ *
+ * For more information, see the
+ * [http_server package on pub.dartlang.org][pub].
+ *
+ * ## Basic usage
+ *
+ * Here is a short example of how to serve all files from the current
+ * directory.
+ *
+ * import 'dart:io';
+ * import 'dart:async';
+ * import 'package:http_server/http_server.dart';
+ *
+ * void main() {
+ * var staticFiles = new VirtualDirectory('.')
+ * ..allowDirectoryListing = true;
+ *
+ * runZoned(() {
+ * HttpServer.bind('0.0.0.0', 7777).then((server) {
+ * print('Server running');
+ * server.listen(staticFiles.serveRequest);
+ * });
+ * },
+ * onError: (e, stackTrace) => print('Oh noes! $e $stackTrace'));
+ * }
+ *
+ * ## Virtual directory
+ *
+ * The [VirtualDirectory] class makes it easy to serve static content
+ * from the file system. It supports:
+ *
+ * * Range-based requests.
+ * * If-Modified-Since based caching.
+ * * Automatic GZip-compression of content.
+ * * Following symlinks, either throughout the system or inside
+ * a jailed root.
+ * * Directory listing.
+ *
+ * See [VirtualDirectory] for more information.
+ *
+ * ## Virtual host
+ *
+ * The [VirtualHost] class helps to serve multiple hosts on the same
+ * address, by using the `Host` field of the incoming requests. It also
+ * works with wildcards for sub-domains.
+ *
+ * var virtualHost = new VirtualHost(server);
+ * // Filter out on a specific host
+ * var stream1 = virtualServer.addHost('static.myserver.com');
+ * // Wildcard for any other sub-domains.
+ * var stream2 = virtualServer.addHost('*.myserver.com');
+ * // Requets not matching any hosts.
+ * var stream3 = virtualServer.unhandled;
+ *
+ * See [VirtualHost] for more information.
+ *
+ * [pub]: http://pub.dartlang.org/packages/http_server
+ */
library http_server;
import 'dart:async';
diff --git a/pkg/http_server/pubspec.yaml b/pkg/http_server/pubspec.yaml
index 555569b..2c29396 100644
--- a/pkg/http_server/pubspec.yaml
+++ b/pkg/http_server/pubspec.yaml
@@ -1,12 +1,12 @@
name: http_server
-version: 0.9.0
+version: 0.9.1
author: Dart Team <misc@dartlang.org>
description: Library of HTTP server classes.
homepage: http://www.dartlang.org
documentation: http://api.dartlang.org/docs/pkg/http_server
dependencies:
mime: ">=0.9.0 <0.10.0"
- path: ">=0.9.0 <0.10.0"
+ path: ">=0.9.0 <2.0.0"
dev_dependencies:
unittest: ">=0.9.0 <0.10.0"
environment:
diff --git a/pkg/intl/README.md b/pkg/intl/README.md
new file mode 100644
index 0000000..74594b9
--- /dev/null
+++ b/pkg/intl/README.md
@@ -0,0 +1,306 @@
+Intl
+====
+
+This package provides internationalization and localization facilities,
+including message translation, plurals and genders, date/number formatting
+and parsing, and bidirectional text.
+
+## General
+The most important library is [intl][intl_lib]. It defines the [Intl][Intl]
+class, with the default locale and methods for accessing most of the
+internationalization mechanisms. This library also defines the
+[DateFormat][DateFormat], [NumberFormat][NumberFormat], and
+[BidiFormatter][BidiFormatter] classes.
+
+## Current locale
+
+The package has a single current locale, called [defaultLocale][defaultLocale].
+Operations will use that locale unless told to do otherwise.
+
+To set the global locale, you can explicitly set it, e.g.
+
+ Intl.defaultLocale = 'pt_BR';
+
+or get it from the browser by
+
+ import "package:intl/intl_browser.dart";
+ ...
+ findSystemLocale().then(runTheRestOfMyProgram);
+
+To temporarily override the current locale, pass the operation
+to [withLocale][withLocale].
+
+ Intl.withLocale('fr', () => print(myLocalizedMessage());
+
+To override it for a very specific operation you can create a format object in
+a specific locale, or pass in the locale as a parameter to methods.
+
+ var format = new DateFormat.yMd("ar");
+ var dateString = format.format(new DateTime.now());
+ print(myMessage(dateString, locale: 'ar');
+
+## Initialization
+
+All the different types of locale data require an async initialization step
+to make
+sure the data is available. This reduces the size of the application by only
+loading the
+data that is actually required. However, deferred loading does not yet work for
+multiple
+libraries, so currently all the code will be included anyay, increasing the code
+size in the short term.
+
+Each different area of internationalization (messages, dates, numbers) requires
+a separate initialization process. That way, if the application only needs to
+format dates, it doesn't need to take the time or space to load up messages,
+numbers, or other things it may not need.
+
+With messages, there is also a need to import a file that won't exist until
+the code generation step has been run. This can be awkward, but can be worked
+around by creating a stub `messages_all.dart` file, running an empty translation
+step, or commenting out the import until translations are available.
+See "Extracting and Using Translated Messages"
+
+## Messages
+
+Messages to be localized are written as functions that return the result of
+an [Intl.message][Intl.message] call.
+
+ String continueMessage() => Intl.message(
+ "Hit any key to continue",
+ name: "continueMessage",
+ args: [],
+ desc: "Explains that we will not proceed further until "
+ "the user presses a key");
+ print(continueMessage());
+
+This provides, in addition to the basic message string, a name, a
+description for translators, the arguments used in the message, and
+examples. The `name` and `args` parameters are required, and must
+match the name and arguments list of the function. In the future we
+hope to have these provided automatically.
+
+This can be run in the program before any translation has been done,
+and will just return the message string. It can also be extracted to a
+file and then be made to return a translated version without modifying
+the original program. See "Extracting Messages" below for more
+details.
+
+The purpose of wrapping the message in a function is to allow it to
+have parameters which can be used in the result. The message string is
+allowed to use a restricted form of Dart string interpolation, where
+only the function's parameters can be used, and only in simple
+expressions. Local variables cannot be used, and neither can
+expressions with curly braces. Only the message string can have
+interpolation. The name, desc, args, and examples must be literals and
+not contain interpolations. Only the args parameter can refer to
+variables, and it should list exactly the function parameters. If you
+are passing numbers or dates and you want them formatted, you must do
+the formatting outside the function and pass the formatted string into
+the message.
+
+ greetingMessage(name) => Intl.message(
+ "Hello $name!",
+ name: "greetingMessage",
+ args: [name],
+ desc: "Greet the user as they first open the application",
+ examples: {'name': "Emily"});
+ print(greetingMessage('Dan'));
+
+There is one special class of complex expressions allowed in the
+message string, for plurals and genders.
+
+ remainingEmailsMessage(int howMany, String userName) =>
+ Intl.message(
+ "${Intl.plural(howMany,
+ zero: 'There are no emails left for $userName.',
+ one: 'There is one email left for $userName.',
+ other: 'There are $howMany emails left for $userName.')}",
+ name: "remainingEmailsMessage",
+ args: [howMany, userName],
+ desc: "How many emails remain after archiving.",
+ examples: {'number': 42, 'userName': 'Fred'});
+
+ print(remainingEmailsMessage(1, "Fred"));
+
+However, since the typical usage for a plural or gender is for it to
+be at the top-level, we can also omit the [Intl.message][Intl.message] call and
+provide its parameters to the [Intl.plural][Intl.plural] call instead.
+
+ remainingEmailsMessage(int howMany, String userName) =>
+ Intl.plural(
+ howMany,
+ zero: 'There are no emails left for $userName.',
+ one: 'There is one email left for $userName.',
+ other: 'There are $howMany emails left for $userName.'),
+ name: "remainingEmailsMessage",
+ args: [howMany, userName],
+ desc: "How many emails remain after archiving.",
+ examples: {'number': 42, 'userName': 'Fred'});
+
+Similarly, there is an [Intl.gender][Intl.gender] message, and plurals
+and genders can be nested.
+
+ notOnlineMessage(String userName, String userGender) =>
+ Intl.gender(
+ userGender,
+ male: '$userName is unavailable because he is not online.',
+ female: '$userName is unavailable because she is not online.',
+ other: '$userName is unavailable because they are not online'),
+ name: "notOnlineMessage",
+ args: [userName, userGender],
+ desc: "The user is not available to hangout.",
+ examples: {{'userGender': 'male', 'userName': 'Fred'},
+ {'userGender': 'female', 'userName' : 'Alice'}});
+
+## Extracting And Using Translated Messages
+
+When your program contains messages that need translation, these must
+be extracted from the program source, sent to human translators, and the
+results need to be incorporated. This is still work in progress, and
+the extraction is done to a custom JSON format that is not supported
+by translation tools. We intend to support one or more actual
+translation file formats.
+
+To extract messages, run the `pkg/intl/test/extract_to_json.dart` program.
+
+ dart extract_to_json.dart --output-dir=target/directory
+ my_program.dart more_of_my_program.dart
+
+This will produce a file `intl_messages.json` with the messages from
+all of these programs. This is in a simple JSON format with a map from
+message names to message strings.
+
+The reverse step expects to receive a series of files, one per
+locale. These consist of a map with the entry for "_locale" indicating
+the locale, and with the function name mapped to the translated
+string. However, plurals and genders are currently represented in an
+opaque form, by serializing the internal objects that represent
+them. You can see the generation of this code in the
+`make_hardcoded_translation.dart` test file.
+
+If you manage to create such a set of input files, then you can run
+
+ dart generate_from_json.dart --generated_file_prefix=<prefix>
+ <my dart files> <translated json files>
+
+This will generate Dart libraries, one per locale, which contain the
+translated versions. Your Dart libraries can import the primary file,
+named `<prefix>messages_all.dart`, and then call the initialization
+for a specific locale. Once that's done, any
+[Intl.message][Intl.message] calls made in the context of that locale
+will automatically print the translated version instead of the
+original.
+
+ import "my_prefix_messages_all.dart";
+ ...
+ initializeMessages("dk").then(printSomeMessages);
+
+Once the future returned from the initialization call returns, the
+message data is available.
+
+## Number Formatting and Parsing
+
+To format a number, create a NumberFormat instance.
+
+ var f = new NumberFormat("###.0#", "en_US");
+ print(f.format(12.345));
+ ==> 12.34
+
+The locale parameter is optional. If omitted, then it will use the
+current locale. The format string is as described in
+[NumberFormat][NumberFormat]
+
+It's also possible to access the number symbol data for the current
+locale, which provides information as to the various separator
+characters, patterns, and other information used for formatting, as
+
+ f.symbols
+
+Current known limitations are that the currency format will only print
+the name of the currency, and does not support currency symbols, and
+that the scientific format does not really agree with scientific
+notation. Number parsing is not yet implemented.
+
+Note that before doing any number formatting for a particular locale
+you must load the appropriate data by calling
+
+ import 'package:intl/number_symbols_data_local.dart';
+ ...
+ initializeNumberFormatting(localeName, null).then(formatNumbers);
+
+Once the future returned from the initialization call returns, the
+formatting data is available. Note that right now this includes all
+the data for a locales. We expect to make this use deferred loading to
+reduce code size.
+
+## Date Formatting and Parsing
+
+To format a [DateTime][DateTime], create a [DateFormat][DateFormat]
+instance. These can be created using a set of commonly used skeletons
+taken from ICU/CLDR or using an explicit pattern. For details on the
+supported skeletons and patterns see [DateFormat][DateFormat].
+
+ new DateFormat.yMMMMEEEEd().format(aDateTime);
+ ==> 'Wednesday, January 10, 2012'
+ new DateFormat("EEEEE", "en_US").format(aDateTime);
+ ==> 'Wednesday'
+ new DateFormat("EEEEE", "ln").format(aDateTime);
+ ==> 'mokÉ”lÉ” mwa mísáto'
+
+You can also parse dates using the same skeletons or patterns.
+
+ new DateFormat.yMd("en_US").parse("1/10/2012");
+ new DateFormat("Hms", "en_US").parse('14:23:01');
+
+Skeletons can be combined, the main use being to print a full date and
+time, e.g.
+
+ new DateFormat.yMEd().add_jms().format(new DateTime.now());
+ ==> 'Thu, 5/23/2013 10:21:47 AM'
+
+Known limitations: Time zones are not yet supported. Dart
+[DateTime][DateTime] objects don't have a time zone, so are either
+local or UTC. Formatting and parsing Durations is not yet implemented.
+
+Note that before doing any DateTime formatting for a particular
+locale, you must load the appropriate data by calling.
+
+ import 'package:intl/date_symbol_data_local.dart';
+ ...
+ initializeDateFormatting("de_DE", null).then(formatDates);
+
+Once the future returned from the initialization call returns, the
+formatting data is available.
+
+There are other mechanisms for loading the date formatting data
+implemented, but we expect to deprecate those in favor of having the
+data in a library as in the above, and using deferred loading to only
+load the portions that are needed. For the time being, this will
+include all of the data, which will increase code size.
+
+## Bidirectional Text
+
+The class [BidiFormatter][BidiFormatter] provides utilities for
+working with Bidirectional text. We can wrap the string with unicode
+directional indicator characters or with an HTML span to indicate
+direction. The direction can be specified with the
+[RTL][BidiFormatter.RTL] and [LTR][BidiFormatter.LTR] constructors, or
+detected from the text.
+
+ new BidiFormatter.RTL().wrapWithUnicode('xyz');
+ new BidiFormatter.RTL().wrapWithSpan('xyz');
+
+[intl_lib]: https://api.dartlang.org/docs/channels/stable/latest/intl.html
+[Intl]: https://api.dartlang.org/docs/channels/stable/latest/intl/Intl.html
+[DateFormat]: https://api.dartlang.org/docs/channels/stable/latest/intl/DateFormat.html
+[NumberFormat]: https://api.dartlang.org/docs/channels/stable/latest/intl/NumberFormat.html
+[withLocale]: https://api.dartlang.org/docs/channels/stable/latest/intl/Intl.html#withLocale
+[defaultLocale]: https://api.dartlang.org/docs/channels/stable/latest/intl/Intl.html#defaultLocale
+[Intl.message]: https://api.dartlang.org/docs/channels/stable/latest/intl/Intl.html#message
+[Intl.plural]: https://api.dartlang.org/docs/channels/stable/latest/intl/Intl.html#plural
+[Intl.gender]: https://api.dartlang.org/docs/channels/stable/latest/intl/Intl.html#gender
+[DateTime]: https://api.dartlang.org/docs/channels/stable/latest/dart_core/DateTime.html
+[BidiFormatter]: https://api.dartlang.org/docs/channels/stable/latest/intl/BidiFormatter.html
+[BidiFormatter.RTL]: https://api.dartlang.org/docs/channels/stable/latest/intl/BidiFormatter.html#RTL
+[BidiFormatter.LTR]: https://api.dartlang.org/docs/channels/stable/latest/intl/BidiFormatter.html#LTR
diff --git a/pkg/intl/lib/extract_messages.dart b/pkg/intl/lib/extract_messages.dart
index e57574d..b140dfb 100644
--- a/pkg/intl/lib/extract_messages.dart
+++ b/pkg/intl/lib/extract_messages.dart
@@ -147,7 +147,7 @@
*/
void visitMethodDeclaration(MethodDeclaration node) {
parameters = node.parameters;
- if (parameters == null) parameters = new FormalParameterList();
+ if (parameters == null) parameters = new FormalParameterList(null, [], null, null, null);
name = node.name.name;
super.visitMethodDeclaration(node);
}
@@ -158,7 +158,7 @@
*/
void visitFunctionDeclaration(FunctionDeclaration node) {
parameters = node.functionExpression.parameters;
- if (parameters == null) parameters = new FormalParameterList();
+ if (parameters == null) parameters = new FormalParameterList(null, [], null, null, null);
name = node.name.name;
super.visitFunctionDeclaration(node);
}
diff --git a/pkg/intl/lib/intl.dart b/pkg/intl/lib/intl.dart
index 87a8101..d14cb12 100644
--- a/pkg/intl/lib/intl.dart
+++ b/pkg/intl/lib/intl.dart
@@ -7,27 +7,17 @@
* message formatting and replacement, date and number formatting and parsing,
* and utilities for working with Bidirectional text.
*
- * ## Installing ##
- *
- * Use [pub][] to install this package. Add the following to your `pubspec.yaml`
- * file.
- *
- * dependencies:
- * intl: any
- *
- * Then run `pub install`.
- *
- * For more information, see the
- * [intl package on pub.dartlang.org](http://pub.dartlang.org/packages/intl).
+ * This is part of the [intl package]
+ * (http://pub.dartlang.org/packages/intl).
*
* For things that require locale or other data, there are multiple different
* ways of making that data available, which may require importing different
* libraries. See the class comments for more details.
*
* There is also a simple example application that can be found in the
- * `example/basic` directory.
- *
- * [pub]: http://pub.dartlang.org
+ * [example/basic]
+ * (https://code.google.com/p/dart/source/browse/#svn%2Fbranches%2Fbleeding_edge%2Fdart%2Fpkg%2Fintl%2Fexample%2Fbasic)
+ * directory.
*/
library intl;
@@ -66,7 +56,7 @@
* args: [date],
* desc: 'Indicate the current date',
* examples: {'date' : 'June 8, 2012'});
- * print(today(new DateTime.now());
+ * print(today(new DateTime.now().toString());
*
* msg(num_people, place) => Intl.message(
* '''I see ${Intl.plural(num_people,
@@ -81,7 +71,6 @@
* Calling `msg(2, 'Athens');` would
* produce "I see 2 other people in Athens." as output in the default locale.
*
- * To use a locale other than the default, use the `withLocale` function.
* You can set the default locale.
* Intl.defaultLocale = "pt_BR";
*
diff --git a/pkg/intl/pubspec.yaml b/pkg/intl/pubspec.yaml
index 97bce62..44b4944 100644
--- a/pkg/intl/pubspec.yaml
+++ b/pkg/intl/pubspec.yaml
@@ -1,12 +1,12 @@
name: intl
-version: 0.9.0
+version: 0.9.1
author: Dart Team <misc@dartlang.org>
description: Contains code to deal with internationalized/localized messages, date and number formatting and parsing, bi-directional text, and other internationalization issues.
homepage: http://www.dartlang.org
documentation: http://api.dartlang.org/docs/pkg/intl
dependencies:
analyzer: ">=0.10.1 <0.11.0"
- path: ">=0.9.0 <0.10.0"
+ path: ">=0.9.0 <2.0.0"
dev_dependencies:
serialization: ">=0.9.0 <0.10.0"
unittest: ">=0.9.0 <0.10.0"
diff --git a/pkg/intl/test/date_time_format_test_core.dart b/pkg/intl/test/date_time_format_test_core.dart
index 5d39090..65461e2 100644
--- a/pkg/intl/test/date_time_format_test_core.dart
+++ b/pkg/intl/test/date_time_format_test_core.dart
@@ -423,4 +423,18 @@
var aDate = new DateTime(2012, 4, 27, 13, 58, 59, 012);
expect(f.format(aDate), "118");
});
+
+ // There are some very odd off-by-one bugs when parsing dates. Put in
+ // some very basic tests to try and get more information.
+ test('Simple Date Creation', () {
+ var format = new DateFormat(DateFormat.NUM_MONTH);
+ var first = format.parse("7");
+ var second = format.parse("7");
+ var basic = new DateTime(1970, 7);
+ var basicAgain = new DateTime(1970, 7);
+ expect(first, second);
+ expect(first, basic);
+ expect(basic, basicAgain);
+ expect(first.month, 7);
+ });
}
\ No newline at end of file
diff --git a/pkg/intl/test/date_time_format_test_stub.dart b/pkg/intl/test/date_time_format_test_stub.dart
index 1aa1577..0a70535 100644
--- a/pkg/intl/test/date_time_format_test_stub.dart
+++ b/pkg/intl/test/date_time_format_test_stub.dart
@@ -53,7 +53,7 @@
setUp(() {
if(initialized) {
- return;
+ return null;
}
return initFunction("en_US", dir)
.then((_) {
diff --git a/pkg/logging/AUTHORS b/pkg/logging/AUTHORS
new file mode 100644
index 0000000..0617765
--- /dev/null
+++ b/pkg/logging/AUTHORS
@@ -0,0 +1,9 @@
+# Names should be added to this file with this pattern:
+#
+# For individuals:
+# Name <email address>
+#
+# For organizations:
+# Organization <fnmatch pattern>
+#
+Google Inc. <*@google.com>
diff --git a/pkg/logging/LICENSE b/pkg/logging/LICENSE
new file mode 100644
index 0000000..ee99930
--- /dev/null
+++ b/pkg/logging/LICENSE
@@ -0,0 +1,26 @@
+Copyright 2013, the Dart project authors. All rights reserved.
+Redistribution and use in source and binary forms, with or without
+modification, are permitted provided that the following conditions are
+met:
+
+ * Redistributions of source code must retain the above copyright
+ notice, this list of conditions and the following disclaimer.
+ * Redistributions in binary form must reproduce the above
+ copyright notice, this list of conditions and the following
+ disclaimer in the documentation and/or other materials provided
+ with the distribution.
+ * Neither the name of Google Inc. nor the names of its
+ contributors may be used to endorse or promote products derived
+ from this software without specific prior written permission.
+
+THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
diff --git a/pkg/logging/PATENTS b/pkg/logging/PATENTS
new file mode 100644
index 0000000..6954196
--- /dev/null
+++ b/pkg/logging/PATENTS
@@ -0,0 +1,23 @@
+Additional IP Rights Grant (Patents)
+
+"This implementation" means the copyrightable works distributed by
+Google as part of the Dart Project.
+
+Google hereby grants to you a perpetual, worldwide, non-exclusive,
+no-charge, royalty-free, irrevocable (except as stated in this
+section) patent license to make, have made, use, offer to sell, sell,
+import, transfer, and otherwise run, modify and propagate the contents
+of this implementation of Dart, where such license applies only to
+those patent claims, both currently owned by Google and acquired in
+the future, licensable by Google that are necessarily infringed by
+this implementation of Dart. This grant does not include claims that
+would be infringed only as a consequence of further modification of
+this implementation. If you or your agent or exclusive licensee
+institute or order or agree to the institution of patent litigation
+against any entity (including a cross-claim or counterclaim in a
+lawsuit) alleging that this implementation of Dart or any code
+incorporated within this implementation of Dart constitutes direct or
+contributory patent infringement, or inducement of patent
+infringement, then any patent rights granted to you under this License
+for this implementation of Dart shall terminate as of the date such
+litigation is filed.
diff --git a/pkg/logging/pubspec.yaml b/pkg/logging/pubspec.yaml
index 334113f..098558c 100644
--- a/pkg/logging/pubspec.yaml
+++ b/pkg/logging/pubspec.yaml
@@ -1,11 +1,14 @@
name: logging
-version: 0.9.1-dev
+version: 0.9.1
author: Dart Team <misc@dartlang.org>
-description: Provides APIs for debugging and error logging. This library introduces abstractions similar to those used in other languages, such as the Closure JS Logger and java.util.logging.Logger.
+description: >
+ Provides APIs for debugging and error logging. This library introduces
+ abstractions similar to those used in other languages, such as the Closure
+ JS Logger and java.util.logging.Logger.
homepage: http://www.dartlang.org
documentation: http://api.dartlang.org/docs/pkg/logging
environment:
- sdk: '>=0.8.10+6 <2.0.0'
+ sdk: '>=1.0.0 <2.0.0'
dependencies:
collection_helpers: '>=0.9.1 <0.10.0'
dev_dependencies:
diff --git a/pkg/mutation_observer/pubspec.yaml b/pkg/mutation_observer/pubspec.yaml
index 4d320c3..631de39 100644
--- a/pkg/mutation_observer/pubspec.yaml
+++ b/pkg/mutation_observer/pubspec.yaml
@@ -1,6 +1,6 @@
name: mutation_observer
version: 0.9.0
-author: "Web UI Team <web-ui-dev@dartlang.org>"
+author: "Polymer.dart Team <web-ui-dev@dartlang.org>"
homepage: https://code.google.com/p/dart/source/browse/branches/bleeding_edge/dart/pkg/mutation_observer/
documentation: https://api.dartlang.org/docs/releases/latest/dart_html/MutationObserver.html
description: >
@@ -8,4 +8,4 @@
dev_dependencies:
unittest: ">=0.9.0 <0.10.0"
environment:
- sdk: ">=0.8.10+6 <2.0.0"
+ sdk: ">=1.0.0 <2.0.0"
diff --git a/pkg/observe/lib/src/path_observer.dart b/pkg/observe/lib/src/path_observer.dart
index bec7eb8..5e59b80 100644
--- a/pkg/observe/lib/src/path_observer.dart
+++ b/pkg/observe/lib/src/path_observer.dart
@@ -334,9 +334,12 @@
ClassMirror _safeSuperclass(ClassMirror type) {
try {
return type.superclass;
- } on UnsupportedError catch (e) {
- // TODO(jmesserly): dart2js throws this error when the type is not
+ } /*on UnsupportedError*/ catch (e) {
+ // Note: dart2js throws UnsupportedError when the type is not
// reflectable.
+ // TODO(jmesserly): dart2js also throws a NoSuchMethodError if the `type` is
+ // a bound generic, because they are not fully implemented. See
+ // https://code.google.com/p/dart/issues/detail?id=15573
return objectType;
}
}
diff --git a/pkg/observe/pubspec.yaml b/pkg/observe/pubspec.yaml
index 75dd77a..0bb50ce 100644
--- a/pkg/observe/pubspec.yaml
+++ b/pkg/observe/pubspec.yaml
@@ -1,5 +1,5 @@
name: observe
-version: 0.9.1+1
+version: 0.9.2
author: Polymer.dart Authors <web-ui-dev@dartlang.org>
description: >
Observable properties and objects for use in Model-Driven-Views (MDV).
@@ -12,7 +12,7 @@
analyzer: ">=0.10.1 <0.11.0"
barback: ">=0.9.0 <0.11.0"
logging: ">=0.9.0 <0.10.0"
- path: ">=0.9.0 <0.10.0"
+ path: ">=0.9.0 <2.0.0"
source_maps: ">=0.9.0 <0.10.0"
dev_dependencies:
unittest: ">=0.9.0 <0.10.0"
diff --git a/pkg/path/pubspec.yaml b/pkg/path/pubspec.yaml
index 491c3bc..3b555a1 100644
--- a/pkg/path/pubspec.yaml
+++ b/pkg/path/pubspec.yaml
@@ -1,5 +1,5 @@
name: path
-version: 1.0.0-rc.1
+version: 1.0.0
author: Dart Team <misc@dartlang.org>
description: >
A string-based path manipulation library. All of the path operations you know
diff --git a/pkg/pkg.status b/pkg/pkg.status
index e6b3e7b..9c4ab8b 100644
--- a/pkg/pkg.status
+++ b/pkg/pkg.status
@@ -31,14 +31,15 @@
collection_helpers/test/equality_test/none: Pass, Fail # Issue 14348
collection_helpers/test/typed_buffers_test/01: Fail # Not supporting Int64List, Uint64List.
+[ $compiler == dart2js && $checked ]
+crypto/test/base64_test: Slow, Pass
+
[ $compiler == dart2js && $checked && $runtime == ie9 ]
crypto/test/base64_test: Timeout # Issue 12486
-
-[ $compiler == dart2js && $checked && $runtime == d8 ]
-serialization/test/serialization_test: Pass, RuntimeError # Issue 14735
+serialization/test/serialization_test: Skip
[ $runtime == d8 || $runtime == jsshell ]
-unittest/test/unittest_nested_groups_setup_teardown_test: Pass, RuntimeError # http://dartbug.com/10109
+unittest/test/unittest_nested_groups_setup_teardown_test: RuntimeError # http://dartbug.com/10109
stack_trace/test/vm_test: RuntimeError, OK # VM-specific traces
stack_trace/test/chain_test: Fail # Issues 15171 and 15105
sequence_zip/test/stream_test: RuntimeError, OK # Timers are not supported.
@@ -51,6 +52,7 @@
polymer/test/bind_test: Skip # uses dart:html
polymer/test/bind_mdv_test: Skip # uses dart:html
polymer/test/custom_event_test: Skip # uses dart:html
+polymer/test/entered_view_test: Skip # uses dart:html
polymer/test/event_handlers_test: Skip #uses dart:html
polymer/test/event_path_declarative_test: Skip #uses dart:html
polymer/test/event_path_test: Skip #uses dart:html
@@ -93,38 +95,33 @@
[ $runtime == safari ]
fixnum/test/int_64_test: Pass, Fail # Bug in JSC.
-crypto/test/hmac_sha1_test: Pass, Fail # Issue 11407.
-crypto/test/sha1_test: Fail # Issue 11407.
-stack_trace/test/trace_test: Fail # http://dartbug.com/12380
-crypto/test/sha256_test: Pass, Fail # Issue 12502
-crypto/test/hmac_sha256_test: Pass, Fail # Issue 12502
# Unexplained errors only occuring on Safari.
collection_helpers/test/typed_buffers_test: RuntimeError
[ $runtime == ie9 || $runtime == ie10 ]
polymer/example/canonicalization/test/canonicalization_deploy_test: Pass, Timeout
-polymer/example/canonicalization/test/canonicalization_test: Fail, Timeout, OK # tests development only behavior
+polymer/example/canonicalization/test/canonicalization_test: Timeout, OK # tests development only behavior
polymer/test/attr_deserialize_test: Pass, Timeout # Issue 13260
polymer/test/attr_mustache_test: Pass, Timeout # Issue 13260
-polymer/test/bind_test: Pass, Timeout # Issue 13260
-polymer/test/bind_mdv_test: Fail, Timeout # Issue 14412, 13260
-polymer/test/custom_event_test: Pass, Timeout # Issue 13260
-polymer/test/event_handlers_test: Pass, Timeout # Issue 13260
-polymer/test/event_path_declarative_test: Pass, Timeout # Issue 13260
-polymer/test/event_path_test: Pass, Timeout # Issue 13260
-polymer/test/events_test: Pass, Timeout # Issue 13260
-polymer/test/nested_binding_test: Pass, Timeout # Issue 13260
-polymer/test/noscript_test: Pass, Timeout # Issue 13260
-polymer/test/property_change_test: Pass, Timeout # Issue 13260
-polymer/test/prop_attr_reflection_test: Pass, Timeout # Issue 13260
-polymer/test/prop_attr_bind_reflection_test: Pass, Timeout # Issue 13260
-polymer/test/publish_attributes_test: Pass, Timeout # Issue 13260
-polymer/test/publish_inherited_properties_test: Pass, Timeout # Issue 13260
-polymer/test/register_test: Pass, Timeout # Issue 13260
-polymer/test/take_attributes_test: Pass, Timeout # Issue 13260
+polymer/test/bind_test: Timeout # Issue 13260
+polymer/test/bind_mdv_test: RuntimeError # Issue 14412, 13260
+polymer/test/custom_event_test: Timeout # Issue 13260
+polymer/test/entered_view_test: Timeout # Issue 13260
+polymer/test/event_handlers_test: Timeout # Issue 13260
+polymer/test/event_path_declarative_test: Timeout # Issue 13260
+polymer/test/event_path_test: Timeout # Issue 13260
+polymer/test/events_test: Timeout # Issue 13260
+polymer/test/nested_binding_test: Timeout # Issue 13260
+polymer/test/noscript_test: Timeout # Issue 13260
+polymer/test/property_change_test: Timeout # Issue 13260
+polymer/test/prop_attr_reflection_test: Timeout # Issue 13260
+polymer/test/prop_attr_bind_reflection_test: Timeout # Issue 13260
+polymer/test/publish_attributes_test: Timeout # Issue 13260
+polymer/test/publish_inherited_properties_test: Timeout # Issue 13260
+polymer/test/take_attributes_test: Timeout # Issue 13260
polymer/test/template_distribute_dynamic_test: Pass, Timeout # Issue 13260
-polymer/test/unbind_test: Pass, Fail, Timeout # Issue 13260, 15259
+polymer/test/unbind_test: Timeout # Issue 13260, 15259
# Skip browser-specific tests on VM
[ $runtime == vm ]
@@ -136,9 +133,6 @@
docgen/test/single_library_test: Fail # Issue 11985
intl/test/find_default_locale_standalone_test: Fail # Issue 8110
-[ $compiler == dart2js ]
-stack_trace/test/trace_test: Pass, Timeout # Issue 11645
-
[ $compiler == dartanalyzer ]
# These tests are runtime negative but statically positive, so we skip
# them in the analyzer.
@@ -181,18 +175,15 @@
docgen/test/single_library_test: Fail # TODO(kasperl): Please triage.
intl/test/date_time_format_http_request_test: Fail # TODO(kasperl): Please triage.
-[ $compiler == none && $runtime == vm && $system == windows ]
-http_server/test/http_body_test: Pass, Fail # Issue 14381
-
[ $browser ]
analyzer/test/generated/ast_test: Fail, OK # Uses dart:io.
analyzer/test/generated/element_test: Fail, OK # Uses dart:io.
analyzer/test/generated/parser_test: Fail, OK # Uses dart:io.
analyzer/test/generated/resolver_test: Fail, OK # Uses dart:io.
-analyzer/test/error_test: Fail, Timeout, OK # Uses dart:io.
+analyzer/test/error_test: Fail, OK # Uses dart:io.
analyzer/test/generated/element_test: Fail, OK # Uses dart:io.
analyzer/test/generated/resolver_test: Fail, OK # Uses dart:io.
-analyzer/test/options_test: Fail, OK, Pass # Uses dart:io.
+analyzer/test/options_test: Fail, OK # Uses dart:io.
analyzer/test/services/formatter_test: Fail, OK # Uses dart:io.
analyzer/test/parse_compilation_unit_test: Fail, OK # Uses dart:io.
barback/test/*: Fail, OK # Uses dart:io.
@@ -250,10 +241,6 @@
polymer/test/unbind_test: Pass, Fail # Issue 15259
-[ $runtime == safari]
- # Bug in JSC: the test only passes when being debugged.
-crypto/test/hmac_md5_test: Fail, Pass
-
[ $minified == false ]
# The minified unittest tests test that the minified names of Dart types are
# printed. Unminified versions of these tests exist that test the behavior when
@@ -267,7 +254,7 @@
*: Skip # Issue 13624
[ $arch == simarm || $arch == simmips ]
-barback/test/too_many_open_files_test: Pass, Slow, Fail # 14220
+barback/test/too_many_open_files_test: Skip # 14220
third_party/html5lib/test/tokenizer_test: Pass, Slow
# Skip serialization test that explicitly has no library declaration in the
@@ -298,6 +285,9 @@
polymer/test/custom_event_test: Pass, Crash # 14360
polymer/example/canonicalization/test/canonicalization_deploy_test: Fail, OK # tests deploy only behavior
+[ $compiler == none && ( $runtime == dartium || $runtime == drt ) && $checked ]
+polymer/test/custom_event_test: Skip # http://dartbug.com/15517
+
# Skip tests on the VM if the package depends on dart:html
[ $runtime == vm ]
custom_element: Skip
@@ -315,9 +305,6 @@
[ $browser || $runtime == vm ]
unittest/test/missing_tick_test: Fail, OK # Expected to fail, due to timeout.
-# Issue http://dartbug.com/12930
-[ $runtime == vm ]
-intl/test/message_extraction/message_extraction_test: Pass, Fail # Issue 12930
[ $compiler == none && ($runtime == dartium || $runtime == drt) ]
source_maps/test/parser_test: Pass, Timeout # Issue 13719: Please triage this failure.
@@ -335,11 +322,6 @@
http/test/multipart_test: StaticWarning
http/test/request_test: StaticWarning
http/test/streamed_request_test: StaticWarning
-intl/test/date_time_format_file_even_test: StaticWarning
-intl/test/date_time_format_file_odd_test: StaticWarning
-intl/test/date_time_format_http_request_test: StaticWarning
-intl/test/date_time_format_local_even_test: StaticWarning
-intl/test/date_time_format_local_odd_test: StaticWarning
unittest/test/matchers_test: StaticWarning, OK # testing error creating abstract class
unittest/test/mock_test: StaticWarning, OK # testing unimplemented members
@@ -348,3 +330,6 @@
[ $runtime == vm && ($system == windows || $system == linux) ]
watcher/test/*/mac_os_test: Skip
+
+[ $runtime == vm && $system == macos ]
+watcher/test/directory_watcher/mac_os_test: Pass, Fail # Issue 15024
diff --git a/pkg/polymer/CHANGELOG.md b/pkg/polymer/CHANGELOG.md
new file mode 100644
index 0000000..d2e3eba
--- /dev/null
+++ b/pkg/polymer/CHANGELOG.md
@@ -0,0 +1,14 @@
+# changelog
+
+This file contains highlights of what changes on each version of the polymer
+package. We will also note important changes to the polyfill packages if they
+impact polymer: custom_element, html_import, observe, shadow_dom,
+and template_binding.
+
+#### Pub version 0.9.2+3
+ * fix [15574](https://code.google.com/p/dart/issues/detail?id=15574),
+ event bindings in dart2js, by working around issue
+ [15573](https://code.google.com/p/dart/issues/detail?id=15573)
+
+#### Pub version 0.9.2+2
+ * fix enteredView in dart2js, by using custom_element >= 0.9.1+1
diff --git a/pkg/polymer/README.md b/pkg/polymer/README.md
index d55786d..a940c3e 100644
--- a/pkg/polymer/README.md
+++ b/pkg/polymer/README.md
@@ -40,7 +40,7 @@
```yaml
dependencies:
- polymer: any
+ polymer: ">=0.9.0 <0.10.0"
```
Instead of using `any`, we recommend using version ranges to avoid getting your
@@ -48,6 +48,7 @@
package at your own pace. You can find the latest version number at
<https://pub.dartlang.org/packages/polymer>.
+
Building and Deploying
----------------------
diff --git a/pkg/polymer/example/canonicalization/test/canonicalization_deploy_test.html b/pkg/polymer/example/canonicalization/test/canonicalization_deploy_test.html
index 2f346f4..37bd302 100644
--- a/pkg/polymer/example/canonicalization/test/canonicalization_deploy_test.html
+++ b/pkg/polymer/example/canonicalization/test/canonicalization_deploy_test.html
@@ -10,7 +10,7 @@
<title>Tests canonicalization at deployment time</title>
<link rel="import" href="packages/canonicalization/a.html">
<link rel="import" href="packages/canonicalization/b.html">
- <script src="packages/unittest/test_controller.js"></script>
+ <script src="/root_dart/tools/testing/dart/test_controller.js"></script>
</head>
<body>
<script type="application/dart" src="canonicalization_deploy_test.dart"></script>
diff --git a/pkg/polymer/example/canonicalization/test/canonicalization_test.html b/pkg/polymer/example/canonicalization/test/canonicalization_test.html
index fd9c8d9..8e94f83 100644
--- a/pkg/polymer/example/canonicalization/test/canonicalization_test.html
+++ b/pkg/polymer/example/canonicalization/test/canonicalization_test.html
@@ -10,7 +10,7 @@
<title>Tests canonicalization during the development cycle</title>
<link rel="import" href="packages/canonicalization/a.html">
<link rel="import" href="packages/canonicalization/b.html">
- <script src="packages/unittest/test_controller.js"></script>
+ <script src="/root_dart/tools/testing/dart/test_controller.js"></script>
</head>
<body>
<script type="application/dart" src="canonicalization_test.dart"></script>
diff --git a/pkg/polymer/example/component/news/test/news_index_test.html b/pkg/polymer/example/component/news/test/news_index_test.html
index 1666751..cc0b98d 100644
--- a/pkg/polymer/example/component/news/test/news_index_test.html
+++ b/pkg/polymer/example/component/news/test/news_index_test.html
@@ -8,7 +8,7 @@
<!--polymer-test: this comment is needed for test_suite.dart-->
<title>Simple Web Components Example</title>
<link rel="import" href="../web/news-component.html">
- <script src="packages/unittest/test_controller.js"></script>
+ <script src="/root_dart/tools/testing/dart/test_controller.js"></script>
</head>
<body>
<h1>Simple Web Components Example</h1>
diff --git a/pkg/polymer/lib/src/build/linter.dart b/pkg/polymer/lib/src/build/linter.dart
index 3c5fa20..75374f5 100644
--- a/pkg/polymer/lib/src/build/linter.dart
+++ b/pkg/polymer/lib/src/build/linter.dart
@@ -220,7 +220,6 @@
class _LinterVisitor extends TreeVisitor {
TransformLogger _logger;
bool _inPolymerElement = false;
- bool _dartJSSeen = false;
bool _dartTagSeen = false;
bool _isEntrypoint;
Map<String, _ElementSummary> _elements;
@@ -369,11 +368,6 @@
_logger.warning(BOOT_JS_DEPRECATED, span: node.sourceSpan);
return;
}
- if (src == 'packages/browser/dart.js' ||
- src == 'packages/unittest/test_controller.js') {
- _dartJSSeen = true;
- return;
- }
if (src.endsWith('.dart') && !isDart) {
_logger.warning('Wrong script type, expected type="application/dart".',
diff --git a/pkg/polymer/lib/src/instance.dart b/pkg/polymer/lib/src/instance.dart
index b9b81bf..c0af66c 100644
--- a/pkg/polymer/lib/src/instance.dart
+++ b/pkg/polymer/lib/src/instance.dart
@@ -745,8 +745,6 @@
* the bound path at event execution time.
*/
// from src/instance/event.js#prepareBinding
- // Dart note: template_binding doesn't have the notion of prepareBinding, so
- // we implement this by wrapping/overriding getBinding instead.
// TODO(sorvell): we're patching the syntax while evaluating
// event bindings. we'll move this to a better spot when that's done
static PrepareBindingFunction prepareBinding(String path, String name, node,
@@ -765,10 +763,9 @@
var translated = _eventTranslations[eventName];
eventName = translated != null ? translated : eventName;
- // TODO(jmesserly): returning a StreamSubscription as the model is quite
- // strange. package:template_binding doesn't have any cleanup logic to
- // handle that.
- return node.on[eventName].listen((event) {
+ // TODO(jmesserly): we need a place to unregister this. See:
+ // https://code.google.com/p/dart/issues/detail?id=15574
+ node.on[eventName].listen((event) {
var ctrlr = _findController(node);
if (ctrlr is! Polymer) return;
var obj = ctrlr;
@@ -781,6 +778,10 @@
(event as CustomEvent).detail : null;
ctrlr.dispatchMethod(obj, method, [event, detail, node]);
});
+
+ // TODO(jmesserly): this return value is bogus. Returning null here causes
+ // the wrong thing to happen in template_binding.
+ return new ObservableBox();
};
}
@@ -937,7 +938,7 @@
} else {
// find the shadow root that contains this element
var n = this;
- while (n.parentNode) {
+ while (n.parentNode != null) {
n = n.parentNode;
}
return identical(n, document) ? document.head : n;
diff --git a/pkg/polymer/pubspec.yaml b/pkg/polymer/pubspec.yaml
index ba87001..db8f3ce 100644
--- a/pkg/polymer/pubspec.yaml
+++ b/pkg/polymer/pubspec.yaml
@@ -1,5 +1,5 @@
name: polymer
-version: 0.9.1+1
+version: 0.9.2+3
author: Polymer.dart Authors <web-ui-dev@dartlang.org>
description: >
Polymer.dart is a new type of library for the web, built on top of Web
@@ -12,12 +12,12 @@
barback: ">=0.9.0 <0.11.0"
browser: ">=0.9.0 <0.10.0"
csslib: ">=0.9.0 <0.10.0"
- custom_element: ">=0.9.0 <0.10.0"
+ custom_element: ">=0.9.1+1 <0.10.0"
html5lib: ">=0.9.1 <0.10.0"
html_import: ">=0.9.0 <0.10.0"
logging: ">=0.9.0 <0.10.0"
observe: ">=0.9.1 <0.10.0"
- path: ">=0.9.0 <0.10.0"
+ path: ">=0.9.0 <2.0.0"
polymer_expressions: ">=0.9.1 <0.10.0"
shadow_dom: ">=0.9.1 <0.10.0"
source_maps: ">=0.9.0 <0.10.0"
diff --git a/pkg/polymer/test/attr_deserialize_test.html b/pkg/polymer/test/attr_deserialize_test.html
index c6592af..db516de 100644
--- a/pkg/polymer/test/attr_deserialize_test.html
+++ b/pkg/polymer/test/attr_deserialize_test.html
@@ -8,7 +8,7 @@
<!--polymer-test: this comment is needed for test_suite.dart-->
<head>
<title>Polymer.dart attribute deserialization test</title>
- <script src="packages/unittest/test_controller.js"></script>
+ <script src="/root_dart/tools/testing/dart/test_controller.js"></script>
</head>
<body>
<polymer-element name="my-element">
diff --git a/pkg/polymer/test/attr_mustache_test.html b/pkg/polymer/test/attr_mustache_test.html
index 9bc3a77..f41a3d5 100644
--- a/pkg/polymer/test/attr_mustache_test.html
+++ b/pkg/polymer/test/attr_mustache_test.html
@@ -8,7 +8,7 @@
<head>
<!--polymer-test: this comment is needed for test_suite.dart-->
<title>take attributes</title>
- <script src="packages/unittest/test_controller.js"></script>
+ <script src="/root_dart/tools/testing/dart/test_controller.js"></script>
</head>
<body>
<x-test id="test"></x-test>
diff --git a/pkg/polymer/test/bind_test.html b/pkg/polymer/test/bind_test.html
index 65aa6aa..6cd8640 100644
--- a/pkg/polymer/test/bind_test.html
+++ b/pkg/polymer/test/bind_test.html
@@ -8,7 +8,7 @@
<!--polymer-test: this comment is needed for test_suite.dart-->
<head>
<title>bind simple</title>
- <script src="packages/unittest/test_controller.js"></script>
+ <script src="/root_dart/tools/testing/dart/test_controller.js"></script>
</head>
<body>
<x-foo></x-foo>
diff --git a/pkg/polymer/test/custom_event_test.dart b/pkg/polymer/test/custom_event_test.dart
index 0a6b197..eef68e0 100644
--- a/pkg/polymer/test/custom_event_test.dart
+++ b/pkg/polymer/test/custom_event_test.dart
@@ -7,6 +7,7 @@
import 'dart:async';
import 'dart:html';
import 'package:polymer/polymer.dart';
+import 'package:template_binding/template_binding.dart' show nodeBind;
import 'package:unittest/unittest.dart';
import 'package:unittest/html_config.dart';
@@ -50,6 +51,13 @@
test('custom event', () {
final testComp = query('test-custom-event');
final fooBar = testComp.fooBar;
+
+ final binding = nodeBind(fooBar).bindings['on-barbaz'];
+ expect(binding, isNotNull, reason: 'on-barbaz event should be bound');
+
+ expect(binding.model is! StreamSubscription, true,
+ reason: 'event bindings should not be a StreamSubscription');
+
fooBar.fireFoo(123);
fooBar.fireBarBaz(42);
fooBar.fireFoo(777);
diff --git a/pkg/polymer/test/custom_event_test.html b/pkg/polymer/test/custom_event_test.html
index 7fa99b6..a17553a 100644
--- a/pkg/polymer/test/custom_event_test.html
+++ b/pkg/polymer/test/custom_event_test.html
@@ -8,7 +8,7 @@
<head>
<!--polymer-test: this comment is needed for test_suite.dart-->
<title>custom events</title>
- <script src="packages/unittest/test_controller.js"></script>
+ <script src="/root_dart/tools/testing/dart/test_controller.js"></script>
</head>
<body>
diff --git a/pkg/polymer/test/entered_view_test.dart b/pkg/polymer/test/entered_view_test.dart
new file mode 100644
index 0000000..c9f7b34
--- /dev/null
+++ b/pkg/polymer/test/entered_view_test.dart
@@ -0,0 +1,54 @@
+// Copyright (c) 2013, the Dart project authors. Please see the AUTHORS file
+// for details. All rights reserved. Use of this source code is governed by a
+// BSD-style license that can be found in the LICENSE file.
+
+library polymer.test.entered_view_test;
+
+import 'dart:async';
+import 'dart:html';
+import 'package:polymer/polymer.dart';
+import 'package:unittest/unittest.dart';
+import 'package:unittest/html_config.dart';
+import 'package:unittest/matcher.dart';
+
+@reflectable
+class XOuter extends PolymerElement {
+ @observable bool expand = false;
+
+ XOuter.created() : super.created();
+}
+
+@reflectable
+class XInner extends PolymerElement {
+ int enteredCount = 0;
+
+ XInner.created() : super.created();
+
+ enteredView() {
+ enteredCount++;
+ super.enteredView();
+ }
+}
+
+main() => initPolymer().run(_tests);
+
+_tests() {
+ useHtmlConfiguration();
+ Polymer.register('x-inner', XInner);
+ Polymer.register('x-outer', XOuter);
+
+ setUp(() => Polymer.onReady);
+
+ test('element created properly', () {
+ XOuter outer = query('x-outer');
+ outer.expand = true;
+ return outer.onMutation(outer.shadowRoot).then((_) {
+ // Element upgrade is also using mutation observers. Wait another tick so
+ // it goes before we do.
+ return new Future(() {
+ XInner inner = outer.shadowRoot.query('x-inner');
+ expect(inner.enteredCount, 1, reason: 'enteredView should be called');
+ });
+ });
+ });
+}
diff --git a/pkg/polymer/test/entered_view_test.html b/pkg/polymer/test/entered_view_test.html
new file mode 100644
index 0000000..a4437cf
--- /dev/null
+++ b/pkg/polymer/test/entered_view_test.html
@@ -0,0 +1,36 @@
+<!doctype html>
+<!--
+Copyright (c) 2013, the Dart project authors. Please see the AUTHORS file
+for details. All rights reserved. Use of this source code is governed by a
+BSD-style license that can be found in the LICENSE file.
+-->
+<html>
+ <!--polymer-test: this comment is needed for test_suite.dart-->
+ <head>
+ <title>enteredView binding test</title>
+ <script src="/root_dart/tools/testing/dart/test_controller.js"></script>
+ </head>
+ <body>
+ This tests that elements inside the shadowRoot are properly upgraded and
+ enteredView is called on them. Essentially this is a Shadow DOM and Custom
+ Elements integration test.
+ <br>
+
+ <polymer-element name="x-inner">
+ <template>x-inner</template>
+ </polymer-element>
+ <polymer-element name="x-outer">
+ <template>
+ <template if="{{expand}}">
+ inner element:
+ <x-inner></x-inner>
+ </template>
+ </template>
+ </polymer-element>
+
+ outer element:
+ <x-outer></x-outer>
+
+ <script type="application/dart" src="entered_view_test.dart"></script>
+ </body>
+</html>
diff --git a/pkg/polymer/test/event_handlers_test.html b/pkg/polymer/test/event_handlers_test.html
index 941c1ed..b09d3e5 100644
--- a/pkg/polymer/test/event_handlers_test.html
+++ b/pkg/polymer/test/event_handlers_test.html
@@ -11,7 +11,7 @@
-->
<head>
<title>event handlers</title>
- <script src="packages/unittest/test_controller.js"></script>
+ <script src="/root_dart/tools/testing/dart/test_controller.js"></script>
</head>
<body>
diff --git a/pkg/polymer/test/event_path_declarative_test.html b/pkg/polymer/test/event_path_declarative_test.html
index fefcbd2..94895fe 100644
--- a/pkg/polymer/test/event_path_declarative_test.html
+++ b/pkg/polymer/test/event_path_declarative_test.html
@@ -7,7 +7,7 @@
<html>
<!--polymer-test: this comment is needed for test_suite.dart-->
<head><title>event path declarative test</title>
- <script src="packages/unittest/test_controller.js"></script>
+ <script src="/root_dart/tools/testing/dart/test_controller.js"></script>
<!--
Test ported from:
https://github.com/Polymer/polymer/blob/7936ff8/test/html/event-path-declarative.html
diff --git a/pkg/polymer/test/event_path_test.html b/pkg/polymer/test/event_path_test.html
index 323f837..1250cf6 100644
--- a/pkg/polymer/test/event_path_test.html
+++ b/pkg/polymer/test/event_path_test.html
@@ -8,7 +8,7 @@
<!--polymer-test: this comment is needed for test_suite.dart-->
<head>
<title>event path</title>
- <script src="packages/unittest/test_controller.js"></script>
+ <script src="/root_dart/tools/testing/dart/test_controller.js"></script>
<!--
Test ported from:
https://github.com/Polymer/polymer/blob/7936ff8/test/html/event-path.html
diff --git a/pkg/polymer/test/events_test.html b/pkg/polymer/test/events_test.html
index ec87ef3..2e5a952 100644
--- a/pkg/polymer/test/events_test.html
+++ b/pkg/polymer/test/events_test.html
@@ -8,7 +8,7 @@
<!--polymer-test: this comment is needed for test_suite.dart-->
<head>
<title>event path</title>
- <script src="packages/unittest/test_controller.js"></script>
+ <script src="/root_dart/tools/testing/dart/test_controller.js"></script>
<!--
Test ported from:
https://github.com/Polymer/polymer/blob/7936ff8/test/js/events.js
diff --git a/pkg/polymer/test/instance_attrs_test.html b/pkg/polymer/test/instance_attrs_test.html
index 38e42d4..40dc7ba 100644
--- a/pkg/polymer/test/instance_attrs_test.html
+++ b/pkg/polymer/test/instance_attrs_test.html
@@ -8,7 +8,7 @@
<!--polymer-test: this comment is needed for test_suite.dart-->
<head>
<title>Polymer.dart attribute deserialization test</title>
- <script src="packages/unittest/test_controller.js"></script>
+ <script src="/root_dart/tools/testing/dart/test_controller.js"></script>
</head>
<body>
<polymer-element name="my-element" foo="123" bar="hi" baz="there">
diff --git a/pkg/polymer/test/nested_binding_test.html b/pkg/polymer/test/nested_binding_test.html
index 3e853cd..39fb241 100644
--- a/pkg/polymer/test/nested_binding_test.html
+++ b/pkg/polymer/test/nested_binding_test.html
@@ -8,7 +8,7 @@
<!--polymer-test: this comment is needed for test_suite.dart-->
<head>
<title>nesting binding test</title>
- <script src="packages/unittest/test_controller.js"></script>
+ <script src="/root_dart/tools/testing/dart/test_controller.js"></script>
</head>
<body>
<polymer-element name="my-test">
diff --git a/pkg/polymer/test/noscript_test.html b/pkg/polymer/test/noscript_test.html
index dbb84af..0efadb0 100644
--- a/pkg/polymer/test/noscript_test.html
+++ b/pkg/polymer/test/noscript_test.html
@@ -8,7 +8,7 @@
<head>
<!--polymer-test: this comment is needed for test_suite.dart-->
<title>register test</title>
- <script src="packages/unittest/test_controller.js"></script>
+ <script src="/root_dart/tools/testing/dart/test_controller.js"></script>
</head>
<body>
<polymer-element name="x-a" noscript><template>a</template></polymer-element>
diff --git a/pkg/polymer/test/prop_attr_bind_reflection_test.html b/pkg/polymer/test/prop_attr_bind_reflection_test.html
index c7be8ca..e2a2a06 100644
--- a/pkg/polymer/test/prop_attr_bind_reflection_test.html
+++ b/pkg/polymer/test/prop_attr_bind_reflection_test.html
@@ -3,7 +3,7 @@
<!--polymer-test: this comment is needed for test_suite.dart-->
<head>
<title>property to attribute reflection with bind</title>
- <script src="packages/unittest/test_controller.js"></script>
+ <script src="/root_dart/tools/testing/dart/test_controller.js"></script>
</head>
<body>
diff --git a/pkg/polymer/test/prop_attr_reflection_test.html b/pkg/polymer/test/prop_attr_reflection_test.html
index c77d009..95c02b8 100644
--- a/pkg/polymer/test/prop_attr_reflection_test.html
+++ b/pkg/polymer/test/prop_attr_reflection_test.html
@@ -8,7 +8,7 @@
<head>
<!--polymer-test: this comment is needed for test_suite.dart-->
<title>publish attributes</title>
- <script src="packages/unittest/test_controller.js"></script>
+ <script src="/root_dart/tools/testing/dart/test_controller.js"></script>
</head>
<body>
diff --git a/pkg/polymer/test/property_change_test.html b/pkg/polymer/test/property_change_test.html
index c418921..01f5db9 100644
--- a/pkg/polymer/test/property_change_test.html
+++ b/pkg/polymer/test/property_change_test.html
@@ -8,7 +8,7 @@
<!--polymer-test: this comment is needed for test_suite.dart-->
<head>
<title>property changes</title>
- <script src="packages/unittest/test_controller.js"></script>
+ <script src="/root_dart/tools/testing/dart/test_controller.js"></script>
</head>
<body>
<x-test id="test"></x-test>
diff --git a/pkg/polymer/test/publish_attributes_test.html b/pkg/polymer/test/publish_attributes_test.html
index d513e65..9285e47 100644
--- a/pkg/polymer/test/publish_attributes_test.html
+++ b/pkg/polymer/test/publish_attributes_test.html
@@ -8,7 +8,7 @@
<head>
<!--polymer-test: this comment is needed for test_suite.dart-->
<title>publish attributes</title>
- <script src="packages/unittest/test_controller.js"></script>
+ <script src="/root_dart/tools/testing/dart/test_controller.js"></script>
</head>
<body>
diff --git a/pkg/polymer/test/publish_inherited_properties_test.html b/pkg/polymer/test/publish_inherited_properties_test.html
index 8fafba7..38b5bf2 100644
--- a/pkg/polymer/test/publish_inherited_properties_test.html
+++ b/pkg/polymer/test/publish_inherited_properties_test.html
@@ -8,7 +8,7 @@
<head>
<!--polymer-test: this comment is needed for test_suite.dart-->
<title>publish inherited properties</title>
- <script src="packages/unittest/test_controller.js"></script>
+ <script src="/root_dart/tools/testing/dart/test_controller.js"></script>
</head>
<body>
diff --git a/pkg/polymer/test/register_test.html b/pkg/polymer/test/register_test.html
index 970f9c5..a6085d1 100644
--- a/pkg/polymer/test/register_test.html
+++ b/pkg/polymer/test/register_test.html
@@ -8,7 +8,7 @@
<head>
<!--polymer-test: this comment is needed for test_suite.dart-->
<title>register test</title>
- <script src="packages/unittest/test_controller.js"></script>
+ <script src="/root_dart/tools/testing/dart/test_controller.js"></script>
</head>
<body>
diff --git a/pkg/polymer/test/take_attributes_test.html b/pkg/polymer/test/take_attributes_test.html
index e105f6c..8dc5d1e 100644
--- a/pkg/polymer/test/take_attributes_test.html
+++ b/pkg/polymer/test/take_attributes_test.html
@@ -8,7 +8,7 @@
<head>
<!--polymer-test: this comment is needed for test_suite.dart-->
<title>take attributes</title>
- <script src="packages/unittest/test_controller.js"></script>
+ <script src="/root_dart/tools/testing/dart/test_controller.js"></script>
</head>
<body>
diff --git a/pkg/polymer/test/template_distribute_dynamic_test.html b/pkg/polymer/test/template_distribute_dynamic_test.html
index 7666ee7..752f7b0 100644
--- a/pkg/polymer/test/template_distribute_dynamic_test.html
+++ b/pkg/polymer/test/template_distribute_dynamic_test.html
@@ -8,7 +8,7 @@
<!--polymer-test: this comment is needed for test_suite.dart-->
<head>
<title>template distribute</title>
- <script src="packages/unittest/test_controller.js"></script>
+ <script src="/root_dart/tools/testing/dart/test_controller.js"></script>
</head>
<body>
diff --git a/pkg/polymer/test/unbind_test.html b/pkg/polymer/test/unbind_test.html
index e6b34aa..e251fc6 100644
--- a/pkg/polymer/test/unbind_test.html
+++ b/pkg/polymer/test/unbind_test.html
@@ -8,7 +8,7 @@
<!--polymer-test: this comment is needed for test_suite.dart-->
<head>
<title>unbind</title>
- <script src="packages/unittest/test_controller.js"></script>
+ <script src="/root_dart/tools/testing/dart/test_controller.js"></script>
</head>
<body>
diff --git a/pkg/scheduled_test/lib/scheduled_test.dart b/pkg/scheduled_test/lib/scheduled_test.dart
index 807424f2..bf47adb 100644
--- a/pkg/scheduled_test/lib/scheduled_test.dart
+++ b/pkg/scheduled_test/lib/scheduled_test.dart
@@ -174,7 +174,7 @@
///
/// ## Timeouts
///
-/// `scheduled_test` has a built-in timeout of 30 seconds (configurable via
+/// `scheduled_test` has a built-in timeout of 5 seconds (configurable via
/// [Schedule.timeout]). This timeout is aware of the structure of the schedule;
/// this means that it will reset for each task in a queue, when moving between
/// queues, or almost any other sort of interaction with [currentSchedule]. As
diff --git a/pkg/scheduled_test/pubspec.yaml b/pkg/scheduled_test/pubspec.yaml
index 285a74c..7fd928e 100644
--- a/pkg/scheduled_test/pubspec.yaml
+++ b/pkg/scheduled_test/pubspec.yaml
@@ -1,5 +1,5 @@
name: scheduled_test
-version: 0.9.0
+version: 0.9.2
author: "Dart Team <misc@dartlang.org>"
homepage: http://www.dartlang.org
description: >
@@ -11,8 +11,8 @@
dependencies:
http: ">=0.9.0 <0.10.0"
- path: ">=0.9.0 <0.10.0"
- stack_trace: ">=0.9.0 <0.10.0"
+ path: ">=0.9.0 <2.0.0"
+ stack_trace: ">=0.9.1 <0.10.0"
unittest: ">=0.9.0 <0.10.0"
environment:
sdk: ">=0.8.10+6 <2.0.0"
diff --git a/pkg/stack_trace/pubspec.yaml b/pkg/stack_trace/pubspec.yaml
index c71a781..ac41d93 100644
--- a/pkg/stack_trace/pubspec.yaml
+++ b/pkg/stack_trace/pubspec.yaml
@@ -1,5 +1,5 @@
name: stack_trace
-version: 0.9.0
+version: 0.9.1
author: "Dart Team <misc@dartlang.org>"
homepage: http://www.dartlang.org
description: >
diff --git a/pkg/template_binding/AUTHORS b/pkg/template_binding/AUTHORS
new file mode 100644
index 0000000..0617765
--- /dev/null
+++ b/pkg/template_binding/AUTHORS
@@ -0,0 +1,9 @@
+# Names should be added to this file with this pattern:
+#
+# For individuals:
+# Name <email address>
+#
+# For organizations:
+# Organization <fnmatch pattern>
+#
+Google Inc. <*@google.com>
diff --git a/pkg/template_binding/LICENSE b/pkg/template_binding/LICENSE
new file mode 100644
index 0000000..65ee1c1
--- /dev/null
+++ b/pkg/template_binding/LICENSE
@@ -0,0 +1,202 @@
+
+ Apache License
+ Version 2.0, January 2004
+ http://www.apache.org/licenses/
+
+TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
+
+1. Definitions.
+
+ "License" shall mean the terms and conditions for use, reproduction,
+ and distribution as defined by Sections 1 through 9 of this document.
+
+ "Licensor" shall mean the copyright owner or entity authorized by
+ the copyright owner that is granting the License.
+
+ "Legal Entity" shall mean the union of the acting entity and all
+ other entities that control, are controlled by, or are under common
+ control with that entity. For the purposes of this definition,
+ "control" means (i) the power, direct or indirect, to cause the
+ direction or management of such entity, whether by contract or
+ otherwise, or (ii) ownership of fifty percent (50%) or more of the
+ outstanding shares, or (iii) beneficial ownership of such entity.
+
+ "You" (or "Your") shall mean an individual or Legal Entity
+ exercising permissions granted by this License.
+
+ "Source" form shall mean the preferred form for making modifications,
+ including but not limited to software source code, documentation
+ source, and configuration files.
+
+ "Object" form shall mean any form resulting from mechanical
+ transformation or translation of a Source form, including but
+ not limited to compiled object code, generated documentation,
+ and conversions to other media types.
+
+ "Work" shall mean the work of authorship, whether in Source or
+ Object form, made available under the License, as indicated by a
+ copyright notice that is included in or attached to the work
+ (an example is provided in the Appendix below).
+
+ "Derivative Works" shall mean any work, whether in Source or Object
+ form, that is based on (or derived from) the Work and for which the
+ editorial revisions, annotations, elaborations, or other modifications
+ represent, as a whole, an original work of authorship. For the purposes
+ of this License, Derivative Works shall not include works that remain
+ separable from, or merely link (or bind by name) to the interfaces of,
+ the Work and Derivative Works thereof.
+
+ "Contribution" shall mean any work of authorship, including
+ the original version of the Work and any modifications or additions
+ to that Work or Derivative Works thereof, that is intentionally
+ submitted to Licensor for inclusion in the Work by the copyright owner
+ or by an individual or Legal Entity authorized to submit on behalf of
+ the copyright owner. For the purposes of this definition, "submitted"
+ means any form of electronic, verbal, or written communication sent
+ to the Licensor or its representatives, including but not limited to
+ communication on electronic mailing lists, source code control systems,
+ and issue tracking systems that are managed by, or on behalf of, the
+ Licensor for the purpose of discussing and improving the Work, but
+ excluding communication that is conspicuously marked or otherwise
+ designated in writing by the copyright owner as "Not a Contribution."
+
+ "Contributor" shall mean Licensor and any individual or Legal Entity
+ on behalf of whom a Contribution has been received by Licensor and
+ subsequently incorporated within the Work.
+
+2. Grant of Copyright License. Subject to the terms and conditions of
+ this License, each Contributor hereby grants to You a perpetual,
+ worldwide, non-exclusive, no-charge, royalty-free, irrevocable
+ copyright license to reproduce, prepare Derivative Works of,
+ publicly display, publicly perform, sublicense, and distribute the
+ Work and such Derivative Works in Source or Object form.
+
+3. Grant of Patent License. Subject to the terms and conditions of
+ this License, each Contributor hereby grants to You a perpetual,
+ worldwide, non-exclusive, no-charge, royalty-free, irrevocable
+ (except as stated in this section) patent license to make, have made,
+ use, offer to sell, sell, import, and otherwise transfer the Work,
+ where such license applies only to those patent claims licensable
+ by such Contributor that are necessarily infringed by their
+ Contribution(s) alone or by combination of their Contribution(s)
+ with the Work to which such Contribution(s) was submitted. If You
+ institute patent litigation against any entity (including a
+ cross-claim or counterclaim in a lawsuit) alleging that the Work
+ or a Contribution incorporated within the Work constitutes direct
+ or contributory patent infringement, then any patent licenses
+ granted to You under this License for that Work shall terminate
+ as of the date such litigation is filed.
+
+4. Redistribution. You may reproduce and distribute copies of the
+ Work or Derivative Works thereof in any medium, with or without
+ modifications, and in Source or Object form, provided that You
+ meet the following conditions:
+
+ (a) You must give any other recipients of the Work or
+ Derivative Works a copy of this License; and
+
+ (b) You must cause any modified files to carry prominent notices
+ stating that You changed the files; and
+
+ (c) You must retain, in the Source form of any Derivative Works
+ that You distribute, all copyright, patent, trademark, and
+ attribution notices from the Source form of the Work,
+ excluding those notices that do not pertain to any part of
+ the Derivative Works; and
+
+ (d) If the Work includes a "NOTICE" text file as part of its
+ distribution, then any Derivative Works that You distribute must
+ include a readable copy of the attribution notices contained
+ within such NOTICE file, excluding those notices that do not
+ pertain to any part of the Derivative Works, in at least one
+ of the following places: within a NOTICE text file distributed
+ as part of the Derivative Works; within the Source form or
+ documentation, if provided along with the Derivative Works; or,
+ within a display generated by the Derivative Works, if and
+ wherever such third-party notices normally appear. The contents
+ of the NOTICE file are for informational purposes only and
+ do not modify the License. You may add Your own attribution
+ notices within Derivative Works that You distribute, alongside
+ or as an addendum to the NOTICE text from the Work, provided
+ that such additional attribution notices cannot be construed
+ as modifying the License.
+
+ You may add Your own copyright statement to Your modifications and
+ may provide additional or different license terms and conditions
+ for use, reproduction, or distribution of Your modifications, or
+ for any such Derivative Works as a whole, provided Your use,
+ reproduction, and distribution of the Work otherwise complies with
+ the conditions stated in this License.
+
+5. Submission of Contributions. Unless You explicitly state otherwise,
+ any Contribution intentionally submitted for inclusion in the Work
+ by You to the Licensor shall be under the terms and conditions of
+ this License, without any additional terms or conditions.
+ Notwithstanding the above, nothing herein shall supersede or modify
+ the terms of any separate license agreement you may have executed
+ with Licensor regarding such Contributions.
+
+6. Trademarks. This License does not grant permission to use the trade
+ names, trademarks, service marks, or product names of the Licensor,
+ except as required for reasonable and customary use in describing the
+ origin of the Work and reproducing the content of the NOTICE file.
+
+7. Disclaimer of Warranty. Unless required by applicable law or
+ agreed to in writing, Licensor provides the Work (and each
+ Contributor provides its Contributions) on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
+ implied, including, without limitation, any warranties or conditions
+ of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
+ PARTICULAR PURPOSE. You are solely responsible for determining the
+ appropriateness of using or redistributing the Work and assume any
+ risks associated with Your exercise of permissions under this License.
+
+8. Limitation of Liability. In no event and under no legal theory,
+ whether in tort (including negligence), contract, or otherwise,
+ unless required by applicable law (such as deliberate and grossly
+ negligent acts) or agreed to in writing, shall any Contributor be
+ liable to You for damages, including any direct, indirect, special,
+ incidental, or consequential damages of any character arising as a
+ result of this License or out of the use or inability to use the
+ Work (including but not limited to damages for loss of goodwill,
+ work stoppage, computer failure or malfunction, or any and all
+ other commercial damages or losses), even if such Contributor
+ has been advised of the possibility of such damages.
+
+9. Accepting Warranty or Additional Liability. While redistributing
+ the Work or Derivative Works thereof, You may choose to offer,
+ and charge a fee for, acceptance of support, warranty, indemnity,
+ or other liability obligations and/or rights consistent with this
+ License. However, in accepting such obligations, You may act only
+ on Your own behalf and on Your sole responsibility, not on behalf
+ of any other Contributor, and only if You agree to indemnify,
+ defend, and hold each Contributor harmless for any liability
+ incurred by, or claims asserted against, such Contributor by reason
+ of your accepting any such warranty or additional liability.
+
+END OF TERMS AND CONDITIONS
+
+APPENDIX: How to apply the Apache License to your work.
+
+ To apply the Apache License to your work, attach the following
+ boilerplate notice, with the fields enclosed by brackets "[]"
+ replaced with your own identifying information. (Don't include
+ the brackets!) The text should be enclosed in the appropriate
+ comment syntax for the file format. We also recommend that a
+ file or class name and description of purpose be included on the
+ same "printed page" as the copyright notice for easier
+ identification within third-party archives.
+
+Copyright [yyyy] [name of copyright owner]
+
+Licensed under the Apache License, Version 2.0 (the "License");
+you may not use this file except in compliance with the License.
+You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+Unless required by applicable law or agreed to in writing, software
+distributed under the License is distributed on an "AS IS" BASIS,
+WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+See the License for the specific language governing permissions and
+limitations under the License.
\ No newline at end of file
diff --git a/pkg/template_binding/PATENTS b/pkg/template_binding/PATENTS
new file mode 100644
index 0000000..e120963
--- /dev/null
+++ b/pkg/template_binding/PATENTS
@@ -0,0 +1,23 @@
+Additional IP Rights Grant (Patents)
+
+"This implementation" means the copyrightable works distributed by
+Google as part of the Polymer project.
+
+Google hereby grants to You a perpetual, worldwide, non-exclusive,
+no-charge, royalty-free, irrevocable (except as stated in this section)
+patent license to make, have made, use, offer to sell, sell, import,
+transfer and otherwise run, modify and propagate the contents of this
+implementation of Polymer, where such license applies only to those
+patent claims, both currently owned or controlled by Google and acquired
+in the future, licensable by Google that are necessarily infringed by
+this implementation of Polymer. This grant does not include claims
+that would be infringed only as a consequence of further modification of
+this implementation. If you or your agent or exclusive licensee
+institute or order or agree to the institution of patent litigation
+against any entity (including a cross-claim or counterclaim in a
+lawsuit) alleging that this implementation of Polymer or any code
+incorporated within this implementation of Polymer constitutes
+direct or contributory patent infringement, or inducement of patent
+infringement, then any patent rights granted to you under this License
+for this implementation of Polymer shall terminate as of the date
+such litigation is filed.
diff --git a/pkg/template_binding/lib/src/instance_binding_map.dart b/pkg/template_binding/lib/src/instance_binding_map.dart
index 3868343..71b0c12 100644
--- a/pkg/template_binding/lib/src/instance_binding_map.dart
+++ b/pkg/template_binding/lib/src/instance_binding_map.dart
@@ -6,41 +6,39 @@
class _InstanceBindingMap {
final List bindings;
- final List<_InstanceBindingMap> children;
+ final Map<int, _InstanceBindingMap> children;
final Node templateRef;
- final bool hasSubTemplate;
+
+ // Workaround for:
+ // https://github.com/Polymer/TemplateBinding/issues/150
+ final int numChildren;
_InstanceBindingMap._(this.bindings, this.children, this.templateRef,
- this.hasSubTemplate);
-
- factory _InstanceBindingMap(Node node, BindingDelegate delegate) {
- var bindings = _getBindings(node, delegate);
-
- bool hasSubTemplate = false;
- Node templateRef = null;
-
- if (isSemanticTemplate(node)) {
- templateRef = node;
- hasSubTemplate = true;
- }
-
- List children = null;
- for (var c = node.firstChild, i = 0; c != null; c = c.nextNode, i++) {
- var childMap = new _InstanceBindingMap(c, delegate);
- if (childMap == null) continue;
-
- if (children == null) children = new List(node.nodes.length);
- children[i] = childMap;
- if (childMap.hasSubTemplate) {
- hasSubTemplate = true;
- }
- }
-
- return new _InstanceBindingMap._(bindings, children, templateRef,
- hasSubTemplate);
- }
+ this.numChildren);
}
+_InstanceBindingMap _createInstanceBindingMap(Node node,
+ BindingDelegate delegate) {
+
+ var bindings = _getBindings(node, delegate);
+ Node templateRef = null;
+
+ if (isSemanticTemplate(node)) templateRef = node;
+
+ Map children = null;
+ int i = 0;
+ for (var c = node.firstChild; c != null; c = c.nextNode, i++) {
+ var childMap = _createInstanceBindingMap(c, delegate);
+ if (childMap == null) continue;
+
+ if (children == null) children = new HashMap();
+ children[i] = childMap;
+ }
+
+ if (bindings == null && children == null && templateRef == null) return null;
+
+ return new _InstanceBindingMap._(bindings, children, templateRef, i);
+}
void _addMapBindings(Node node, _InstanceBindingMap map, model,
BindingDelegate delegate, List bound) {
@@ -59,8 +57,15 @@
if (map.children == null) return;
- int i = 0;
- for (var c = node.firstChild; c != null; c = c.nextNode) {
- _addMapBindings(c, map.children[i++], model, delegate, bound);
+ // To workaround https://github.com/Polymer/TemplateBinding/issues/150,
+ // we try and detect cases where creating a custom element resulted in extra
+ // children compared to what we expected. We assume these new children are all
+ // at the beginning, because _deepCloneIgnoreTemplateContent creates the
+ // element then appends the template content's children to the end.
+
+ int i = map.numChildren - node.nodes.length;
+ for (var c = node.firstChild; c != null; c = c.nextNode, i++) {
+ if (i < 0) continue;
+ _addMapBindings(c, map.children[i], model, delegate, bound);
}
}
diff --git a/pkg/template_binding/lib/src/template.dart b/pkg/template_binding/lib/src/template.dart
index ad35eb8..8df84d1 100644
--- a/pkg/template_binding/lib/src/template.dart
+++ b/pkg/template_binding/lib/src/template.dart
@@ -17,6 +17,8 @@
DocumentFragment _content;
bool _templateIsDecorated;
+ HtmlDocument _stagingDocument;
+
var _bindingMap;
TemplateBindExtension._(Element node) : super(node);
@@ -114,13 +116,12 @@
if (map == null) {
// TODO(rafaelw): Setup a MutationObserver on content to detect
// when the instanceMap is invalid.
- map = new _InstanceBindingMap(content, delegate);
+ map = _createInstanceBindingMap(content, delegate);
ref._bindingMap = map;
}
- var instance = map.hasSubTemplate
- ? _deepCloneIgnoreTemplateContent(content)
- : content.clone(true);
+ var staging = _getTemplateStagingDocument();
+ var instance = _deepCloneIgnoreTemplateContent(content, staging);
_addMapBindings(instance, map, model, delegate, bound);
// TODO(rafaelw): We can do this more lazily, but setting a sentinel
@@ -138,12 +139,12 @@
_ensureSetModelScheduled();
}
- static Node _deepCloneIgnoreTemplateContent(Node node) {
- var clone = node.clone(false); // Shallow clone.
+ static Node _deepCloneIgnoreTemplateContent(Node node, stagingDocument) {
+ var clone = stagingDocument.importNode(node, false);
if (isSemanticTemplate(clone)) return clone;
for (var c = node.firstChild; c != null; c = c.nextNode) {
- clone.append(_deepCloneIgnoreTemplateContent(c));
+ clone.append(_deepCloneIgnoreTemplateContent(c, stagingDocument));
}
return clone;
}
@@ -241,8 +242,7 @@
}
if (!isNative) {
- var doc = _getTemplateContentsOwner(
- templateElementExt._node.ownerDocument);
+ var doc = _getOrCreateTemplateContentsOwner(templateElementExt._node);
templateElementExt._content = doc.createDocumentFragment();
}
@@ -260,12 +260,13 @@
}
static final _contentsOwner = new Expando();
+ static final _ownerStagingDocument = new Expando();
// http://dvcs.w3.org/hg/webcomponents/raw-file/tip/spec/templates/index.html#dfn-template-contents-owner
- static Document _getTemplateContentsOwner(HtmlDocument doc) {
- if (doc.window == null) {
- return doc;
- }
+ static HtmlDocument _getOrCreateTemplateContentsOwner(Element template) {
+ var doc = template.ownerDocument;
+ if (doc.window == null) return doc;
+
var d = _contentsOwner[doc];
if (d == null) {
// TODO(arv): This should either be a Document or HTMLDocument depending
@@ -279,6 +280,19 @@
return d;
}
+ HtmlDocument _getTemplateStagingDocument() {
+ if (_stagingDocument == null) {
+ var owner = _node.ownerDocument;
+ var doc = _ownerStagingDocument[owner];
+ if (doc == null) {
+ doc = owner.implementation.createHtmlDocument('');
+ _ownerStagingDocument[owner] = doc;
+ }
+ _stagingDocument = doc;
+ }
+ return _stagingDocument;
+ }
+
// For non-template browsers, the parser will disallow <template> in certain
// locations, so we allow "attribute templates" which combine the template
// element with the top-level container node of the content, e.g.
diff --git a/pkg/template_binding/pubspec.yaml b/pkg/template_binding/pubspec.yaml
index 180fe90..873e79d 100644
--- a/pkg/template_binding/pubspec.yaml
+++ b/pkg/template_binding/pubspec.yaml
@@ -1,5 +1,5 @@
name: template_binding
-version: 0.9.0
+version: 0.9.1
author: Polymer.dart Team <web-ui-dev@dartlang.org>
description: >
Extends the capabilities of the HTML Template Element by enabling it to
@@ -10,7 +10,7 @@
mutation_observer: ">=0.9.0 <0.10.0"
observe: ">=0.9.0 <0.10.0"
dev_dependencies:
- custom_element: ">=0.9.0 <0.10.0"
+ custom_element: ">=0.9.1 <0.10.0"
unittest: ">=0.9.0 <0.10.0"
environment:
- sdk: ">=0.8.10+6 <2.0.0"
+ sdk: ">=1.0.0 <2.0.0"
diff --git a/pkg/unittest/lib/compact_vm_config.dart b/pkg/unittest/lib/compact_vm_config.dart
index 7724599..69560ac 100644
--- a/pkg/unittest/lib/compact_vm_config.dart
+++ b/pkg/unittest/lib/compact_vm_config.dart
@@ -8,7 +8,7 @@
* you should only see a couple lines in the terminal. If a test fails, the
* failure is shown and the progress bar continues to be updated below it.
*/
-library compact_vm_config;
+library unittest.compact_vm_config;
import 'dart:async';
import 'dart:io';
diff --git a/pkg/unittest/lib/html_config.dart b/pkg/unittest/lib/html_config.dart
index 860ec4f..46403052 100644
--- a/pkg/unittest/lib/html_config.dart
+++ b/pkg/unittest/lib/html_config.dart
@@ -5,7 +5,7 @@
/**
* A simple unit test library for running tests in a browser.
*/
-library unittest_html_config;
+library unittest.html_config;
import 'dart:async';
import 'dart:convert';
diff --git a/pkg/unittest/lib/html_enhanced_config.dart b/pkg/unittest/lib/html_enhanced_config.dart
index ebcf271..92759a8 100644
--- a/pkg/unittest/lib/html_enhanced_config.dart
+++ b/pkg/unittest/lib/html_enhanced_config.dart
@@ -8,7 +8,7 @@
* Provides enhanced HTML output with collapsible group headers
* and other at-a-glance information about the test results.
*/
-library unittest_html_enhanced_config;
+library unittest.html_enhanced_config;
import 'dart:async';
import 'dart:collection' show LinkedHashMap;
diff --git a/pkg/unittest/lib/html_individual_config.dart b/pkg/unittest/lib/html_individual_config.dart
index 1c1d11e..ca140b6 100644
--- a/pkg/unittest/lib/html_individual_config.dart
+++ b/pkg/unittest/lib/html_individual_config.dart
@@ -12,7 +12,7 @@
* start of your set sequence. Important constraint: your group descriptions
* MUST NOT contain spaces.
*/
-library unittest_html_individual_config;
+library unittest.html_individual_config;
import 'dart:html';
import 'unittest.dart' as unittest;
diff --git a/pkg/unittest/lib/interactive_html_config.dart b/pkg/unittest/lib/interactive_html_config.dart
index 16a69a0..baea6e1 100644
--- a/pkg/unittest/lib/interactive_html_config.dart
+++ b/pkg/unittest/lib/interactive_html_config.dart
@@ -12,7 +12,7 @@
* Note: this unit test configuration will not work with the debugger (the tests
* are executed in a separate IFrame).
*/
-library unittest_interactive_html_config;
+library unittest.interactive_html_config;
// TODO(gram) - add options for: remove IFrame on done/keep
// IFrame for failed tests/keep IFrame for all tests.
diff --git a/pkg/unittest/lib/matcher.dart b/pkg/unittest/lib/matcher.dart
index 5cbbed48..f207993 100644
--- a/pkg/unittest/lib/matcher.dart
+++ b/pkg/unittest/lib/matcher.dart
@@ -18,7 +18,7 @@
* [Unit Testing with Dart]
* (http://www.dartlang.org/articles/dart-unit-tests/).
*/
-library matcher;
+library unittest.matcher;
import 'dart:async';
diff --git a/pkg/unittest/lib/mirror_matchers.dart b/pkg/unittest/lib/mirror_matchers.dart
index 25f2b6d..ad0dfd41 100644
--- a/pkg/unittest/lib/mirror_matchers.dart
+++ b/pkg/unittest/lib/mirror_matchers.dart
@@ -25,7 +25,7 @@
* [pub]: http://pub.dartlang.org
* [pkg]: http://pub.dartlang.org/packages/mirror_matchers
*/
-library mirror_matchers;
+library unittest.mirror_matchers;
import 'dart:mirrors';
diff --git a/pkg/unittest/lib/mock.dart b/pkg/unittest/lib/mock.dart
index 51f37f8..ad4886c 100644
--- a/pkg/unittest/lib/mock.dart
+++ b/pkg/unittest/lib/mock.dart
@@ -122,7 +122,7 @@
* [pub]: http://pub.dartlang.org
*/
-library mock;
+library unittest.mock;
import 'dart:mirrors';
import 'dart:collection' show LinkedHashMap;
diff --git a/pkg/unittest/lib/src/configuration.dart b/pkg/unittest/lib/src/configuration.dart
index 2a2ea0c..99cdf9b 100644
--- a/pkg/unittest/lib/src/configuration.dart
+++ b/pkg/unittest/lib/src/configuration.dart
@@ -30,7 +30,7 @@
/// How long a [TestCase] can run before it is considered an error.
/// A [timeout] value of [:null:] means that the limit is infinite.
- Duration get timeout => const Duration(minutes: 2);
+ Duration timeout = const Duration(minutes: 2);
/**
* Called as soon as the unittest framework becomes initialized. This is done
diff --git a/pkg/unittest/lib/src/core_matchers.dart b/pkg/unittest/lib/src/core_matchers.dart
index e120c9e..0806506 100644
--- a/pkg/unittest/lib/src/core_matchers.dart
+++ b/pkg/unittest/lib/src/core_matchers.dart
@@ -2,7 +2,7 @@
// for details. All rights reserved. Use of this source code is governed by a
// BSD-style license that can be found in the LICENSE file.
-part of matcher;
+part of unittest.matcher;
/**
* Returns a matcher that matches empty strings, maps or iterables
diff --git a/pkg/unittest/lib/src/description.dart b/pkg/unittest/lib/src/description.dart
index 6c43077..de3de87 100644
--- a/pkg/unittest/lib/src/description.dart
+++ b/pkg/unittest/lib/src/description.dart
@@ -2,7 +2,7 @@
// for details. All rights reserved. Use of this source code is governed by a
// BSD-style license that can be found in the LICENSE file.
-part of matcher;
+part of unittest.matcher;
/**
* The default implementation of IDescription. This should rarely need
diff --git a/pkg/unittest/lib/src/expect.dart b/pkg/unittest/lib/src/expect.dart
index 76151c0..3309efe 100644
--- a/pkg/unittest/lib/src/expect.dart
+++ b/pkg/unittest/lib/src/expect.dart
@@ -2,7 +2,7 @@
// for details. All rights reserved. Use of this source code is governed by a
// BSD-style license that can be found in the LICENSE file.
-part of matcher;
+part of unittest.matcher;
/** The objects thrown by the default failure handler. */
class TestFailure extends Error {
diff --git a/pkg/unittest/lib/src/future_matchers.dart b/pkg/unittest/lib/src/future_matchers.dart
index c9e2742e..c1156ed5 100644
--- a/pkg/unittest/lib/src/future_matchers.dart
+++ b/pkg/unittest/lib/src/future_matchers.dart
@@ -2,7 +2,7 @@
// for details. All rights reserved. Use of this source code is governed by a
// BSD-style license that can be found in the LICENSE file.
-part of matcher;
+part of unittest.matcher;
/**
* Matches a [Future] that completes successfully with a value. Note that this
diff --git a/pkg/unittest/lib/src/interfaces.dart b/pkg/unittest/lib/src/interfaces.dart
index 8a66a84..c3af072 100644
--- a/pkg/unittest/lib/src/interfaces.dart
+++ b/pkg/unittest/lib/src/interfaces.dart
@@ -2,7 +2,7 @@
// for details. All rights reserved. Use of this source code is governed by a
// BSD-style license that can be found in the LICENSE file.
-part of matcher;
+part of unittest.matcher;
// To decouple the reporting of errors, and allow for extensibility of
// matchers, we make use of some interfaces.
diff --git a/pkg/unittest/lib/src/iterable_matchers.dart b/pkg/unittest/lib/src/iterable_matchers.dart
index dda2989..ab7827f 100644
--- a/pkg/unittest/lib/src/iterable_matchers.dart
+++ b/pkg/unittest/lib/src/iterable_matchers.dart
@@ -2,7 +2,7 @@
// for details. All rights reserved. Use of this source code is governed by a
// BSD-style license that can be found in the LICENSE file.
-part of matcher;
+part of unittest.matcher;
/**
* Returns a matcher which matches [Iterable]s in which all elements
diff --git a/pkg/unittest/lib/src/map_matchers.dart b/pkg/unittest/lib/src/map_matchers.dart
index 033e906..76b6b97 100644
--- a/pkg/unittest/lib/src/map_matchers.dart
+++ b/pkg/unittest/lib/src/map_matchers.dart
@@ -2,7 +2,7 @@
// for details. All rights reserved. Use of this source code is governed by a
// BSD-style license that can be found in the LICENSE file.
-part of matcher;
+part of unittest.matcher;
/**
* Returns a matcher which matches maps containing the given [value].
diff --git a/pkg/unittest/lib/src/numeric_matchers.dart b/pkg/unittest/lib/src/numeric_matchers.dart
index 2a725ff..4c8cd93 100644
--- a/pkg/unittest/lib/src/numeric_matchers.dart
+++ b/pkg/unittest/lib/src/numeric_matchers.dart
@@ -2,7 +2,7 @@
// for details. All rights reserved. Use of this source code is governed by a
// BSD-style license that can be found in the LICENSE file.
-part of matcher;
+part of unittest.matcher;
/**
* Returns a matcher which matches if the match argument is greater
diff --git a/pkg/unittest/lib/src/operator_matchers.dart b/pkg/unittest/lib/src/operator_matchers.dart
index 6c93cee..432b5d3 100644
--- a/pkg/unittest/lib/src/operator_matchers.dart
+++ b/pkg/unittest/lib/src/operator_matchers.dart
@@ -2,7 +2,7 @@
// for details. All rights reserved. Use of this source code is governed by a
// BSD-style license that can be found in the LICENSE file.
-part of matcher;
+part of unittest.matcher;
/**
* This returns a matcher that inverts [matcher] to its logical negation.
diff --git a/pkg/unittest/lib/src/pretty_print.dart b/pkg/unittest/lib/src/pretty_print.dart
index 1608e10..14a0bb1 100644
--- a/pkg/unittest/lib/src/pretty_print.dart
+++ b/pkg/unittest/lib/src/pretty_print.dart
@@ -2,7 +2,7 @@
// for details. All rights reserved. Use of this source code is governed by a
// BSD-style license that can be found in the LICENSE file.
-library pretty_print;
+library unittest.pretty_print;
import 'utils.dart';
diff --git a/pkg/unittest/lib/src/simple_configuration.dart b/pkg/unittest/lib/src/simple_configuration.dart
index 78c303e..1056ad3 100644
--- a/pkg/unittest/lib/src/simple_configuration.dart
+++ b/pkg/unittest/lib/src/simple_configuration.dart
@@ -52,10 +52,6 @@
// we do with this List.
final _testLogBuffer = <Pair<String, StackTrace>>[];
- /// How long a [TestCase] can run before it is considered an error.
- /// A [timeout] value of [:null:] means that the limit is infinite.
- Duration timeout = const Duration(minutes: 2);
-
/**
* The constructor sets up a failure handler for [expect] that redirects
* [expect] failures to [onExpectFailure].
diff --git a/pkg/unittest/lib/src/string_matchers.dart b/pkg/unittest/lib/src/string_matchers.dart
index f5e32ff..36e7e1e 100644
--- a/pkg/unittest/lib/src/string_matchers.dart
+++ b/pkg/unittest/lib/src/string_matchers.dart
@@ -2,7 +2,7 @@
// for details. All rights reserved. Use of this source code is governed by a
// BSD-style license that can be found in the LICENSE file.
-part of matcher;
+part of unittest.matcher;
/**
* Returns a matcher which matches if the match argument is a string and
diff --git a/pkg/unittest/lib/src/utils.dart b/pkg/unittest/lib/src/utils.dart
index e10c597..380a119 100644
--- a/pkg/unittest/lib/src/utils.dart
+++ b/pkg/unittest/lib/src/utils.dart
@@ -2,7 +2,7 @@
// for details. All rights reserved. Use of this source code is governed by a
// BSD-style license that can be found in the LICENSE file.
-library utils;
+library unittest.utils;
/**
* Returns the name of the type of [x], or "Unknown" if the type name can't be
diff --git a/pkg/unittest/lib/vm_config.dart b/pkg/unittest/lib/vm_config.dart
index e37cf72..685518e 100644
--- a/pkg/unittest/lib/vm_config.dart
+++ b/pkg/unittest/lib/vm_config.dart
@@ -5,7 +5,7 @@
/**
* A simple unit test library for running tests on the VM.
*/
-library unittest_vm_config;
+library unittest.vm_config;
import 'dart:async';
import 'dart:io';
diff --git a/pkg/unittest/pubspec.yaml b/pkg/unittest/pubspec.yaml
index ebc4d7b..dd67528 100644
--- a/pkg/unittest/pubspec.yaml
+++ b/pkg/unittest/pubspec.yaml
@@ -1,5 +1,5 @@
name: unittest
-version: 0.9.0
+version: 0.9.1
author: Dart Team <misc@dartlang.org>
description: A library for writing dart unit tests.
homepage: http://www.dartlang.org
diff --git a/pkg/watcher/pubspec.yaml b/pkg/watcher/pubspec.yaml
index 93d8eb4..a967294 100644
--- a/pkg/watcher/pubspec.yaml
+++ b/pkg/watcher/pubspec.yaml
@@ -1,5 +1,5 @@
name: watcher
-version: 0.9.0
+version: 0.9.2
author: "Dart Team <misc@dartlang.org>"
homepage: http://www.dartlang.org
description: >
@@ -8,8 +8,8 @@
modified.
dependencies:
crypto: ">=0.9.0 <0.10.0"
- path: ">=0.9.0 <0.10.0"
- stack_trace: ">=0.9.0 <0.10.0"
+ path: ">=0.9.0 <2.0.0"
+ stack_trace: ">=0.9.1 <0.10.0"
dev_dependencies:
scheduled_test: ">=0.9.0 <0.10.0"
unittest: ">=0.9.0 <0.10.0"
diff --git a/runtime/bin/dbg_message.cc b/runtime/bin/dbg_message.cc
index d9df5b3..5912c31 100644
--- a/runtime/bin/dbg_message.cc
+++ b/runtime/bin/dbg_message.cc
@@ -1066,11 +1066,15 @@
}
-void DbgMsgQueue::SendBreakpointEvent(const Dart_CodeLocation& location) {
+void DbgMsgQueue::SendBreakpointEvent(intptr_t bp_id,
+ const Dart_CodeLocation& location) {
dart::TextBuffer msg(128);
msg.Printf("{ \"event\": \"paused\", \"params\": { ");
msg.Printf("\"reason\": \"breakpoint\", ");
msg.Printf("\"isolateId\": %" Pd64 "", isolate_id_);
+ if (bp_id != ILLEGAL_BREAKPOINT_ID) {
+ msg.Printf(",\"breakpointId\": %" Pd "", bp_id);
+ }
if (!Dart_IsNull(location.script_url)) {
ASSERT(Dart_IsString(location.script_url));
msg.Printf(",\"location\": { \"url\":");
@@ -1281,13 +1285,14 @@
void DbgMsgQueueList::PausedEventHandler(Dart_IsolateId isolate_id,
+ intptr_t bp_id,
const Dart_CodeLocation& loc) {
DebuggerConnectionHandler::WaitForConnection();
Dart_EnterScope();
DbgMsgQueue* msg_queue = GetIsolateMsgQueue(isolate_id);
ASSERT(msg_queue != NULL);
msg_queue->SendQueuedMsgs();
- msg_queue->SendBreakpointEvent(loc);
+ msg_queue->SendBreakpointEvent(bp_id, loc);
msg_queue->HandleMessages();
Dart_ExitScope();
}
diff --git a/runtime/bin/dbg_message.h b/runtime/bin/dbg_message.h
index 5386318..79551ee 100644
--- a/runtime/bin/dbg_message.h
+++ b/runtime/bin/dbg_message.h
@@ -174,7 +174,7 @@
void SendQueuedMsgs();
// Send breakpoint event message over to the debugger.
- void SendBreakpointEvent(const Dart_CodeLocation& location);
+ void SendBreakpointEvent(intptr_t bp_id, const Dart_CodeLocation& location);
// Send Exception event message over to the debugger.
void SendExceptionEvent(Dart_Handle exception, Dart_StackTrace trace);
@@ -243,6 +243,7 @@
intptr_t bp_id,
const Dart_CodeLocation& location);
static void PausedEventHandler(Dart_IsolateId isolate_id,
+ intptr_t bp_id,
const Dart_CodeLocation& loc);
static void ExceptionThrownHandler(Dart_IsolateId isolate_id,
Dart_Handle exception,
diff --git a/runtime/bin/eventhandler_win.cc b/runtime/bin/eventhandler_win.cc
index 334d496..7b5d66a 100644
--- a/runtime/bin/eventhandler_win.cc
+++ b/runtime/bin/eventhandler_win.cc
@@ -50,11 +50,24 @@
}
+OverlappedBuffer* OverlappedBuffer::AllocateRecvFromBuffer(int buffer_size) {
+ // For calling recvfrom additional buffer space is needed for the source
+ // address information.
+ buffer_size += sizeof(socklen_t) + sizeof(struct sockaddr_storage);
+ return AllocateBuffer(buffer_size, kRecvFrom);
+}
+
+
OverlappedBuffer* OverlappedBuffer::AllocateWriteBuffer(int buffer_size) {
return AllocateBuffer(buffer_size, kWrite);
}
+OverlappedBuffer* OverlappedBuffer::AllocateSendToBuffer(int buffer_size) {
+ return AllocateBuffer(buffer_size, kSendTo);
+}
+
+
OverlappedBuffer* OverlappedBuffer::AllocateDisconnectBuffer() {
return AllocateBuffer(0, kDisconnect);
}
@@ -91,7 +104,7 @@
int OverlappedBuffer::GetRemainingLength() {
- ASSERT(operation_ == kRead);
+ ASSERT(operation_ == kRead || operation_ == kRecvFrom);
return data_length_ - index_;
}
@@ -199,6 +212,11 @@
}
+void Handle::RecvFromComplete(OverlappedBuffer* buffer) {
+ ReadComplete(buffer);
+}
+
+
void Handle::WriteComplete(OverlappedBuffer* buffer) {
ScopedLock lock(this);
// Currently only one outstanding write at the time.
@@ -279,6 +297,11 @@
}
+bool Handle::IssueRecvFrom() {
+ return false;
+}
+
+
bool Handle::IssueWrite() {
ScopedLock lock(this);
ASSERT(type_ != kListenSocket);
@@ -303,6 +326,11 @@
}
+bool Handle::IssueSendTo(struct sockaddr* sa, socklen_t sa_len) {
+ return false;
+}
+
+
void Handle::HandleIssueError() {
DWORD error = GetLastError();
if (error == ERROR_BROKEN_PIPE) {
@@ -543,6 +571,27 @@
}
+int Handle::RecvFrom(
+ void* buffer, int num_bytes, struct sockaddr* sa, socklen_t sa_len) {
+ ScopedLock lock(this);
+ if (data_ready_ == NULL) return 0;
+ num_bytes = data_ready_->Read(buffer, num_bytes);
+ if (data_ready_->from()->sa_family == AF_INET) {
+ ASSERT(sa_len >= sizeof(struct sockaddr_in));
+ memmove(sa, data_ready_->from(), sizeof(struct sockaddr_in));
+ } else {
+ ASSERT(data_ready_->from()->sa_family == AF_INET6);
+ ASSERT(sa_len >= sizeof(struct sockaddr_in6));
+ memmove(sa, data_ready_->from(), sizeof(struct sockaddr_in6));
+ }
+ // Always dispose of the buffer, as UDP messages must be read in their
+ // entirety to match how recvfrom works in a socket.
+ OverlappedBuffer::DisposeBuffer(data_ready_);
+ data_ready_ = NULL;
+ return num_bytes;
+}
+
+
int Handle::Write(const void* buffer, int num_bytes) {
ScopedLock lock(this);
if (pending_write_ != NULL) return 0;
@@ -556,6 +605,20 @@
}
+int Handle::SendTo(
+ const void* buffer, int num_bytes, struct sockaddr* sa, socklen_t sa_len) {
+ ScopedLock lock(this);
+ if (pending_write_ != NULL) return 0;
+ if (num_bytes > kBufferSize) num_bytes = kBufferSize;
+ ASSERT(SupportsOverlappedIO());
+ if (completion_port_ == INVALID_HANDLE_VALUE) return 0;
+ pending_write_ = OverlappedBuffer::AllocateSendToBuffer(num_bytes);
+ pending_write_->Write(buffer, num_bytes);
+ if (!IssueSendTo(sa, sa_len)) return -1;
+ return num_bytes;
+}
+
+
static void WriteFileThread(uword args) {
StdHandle* handle = reinterpret_cast<StdHandle*>(args);
handle->RunWriteLoop();
@@ -707,7 +770,9 @@
ASSERT(completion_port_ != INVALID_HANDLE_VALUE);
ASSERT(pending_read_ == NULL);
- OverlappedBuffer* buffer = OverlappedBuffer::AllocateReadBuffer(1024);
+ // TODO(sgjesse): Use a MTU value here. Only the loopback adapter can
+ // handle 64k datagrams.
+ OverlappedBuffer* buffer = OverlappedBuffer::AllocateReadBuffer(65536);
DWORD flags;
flags = 0;
@@ -791,6 +856,85 @@
}
+bool DatagramSocket::IssueSendTo(struct sockaddr* sa, socklen_t sa_len) {
+ ScopedLock lock(this);
+ ASSERT(completion_port_ != INVALID_HANDLE_VALUE);
+ ASSERT(pending_write_ != NULL);
+ ASSERT(pending_write_->operation() == OverlappedBuffer::kSendTo);
+
+ int rc = WSASendTo(socket(),
+ pending_write_->GetWASBUF(),
+ 1,
+ NULL,
+ 0,
+ sa,
+ sa_len,
+ pending_write_->GetCleanOverlapped(),
+ NULL);
+ if (rc == NO_ERROR || WSAGetLastError() == WSA_IO_PENDING) {
+ return true;
+ }
+ OverlappedBuffer::DisposeBuffer(pending_write_);
+ pending_write_ = NULL;
+ HandleIssueError();
+ return false;
+}
+
+
+bool DatagramSocket::IssueRecvFrom() {
+ ScopedLock lock(this);
+ ASSERT(completion_port_ != INVALID_HANDLE_VALUE);
+ ASSERT(pending_read_ == NULL);
+
+ OverlappedBuffer* buffer = OverlappedBuffer::AllocateRecvFromBuffer(1024);
+
+ DWORD flags;
+ flags = 0;
+ int len;
+ int rc = WSARecvFrom(socket(),
+ buffer->GetWASBUF(),
+ 1,
+ NULL,
+ &flags,
+ buffer->from(),
+ buffer->from_len_addr(),
+ buffer->GetCleanOverlapped(),
+ NULL);
+ if (rc == NO_ERROR || WSAGetLastError() == WSA_IO_PENDING) {
+ pending_read_ = buffer;
+ return true;
+ }
+ OverlappedBuffer::DisposeBuffer(buffer);
+ pending_read_ = NULL;
+ HandleIssueError();
+ return false;
+}
+
+
+void DatagramSocket::EnsureInitialized(
+ EventHandlerImplementation* event_handler) {
+ ScopedLock lock(this);
+ if (completion_port_ == INVALID_HANDLE_VALUE) {
+ ASSERT(event_handler_ == NULL);
+ event_handler_ = event_handler;
+ CreateCompletionPort(event_handler_->completion_port());
+ }
+}
+
+
+bool DatagramSocket::IsClosed() {
+ return IsClosing() && !HasPendingRead() && !HasPendingWrite();
+}
+
+
+void DatagramSocket::DoClose() {
+ // Just close the socket. This will cause any queued requests to be aborted.
+ closesocket(socket());
+ MarkClosedRead();
+ MarkClosedWrite();
+}
+
+
static void DeleteIfClosed(Handle* handle) {
if (handle->IsClosed()) {
Dart_Port port = handle->port();
@@ -858,7 +1002,11 @@
int event_mask = (1 << kCloseEvent);
DartUtils::PostInt32(handle->port(), event_mask);
} else if (!handle->HasPendingRead()) {
- handle->IssueRead();
+ if (handle->is_datagram_socket()) {
+ handle->IssueRecvFrom();
+ } else {
+ handle->IssueRead();
+ }
}
}
@@ -953,6 +1101,23 @@
}
+void EventHandlerImplementation::HandleRecvFrom(Handle* handle,
+ int bytes,
+ OverlappedBuffer* buffer) {
+ ASSERT(handle->is_datagram_socket());
+ buffer->set_data_length(bytes);
+ handle->ReadComplete(buffer);
+ if (!handle->IsClosing()) {
+ int event_mask = 1 << kInEvent;
+ if ((handle->mask() & event_mask) != 0) {
+ DartUtils::PostInt32(handle->port(), event_mask);
+ }
+ }
+
+ DeleteIfClosed(handle);
+}
+
+
void EventHandlerImplementation::HandleWrite(Handle* handle,
int bytes,
OverlappedBuffer* buffer) {
@@ -1004,7 +1169,13 @@
HandleRead(handle, bytes, buffer);
break;
}
- case OverlappedBuffer::kWrite: {
+ case OverlappedBuffer::kRecvFrom: {
+ Handle* handle = reinterpret_cast<Handle*>(key);
+ HandleRecvFrom(handle, bytes, buffer);
+ break;
+ }
+ case OverlappedBuffer::kWrite:
+ case OverlappedBuffer::kSendTo: {
Handle* handle = reinterpret_cast<Handle*>(key);
HandleWrite(handle, bytes, buffer);
break;
diff --git a/runtime/bin/eventhandler_win.h b/runtime/bin/eventhandler_win.h
index 43562cd..90e505a 100644
--- a/runtime/bin/eventhandler_win.h
+++ b/runtime/bin/eventhandler_win.h
@@ -10,6 +10,7 @@
#endif
#include <winsock2.h>
+#include <ws2tcpip.h>
#include <mswsock.h>
#include "bin/builtin.h"
@@ -40,11 +41,13 @@
// socket for the client.
class OverlappedBuffer {
public:
- enum Operation { kAccept, kRead, kWrite, kDisconnect };
+ enum Operation { kAccept, kRead, kRecvFrom, kWrite, kSendTo, kDisconnect };
static OverlappedBuffer* AllocateAcceptBuffer(int buffer_size);
static OverlappedBuffer* AllocateReadBuffer(int buffer_size);
+ static OverlappedBuffer* AllocateRecvFromBuffer(int buffer_size);
static OverlappedBuffer* AllocateWriteBuffer(int buffer_size);
+ static OverlappedBuffer* AllocateSendToBuffer(int buffer_size);
static OverlappedBuffer* AllocateDisconnectBuffer();
static void DisposeBuffer(OverlappedBuffer* buffer);
@@ -71,6 +74,9 @@
SOCKET client() { return client_; }
char* GetBufferStart() { return reinterpret_cast<char*>(&buffer_data_); }
int GetBufferSize() { return buflen_; }
+ struct sockaddr* from() { return from_; }
+ socklen_t* from_len_addr() { return from_len_addr_; }
+ socklen_t from_len() { return from_ == NULL ? 0 : *from_len_addr_; }
// Returns the address of the OVERLAPPED structure with all fields
// initialized to zero.
@@ -92,6 +98,21 @@
OverlappedBuffer(int buffer_size, Operation operation)
: operation_(operation), buflen_(buffer_size) {
memset(GetBufferStart(), 0, GetBufferSize());
+ if (operation == kRecvFrom) {
+ // Reserve part of the buffer for the length of source sockaddr
+ // and source sockaddr.
+ const int kAdditionalSize =
+ sizeof(struct sockaddr_storage) + sizeof(socklen_t);
+ ASSERT(buflen_ > kAdditionalSize);
+ buflen_ -= kAdditionalSize;
+ from_len_addr_ = reinterpret_cast<socklen_t*>(
+ GetBufferStart() + GetBufferSize());
+ *from_len_addr_ = sizeof(struct sockaddr_storage);
+ from_ = reinterpret_cast<struct sockaddr*>(from_len_addr_ + 1);
+ } else {
+ from_len_addr_ = NULL;
+ from_ = NULL;
+ }
index_ = 0;
data_length_ = 0;
if (operation_ == kAccept) {
@@ -107,6 +128,9 @@
free(buffer);
}
+ // Allocate an overlapped buffer for thse specified amount of data and
+ // operation. Some operations need additional buffer space, which is
+ // handled by this method.
static OverlappedBuffer* AllocateBuffer(int buffer_size,
Operation operation);
@@ -120,6 +144,11 @@
WSABUF wbuf_; // Structure for passing buffer to WSA functions.
+ // For the recvfrom operation additional storace is allocated for the
+ // source sockaddr.
+ socklen_t* from_len_addr_; // Pointer to source sockaddr size storage.
+ struct sockaddr* from_; // Pointer to source sockaddr storage.
+
// Buffer for recv/send/AcceptEx. This must be at the end of the
// object as the object is allocated larger than it's definition
// indicate to extend this array.
@@ -136,7 +165,8 @@
kStd,
kDirectoryWatch,
kClientSocket,
- kListenSocket
+ kListenSocket,
+ kDatagramSocket
};
class ScopedLock {
@@ -158,14 +188,23 @@
// Socket interface exposing normal socket operations.
int Available();
int Read(void* buffer, int num_bytes);
+ int RecvFrom(
+ void* buffer, int num_bytes, struct sockaddr* sa, socklen_t addr_len);
virtual int Write(const void* buffer, int num_bytes);
+ virtual int SendTo(const void* buffer,
+ int num_bytes,
+ struct sockaddr* sa,
+ socklen_t sa_len);
// Internal interface used by the event handler.
virtual bool IssueRead();
+ virtual bool IssueRecvFrom();
virtual bool IssueWrite();
+ virtual bool IssueSendTo(struct sockaddr* sa, socklen_t sa_len);
bool HasPendingRead();
bool HasPendingWrite();
void ReadComplete(OverlappedBuffer* buffer);
+ void RecvFromComplete(OverlappedBuffer* buffer);
void WriteComplete(OverlappedBuffer* buffer);
bool IsClosing() { return (flags_ & (1 << kClosing)) != 0; }
@@ -199,9 +238,12 @@
}
Type type() { return type_; }
bool is_file() { return type_ == kFile; }
- bool is_socket() { return type_ == kListenSocket || type_ == kClientSocket; }
+ bool is_socket() { return type_ == kListenSocket ||
+ type_ == kClientSocket ||
+ type_ == kDatagramSocket; }
bool is_listen_socket() { return type_ == kListenSocket; }
bool is_client_socket() { return type_ == kClientSocket; }
+ bool is_datagram_socket() { return type_ == kDatagramSocket; }
void set_mask(intptr_t mask) { mask_ = mask; }
intptr_t mask() { return mask_; }
@@ -416,6 +458,27 @@
};
+class DatagramSocket : public SocketHandle {
+ public:
+ explicit DatagramSocket(SOCKET s) : SocketHandle(s) {
+ type_ = kDatagramSocket;
+ }
+
+ virtual ~DatagramSocket() {
+ // Don't delete this object until all pending requests have been handled.
+ ASSERT(!HasPendingRead());
+ ASSERT(!HasPendingWrite());
+ };
+
+ // Internal interface used by the event handler.
+ virtual bool IssueRecvFrom();
+ virtual bool IssueSendTo(sockaddr* sa, socklen_t sa_len);
+
+ virtual void EnsureInitialized(EventHandlerImplementation* event_handler);
+ virtual void DoClose();
+ virtual bool IsClosed();
+};
+
// Event handler.
class EventHandlerImplementation {
public:
@@ -435,6 +498,7 @@
void HandleClosed(Handle* handle);
void HandleError(Handle* handle);
void HandleRead(Handle* handle, int bytes, OverlappedBuffer* buffer);
+ void HandleRecvFrom(Handle* handle, int bytes, OverlappedBuffer* buffer);
void HandleWrite(Handle* handle, int bytes, OverlappedBuffer* buffer);
void HandleDisconnect(ClientSocket* client_socket,
int bytes,
diff --git a/runtime/bin/io_natives.cc b/runtime/bin/io_natives.cc
index 8a182d8..480ce68 100644
--- a/runtime/bin/io_natives.cc
+++ b/runtime/bin/io_natives.cc
@@ -59,19 +59,27 @@
V(ServerSocket_CreateBindListen, 5) \
V(ServerSocket_Accept, 2) \
V(Socket_CreateConnect, 3) \
+ V(Socket_CreateBindDatagram, 4) \
V(Socket_Available, 1) \
V(Socket_Read, 2) \
+ V(Socket_RecvFrom, 1) \
V(Socket_WriteList, 4) \
+ V(Socket_SendTo, 6) \
V(Socket_GetPort, 1) \
V(Socket_GetRemotePeer, 1) \
V(Socket_GetError, 1) \
V(Socket_GetStdioHandle, 2) \
V(Socket_GetType, 1) \
- V(Socket_SetOption, 3) \
+ V(Socket_GetOption, 3) \
+ V(Socket_SetOption, 4) \
+ V(Socket_JoinMulticast, 4) \
+ V(Socket_LeaveMulticast, 4) \
V(Socket_SetSocketId, 2) \
V(Stdin_ReadByte, 1) \
- V(Stdin_SetEchoMode, 2) \
- V(Stdin_SetLineMode, 2) \
+ V(Stdin_GetEchoMode, 0) \
+ V(Stdin_SetEchoMode, 1) \
+ V(Stdin_GetLineMode, 0) \
+ V(Stdin_SetLineMode, 1) \
V(StringToSystemEncoding, 1) \
V(SystemEncodingToString, 1)
diff --git a/runtime/bin/isolate_data.h b/runtime/bin/isolate_data.h
index 8a977be..3dc0ba2f 100644
--- a/runtime/bin/isolate_data.h
+++ b/runtime/bin/isolate_data.h
@@ -20,13 +20,16 @@
// when the isolate shuts down.
class IsolateData {
public:
- explicit IsolateData(const char* url) : script_url(strdup(url)) {
+ explicit IsolateData(const char* url)
+ : script_url(strdup(url)), udp_receive_buffer(NULL) {
}
~IsolateData() {
free(script_url);
+ free(udp_receive_buffer);
}
char* script_url;
+ uint8_t* udp_receive_buffer;
private:
DISALLOW_COPY_AND_ASSIGN(IsolateData);
diff --git a/runtime/bin/net/nss.gyp b/runtime/bin/net/nss.gyp
index 9cdface..dfed0d4 100644
--- a/runtime/bin/net/nss.gyp
+++ b/runtime/bin/net/nss.gyp
@@ -356,6 +356,8 @@
'HAVE_LCHOWN=1',
'HAVE_STRERROR=1',
'HAVE_DLADDR=1',
+ 'HAVE_SETPRIORITY=1',
+ 'HAVE_SYSCALL=1',
'_REENTRANT=1',
'FORCE_PR_LOG',
'_PR_PTHREADS',
diff --git a/runtime/bin/socket.cc b/runtime/bin/socket.cc
index 046bd18..2d1b8bc 100644
--- a/runtime/bin/socket.cc
+++ b/runtime/bin/socket.cc
@@ -3,6 +3,7 @@
// BSD-style license that can be found in the LICENSE file.
#include "bin/io_buffer.h"
+#include "bin/isolate_data.h"
#include "bin/socket.h"
#include "bin/dartutils.h"
#include "bin/thread.h"
@@ -33,6 +34,9 @@
Dart_Handle result = Dart_TypedDataAcquireData(
obj, &data_type, reinterpret_cast<void**>(&data), &len);
if (Dart_IsError(result)) Dart_PropagateError(result);
+ if (data_type != Dart_TypedData_kUint8) {
+ Dart_PropagateError(Dart_NewApiError("Unexpected type for socket address"));
+ }
memmove(reinterpret_cast<void *>(addr), data, len);
Dart_TypedDataReleaseData(obj);
}
@@ -103,10 +107,8 @@
void FUNCTION_NAME(Socket_CreateConnect)(Dart_NativeArguments args) {
RawAddr addr;
GetSockAddr(Dart_GetNativeArgument(args, 1), &addr);
- int64_t port = DartUtils::GetInt64ValueCheckRange(
- Dart_GetNativeArgument(args, 2),
- 0,
- 65535);
+ Dart_Handle port_arg = Dart_GetNativeArgument(args, 2);
+ int64_t port = DartUtils::GetInt64ValueCheckRange(port_arg, 0, 65535);
intptr_t socket = Socket::CreateConnect(addr, port);
OSError error;
if (socket >= 0) {
@@ -118,6 +120,23 @@
}
+void FUNCTION_NAME(Socket_CreateBindDatagram)(Dart_NativeArguments args) {
+ RawAddr addr;
+ GetSockAddr(Dart_GetNativeArgument(args, 1), &addr);
+ Dart_Handle port_arg = Dart_GetNativeArgument(args, 2);
+ int64_t port = DartUtils::GetInt64ValueCheckRange(port_arg, 0, 65535);
+ bool reuse_addr = DartUtils::GetBooleanValue(Dart_GetNativeArgument(args, 3));
+ intptr_t socket = Socket::CreateBindDatagram(&addr, port, reuse_addr);
+ if (socket >= 0) {
+ Socket::SetSocketIdNativeField(Dart_GetNativeArgument(args, 0), socket);
+ Dart_SetReturnValue(args, Dart_True());
+ } else {
+ OSError error;
+ Dart_SetReturnValue(args, DartUtils::NewDartOSError(&error));
+ }
+}
+
+
void FUNCTION_NAME(Socket_Available)(Dart_NativeArguments args) {
intptr_t socket =
Socket::GetSocketIdNativeField(Dart_GetNativeArgument(args, 0));
@@ -182,6 +201,79 @@
}
+void FUNCTION_NAME(Socket_RecvFrom)(Dart_NativeArguments args) {
+ intptr_t socket =
+ Socket::GetSocketIdNativeField(Dart_GetNativeArgument(args, 0));
+
+ // TODO(sgjesse): Use a MTU value here. Only the loopback adapter can
+ // handle 64k datagrams.
+ IsolateData* isolate_data =
+ reinterpret_cast<IsolateData*>(Dart_CurrentIsolateData());
+ if (isolate_data->udp_receive_buffer == NULL) {
+ isolate_data->udp_receive_buffer =
+ reinterpret_cast<uint8_t*>(malloc(65536));
+ }
+ RawAddr addr;
+ intptr_t bytes_read =
+ Socket::RecvFrom(socket, isolate_data->udp_receive_buffer, 65536, &addr);
+ if (bytes_read == 0) {
+ Dart_SetReturnValue(args, Dart_Null());
+ return;
+ }
+ if (bytes_read < 0) {
+ ASSERT(bytes_read == -1);
+ Dart_SetReturnValue(args, DartUtils::NewDartOSError());
+ return;
+ }
+ // Datagram data read. Copy into buffer of the exact size,
+ ASSERT(bytes_read > 0);
+ uint8_t* data_buffer = NULL;
+ Dart_Handle data = IOBuffer::Allocate(bytes_read, &data_buffer);
+ if (Dart_IsError(data)) Dart_PropagateError(data);
+ ASSERT(data_buffer != NULL);
+ memmove(data_buffer, isolate_data->udp_receive_buffer, bytes_read);
+
+ // Get the port and clear it in the sockaddr structure.
+ int port = SocketAddress::GetAddrPort(&addr);
+ if (addr.addr.sa_family == AF_INET) {
+ addr.in.sin_port = 0;
+ } else {
+ ASSERT(addr.addr.sa_family == AF_INET6);
+ addr.in6.sin6_port = 0;
+ }
+ // Format the address to a string using the numeric format.
+ char numeric_address[INET6_ADDRSTRLEN];
+ Socket::FormatNumericAddress(&addr, numeric_address, INET6_ADDRSTRLEN);
+
+ // Create a Datagram object with the data and sender address and port.
+ const int kNumArgs = 5;
+ Dart_Handle dart_args[kNumArgs];
+ dart_args[0] = data;
+ dart_args[1] = Dart_NewBoolean(addr.addr.sa_family == AF_INET6);
+ dart_args[2] = Dart_NewStringFromCString(numeric_address);
+ if (Dart_IsError(dart_args[2])) Dart_PropagateError(dart_args[2]);
+ int len = SocketAddress::GetAddrLength(&addr);
+ dart_args[3] = Dart_NewTypedData(Dart_TypedData_kUint8, len);
+ if (Dart_IsError(dart_args[3])) Dart_PropagateError(dart_args[3]);
+ Dart_Handle err = Dart_ListSetAsBytes(
+ dart_args[3], 0, reinterpret_cast<uint8_t *>(&addr), len);
+ if (Dart_IsError(err)) Dart_PropagateError(err);
+ dart_args[4] = Dart_NewInteger(port);
+ if (Dart_IsError(dart_args[4])) Dart_PropagateError(dart_args[4]);
+ // TODO(sgjesse): Cache the _makeDatagram function somewhere.
+ Dart_Handle io_lib =
+ Dart_LookupLibrary(DartUtils::NewString("dart:io"));
+ if (Dart_IsError(io_lib)) Dart_PropagateError(io_lib);
+ Dart_Handle result =
+ Dart_Invoke(io_lib,
+ DartUtils::NewString("_makeDatagram"),
+ kNumArgs,
+ dart_args);
+ if (Dart_IsError(result)) Dart_PropagateError(result);
+ Dart_SetReturnValue(args, result);
+}
+
+
void FUNCTION_NAME(Socket_WriteList)(Dart_NativeArguments args) {
static bool short_socket_writes = Dart_IsVMFlagSet("short_socket_write");
intptr_t socket =
@@ -216,6 +308,44 @@
}
+void FUNCTION_NAME(Socket_SendTo)(Dart_NativeArguments args) {
+ intptr_t socket =
+ Socket::GetSocketIdNativeField(Dart_GetNativeArgument(args, 0));
+ Dart_Handle buffer_obj = Dart_GetNativeArgument(args, 1);
+ intptr_t offset =
+ DartUtils::GetIntptrValue(Dart_GetNativeArgument(args, 2));
+ intptr_t length =
+ DartUtils::GetIntptrValue(Dart_GetNativeArgument(args, 3));
+ Dart_Handle address_obj = Dart_GetNativeArgument(args, 4);
+ ASSERT(Dart_IsList(address_obj));
+ RawAddr addr;
+ GetSockAddr(address_obj, &addr);
+ int64_t port = DartUtils::GetInt64ValueCheckRange(
+ Dart_GetNativeArgument(args, 5),
+ 0,
+ 65535);
+ SocketAddress::SetAddrPort(&addr, port);
+ Dart_TypedData_Type type;
+ uint8_t* buffer = NULL;
+ intptr_t len;
+ Dart_Handle result = Dart_TypedDataAcquireData(
+ buffer_obj, &type, reinterpret_cast<void**>(&buffer), &len);
+ if (Dart_IsError(result)) Dart_PropagateError(result);
+ ASSERT((offset + length) <= len);
+ buffer += offset;
+ intptr_t bytes_written = Socket::SendTo(socket, buffer, length, addr);
+ if (bytes_written >= 0) {
+ Dart_TypedDataReleaseData(buffer_obj);
+ Dart_SetReturnValue(args, Dart_NewInteger(bytes_written));
+ } else {
+ // Extract OSError before we release data, as it may override the error.
+ OSError os_error;
+ Dart_TypedDataReleaseData(buffer_obj);
+ Dart_SetReturnValue(args, DartUtils::NewDartOSError(&os_error));
+ }
+}
+
+
void FUNCTION_NAME(Socket_GetPort)(Dart_NativeArguments args) {
intptr_t socket =
Socket::GetSocketIdNativeField(Dart_GetNativeArgument(args, 0));
@@ -411,7 +541,6 @@
}
-
CObject* Socket::ListInterfacesRequest(const CObjectArray& request) {
if (request.Length() == 1 &&
request[0]->IsInt32()) {
@@ -467,26 +596,143 @@
}
+void FUNCTION_NAME(Socket_GetOption)(Dart_NativeArguments args) {
+ intptr_t socket =
+ Socket::GetSocketIdNativeField(Dart_GetNativeArgument(args, 0));
+ int64_t option = DartUtils::GetIntegerValue(Dart_GetNativeArgument(args, 1));
+ intptr_t protocol =
+ static_cast<intptr_t>(
+ DartUtils::GetIntegerValue(Dart_GetNativeArgument(args, 2)));
+ bool ok = false;
+ switch (option) {
+ case 0: { // TCP_NODELAY.
+ bool enabled;
+ ok = Socket::GetNoDelay(socket, &enabled);
+ if (ok) {
+ Dart_SetReturnValue(args, enabled ? Dart_True() : Dart_False());
+ }
+ break;
+ }
+ case 1: { // IP_MULTICAST_LOOP.
+ bool enabled;
+ ok = Socket::GetMulticastLoop(socket, protocol, &enabled);
+ if (ok) {
+ Dart_SetReturnValue(args, enabled ? Dart_True() : Dart_False());
+ }
+ break;
+ }
+ case 2: { // IP_MULTICAST_TTL.
+ int value;
+ ok = Socket::GetMulticastHops(socket, protocol, &value);
+ if (ok) {
+ Dart_SetReturnValue(args, Dart_NewInteger(value));
+ }
+ break;
+ }
+ case 3: { // IP_MULTICAST_IF.
+ UNIMPLEMENTED();
+ break;
+ }
+ case 4: { // IP_BROADCAST.
+ bool enabled;
+ ok = Socket::GetBroadcast(socket, &enabled);
+ if (ok) {
+ Dart_SetReturnValue(args, enabled ? Dart_True() : Dart_False());
+ }
+ break;
+ }
+ default:
+ UNREACHABLE();
+ break;
+ }
+ // In case of failure the return value is not set above.
+ if (!ok) {
+ Dart_SetReturnValue(args, DartUtils::NewDartOSError());
+ }
+}
+
+
void FUNCTION_NAME(Socket_SetOption)(Dart_NativeArguments args) {
bool result = false;
intptr_t socket =
Socket::GetSocketIdNativeField(Dart_GetNativeArgument(args, 0));
- Dart_Handle option_obj = Dart_GetNativeArgument(args, 1);
- int64_t option;
- Dart_Handle err = Dart_IntegerToInt64(option_obj, &option);
- if (Dart_IsError(err)) Dart_PropagateError(err);
- Dart_Handle enabled_obj = Dart_GetNativeArgument(args, 2);
- bool enabled;
- err = Dart_BooleanValue(enabled_obj, &enabled);
- if (Dart_IsError(err)) Dart_PropagateError(err);
+ int64_t option = DartUtils::GetIntegerValue(Dart_GetNativeArgument(args, 1));
+ int64_t protocol = DartUtils::GetInt64ValueCheckRange(
+ Dart_GetNativeArgument(args, 2),
+ SocketAddress::TYPE_IPV4,
+ SocketAddress::TYPE_IPV6);
switch (option) {
case 0: // TCP_NODELAY.
- result = Socket::SetNoDelay(socket, enabled);
+ result = Socket::SetNoDelay(
+ socket, DartUtils::GetBooleanValue(Dart_GetNativeArgument(args, 3)));
+ break;
+ case 1: // IP_MULTICAST_LOOP.
+ result = Socket::SetMulticastLoop(
+ socket,
+ protocol,
+ DartUtils::GetBooleanValue(Dart_GetNativeArgument(args, 3)));
+ break;
+ case 2: // IP_MULTICAST_TTL.
+ result = Socket::SetMulticastHops(
+ socket,
+ protocol,
+ DartUtils::GetIntegerValue(Dart_GetNativeArgument(args, 3)));
+ break;
+ case 3: { // IP_MULTICAST_IF.
+ UNIMPLEMENTED();
+ break;
+ }
+ case 4: // IP_BROADCAST.
+ result = Socket::SetBroadcast(
+ socket, DartUtils::GetBooleanValue(Dart_GetNativeArgument(args, 3)));
break;
default:
+ Dart_PropagateError(Dart_NewApiError("Value outside expected range"));
break;
}
- Dart_SetReturnValue(args, Dart_NewBoolean(result));
+ if (result) {
+ Dart_SetReturnValue(args, Dart_Null());
+ } else {
+ Dart_SetReturnValue(args, DartUtils::NewDartOSError());
+ }
+}
+
+
+void FUNCTION_NAME(Socket_JoinMulticast)(Dart_NativeArguments args) {
+ intptr_t socket =
+ Socket::GetSocketIdNativeField(Dart_GetNativeArgument(args, 0));
+ RawAddr addr;
+ GetSockAddr(Dart_GetNativeArgument(args, 1), &addr);
+ RawAddr interface;
+ if (Dart_GetNativeArgument(args, 2) != Dart_Null()) {
+ GetSockAddr(Dart_GetNativeArgument(args, 2), &interface);
+ }
+ int interfaceIndex =
+ DartUtils::GetIntegerValue(Dart_GetNativeArgument(args, 3));
+ if (Socket::JoinMulticast(socket, &addr, &interface, interfaceIndex)) {
+ Dart_SetReturnValue(args, Dart_Null());
+ } else {
+ Dart_SetReturnValue(args, DartUtils::NewDartOSError());
+ }
+}
+
+
+void FUNCTION_NAME(Socket_LeaveMulticast)(Dart_NativeArguments args) {
+ intptr_t socket =
+ Socket::GetSocketIdNativeField(Dart_GetNativeArgument(args, 0));
+ RawAddr addr;
+ GetSockAddr(Dart_GetNativeArgument(args, 1), &addr);
+ RawAddr interface;
+ if (Dart_GetNativeArgument(args, 2) != Dart_Null()) {
+ GetSockAddr(Dart_GetNativeArgument(args, 2), &interface);
+ }
+ int interfaceIndex =
+ DartUtils::GetIntegerValue(Dart_GetNativeArgument(args, 3));
+ if (Socket::LeaveMulticast(socket, &addr, &interface, interfaceIndex)) {
+ Dart_SetReturnValue(args, Dart_Null());
+ } else {
+ Dart_SetReturnValue(args, DartUtils::NewDartOSError());
+ }
}
diff --git a/runtime/bin/socket.h b/runtime/bin/socket.h
index d4ae826..0c009b0 100644
--- a/runtime/bin/socket.h
+++ b/runtime/bin/socket.h
@@ -65,6 +65,7 @@
const RawAddr& addr() const { return addr_; }
static intptr_t GetAddrLength(const RawAddr* addr) {
+ ASSERT(addr->ss.ss_family == AF_INET || addr->ss.ss_family == AF_INET6);
return addr->ss.ss_family == AF_INET6 ?
sizeof(struct sockaddr_in6) : sizeof(struct sockaddr_in);
}
@@ -170,10 +171,16 @@
static intptr_t Available(intptr_t fd);
static int Read(intptr_t fd, void* buffer, intptr_t num_bytes);
static int Write(intptr_t fd, const void* buffer, intptr_t num_bytes);
+ static int SendTo(
+ intptr_t fd, const void* buffer, intptr_t num_bytes, RawAddr addr);
+ static int RecvFrom(
+ intptr_t fd, void* buffer, intptr_t num_bytes, RawAddr* addr);
static intptr_t Create(RawAddr addr);
static intptr_t Connect(intptr_t fd, RawAddr addr, const intptr_t port);
static intptr_t CreateConnect(RawAddr addr,
const intptr_t port);
+ static intptr_t CreateBindDatagram(
+ RawAddr* addr, intptr_t port, bool reuseAddress);
static intptr_t GetPort(intptr_t fd);
static SocketAddress* GetRemotePeer(intptr_t fd, intptr_t* port);
static void GetError(intptr_t fd, OSError* os_error);
@@ -182,18 +189,31 @@
static void Close(intptr_t fd);
static bool SetNonBlocking(intptr_t fd);
static bool SetBlocking(intptr_t fd);
+ static bool GetNoDelay(intptr_t fd, bool* enabled);
static bool SetNoDelay(intptr_t fd, bool enabled);
+ static bool GetMulticastLoop(intptr_t fd, intptr_t protocol, bool* enabled);
+ static bool SetMulticastLoop(intptr_t fd, intptr_t protocol, bool enabled);
+ static bool GetMulticastHops(intptr_t fd, intptr_t protocol, int* value);
+ static bool SetMulticastHops(intptr_t fd, intptr_t protocol, int value);
+ static bool GetBroadcast(intptr_t fd, bool* value);
+ static bool SetBroadcast(intptr_t fd, bool value);
+ static bool JoinMulticast(
+ intptr_t fd, RawAddr* addr, RawAddr* interface, int interfaceIndex);
+ static bool LeaveMulticast(
+ intptr_t fd, RawAddr* addr, RawAddr* interface, int interfaceIndex);
// Perform a hostname lookup. Returns a AddressList of SocketAddress's.
static AddressList<SocketAddress>* LookupAddress(const char* host,
int type,
OSError** os_error);
+
static bool ReverseLookup(RawAddr addr,
char* host,
intptr_t host_len,
OSError** os_error);
static bool ParseAddress(int type, const char* address, RawAddr* addr);
+ static bool FormatNumericAddress(RawAddr* addr, char* address, int len);
// List interfaces. Returns a AddressList of InterfaceSocketAddress's.
static AddressList<InterfaceSocketAddress>* ListInterfaces(
diff --git a/runtime/bin/socket_android.cc b/runtime/bin/socket_android.cc
index 98af9a6..72a03bd 100644
--- a/runtime/bin/socket_android.cc
+++ b/runtime/bin/socket_android.cc
@@ -24,17 +24,27 @@
SocketAddress::SocketAddress(struct sockaddr* sa) {
ASSERT(INET6_ADDRSTRLEN >= INET_ADDRSTRLEN);
+ if (!Socket::FormatNumericAddress(
+ reinterpret_cast<RawAddr*>(sa), as_string_, INET6_ADDRSTRLEN)) {
+ as_string_[0] = 0;
+ }
socklen_t salen = GetAddrLength(reinterpret_cast<RawAddr*>(sa));
- if (TEMP_FAILURE_RETRY(getnameinfo(sa,
+ memmove(reinterpret_cast<void *>(&addr_), sa, salen);
+}
+
+
+bool Socket::FormatNumericAddress(RawAddr* addr, char* address, int len) {
+ socklen_t salen = SocketAddress::GetAddrLength(addr);
+ if (TEMP_FAILURE_RETRY(getnameinfo(&addr->addr,
salen,
- as_string_,
- INET6_ADDRSTRLEN,
+ address,
+ len,
NULL,
0,
NI_NUMERICHOST)) != 0) {
- as_string_[0] = 0;
+ return false;
}
- memmove(reinterpret_cast<void *>(&addr_), sa, salen);
+ return true;
}
@@ -105,6 +115,22 @@
}
+int Socket::RecvFrom(intptr_t fd, void* buffer, intptr_t num_bytes,
+ RawAddr* addr) {
+ ASSERT(fd >= 0);
+ socklen_t addr_len = sizeof(addr->ss);
+ ssize_t read_bytes =
+ TEMP_FAILURE_RETRY(
+ recvfrom(fd, buffer, num_bytes, 0, &addr->addr, &addr_len));
+ if (read_bytes == -1 && errno == EWOULDBLOCK) {
+ // If the read would block we need to retry and therefore return 0
+ // as the number of bytes written.
+ read_bytes = 0;
+ }
+ return read_bytes;
+}
+
+
int Socket::Write(intptr_t fd, const void* buffer, intptr_t num_bytes) {
ASSERT(fd >= 0);
ssize_t written_bytes = TEMP_FAILURE_RETRY(write(fd, buffer, num_bytes));
@@ -118,6 +144,23 @@
}
+int Socket::SendTo(intptr_t fd, const void* buffer, intptr_t num_bytes,
+ RawAddr addr) {
+ ASSERT(fd >= 0);
+ ssize_t written_bytes =
+ TEMP_FAILURE_RETRY(
+ sendto(fd, buffer, num_bytes, 0,
+ &addr.addr, SocketAddress::GetAddrLength(&addr)));
+ ASSERT(EAGAIN == EWOULDBLOCK);
+ if (written_bytes == -1 && errno == EWOULDBLOCK) {
+ // If the would block we need to retry and therefore return 0 as
+ // the number of bytes written.
+ written_bytes = 0;
+ }
+ return written_bytes;
+}
+
+
intptr_t Socket::GetPort(intptr_t fd) {
ASSERT(fd >= 0);
RawAddr raw;
@@ -256,6 +299,36 @@
}
+intptr_t Socket::CreateBindDatagram(
+ RawAddr* addr, intptr_t port, bool reuseAddress) {
+ intptr_t fd;
+
+ fd = TEMP_FAILURE_RETRY(
+ socket(addr->addr.sa_family, SOCK_DGRAM, IPPROTO_UDP));
+ if (fd < 0) return -1;
+
+ FDUtils::SetCloseOnExec(fd);
+
+ if (reuseAddress) {
+ int optval = 1;
+ VOID_TEMP_FAILURE_RETRY(
+ setsockopt(fd, SOL_SOCKET, SO_REUSEADDR, &optval, sizeof(optval)));
+ }
+
+ SocketAddress::SetAddrPort(addr, port);
+ if (TEMP_FAILURE_RETRY(
+ bind(fd,
+ &addr->addr,
+ SocketAddress::GetAddrLength(addr))) < 0) {
+ TEMP_FAILURE_RETRY(close(fd));
+ return -1;
+ }
+
+ Socket::SetNonBlocking(fd);
+ return fd;
+}
+
+
AddressList<InterfaceSocketAddress>* Socket::ListInterfaces(
int type,
OSError** os_error) {
@@ -291,7 +364,7 @@
bind(fd,
&addr.addr,
SocketAddress::GetAddrLength(&addr))) < 0) {
- TEMP_FAILURE_RETRY(close(fd));
+ VOID_TEMP_FAILURE_RETRY(close(fd));
return -1;
}
@@ -307,7 +380,7 @@
}
if (TEMP_FAILURE_RETRY(listen(fd, backlog > 0 ? backlog : SOMAXCONN)) != 0) {
- TEMP_FAILURE_RETRY(close(fd));
+ VOID_TEMP_FAILURE_RETRY(close(fd));
return -1;
}
@@ -368,6 +441,21 @@
}
+bool Socket::GetNoDelay(intptr_t fd, bool* enabled) {
+ int on;
+ socklen_t len = sizeof(on);
+ int err = TEMP_FAILURE_RETRY(getsockopt(fd,
+ IPPROTO_TCP,
+ TCP_NODELAY,
+ reinterpret_cast<void *>(&on),
+ &len));
+ if (err == 0) {
+ *enabled = on == 1;
+ }
+ return err == 0;
+}
+
+
bool Socket::SetNoDelay(intptr_t fd, bool enabled) {
int on = enabled ? 1 : 0;
return TEMP_FAILURE_RETRY(setsockopt(fd,
@@ -377,6 +465,115 @@
sizeof(on))) == 0;
}
+
+bool Socket::GetMulticastLoop(intptr_t fd, intptr_t protocol, bool* enabled) {
+ uint8_t on;
+ socklen_t len = sizeof(on);
+ int level = protocol == SocketAddress::TYPE_IPV4 ? IPPROTO_IP : IPPROTO_IPV6;
+ int optname = protocol == SocketAddress::TYPE_IPV4
+ ? IP_MULTICAST_LOOP : IPV6_MULTICAST_LOOP;
+ if (TEMP_FAILURE_RETRY(getsockopt(fd,
+ level,
+ optname,
+ reinterpret_cast<char *>(&on),
+ &len)) == 0) {
+ *enabled = (on == 1);
+ return true;
+ }
+ return false;
+}
+
+
+bool Socket::SetMulticastLoop(intptr_t fd, intptr_t protocol, bool enabled) {
+ int on = enabled ? 1 : 0;
+ int level = protocol == SocketAddress::TYPE_IPV4 ? IPPROTO_IP : IPPROTO_IPV6;
+ int optname = protocol == SocketAddress::TYPE_IPV4
+ ? IP_MULTICAST_LOOP : IPV6_MULTICAST_LOOP;
+ return TEMP_FAILURE_RETRY(setsockopt(fd,
+ level,
+ optname,
+ reinterpret_cast<char *>(&on),
+ sizeof(on))) == 0;
+}
+
+
+bool Socket::GetMulticastHops(intptr_t fd, intptr_t protocol, int* value) {
+ uint8_t v;
+ socklen_t len = sizeof(v);
+ int level = protocol == SocketAddress::TYPE_IPV4 ? IPPROTO_IP : IPPROTO_IPV6;
+ int optname = protocol == SocketAddress::TYPE_IPV4
+ ? IP_MULTICAST_TTL : IPV6_MULTICAST_HOPS;
+ if (TEMP_FAILURE_RETRY(getsockopt(fd,
+ level,
+ optname,
+ reinterpret_cast<char *>(&v),
+ &len)) == 0) {
+ *value = v;
+ return true;
+ }
+ return false;
+}
+
+
+bool Socket::SetMulticastHops(intptr_t fd, intptr_t protocol, int value) {
+ int v = value;
+ int level = protocol == SocketAddress::TYPE_IPV4 ? IPPROTO_IP : IPPROTO_IPV6;
+ int optname = protocol == SocketAddress::TYPE_IPV4
+ ? IP_MULTICAST_TTL : IPV6_MULTICAST_HOPS;
+ return TEMP_FAILURE_RETRY(setsockopt(fd,
+ level,
+ optname,
+ reinterpret_cast<char *>(&v),
+ sizeof(v))) == 0;
+}
+
+
+bool Socket::GetBroadcast(intptr_t fd, bool* enabled) {
+ int on;
+ socklen_t len = sizeof(on);
+ int err = TEMP_FAILURE_RETRY(getsockopt(fd,
+ SOL_SOCKET,
+ SO_BROADCAST,
+ reinterpret_cast<char *>(&on),
+ &len));
+ if (err == 0) {
+ *enabled = on == 1;
+ }
+ return err == 0;
+}
+
+
+bool Socket::SetBroadcast(intptr_t fd, bool enabled) {
+ int on = enabled ? 1 : 0;
+ return TEMP_FAILURE_RETRY(setsockopt(fd,
+ SOL_SOCKET,
+ SO_BROADCAST,
+ reinterpret_cast<char *>(&on),
+ sizeof(on))) == 0;
+}
+
+
+bool Socket::JoinMulticast(
+ intptr_t fd, RawAddr* addr, RawAddr*, int interfaceIndex) {
+ int proto = addr->addr.sa_family == AF_INET ? IPPROTO_IP : IPPROTO_IPV6;
+ struct group_req mreq;
+ mreq.gr_interface = interfaceIndex;
+ memmove(&mreq.gr_group, &addr->ss, SocketAddress::GetAddrLength(addr));
+ return TEMP_FAILURE_RETRY(setsockopt(
+ fd, proto, MCAST_JOIN_GROUP, &mreq, sizeof(mreq))) == 0;
+}
+
+
+bool Socket::LeaveMulticast(
+ intptr_t fd, RawAddr* addr, RawAddr*, int interfaceIndex) {
+ int proto = addr->addr.sa_family == AF_INET ? IPPROTO_IP : IPPROTO_IPV6;
+ struct group_req mreq;
+ mreq.gr_interface = interfaceIndex;
+ memmove(&mreq.gr_group, &addr->ss, SocketAddress::GetAddrLength(addr));
+ return TEMP_FAILURE_RETRY(setsockopt(
+ fd, proto, MCAST_LEAVE_GROUP, &mreq, sizeof(mreq))) == 0;
+}
+
} // namespace bin
} // namespace dart
diff --git a/runtime/bin/socket_linux.cc b/runtime/bin/socket_linux.cc
index e50884b..2c4a337 100644
--- a/runtime/bin/socket_linux.cc
+++ b/runtime/bin/socket_linux.cc
@@ -26,17 +26,27 @@
SocketAddress::SocketAddress(struct sockaddr* sa) {
ASSERT(INET6_ADDRSTRLEN >= INET_ADDRSTRLEN);
+ if (!Socket::FormatNumericAddress(
+ reinterpret_cast<RawAddr*>(sa), as_string_, INET6_ADDRSTRLEN)) {
+ as_string_[0] = 0;
+ }
socklen_t salen = GetAddrLength(reinterpret_cast<RawAddr*>(sa));
- if (TEMP_FAILURE_RETRY(getnameinfo(sa,
+ memmove(reinterpret_cast<void *>(&addr_), sa, salen);
+}
+
+
+bool Socket::FormatNumericAddress(RawAddr* addr, char* address, int len) {
+ socklen_t salen = SocketAddress::GetAddrLength(addr);
+ if (TEMP_FAILURE_RETRY(getnameinfo(&addr->addr,
salen,
- as_string_,
- INET6_ADDRSTRLEN,
+ address,
+ len,
NULL,
0,
NI_NUMERICHOST)) != 0) {
- as_string_[0] = 0;
+ return false;
}
- memmove(reinterpret_cast<void *>(&addr_), sa, salen);
+ return true;
}
@@ -107,6 +117,22 @@
}
+int Socket::RecvFrom(intptr_t fd, void* buffer, intptr_t num_bytes,
+ RawAddr* addr) {
+ ASSERT(fd >= 0);
+ socklen_t addr_len = sizeof(addr->ss);
+ ssize_t read_bytes =
+ TEMP_FAILURE_RETRY(
+ recvfrom(fd, buffer, num_bytes, 0, &addr->addr, &addr_len));
+ if (read_bytes == -1 && errno == EWOULDBLOCK) {
+ // If the read would block we need to retry and therefore return 0
+ // as the number of bytes written.
+ read_bytes = 0;
+ }
+ return read_bytes;
+}
+
+
int Socket::Write(intptr_t fd, const void* buffer, intptr_t num_bytes) {
ASSERT(fd >= 0);
ssize_t written_bytes = TEMP_FAILURE_RETRY(write(fd, buffer, num_bytes));
@@ -120,6 +146,23 @@
}
+int Socket::SendTo(intptr_t fd, const void* buffer, intptr_t num_bytes,
+ RawAddr addr) {
+ ASSERT(fd >= 0);
+ ssize_t written_bytes =
+ TEMP_FAILURE_RETRY(
+ sendto(fd, buffer, num_bytes, 0,
+ &addr.addr, SocketAddress::GetAddrLength(&addr)));
+ ASSERT(EAGAIN == EWOULDBLOCK);
+ if (written_bytes == -1 && errno == EWOULDBLOCK) {
+ // If the would block we need to retry and therefore return 0 as
+ // the number of bytes written.
+ written_bytes = 0;
+ }
+ return written_bytes;
+}
+
+
intptr_t Socket::GetPort(intptr_t fd) {
ASSERT(fd >= 0);
RawAddr raw;
@@ -257,6 +300,36 @@
}
+intptr_t Socket::CreateBindDatagram(
+ RawAddr* addr, intptr_t port, bool reuseAddress) {
+ intptr_t fd;
+
+ fd = TEMP_FAILURE_RETRY(
+ socket(addr->addr.sa_family, SOCK_DGRAM, IPPROTO_UDP));
+ if (fd < 0) return -1;
+
+ FDUtils::SetCloseOnExec(fd);
+
+ if (reuseAddress) {
+ int optval = 1;
+ VOID_TEMP_FAILURE_RETRY(
+ setsockopt(fd, SOL_SOCKET, SO_REUSEADDR, &optval, sizeof(optval)));
+ }
+
+ SocketAddress::SetAddrPort(addr, port);
+ if (TEMP_FAILURE_RETRY(
+ bind(fd,
+ &addr->addr,
+ SocketAddress::GetAddrLength(addr))) < 0) {
+ TEMP_FAILURE_RETRY(close(fd));
+ return -1;
+ }
+
+ Socket::SetNonBlocking(fd);
+ return fd;
+}
+
+
static bool ShouldIncludeIfaAddrs(struct ifaddrs* ifa, int lookup_family) {
if (ifa->ifa_addr == NULL) {
// OpenVPN's virtual device tun0.
@@ -334,7 +407,7 @@
bind(fd,
&addr.addr,
SocketAddress::GetAddrLength(&addr))) < 0) {
- TEMP_FAILURE_RETRY(close(fd));
+ VOID_TEMP_FAILURE_RETRY(close(fd));
return -1;
}
@@ -350,7 +423,7 @@
}
if (TEMP_FAILURE_RETRY(listen(fd, backlog > 0 ? backlog : SOMAXCONN)) != 0) {
- TEMP_FAILURE_RETRY(close(fd));
+ VOID_TEMP_FAILURE_RETRY(close(fd));
return -1;
}
@@ -410,6 +483,21 @@
}
+bool Socket::GetNoDelay(intptr_t fd, bool* enabled) {
+ int on;
+ socklen_t len = sizeof(on);
+ int err = TEMP_FAILURE_RETRY(getsockopt(fd,
+ IPPROTO_TCP,
+ TCP_NODELAY,
+ reinterpret_cast<void *>(&on),
+ &len));
+ if (err == 0) {
+ *enabled = on == 1;
+ }
+ return err == 0;
+}
+
+
bool Socket::SetNoDelay(intptr_t fd, bool enabled) {
int on = enabled ? 1 : 0;
return TEMP_FAILURE_RETRY(setsockopt(fd,
@@ -419,6 +507,115 @@
sizeof(on))) == 0;
}
+
+bool Socket::GetMulticastLoop(intptr_t fd, intptr_t protocol, bool* enabled) {
+ uint8_t on;
+ socklen_t len = sizeof(on);
+ int level = protocol == SocketAddress::TYPE_IPV4 ? IPPROTO_IP : IPPROTO_IPV6;
+ int optname = protocol == SocketAddress::TYPE_IPV4
+ ? IP_MULTICAST_LOOP : IPV6_MULTICAST_LOOP;
+ if (TEMP_FAILURE_RETRY(getsockopt(fd,
+ level,
+ optname,
+ reinterpret_cast<char *>(&on),
+ &len)) == 0) {
+ *enabled = (on == 1);
+ return true;
+ }
+ return false;
+}
+
+
+bool Socket::SetMulticastLoop(intptr_t fd, intptr_t protocol, bool enabled) {
+ int on = enabled ? 1 : 0;
+ int level = protocol == SocketAddress::TYPE_IPV4 ? IPPROTO_IP : IPPROTO_IPV6;
+ int optname = protocol == SocketAddress::TYPE_IPV4
+ ? IP_MULTICAST_LOOP : IPV6_MULTICAST_LOOP;
+ return TEMP_FAILURE_RETRY(setsockopt(fd,
+ level,
+ optname,
+ reinterpret_cast<char *>(&on),
+ sizeof(on))) == 0;
+}
+
+
+bool Socket::GetMulticastHops(intptr_t fd, intptr_t protocol, int* value) {
+ uint8_t v;
+ socklen_t len = sizeof(v);
+ int level = protocol == SocketAddress::TYPE_IPV4 ? IPPROTO_IP : IPPROTO_IPV6;
+ int optname = protocol == SocketAddress::TYPE_IPV4
+ ? IP_MULTICAST_TTL : IPV6_MULTICAST_HOPS;
+ if (TEMP_FAILURE_RETRY(getsockopt(fd,
+ level,
+ optname,
+ reinterpret_cast<char *>(&v),
+ &len)) == 0) {
+ *value = v;
+ return true;
+ }
+ return false;
+}
+
+
+bool Socket::SetMulticastHops(intptr_t fd, intptr_t protocol, int value) {
+ int v = value;
+ int level = protocol == SocketAddress::TYPE_IPV4 ? IPPROTO_IP : IPPROTO_IPV6;
+ int optname = protocol == SocketAddress::TYPE_IPV4
+ ? IP_MULTICAST_TTL : IPV6_MULTICAST_HOPS;
+ return TEMP_FAILURE_RETRY(setsockopt(fd,
+ level,
+ optname,
+ reinterpret_cast<char *>(&v),
+ sizeof(v))) == 0;
+}
+
+
+bool Socket::GetBroadcast(intptr_t fd, bool* enabled) {
+ int on;
+ socklen_t len = sizeof(on);
+ int err = TEMP_FAILURE_RETRY(getsockopt(fd,
+ SOL_SOCKET,
+ SO_BROADCAST,
+ reinterpret_cast<char *>(&on),
+ &len));
+ if (err == 0) {
+ *enabled = on == 1;
+ }
+ return err == 0;
+}
+
+
+bool Socket::SetBroadcast(intptr_t fd, bool enabled) {
+ int on = enabled ? 1 : 0;
+ return TEMP_FAILURE_RETRY(setsockopt(fd,
+ SOL_SOCKET,
+ SO_BROADCAST,
+ reinterpret_cast<char *>(&on),
+ sizeof(on))) == 0;
+}
+
+
+bool Socket::JoinMulticast(
+ intptr_t fd, RawAddr* addr, RawAddr*, int interfaceIndex) {
+ int proto = addr->addr.sa_family == AF_INET ? IPPROTO_IP : IPPROTO_IPV6;
+ struct group_req mreq;
+ mreq.gr_interface = interfaceIndex;
+ memmove(&mreq.gr_group, &addr->ss, SocketAddress::GetAddrLength(addr));
+ return TEMP_FAILURE_RETRY(setsockopt(
+ fd, proto, MCAST_JOIN_GROUP, &mreq, sizeof(mreq))) == 0;
+}
+
+
+bool Socket::LeaveMulticast(
+ intptr_t fd, RawAddr* addr, RawAddr*, int interfaceIndex) {
+ int proto = addr->addr.sa_family == AF_INET ? IPPROTO_IP : IPPROTO_IPV6;
+ struct group_req mreq;
+ mreq.gr_interface = interfaceIndex;
+ memmove(&mreq.gr_group, &addr->ss, SocketAddress::GetAddrLength(addr));
+ return TEMP_FAILURE_RETRY(setsockopt(
+ fd, proto, MCAST_LEAVE_GROUP, &mreq, sizeof(mreq))) == 0;
+}
+
} // namespace bin
} // namespace dart
diff --git a/runtime/bin/socket_macos.cc b/runtime/bin/socket_macos.cc
index b8eef1d..f626dff 100644
--- a/runtime/bin/socket_macos.cc
+++ b/runtime/bin/socket_macos.cc
@@ -26,17 +26,27 @@
SocketAddress::SocketAddress(struct sockaddr* sa) {
ASSERT(INET6_ADDRSTRLEN >= INET_ADDRSTRLEN);
+ if (!Socket::FormatNumericAddress(
+ reinterpret_cast<RawAddr*>(sa), as_string_, INET6_ADDRSTRLEN)) {
+ as_string_[0] = 0;
+ }
socklen_t salen = GetAddrLength(reinterpret_cast<RawAddr*>(sa));
- if (TEMP_FAILURE_RETRY(getnameinfo(sa,
+ memmove(reinterpret_cast<void *>(&addr_), sa, salen);
+}
+
+
+bool Socket::FormatNumericAddress(RawAddr* addr, char* address, int len) {
+ socklen_t salen = SocketAddress::GetAddrLength(addr);
+ if (TEMP_FAILURE_RETRY(getnameinfo(&addr->addr,
salen,
- as_string_,
- INET6_ADDRSTRLEN,
+ address,
+ len,
NULL,
0,
NI_NUMERICHOST)) != 0) {
- as_string_[0] = 0;
+ return false;
}
- memmove(reinterpret_cast<void *>(&addr_), sa, salen);
+ return true;
}
@@ -107,6 +117,22 @@
}
+int Socket::RecvFrom(intptr_t fd, void* buffer, intptr_t num_bytes,
+ RawAddr* addr) {
+ ASSERT(fd >= 0);
+ socklen_t addr_len = sizeof(addr->ss);
+ ssize_t read_bytes =
+ TEMP_FAILURE_RETRY(
+ recvfrom(fd, buffer, num_bytes, 0, &addr->addr, &addr_len));
+ if (read_bytes == -1 && errno == EWOULDBLOCK) {
+ // If the read would block we need to retry and therefore return 0
+ // as the number of bytes written.
+ read_bytes = 0;
+ }
+ return read_bytes;
+}
+
+
int Socket::Write(intptr_t fd, const void* buffer, intptr_t num_bytes) {
ASSERT(fd >= 0);
ssize_t written_bytes = TEMP_FAILURE_RETRY(write(fd, buffer, num_bytes));
@@ -120,6 +146,23 @@
}
+int Socket::SendTo(intptr_t fd, const void* buffer, intptr_t num_bytes,
+ RawAddr addr) {
+ ASSERT(fd >= 0);
+ ssize_t written_bytes =
+ TEMP_FAILURE_RETRY(
+ sendto(fd, buffer, num_bytes, 0,
+ &addr.addr, SocketAddress::GetAddrLength(&addr)));
+ ASSERT(EAGAIN == EWOULDBLOCK);
+ if (written_bytes == -1 && errno == EWOULDBLOCK) {
+ // If the would block we need to retry and therefore return 0 as
+ // the number of bytes written.
+ written_bytes = 0;
+ }
+ return written_bytes;
+}
+
+
intptr_t Socket::GetPort(intptr_t fd) {
ASSERT(fd >= 0);
RawAddr raw;
@@ -257,6 +300,36 @@
}
+intptr_t Socket::CreateBindDatagram(
+ RawAddr* addr, intptr_t port, bool reuseAddress) {
+ intptr_t fd;
+
+ fd = TEMP_FAILURE_RETRY(
+ socket(addr->addr.sa_family, SOCK_DGRAM, IPPROTO_UDP));
+ if (fd < 0) return -1;
+
+ FDUtils::SetCloseOnExec(fd);
+
+ if (reuseAddress) {
+ int optval = 1;
+ VOID_TEMP_FAILURE_RETRY(
+ setsockopt(fd, SOL_SOCKET, SO_REUSEADDR, &optval, sizeof(optval)));
+ }
+
+ SocketAddress::SetAddrPort(addr, port);
+ if (TEMP_FAILURE_RETRY(
+ bind(fd,
+ &addr->addr,
+ SocketAddress::GetAddrLength(addr))) < 0) {
+ VOID_TEMP_FAILURE_RETRY(close(fd));
+ return -1;
+ }
+
+ Socket::SetNonBlocking(fd);
+ return fd;
+}
+
+
static bool ShouldIncludeIfaAddrs(struct ifaddrs* ifa, int lookup_family) {
if (ifa->ifa_addr == NULL) {
// OpenVPN's virtual device tun0.
@@ -401,6 +474,21 @@
}
+bool Socket::GetNoDelay(intptr_t fd, bool* enabled) {
+ int on;
+ socklen_t len = sizeof(on);
+ int err = TEMP_FAILURE_RETRY(getsockopt(fd,
+ IPPROTO_TCP,
+ TCP_NODELAY,
+ reinterpret_cast<void *>(&on),
+ &len));
+ if (err == 0) {
+ *enabled = on == 1;
+ }
+ return err == 0;
+}
+
+
bool Socket::SetNoDelay(intptr_t fd, bool enabled) {
int on = enabled ? 1 : 0;
return TEMP_FAILURE_RETRY(setsockopt(fd,
@@ -410,6 +498,165 @@
sizeof(on))) == 0;
}
+
+bool Socket::GetMulticastLoop(intptr_t fd, intptr_t protocol, bool* enabled) {
+ uint8_t on;
+ socklen_t len = sizeof(on);
+ int level = protocol == SocketAddress::TYPE_IPV4 ? IPPROTO_IP : IPPROTO_IPV6;
+ int optname = protocol == SocketAddress::TYPE_IPV4
+ ? IP_MULTICAST_LOOP : IPV6_MULTICAST_LOOP;
+ if (TEMP_FAILURE_RETRY(getsockopt(fd,
+ level,
+ optname,
+ reinterpret_cast<char *>(&on),
+ &len)) == 0) {
+ *enabled = (on == 1);
+ return true;
+ }
+ return false;
+}
+
+
+bool Socket::SetMulticastLoop(intptr_t fd, intptr_t protocol, bool enabled) {
+ u_int on = enabled ? 1 : 0;
+ int level = protocol == SocketAddress::TYPE_IPV4 ? IPPROTO_IP : IPPROTO_IPV6;
+ int optname = protocol == SocketAddress::TYPE_IPV4
+ ? IP_MULTICAST_LOOP : IPV6_MULTICAST_LOOP;
+ return TEMP_FAILURE_RETRY(setsockopt(fd,
+ level,
+ optname,
+ reinterpret_cast<char *>(&on),
+ sizeof(on))) == 0;
+}
+
+
+bool Socket::GetMulticastHops(intptr_t fd, intptr_t protocol, int* value) {
+ uint8_t v;
+ socklen_t len = sizeof(v);
+ int level = protocol == SocketAddress::TYPE_IPV4 ? IPPROTO_IP : IPPROTO_IPV6;
+ int optname = protocol == SocketAddress::TYPE_IPV4
+ ? IP_MULTICAST_TTL : IPV6_MULTICAST_HOPS;
+ if (TEMP_FAILURE_RETRY(getsockopt(fd,
+ level,
+ optname,
+ reinterpret_cast<char *>(&v),
+ &len)) == 0) {
+ *value = v;
+ return true;
+ }
+ return false;
+}
+
+
+bool Socket::SetMulticastHops(intptr_t fd, intptr_t protocol, int value) {
+ int v = value;
+ int level = protocol == SocketAddress::TYPE_IPV4 ? IPPROTO_IP : IPPROTO_IPV6;
+ int optname = protocol == SocketAddress::TYPE_IPV4
+ ? IP_MULTICAST_TTL : IPV6_MULTICAST_HOPS;
+ return TEMP_FAILURE_RETRY(setsockopt(fd,
+ level,
+ optname,
+ reinterpret_cast<char *>(&v),
+ sizeof(v))) == 0;
+}
+
+
+bool Socket::GetBroadcast(intptr_t fd, bool* enabled) {
+ int on;
+ socklen_t len = sizeof(on);
+ int err = TEMP_FAILURE_RETRY(getsockopt(fd,
+ SOL_SOCKET,
+ SO_BROADCAST,
+ reinterpret_cast<char *>(&on),
+ &len));
+ if (err == 0) {
+ *enabled = on == 1;
+ }
+ return err == 0;
+}
+
+
+bool Socket::SetBroadcast(intptr_t fd, bool enabled) {
+ int on = enabled ? 1 : 0;
+ return TEMP_FAILURE_RETRY(setsockopt(fd,
+ SOL_SOCKET,
+ SO_BROADCAST,
+ reinterpret_cast<char *>(&on),
+ sizeof(on))) == 0;
+}
+
+
+static bool JoinOrLeaveMulticast(intptr_t fd,
+ RawAddr* addr,
+ RawAddr* interface,
+ int interfaceIndex,
+ bool join) {
+ if (addr->addr.sa_family == AF_INET) {
+ ASSERT(interface->addr.sa_family == AF_INET);
+ struct ip_mreq mreq;
+ memmove(&mreq.imr_multiaddr,
+ &addr->in.sin_addr,
+ SocketAddress::GetAddrLength(addr));
+ memmove(&mreq.imr_interface,
+ &interface->in.sin_addr,
+ SocketAddress::GetAddrLength(interface));
+ if (join) {
+ return TEMP_FAILURE_RETRY(setsockopt(
+ fd, IPPROTO_IP, IP_ADD_MEMBERSHIP, &mreq, sizeof(mreq))) == 0;
+ } else {
+ return TEMP_FAILURE_RETRY(setsockopt(
+ fd, IPPROTO_IP, IP_DROP_MEMBERSHIP, &mreq, sizeof(mreq))) == 0;
+ }
+ } else {
+ ASSERT(addr->addr.sa_family == AF_INET6);
+ struct ipv6_mreq mreq;
+ memmove(&mreq.ipv6mr_multiaddr,
+ &addr->in6.sin6_addr,
+ SocketAddress::GetAddrLength(addr));
+ mreq.ipv6mr_interface = interfaceIndex;
+ if (join) {
+ return TEMP_FAILURE_RETRY(setsockopt(
+ fd, IPPROTO_IPV6, IPV6_JOIN_GROUP, &mreq, sizeof(mreq))) == 0;
+ } else {
+ return TEMP_FAILURE_RETRY(setsockopt(
+ fd, IPPROTO_IPV6, IPV6_LEAVE_GROUP, &mreq, sizeof(mreq))) == 0;
+ }
+ }
+}
+
+bool Socket::JoinMulticast(
+ intptr_t fd, RawAddr* addr, RawAddr* interface, int interfaceIndex) {
+ return JoinOrLeaveMulticast(fd, addr, interface, interfaceIndex, true);
+ if (addr->addr.sa_family == AF_INET) {
+ ASSERT(interface->addr.sa_family == AF_INET);
+ struct ip_mreq mreq;
+ memmove(&mreq.imr_multiaddr,
+ &addr->in.sin_addr,
+ SocketAddress::GetAddrLength(addr));
+ memmove(&mreq.imr_interface,
+ &interface->in.sin_addr,
+ SocketAddress::GetAddrLength(interface));
+ return TEMP_FAILURE_RETRY(setsockopt(
+ fd, IPPROTO_IP, IP_ADD_MEMBERSHIP, &mreq, sizeof(mreq))) == 0;
+ } else {
+ ASSERT(addr->addr.sa_family == AF_INET6);
+ ASSERT(interface->addr.sa_family == AF_INET6);
+ struct ipv6_mreq mreq;
+ memmove(&mreq.ipv6mr_multiaddr,
+ &addr->in6.sin6_addr,
+ SocketAddress::GetAddrLength(addr));
+ mreq.ipv6mr_interface = interfaceIndex;
+ return TEMP_FAILURE_RETRY(setsockopt(
+ fd, IPPROTO_IPV6, IPV6_JOIN_GROUP, &mreq, sizeof(mreq))) == 0;
+ }
+}
+
+
+bool Socket::LeaveMulticast(
+ intptr_t fd, RawAddr* addr, RawAddr* interface, int interfaceIndex) {
+ return JoinOrLeaveMulticast(fd, addr, interface, interfaceIndex, false);
+}
+
} // namespace bin
} // namespace dart
diff --git a/runtime/bin/socket_patch.dart b/runtime/bin/socket_patch.dart
index d313a0d..a85320c 100644
--- a/runtime/bin/socket_patch.dart
+++ b/runtime/bin/socket_patch.dart
@@ -247,6 +247,10 @@
static const LIST_INTERFACES = 1;
static const REVERSE_LOOKUP = 2;
+ // Protocol flags.
+ static const int PROTOCOL_IPV4 = 1 << 0;
+ static const int PROTOCOL_IPV6 = 1 << 1;
+
// Socket close state
bool isClosed = false;
bool isClosing = false;
@@ -265,8 +269,8 @@
// The type flags for this socket.
final int typeFlags;
- // Holds the port of the socket, null if not known.
- int localPort;
+ // Holds the port of the socket, 0 if not known.
+ int localPort = 0;
// Holds the address used to connect or bind the socket.
InternetAddress address;
@@ -398,6 +402,39 @@
});
}
+ static Future<_NativeSocket> bindDatagram(
+ host, int port, bool reuseAddress) {
+ return new Future.value(host)
+ .then((host) {
+ if (host is _InternetAddress) return host;
+ return lookup(host)
+ .then((list) {
+ if (list.length == 0) {
+ throw createError(response, "Failed host lookup: '$host'");
+ }
+ return list[0];
+ });
+ })
+ .then((address) {
+ var socket = new _NativeSocket.datagram(address);
+ var result = socket.nativeCreateBindDatagram(
+ address._sockaddr_storage, port, reuseAddress);
+ if (result is OSError) {
+ throw new SocketException("Failed to create datagram socket",
+ osError: result,
+ address: address,
+ port: port);
+ }
+ if (port != 0) socket.localPort = port;
+ return socket;
+ });
+ }
+
+ _NativeSocket.datagram(this.address)
+ : typeFlags = TYPE_NORMAL_SOCKET {
+ eventHandlers = new List(EVENT_COUNT + 1);
+ }
+
_NativeSocket.normal() : typeFlags = TYPE_NORMAL_SOCKET {
eventHandlers = new List(EVENT_COUNT + 1);
}
@@ -440,6 +477,16 @@
return result;
}
+ Datagram receive() {
+ if (isClosing || isClosed) return null;
+ var result = nativeRecvFrom();
+ if (result is OSError) {
+ reportError(result, "Receive failed");
+ return null;
+ }
+ return result;
+ }
+
int write(List<int> buffer, int offset, int bytes) {
if (buffer is! List) throw new ArgumentError();
if (offset == null) offset = 0;
@@ -470,6 +517,22 @@
return result;
}
+ int send(List<int> buffer, int offset, int bytes,
+ InternetAddress address, int port) {
+ if (isClosing || isClosed) return 0;
+ _BufferAndStart bufferAndStart =
+ _ensureFastAndSerializableByteData(
+ buffer, offset, bytes);
+ var result = nativeSendTo(
+ bufferAndStart.buffer, bufferAndStart.start, bytes,
+ address._sockaddr_storage, port);
+ if (result is OSError) {
+ scheduleMicrotask(() => reportError(result, "Send failed"));
+ result = 0;
+ }
+ return result;
+ }
+
_NativeSocket accept() {
// Don't issue accept if we're closing.
if (isClosing || isClosed) return null;
@@ -481,7 +544,7 @@
}
int get port {
- if (localPort != null) return localPort;
+ if (localPort != 0) return localPort;
return localPort = nativeGetPort();
}
@@ -697,26 +760,91 @@
close();
}
- bool setOption(SocketOption option, bool enabled) {
+ getOption(SocketOption option) {
if (option is! SocketOption) throw new ArgumentError(options);
- if (enabled is! bool) throw new ArgumentError(enabled);
- return nativeSetOption(option._value, enabled);
+ var result = nativeGetOption(option._value, address.type._value);
+ if (result is OSError) throw result;
+ return result;
+ }
+
+ bool setOption(SocketOption option, value) {
+ if (option is! SocketOption) throw new ArgumentError(options);
+ var result = nativeSetOption(option._value, address.type._value, value);
+ if (result is OSError) throw result;
+ }
+
+ InternetAddress multicastAddress(
+ InternetAddress addr, NetworkInterface interface) {
+ // On Mac OS using the interface index for joining IPv4 multicast groups
+ // is not supported. Here the IP address of the interface is needed.
+ if (Platform.isMacOS && addr.type == InternetAddressType.IP_V4) {
+ if (interface != null) {
+ for (int i = 0; i < interface.addresses.length; i++) {
+ if (addr.type == InternetAddressType.IP_V4) {
+ return interface.addresses[i];
+ }
+ }
+ // No IPv4 address found on the interface.
+ throw new SocketException(
+ "The network interface does not have an address "
+ "of the same family as the multicast address");
+ } else {
+ // Default to the ANY address if on iterface is specified.
+ return InternetAddress.ANY_IP_V4;
+ }
+ } else {
+ return null;
+ }
+ }
+
+ void joinMulticast(InternetAddress addr, NetworkInterface interface) {
+ var interfaceAddr = multicastAddress(addr, interface);
+ var interfaceIndex = interface == null ? 0 : interface.index;
+ var result = nativeJoinMulticast(
+ addr._sockaddr_storage,
+ interfaceAddr == null ? null : interfaceAddr._sockaddr_storage,
+ interfaceIndex);
+ if (result is OSError) throw result;
+ }
+
+ void leaveMulticast(InternetAddress addr, NetworkInterface interface) {
+ var interfaceAddr = multicastAddress(addr, interface);
+ var interfaceIndex = interface == null ? 0 : interface.index;
+ var result = nativeLeaveMulticast(
+ addr._sockaddr_storage,
+ interfaceAddr == null ? null : interfaceAddr._sockaddr_storage,
+ interfaceIndex);
+ if (result is OSError) throw result;
}
void nativeSetSocketId(int id) native "Socket_SetSocketId";
nativeAvailable() native "Socket_Available";
nativeRead(int len) native "Socket_Read";
+ nativeRecvFrom() native "Socket_RecvFrom";
nativeWrite(List<int> buffer, int offset, int bytes)
native "Socket_WriteList";
+ nativeSendTo(List<int> buffer, int offset, int bytes,
+ List<int> address, int port)
+ native "Socket_SendTo";
nativeCreateConnect(List<int> addr,
int port) native "Socket_CreateConnect";
nativeCreateBindListen(List<int> addr, int port, int backlog, bool v6Only)
native "ServerSocket_CreateBindListen";
+ nativeCreateBindDatagram(List<int> addr, int port, bool reuseAddress)
+ native "Socket_CreateBindDatagram";
nativeAccept(_NativeSocket socket) native "ServerSocket_Accept";
int nativeGetPort() native "Socket_GetPort";
List nativeGetRemotePeer() native "Socket_GetRemotePeer";
OSError nativeGetError() native "Socket_GetError";
- bool nativeSetOption(int option, bool enabled) native "Socket_SetOption";
+ nativeGetOption(int option, int protocol) native "Socket_GetOption";
+ bool nativeSetOption(int option, int protocol, value)
+ native "Socket_SetOption";
+ bool nativeJoinMulticast(
+ List<int> addr, List<int> interfaceAddr, int interfaceIndex)
+ native "Socket_JoinMulticast";
+ bool nativeLeaveMulticast(
+ List<int> addr, List<int> interfaceAddr, int interfaceIndex)
+ native "Socket_LeaveMulticast";
}
@@ -1281,3 +1409,156 @@
}
}
}
+
+
+patch class RawDatagramSocket {
+ /* patch */ static Future<RawDatagramSocket> bind(
+ host, int port, {bool reuseAddress: true}) {
+ return _RawDatagramSocket.bind(host, port, reuseAddress);
+ }
+}
+
+class _RawDatagramSocket extends Stream implements RawDatagramSocket {
+ _NativeSocket _socket;
+ StreamController<RawSocketEvent> _controller;
+ bool _readEventsEnabled = true;
+ bool _writeEventsEnabled = true;
+
+ _RawDatagramSocket(this._socket) {
+ var zone = Zone.current;
+ _controller = new StreamController(sync: true,
+ onListen: _onSubscriptionStateChange,
+ onCancel: _onSubscriptionStateChange,
+ onPause: _onPauseStateChange,
+ onResume: _onPauseStateChange);
+ _socket.closeFuture.then((_) => _controller.close());
+ _socket.setHandlers(
+ read: () => _controller.add(RawSocketEvent.READ),
+ write: () {
+ // The write event handler is automatically disabled by the
+ // event handler when it fires.
+ _writeEventsEnabled = false;
+ _controller.add(RawSocketEvent.WRITE);
+ },
+ closed: () => _controller.add(RawSocketEvent.READ_CLOSED),
+ destroyed: () => _controller.add(RawSocketEvent.CLOSED),
+ error: zone.bindUnaryCallback((e) {
+ _controller.addError(e);
+ close();
+ })
+ );
+ }
+
+ static Future<RawDatagramSocket> bind(
+ host, int port, bool reuseAddress) {
+ if (port < 0 || port > 0xffff)
+ throw new ArgumentError("Invalid port $port");
+ return _NativeSocket.bindDatagram(host, port, reuseAddress)
+ .then((socket) => new _RawDatagramSocket(socket));
+ }
+
+ StreamSubscription<RawSocketEvent> listen(void onData(RawSocketEvent event),
+ {Function onError,
+ void onDone(),
+ bool cancelOnError}) {
+ return _controller.stream.listen(
+ onData,
+ onError: onError,
+ onDone: onDone,
+ cancelOnError: cancelOnError);
+ }
+
+ Future close() => _socket.close().then((_) => this);
+
+ int send(List<int> buffer, InternetAddress address, int port) =>
+ _socket.send(buffer, 0, buffer.length, address, port);
+
+ Datagram receive() {
+ return _socket.receive();
+ }
+
+ void joinMulticast(InternetAddress group, [NetworkInterface interface]) {
+ _socket.joinMulticast(group, interface);
+ }
+
+ void leaveMulticast(InternetAddress group, [NetworkInterface interface]) {
+ _socket.leaveMulticast(group, interface);
+ }
+
+ bool get readEventsEnabled => _readEventsEnabled;
+ void set readEventsEnabled(bool value) {
+ if (value != _readEventsEnabled) {
+ _readEventsEnabled = value;
+ if (!_controller.isPaused) _resume();
+ }
+ }
+
+ bool get writeEventsEnabled => _writeEventsEnabled;
+ void set writeEventsEnabled(bool value) {
+ if (value != _writeEventsEnabled) {
+ _writeEventsEnabled = value;
+ if (!_controller.isPaused) _resume();
+ }
+ }
+
+ bool get multicastLoopback =>
+ _socket.getOption(SocketOption._IP_MULTICAST_LOOP);
+ void set multicastLoopback(bool value) =>
+ _socket.setOption(SocketOption._IP_MULTICAST_LOOP, value);
+
+ int get multicastHops =>
+ _socket.getOption(SocketOption._IP_MULTICAST_HOPS);
+ void set multicastHops(int value) =>
+ _socket.setOption(SocketOption._IP_MULTICAST_HOPS, value);
+
+ NetworkInterface get multicastInterface =>
+ throw "Not implemented";
+ void set multicastInterface(NetworkInterface value) =>
+ throw "Not implemented";
+
+ bool get broadcastEnabled =>
+ _socket.getOption(SocketOption._IP_BROADCAST);
+ void set broadcastEnabled(bool value) =>
+ _socket.setOption(SocketOption._IP_BROADCAST, value);
+
+ int get port => _socket.port;
+
+ InternetAddress get address => _socket.address;
+
+ _pause() {
+ _socket.setListening(read: false, write: false);
+ }
+
+ void _resume() {
+ _socket.setListening(read: _readEventsEnabled, write: _writeEventsEnabled);
+ }
+
+ void _onPauseStateChange() {
+ if (_controller.isPaused) {
+ _pause();
+ } else {
+ _resume();
+ }
+ }
+
+ void _onSubscriptionStateChange() {
+ if (_controller.hasListener) {
+ _resume();
+ } else {
+ close();
+ }
+ }
+}
+
+Datagram _makeDatagram(List<int> data,
+ bool ipV6,
+ String address,
+ List<int> sockaddr_storage,
+ int port) {
+ var addressType =
+ ipV6 ? InternetAddressType.IP_V6 : InternetAddressType.IP_V4;
+ return new Datagram(
+ data,
+ new _InternetAddress(addressType, address, null, sockaddr_storage),
+ port);
+}
diff --git a/runtime/bin/socket_win.cc b/runtime/bin/socket_win.cc
index 7610a73..3664830 100644
--- a/runtime/bin/socket_win.cc
+++ b/runtime/bin/socket_win.cc
@@ -22,12 +22,7 @@
// Clear the port before calling WSAAddressToString as WSAAddressToString
// includes the port in the formatted string.
- DWORD len = INET6_ADDRSTRLEN;
- int err = WSAAddressToStringA(&raw->addr,
- sizeof(RawAddr),
- NULL,
- as_string_,
- &len);
+ int err = Socket::FormatNumericAddress(raw, as_string_, INET6_ADDRSTRLEN);
if (err != 0) {
as_string_[0] = 0;
@@ -37,6 +32,18 @@
SocketAddress::GetAddrLength(raw));
}
+
+bool Socket::FormatNumericAddress(RawAddr* addr, char* address, int len) {
+ socklen_t salen = SocketAddress::GetAddrLength(addr);
+ DWORD l = len;
+ return WSAAddressToStringA(&addr->addr,
+ salen,
+ NULL,
+ address,
+ &l) != 0;
+}
+
+
bool Socket::Initialize() {
static bool socket_initialized = false;
if (socket_initialized) return true;
@@ -64,12 +71,28 @@
}
+int Socket::RecvFrom(intptr_t fd, void* buffer, intptr_t num_bytes,
+ RawAddr* addr) {
+ Handle* handle = reinterpret_cast<Handle*>(fd);
+ socklen_t addr_len = sizeof(addr->ss);
+ return handle->RecvFrom(buffer, num_bytes, &addr->addr, addr_len);
+}
+
+
intptr_t Socket::Write(intptr_t fd, const void* buffer, intptr_t num_bytes) {
Handle* handle = reinterpret_cast<Handle*>(fd);
return handle->Write(buffer, num_bytes);
}
+int Socket::SendTo(
+ intptr_t fd, const void* buffer, intptr_t num_bytes, RawAddr addr) {
+ Handle* handle = reinterpret_cast<Handle*>(fd);
+ return handle->SendTo(
+ buffer, num_bytes, &addr.addr, SocketAddress::GetAddrLength(&addr));
+}
+
+
intptr_t Socket::GetPort(intptr_t fd) {
ASSERT(reinterpret_cast<Handle*>(fd)->is_socket());
SocketHandle* socket_handle = reinterpret_cast<SocketHandle*>(fd);
@@ -282,6 +305,47 @@
}
+intptr_t Socket::CreateBindDatagram(
+ RawAddr* addr, intptr_t port, bool reuseAddress) {
+ SOCKET s = socket(addr->ss.ss_family, SOCK_DGRAM, IPPROTO_UDP);
+ if (s == INVALID_SOCKET) {
+ return -1;
+ }
+
+ int status;
+ if (reuseAddress) {
+ BOOL optval = true;
+ status = setsockopt(s,
+ SOL_SOCKET,
+ SO_REUSEADDR,
+ reinterpret_cast<const char*>(&optval),
+ sizeof(optval));
+ if (status == SOCKET_ERROR) {
+ DWORD rc = WSAGetLastError();
+ closesocket(s);
+ SetLastError(rc);
+ return -1;
+ }
+ }
+
+ SocketAddress::SetAddrPort(addr, port);
+
+ status = bind(s,
+ &addr->addr,
+ SocketAddress::GetAddrLength(addr));
+ if (status == SOCKET_ERROR) {
+ DWORD rc = WSAGetLastError();
+ closesocket(s);
+ SetLastError(rc);
+ return -1;
+ }
+
+ DatagramSocket* datagram_socket = new DatagramSocket(s);
+ datagram_socket->EnsureInitialized(EventHandler::delegate());
+ return reinterpret_cast<intptr_t>(datagram_socket);
+}
+
+
AddressList<InterfaceSocketAddress>* Socket::ListInterfaces(
int type,
OSError** os_error) {
@@ -437,16 +501,156 @@
}
+bool Socket::GetNoDelay(intptr_t fd, bool* enabled) {
+ SocketHandle* handle = reinterpret_cast<SocketHandle*>(fd);
+ int on;
+ socklen_t len = sizeof(on);
+ int err = getsockopt(handle->socket(),
+ IPPROTO_TCP,
+ TCP_NODELAY,
+ reinterpret_cast<char *>(&on),
+ &len);
+ if (err == 0) {
+ *enabled = on == 1;
+ }
+ return err == 0;
+}
+
+
bool Socket::SetNoDelay(intptr_t fd, bool enabled) {
SocketHandle* handle = reinterpret_cast<SocketHandle*>(fd);
int on = enabled ? 1 : 0;
- return setsockopt(fd,
+ return setsockopt(handle->socket(),
IPPROTO_TCP,
TCP_NODELAY,
reinterpret_cast<char *>(&on),
sizeof(on)) == 0;
}
+
+bool Socket::GetMulticastLoop(intptr_t fd, intptr_t protocol, bool* enabled) {
+ SocketHandle* handle = reinterpret_cast<SocketHandle*>(fd);
+ uint8_t on;
+ socklen_t len = sizeof(on);
+ int level = protocol == SocketAddress::TYPE_IPV4 ? IPPROTO_IP : IPPROTO_IPV6;
+ int optname = protocol == SocketAddress::TYPE_IPV4
+ ? IP_MULTICAST_LOOP : IPV6_MULTICAST_LOOP;
+ if (getsockopt(handle->socket(),
+ level,
+ optname,
+ reinterpret_cast<char *>(&on),
+ &len) == 0) {
+ *enabled = (on == 1);
+ return true;
+ }
+ return false;
+}
+
+
+bool Socket::SetMulticastLoop(intptr_t fd, intptr_t protocol, bool enabled) {
+ SocketHandle* handle = reinterpret_cast<SocketHandle*>(fd);
+ int on = enabled ? 1 : 0;
+ int level = protocol == SocketAddress::TYPE_IPV4 ? IPPROTO_IP : IPPROTO_IPV6;
+ int optname = protocol == SocketAddress::TYPE_IPV4
+ ? IP_MULTICAST_LOOP : IPV6_MULTICAST_LOOP;
+ return setsockopt(handle->socket(),
+ level,
+ optname,
+ reinterpret_cast<char *>(&on),
+ sizeof(on)) == 0;
+ return false;
+}
+
+
+bool Socket::GetMulticastHops(intptr_t fd, intptr_t protocol, int* value) {
+ SocketHandle* handle = reinterpret_cast<SocketHandle*>(fd);
+ uint8_t v;
+ socklen_t len = sizeof(v);
+ int level = protocol == SocketAddress::TYPE_IPV4 ? IPPROTO_IP : IPPROTO_IPV6;
+ int optname = protocol == SocketAddress::TYPE_IPV4
+ ? IP_MULTICAST_TTL : IPV6_MULTICAST_HOPS;
+ if (getsockopt(handle->socket(),
+ level,
+ optname,
+ reinterpret_cast<char *>(&v),
+ &len) == 0) {
+ *value = v;
+ return true;
+ }
+ return false;
+}
+
+
+bool Socket::SetMulticastHops(intptr_t fd, intptr_t protocol, int value) {
+ SocketHandle* handle = reinterpret_cast<SocketHandle*>(fd);
+ int v = value;
+ int level = protocol == SocketAddress::TYPE_IPV4 ? IPPROTO_IP : IPPROTO_IPV6;
+ int optname = protocol == SocketAddress::TYPE_IPV4
+ ? IP_MULTICAST_TTL : IPV6_MULTICAST_HOPS;
+ return setsockopt(handle->socket(),
+ level,
+ optname,
+ reinterpret_cast<char *>(&v),
+ sizeof(v)) == 0;
+}
+
+
+bool Socket::GetBroadcast(intptr_t fd, bool* enabled) {
+ SocketHandle* handle = reinterpret_cast<SocketHandle*>(fd);
+ int on;
+ socklen_t len = sizeof(on);
+ int err = getsockopt(handle->socket(),
+ SOL_SOCKET,
+ SO_BROADCAST,
+ reinterpret_cast<char *>(&on),
+ &len);
+ if (err == 0) {
+ *enabled = on == 1;
+ }
+ return err == 0;
+}
+
+
+bool Socket::SetBroadcast(intptr_t fd, bool enabled) {
+ SocketHandle* handle = reinterpret_cast<SocketHandle*>(fd);
+ int on = enabled ? 1 : 0;
+ return setsockopt(handle->socket(),
+ SOL_SOCKET,
+ SO_BROADCAST,
+ reinterpret_cast<char *>(&on),
+ sizeof(on)) == 0;
+}
+
+
+bool Socket::JoinMulticast(
+ intptr_t fd, RawAddr* addr, RawAddr*, int interfaceIndex) {
+ SocketHandle* handle = reinterpret_cast<SocketHandle*>(fd);
+ int proto = addr->addr.sa_family == AF_INET ? IPPROTO_IP : IPPROTO_IPV6;
+ struct group_req mreq;
+ mreq.gr_interface = interfaceIndex;
+ memmove(&mreq.gr_group, &addr->ss, SocketAddress::GetAddrLength(addr));
+ return setsockopt(handle->socket(),
+ proto,
+ MCAST_JOIN_GROUP,
+ reinterpret_cast<char *>(&mreq),
+ sizeof(mreq)) == 0;
+}
+
+
+bool Socket::LeaveMulticast(
+ intptr_t fd, RawAddr* addr, RawAddr*, int interfaceIndex) {
+ SocketHandle* handle = reinterpret_cast<SocketHandle*>(fd);
+ int proto = addr->addr.sa_family == AF_INET ? IPPROTO_IP : IPPROTO_IPV6;
+ struct group_req mreq;
+ mreq.gr_interface = interfaceIndex;
+ memmove(&mreq.gr_group, &addr->ss, SocketAddress::GetAddrLength(addr));
+ return setsockopt(handle->socket(),
+ proto,
+ MCAST_LEAVE_GROUP,
+ reinterpret_cast<char *>(&mreq),
+ sizeof(mreq)) == 0;
+}
+
} // namespace bin
} // namespace dart
diff --git a/runtime/bin/stdin.cc b/runtime/bin/stdin.cc
index 5b21b5b..ef7904a 100644
--- a/runtime/bin/stdin.cc
+++ b/runtime/bin/stdin.cc
@@ -22,17 +22,25 @@
}
+void FUNCTION_NAME(Stdin_GetEchoMode)(Dart_NativeArguments args) {
+ Dart_SetReturnValue(args, Dart_NewBoolean(Stdin::GetEchoMode()));
+}
+
+
void FUNCTION_NAME(Stdin_SetEchoMode)(Dart_NativeArguments args) {
- bool enabled = DartUtils::GetBooleanValue(Dart_GetNativeArgument(args, 1));
+ bool enabled = DartUtils::GetBooleanValue(Dart_GetNativeArgument(args, 0));
Stdin::SetEchoMode(enabled);
- Dart_SetReturnValue(args, Dart_Null());
+}
+
+
+void FUNCTION_NAME(Stdin_GetLineMode)(Dart_NativeArguments args) {
+ Dart_SetReturnValue(args, Dart_NewBoolean(Stdin::GetLineMode()));
}
void FUNCTION_NAME(Stdin_SetLineMode)(Dart_NativeArguments args) {
- bool enabled = DartUtils::GetBooleanValue(Dart_GetNativeArgument(args, 1));
+ bool enabled = DartUtils::GetBooleanValue(Dart_GetNativeArgument(args, 0));
Stdin::SetLineMode(enabled);
- Dart_SetReturnValue(args, Dart_Null());
}
} // namespace bin
diff --git a/runtime/bin/stdin.h b/runtime/bin/stdin.h
index 931e04f..a0c6875 100644
--- a/runtime/bin/stdin.h
+++ b/runtime/bin/stdin.h
@@ -17,7 +17,11 @@
class Stdin {
public:
static int ReadByte();
+
+ static bool GetEchoMode();
static void SetEchoMode(bool enabled);
+
+ static bool GetLineMode();
static void SetLineMode(bool enabled);
private:
diff --git a/runtime/bin/stdin_android.cc b/runtime/bin/stdin_android.cc
index 816023a..a1a4d63 100644
--- a/runtime/bin/stdin_android.cc
+++ b/runtime/bin/stdin_android.cc
@@ -25,6 +25,13 @@
}
+bool Stdin::GetEchoMode() {
+ struct termios term;
+ tcgetattr(fileno(stdin), &term);
+ return (term.c_lflag & ECHO) != 0;
+}
+
+
void Stdin::SetEchoMode(bool enabled) {
struct termios term;
tcgetattr(fileno(stdin), &term);
@@ -37,6 +44,13 @@
}
+bool Stdin::GetLineMode() {
+ struct termios term;
+ tcgetattr(fileno(stdin), &term);
+ return (term.c_lflag & ICANON) != 0;
+}
+
+
void Stdin::SetLineMode(bool enabled) {
struct termios term;
tcgetattr(fileno(stdin), &term);
diff --git a/runtime/bin/stdin_linux.cc b/runtime/bin/stdin_linux.cc
index 4f95198..c64610a 100644
--- a/runtime/bin/stdin_linux.cc
+++ b/runtime/bin/stdin_linux.cc
@@ -25,6 +25,13 @@
}
+bool Stdin::GetEchoMode() {
+ struct termios term;
+ tcgetattr(fileno(stdin), &term);
+ return (term.c_lflag & ECHO) != 0;
+}
+
+
void Stdin::SetEchoMode(bool enabled) {
struct termios term;
tcgetattr(fileno(stdin), &term);
@@ -37,6 +44,13 @@
}
+bool Stdin::GetLineMode() {
+ struct termios term;
+ tcgetattr(fileno(stdin), &term);
+ return (term.c_lflag & ICANON) != 0;
+}
+
+
void Stdin::SetLineMode(bool enabled) {
struct termios term;
tcgetattr(fileno(stdin), &term);
diff --git a/runtime/bin/stdin_macos.cc b/runtime/bin/stdin_macos.cc
index 0bea869..a8afb77 100644
--- a/runtime/bin/stdin_macos.cc
+++ b/runtime/bin/stdin_macos.cc
@@ -25,6 +25,13 @@
}
+bool Stdin::GetEchoMode() {
+ struct termios term;
+ tcgetattr(fileno(stdin), &term);
+ return (term.c_lflag & ECHO) != 0;
+}
+
+
void Stdin::SetEchoMode(bool enabled) {
struct termios term;
tcgetattr(fileno(stdin), &term);
@@ -37,6 +44,13 @@
}
+bool Stdin::GetLineMode() {
+ struct termios term;
+ tcgetattr(fileno(stdin), &term);
+ return (term.c_lflag & ICANON) != 0;
+}
+
+
void Stdin::SetLineMode(bool enabled) {
struct termios term;
tcgetattr(fileno(stdin), &term);
diff --git a/runtime/bin/stdin_win.cc b/runtime/bin/stdin_win.cc
index e1d036e..44e517d 100644
--- a/runtime/bin/stdin_win.cc
+++ b/runtime/bin/stdin_win.cc
@@ -23,6 +23,14 @@
}
+bool Stdin::GetEchoMode() {
+ HANDLE h = GetStdHandle(STD_INPUT_HANDLE);
+ DWORD mode;
+ if (!GetConsoleMode(h, &mode)) return false;
+ return (mode & ENABLE_ECHO_INPUT) != 0;
+}
+
+
void Stdin::SetEchoMode(bool enabled) {
HANDLE h = GetStdHandle(STD_INPUT_HANDLE);
DWORD mode;
@@ -36,6 +44,14 @@
}
+bool Stdin::GetLineMode() {
+ HANDLE h = GetStdHandle(STD_INPUT_HANDLE);
+ DWORD mode;
+ if (!GetConsoleMode(h, &mode)) return false;
+ return (mode & ENABLE_LINE_INPUT) != 0;
+}
+
+
void Stdin::SetLineMode(bool enabled) {
HANDLE h = GetStdHandle(STD_INPUT_HANDLE);
DWORD mode;
diff --git a/runtime/bin/stdio_patch.dart b/runtime/bin/stdio_patch.dart
index eb9aa68..5d5cdaf 100644
--- a/runtime/bin/stdio_patch.dart
+++ b/runtime/bin/stdio_patch.dart
@@ -41,8 +41,17 @@
patch class Stdin {
/* patch */ int readByteSync() native "Stdin_ReadByte";
- /* patch */ void set echoMode(bool enabled) native "Stdin_SetEchoMode";
- /* patch */ void set lineMode(bool enabled) native "Stdin_SetLineMode";
+
+ /* patch */ bool get echoMode => _echoMode;
+ /* patch */ void set echoMode(bool enabled) { _echoMode = enabled; }
+
+ /* patch */ bool get lineMode => _lineMode;
+ /* patch */ void set lineMode(bool enabled) { _lineMode = enabled; }
+
+ static bool get _echoMode native "Stdin_GetEchoMode";
+ static void set _echoMode(bool enabled) native "Stdin_SetEchoMode";
+ static bool get _lineMode native "Stdin_GetLineMode";
+ static void set _lineMode(bool enabled) native "Stdin_SetLineMode";
}
diff --git a/runtime/bin/vmservice/client/build.dart b/runtime/bin/vmservice/client/build.dart
index 627da4e2..6b7d11f 100644
--- a/runtime/bin/vmservice/client/build.dart
+++ b/runtime/bin/vmservice/client/build.dart
@@ -11,23 +11,34 @@
.then((_) => deploy()).then(compileToJs);
}
-compileToJs(_) {
- print("Running dart2js");
- var dart_path = Platform.executable;
- var dart2js_path = 'dart2js';
- if (dart_path.lastIndexOf(Platform.pathSeparator) != -1) {
- var bin_path = dart_path.substring(0, dart_path.lastIndexOf(Platform.pathSeparator));
- dart2js_path = "$bin_path${Platform.pathSeparator}dart2js";
+String findDart2JS() {
+ var dartPath = Platform.executable;
+ var lastIndex = dartPath.lastIndexOf(Platform.pathSeparator);
+ if (lastIndex != -1) {
+ var binPath = dartPath.substring(0, lastIndex);
+ return '$binPath${Platform.pathSeparator}dart2js';
}
+ return 'dart2js';
+}
+
+void runDart2JS(String input, String output) {
+ var dart2js_path = findDart2JS();
var result =
Process.runSync(dart2js_path,
- [ '--minify', '-o', 'out/web/index.html_bootstrap.dart.js',
- 'out/web/index.html_bootstrap.dart'], runInShell: true);
+ [ '--minify', '-o', output, input], runInShell: true);
print(result.stdout);
print(result.stderr);
if (result.exitCode != 0) {
print("Running dart2js failed.");
exit(result.exitCode);
}
+}
+
+compileToJs(_) {
+ print("Running dart2js");
+ runDart2JS('out/web/index.html_bootstrap.dart',
+ 'out/web/index.html_bootstrap.dart.js');
+ runDart2JS('out/web/index_devtools.html_bootstrap.dart',
+ 'out/web/index_devtools.html_bootstrap.dart.js');
print("Done");
}
diff --git a/runtime/bin/vmservice/client/deployed/web/index.html b/runtime/bin/vmservice/client/deployed/web/index.html
index 94b6cc8..a0437be 100644
--- a/runtime/bin/vmservice/client/deployed/web/index.html
+++ b/runtime/bin/vmservice/client/deployed/web/index.html
@@ -30,18 +30,45 @@
</div>
</template>
-</polymer-element><polymer-element name="class-view" extends="observatory-element">
+</polymer-element><polymer-element name="field-ref" extends="observatory-element">
+<template>
+<div>
+ <template if="{{ field['final'] }}"> final </template>
+ <template if="{{ field['const'] }}"> const </template>
+ <template if="{{ (field['declared_type']['name'] == 'dynamic' && !field['final'] && !field['const']) }}">
+ var
+ </template>
+ <template if="{{ (field['declared_type']['name'] != 'dynamic') }}">
+ <a href="{{ app.locationManager.currentIsolateClassLink(field['declared_type']['id']) }}">
+ {{ field['declared_type']['user_name'] }} </a>
+ </template>
+ <a href="{{ app.locationManager.currentIsolateObjectLink(field['id'])}}">
+ {{ field['user_name'] }} </a>
+</div>
+</template> </polymer-element><polymer-element name="instance-ref" extends="observatory-element">
+<template>
+<div>
+ <template if="{{ (instance['type'] == 'null') }}">
+ {{ "null" }}
+ </template>
+ <template if="{{ (instance['type'] != 'null') }}">
+ <a href="{{ app.locationManager.currentIsolateObjectLink(instance['id'])}}">
+ {{ instance['preview'] }}
+ </a>
+ </template>
+ </div>
+</template> </polymer-element><polymer-element name="class-view" extends="observatory-element">
<template>
<div class="row">
<div class="col-md-8 col-md-offset-2">
<div class="panel panel-warning">
<div class="panel-heading">
- {{ cls['user_name'] }} ({{ cls['name'] }})
+ class <strong>{{ cls['user_name'] }}</strong>
<template if="{{ cls['super']['type'] != 'Null' }}">
extends
<a href="{{ app.locationManager.currentIsolateClassLink(cls['super']['id'])}}">
{{ cls['super']['user_name'] }}
- </a>
+ </a>
</template>
<a class="pull-right" href="{{ app.locationManager.currentIsolateObjectLink(cls['library']['id'])}}">
{{ cls['library']['name'] }}
@@ -65,21 +92,18 @@
<tr>
<td>Patch</td><td>{{ cls['patch'] }}</td>
</tr>
+ <tr>
+ <td>VM Name</td><td>{{ cls['name'] }}</td>
+ </tr>
</tbody>
</table>
<template if="{{ cls['error'] == null }}">
<blockquote><strong>Fields</strong></blockquote>
<table class="table table-hover">
- <thead>
- <tr>
- <th>User Name</th>
- <th>VM Name</th>
- </tr>
- </thead>
- <tbody>
+ <tbody>
<tr template="" repeat="{{ field in cls['fields'] }}">
- <td><a href="{{ app.locationManager.currentIsolateObjectLink(field['id'])}}">{{ field['user_name'] }}</a></td>
- <td><a href="{{ app.locationManager.currentIsolateObjectLink(field['id'])}}">{{ field['name'] }}</a></td>
+ <td><field-ref app="{{ app }}" field="{{ field }}"></field-ref></td>
+ <td><instance-ref app="{{ app }}" instance="{{ field['value'] }}"></instance-ref></td>
</tr>
</tbody>
</table>
@@ -108,8 +132,7 @@
</div>
</template>
-</polymer-element>
-<polymer-element name="disassembly-entry" extends="observatory-element">
+</polymer-element><polymer-element name="disassembly-entry" extends="observatory-element">
<template>
<div class="row">
<template if="{{ instruction['type'] == 'DisassembledInstructionComment' }}">
@@ -261,7 +284,7 @@
<template>
<div class="row">
<div class="col-md-1">
- <img src="img/isolate_icon.png" class="img-polaroid">
+ <img src="packages/observatory/src/observatory_elements/img/isolate_icon.png" class="img-polaroid">
</div>
<div class="col-md-1">{{ isolate }}</div>
<div class="col-md-10">{{ name }}</div>
@@ -289,6 +312,45 @@
</ul>
</template>
+</polymer-element><polymer-element name="instance-view" extends="observatory-element">
+ <template>
+ <div class="row">
+ <div class="col-md-8 col-md-offset-2">
+ <div class="panel panel-warning">
+ <div class="panel-heading">
+ Instance of
+ <a href="{{ app.locationManager.currentIsolateClassLink(instance['class']['id'])}}">
+ {{ instance['class']['user_name'] }}
+ </a>
+ </div>
+ <div class="panel-body">
+ <template if="{{ instance['error'] == null }}">
+ <table class="table table-hover">
+ <tbody>
+ <tr>
+ <td>Preview</td><td>{{ instance['preview'] }}</td>
+ </tr>
+ </tbody>
+ </table>
+ <blockquote><strong>Fields</strong></blockquote>
+ <table class="table table-hover">
+ <tbody>
+ <tr template="" repeat="{{ field in instance['fields'] }}">
+ <td><field-ref app="{{ app }}" field="{{ field }}"></field-ref></td>
+ <td><instance-ref app="{{ app }}" instance="{{ field['value'] }}"></instance-ref></td>
+ </tr>
+ </tbody>
+ </table>
+ </template>
+ <template if="{{ instance['error'] != null }}">
+ <error-view error_obj="{{ instance['error'] }}"></error-view>
+ </template>
+ </div>
+ </div>
+ </div>
+ </div>
+ </template>
+
</polymer-element><polymer-element name="json-view" extends="observatory-element">
<template>
<template bind="" if="{{ valueType == 'Primitive' }}">
@@ -318,8 +380,7 @@
</template>
</template>
-</polymer-element>
-<polymer-element name="library-view" extends="observatory-element">
+</polymer-element><polymer-element name="library-view" extends="observatory-element">
<template>
<div class="alert alert-success">Library {{ library['name'] }}</div>
<div class="alert alert-info">Scripts</div>
@@ -351,35 +412,8 @@
<table class="table table-hover">
<tbody>
<tr template="" repeat="{{ variable in library['variables'] }}">
- <td>
- <template if="{{ variable['final'] }}">
- final
- </template>
- <template if="{{ variable['const'] }}">
- const
- </template>
- <template if="{{ (variable['declared_type']['name'] == 'dynamic' && !variable['final'] && !variable['const']) }}">
- var
- </template>
- <template if="{{ (variable['declared_type']['name'] != 'dynamic') }}">
- <a href="{{ app.locationManager.currentIsolateClassLink(variable['declared_type']['id']) }}">
- {{ variable['declared_type']['user_name'] }}
- </a>
- </template>
- <a href="{{ app.locationManager.currentIsolateObjectLink(variable['id'])}}">
- {{ variable['user_name'] }}
- </a>
- </td>
- <td>
- <template if="{{ (variable['value']['type'] == 'null') }}">
- {{ "null" }}
- </template>
- <template if="{{ (variable['value']['type'] != 'null') }}">
- <a href="{{ app.locationManager.currentIsolateObjectLink(variable['value']['id'])}}">
- {{ variable['value']['preview'] }}
- </a>
- </template>
- </td>
+ <td><field-ref app="{{ app }}" field="{{ variable }}"></field-ref></td>
+ <td><instance-ref app="{{ app }}" instance="{{ variable['value'] }}"></instance-ref></td>
</tr>
</tbody>
</table>
@@ -493,6 +527,24 @@
<template if="{{ messageType == 'Field' }}">
<field-view app="{{ app }}" field="{{ message }}"></field-view>
</template>
+ <template if="{{ messageType == 'Instance' }}">
+ <instance-view app="{{ app }}" instance="{{ message }}"></instance-view>
+ </template>
+ <template if="{{ messageType == 'Array' }}">
+ <instance-view app="{{ app }}" instance="{{ message }}"></instance-view>
+ </template>
+ <template if="{{ messageType == 'GrowableObjectArray' }}">
+ <instance-view app="{{ app }}" instance="{{ message }}"></instance-view>
+ </template>
+ <template if="{{ messageType == 'String' }}">
+ <instance-view app="{{ app }}" instance="{{ message }}"></instance-view>
+ </template>
+ <template if="{{ messageType == 'Bool' }}">
+ <instance-view app="{{ app }}" instance="{{ message }}"></instance-view>
+ </template>
+ <template if="{{ messageType == 'Smi' }}">
+ <instance-view app="{{ app }}" instance="{{ message }}"></instance-view>
+ </template>
<template if="{{ messageType == 'Function' }}">
<function-view app="{{ app }}" function="{{ message }}"></function-view>
</template>
@@ -536,4 +588,4 @@
</polymer-element>
<observatory-application></observatory-application>
-</body></html>
+</body></html>
\ No newline at end of file
diff --git a/runtime/bin/vmservice/client/deployed/web/index.html_bootstrap.dart.js b/runtime/bin/vmservice/client/deployed/web/index.html_bootstrap.dart.js
index f571390..a67ecba 100644
--- a/runtime/bin/vmservice/client/deployed/web/index.html_bootstrap.dart.js
+++ b/runtime/bin/vmservice/client/deployed/web/index.html_bootstrap.dart.js
@@ -904,35 +904,36 @@
// every PathObserver used by defineProperty share a single Object.observe
// callback, and thus get() can simply call observer.deliver() and any changes
// to any dependent value will be observed.
- PathObserver.defineProperty = function(target, name, object, path) {
+ PathObserver.defineProperty = function(object, name, descriptor) {
// TODO(rafaelw): Validate errors
- path = getPath(path);
- var notify = notifyFunction(target, name);
+ var obj = descriptor.object;
+ var path = getPath(descriptor.path);
+ var notify = notifyFunction(object, name);
- var observer = new PathObserver(object, path,
+ var observer = new PathObserver(obj, descriptor.path,
function(newValue, oldValue) {
if (notify)
notify(PROP_UPDATE_TYPE, oldValue);
}
);
- Object.defineProperty(target, name, {
+ Object.defineProperty(object, name, {
get: function() {
- return path.getValueFrom(object);
+ return path.getValueFrom(obj);
},
set: function(newValue) {
- path.setValueFrom(object, newValue);
+ path.setValueFrom(obj, newValue);
},
configurable: true
});
return {
close: function() {
- var oldValue = path.getValueFrom(object);
+ var oldValue = path.getValueFrom(obj);
if (notify)
observer.deliver();
observer.close();
- Object.defineProperty(target, name, {
+ Object.defineProperty(object, name, {
value: oldValue,
writable: true,
configurable: true
@@ -1418,7 +1419,7 @@
'delete': PROP_DELETE_TYPE,
splice: ARRAY_SPLICE_TYPE
};
-})(typeof global !== 'undefined' && global ? global : this || window);
+})(typeof global !== 'undefined' && global ? global : this);
/*
* Copyright 2012 The Polymer Authors. All rights reserved.
@@ -1461,7 +1462,7 @@
// Use of this source code is goverened by a BSD-style
// license that can be found in the LICENSE file.
-window.ShadowDOMPolyfill = {};
+var ShadowDOMPolyfill = {};
(function(scope) {
'use strict';
@@ -1489,19 +1490,16 @@
throw new Error('Assertion failed');
};
- var defineProperty = Object.defineProperty;
- var getOwnPropertyNames = Object.getOwnPropertyNames;
- var getOwnPropertyDescriptor = Object.getOwnPropertyDescriptor;
-
function mixin(to, from) {
- getOwnPropertyNames(from).forEach(function(name) {
- defineProperty(to, name, getOwnPropertyDescriptor(from, name));
+ Object.getOwnPropertyNames(from).forEach(function(name) {
+ Object.defineProperty(to, name,
+ Object.getOwnPropertyDescriptor(from, name));
});
return to;
};
function mixinStatics(to, from) {
- getOwnPropertyNames(from).forEach(function(name) {
+ Object.getOwnPropertyNames(from).forEach(function(name) {
switch (name) {
case 'arguments':
case 'caller':
@@ -1511,7 +1509,8 @@
case 'toString':
return;
}
- defineProperty(to, name, getOwnPropertyDescriptor(from, name));
+ Object.defineProperty(to, name,
+ Object.getOwnPropertyDescriptor(from, name));
});
return to;
};
@@ -1526,7 +1525,7 @@
// Mozilla's old DOM bindings are bretty busted:
// https://bugzilla.mozilla.org/show_bug.cgi?id=855844
// Make sure they are create before we start modifying things.
- getOwnPropertyNames(window);
+ Object.getOwnPropertyNames(window);
function getWrapperConstructor(node) {
var nativePrototype = node.__proto__ || Object.getPrototypeOf(node);
@@ -1588,39 +1587,28 @@
function() { return this.impl[name].apply(this.impl, arguments); };
}
- function getDescriptor(source, name) {
- try {
- return Object.getOwnPropertyDescriptor(source, name);
- } catch (ex) {
- // JSC and V8 both use data properties instead of accessors which can
- // cause getting the property desciptor to throw an exception.
- // https://bugs.webkit.org/show_bug.cgi?id=49739
- return dummyDescriptor;
- }
- }
-
- function installProperty(source, target, allowMethod, opt_blacklist) {
- var names = getOwnPropertyNames(source);
- for (var i = 0; i < names.length; i++) {
- var name = names[i];
- if (name === 'polymerBlackList_')
- continue;
-
+ function installProperty(source, target, allowMethod) {
+ Object.getOwnPropertyNames(source).forEach(function(name) {
if (name in target)
- continue;
-
- if (source.polymerBlackList_ && source.polymerBlackList_[name])
- continue;
+ return;
if (isFirefox) {
// Tickle Firefox's old bindings.
source.__lookupGetter__(name);
}
- var descriptor = getDescriptor(source, name);
+ var descriptor;
+ try {
+ descriptor = Object.getOwnPropertyDescriptor(source, name);
+ } catch (ex) {
+ // JSC and V8 both use data properties instead of accessors which can
+ // cause getting the property desciptor to throw an exception.
+ // https://bugs.webkit.org/show_bug.cgi?id=49739
+ descriptor = dummyDescriptor;
+ }
var getter, setter;
if (allowMethod && typeof descriptor.value === 'function') {
target[name] = getMethod(name);
- continue;
+ return;
}
var isEvent = isEventHandlerName(name);
@@ -1636,13 +1624,13 @@
setter = getSetter(name);
}
- defineProperty(target, name, {
+ Object.defineProperty(target, name, {
get: getter,
set: setter,
configurable: descriptor.configurable,
enumerable: descriptor.enumerable
});
- }
+ });
}
/**
@@ -1667,12 +1655,6 @@
addForwardingProperties(nativePrototype, wrapperPrototype);
if (opt_instance)
registerInstanceProperties(wrapperPrototype, opt_instance);
- defineProperty(wrapperPrototype, 'constructor', {
- value: wrapperConstructor,
- configurable: true,
- enumerable: false,
- writable: true
- });
}
function isWrapperFor(wrapperConstructor, nativeConstructor) {
@@ -1683,7 +1665,11 @@
/**
* Creates a generic wrapper constructor based on |object| and its
* constructor.
+ * Sometimes the constructor does not have an associated instance
+ * (CharacterData for example). In that case you can pass the constructor that
+ * you want to map the object to using |opt_nativeConstructor|.
* @param {Node} object
+ * @param {Function=} opt_nativeConstructor
* @return {Function} The generated constructor.
*/
function registerObject(object) {
@@ -1796,7 +1782,7 @@
}
function defineGetter(constructor, name, getter) {
- defineProperty(constructor.prototype, name, {
+ Object.defineProperty(constructor.prototype, name, {
get: getter,
configurable: true,
enumerable: true
@@ -1845,430 +1831,7 @@
scope.wrapIfNeeded = wrapIfNeeded;
scope.wrappers = wrappers;
-})(window.ShadowDOMPolyfill);
-
-/*
- * Copyright 2013 The Polymer Authors. All rights reserved.
- * Use of this source code is goverened by a BSD-style
- * license that can be found in the LICENSE file.
- */
-
-(function(context) {
- 'use strict';
-
- var OriginalMutationObserver = window.MutationObserver;
- var callbacks = [];
- var pending = false;
- var timerFunc;
-
- function handle() {
- pending = false;
- var copies = callbacks.slice(0);
- callbacks = [];
- for (var i = 0; i < copies.length; i++) {
- (0, copies[i])();
- }
- }
-
- if (OriginalMutationObserver) {
- var counter = 1;
- var observer = new OriginalMutationObserver(handle);
- var textNode = document.createTextNode(counter);
- observer.observe(textNode, {characterData: true});
-
- timerFunc = function() {
- counter = (counter + 1) % 2;
- textNode.data = counter;
- };
-
- } else {
- timerFunc = window.setImmediate || window.setTimeout;
- }
-
- function setEndOfMicrotask(func) {
- callbacks.push(func);
- if (pending)
- return;
- pending = true;
- timerFunc(handle, 0);
- }
-
- context.setEndOfMicrotask = setEndOfMicrotask;
-
-})(window.ShadowDOMPolyfill);
-
-/*
- * Copyright 2013 The Polymer Authors. All rights reserved.
- * Use of this source code is goverened by a BSD-style
- * license that can be found in the LICENSE file.
- */
-
-(function(scope) {
- 'use strict';
-
- var setEndOfMicrotask = scope.setEndOfMicrotask
- var wrapIfNeeded = scope.wrapIfNeeded
- var wrappers = scope.wrappers;
-
- var registrationsTable = new WeakMap();
- var globalMutationObservers = [];
- var isScheduled = false;
-
- function scheduleCallback(observer) {
- if (isScheduled)
- return;
- setEndOfMicrotask(notifyObservers);
- isScheduled = true;
- }
-
- // http://dom.spec.whatwg.org/#mutation-observers
- function notifyObservers() {
- isScheduled = false;
-
- do {
- var notifyList = globalMutationObservers.slice();
- var anyNonEmpty = false;
- for (var i = 0; i < notifyList.length; i++) {
- var mo = notifyList[i];
- var queue = mo.takeRecords();
- removeTransientObserversFor(mo);
- if (queue.length) {
- mo.callback_(queue, mo);
- anyNonEmpty = true;
- }
- }
- } while (anyNonEmpty);
- }
-
- /**
- * @param {string} type
- * @param {Node} target
- * @constructor
- */
- function MutationRecord(type, target) {
- this.type = type;
- this.target = target;
- this.addedNodes = new wrappers.NodeList();
- this.removedNodes = new wrappers.NodeList();
- this.previousSibling = null;
- this.nextSibling = null;
- this.attributeName = null;
- this.attributeNamespace = null;
- this.oldValue = null;
- }
-
- /**
- * Registers transient observers to ancestor and its ancesors for the node
- * which was removed.
- * @param {!Node} ancestor
- * @param {!Node} node
- */
- function registerTransientObservers(ancestor, node) {
- for (; ancestor; ancestor = ancestor.parentNode) {
- var registrations = registrationsTable.get(ancestor);
- if (!registrations)
- continue;
- for (var i = 0; i < registrations.length; i++) {
- var registration = registrations[i];
- if (registration.options.subtree)
- registration.addTransientObserver(node);
- }
- }
- }
-
- function removeTransientObserversFor(observer) {
- for (var i = 0; i < observer.nodes_.length; i++) {
- var node = observer.nodes_[i];
- var registrations = registrationsTable.get(node);
- if (!registrations)
- return;
- for (var j = 0; j < registrations.length; j++) {
- var registration = registrations[j];
- if (registration.observer === observer)
- registration.removeTransientObservers();
- }
- }
- }
-
- // http://dom.spec.whatwg.org/#queue-a-mutation-record
- function enqueueMutation(target, type, data) {
- // 1.
- var interestedObservers = Object.create(null);
- var associatedStrings = Object.create(null);
-
- // 2.
- for (var node = target; node; node = node.parentNode) {
- // 3.
- var registrations = registrationsTable.get(node);
- if (!registrations)
- continue;
- for (var j = 0; j < registrations.length; j++) {
- var registration = registrations[j];
- var options = registration.options;
- // 1.
- if (node !== target && !options.subtree)
- continue;
-
- // 2.
- if (type === 'attributes' && !options.attributes)
- continue;
-
- // 3. If type is "attributes", options's attributeFilter is present, and
- // either options's attributeFilter does not contain name or namespace
- // is non-null, continue.
- if (type === 'attributes' && options.attributeFilter &&
- (data.namespace !== null ||
- options.attributeFilter.indexOf(data.name) === -1)) {
- continue;
- }
-
- // 4.
- if (type === 'characterData' && !options.characterData)
- continue;
-
- // 5.
- if (type === 'childList' && !options.childList)
- continue;
-
- // 6.
- var observer = registration.observer;
- interestedObservers[observer.uid_] = observer;
-
- // 7. If either type is "attributes" and options's attributeOldValue is
- // true, or type is "characterData" and options's characterDataOldValue
- // is true, set the paired string of registered observer's observer in
- // interested observers to oldValue.
- if (type === 'attributes' && options.attributeOldValue ||
- type === 'characterData' && options.characterDataOldValue) {
- associatedStrings[observer.uid_] = data.oldValue;
- }
- }
- }
-
- var anyRecordsEnqueued = false;
-
- // 4.
- for (var uid in interestedObservers) {
- var observer = interestedObservers[uid];
- var record = new MutationRecord(type, target);
-
- // 2.
- if ('name' in data && 'namespace' in data) {
- record.attributeName = data.name;
- record.attributeNamespace = data.namespace;
- }
-
- // 3.
- if (data.addedNodes)
- record.addedNodes = data.addedNodes;
-
- // 4.
- if (data.removedNodes)
- record.removedNodes = data.removedNodes;
-
- // 5.
- if (data.previousSibling)
- record.previousSibling = data.previousSibling;
-
- // 6.
- if (data.nextSibling)
- record.nextSibling = data.nextSibling;
-
- // 7.
- if (associatedStrings[uid] !== undefined)
- record.oldValue = associatedStrings[uid];
-
- // 8.
- observer.records_.push(record);
-
- anyRecordsEnqueued = true;
- }
-
- if (anyRecordsEnqueued)
- scheduleCallback();
- }
-
- var slice = Array.prototype.slice;
-
- /**
- * @param {!Object} options
- * @constructor
- */
- function MutationObserverOptions(options) {
- this.childList = !!options.childList;
- this.subtree = !!options.subtree;
-
- // 1. If either options' attributeOldValue or attributeFilter is present
- // and options' attributes is omitted, set options' attributes to true.
- if (!('attributes' in options) &&
- ('attributeOldValue' in options || 'attributeFilter' in options)) {
- this.attributes = true;
- } else {
- this.attributes = !!options.attributes;
- }
-
- // 2. If options' characterDataOldValue is present and options'
- // characterData is omitted, set options' characterData to true.
- if ('characterDataOldValue' in options && !('characterData' in options))
- this.characterData = true;
- else
- this.characterData = !!options.characterData;
-
- // 3. & 4.
- if (!this.attributes &&
- (options.attributeOldValue || 'attributeFilter' in options) ||
- // 5.
- !this.characterData && options.characterDataOldValue) {
- throw new TypeError();
- }
-
- this.characterData = !!options.characterData;
- this.attributeOldValue = !!options.attributeOldValue;
- this.characterDataOldValue = !!options.characterDataOldValue;
- if ('attributeFilter' in options) {
- if (options.attributeFilter == null ||
- typeof options.attributeFilter !== 'object') {
- throw new TypeError();
- }
- this.attributeFilter = slice.call(options.attributeFilter);
- } else {
- this.attributeFilter = null;
- }
- }
-
- var uidCounter = 0;
-
- /**
- * The class that maps to the DOM MutationObserver interface.
- * @param {Function} callback.
- * @constructor
- */
- function MutationObserver(callback) {
- this.callback_ = callback;
- this.nodes_ = [];
- this.records_ = [];
- this.uid_ = ++uidCounter;
-
- // This will leak. There is no way to implement this without WeakRefs :'(
- globalMutationObservers.push(this);
- }
-
- MutationObserver.prototype = {
- // http://dom.spec.whatwg.org/#dom-mutationobserver-observe
- observe: function(target, options) {
- target = wrapIfNeeded(target);
-
- var newOptions = new MutationObserverOptions(options);
-
- // 6.
- var registration;
- var registrations = registrationsTable.get(target);
- if (!registrations)
- registrationsTable.set(target, registrations = []);
-
- for (var i = 0; i < registrations.length; i++) {
- if (registrations[i].observer === this) {
- registration = registrations[i];
- // 6.1.
- registration.removeTransientObservers();
- // 6.2.
- registration.options = newOptions;
- }
- }
-
- // 7.
- if (!registration) {
- registration = new Registration(this, target, newOptions);
- registrations.push(registration);
- this.nodes_.push(target);
- }
- },
-
- // http://dom.spec.whatwg.org/#dom-mutationobserver-disconnect
- disconnect: function() {
- this.nodes_.forEach(function(node) {
- var registrations = registrationsTable.get(node);
- for (var i = 0; i < registrations.length; i++) {
- var registration = registrations[i];
- if (registration.observer === this) {
- registrations.splice(i, 1);
- // Each node can only have one registered observer associated with
- // this observer.
- break;
- }
- }
- }, this);
- this.records_ = [];
- },
-
- takeRecords: function() {
- var copyOfRecords = this.records_;
- this.records_ = [];
- return copyOfRecords;
- }
- };
-
- /**
- * Class used to represent a registered observer.
- * @param {MutationObserver} observer
- * @param {Node} target
- * @param {MutationObserverOptions} options
- * @constructor
- */
- function Registration(observer, target, options) {
- this.observer = observer;
- this.target = target;
- this.options = options;
- this.transientObservedNodes = [];
- }
-
- Registration.prototype = {
- /**
- * Adds a transient observer on node. The transient observer gets removed
- * next time we deliver the change records.
- * @param {Node} node
- */
- addTransientObserver: function(node) {
- // Don't add transient observers on the target itself. We already have all
- // the required listeners set up on the target.
- if (node === this.target)
- return;
-
- this.transientObservedNodes.push(node);
- var registrations = registrationsTable.get(node);
- if (!registrations)
- registrationsTable.set(node, registrations = []);
-
- // We know that registrations does not contain this because we already
- // checked if node === this.target.
- registrations.push(this);
- },
-
- removeTransientObservers: function() {
- var transientObservedNodes = this.transientObservedNodes;
- this.transientObservedNodes = [];
-
- for (var i = 0; i < transientObservedNodes.length; i++) {
- var node = transientObservedNodes[i];
- var registrations = registrationsTable.get(node);
- for (var j = 0; j < registrations.length; j++) {
- if (registrations[j] === this) {
- registrations.splice(j, 1);
- // Each node can only have one registered observer associated with
- // this observer.
- break;
- }
- }
- }
- }
- };
-
- scope.enqueueMutation = enqueueMutation;
- scope.registerTransientObservers = registerTransientObservers;
- scope.wrappers.MutationObserver = MutationObserver;
- scope.wrappers.MutationRecord = MutationRecord;
-
-})(window.ShadowDOMPolyfill);
+})(this.ShadowDOMPolyfill);
// Copyright 2013 The Polymer Authors. All rights reserved.
// Use of this source code is goverened by a BSD-style
@@ -2451,6 +2014,17 @@
return false;
}
+ var mutationEventsAreSilenced = 0;
+
+ function muteMutationEvents() {
+ mutationEventsAreSilenced++;
+ }
+
+ function unmuteMutationEvents() {
+ mutationEventsAreSilenced--;
+ }
+
+ var OriginalMutationEvent = window.MutationEvent;
function dispatchOriginalEvent(originalEvent) {
// Make sure this event is only dispatched once.
@@ -2458,9 +2032,15 @@
return;
handledEventsTable.set(originalEvent, true);
- // Render before dispatching the event to ensure that the event path is
- // correct.
- scope.renderAllPending();
+ // Don't do rendering if this is a mutation event since rendering might
+ // mutate the DOM which would fire more events and we would most likely
+ // just iloop.
+ if (originalEvent instanceof OriginalMutationEvent) {
+ if (mutationEventsAreSilenced)
+ return;
+ } else {
+ scope.renderAllPending();
+ }
var target = wrap(originalEvent.target);
var event = wrap(originalEvent);
@@ -2630,7 +2210,6 @@
};
var OriginalEvent = window.Event;
- OriginalEvent.prototype.polymerBlackList_ = {returnValue: true};
/**
* Creates a new Event wrapper or wraps an existin native Event object.
@@ -2746,6 +2325,13 @@
var MouseEvent = registerGenericEvent('MouseEvent', UIEvent, mouseEventProto);
var FocusEvent = registerGenericEvent('FocusEvent', UIEvent, focusEventProto);
+ var MutationEvent = registerGenericEvent('MutationEvent', Event, {
+ initMutationEvent: getInitFunction('initMutationEvent', 3),
+ get relatedNode() {
+ return wrap(this.impl.relatedNode);
+ },
+ });
+
// In case the browser does not support event constructors we polyfill that
// by calling `createEvent('Foo')` and `initFooEvent` where the arguments to
// `initFooEvent` are derived from the registered default event init dict.
@@ -2812,41 +2398,12 @@
configureEventConstructor('FocusEvent', {relatedTarget: null}, 'UIEvent');
}
- function BeforeUnloadEvent(impl) {
- Event.call(this);
- }
- BeforeUnloadEvent.prototype = Object.create(Event.prototype);
- mixin(BeforeUnloadEvent.prototype, {
- get returnValue() {
- return this.impl.returnValue;
- },
- set returnValue(v) {
- this.impl.returnValue = v;
- }
- });
-
function isValidListener(fun) {
if (typeof fun === 'function')
return true;
return fun && fun.handleEvent;
}
- function isMutationEvent(type) {
- switch (type) {
- case 'DOMAttrModified':
- case 'DOMAttributeNameChanged':
- case 'DOMCharacterDataModified':
- case 'DOMElementNameChanged':
- case 'DOMNodeInserted':
- case 'DOMNodeInsertedIntoDocument':
- case 'DOMNodeRemoved':
- case 'DOMNodeRemovedFromDocument':
- case 'DOMSubtreeModified':
- return true;
- }
- return false;
- }
-
var OriginalEventTarget = window.EventTarget;
/**
@@ -2881,7 +2438,7 @@
EventTarget.prototype = {
addEventListener: function(type, fun, capture) {
- if (!isValidListener(fun) || isMutationEvent(type))
+ if (!isValidListener(fun))
return;
var listener = new Listener(type, fun, capture);
@@ -3011,16 +2568,18 @@
scope.elementFromPoint = elementFromPoint;
scope.getEventHandlerGetter = getEventHandlerGetter;
scope.getEventHandlerSetter = getEventHandlerSetter;
+ scope.muteMutationEvents = muteMutationEvents;
+ scope.unmuteMutationEvents = unmuteMutationEvents;
scope.wrapEventTargetMethods = wrapEventTargetMethods;
- scope.wrappers.BeforeUnloadEvent = BeforeUnloadEvent;
scope.wrappers.CustomEvent = CustomEvent;
scope.wrappers.Event = Event;
scope.wrappers.EventTarget = EventTarget;
scope.wrappers.FocusEvent = FocusEvent;
scope.wrappers.MouseEvent = MouseEvent;
+ scope.wrappers.MutationEvent = MutationEvent;
scope.wrappers.UIEvent = UIEvent;
-})(window.ShadowDOMPolyfill);
+})(this.ShadowDOMPolyfill);
// Copyright 2012 The Polymer Authors. All rights reserved.
// Use of this source code is goverened by a BSD-style
@@ -3067,8 +2626,7 @@
scope.addWrapNodeListMethod = addWrapNodeListMethod;
scope.wrapNodeList = wrapNodeList;
-})(window.ShadowDOMPolyfill);
-
+})(this.ShadowDOMPolyfill);
// Copyright 2012 The Polymer Authors. All rights reserved.
// Use of this source code is goverened by a BSD-style
// license that can be found in the LICENSE file.
@@ -3078,11 +2636,9 @@
var EventTarget = scope.wrappers.EventTarget;
var NodeList = scope.wrappers.NodeList;
- var assert = scope.assert;
var defineWrapGetter = scope.defineWrapGetter;
- var enqueueMutation = scope.enqueueMutation;
+ var assert = scope.assert;
var mixin = scope.mixin;
- var registerTransientObservers = scope.registerTransientObservers;
var registerWrapper = scope.registerWrapper;
var unwrap = scope.unwrap;
var wrap = scope.wrap;
@@ -3092,36 +2648,6 @@
assert(node instanceof Node);
}
- function createOneElementNodeList(node) {
- var nodes = new NodeList();
- nodes[0] = node;
- nodes.length = 1;
- return nodes;
- }
-
- var surpressMutations = false;
-
- /**
- * Called before node is inserted into a node to enqueue its removal from its
- * old parent.
- * @param {!Node} node The node that is about to be removed.
- * @param {!Node} parent The parent node that the node is being removed from.
- * @param {!NodeList} nodes The collected nodes.
- */
- function enqueueRemovalForInsertedNodes(node, parent, nodes) {
- enqueueMutation(parent, 'childList', {
- removedNodes: nodes,
- previousSibling: node.previousSibling,
- nextSibling: node.nextSibling
- });
- }
-
- function enqueueRemovalForInsertedDocumentFragment(df, nodes) {
- enqueueMutation(df, 'childList', {
- removedNodes: nodes
- });
- }
-
/**
* Collects nodes from a DocumentFragment or a Node for removal followed
* by an insertion.
@@ -3129,95 +2655,60 @@
* This updates the internal pointers for node, previousNode and nextNode.
*/
function collectNodes(node, parentNode, previousNode, nextNode) {
- if (node instanceof DocumentFragment) {
- var nodes = collectNodesForDocumentFragment(node);
-
- // The extra loop is to work around bugs with DocumentFragments in IE.
- surpressMutations = true;
- for (var i = nodes.length - 1; i >= 0; i--) {
- node.removeChild(nodes[i]);
- nodes[i].parentNode_ = parentNode;
- }
- surpressMutations = false;
-
- for (var i = 0; i < nodes.length; i++) {
- nodes[i].previousSibling_ = nodes[i - 1] || previousNode;
- nodes[i].nextSibling_ = nodes[i + 1] || nextNode;
- }
-
+ if (!(node instanceof DocumentFragment)) {
+ if (node.parentNode)
+ node.parentNode.removeChild(node);
+ node.parentNode_ = parentNode;
+ node.previousSibling_ = previousNode;
+ node.nextSibling_ = nextNode;
if (previousNode)
- previousNode.nextSibling_ = nodes[0];
+ previousNode.nextSibling_ = node;
if (nextNode)
- nextNode.previousSibling_ = nodes[nodes.length - 1];
+ nextNode.previousSibling_ = node;
+ return [node];
+ }
+ var nodes = [];
+ for (var child = node.firstChild; child; child = child.nextSibling) {
+ nodes.push(child);
+ }
+
+ for (var i = nodes.length - 1; i >= 0; i--) {
+ node.removeChild(nodes[i]);
+ nodes[i].parentNode_ = parentNode;
+ }
+
+ for (var i = 0; i < nodes.length; i++) {
+ nodes[i].previousSibling_ = nodes[i - 1] || previousNode;
+ nodes[i].nextSibling_ = nodes[i + 1] || nextNode;
+ }
+
+ if (previousNode)
+ previousNode.nextSibling_ = nodes[0];
+ if (nextNode)
+ nextNode.previousSibling_ = nodes[nodes.length - 1];
+
+ return nodes;
+ }
+
+ function collectNodesNoNeedToUpdatePointers(node) {
+ if (node instanceof DocumentFragment) {
+ var nodes = [];
+ var i = 0;
+ for (var child = node.firstChild; child; child = child.nextSibling) {
+ nodes[i++] = child;
+ }
return nodes;
}
-
- var nodes = createOneElementNodeList(node);
- var oldParent = node.parentNode;
- if (oldParent) {
- // This will enqueue the mutation record for the removal as needed.
- oldParent.removeChild(node);
- }
-
- node.parentNode_ = parentNode;
- node.previousSibling_ = previousNode;
- node.nextSibling_ = nextNode;
- if (previousNode)
- previousNode.nextSibling_ = node;
- if (nextNode)
- nextNode.previousSibling_ = node;
-
- return nodes;
- }
-
- function collectNodesNative(node) {
- if (node instanceof DocumentFragment)
- return collectNodesForDocumentFragment(node);
-
- var nodes = createOneElementNodeList(node);
- var oldParent = node.parentNode;
- if (oldParent)
- enqueueRemovalForInsertedNodes(node, oldParent, nodes);
- return nodes;
- }
-
- function collectNodesForDocumentFragment(node) {
- var nodes = new NodeList();
- var i = 0;
- for (var child = node.firstChild; child; child = child.nextSibling) {
- nodes[i++] = child;
- }
- nodes.length = i;
- enqueueRemovalForInsertedDocumentFragment(node, nodes);
- return nodes;
- }
-
- function snapshotNodeList(nodeList) {
- // NodeLists are not live at the moment so just return the same object.
- return nodeList;
- }
-
- // http://dom.spec.whatwg.org/#node-is-inserted
- function nodeWasAdded(node) {
- node.nodeIsInserted_();
+ return [node];
}
function nodesWereAdded(nodes) {
for (var i = 0; i < nodes.length; i++) {
- nodeWasAdded(nodes[i]);
+ nodes[i].nodeWasAdded_();
}
}
- // http://dom.spec.whatwg.org/#node-is-removed
- function nodeWasRemoved(node) {
- // Nothing at this point in time.
- }
-
- function nodesWereRemoved(nodes) {
- // Nothing at this point in time.
- }
-
function ensureSameOwnerDocument(parent, child) {
var ownerDoc = parent.nodeType === Node.DOCUMENT_NODE ?
parent : parent.ownerDocument;
@@ -3360,56 +2851,69 @@
Node.prototype = Object.create(EventTarget.prototype);
mixin(Node.prototype, {
appendChild: function(childWrapper) {
- return this.insertBefore(childWrapper, null);
+ assertIsNodeWrapper(childWrapper);
+
+ var nodes;
+
+ if (this.invalidateShadowRenderer() || invalidateParent(childWrapper)) {
+ var previousNode = this.lastChild;
+ var nextNode = null;
+ nodes = collectNodes(childWrapper, this, previousNode, nextNode);
+
+ this.lastChild_ = nodes[nodes.length - 1];
+ if (!previousNode)
+ this.firstChild_ = nodes[0];
+
+ originalAppendChild.call(this.impl, unwrapNodesForInsertion(this, nodes));
+ } else {
+ nodes = collectNodesNoNeedToUpdatePointers(childWrapper)
+ ensureSameOwnerDocument(this, childWrapper);
+ originalAppendChild.call(this.impl, unwrap(childWrapper));
+ }
+
+ nodesWereAdded(nodes);
+
+ return childWrapper;
},
insertBefore: function(childWrapper, refWrapper) {
- assertIsNodeWrapper(childWrapper);
+ // TODO(arv): Unify with appendChild
+ if (!refWrapper)
+ return this.appendChild(childWrapper);
- refWrapper = refWrapper || null;
- refWrapper && assertIsNodeWrapper(refWrapper);
- refWrapper && assert(refWrapper.parentNode === this);
+ assertIsNodeWrapper(childWrapper);
+ assertIsNodeWrapper(refWrapper);
+ assert(refWrapper.parentNode === this);
var nodes;
- var previousNode =
- refWrapper ? refWrapper.previousSibling : this.lastChild;
- var useNative = !this.invalidateShadowRenderer() &&
- !invalidateParent(childWrapper);
+ if (this.invalidateShadowRenderer() || invalidateParent(childWrapper)) {
+ var previousNode = refWrapper.previousSibling;
+ var nextNode = refWrapper;
+ nodes = collectNodes(childWrapper, this, previousNode, nextNode);
- if (useNative)
- nodes = collectNodesNative(childWrapper);
- else
- nodes = collectNodes(childWrapper, this, previousNode, refWrapper);
-
- if (useNative) {
- ensureSameOwnerDocument(this, childWrapper);
- originalInsertBefore.call(this.impl, unwrap(childWrapper),
- unwrap(refWrapper));
- } else {
- if (!previousNode)
+ if (this.firstChild === refWrapper)
this.firstChild_ = nodes[0];
- if (!refWrapper)
- this.lastChild_ = nodes[nodes.length - 1];
-
- var refNode = unwrap(refWrapper);
- var parentNode = refNode ? refNode.parentNode : this.impl;
// insertBefore refWrapper no matter what the parent is?
+ var refNode = unwrap(refWrapper);
+ var parentNode = refNode.parentNode;
+
if (parentNode) {
- originalInsertBefore.call(parentNode,
- unwrapNodesForInsertion(this, nodes), refNode);
+ originalInsertBefore.call(
+ parentNode,
+ unwrapNodesForInsertion(this, nodes),
+ refNode);
} else {
adoptNodesIfNeeded(this, nodes);
}
+ } else {
+ nodes = collectNodesNoNeedToUpdatePointers(childWrapper);
+ ensureSameOwnerDocument(this, childWrapper);
+ originalInsertBefore.call(this.impl, unwrap(childWrapper),
+ unwrap(refWrapper));
}
- enqueueMutation(this, 'childList', {
- addedNodes: nodes,
- nextSibling: refWrapper,
- previousSibling: previousNode
- });
-
nodesWereAdded(nodes);
return childWrapper;
@@ -3435,15 +2939,15 @@
}
var childNode = unwrap(childWrapper);
- var childWrapperNextSibling = childWrapper.nextSibling;
- var childWrapperPreviousSibling = childWrapper.previousSibling;
-
if (this.invalidateShadowRenderer()) {
+
// We need to remove the real node from the DOM before updating the
// pointers. This is so that that mutation event is dispatched before
// the pointers have changed.
var thisFirstChild = this.firstChild;
var thisLastChild = this.lastChild;
+ var childWrapperNextSibling = childWrapper.nextSibling;
+ var childWrapperPreviousSibling = childWrapper.previousSibling;
var parentNode = childNode.parentNode;
if (parentNode)
@@ -3466,16 +2970,6 @@
removeChildOriginalHelper(this.impl, childNode);
}
- if (!surpressMutations) {
- enqueueMutation(this, 'childList', {
- removedNodes: createOneElementNodeList(childWrapper),
- nextSibling: childWrapperNextSibling,
- previousSibling: childWrapperPreviousSibling
- });
- }
-
- registerTransientObservers(this, childWrapper);
-
return childWrapper;
},
@@ -3489,22 +2983,16 @@
}
var oldChildNode = unwrap(oldChildWrapper);
- var nextNode = oldChildWrapper.nextSibling;
- var previousNode = oldChildWrapper.previousSibling;
var nodes;
- var useNative = !this.invalidateShadowRenderer() &&
- !invalidateParent(newChildWrapper);
-
- if (useNative) {
- nodes = collectNodesNative(newChildWrapper);
- } else {
+ if (this.invalidateShadowRenderer() ||
+ invalidateParent(newChildWrapper)) {
+ var previousNode = oldChildWrapper.previousSibling;
+ var nextNode = oldChildWrapper.nextSibling;
if (nextNode === newChildWrapper)
nextNode = newChildWrapper.nextSibling;
nodes = collectNodes(newChildWrapper, this, previousNode, nextNode);
- }
- if (!useNative) {
if (this.firstChild === oldChildWrapper)
this.firstChild_ = nodes[0];
if (this.lastChild === oldChildWrapper)
@@ -3521,32 +3009,25 @@
oldChildNode);
}
} else {
+ nodes = collectNodesNoNeedToUpdatePointers(newChildWrapper);
ensureSameOwnerDocument(this, newChildWrapper);
originalReplaceChild.call(this.impl, unwrap(newChildWrapper),
oldChildNode);
}
- enqueueMutation(this, 'childList', {
- addedNodes: nodes,
- removedNodes: createOneElementNodeList(oldChildWrapper),
- nextSibling: nextNode,
- previousSibling: previousNode
- });
-
- nodeWasRemoved(oldChildWrapper);
nodesWereAdded(nodes);
return oldChildWrapper;
},
/**
- * Called after a node was inserted. Subclasses override this to invalidate
+ * Called after a node was added. Subclasses override this to invalidate
* the renderer as needed.
* @private
*/
- nodeIsInserted_: function() {
+ nodeWasAdded_: function() {
for (var child = this.firstChild; child; child = child.nextSibling) {
- child.nodeIsInserted_();
+ child.nodeWasAdded_();
}
},
@@ -3603,8 +3084,6 @@
return s;
},
set textContent(textContent) {
- var removedNodes = snapshotNodeList(this.childNodes);
-
if (this.invalidateShadowRenderer()) {
removeAllChildNodes(this);
if (textContent !== '') {
@@ -3614,16 +3093,6 @@
} else {
this.impl.textContent = textContent;
}
-
- var addedNodes = snapshotNodeList(this.childNodes);
-
- enqueueMutation(this, 'childList', {
- addedNodes: addedNodes,
- removedNodes: removedNodes
- });
-
- nodesWereRemoved(removedNodes);
- nodesWereAdded(addedNodes);
},
get childNodes() {
@@ -3637,6 +3106,9 @@
},
cloneNode: function(deep) {
+ if (!this.invalidateShadowRenderer())
+ return wrap(this.impl.cloneNode(deep));
+
var clone = wrap(this.impl.cloneNode(false));
if (deep) {
for (var child = this.firstChild; child; child = child.nextSibling) {
@@ -3679,14 +3151,9 @@
delete Node.prototype.querySelectorAll;
Node.prototype = mixin(Object.create(EventTarget.prototype), Node.prototype);
- scope.nodeWasAdded = nodeWasAdded;
- scope.nodeWasRemoved = nodeWasRemoved;
- scope.nodesWereAdded = nodesWereAdded;
- scope.nodesWereRemoved = nodesWereRemoved;
- scope.snapshotNodeList = snapshotNodeList;
scope.wrappers.Node = Node;
-})(window.ShadowDOMPolyfill);
+})(this.ShadowDOMPolyfill);
// Copyright 2013 The Polymer Authors. All rights reserved.
// Use of this source code is governed by a BSD-style
@@ -3760,7 +3227,7 @@
scope.GetElementsByInterface = GetElementsByInterface;
scope.SelectorsInterface = SelectorsInterface;
-})(window.ShadowDOMPolyfill);
+})(this.ShadowDOMPolyfill);
// Copyright 2013 The Polymer Authors. All rights reserved.
// Use of this source code is goverened by a BSD-style
@@ -3830,7 +3297,7 @@
scope.ChildNodeInterface = ChildNodeInterface;
scope.ParentNodeInterface = ParentNodeInterface;
-})(window.ShadowDOMPolyfill);
+})(this.ShadowDOMPolyfill);
// Copyright 2013 The Polymer Authors. All rights reserved.
// Use of this source code is goverened by a BSD-style
@@ -3841,7 +3308,6 @@
var ChildNodeInterface = scope.ChildNodeInterface;
var Node = scope.wrappers.Node;
- var enqueueMutation = scope.enqueueMutation;
var mixin = scope.mixin;
var registerWrapper = scope.registerWrapper;
@@ -3857,16 +3323,6 @@
},
set textContent(value) {
this.data = value;
- },
- get data() {
- return this.impl.data;
- },
- set data(value) {
- var oldValue = this.impl.data;
- enqueueMutation(this, 'characterData', {
- oldValue: oldValue
- });
- this.impl.data = value;
}
});
@@ -3876,7 +3332,7 @@
document.createTextNode(''));
scope.wrappers.CharacterData = CharacterData;
-})(window.ShadowDOMPolyfill);
+})(this.ShadowDOMPolyfill);
// Copyright 2013 The Polymer Authors. All rights reserved.
// Use of this source code is goverened by a BSD-style
@@ -3891,7 +3347,6 @@
var ParentNodeInterface = scope.ParentNodeInterface;
var SelectorsInterface = scope.SelectorsInterface;
var addWrapNodeListMethod = scope.addWrapNodeListMethod;
- var enqueueMutation = scope.enqueueMutation;
var mixin = scope.mixin;
var oneOf = scope.oneOf;
var registerWrapper = scope.registerWrapper;
@@ -3919,17 +3374,6 @@
renderer.invalidate();
}
- function enqueAttributeChange(element, name, oldValue) {
- // This is not fully spec compliant. We should use localName (which might
- // have a different case than name) and the namespace (which requires us
- // to get the Attr object).
- enqueueMutation(element, 'attributes', {
- name: name,
- namespace: null,
- oldValue: oldValue
- });
- }
-
function Element(node) {
Node.call(this, node);
}
@@ -3950,16 +3394,12 @@
},
setAttribute: function(name, value) {
- var oldValue = this.impl.getAttribute(name);
this.impl.setAttribute(name, value);
- enqueAttributeChange(this, name, oldValue);
invalidateRendererBasedOnAttribute(this, name);
},
removeAttribute: function(name) {
- var oldValue = this.impl.getAttribute(name);
this.impl.removeAttribute(name);
- enqueAttributeChange(this, name, oldValue);
invalidateRendererBasedOnAttribute(this, name);
},
@@ -4010,7 +3450,7 @@
// that reflect attributes.
scope.matchesName = matchesName;
scope.wrappers.Element = Element;
-})(window.ShadowDOMPolyfill);
+})(this.ShadowDOMPolyfill);
// Copyright 2013 The Polymer Authors. All rights reserved.
// Use of this source code is goverened by a BSD-style
@@ -4021,12 +3461,8 @@
var Element = scope.wrappers.Element;
var defineGetter = scope.defineGetter;
- var enqueueMutation = scope.enqueueMutation;
var mixin = scope.mixin;
- var nodesWereAdded = scope.nodesWereAdded;
- var nodesWereRemoved = scope.nodesWereRemoved;
var registerWrapper = scope.registerWrapper;
- var snapshotNodeList = scope.snapshotNodeList;
var unwrap = scope.unwrap;
var wrap = scope.wrap;
@@ -4128,21 +3564,10 @@
return getInnerHTML(this);
},
set innerHTML(value) {
- var removedNodes = snapshotNodeList(this.childNodes);
-
if (this.invalidateShadowRenderer())
setInnerHTML(this, value, this.tagName);
else
this.impl.innerHTML = value;
- var addedNodes = snapshotNodeList(this.childNodes);
-
- enqueueMutation(this, 'childList', {
- addedNodes: addedNodes,
- removedNodes: removedNodes
- });
-
- nodesWereRemoved(removedNodes);
- nodesWereAdded(addedNodes);
},
get outerHTML() {
@@ -4226,8 +3651,7 @@
// TODO: Find a better way to share these two with WrapperShadowRoot.
scope.getInnerHTML = getInnerHTML;
scope.setInnerHTML = setInnerHTML
-})(window.ShadowDOMPolyfill);
-
+})(this.ShadowDOMPolyfill);
// Copyright 2013 The Polymer Authors. All rights reserved.
// Use of this source code is goverened by a BSD-style
// license that can be found in the LICENSE file.
@@ -4258,7 +3682,7 @@
document.createElement('canvas'));
scope.wrappers.HTMLCanvasElement = HTMLCanvasElement;
-})(window.ShadowDOMPolyfill);
+})(this.ShadowDOMPolyfill);
// Copyright 2013 The Polymer Authors. All rights reserved.
// Use of this source code is goverened by a BSD-style
@@ -4300,8 +3724,7 @@
registerWrapper(OriginalHTMLContentElement, HTMLContentElement);
scope.wrappers.HTMLContentElement = HTMLContentElement;
-})(window.ShadowDOMPolyfill);
-
+})(this.ShadowDOMPolyfill);
// Copyright 2013 The Polymer Authors. All rights reserved.
// Use of this source code is goverened by a BSD-style
// license that can be found in the LICENSE file.
@@ -4344,7 +3767,7 @@
scope.wrappers.HTMLImageElement = HTMLImageElement;
scope.wrappers.Image = Image;
-})(window.ShadowDOMPolyfill);
+})(this.ShadowDOMPolyfill);
// Copyright 2013 The Polymer Authors. All rights reserved.
// Use of this source code is goverened by a BSD-style
@@ -4371,7 +3794,7 @@
registerWrapper(OriginalHTMLShadowElement, HTMLShadowElement);
scope.wrappers.HTMLShadowElement = HTMLShadowElement;
-})(window.ShadowDOMPolyfill);
+})(this.ShadowDOMPolyfill);
// Copyright 2013 The Polymer Authors. All rights reserved.
// Use of this source code is goverened by a BSD-style
@@ -4383,8 +3806,10 @@
var HTMLElement = scope.wrappers.HTMLElement;
var getInnerHTML = scope.getInnerHTML;
var mixin = scope.mixin;
+ var muteMutationEvents = scope.muteMutationEvents;
var registerWrapper = scope.registerWrapper;
var setInnerHTML = scope.setInnerHTML;
+ var unmuteMutationEvents = scope.unmuteMutationEvents;
var unwrap = scope.unwrap;
var wrap = scope.wrap;
@@ -4413,9 +3838,11 @@
var doc = getTemplateContentsOwner(templateElement.ownerDocument);
var df = unwrap(doc.createDocumentFragment());
var child;
+ muteMutationEvents();
while (child = templateElement.firstChild) {
df.appendChild(child);
}
+ unmuteMutationEvents();
return df;
}
@@ -4452,8 +3879,7 @@
registerWrapper(OriginalHTMLTemplateElement, HTMLTemplateElement);
scope.wrappers.HTMLTemplateElement = HTMLTemplateElement;
-})(window.ShadowDOMPolyfill);
-
+})(this.ShadowDOMPolyfill);
// Copyright 2013 The Polymer Authors. All rights reserved.
// Use of this source code is goverened by a BSD-style
// license that can be found in the LICENSE file.
@@ -4475,7 +3901,7 @@
document.createElement('audio'));
scope.wrappers.HTMLMediaElement = HTMLMediaElement;
-})(window.ShadowDOMPolyfill);
+})(this.ShadowDOMPolyfill);
// Copyright 2013 The Polymer Authors. All rights reserved.
// Use of this source code is goverened by a BSD-style
@@ -4518,7 +3944,7 @@
scope.wrappers.HTMLAudioElement = HTMLAudioElement;
scope.wrappers.Audio = Audio;
-})(window.ShadowDOMPolyfill);
+})(this.ShadowDOMPolyfill);
// Copyright 2013 The Polymer Authors. All rights reserved.
// Use of this source code is goverened by a BSD-style
@@ -4582,7 +4008,7 @@
scope.wrappers.HTMLOptionElement = HTMLOptionElement;
scope.wrappers.Option = Option;
-})(window.ShadowDOMPolyfill);
+})(this.ShadowDOMPolyfill);
// Copyright 2013 The Polymer Authors. All rights reserved.
// Use of this source code is goverened by a BSD-style
@@ -4614,8 +4040,7 @@
HTMLUnknownElement.prototype = Object.create(HTMLElement.prototype);
registerWrapper(OriginalHTMLUnknownElement, HTMLUnknownElement);
scope.wrappers.HTMLUnknownElement = HTMLUnknownElement;
-})(window.ShadowDOMPolyfill);
-
+})(this.ShadowDOMPolyfill);
// Copyright 2013 The Polymer Authors. All rights reserved.
// Use of this source code is goverened by a BSD-style
// license that can be found in the LICENSE file.
@@ -4651,11 +4076,10 @@
}
});
- registerWrapper(OriginalCanvasRenderingContext2D, CanvasRenderingContext2D,
- document.createElement('canvas').getContext('2d'));
+ registerWrapper(OriginalCanvasRenderingContext2D, CanvasRenderingContext2D);
scope.wrappers.CanvasRenderingContext2D = CanvasRenderingContext2D;
-})(window.ShadowDOMPolyfill);
+})(this.ShadowDOMPolyfill);
// Copyright 2013 The Polymer Authors. All rights reserved.
// Use of this source code is goverened by a BSD-style
@@ -4695,111 +4119,10 @@
}
});
- // Blink/WebKit has broken DOM bindings. Usually we would create an instance
- // of the object and pass it into registerWrapper as a "blueprint" but
- // creating WebGL contexts is expensive and might fail so we use a dummy
- // object with dummy instance properties for these broken browsers.
- var instanceProperties = /WebKit/.test(navigator.userAgent) ?
- {drawingBufferHeight: null, drawingBufferWidth: null} : {};
-
- registerWrapper(OriginalWebGLRenderingContext, WebGLRenderingContext,
- instanceProperties);
+ registerWrapper(OriginalWebGLRenderingContext, WebGLRenderingContext);
scope.wrappers.WebGLRenderingContext = WebGLRenderingContext;
-})(window.ShadowDOMPolyfill);
-
-// Copyright 2013 The Polymer Authors. All rights reserved.
-// Use of this source code is goverened by a BSD-style
-// license that can be found in the LICENSE file.
-
-(function(scope) {
- 'use strict';
-
- var registerWrapper = scope.registerWrapper;
- var unwrap = scope.unwrap;
- var unwrapIfNeeded = scope.unwrapIfNeeded;
- var wrap = scope.wrap;
-
- var OriginalRange = window.Range;
-
- function Range(impl) {
- this.impl = impl;
- }
- Range.prototype = {
- get startContainer() {
- return wrap(this.impl.startContainer);
- },
- get endContainer() {
- return wrap(this.impl.endContainer);
- },
- get commonAncestorContainer() {
- return wrap(this.impl.commonAncestorContainer);
- },
- setStart: function(refNode,offset) {
- this.impl.setStart(unwrapIfNeeded(refNode), offset);
- },
- setEnd: function(refNode,offset) {
- this.impl.setEnd(unwrapIfNeeded(refNode), offset);
- },
- setStartBefore: function(refNode) {
- this.impl.setStartBefore(unwrapIfNeeded(refNode));
- },
- setStartAfter: function(refNode) {
- this.impl.setStartAfter(unwrapIfNeeded(refNode));
- },
- setEndBefore: function(refNode) {
- this.impl.setEndBefore(unwrapIfNeeded(refNode));
- },
- setEndAfter: function(refNode) {
- this.impl.setEndAfter(unwrapIfNeeded(refNode));
- },
- selectNode: function(refNode) {
- this.impl.selectNode(unwrapIfNeeded(refNode));
- },
- selectNodeContents: function(refNode) {
- this.impl.selectNodeContents(unwrapIfNeeded(refNode));
- },
- compareBoundaryPoints: function(how, sourceRange) {
- return this.impl.compareBoundaryPoints(how, unwrap(sourceRange));
- },
- extractContents: function() {
- return wrap(this.impl.extractContents());
- },
- cloneContents: function() {
- return wrap(this.impl.cloneContents());
- },
- insertNode: function(node) {
- this.impl.insertNode(unwrapIfNeeded(node));
- },
- surroundContents: function(newParent) {
- this.impl.surroundContents(unwrapIfNeeded(newParent));
- },
- cloneRange: function() {
- return wrap(this.impl.cloneRange());
- },
- isPointInRange: function(node, offset) {
- return this.impl.isPointInRange(unwrapIfNeeded(node), offset);
- },
- comparePoint: function(node, offset) {
- return this.impl.comparePoint(unwrapIfNeeded(node), offset);
- },
- intersectsNode: function(node) {
- return this.impl.intersectsNode(unwrapIfNeeded(node));
- }
- };
-
- // IE9 does not have createContextualFragment.
- if (OriginalRange.prototype.createContextualFragment) {
- Range.prototype.createContextualFragment = function(html) {
- return wrap(this.impl.createContextualFragment(html));
- };
- }
-
- registerWrapper(window.Range, Range, document.createRange());
-
- scope.wrappers.Range = Range;
-
-})(window.ShadowDOMPolyfill);
+})(this.ShadowDOMPolyfill);
// Copyright 2013 The Polymer Authors. All rights reserved.
// Use of this source code is goverened by a BSD-style
@@ -4826,7 +4149,7 @@
scope.wrappers.DocumentFragment = DocumentFragment;
scope.wrappers.Text = Text;
-})(window.ShadowDOMPolyfill);
+})(this.ShadowDOMPolyfill);
// Copyright 2013 The Polymer Authors. All rights reserved.
// Use of this source code is goverened by a BSD-style
@@ -4891,9 +4214,7 @@
});
scope.wrappers.ShadowRoot = ShadowRoot;
-
-})(window.ShadowDOMPolyfill);
-
+})(this.ShadowDOMPolyfill);
// Copyright 2013 The Polymer Authors. All rights reserved.
// Use of this source code is governed by a BSD-style
// license that can be found in the LICENSE file.
@@ -4908,7 +4229,9 @@
var ShadowRoot = scope.wrappers.ShadowRoot;
var assert = scope.assert;
var mixin = scope.mixin;
+ var muteMutationEvents = scope.muteMutationEvents;
var oneOf = scope.oneOf;
+ var unmuteMutationEvents = scope.unmuteMutationEvents;
var unwrap = scope.unwrap;
var wrap = scope.wrap;
@@ -5252,8 +4575,11 @@
this.renderNode(shadowRoot, renderNode, node, false);
}
- if (topMostRenderer)
+ if (topMostRenderer) {
+ //muteMutationEvents();
renderNode.sync();
+ //unmuteMutationEvents();
+ }
this.dirty = false;
},
@@ -5523,8 +4849,8 @@
return getDistributedChildNodes(this);
};
- HTMLShadowElement.prototype.nodeIsInserted_ =
- HTMLContentElement.prototype.nodeIsInserted_ = function() {
+ HTMLShadowElement.prototype.nodeWasAdded_ =
+ HTMLContentElement.prototype.nodeWasAdded_ = function() {
// Invalidate old renderer if any.
this.invalidateShadowRenderer();
@@ -5549,8 +4875,7 @@
remove: remove,
};
-})(window.ShadowDOMPolyfill);
-
+})(this.ShadowDOMPolyfill);
// Copyright 2013 The Polymer Authors. All rights reserved.
// Use of this source code is goverened by a BSD-style
// license that can be found in the LICENSE file.
@@ -5604,7 +4929,7 @@
elementsWithFormProperty.forEach(createWrapperConstructor);
-})(window.ShadowDOMPolyfill);
+})(this.ShadowDOMPolyfill);
// Copyright 2013 The Polymer Authors. All rights reserved.
// Use of this source code is goverened by a BSD-style
@@ -5688,8 +5013,6 @@
doc.adoptNode(oldShadowRoot);
}
- var originalImportNode = document.importNode;
-
mixin(Document.prototype, {
adoptNode: function(node) {
if (node.parentNode)
@@ -5699,17 +5022,6 @@
},
elementFromPoint: function(x, y) {
return elementFromPoint(this, this, x, y);
- },
- importNode: function(node, deep) {
- // We need to manually walk the tree to ensure we do not include rendered
- // shadow trees.
- var clone = wrap(originalImportNode.call(this.impl, unwrap(node), false));
- if (deep) {
- for (var child = node.firstChild; child; child = child.nextSibling) {
- clone.appendChild(this.importNode(child, true));
- }
- }
- return clone;
}
});
@@ -5828,7 +5140,6 @@
window.HTMLDocument || window.Document, // Gecko adds these to HTMLDocument
], [
'adoptNode',
- 'importNode',
'contains',
'createComment',
'createDocumentFragment',
@@ -5910,7 +5221,7 @@
scope.wrappers.DOMImplementation = DOMImplementation;
scope.wrappers.Document = Document;
-})(window.ShadowDOMPolyfill);
+})(this.ShadowDOMPolyfill);
// Copyright 2013 The Polymer Authors. All rights reserved.
// Use of this source code is goverened by a BSD-style
@@ -5960,7 +5271,188 @@
scope.wrappers.Window = Window;
-})(window.ShadowDOMPolyfill);
+})(this.ShadowDOMPolyfill);
+
+// Copyright 2013 The Polymer Authors. All rights reserved.
+// Use of this source code is goverened by a BSD-style
+// license that can be found in the LICENSE file.
+
+(function(scope) {
+ 'use strict';
+
+ var defineGetter = scope.defineGetter;
+ var defineWrapGetter = scope.defineWrapGetter;
+ var registerWrapper = scope.registerWrapper;
+ var unwrapIfNeeded = scope.unwrapIfNeeded;
+ var wrapNodeList = scope.wrapNodeList;
+ var wrappers = scope.wrappers;
+
+ var OriginalMutationObserver = window.MutationObserver ||
+ window.WebKitMutationObserver;
+
+ if (!OriginalMutationObserver)
+ return;
+
+ var OriginalMutationRecord = window.MutationRecord;
+
+ function MutationRecord(impl) {
+ this.impl = impl;
+ }
+
+ MutationRecord.prototype = {
+ get addedNodes() {
+ return wrapNodeList(this.impl.addedNodes);
+ },
+ get removedNodes() {
+ return wrapNodeList(this.impl.removedNodes);
+ }
+ };
+
+ ['target', 'previousSibling', 'nextSibling'].forEach(function(name) {
+ defineWrapGetter(MutationRecord, name);
+ });
+
+ // WebKit/Blink treats these as instance properties so we override
+ [
+ 'type',
+ 'attributeName',
+ 'attributeNamespace',
+ 'oldValue'
+ ].forEach(function(name) {
+ defineGetter(MutationRecord, name, function() {
+ return this.impl[name];
+ });
+ });
+
+ if (OriginalMutationRecord)
+ registerWrapper(OriginalMutationRecord, MutationRecord);
+
+ function wrapRecord(record) {
+ return new MutationRecord(record);
+ }
+
+ function wrapRecords(records) {
+ return records.map(wrapRecord);
+ }
+
+ function MutationObserver(callback) {
+ var self = this;
+ this.impl = new OriginalMutationObserver(function(mutations, observer) {
+ callback.call(self, wrapRecords(mutations), self);
+ });
+ }
+
+ var OriginalNode = window.Node;
+
+ MutationObserver.prototype = {
+ observe: function(target, options) {
+ this.impl.observe(unwrapIfNeeded(target), options);
+ },
+ disconnect: function() {
+ this.impl.disconnect();
+ },
+ takeRecords: function() {
+ return wrapRecords(this.impl.takeRecords());
+ }
+ };
+
+ scope.wrappers.MutationObserver = MutationObserver;
+ scope.wrappers.MutationRecord = MutationRecord;
+
+})(this.ShadowDOMPolyfill);
+
+// Copyright 2013 The Polymer Authors. All rights reserved.
+// Use of this source code is goverened by a BSD-style
+// license that can be found in the LICENSE file.
+
+(function(scope) {
+ 'use strict';
+
+ var registerWrapper = scope.registerWrapper;
+ var unwrap = scope.unwrap;
+ var unwrapIfNeeded = scope.unwrapIfNeeded;
+ var wrap = scope.wrap;
+
+ var OriginalRange = window.Range;
+
+ function Range(impl) {
+ this.impl = impl;
+ }
+ Range.prototype = {
+ get startContainer() {
+ return wrap(this.impl.startContainer);
+ },
+ get endContainer() {
+ return wrap(this.impl.endContainer);
+ },
+ get commonAncestorContainer() {
+ return wrap(this.impl.commonAncestorContainer);
+ },
+ setStart: function(refNode,offset) {
+ this.impl.setStart(unwrapIfNeeded(refNode), offset);
+ },
+ setEnd: function(refNode,offset) {
+ this.impl.setEnd(unwrapIfNeeded(refNode), offset);
+ },
+ setStartBefore: function(refNode) {
+ this.impl.setStartBefore(unwrapIfNeeded(refNode));
+ },
+ setStartAfter: function(refNode) {
+ this.impl.setStartAfter(unwrapIfNeeded(refNode));
+ },
+ setEndBefore: function(refNode) {
+ this.impl.setEndBefore(unwrapIfNeeded(refNode));
+ },
+ setEndAfter: function(refNode) {
+ this.impl.setEndAfter(unwrapIfNeeded(refNode));
+ },
+ selectNode: function(refNode) {
+ this.impl.selectNode(unwrapIfNeeded(refNode));
+ },
+ selectNodeContents: function(refNode) {
+ this.impl.selectNodeContents(unwrapIfNeeded(refNode));
+ },
+ compareBoundaryPoints: function(how, sourceRange) {
+ return this.impl.compareBoundaryPoints(how, unwrap(sourceRange));
+ },
+ extractContents: function() {
+ return wrap(this.impl.extractContents());
+ },
+ cloneContents: function() {
+ return wrap(this.impl.cloneContents());
+ },
+ insertNode: function(node) {
+ this.impl.insertNode(unwrapIfNeeded(node));
+ },
+ surroundContents: function(newParent) {
+ this.impl.surroundContents(unwrapIfNeeded(newParent));
+ },
+ cloneRange: function() {
+ return wrap(this.impl.cloneRange());
+ },
+ isPointInRange: function(node, offset) {
+ return this.impl.isPointInRange(unwrapIfNeeded(node), offset);
+ },
+ comparePoint: function(node, offset) {
+ return this.impl.comparePoint(unwrapIfNeeded(node), offset);
+ },
+ intersectsNode: function(node) {
+ return this.impl.intersectsNode(unwrapIfNeeded(node));
+ }
+ };
+
+ // IE9 does not have createContextualFragment.
+ if (OriginalRange.prototype.createContextualFragment) {
+ Range.prototype.createContextualFragment = function(html) {
+ return wrap(this.impl.createContextualFragment(html));
+ };
+ }
+
+ registerWrapper(window.Range, Range);
+
+ scope.wrappers.Range = Range;
+
+})(this.ShadowDOMPolyfill);
// Copyright 2013 The Polymer Authors. All rights reserved.
// Use of this source code is goverened by a BSD-style
@@ -6062,8 +5554,7 @@
// Export for testing.
scope.knownElements = elements;
-})(window.ShadowDOMPolyfill);
-
+})(this.ShadowDOMPolyfill);
/*
* Copyright 2013 The Polymer Authors. All rights reserved.
* Use of this source code is governed by a BSD-style
@@ -6552,16 +6043,11 @@
return cssText.replace(cssColonHostRe, function(m, p1, p2, p3) {
p1 = polyfillHostNoCombinator;
if (p2) {
- var parts = p2.split(','), r = [];
- for (var i=0, l=parts.length, p; (i<l) && (p=parts[i]); i++) {
- p = p.trim();
- if (p.match(polyfillHost)) {
- r.push(p1 + p.replace(polyfillHost, '') + p3);
- } else {
- r.push(p1 + p + p3 + ', ' + p + ' ' + p1 + p3);
- }
+ if (p2.match(polyfillHost)) {
+ return p1 + p2.replace(polyfillHost, '') + p3;
+ } else {
+ return p1 + p2 + p3 + ', ' + p2 + ' ' + p1 + p3;
}
- return r.join(',');
} else {
return p1 + p3;
}
@@ -6571,7 +6057,7 @@
* Convert ^ and ^^ combinators by replacing with space.
*/
convertCombinators: function(cssText) {
- return cssText.replace(/\^\^/g, ' ').replace(/\^/g, ' ');
+ return cssText.replace('^^', ' ').replace('^', ' ');
},
// change a selector like 'div' to 'name div'
scopeRules: function(cssRules, name, typeExtension) {
@@ -6583,7 +6069,7 @@
cssText += this.propertiesFromRule(rule) + '\n}\n\n';
} else if (rule.media) {
cssText += '@media ' + rule.media.mediaText + ' {\n';
- cssText += this.scopeRules(rule.cssRules, name, typeExtension);
+ cssText += this.scopeRules(rule.cssRules, name);
cssText += '\n}\n\n';
} else if (rule.cssText) {
cssText += rule.cssText + '\n\n';
@@ -6596,9 +6082,8 @@
parts.forEach(function(p) {
p = p.trim();
if (this.selectorNeedsScoping(p, name, typeExtension)) {
- p = (strict && !p.match(polyfillHostNoCombinator)) ?
- this.applyStrictSelectorScope(p, name) :
- this.applySimpleSelectorScope(p, name, typeExtension);
+ p = strict ? this.applyStrictSelectorScope(p, name) :
+ this.applySimpleSelectorScope(p, name, typeExtension);
}
r.push(p);
}, this);
@@ -6646,7 +6131,14 @@
polyfillHost);
},
propertiesFromRule: function(rule) {
- return rule.style.cssText;
+ var properties = rule.style.cssText;
+ // TODO(sorvell): Chrome cssom incorrectly removes quotes from the content
+ // property. (https://code.google.com/p/chromium/issues/detail?id=247231)
+ if (rule.style.content && !rule.style.content.match(/['"]+/)) {
+ properties = 'content: \'' + rule.style.content + '\';\n' +
+ rule.style.cssText.replace(/content:[^;]*;/g, '');
+ }
+ return properties;
}
};
@@ -6660,18 +6152,15 @@
cssPolyfillUnscopedRuleCommentRe = /\/\*\s@polyfill-unscoped-rule([^*]*\*+([^/*][^*]*\*+)*)\//gim,
cssPseudoRe = /::(x-[^\s{,(]*)/gim,
cssPartRe = /::part\(([^)]*)\)/gim,
- // note: :host pre-processed to -shadowcsshost.
- polyfillHost = '-shadowcsshost',
- cssColonHostRe = new RegExp('(' + polyfillHost +
- ')(?:\\((' +
- '(?:\\([^)(]*\\)|[^)(]*)+?' +
- ')\\))?([^,{]*)', 'gim'),
+ // note: :host pre-processed to -host.
+ cssColonHostRe = /(-host)(?:\(([^)]*)\))?([^,{]*)/gim,
selectorReSuffix = '([>\\s~+\[.,{:][\\s\\S]*)?$',
hostRe = /@host/gim,
colonHostRe = /\:host/gim,
+ polyfillHost = '-host',
/* host name without combinator */
- polyfillHostNoCombinator = polyfillHost + '-no-combinator',
- polyfillHostRe = new RegExp(polyfillHost, 'gim');
+ polyfillHostNoCombinator = '-host-no-combinator',
+ polyfillHostRe = /-host/gim;
function stylesToCssText(styles, preserveComments) {
var cssText = '';
@@ -8287,7 +7776,7 @@
$is_bh:true,
$is_HB:true,
$is_Dv:true}]
-$$.eO=[P,{"":"v;wc,nn,lv,Pp",
+$$.bq=[P,{"":"v;wc,nn,lv,Pp",
call$2:function(a,b){return this.nn.call(this.wc,a,b)},
$is_bh:true}]
$$.Y7=[A,{"":"v;wc,nn,lv,Pp",
@@ -8316,7 +7805,7 @@
call$catchAll:function(){return{onError:null,radix:null}},
$is_HB:true,
$is_Dv:true}]
-;init.mangledNames={gB:"length",gCr:"_mangledName",gCt:"paddedLine",gDb:"_cachedDeclarations",gEI:"prefix",gF1:"isolate",gFF:"source",gFJ:"__$cls",gFT:"__$instruction",gFU:"_cachedMethodsMap",gG1:"message",gH8:"_fieldsDescriptor",gHX:"__$displayValue",gHt:"_fieldsMetadata",gKM:"$",gLA:"src",gLy:"_cachedSetters",gM2:"_cachedVariables",gMj:"function",gNI:"instruction",gNl:"script",gO3:"url",gOk:"_cachedMetadata",gP:"value",gPw:"__$isolate",gPy:"__$error",gQG:"app",gQq:"__$trace",gRu:"cls",gT1:"_cachedGetters",gTn:"json",gTx:"_jsConstructorOrInterceptor",gUF:"_cachedTypeVariables",gUy:"_collapsed",gUz:"__$script",gVB:"error_obj",gXB:"_message",gXJ:"lines",gXR:"scripts",gZ6:"locationManager",gZw:"__$code",ga:"a",gai:"displayValue",gb:"b",gb0:"_cachedConstructors",gcC:"hash",geb:"__$json",gfY:"kind",ghO:"__$error_obj",ghm:"__$app",gi0:"__$name",gi2:"isolates",giI:"__$library",gjO:"id",gjd:"_cachedMethods",gkc:"error",gkf:"_count",gl7:"iconClass",glD:"currentHashUri",gle:"_metadata",glw:"requestManager",gn2:"responses",gnI:"isolateManager",gnz:"_owner",goc:"name",gpz:"_jsConstructorCache",gqN:"_superclass",gql:"__$function",gqm:"_cachedSuperinterfaces",gt0:"field",gtB:"_cachedFields",gtD:"library",gtN:"trace",gtT:"code",guA:"_cachedMembers",gvH:"index",gvX:"__$source",gvt:"__$field",gxj:"collapsed",gzd:"currentHash",gzh:"__$iconClass"};init.mangledGlobalNames={DI:"_closeIconClass",Vl:"_openIconClass"};(function (reflectionData) {
+;init.mangledNames={gB:"length",gDb:"_cachedDeclarations",gEI:"prefix",gF1:"isolate",gFF:"source",gFJ:"__$cls",gFT:"__$instruction",gFU:"_cachedMethodsMap",gG1:"message",gH8:"_fieldsDescriptor",gHt:"_fieldsMetadata",gKM:"$",gLA:"src",gLf:"__$field",gLy:"_cachedSetters",gM2:"_cachedVariables",gMj:"function",gNI:"instruction",gNl:"script",gO3:"url",gOk:"_cachedMetadata",gP:"value",gP2:"_collapsed",gPw:"__$isolate",gPy:"__$error",gQG:"app",gRu:"cls",gT1:"_cachedGetters",gTn:"json",gTx:"_jsConstructorOrInterceptor",gUF:"_cachedTypeVariables",gUz:"__$script",gV4:"__$trace",gVA:"__$displayValue",gVB:"error_obj",gWL:"_mangledName",gXB:"_message",gXJ:"lines",gXR:"scripts",gXf:"__$iconClass",gXh:"__$instance",gZ6:"locationManager",gZw:"__$code",ga:"a",gai:"displayValue",gb:"b",gb0:"_cachedConstructors",gcC:"hash",geV:"paddedLine",geb:"__$json",gfY:"kind",ghO:"__$error_obj",ghf:"instance",gi0:"__$name",gi2:"isolates",giI:"__$library",giK:"__$instance",gjO:"id",gjd:"_cachedMethods",gk5:"__$devtools",gkc:"error",gkf:"_count",gl7:"iconClass",glD:"currentHashUri",gle:"_metadata",glw:"requestManager",gn2:"responses",gnI:"isolateManager",gnz:"_owner",goc:"name",gpz:"_jsConstructorCache",gqN:"_superclass",gql:"__$function",gqm:"_cachedSuperinterfaces",gt0:"field",gtB:"_cachedFields",gtD:"library",gtH:"__$app",gtN:"trace",gtT:"code",guA:"_cachedMembers",gvH:"index",gvX:"__$source",gvt:"__$field",gxj:"collapsed",gzd:"currentHash",gzj:"devtools"};init.mangledGlobalNames={DI:"_closeIconClass",Vl:"_openIconClass"};(function (reflectionData) {
function map(x){x={x:x};delete x.x;return x}
if (!init.libraries) init.libraries = [];
if (!init.mangledNames) init.mangledNames = map();
@@ -8426,32 +7915,23 @@
if(typeof z!=="number")throw z.g()
return J.UQ(y,z+2)[b]},Gv:{"":"a;",
n:function(a,b){return a===b},
-"+==:1:0":0,
giO:function(a){return H.eQ(a)},
-"+hashCode":0,
bu:function(a){return H.a5(a)},
-"+toString:0:0":0,
T:function(a,b){throw H.b(P.lr(a,b.gWa(),b.gnd(),b.gVm(),null))},
"+noSuchMethod:1:0":0,
gbx:function(a){return new H.cu(H.dJ(a),null)},
$isGv:true,
"%":"DOMImplementation|SVGAnimatedEnumeration|SVGAnimatedNumberList|SVGAnimatedString"},kn:{"":"bool/Gv;",
bu:function(a){return String(a)},
-"+toString:0:0":0,
giO:function(a){return a?519018:218159},
-"+hashCode":0,
gbx:function(a){return C.HL},
$isbool:true},PE:{"":"Gv;",
n:function(a,b){return null==b},
-"+==:1:0":0,
bu:function(a){return"null"},
-"+toString:0:0":0,
giO:function(a){return 0},
-"+hashCode":0,
gbx:function(a){return C.GX}},QI:{"":"Gv;",
giO:function(a){return 0},
-"+hashCode":0,
-gbx:function(a){return C.CS}},Tm:{"":"QI;"},is:{"":"QI;"},Q:{"":"List/Gv;",
+gbx:function(a){return C.CS}},FP:{"":"QI;"},is:{"":"QI;"},Q:{"":"List/Gv;",
h:function(a,b){if(!!a.fixed$length)H.vh(P.f("add"))
a.push(b)},
W4:function(a,b){if(b<0||b>=a.length)throw H.b(new P.bJ("value "+b))
@@ -8523,14 +8003,12 @@
gor:function(a){return a.length!==0},
"+isNotEmpty":0,
bu:function(a){return H.mx(a,"[","]")},
-"+toString:0:0":0,
tt:function(a,b){return P.F(a,b,H.W8(a,"Q",0))},
br:function(a){return this.tt(a,!0)},
gA:function(a){var z=new H.a7(a,a.length,0,null)
H.VM(z,[H.W8(a,"Q",0)])
return z},
giO:function(a){return H.eQ(a)},
-"+hashCode":0,
gB:function(a){return a.length},
"+length":0,
sB:function(a,b){if(typeof b!=="number"||Math.floor(b)!==b)throw H.b(new P.AT(b))
@@ -8580,9 +8058,7 @@
return a.toString(b)},
bu:function(a){if(a===0&&1/a<0)return"-0.0"
else return""+a},
-"+toString:0:0":0,
giO:function(a){return a&0x1FFFFFFF},
-"+hashCode":0,
J:function(a){return-a},
g:function(a,b){if(typeof b!=="number")throw H.b(new P.AT(b))
return a+b},
@@ -8705,14 +8181,12 @@
else z=a<b?-1:1
return z},
bu:function(a){return a},
-"+toString:0:0":0,
giO:function(a){var z,y,x
for(z=a.length,y=0,x=0;x<z;++x){y=536870911&y+a.charCodeAt(x)
y=536870911&y+((524287&y)<<10>>>0)
y^=y>>6}y=536870911&y+((67108863&y)<<3>>>0)
y^=y>>11
return 536870911&y+((16383&y)<<15>>>0)},
-"+hashCode":0,
gbx:function(a){return C.Db},
gB:function(a){return a.length},
"+length":0,
@@ -8725,7 +8199,7 @@
default:return!1}switch(a){case 5760:case 6158:case 8192:case 8193:case 8194:case 8195:case 8196:case 8197:case 8198:case 8199:case 8200:case 8201:case 8202:case 8232:case 8233:case 8239:case 8287:case 12288:case 65279:return!0
default:return!1}}}}}],["_isolate_helper","dart:_isolate_helper",,H,{zd:function(a,b){var z=a.vV(b)
$globalState.Xz.bL()
-return z},Vg:function(a){var z
+return z},SG:function(a){var z
$globalState=H.SK(a)
if($globalState.EF===!0)return
z=H.CO()
@@ -8814,7 +8288,7 @@
return z.YQ(a)}else{z=new H.NO(new H.X1())
z.mR=new H.aJ(null)
return z.YQ(a)}},Hh:function(a){if($globalState.ji===!0)return new H.II(null).QS(a)
-else return a},VO:function(a){return a==null||typeof a==="string"||typeof a==="number"||typeof a==="boolean"},kV:function(a){return a==null||typeof a==="string"||typeof a==="number"||typeof a==="boolean"},PK:{"":"Tp;a",
+else return a},vM:function(a){return a==null||typeof a==="string"||typeof a==="number"||typeof a==="boolean"},kV:function(a){return a==null||typeof a==="string"||typeof a==="number"||typeof a==="boolean"},PK:{"":"Tp;a",
call$0:function(){this.a.call$1([])},
"+call:0:0":0,
$isEH:true,
@@ -8901,8 +8375,8 @@
P.rT(C.RT,this)},
"+call:0:0":0,
$isEH:true,
-$is_X0:true},IY:{"":"a;F1*,xh,G1*",
-VU:function(){this.F1.vV(this.xh)},
+$is_X0:true},IY:{"":"a;F1*,i3,G1*",
+VU:function(){this.F1.vV(this.i3)},
$isIY:true},JH:{"":"a;"},jl:{"":"Tp;a,b,c,d,e",
call$0:function(){H.Kc(this.a,this.b,this.c,this.d,this.e)},
"+call:0:0":0,
@@ -8913,9 +8387,7 @@
if(b==null)return!1
z=J.x(b)
return typeof b==="object"&&b!==null&&!!z.$isJM&&J.xC(this.JE,b.JE)},
-"+==:1:0":0,
giO:function(a){return this.JE.gng()},
-"+hashCode":0,
$isJM:true,
$isbC:true},Ua:{"":"Tp;b,c",
call$0:function(){var z,y,x,w,v,u,t
@@ -8951,14 +8423,12 @@
if(b==null)return!1
z=J.x(b)
return typeof b==="object"&&b!==null&&!!z.$isns&&J.xC(this.Ws,b.Ws)&&J.xC(this.tv,b.tv)&&J.xC(this.bv,b.bv)},
-"+==:1:0":0,
giO:function(a){var z,y,x
-z=J.c1(this.Ws,16)
-y=J.c1(this.tv,8)
+z=J.Eh(this.Ws,16)
+y=J.Eh(this.tv,8)
x=this.bv
if(typeof x!=="number")throw H.s(x)
return(z^y^x)>>>0},
-"+hashCode":0,
$isns:true,
$isbC:true},wd:{"":"Tp;a,b",
call$0:function(){var z,y,x,w
@@ -9049,7 +8519,7 @@
Hn:function(a){},
F4:function(){}},HU:{"":"a;",
YQ:function(a){var z,y
-if(H.VO(a))return this.Pq(a)
+if(H.vM(a))return this.Pq(a)
y=this.mR
y.Hn(y)
z=null
@@ -9309,11 +8779,11 @@
if(q==null){if(c==null)z=[]
else{z=c.gvc(c)
z=P.F(z,!0,H.W8(z,"mW",0))}return J.jf(a,new H.LI(C.Ka,r,0,x,z,null))}return q.apply(a,x)},pL:function(a){if(a=="String")return C.Kn
-if(a=="int")return C.wq
+if(a=="int")return C.c1
if(a=="double")return C.yX
if(a=="num")return C.oD
if(a=="bool")return C.Fm
-if(a=="List")return C.l0
+if(a=="List")return C.E3
return init.allClasses[a]},Pq:function(){var z={x:0}
delete z.x
return z},s:function(a){throw H.b(P.u(a))},e:function(a,b){if(a==null)J.q8(a)
@@ -9594,7 +9064,6 @@
gor:function(a){return!J.xC(this.gB(this),0)},
"+isNotEmpty":0,
bu:function(a){return P.vW(this)},
-"+toString:0:0":0,
q3:function(){throw H.b(P.f("Cannot modify unmodifiable Map"))},
u:function(a,b,c){return this.q3()},
"+[]=:2:0":0,
@@ -9783,7 +9252,6 @@
bu:function(a){var z=this.Sp
if(z==null)return"NullError: "+H.d(this.Zf)
return"NullError: Cannot call \""+H.d(z)+"\" on null"},
-"+toString:0:0":0,
$ismp:true,
$isGe:true},az:{"":"Ge;Zf,Sp,lv",
bu:function(a){var z,y
@@ -9792,7 +9260,6 @@
y=this.lv
if(y==null)return"NoSuchMethodError: Cannot call \""+z+"\" ("+H.d(this.Zf)+")"
return"NoSuchMethodError: Cannot call \""+z+"\" on \""+y+"\" ("+H.d(this.Zf)+")"},
-"+toString:0:0":0,
$ismp:true,
$isGe:true,
static:{T3:function(a,b){var z,y
@@ -9801,8 +9268,7 @@
z=z?null:b.receiver
return new H.az(a,y,z)}}},vV:{"":"Ge;Zf",
bu:function(a){var z=this.Zf
-return C.xB.gl0(z)?"Error":"Error: "+z},
-"+toString:0:0":0},Hk:{"":"Tp;a",
+return C.xB.gl0(z)?"Error":"Error: "+z}},Hk:{"":"Tp;a",
call$1:function(a){var z=J.x(a)
if(typeof a==="object"&&a!==null&&!!z.$isGe)if(a.$thrownJsError==null)a.$thrownJsError=this.a
return a},
@@ -9817,8 +9283,7 @@
y=typeof z==="object"?z.stack:null
z=y==null?"":y
this.bQ=z
-return z},
-"+toString:0:0":0},dr:{"":"Tp;a",
+return z}},dr:{"":"Tp;a",
call$0:function(){return this.a.call$0()},
"+call:0:0":0,
$isEH:true,
@@ -9840,7 +9305,6 @@
$isEH:true,
$is_X0:true},Tp:{"":"a;",
bu:function(a){return"Closure"},
-"+toString:0:0":0,
$isTp:true,
$isEH:true},v:{"":"Tp;wc<,nn<,lv,Pp>",
n:function(a,b){var z
@@ -9849,21 +9313,17 @@
z=J.x(b)
if(typeof b!=="object"||b===null||!z.$isv)return!1
return this.wc===b.wc&&this.nn===b.nn&&this.lv===b.lv},
-"+==:1:0":0,
giO:function(a){var z,y
z=this.lv
if(z==null)y=H.eQ(this.wc)
else y=typeof z!=="object"?J.v1(z):H.eQ(z)
return(y^H.eQ(this.nn))>>>0},
-"+hashCode":0,
$isv:true},Z3:{"":"a;Jy"},D2:{"":"a;Jy"},GT:{"":"a;oc>"},Pe:{"":"Ge;G1>",
bu:function(a){return this.G1},
-"+toString:0:0":0,
$isGe:true,
static:{aq:function(a,b){return new H.Pe("CastError: Casting value of type "+a+" to incompatible type "+H.d(b))}}},Eq:{"":"Ge;G1>",
bu:function(a){return"RuntimeError: "+this.G1},
-"+toString:0:0":0,
-static:{Ef:function(a){return new H.Eq(a)}}},cu:{"":"a;IE<,rE",
+static:{Pa:function(a){return new H.Eq(a)}}},cu:{"":"a;IE<,rE",
bu:function(a){var z,y,x
z=this.rE
if(z!=null)return z
@@ -9872,14 +9332,11 @@
y=x==null?y:x
this.rE=y
return y},
-"+toString:0:0":0,
giO:function(a){return J.v1(this.IE)},
-"+hashCode":0,
n:function(a,b){var z
if(b==null)return!1
z=J.x(b)
return typeof b==="object"&&b!==null&&!!z.$iscu&&J.xC(this.IE,b.IE)},
-"+==:1:0":0,
$iscu:true,
$isuq:true},Lm:{"":"a;h7<,oc>,kU>"},dC:{"":"Tp;a",
call$1:function(a){return this.a(a)},
@@ -9942,6 +9399,7 @@
return this.Nd(b,c)},
R4:function(a,b){return this.wL(a,b,0)},
$isVR:true,
+$iscT:true,
static:{v4:function(a,b,c,d){var z,y,x,w,v
z=b?"m":""
y=c?"":"i"
@@ -9980,14 +9438,14 @@
t:function(a,b){if(!J.xC(b,0))H.vh(P.N(b))
return this.zO},
"+[]:1:0":0,
-$isOd:true}}],["app_bootstrap","index.html_bootstrap.dart",,E,{E2:function(){$.x2=["package:observatory/src/observatory_elements/observatory_element.dart","package:observatory/src/observatory_elements/error_view.dart","package:observatory/src/observatory_elements/class_view.dart","package:observatory/src/observatory_elements/disassembly_entry.dart","package:observatory/src/observatory_elements/code_view.dart","package:observatory/src/observatory_elements/collapsible_content.dart","package:observatory/src/observatory_elements/field_view.dart","package:observatory/src/observatory_elements/function_view.dart","package:observatory/src/observatory_elements/isolate_summary.dart","package:observatory/src/observatory_elements/isolate_list.dart","package:observatory/src/observatory_elements/json_view.dart","package:observatory/src/observatory_elements/library_view.dart","package:observatory/src/observatory_elements/source_view.dart","package:observatory/src/observatory_elements/script_view.dart","package:observatory/src/observatory_elements/stack_trace.dart","package:observatory/src/observatory_elements/message_viewer.dart","package:observatory/src/observatory_elements/navigation_bar.dart","package:observatory/src/observatory_elements/response_viewer.dart","package:observatory/src/observatory_elements/observatory_application.dart","index.html.0.dart"]
+$isOd:true}}],["app_bootstrap","index.html_bootstrap.dart",,E,{E2:function(){$.x2=["package:observatory/src/observatory_elements/observatory_element.dart","package:observatory/src/observatory_elements/error_view.dart","package:observatory/src/observatory_elements/field_ref.dart","package:observatory/src/observatory_elements/instance_ref.dart","package:observatory/src/observatory_elements/class_view.dart","package:observatory/src/observatory_elements/disassembly_entry.dart","package:observatory/src/observatory_elements/code_view.dart","package:observatory/src/observatory_elements/collapsible_content.dart","package:observatory/src/observatory_elements/field_view.dart","package:observatory/src/observatory_elements/function_view.dart","package:observatory/src/observatory_elements/isolate_summary.dart","package:observatory/src/observatory_elements/isolate_list.dart","package:observatory/src/observatory_elements/instance_view.dart","package:observatory/src/observatory_elements/json_view.dart","package:observatory/src/observatory_elements/library_view.dart","package:observatory/src/observatory_elements/source_view.dart","package:observatory/src/observatory_elements/script_view.dart","package:observatory/src/observatory_elements/stack_trace.dart","package:observatory/src/observatory_elements/message_viewer.dart","package:observatory/src/observatory_elements/navigation_bar.dart","package:observatory/src/observatory_elements/response_viewer.dart","package:observatory/src/observatory_elements/observatory_application.dart","index.html.0.dart"]
$.uP=!1
-A.Ok()}},1],["class_view_element","package:observatory/src/observatory_elements/class_view.dart",,Z,{aC:{"":["Vf;FJ%-,VJ,Ai,hm-,VJ,Ai,VJ,Ai,ZI,uN,z3,TQ,Vk,Ye,mT,KM-",null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,function(){return[C.nJ]}],
+A.Ok()}},1],["class_view_element","package:observatory/src/observatory_elements/class_view.dart",,Z,{aC:{"":["Vf;FJ%-,VJ,Ai,tH-,VJ,Ai,VJ,Ai,ZI,uN,z3,TQ,Vk,Ye,mT,KM-",null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,function(){return[C.nJ]}],
gRu:function(a){return a.FJ
-"34,35,36"},
+"37,38,39"},
"+cls":1,
-sRu:function(a,b){a.FJ=this.ct(a,C.XA,a.FJ,b)
-"37,28,34,35"},
+sRu:function(a,b){a.FJ=this.pD(a,C.XA,a.FJ,b)
+"40,31,37,38"},
"+cls=":1,
"@":function(){return[C.aQ]},
static:{zg:function(a){var z,y,x,w,v
@@ -10003,12 +9461,12 @@
C.kk.ZL(a)
C.kk.FH(a)
return a
-"9"},"+new ClassViewElement$created:0:0":1}},"+ClassViewElement": [38],Vf:{"":"uL+Pi;",$isd3:true}}],["code_view_element","package:observatory/src/observatory_elements/code_view.dart",,F,{Be:{"":["tu;Zw%-,VJ,Ai,hm-,VJ,Ai,VJ,Ai,ZI,uN,z3,TQ,Vk,Ye,mT,KM-",null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,function(){return[C.nJ]}],
+"9"},"+new ClassViewElement$created:0:0":1}},"+ClassViewElement": [41],Vf:{"":"uL+Pi;",$isd3:true}}],["code_view_element","package:observatory/src/observatory_elements/code_view.dart",,F,{Be:{"":["tu;Zw%-,VJ,Ai,tH-,VJ,Ai,VJ,Ai,ZI,uN,z3,TQ,Vk,Ye,mT,KM-",null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,function(){return[C.nJ]}],
gtT:function(a){return a.Zw
-"34,35,36"},
+"37,38,39"},
"+code":1,
-stT:function(a,b){a.Zw=this.ct(a,C.b1,a.Zw,b)
-"37,28,34,35"},
+stT:function(a,b){a.Zw=this.pD(a,C.b1,a.Zw,b)
+"40,31,37,38"},
"+code=":1,
grK:function(a){var z=a.Zw
if(z!=null&&J.UQ(z,"is_optimized")!=null)return"panel panel-success"
@@ -10032,41 +9490,41 @@
C.YD.ZL(a)
C.YD.FH(a)
return a
-"10"},"+new CodeViewElement$created:0:0":1}},"+CodeViewElement": [39],tu:{"":"uL+Pi;",$isd3:true}}],["collapsible_content_element","package:observatory/src/observatory_elements/collapsible_content.dart",,R,{i6:{"":["Vc;zh%-,HX%-,Uy%-,VJ,Ai,hm-,VJ,Ai,VJ,Ai,ZI,uN,z3,TQ,Vk,Ye,mT,KM-",null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,function(){return[C.nJ]}],
-gl7:function(a){return a.zh
-"8,35,40"},
+"10"},"+new CodeViewElement$created:0:0":1}},"+CodeViewElement": [42],tu:{"":"uL+Pi;",$isd3:true}}],["collapsible_content_element","package:observatory/src/observatory_elements/collapsible_content.dart",,R,{i6:{"":["Vc;Xf%-,VA%-,P2%-,VJ,Ai,tH-,VJ,Ai,VJ,Ai,ZI,uN,z3,TQ,Vk,Ye,mT,KM-",null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,function(){return[C.nJ]}],
+gl7:function(a){return a.Xf
+"8,38,43"},
"+iconClass":1,
-sl7:function(a,b){a.zh=this.ct(a,C.Di,a.zh,b)
-"37,28,8,35"},
+sl7:function(a,b){a.Xf=this.pD(a,C.Di,a.Xf,b)
+"40,31,8,38"},
"+iconClass=":1,
-gai:function(a){return a.HX
-"8,35,40"},
+gai:function(a){return a.VA
+"8,38,43"},
"+displayValue":1,
-sai:function(a,b){a.HX=this.ct(a,C.Jw,a.HX,b)
-"37,28,8,35"},
+sai:function(a,b){a.VA=this.pD(a,C.Jw,a.VA,b)
+"40,31,8,38"},
"+displayValue=":1,
-gxj:function(a){return a.Uy
-"41"},
+gxj:function(a){return a.P2
+"44"},
"+collapsed":1,
-sxj:function(a,b){a.Uy=b
-this.SS(a)
-"37,42,41"},
+sxj:function(a,b){a.P2=b
+this.dR(a)
+"40,45,44"},
"+collapsed=":1,
i4:function(a){Z.uL.prototype.i4.call(this,a)
-this.SS(a)
-"37"},
+this.dR(a)
+"40"},
"+enteredView:0:0":1,
-rS:function(a,b,c,d){a.Uy=a.Uy!==!0
-this.SS(a)
-this.SS(a)
-"37,43,44,45,37,46,47"},
+rS:function(a,b,c,d){a.P2=a.P2!==!0
+this.dR(a)
+this.dR(a)
+"40,46,47,48,40,49,50"},
"+toggleDisplay:3:0":1,
-SS:function(a){var z,y
-z=a.Uy
-y=a.zh
-if(z===!0){a.zh=this.ct(a,C.Di,y,"glyphicon glyphicon-chevron-down")
-a.HX=this.ct(a,C.Jw,a.HX,"none")}else{a.zh=this.ct(a,C.Di,y,"glyphicon glyphicon-chevron-up")
-a.HX=this.ct(a,C.Jw,a.HX,"block")}"37"},
+dR:function(a){var z,y
+z=a.P2
+y=a.Xf
+if(z===!0){a.Xf=this.pD(a,C.Di,y,"glyphicon glyphicon-chevron-down")
+a.VA=this.pD(a,C.Jw,a.VA,"none")}else{a.Xf=this.pD(a,C.Di,y,"glyphicon glyphicon-chevron-up")
+a.VA=this.pD(a,C.Jw,a.VA,"block")}"40"},
"+_refresh:0:0":1,
"@":function(){return[C.Gu]},
static:{"":"Vl<-,DI<-",IT:function(a){var z,y,x,w,v
@@ -10076,16 +9534,16 @@
w=W.cv
v=new V.br(P.Py(null,null,null,x,w),null,null)
H.VM(v,[x,w])
-a.zh="glyphicon glyphicon-chevron-down"
-a.HX="none"
-a.Uy=!0
+a.Xf="glyphicon glyphicon-chevron-down"
+a.VA="none"
+a.P2=!0
a.Ye=z
a.mT=y
a.KM=v
C.j8.ZL(a)
C.j8.FH(a)
return a
-"11"},"+new CollapsibleContentElement$created:0:0":1}},"+CollapsibleContentElement": [48],Vc:{"":"uL+Pi;",$isd3:true}}],["custom_element.polyfill","package:custom_element/polyfill.dart",,B,{G9:function(){if($.LX()==null)return!0
+"11"},"+new CollapsibleContentElement$created:0:0":1}},"+CollapsibleContentElement": [51],Vc:{"":"uL+Pi;",$isd3:true}}],["custom_element.polyfill","package:custom_element/polyfill.dart",,B,{G9:function(){if($.LX()==null)return!0
var z=J.UQ($.LX(),"CustomElements")
if(z==null)return"register" in document
return J.xC(J.UQ(z,"ready"),!0)},zO:{"":"Tp;",
@@ -10347,13 +9805,13 @@
for(var z=this.RX;!this.IO.G();){this.mD=null
if(z.G()){this.IO=null
this.IO=J.GP(this.ei(z.gl()))}else return!1}this.mD=this.IO.gl()
-return!0}},vZ:{"":"mW;Kw,xZ",
+return!0}},AM:{"":"mW;Kw,xZ",
eR:function(a,b){if(b<0)throw H.b(new P.bJ("value "+b))
-return H.ke(this.Kw,this.xZ+b,H.W8(this,"vZ",0))},
+return H.ke(this.Kw,this.xZ+b,H.W8(this,"AM",0))},
gA:function(a){var z=this.Kw
z=z.gA(z)
z=new H.U1(z,this.xZ)
-H.VM(z,[H.W8(this,"vZ",0)])
+H.VM(z,[H.W8(this,"AM",0)])
return z},
q1:function(a,b,c){if(this.xZ<0)throw H.b(P.C3(this.xZ))},
$asmW:null,
@@ -10363,17 +9821,17 @@
y=new H.d5(a,b)
H.VM(y,[z])
y.q1(a,b,z)
-return y}return H.bk(a,b,c)},bk:function(a,b,c){var z=new H.vZ(a,b)
+return y}return H.bk(a,b,c)},bk:function(a,b,c){var z=new H.AM(a,b)
H.VM(z,[c])
z.q1(a,b,c)
-return z}}},d5:{"":"vZ;Kw,xZ",
+return z}}},d5:{"":"AM;Kw,xZ",
gB:function(a){var z,y
z=this.Kw
y=J.xH(z.gB(z),this.xZ)
if(J.J5(y,0))return y
return 0},
"+length":0,
-$asvZ:null,
+$asAM:null,
$ascX:null,
$isqC:true},U1:{"":"eL;RX,xZ",
G:function(){var z,y
@@ -10414,11 +9872,8 @@
if(b==null)return!1
z=J.x(b)
return typeof b==="object"&&b!==null&&!!z.$isGD&&J.xC(this.hr,b.hr)},
-"+==:1:0":0,
giO:function(a){return 536870911&664597*J.v1(this.hr)},
-"+hashCode":0,
bu:function(a){return"Symbol(\""+H.d(this.hr)+"\")"},
-"+toString:0:0":0,
$isGD:true,
$iswv:true,
static:{"":"zP",le:function(a){var z=J.U6(a)
@@ -10571,15 +10026,14 @@
$isEH:true,
$is_X0:true},jU:{"":"a;",
bu:function(a){return this.gOO()},
-"+toString:0:0":0,
IB:function(a){throw H.b(P.SY(null))},
Hy:function(a,b){throw H.b(P.SY(null))},
-$isej:true},Lj:{"":"jU;MA",
+$isQF:true},Lj:{"":"jU;MA",
gOO:function(){return"Isolate"},
gcZ:function(){var z=$.At().gvU().nb
z=z.gUQ(z)
return z.XG(z,new H.mb())},
-$isej:true},mb:{"":"Tp;",
+$isQF:true},mb:{"":"Tp;",
call$1:function(a){return a.grv()},
"+call:1:0":0,
$isEH:true,
@@ -10588,25 +10042,22 @@
gvd:function(){return H.fb(this.gh7(),this.gIf())},
gkw:function(){return J.co(J.Z0(this.gIf()),"_")},
bu:function(a){return this.gOO()+" on '"+H.d(J.Z0(this.gIf()))+"'"},
-"+toString:0:0":0,
-gEO:function(){throw H.b(H.Ef("Should not call _methods"))},
-qj:function(a,b){throw H.b(H.Ef("Should not call _invoke"))},
+gEO:function(){throw H.b(H.Pa("Should not call _methods"))},
+qj:function(a,b){throw H.b(H.Pa("Should not call _invoke"))},
gmW:function(a){return H.vh(P.SY(null))},
$isNL:true,
-$isej:true},cw:{"":"EE;h7<,xW,LQ,If",
+$isQF:true},cw:{"":"EE;h7<,xW,LQ,If",
n:function(a,b){var z
if(b==null)return!1
z=J.x(b)
return typeof b==="object"&&b!==null&&!!z.$iscw&&J.xC(this.If,b.If)&&J.xC(this.h7,b.h7)},
-"+==:1:0":0,
giO:function(a){return(1073741823&J.v1(C.Gp.IE)^17*J.v1(this.If)^19*J.v1(this.h7))>>>0},
-"+hashCode":0,
gOO:function(){return"TypeVariableMirror"},
$iscw:true,
$isFw:true,
$isL9u:true,
$isNL:true,
-$isej:true},EE:{"":"am;If",
+$isQF:true},EE:{"":"am;If",
gOO:function(){return"TypeMirror"},
gh7:function(){return},
gc9:function(){return H.vh(P.SY(null))},
@@ -10616,7 +10067,7 @@
gJi:function(){return this},
$isL9u:true,
$isNL:true,
-$isej:true},Uz:{"":"uh;FP<,aP,wP,le,LB,rv<,ae<,SD,tB,P8,mX,T1,Ly,M2,uA,Db,Ok,If",
+$isQF:true},Uz:{"":"uh;FP<,aP,wP,le,LB,rv<,ae<,SD,tB,P8,mX,T1,Ly,M2,uA,Db,Ok,If",
gOO:function(){return"LibraryMirror"},
gvd:function(){return this.If},
gEO:function(){return this.gm8()},
@@ -10660,7 +10111,7 @@
if(typeof y==="object"&&y!==null&&!!z.$isZk)if(!("$reflectable" in y.dl))H.Hz(J.Z0(a))
return H.vn(y.qj(b,c))},
"+invoke:3:0":0,
-"*invoke":[37],
+"*invoke":[40],
CI:function(a,b){return this.F2(a,b,null)},
"+invoke:2:0":0,
Z0:function(a){return $[a]},
@@ -10689,7 +10140,7 @@
y.push(p)
p.nz=this}++v}this.SD=y
return y},
-gTH:function(){var z,y
+gKn:function(){var z,y
z=this.tB
if(z!=null)return z
y=[]
@@ -10706,7 +10157,7 @@
H.VM(z,[P.wv,P.RS])
this.mX=z
return z},
-gE4:function(){var z=this.T1
+gII:function(){var z=this.T1
if(z!=null)return z
z=new H.Gj(P.L5(null,null,null,null,null))
H.VM(z,[P.wv,P.RS])
@@ -10722,7 +10173,7 @@
z=this.M2
if(z!=null)return z
y=P.L5(null,null,null,null,null)
-for(z=this.gTH(),z.toString,x=new H.a7(z,z.length,0,null),H.VM(x,[H.W8(z,"Q",0)]);x.G();){w=x.mD
+for(z=this.gKn(),z.toString,x=new H.a7(z,z.length,0,null),H.VM(x,[H.W8(z,"Q",0)]);x.G();){w=x.mD
y.u(y,w.gIf(),w)}z=new H.Gj(y)
H.VM(z,[P.wv,P.RY])
this.M2=z
@@ -10736,14 +10187,14 @@
z=new H.Kv(y)
x=this.gmu().nb
x.aN(x,z)
-x=this.gE4().nb
+x=this.gII().nb
x.aN(x,z)
x=this.gF8().nb
x.aN(x,z)
x=this.gZ3().nb
x.aN(x,z)
z=new H.Gj(y)
-H.VM(z,[P.wv,P.ej])
+H.VM(z,[P.wv,P.QF])
this.uA=z
return z},
"+members":0,
@@ -10766,8 +10217,8 @@
return z},
gh7:function(){return},
$isD4:true,
-$isej:true,
-$isNL:true},uh:{"":"am+M2;",$isej:true},Kv:{"":"Tp;a",
+$isQF:true,
+$isNL:true},uh:{"":"am+M2;",$isQF:true},Kv:{"":"Tp;a",
call$2:function(a,b){var z=this.a
z.u(z,a,b)},
"+call:2:0":0,
@@ -10794,12 +10245,13 @@
gvd:function(){return this.gIf()},
glc:function(a){return J.GK(this.XW)},
"+members":0,
+gtx:function(){return this.XW.gtx()},
gZ3:function(){return this.XW.gZ3()},
gYK:function(){return this.XW.gYK()},
"+declarations":0,
F2:function(a,b,c){throw H.b(P.lr(this,a,b,c,null))},
"+invoke:3:0":0,
-"*invoke":[37],
+"*invoke":[40],
CI:function(a,b){return this.F2(a,b,null)},
"+invoke:2:0":0,
rN:function(a){throw H.b(P.lr(this,a,null,null,null))},
@@ -10812,16 +10264,16 @@
gNy:function(){throw H.b(P.SY(null))},
gw8:function(){return C.hU},
$isMs:true,
-$isej:true,
+$isQF:true,
$isL9u:true,
-$isNL:true},y1:{"":"EE+M2;",$isej:true},M2:{"":"a;",$isej:true},iu:{"":"M2;Ax<",
+$isNL:true},y1:{"":"EE+M2;",$isQF:true},M2:{"":"a;",$isQF:true},iu:{"":"M2;Ax<",
gr9:function(a){return H.jO(J.bB(this.Ax).IE)},
F2:function(a,b,c){var z,y
z=J.Z0(a)
y=z+":"+b.length+":0"
return this.tu(a,0,y,b)},
"+invoke:3:0":0,
-"*invoke":[37],
+"*invoke":[40],
CI:function(a,b){return this.F2(a,b,null)},
"+invoke:2:0":0,
tu:function(a,b,c,d){var z,y,x,w,v,u,t,s
@@ -10853,14 +10305,11 @@
y=z==null?y==null:z===y
z=y}else z=!1
return z},
-"+==:1:0":0,
giO:function(a){return(H.CU(this.Ax)^909522486)>>>0},
-"+hashCode":0,
bu:function(a){return"InstanceMirror on "+H.d(P.hl(this.Ax))},
-"+toString:0:0":0,
$isiu:true,
$isvr:true,
-$isej:true},mg:{"":"Tp;",
+$isQF:true},mg:{"":"Tp;",
call$1:function(a){return init.metadata[a]},
"+call:1:0":0,
$isEH:true,
@@ -10875,14 +10324,14 @@
$isEH:true,
$is_bh:true},bl:{"":"am;NK,EZ,ut,Db,uA,b0,M2,T1,Ly,FU,jd,qN,qm,If",
gOO:function(){return"ClassMirror"},
-gCr:function(){return H.d(this.NK.gCr())+"<"+this.EZ+">"},
+gWL:function(){return H.d(this.NK.gWL())+"<"+this.EZ+">"},
"+_mangledName":0,
gNy:function(){return this.NK.gNy()},
gw8:function(){var z,y,x,w,v,u,t,s
z=this.ut
if(z!=null)return z
y=P.A(null,null)
-z=new H.tB(y)
+z=new H.Ef(y)
x=this.EZ
if(C.xB.u8(x,"<")===-1)H.bQ(x.split(","),new H.Tc(z))
else{for(w=x.length,v=0,u="",t=0;t<w;++t){s=x[t]
@@ -10898,6 +10347,12 @@
z=this.NK.ly(this)
this.jd=z
return z},
+gtx:function(){var z=this.FU
+if(z!=null)return z
+z=new H.Gj(H.Vv(this.gEO()))
+H.VM(z,[P.wv,P.RS])
+this.FU=z
+return z},
gDI:function(){var z=this.b0
if(z!=null)return z
z=new H.Gj(H.Fk(this.gEO()))
@@ -10940,12 +10395,12 @@
gc9:function(){return this.NK.gc9()},
gAY:function(){var z=this.qN
if(z!=null)return z
-z=H.Jf(this,init.metadata[J.UQ(init.typeInformation[this.NK.gCr()],0)])
+z=H.Jf(this,init.metadata[J.UQ(init.typeInformation[this.NK.gWL()],0)])
this.qN=z
return z},
F2:function(a,b,c){return this.NK.F2(a,b,c)},
"+invoke:3:0":0,
-"*invoke":[37],
+"*invoke":[40],
CI:function(a,b){return this.F2(a,b,null)},
"+invoke:2:0":0,
gHA:function(){return!1},
@@ -10955,14 +10410,13 @@
z=this.NK.MR(this)
this.qm=z
return z},
-gkw:function(){return this.NK.gkw()},
gmW:function(a){return J.UX(this.NK)},
gvd:function(){return this.NK.gvd()},
gIf:function(){return this.NK.gIf()},
$isMs:true,
-$isej:true,
+$isQF:true,
$isL9u:true,
-$isNL:true},tB:{"":"Tp;a",
+$isNL:true},Ef:{"":"Tp;a",
call$1:function(a){var z,y,x
z=H.BU(a,null,new H.Oo())
y=this.a
@@ -10989,7 +10443,7 @@
"+call:1:0":0,
$isEH:true,
$is_HB:true,
-$is_Dv:true},Wf:{"":"Un;Cr<-,Tx<-,H8<-,Ht<-,pz<-,le@-,qN@-,jd@-,tB@-,b0@-,FU@-,T1@-,Ly@-,M2@-,uA@-,Db@-,Ok@-,qm@-,UF@-,nz@-,If",
+$is_Dv:true},Wf:{"":"Un;WL<-,Tx<-,H8<-,Ht<-,pz<-,le@-,qN@-,jd@-,tB@-,b0@-,FU@-,T1@-,Ly@-,M2@-,uA@-,Db@-,Ok@-,qm@-,UF@-,nz@-,If",
gOO:function(){return"ClassMirror"
"8"},
"+_prettyName":1,
@@ -10998,7 +10452,7 @@
y=J.x(z)
if(typeof z==="object"&&z!==null&&!!y.$isGv)return z.constructor
else return z
-"37"},
+"40"},
"+_jsConstructor":1,
gDI:function(){var z=this.b0
if(z!=null)return z
@@ -11006,7 +10460,7 @@
H.VM(z,[P.wv,P.RS])
this.b0=z
return z
-"49"},
+"52"},
"+constructors":1,
ly:function(a){var z,y,x,w,v,u,t,s,r,q,p,o,n,m,l,k
z=this.gaB().prototype
@@ -11032,7 +10486,7 @@
if (hasOwnProperty.call(victim, key)) result.push(key);
}
return result;
-})(init.statics[this.Cr], Object.prototype.hasOwnProperty)
+})(init.statics[this.WL], Object.prototype.hasOwnProperty)
w=J.U6(y)
r=w.gB(y)
if(typeof r!=="number")throw H.s(r)
@@ -11051,14 +10505,14 @@
l=!1}s=H.Sd(k,o,!l,l)
x.push(s)
s.nz=a}return x
-"50,51,52"},
+"53,54,55"},
"+_getMethodsWithOwner:1:0":1,
gEO:function(){var z=this.jd
if(z!=null)return z
z=this.ly(this)
this.jd=z
return z
-"50"},
+"53"},
"+_methods":1,
ws:function(a){var z,y,x,w
z=[]
@@ -11069,17 +10523,17 @@
y=this.Ht
if(y!=null){x=[x]
C.Nm.Ay(x,y)}H.jw(a,x,!1,z)
-w=init.statics[this.Cr]
+w=init.statics[this.WL]
if(w!=null)H.jw(a,w[""],!0,z)
return z
-"53,54,52"},
+"56,57,55"},
"+_getFieldsWithOwner:1:0":1,
-gTH:function(){var z=this.tB
+gKn:function(){var z=this.tB
if(z!=null)return z
z=this.ws(this)
this.tB=z
return z
-"53"},
+"56"},
"+_fields":1,
gtx:function(){var z=this.FU
if(z!=null)return z
@@ -11087,26 +10541,26 @@
H.VM(z,[P.wv,P.RS])
this.FU=z
return z
-"49"},
+"52"},
"+methods":1,
gZ3:function(){var z,y,x
z=this.M2
if(z!=null)return z
y=P.L5(null,null,null,null,null)
-for(z=J.GP(this.gTH());z.G();){x=z.gl()
+for(z=J.GP(this.gKn());z.G();){x=z.gl()
y.u(y,x.gIf(),x)}z=new H.Gj(y)
H.VM(z,[P.wv,P.RY])
this.M2=z
return z
-"55"},
+"58"},
"+variables":1,
glc:function(a){var z=this.uA
if(z!=null)return z
z=new H.Gj(H.vE(this.gEO(),this.gZ3()))
-H.VM(z,[P.wv,P.ej])
+H.VM(z,[P.wv,P.QF])
this.uA=z
return z
-"56"},
+"59"},
"+members":1,
gYK:function(){var z,y
z=this.Db
@@ -11120,23 +10574,23 @@
H.VM(z,[P.wv,P.NL])
this.Db=z
return z
-"57"},
+"60"},
"+declarations":1,
PU:function(a,b){var z,y
z=J.UQ(this.gZ3(),a)
if(z!=null&&z.gFo()&&!z.gV5()){y=z.gao()
-if(!(y in $))throw H.b(H.Ef("Cannot find \""+y+"\" in current isolate."))
+if(!(y in $))throw H.b(H.Pa("Cannot find \""+y+"\" in current isolate."))
$[y]=b
return H.vn(b)}throw H.b(P.lr(this,H.X7(a),[b],null,null))
-"58,59,60,61,0"},
+"61,62,63,64,0"},
"+setField:2:0":1,
rN:function(a){var z,y
z=J.UQ(this.gZ3(),a)
if(z!=null&&z.gFo()){y=z.gao()
-if(!(y in $))throw H.b(H.Ef("Cannot find \""+y+"\" in current isolate."))
+if(!(y in $))throw H.b(H.Pa("Cannot find \""+y+"\" in current isolate."))
if(y in init.lazies)return H.vn($[init.lazies[y]]())
else return H.vn($[y])}throw H.b(P.lr(this,a,null,null,null))
-"58,59,60"},
+"61,62,63"},
"+getField:1:0":1,
gh7:function(){var z,y,x,w,v,u,t
if(this.nz==null){z=this.Tx
@@ -11155,7 +10609,7 @@
z=new H.MH(null,y,z.ew)
z.$builtinTypeInfo=[u,t]
for(;z.G();)for(y=J.GP(z.mD);y.G();)J.pP(y.gl())}if(this.nz==null)throw H.b(new P.lj("Class \""+H.d(J.Z0(this.If))+"\" has no owner"))}return this.nz
-"62"},
+"65"},
"+owner":1,
gc9:function(){var z=this.Ok
if(z!=null)return z
@@ -11164,10 +10618,10 @@
H.VM(z,[P.vr])
this.Ok=z
return z
-"63"},
+"66"},
"+metadata":1,
gAY:function(){var z,y,x,w,v,u
-if(this.qN==null){z=init.typeInformation[this.Cr]
+if(this.qN==null){z=init.typeInformation[this.WL]
if(z!=null)this.qN=H.Jf(this,init.metadata[J.UQ(z,0)])
else{y=this.H8
x=J.uH(y,";")
@@ -11176,9 +10630,9 @@
x=J.rY(w)
v=x.Fr(w,"+")
u=v.length
-if(u>1){if(u!==2)throw H.b(H.Ef("Strange mixin: "+H.d(y)))
+if(u>1){if(u!==2)throw H.b(H.Pa("Strange mixin: "+H.d(y)))
this.qN=H.jO(v[0])}else this.qN=x.n(w,"")?this:H.jO(w)}}return J.xC(this.qN,this)?null:this.qN
-"64"},
+"67"},
"+superclass":1,
F2:function(a,b,c){var z
if(c!=null&&J.FN(c)!==!0)throw H.b(P.f("Named arguments are not implemented."))
@@ -11186,33 +10640,33 @@
if(z==null||!z.gFo())throw H.b(P.lr(this,a,b,c,null))
if(!z.yR())H.Hz(J.Z0(a))
return H.vn(z.qj(b,c))
-"58,65,60,66,67,68,69"},
+"61,68,63,69,70,71,72"},
"+invoke:3:0":1,
-"*invoke":[37],
+"*invoke":[40],
CI:function(a,b){return this.F2(a,b,null)},
"+invoke:2:0":1,
gHA:function(){return!0
-"41"},
+"44"},
"+isOriginalDeclaration":1,
gJi:function(){return this
-"64"},
+"67"},
"+originalDeclaration":1,
MR:function(a){var z,y,x
-z=init.typeInformation[this.Cr]
+z=init.typeInformation[this.WL]
if(z!=null){y=new H.A8(J.Pr(z,1),new H.t0(a))
H.VM(y,[null,null])
x=y.br(y)}else x=C.Me
y=new P.Yp(x)
H.VM(y,[P.Ms])
return y
-"70,71,52"},
+"73,74,55"},
"+_getSuperinterfacesWithOwner:1:0":1,
gkZ:function(){var z=this.qm
if(z!=null)return z
z=this.MR(this)
this.qm=z
return z
-"70"},
+"73"},
"+superinterfaces":1,
gNy:function(){var z,y,x,w,v
z=this.UF
@@ -11225,34 +10679,34 @@
H.VM(z,[null])
this.UF=z
return z
-"72"},
+"75"},
"+typeVariables":1,
gw8:function(){return C.hU
-"73"},
+"76"},
"+typeArguments":1,
$isWf:true,
$isMs:true,
-$isej:true,
+$isQF:true,
$isL9u:true,
-$isNL:true},"+JsClassMirror": [74, 64],Un:{"":"EE+M2;",$isej:true},Ei:{"":"Tp;a-",
+$isNL:true},"+JsClassMirror": [77, 67],Un:{"":"EE+M2;",$isQF:true},Ei:{"":"Tp;a-",
call$2:function(a,b){J.kW(this.a,a,b)
-"37,75,60,28,76"},
+"40,78,63,31,79"},
"+call:2:0":1,
$isEH:true,
-$is_bh:true},"+JsClassMirror_declarations_addToResult": [77],U7:{"":"Tp;b-",
+$is_bh:true},"+JsClassMirror_declarations_addToResult": [80],U7:{"":"Tp;b-",
call$1:function(a){J.kW(this.b,a.gIf(),a)
return a
-"37,78,37"},
+"40,81,40"},
"+call:1:0":1,
$isEH:true,
$is_HB:true,
-$is_Dv:true},"+JsClassMirror_declarations_closure": [77],t0:{"":"Tp;a-",
+$is_Dv:true},"+JsClassMirror_declarations_closure": [80],t0:{"":"Tp;a-",
call$1:function(a){return H.Jf(this.a,init.metadata[a])
-"64,79,27"},
+"67,82,30"},
"+call:1:0":1,
$isEH:true,
$is_HB:true,
-$is_Dv:true},"+JsClassMirror__getSuperinterfacesWithOwner_lookupType": [77],Ld:{"":"am;ao<,V5<,Fo<,n6,nz,le,If",
+$is_Dv:true},"+JsClassMirror__getSuperinterfacesWithOwner_lookupType": [80],Ld:{"":"am;ao<,V5<,Fo<,n6,nz,le,If",
gOO:function(){return"VariableMirror"},
"+_prettyName":0,
gr9:function(a){return $.Cr()},
@@ -11267,7 +10721,7 @@
a.H7(this.ao,b)},
$isRY:true,
$isNL:true,
-$isej:true,
+$isQF:true,
static:{"":"Z8",pS:function(a,b,c,d){var z,y,x,w,v,u,t,s,r,q
z=J.U6(a)
y=z.gB(a)
@@ -11303,7 +10757,7 @@
return null;
}
(y)
-if(w==null)throw H.b(H.Ef("Cannot find callName on \""+H.d(y)+"\""))
+if(w==null)throw H.b(H.Pa("Cannot find callName on \""+H.d(y)+"\""))
v=w.split("$")
if(1>=v.length)throw H.e(v,1)
u=H.BU(v[1],null,null)
@@ -11318,17 +10772,16 @@
return x},
"+function":0,
bu:function(a){return"ClosureMirror on '"+H.d(P.hl(this.Ax))+"'"},
-"+toString:0:0":0,
gFF:function(a){return H.vh(P.SY(null))},
"+source":0,
$isvr:true,
-$isej:true},Zk:{"":"am;dl,Yq,lT<,hB<,Fo<,xV<,qx,nz,le,G6,H3,If",
+$isQF:true},Zk:{"":"am;dl,Yq,lT<,hB<,Fo<,xV<,qx,nz,le,G6,Cr,If",
gOO:function(){return"MethodMirror"},
"+_prettyName":0,
-gJx:function(){var z=this.H3
+gJx:function(){var z=this.Cr
if(z!=null)return z
this.gc9()
-return this.H3},
+return this.Cr},
yR:function(){return"$reflectable" in this.dl},
gh7:function(){return this.nz},
"+owner":0,
@@ -11355,13 +10808,13 @@
if(t>=w)throw H.e(x,t)
x[t]=new H.fu(this,null,p)}}y=new P.Yp(x)
H.VM(y,[P.Ys])
-this.H3=y
+this.Cr=y
y=new P.Yp(J.C0(z,H.Yf))
H.VM(y,[null])
this.le=y}return this.le},
"+metadata":0,
qj:function(a,b){if(b!=null&&J.FN(b)!==!0)throw H.b(P.f("Named arguments are not implemented."))
-if(!this.Fo&&!this.xV)throw H.b(H.Ef("Cannot invoke instance method without receiver."))
+if(!this.Fo&&!this.xV)throw H.b(H.Pa("Cannot invoke instance method without receiver."))
if(!J.xC(this.Yq,J.q8(a))||this.dl==null)throw H.b(P.lr(this.nz,this.If,a,b,null))
return this.dl.apply($,P.F(a,!0,null))},
IB:function(a){if(this.lT)return this.qj([],null)
@@ -11372,7 +10825,7 @@
$isZk:true,
$isRS:true,
$isNL:true,
-$isej:true,
+$isQF:true,
static:{Sd:function(a,b,c,d){var z,y,x,w,v,u,t
z=J.uH(a,":")
if(0>=z.length)throw H.e(z,0)
@@ -11399,7 +10852,7 @@
$isYs:true,
$isRY:true,
$isNL:true,
-$isej:true},ng:{"":"am;Cr<,CM,If",
+$isQF:true},ng:{"":"am;WL<,CM,If",
gP:function(a){return this.CM},
"+value":0,
r6:function(a,b){return this.gP(a).call$1(b)},
@@ -11407,7 +10860,7 @@
"+_prettyName":0,
$isL9u:true,
$isNL:true,
-$isej:true},Ar:{"":"a;d9,o3,yA,zM,h7<",
+$isQF:true},Ar:{"":"a;d9,o3,yA,zM,h7<",
gHA:function(){return!0},
"+isOriginalDeclaration":0,
gJx:function(){var z,y,x,w,v,u,t
@@ -11451,16 +10904,15 @@
z=w+"'"
this.o3=z
return z},
-"+toString:0:0":0,
$isMs:true,
-$isej:true,
+$isQF:true,
$isL9u:true,
$isNL:true},jB:{"":"Tp;a",
call$1:function(a){var z,y,x
z=init.metadata[a]
y=this.a
x=H.w2(y.a.gNy(),J.DA(z))
-return J.UQ(y.a.gw8(),x).gCr()},
+return J.UQ(y.a.gw8(),x).gWL()},
"+call:1:0":0,
$isEH:true,
$is_HB:true,
@@ -11500,7 +10952,6 @@
$isL8:true,
static:{kT:function(){throw H.b(P.f("Cannot modify an unmodifiable Map"))}}},Zz:{"":"Ge;hu",
bu:function(a){return"Unsupported operation: "+this.hu},
-"+toString:0:0":0,
$ismp:true,
$isGe:true,
static:{WE:function(a){return new H.Zz(a)}}},"":"uN<"}],["dart._js_names","dart:_js_names",,H,{hY:function(a,b){var z,y,x,w,v,u,t
@@ -11638,7 +11089,7 @@
gZ9:function(){return new P.Ip(this,P.JI.prototype.LP,null,"LP")},
$asyU:null,
$asMO:null,
-static:{"":"kb,HC,fw",}},WV:{"":"a;nL<,QC<,iE@,SJ@",
+static:{"":"kb,CM,fw",}},WV:{"":"a;nL<,QC<,iE@,SJ@",
gP4:function(){return(this.Gv&2)!==0},
SL:function(){var z=this.Ip
if(z!=null)return z
@@ -11803,10 +11254,10 @@
this.au(z)
return z},
ml:function(a){return this.Rx(a,null)},
-pU:function(a,b){var z=P.RP(a,b,null)
+co:function(a,b){var z=P.RP(a,b,null)
this.au(z)
return z},
-OA:function(a){return this.pU(a,null)},
+OA:function(a){return this.co(a,null)},
wM:function(a){var z=P.X4(a,H.W8(this,"vs",0))
this.au(z)
return z},
@@ -11850,7 +11301,7 @@
L7:function(a,b){this.OH(a)},
$isvs:true,
$isb8:true,
-static:{"":"Gn,JE,cp,oN,NK",Dt:function(a){var z=new P.vs(0,$.X3,null,null,null,null,null,null)
+static:{"":"Gn,JE,OT,oN,NK",Dt:function(a){var z=new P.vs(0,$.X3,null,null,null,null,null,null)
H.VM(z,[a])
return z},Ab:function(a,b){var z=new P.vs(0,$.X3,null,null,null,null,null,null)
H.VM(z,[b])
@@ -11922,7 +11373,7 @@
$is_Dv:true},dm:{"":"Tp;b",
call$2:function(a,b){this.b.K5(a,b)},
"+call:2:0":0,
-"*call":[37],
+"*call":[40],
call$1:function(a){return this.call$2(a,null)},
"+call:1:0":0,
$isEH:true,
@@ -11991,7 +11442,7 @@
if(typeof y!=="object"||y===null||!x.$isvs){z.a=P.Dt(null)
z.a.E6(a,b)}P.HZ(z.a,this.h)},
"+call:2:0":0,
-"*call":[37],
+"*call":[40],
call$1:function(a){return this.call$2(a,null)},
"+call:1:0":0,
$isEH:true,
@@ -12303,14 +11754,12 @@
SY:function(){this.ghG().w6(C.Wj)}},Gh:{"":"XB;nL<,p4<,Z9<,QC<,iP,Gv,Ip"},XB:{"":"ms+lk;",$asms:null},ly:{"":"cK;nL<,p4<,Z9<,QC<,iP,Gv,Ip"},cK:{"":"ms+vp;",$asms:null},O9:{"":"ez;Y8",
w4:function(a){return this.Y8.ET(a)},
giO:function(a){return(H.eQ(this.Y8)^892482866)>>>0},
-"+hashCode":0,
n:function(a,b){var z
if(b==null)return!1
if(this===b)return!0
z=J.x(b)
if(typeof b!=="object"||b===null||!z.$isO9)return!1
return b.Y8===this.Y8},
-"+==:1:0":0,
$isO9:true,
$asez:null,
$asqh:null},yU:{"":"KA;Y8<,dB,o7,Bd,Lj,Gv,lz,Ri",
@@ -12541,7 +11990,7 @@
vx:function(a){this.UY.Ml(a,this)},
gOa:function(){return new H.Pm(this,P.fB.prototype.vx,null,"vx")},
xL:function(a,b){this.V8(a,b)},
-gRE:function(){return new P.eO(this,P.fB.prototype.xL,null,"xL")},
+gRE:function(){return new P.bq(this,P.fB.prototype.xL,null,"xL")},
fE:function(){this.Qj()},
gH1:function(){return new P.Ip(this,P.fB.prototype.fE,null,"fE")},
S8:function(a,b,c,d){var z,y
@@ -12996,7 +12445,6 @@
for(y=0;y<z;y+=2)if(this.C2(a[y],b)===!0)return y
return-1},
bu:function(a){return P.vW(this)},
-"+toString:0:0":0,
$ask6:null,
$asL8:null,
static:{MP:function(a,b,c,d,e){var z=new P.jG(d)
@@ -13169,7 +12617,6 @@
for(y=0;y<z;++y)if(J.xC(a[y].gkh(),b))return y
return-1},
bu:function(a){return P.vW(this)},
-"+toString:0:0":0,
$isFo:true,
$isL8:true},iX:{"":"Tp;a",
call$1:function(a){var z=this.a
@@ -13510,7 +12957,6 @@
z[x]=w}return z},
br:function(a){return this.tt(a,!0)},
bu:function(a){return H.mx(this,"{","}")},
-"+toString:0:0":0,
$asmW:null,
$ascX:null,
$isqC:true,
@@ -13569,7 +13015,6 @@
if(w.n(y,0))return x
y=w.W(y,1)}throw H.b(P.N(b))},
bu:function(a){return P.FO(this)},
-"+toString:0:0":0,
$iscX:true,
$ascX:null},ar:{"":"a+lD;",$isList:true,$asWO:null,$isqC:true,$iscX:true,$ascX:null},lD:{"":"a;",
gA:function(a){var z=new H.a7(a,this.gB(a),0,null)
@@ -13712,7 +13157,6 @@
z.We(a,", ")
z.KF("]")}finally{y=$.xb()
y.Rz(y,a)}return z.gvM()},
-"+toString:0:0":0,
$isList:true,
$asWO:null,
$isqC:true,
@@ -13773,7 +13217,6 @@
this.qT=this.qT+1
return!0}}return!1},
bu:function(a){return H.mx(this,"{","}")},
-"+toString:0:0":0,
Ux:function(){var z,y,x,w
if(this.av===this.HV)throw H.b(P.w("No elements"))
this.qT=this.qT+1
@@ -13976,7 +13419,6 @@
return z},
"+values":0,
bu:function(a){return P.vW(this)},
-"+toString:0:0":0,
$isBa:true,
$asXt:function(a,b){return[a]},
$asL8:null,
@@ -14074,7 +13516,7 @@
z=null
try{z=JSON.parse(a)}catch(w){x=H.Ru(w)
y=x
-throw H.b(P.cD(String(y)))}return P.VQ(z,b)},JC:{"":"Tp;",
+throw H.b(P.cD(String(y)))}return P.VQ(z,b)},tp:function(a){return a.Lt()},JC:{"":"Tp;",
call$2:function(a,b){return b},
"+call:2:0":0,
$isEH:true,
@@ -14093,14 +13535,118 @@
$isEH:true,
$is_HB:true,
$is_Dv:true},Uk:{"":"a;"},wI:{"":"a;"},ob:{"":"Uk;",
-$asUk:function(){return[J.O,[J.Q,J.im]]}},by:{"":"Uk;",
+$asUk:function(){return[J.O,[J.Q,J.im]]}},Ud:{"":"Ge;Ct,FN",
+bu:function(a){if(this.FN!=null)return"Converting object to an encodable object failed."
+else return"Converting object did not return an encodable object."},
+static:{ox:function(a,b){return new P.Ud(a,b)}}},K8:{"":"Ud;Ct,FN",
+bu:function(a){return"Cyclic error in JSON stringify"},
+static:{hT:function(a){return new P.K8(a,null)}}},by:{"":"Uk;",
pW:function(a,b){return P.BS(a,C.A3.N5)},
kV:function(a){return this.pW(a,null)},
-$asUk:function(){return[P.a,J.O]}},QM:{"":"wI;N5",
-$aswI:function(){return[J.O,P.a]}},z0:{"":"ob;lH",
+PN:function(a,b){return P.Vg(a,C.Ap.ke)},
+KP:function(a){return this.PN(a,null)},
+$asUk:function(){return[P.a,J.O]}},dI:{"":"wI;ke",
+$aswI:function(){return[P.a,J.O]}},QM:{"":"wI;N5",
+$aswI:function(){return[J.O,P.a]}},Sh:{"":"a;WE,u4,JN",
+Tt:function(a){return this.WE.call$1(a)},
+WD:function(a){var z=this.JN
+if(z.tg(z,a))throw H.b(P.hT(a))
+z.h(z,a)},
+C7:function(a){var z,y,x,w,v
+if(!this.IS(a)){x=a
+w=this.JN
+if(w.tg(w,x))H.vh(P.hT(x))
+w.h(w,x)
+try{z=this.Tt(a)
+if(!this.IS(z)){x=P.ox(a,null)
+throw H.b(x)}w.Rz(w,a)}catch(v){x=H.Ru(v)
+y=x
+throw H.b(P.ox(a,y))}}},
+IS:function(a){var z,y,x,w
+z={}
+if(typeof a==="number"){this.u4.KF(C.CD.bu(a))
+return!0}else if(a===!0){this.u4.KF("true")
+return!0}else if(a===!1){this.u4.KF("false")
+return!0}else if(a==null){this.u4.KF("null")
+return!0}else if(typeof a==="string"){z=this.u4
+z.KF("\"")
+P.NY(z,a)
+z.KF("\"")
+return!0}else{y=J.x(a)
+if(typeof a==="object"&&a!==null&&(a.constructor===Array||!!y.$isList)){this.WD(a)
+z=this.u4
+z.KF("[")
+if(J.xZ(y.gB(a),0)){this.C7(y.t(a,0))
+x=1
+while(!0){w=y.gB(a)
+if(typeof w!=="number")throw H.s(w)
+if(!(x<w))break
+z.vM=z.vM+","
+this.C7(y.t(a,x));++x}}z.KF("]")
+z=this.JN
+z.Rz(z,a)
+return!0}else if(typeof a==="object"&&a!==null&&!!y.$isL8){this.WD(a)
+w=this.u4
+w.KF("{")
+z.a=!0
+y.aN(a,new P.tF(z,this))
+w.KF("}")
+w=this.JN
+w.Rz(w,a)
+return!0}else return!1}},
+static:{"":"P3,kD,Ta,Yz,qS,fg,SW,KQ,MU,mr,YM,Xk,QV",Vg:function(a,b){var z
+b=P.BC
+z=P.p9("")
+new P.Sh(b,z,P.yv(null)).C7(a)
+return z.vM},NY:function(a,b){var z,y,x,w,v,u,t
+z=J.U6(b)
+y=z.gB(b)
+x=P.A(null,J.im)
+H.VM(x,[J.im])
+if(typeof y!=="number")throw H.s(y)
+w=!1
+v=0
+for(;v<y;++v){u=z.j(b,v)
+if(u<32){x.push(92)
+switch(u){case 8:x.push(98)
+break
+case 9:x.push(116)
+break
+case 10:x.push(110)
+break
+case 12:x.push(102)
+break
+case 13:x.push(114)
+break
+default:x.push(117)
+t=C.jn.m(u,12)&15
+x.push(t<10?48+t:87+t)
+t=C.jn.m(u,8)&15
+x.push(t<10?48+t:87+t)
+t=C.jn.m(u,4)&15
+x.push(t<10?48+t:87+t)
+t=u&15
+x.push(t<10?48+t:87+t)
+break}w=!0}else if(u===34||u===92){x.push(92)
+x.push(u)
+w=!0}else x.push(u)}a.KF(w?P.HM(x):b)}}},tF:{"":"Tp;a,b",
+call$2:function(a,b){var z,y,x
+z=this.a
+y=this.b
+if(!z.a)y.u4.KF(",\"")
+else y.u4.KF("\"")
+y=this.b
+x=y.u4
+P.NY(x,a)
+x.KF("\":")
+y.C7(b)
+z.a=!1},
+"+call:2:0":0,
+$isEH:true,
+$is_bh:true},z0:{"":"ob;lH",
goc:function(a){return"utf-8"},
"+name":0,
-gZE:function(){return new P.E3()}},E3:{"":"wI;",
+gZE:function(){return new P.Vx()}},Vx:{"":"wI;",
WJ:function(a){var z,y,x
z=a.length
y=P.A(z*3,J.im)
@@ -14301,7 +13847,7 @@
z=J.AG(a)
y=$.oK
if(y==null)H.LJ(z)
-else y.call$1(z)},fc:function(a){var z=P.O8(1,a,J.im)
+else y.call$1(z)},HM:function(a){return H.eT(a)},fc:function(a){var z=P.O8(1,a,J.im)
z.$builtinTypeInfo=[J.im]
return H.eT(z)},hz:function(a,b){return 65536+((a&1023)<<10>>>0)+(b&1023)},h0:{"":"Tp;a",
call$2:function(a,b){var z=this.a
@@ -14317,21 +13863,17 @@
z.b=z.b+1},
"+call:2:0":0,
$isEH:true,
-$is_bh:true},K8:{"":"a;OF",
-bu:function(a){return"Deprecated feature. Will be removed "+this.OF},
-"+toString:0:0":0},a2:{"":"a;",
+$is_bh:true},uA:{"":"a;OF",
+bu:function(a){return"Deprecated feature. Will be removed "+this.OF}},a2:{"":"a;",
bu:function(a){return this?"true":"false"},
-"+toString:0:0":0,
$isbool:true},fR:{"":"a;"},iP:{"":"a;rq<,aL",
n:function(a,b){var z
if(b==null)return!1
z=J.x(b)
if(typeof b!=="object"||b===null||!z.$isiP)return!1
return this.rq===b.rq&&this.aL===b.aL},
-"+==:1:0":0,
iM:function(a,b){return C.CD.iM(this.rq,b.grq())},
giO:function(a){return this.rq},
-"+hashCode":0,
bu:function(a){var z,y,x,w,v,u,t,s
z=new P.pl()
y=new P.Hn().call$1(H.tJ(this))
@@ -14343,12 +13885,11 @@
s=new P.Zl().call$1(H.o1(this))
if(this.aL)return H.d(y)+"-"+H.d(x)+"-"+H.d(w)+" "+H.d(v)+":"+H.d(u)+":"+H.d(t)+"."+H.d(s)+"Z"
else return H.d(y)+"-"+H.d(x)+"-"+H.d(w)+" "+H.d(v)+":"+H.d(u)+":"+H.d(t)+"."+H.d(s)},
-"+toString:0:0":0,
h:function(a,b){return P.Wu(this.rq+b.gVs(),this.aL)},
EK:function(){H.U8(this)},
RM:function(a,b){if(Math.abs(a)>8640000000000000)throw H.b(new P.AT(a))},
$isiP:true,
-static:{"":"Oj,bI,df,yM,h2,OK,nm,DU,H9,Gio,k3,cR,E0,Ke,lT,Nr,bm,o4,Kz,J7,TO,I2",Gl:function(a){var z,y,x,w,v,u,t,s,r,q,p,o,n
+static:{"":"Oj,bI,df,yM,h2,OK,nm,DU,H9,Gio,k3,cR,E0,Ke,lT,pi,bm,o4,Kz,J7,TO,lme",Gl:function(a){var z,y,x,w,v,u,t,s,r,q,p,o,n
z=new H.VR(H.v4("^([+-]?\\d?\\d\\d\\d\\d)-?(\\d\\d)-?(\\d\\d)(?:[ T](\\d\\d)(?::?(\\d\\d)(?::?(\\d\\d)(.\\d{1,6})?)?)?( ?[zZ]| ?\\+00(?::?00)?)?)?$",!1,!0,!1),null,null).ej(a)
if(z!=null){y=new P.MF()
x=z.oH
@@ -14428,9 +13969,7 @@
z=J.x(b)
if(typeof b!=="object"||b===null||!z.$isa6)return!1
return this.Fq===b.Fq},
-"+==:1:0":0,
giO:function(a){return this.Fq&0x1FFFFFFF},
-"+hashCode":0,
iM:function(a,b){return C.CD.iM(this.Fq,b.gFq())},
bu:function(a){var z,y,x,w,v
z=new P.DW()
@@ -14440,9 +13979,8 @@
w=z.call$1(C.CD.JV(C.CD.Z(y,1000000),60))
v=new P.P7().call$1(C.CD.JV(y,1000000))
return H.d(C.CD.Z(y,3600000000))+":"+H.d(x)+":"+H.d(w)+"."+H.d(v)},
-"+toString:0:0":0,
$isa6:true,
-static:{"":"Bp,S4,dk,Lo,RD,b2,q9,Ie,Do,f4,vd,IJ,V6,Vk,fm,rG",k5:function(a,b,c,d,e,f){return new P.a6(a*86400000000+b*3600000000+e*60000000+f*1000000+d*1000+c)}}},P7:{"":"Tp;",
+static:{"":"Bp,S4,dk,Lo,RD,b2,q9,Ie,Do,f4,vd,IJ,iI,Vk,fm,yn",k5:function(a,b,c,d,e,f){return new P.a6(a*86400000000+b*3600000000+e*60000000+f*1000000+d*1000+c)}}},P7:{"":"Tp;",
call$1:function(a){var z=J.Wx(a)
if(z.F(a,100000))return H.d(a)
if(z.F(a,10000))return"0"+H.d(a)
@@ -14462,15 +14000,12 @@
$is_Dv:true},Ge:{"":"a;",
gI4:function(){return new H.XO(this.$thrownJsError,null)},
$isGe:true},LK:{"":"Ge;",
-bu:function(a){return"Throw of null."},
-"+toString:0:0":0},AT:{"":"Ge;G1>",
+bu:function(a){return"Throw of null."}},AT:{"":"Ge;G1>",
bu:function(a){var z=this.G1
if(z!=null)return"Illegal argument(s): "+H.d(z)
return"Illegal argument(s)"},
-"+toString:0:0":0,
static:{u:function(a){return new P.AT(a)}}},bJ:{"":"AT;G1",
bu:function(a){return"RangeError: "+H.d(this.G1)},
-"+toString:0:0":0,
static:{C3:function(a){return new P.bJ(a)},N:function(a){return new P.bJ("value "+H.d(a))},"+new RangeError$value:1:0":0,TE:function(a,b,c){return new P.bJ("value "+H.d(a)+" not in range "+H.d(b)+".."+H.d(c))}}},mp:{"":"Ge;uF,UP,mP,SA,vG",
bu:function(a){var z,y,x,w,v,u
z={}
@@ -14490,43 +14025,34 @@
z.b=z.b+1}}y=this.SA
if(y!=null)J.kH(y,new P.CL(z))
return"NoSuchMethodError : method not found: '"+H.d(this.UP)+"'\nReceiver: "+H.d(P.hl(this.uF))+"\nArguments: ["+H.d(z.a)+"]"},
-"+toString:0:0":0,
$ismp:true,
static:{lr:function(a,b,c,d,e){return new P.mp(a,b,c,d,e)}}},ub:{"":"Ge;G1>",
bu:function(a){return"Unsupported operation: "+this.G1},
-"+toString:0:0":0,
$isub:true,
static:{f:function(a){return new P.ub(a)}}},ds:{"":"Ge;G1>",
bu:function(a){var z=this.G1
return z!=null?"UnimplementedError: "+H.d(z):"UnimplementedError"},
-"+toString:0:0":0,
$isub:true,
$isGe:true,
static:{SY:function(a){return new P.ds(a)}}},lj:{"":"Ge;G1>",
bu:function(a){return"Bad state: "+this.G1},
-"+toString:0:0":0,
static:{w:function(a){return new P.lj(a)}}},UV:{"":"Ge;YA",
bu:function(a){var z=this.YA
if(z==null)return"Concurrent modification during iteration."
return"Concurrent modification during iteration: "+H.d(P.hl(z))+"."},
-"+toString:0:0":0,
static:{a4:function(a){return new P.UV(a)}}},VS:{"":"a;",
bu:function(a){return"Stack Overflow"},
-"+toString:0:0":0,
gI4:function(){return},
$isGe:true},t7:{"":"Ge;Wo",
bu:function(a){return"Reading static variable '"+this.Wo+"' during its initialization"},
-"+toString:0:0":0,
static:{Gz:function(a){return new P.t7(a)}}},HG:{"":"a;G1>",
bu:function(a){var z=this.G1
if(z==null)return"Exception"
-return"Exception: "+H.d(z)},
-"+toString:0:0":0},aE:{"":"a;G1>",
+return"Exception: "+H.d(z)}},aE:{"":"a;G1>",
bu:function(a){return"FormatException: "+H.d(this.G1)},
-"+toString:0:0":0,
+$isaE:true,
static:{cD:function(a){return new P.aE(a)}}},kM:{"":"a;oc>",
bu:function(a){return"Expando:"+this.oc},
-"+toString:0:0":0,
t:function(a,b){var z=H.of(b,"expando$values")
return z==null?null:H.of(z,this.Qz())},
"+[]:1:0":0,
@@ -14541,14 +14067,10 @@
z="expando$key$"+y
H.aw(this,"expando$key",z)}return z},
static:{"":"bZ,rt,Ss",}},EH:{"":"a;",$isEH:true},cX:{"":"a;",$iscX:true,$ascX:null},eL:{"":"a;"},L8:{"":"a;",$isL8:true},c8:{"":"a;",
-bu:function(a){return"null"},
-"+toString:0:0":0},a:{"":";",
+bu:function(a){return"null"}},a:{"":";",
n:function(a,b){return this===b},
-"+==:1:0":0,
giO:function(a){return H.eQ(this)},
-"+hashCode":0,
bu:function(a){return H.a5(this)},
-"+toString:0:0":0,
T:function(a,b){throw H.b(P.lr(this,b.gWa(),b.gnd(),b.gVm(),null))},
"+noSuchMethod:1:0":0,
gbx:function(a){return new H.cu(H.dJ(this),null)},
@@ -14591,7 +14113,6 @@
y=typeof y==="string"?y:H.d(y)
this.vM=this.vM+y}}},
bu:function(a){return this.vM},
-"+toString:0:0":0,
PD:function(a){if(typeof a==="string")this.vM=a
else this.KF(a)},
static:{p9:function(a){var z=new P.Rn("")
@@ -14675,23 +14196,20 @@
z.KF(y)}y=this.BJ
if(""!==y){z.KF("#")
z.KF(y)}return z.vM},
-"+toString:0:0":0,
n:function(a,b){var z
if(b==null)return!1
z=J.RE(b)
if(typeof b!=="object"||b===null||!z.$isiD)return!1
return J.xC(this.Fi,b.Fi)&&J.xC(this.iV,b.iV)&&J.xC(this.gJf(this),z.gJf(b))&&J.xC(this.gGL(this),z.gGL(b))&&J.xC(this.r0,b.r0)&&J.xC(this.tP,b.tP)&&J.xC(this.BJ,b.BJ)},
-"+==:1:0":0,
giO:function(a){var z=new P.XZ()
return z.call$2(this.Fi,z.call$2(this.iV,z.call$2(this.gJf(this),z.call$2(this.gGL(this),z.call$2(this.r0,z.call$2(this.tP,z.call$2(this.BJ,1)))))))},
-"+hashCode":0,
n3:function(a,b,c,d,e,f,g,h,i){var z=J.x(h)
if(z.n(h,"http")&&J.xC(e,80))this.HC=0
else if(z.n(h,"https")&&J.xC(e,443))this.HC=0
else this.HC=e
this.r0=this.x6(c,d)},
$isiD:true,
-static:{"":"Um,B4,Bx,iR,LM,iI,nR,jJ,d2,q7,ux,vI,bL,tC,IL,Q5,zk,om,fC,O5,eq,qf,Tx,y3,Cn,R1,oe,vT,K7,nL,H5,zst,eK,bf,nc,nU,uj,SQ,SD",r6:function(a){var z,y,x,w,v,u,t,s
+static:{"":"Um,B4,Bx,iR,LM,mv,nR,jJ,d2,q7,ux,vI,SF,tC,IL,Q5,vl,yt,fC,O5,eq,qf,Tx,y3,Cn,R1,oe,vT,K7,nL,H5,zst,eK,bf,nc,nU,uj,SQ,SD",r6:function(a){var z,y,x,w,v,u,t,s
z=a.oH
if(1>=z.length)throw H.e(z,1)
y=z[1]
@@ -14834,11 +14352,11 @@
if(r&&!q)z.call$1("expected a part after last `:`")
if(!r)try{J.bi(x,y.call$2(w,J.q8(a)))}catch(p){H.Ru(p)
try{v=P.q5(J.ZZ(a,w))
-s=J.c1(J.UQ(v,0),8)
+s=J.Eh(J.UQ(v,0),8)
o=J.UQ(v,1)
if(typeof o!=="number")throw H.s(o)
J.bi(x,(s|o)>>>0)
-o=J.c1(J.UQ(v,2),8)
+o=J.Eh(J.UQ(v,2),8)
s=J.UQ(v,3)
if(typeof s!=="number")throw H.s(s)
J.bi(x,(o|s)>>>0)}catch(p){H.Ru(p)
@@ -15081,7 +14599,7 @@
y=new P.Zf(P.Dt(z))
H.VM(y,[z])
x=new XMLHttpRequest()
-C.W3.i3(x,"GET",a,!0)
+C.W3.xI(x,"GET",a,!0)
z=C.fK.aM(x)
w=new W.Ov(0,z.uv,z.Ph,W.aF(new W.bU(y,x)),z.Sg)
H.VM(w,[H.W8(z,"RO",0)])
@@ -15106,7 +14624,7 @@
if("setInterval" in a){z=W.P1(a)
y=J.x(z)
if(typeof z==="object"&&z!==null&&!!y.$isD0)return z
-return}else return a},m7:function(a){return a},YT:function(a,b){return new W.uY(a,b)},GO:function(a){return J.TD(a)},Yb:function(a){return J.W7(a)},Qp:function(a,b,c,d){return J.qd(a,b,c,d)},wi:function(a,b,c,d,e){var z,y,x,w,v,u,t,s,r,q
+return}else return a},m7:function(a){return a},YT:function(a,b){return new W.vZ(a,b)},GO:function(a){return J.TD(a)},Yb:function(a){return J.W7(a)},Qp:function(a,b,c,d){return J.qd(a,b,c,d)},wi:function(a,b,c,d,e){var z,y,x,w,v,u,t,s,r,q
z=J.Fb(d)
if(z==null)throw H.b(new P.AT(d))
y=z.prototype
@@ -15145,17 +14663,16 @@
q={prototype: s}
if(!J.xC(w,"HTMLElement"))if(!v)q.extends=e
b.register(c,q)},aF:function(a){if(J.xC($.X3,C.NU))return a
-return $.X3.oj(a,!0)},qE:{"":"cv;","%":"HTMLAppletElement|HTMLBRElement|HTMLBaseFontElement|HTMLBodyElement|HTMLCanvasElement|HTMLContentElement|HTMLDListElement|HTMLDataListElement|HTMLDetailsElement|HTMLDialogElement|HTMLDirectoryElement|HTMLDivElement|HTMLFontElement|HTMLFrameElement|HTMLFrameSetElement|HTMLHRElement|HTMLHeadElement|HTMLHeadingElement|HTMLHtmlElement|HTMLMarqueeElement|HTMLMenuElement|HTMLModElement|HTMLOptGroupElement|HTMLParagraphElement|HTMLPreElement|HTMLQuoteElement|HTMLShadowElement|HTMLSpanElement|HTMLTableCaptionElement|HTMLTableCellElement|HTMLTableColElement|HTMLTableDataCellElement|HTMLTableElement|HTMLTableHeaderCellElement|HTMLTableRowElement|HTMLTableSectionElement|HTMLTitleElement|HTMLUListElement|HTMLUnknownElement;HTMLElement;Tt|GN|ir|Xf|uL|Vf|aC|tu|Be|Vc|i6|WZ|Fv|pv|I3|Vfx|Gk|Dsd|Ds|u7|tuj|St|Vct|vj|D13|CX|BK|ih|F1|XP|NQ|WZq|fI|pva|kK|cda|uw"},Yy:{"":"Gv;",$isList:true,
+return $.X3.oj(a,!0)},qE:{"":"cv;","%":"HTMLAppletElement|HTMLBRElement|HTMLBaseFontElement|HTMLBodyElement|HTMLCanvasElement|HTMLContentElement|HTMLDListElement|HTMLDataListElement|HTMLDetailsElement|HTMLDialogElement|HTMLDirectoryElement|HTMLDivElement|HTMLFontElement|HTMLFrameElement|HTMLFrameSetElement|HTMLHRElement|HTMLHeadElement|HTMLHeadingElement|HTMLHtmlElement|HTMLMarqueeElement|HTMLMenuElement|HTMLModElement|HTMLOptGroupElement|HTMLParagraphElement|HTMLPreElement|HTMLQuoteElement|HTMLShadowElement|HTMLSpanElement|HTMLTableCaptionElement|HTMLTableCellElement|HTMLTableColElement|HTMLTableDataCellElement|HTMLTableElement|HTMLTableHeaderCellElement|HTMLTableRowElement|HTMLTableSectionElement|HTMLTitleElement|HTMLUListElement|HTMLUnknownElement;HTMLElement;Sa|GN|ir|Nr|uL|Vf|aC|tu|Be|Vc|i6|WZ|Fv|pv|I3|Vfx|qr|Dsd|Gk|tuj|Ds|Vct|pR|D13|hx|u7|WZq|St|pva|vj|cda|CX|Nh|ih|waa|F1|XP|NQ|V0|fI|V4|kK|V6|uw"},Yy:{"":"Gv;",$isList:true,
$asWO:function(){return[W.M5]},
$isqC:true,
$iscX:true,
$ascX:function(){return[W.M5]},
"%":"EntryArray"},Ps:{"":"qE;cC:hash%,LU:href=,N:target=,r9:type%",
bu:function(a){return a.toString()},
-"+toString:0:0":0,
"%":"HTMLAnchorElement"},fY:{"":"qE;cC:hash=,LU:href=,N:target=","%":"HTMLAreaElement"},nB:{"":"qE;LU:href=,N:target=","%":"HTMLBaseElement"},i3:{"":"ea;O3:url=","%":"BeforeLoadEvent"},Az:{"":"Gv;r9:type=",$isAz:true,"%":";Blob"},QW:{"":"qE;MB:form=,oc:name%,r9:type%,P:value%",
r6:function(a,b){return this.value.call$1(b)},
-"%":"HTMLButtonElement"},OM:{"":"KV;B:length=",$isGv:true,"%":"Comment;CharacterData"},QQ:{"":"ea;tT:code=","%":"CloseEvent"},oJ:{"":"BV;B:length=",
+"%":"HTMLButtonElement"},OM:{"":"KV;Rn:data=,B:length=",$isGv:true,"%":"Comment;CharacterData"},QQ:{"":"ea;tT:code=","%":"CloseEvent"},y4:{"":"Mf;Rn:data=","%":"CompositionEvent"},oJ:{"":"BV;B:length=",
T2:function(a,b){var z=a.getPropertyValue(b)
return z!=null?z:""},
hV:function(a,b,c,d){var z
@@ -15167,7 +14684,7 @@
if(z!=null)return z
return P.o7(a.detail,!0)},
$isDG:true,
-"%":"CustomEvent"},QF:{"":"KV;",
+"%":"CustomEvent"},YN:{"":"KV;",
JP:function(a){return a.createDocumentFragment()},
Kb:function(a,b){return a.getElementById(b)},
gEr:function(a){return C.mt.aM(a)},
@@ -15176,21 +14693,19 @@
Md:function(a,b){return W.vD(a.querySelectorAll(b),null)},
Ja:function(a,b){return a.querySelector(b)},
pr:function(a,b){return W.vD(a.querySelectorAll(b),null)},
-$isQF:true,
+$isYN:true,
"%":"Document|HTMLDocument|SVGDocument"},bA:{"":"KV;",
Md:function(a,b){return W.vD(a.querySelectorAll(b),null)},
Ja:function(a,b){return a.querySelector(b)},
pr:function(a,b){return W.vD(a.querySelectorAll(b),null)},
$isGv:true,
-"%":";DocumentFragment"},Wq:{"":"KV;",$isGv:true,"%":"DocumentType"},rz:{"":"Gv;G1:message=,oc:name=","%":";DOMError"},Nh:{"":"Gv;G1:message=",
+"%":";DocumentFragment"},Wq:{"":"KV;",$isGv:true,"%":"DocumentType"},rv:{"":"Gv;G1:message=,oc:name=","%":";DOMError"},BK:{"":"Gv;G1:message=",
goc:function(a){var z=a.name
if(P.F7()===!0&&z==="SECURITY_ERR")return"SecurityError"
if(P.F7()===!0&&z==="SYNTAX_ERR")return"SyntaxError"
return z},
"+name":0,
bu:function(a){return a.toString()},
-"+toString:0:0":0,
-$isNh:true,
"%":"DOMException"},cv:{"":"KV;xr:className%,jO:id%",
gQg:function(a){return new W.E9(a)},
Md:function(a,b){return W.vD(a.querySelectorAll(b),null)},
@@ -15204,7 +14719,6 @@
aC:function(a,b,c,d){},
gjU:function(a){return a.localName},
bu:function(a){return a.localName},
-"+toString:0:0":0,
WO:function(a,b){if(!!a.matches)return a.matches(b)
else if(!!a.webkitMatchesSelector)return a.webkitMatchesSelector(b)
else if(!!a.mozMatchesSelector)return a.mozMatchesSelector(b)
@@ -15227,12 +14741,12 @@
"%":";Element"},Fs:{"":"qE;oc:name%,LA:src%,r9:type%","%":"HTMLEmbedElement"},SX:{"":"ea;kc:error=,G1:message=","%":"ErrorEvent"},ea:{"":"Gv;It:_selector},Xt:bubbles=,Ii:path=,r9:type=",
gN:function(a){return W.bt(a.target)},
$isea:true,
-"%":"AudioProcessingEvent|AutocompleteErrorEvent|BeforeUnloadEvent|CSSFontFaceLoadEvent|DeviceMotionEvent|DeviceOrientationEvent|HashChangeEvent|IDBVersionChangeEvent|MIDIConnectionEvent|MIDIMessageEvent|MediaKeyNeededEvent|MediaStreamEvent|MediaStreamTrackEvent|MutationEvent|OfflineAudioCompletionEvent|OverflowEvent|PageTransitionEvent|PopStateEvent|RTCDTMFToneChangeEvent|RTCDataChannelEvent|RTCIceCandidateEvent|SecurityPolicyViolationEvent|SpeechInputEvent|SpeechRecognitionEvent|TrackEvent|WebGLContextEvent|WebKitAnimationEvent;Event"},D0:{"":"Gv;",
+"%":"AudioProcessingEvent|AutocompleteErrorEvent|BeforeUnloadEvent|CSSFontFaceLoadEvent|DeviceMotionEvent|DeviceOrientationEvent|HashChangeEvent|IDBVersionChangeEvent|MIDIConnectionEvent|MediaKeyNeededEvent|MediaStreamEvent|MediaStreamTrackEvent|MutationEvent|OfflineAudioCompletionEvent|OverflowEvent|PageTransitionEvent|PopStateEvent|RTCDTMFToneChangeEvent|RTCDataChannelEvent|RTCIceCandidateEvent|SecurityPolicyViolationEvent|SpeechInputEvent|SpeechRecognitionEvent|TrackEvent|WebGLContextEvent|WebKitAnimationEvent;Event"},D0:{"":"Gv;",
gI:function(a){return new W.Jn(a)},
On:function(a,b,c,d){return a.addEventListener(b,H.tR(c,1),d)},
Y9:function(a,b,c,d){return a.removeEventListener(b,H.tR(c,1),d)},
$isD0:true,
-"%":";EventTarget"},as:{"":"qE;MB:form=,oc:name%,r9:type=","%":"HTMLFieldSetElement"},T5:{"":"Az;oc:name=","%":"File"},Aa:{"":"rz;tT:code=","%":"FileError"},Yu:{"":"qE;B:length=,bP:method=,oc:name%,N:target=","%":"HTMLFormElement"},xn:{"":"ec;",
+"%":";EventTarget"},as:{"":"qE;MB:form=,oc:name%,r9:type=","%":"HTMLFieldSetElement"},T5:{"":"Az;oc:name=",$isT5:true,"%":"File"},Aa:{"":"rv;tT:code=","%":"FileError"},Yu:{"":"qE;B:length=,bP:method=,oc:name%,N:target=","%":"HTMLFormElement"},xn:{"":"ec;",
gB:function(a){return a.length},
"+length":0,
t:function(a,b){var z=a.length
@@ -15256,11 +14770,12 @@
$isXj:true,
"%":"HTMLCollection|HTMLFormControlsCollection|HTMLOptionsCollection"},fJ:{"":"Vi;iC:responseText=,ys:status=,po:statusText=",
R3:function(a,b,c,d,e,f){return a.open(b,c,d,f,e)},
-i3:function(a,b,c,d){return a.open(b,c,d)},
+xI:function(a,b,c,d){return a.open(b,c,d)},
wR:function(a,b){return a.send(b)},
$isfJ:true,
-"%":"XMLHttpRequest"},Vi:{"":"D0;","%":";XMLHttpRequestEventTarget"},tX:{"":"qE;oc:name%,LA:src%","%":"HTMLIFrameElement"},Sg:{"":"Gv;",$isSg:true,"%":"ImageData"},pA:{"":"qE;LA:src%",
+"%":"XMLHttpRequest"},Vi:{"":"D0;","%":";XMLHttpRequestEventTarget"},tX:{"":"qE;oc:name%,LA:src%","%":"HTMLIFrameElement"},Sg:{"":"Gv;Rn:data=",$isSg:true,"%":"ImageData"},pA:{"":"qE;LA:src%",
tZ:function(a){return this.complete.call$0()},
+oo:function(a,b){return this.complete.call$1(b)},
"%":"HTMLImageElement"},Mi:{"":"qE;Tq:checked%,MB:form=,qC:list=,oc:name%,LA:src%,r9:type%,P:value%",
RR:function(a,b){return this.accept.call$1(b)},
r6:function(a,b){return this.value.call$1(b)},
@@ -15273,16 +14788,17 @@
r6:function(a,b){return this.value.call$1(b)},
"%":"HTMLLIElement"},eP:{"":"qE;MB:form=","%":"HTMLLabelElement"},AL:{"":"qE;MB:form=","%":"HTMLLegendElement"},Og:{"":"qE;LU:href=,r9:type%",$isOg:true,"%":"HTMLLinkElement"},cS:{"":"Gv;cC:hash%,LU:href=",
bu:function(a){return a.toString()},
-"+toString:0:0":0,
$iscS:true,
"%":"Location"},M6:{"":"qE;oc:name%","%":"HTMLMapElement"},El:{"":"qE;kc:error=,LA:src%",
yy:function(a){return a.pause()},
"%":"HTMLAudioElement|HTMLMediaElement|HTMLVideoElement"},zm:{"":"Gv;tT:code=","%":"MediaError"},SV:{"":"Gv;tT:code=","%":"MediaKeyError"},aB:{"":"ea;G1:message=","%":"MediaKeyEvent"},ku:{"":"ea;G1:message=","%":"MediaKeyMessageEvent"},cW:{"":"D0;jO:id=","%":"MediaStream"},cx:{"":"ea;",
+gRn:function(a){return P.o7(a.data,!0)},
gFF:function(a){return W.bt(a.source)},
"+source":0,
+$iscx:true,
"%":"MessageEvent"},la:{"":"qE;jb:content=,oc:name%","%":"HTMLMetaElement"},Vn:{"":"qE;P:value%",
r6:function(a,b){return this.value.call$1(b)},
-"%":"HTMLMeterElement"},bn:{"":"Im;",
+"%":"HTMLMeterElement"},Hw:{"":"ea;Rn:data=","%":"MIDIMessageEvent"},bn:{"":"Im;",
LV:function(a,b,c){return a.send(b,c)},
wR:function(a,b){return a.send(b)},
"%":"MIDIOutput"},Im:{"":"D0;jO:id=,oc:name=,r9:type=","%":"MIDIInput;MIDIPort"},Aj:{"":"Mf;",
@@ -15295,7 +14811,6 @@
if(z!=null)z.removeChild(a)},
bu:function(a){var z=a.nodeValue
return z==null?J.Gv.prototype.bu.call(this,a):z},
-"+toString:0:0":0,
jx:function(a,b){return a.appendChild(b)},
Yv:function(a,b){return a.cloneNode(b)},
tg:function(a,b){return a.contains(b)},
@@ -15323,7 +14838,7 @@
$isqC:true,
$iscX:true,
$isXj:true,
-"%":"NodeList|RadioNodeList"},mh:{"":"qE;r9:type%","%":"HTMLOListElement"},G7:{"":"qE;MB:form=,oc:name%,r9:type%","%":"HTMLObjectElement"},Ql:{"":"qE;MB:form=,vH:index=,P:value%",
+"%":"NodeList|RadioNodeList"},mh:{"":"qE;r9:type%","%":"HTMLOListElement"},G7:{"":"qE;Rn:data=,MB:form=,oc:name%,r9:type%","%":"HTMLObjectElement"},Ql:{"":"qE;MB:form=,vH:index=,P:value%",
r6:function(a,b){return this.value.call$1(b)},
$isQl:true,
"%":"HTMLOptionElement"},Xp:{"":"qE;MB:form=,oc:name%,r9:type=,P:value%",
@@ -15342,7 +14857,7 @@
"%":"ShadowRoot"},QR:{"":"qE;LA:src%,r9:type%","%":"HTMLSourceElement"},zD:{"":"ea;kc:error=,G1:message=","%":"SpeechRecognitionError"},G0:{"":"ea;oc:name=","%":"SpeechSynthesisEvent"},wb:{"":"ea;G3:key=,zZ:newValue=,jL:oldValue=,O3:url=","%":"StorageEvent"},fq:{"":"qE;r9:type%","%":"HTMLStyleElement"},yY:{"":"qE;jb:content=",$isyY:true,"%":"HTMLTemplateElement"},kJ:{"":"OM;",$iskJ:true,"%":"CDATASection|Text"},AE:{"":"qE;MB:form=,oc:name%,r9:type=,P:value%",
r6:function(a,b){return this.value.call$1(b)},
$isAE:true,
-"%":"HTMLTextAreaElement"},RH:{"":"qE;fY:kind%,LA:src%","%":"HTMLTrackElement"},Lq:{"":"ea;",$isLq:true,"%":"TransitionEvent|WebKitTransitionEvent"},Mf:{"":"ea;","%":"CompositionEvent|FocusEvent|SVGZoomEvent|TextEvent|TouchEvent;UIEvent"},K5:{"":"D0;oc:name%,ys:status=",
+"%":"HTMLTextAreaElement"},xV:{"":"Mf;Rn:data=","%":"TextEvent"},RH:{"":"qE;fY:kind%,LA:src%","%":"HTMLTrackElement"},Lq:{"":"ea;",$isLq:true,"%":"TransitionEvent|WebKitTransitionEvent"},Mf:{"":"ea;","%":"FocusEvent|SVGZoomEvent|TouchEvent;UIEvent"},K5:{"":"D0;oc:name%,ys:status=",
gmW:function(a){var z=a.location
if(W.uC(z)===!0)return z
if(null==a._location_wrapper)a._location_wrapper=new W.H2(z)
@@ -15367,8 +14882,10 @@
})(a)},
geT:function(a){return W.uV(a.parent)},
cO:function(a){return a.close()},
+xc:function(a,b,c,d){a.postMessage(P.bL(b),c)
+return},
+X6:function(a,b,c){return this.xc(a,b,c,null)},
bu:function(a){return a.toString()},
-"+toString:0:0":0,
gEr:function(a){return C.mt.aM(a)},
gVl:function(a){return C.T1.aM(a)},
gLm:function(a){return C.io.aM(a)},
@@ -15404,10 +14921,10 @@
"+error:1:0":0,
gkc:function(a){return new P.C7(this,W.QZ.prototype.Wt,a,"Wt")},
To:function(a){return typeof console!="undefined"?console.info(a):null},
-WL:function(a,b){return typeof console!="undefined"?console.trace(b):null},
+ZF:function(a,b){return typeof console!="undefined"?console.trace(b):null},
"+trace:1:0":0,
-gtN:function(a){return new P.C7(this,W.QZ.prototype.WL,a,"WL")},
-static:{"":"wk",}},BV:{"":"Gv+id;"},id:{"":"a;",
+gtN:function(a){return new P.C7(this,W.QZ.prototype.ZF,a,"ZF")},
+static:{"":"wk",}},BV:{"":"Gv+E1;"},E1:{"":"a;",
gjb:function(a){return this.T2(a,"content")},
gBb:function(a){return this.T2(a,"left")},
gT8:function(a){return this.T2(a,"right")},
@@ -15759,7 +15276,7 @@
"+current":0,
static:{yB:function(a,b){var z=new W.W9(a,J.q8(a),-1,null)
H.VM(z,[b])
-return z}}},uY:{"":"Tp;a,b",
+return z}}},vZ:{"":"Tp;a,b",
call$1:function(a){var z=H.Va(this.b)
Object.defineProperty(a, init.dispatchPropertyName, {value: z, enumerable: false, writable: true, configurable: true})
return this.a(a)},
@@ -15767,13 +15284,15 @@
$isEH:true,
$is_HB:true,
$is_Dv:true},dW:{"":"a;Ui",
-gmW:function(a){return W.tF(this.Ui.location)},
+gmW:function(a){return W.zX(this.Ui.location)},
geT:function(a){return W.P1(this.Ui.parent)},
cO:function(a){return this.Ui.close()},
+xc:function(a,b,c,d){this.Ui.postMessage(b,c)},
+X6:function(a,b,c){return this.xc(a,b,c,null)},
$isD0:true,
$isGv:true,
static:{P1:function(a){if(a===window)return a
-else return new W.dW(a)}}},PA:{"":"a;mf",static:{tF:function(a){if(a===C.ol.gmW(window))return a
+else return new W.dW(a)}}},PA:{"":"a;mf",static:{zX:function(a){if(a===C.ol.gmW(window))return a
else return new W.PA(a)}}},H2:{"":"a;WK",
gcC:function(a){return this.WK.hash},
"+hash":0,
@@ -15781,16 +15300,15 @@
"+hash=":0,
gLU:function(a){return this.WK.href},
bu:function(a){return this.WK.toString()},
-"+toString:0:0":0,
$iscS:true,
-$isGv:true}}],["dart.dom.indexed_db","dart:indexed_db",,P,{hF:{"":"Gv;",$ishF:true,"%":"IDBKeyRange"}}],["dart.dom.svg","dart:svg",,P,{HB:{"":"tp;N:target=,LU:href=",$isGv:true,"%":"SVGAElement"},ZJ:{"":"Eo;LU:href=",$isGv:true,"%":"SVGAltGlyphElement"},ui:{"":"MB;",$isGv:true,"%":"SVGAnimateColorElement|SVGAnimateElement|SVGAnimateMotionElement|SVGAnimateTransformElement|SVGAnimationElement|SVGSetElement"},D6:{"":"tp;",$isGv:true,"%":"SVGCircleElement"},DQ:{"":"tp;",$isGv:true,"%":"SVGClipPathElement"},Sm:{"":"tp;",$isGv:true,"%":"SVGDefsElement"},es:{"":"tp;",$isGv:true,"%":"SVGEllipseElement"},eG:{"":"MB;",$isGv:true,"%":"SVGFEBlendElement"},lv:{"":"MB;r9:type=,UQ:values=",$isGv:true,"%":"SVGFEColorMatrixElement"},pf:{"":"MB;",$isGv:true,"%":"SVGFEComponentTransferElement"},NV:{"":"MB;kp:operator=",$isGv:true,"%":"SVGFECompositeElement"},W1:{"":"MB;",$isGv:true,"%":"SVGFEConvolveMatrixElement"},zo:{"":"MB;",$isGv:true,"%":"SVGFEDiffuseLightingElement"},wf:{"":"MB;",$isGv:true,"%":"SVGFEDisplacementMapElement"},bb:{"":"MB;",$isGv:true,"%":"SVGFEFloodElement"},tk:{"":"MB;",$isGv:true,"%":"SVGFEGaussianBlurElement"},me:{"":"MB;LU:href=",$isGv:true,"%":"SVGFEImageElement"},qN:{"":"MB;",$isGv:true,"%":"SVGFEMergeElement"},d4:{"":"MB;kp:operator=",$isGv:true,"%":"SVGFEMorphologyElement"},MI:{"":"MB;",$isGv:true,"%":"SVGFEOffsetElement"},xX:{"":"MB;",$isGv:true,"%":"SVGFESpecularLightingElement"},um:{"":"MB;",$isGv:true,"%":"SVGFETileElement"},Fu:{"":"MB;r9:type=",$isGv:true,"%":"SVGFETurbulenceElement"},OE:{"":"MB;LU:href=",$isGv:true,"%":"SVGFilterElement"},l6:{"":"tp;",$isGv:true,"%":"SVGForeignObjectElement"},BA:{"":"tp;",$isGv:true,"%":"SVGGElement"},tp:{"":"MB;",$isGv:true,"%":";SVGGraphicsElement"},rE:{"":"tp;LU:href=",$isGv:true,"%":"SVGImageElement"},CC:{"":"tp;",$isGv:true,"%":"SVGLineElement"},uz:{"":"MB;",$isGv:true,"%":"SVGMarkerElement"},Yd:{"":"MB;",$isGv:true,"%":"SVGMaskElement"},AD:{"":"tp;",$isGv:true,"%":"SVGPathElement"},Gr:{"":"MB;LU:href=",$isGv:true,"%":"SVGPatternElement"},tc:{"":"tp;",$isGv:true,"%":"SVGPolygonElement"},GH:{"":"tp;",$isGv:true,"%":"SVGPolylineElement"},NJ:{"":"tp;",$isGv:true,"%":"SVGRectElement"},nd:{"":"MB;r9:type%,LU:href=",$isGv:true,"%":"SVGScriptElement"},EU:{"":"MB;r9:type%","%":"SVGStyleElement"},MB:{"":"cv;",
+$isGv:true}}],["dart.dom.indexed_db","dart:indexed_db",,P,{hF:{"":"Gv;",$ishF:true,"%":"IDBKeyRange"}}],["dart.dom.svg","dart:svg",,P,{HB:{"":"zp;N:target=,LU:href=",$isGv:true,"%":"SVGAElement"},ZJ:{"":"Eo;LU:href=",$isGv:true,"%":"SVGAltGlyphElement"},ui:{"":"MB;",$isGv:true,"%":"SVGAnimateColorElement|SVGAnimateElement|SVGAnimateMotionElement|SVGAnimateTransformElement|SVGAnimationElement|SVGSetElement"},D6:{"":"zp;",$isGv:true,"%":"SVGCircleElement"},DQ:{"":"zp;",$isGv:true,"%":"SVGClipPathElement"},Sm:{"":"zp;",$isGv:true,"%":"SVGDefsElement"},es:{"":"zp;",$isGv:true,"%":"SVGEllipseElement"},eG:{"":"MB;",$isGv:true,"%":"SVGFEBlendElement"},lv:{"":"MB;r9:type=,UQ:values=",$isGv:true,"%":"SVGFEColorMatrixElement"},pf:{"":"MB;",$isGv:true,"%":"SVGFEComponentTransferElement"},NV:{"":"MB;kp:operator=",$isGv:true,"%":"SVGFECompositeElement"},W1:{"":"MB;",$isGv:true,"%":"SVGFEConvolveMatrixElement"},zo:{"":"MB;",$isGv:true,"%":"SVGFEDiffuseLightingElement"},wf:{"":"MB;",$isGv:true,"%":"SVGFEDisplacementMapElement"},bb:{"":"MB;",$isGv:true,"%":"SVGFEFloodElement"},tk:{"":"MB;",$isGv:true,"%":"SVGFEGaussianBlurElement"},me:{"":"MB;LU:href=",$isGv:true,"%":"SVGFEImageElement"},qN:{"":"MB;",$isGv:true,"%":"SVGFEMergeElement"},d4:{"":"MB;kp:operator=",$isGv:true,"%":"SVGFEMorphologyElement"},MI:{"":"MB;",$isGv:true,"%":"SVGFEOffsetElement"},xX:{"":"MB;",$isGv:true,"%":"SVGFESpecularLightingElement"},um:{"":"MB;",$isGv:true,"%":"SVGFETileElement"},Fu:{"":"MB;r9:type=",$isGv:true,"%":"SVGFETurbulenceElement"},OE:{"":"MB;LU:href=",$isGv:true,"%":"SVGFilterElement"},l6:{"":"zp;",$isGv:true,"%":"SVGForeignObjectElement"},BA:{"":"zp;",$isGv:true,"%":"SVGGElement"},zp:{"":"MB;",$isGv:true,"%":";SVGGraphicsElement"},rE:{"":"zp;LU:href=",$isGv:true,"%":"SVGImageElement"},CC:{"":"zp;",$isGv:true,"%":"SVGLineElement"},uz:{"":"MB;",$isGv:true,"%":"SVGMarkerElement"},Yd:{"":"MB;",$isGv:true,"%":"SVGMaskElement"},AD:{"":"zp;",$isGv:true,"%":"SVGPathElement"},Gr:{"":"MB;LU:href=",$isGv:true,"%":"SVGPatternElement"},tc:{"":"zp;",$isGv:true,"%":"SVGPolygonElement"},GH:{"":"zp;",$isGv:true,"%":"SVGPolylineElement"},NJ:{"":"zp;",$isGv:true,"%":"SVGRectElement"},nd:{"":"MB;r9:type%,LU:href=",$isGv:true,"%":"SVGScriptElement"},EU:{"":"MB;r9:type%","%":"SVGStyleElement"},MB:{"":"cv;",
gDD:function(a){if(a._cssClassSet==null)a._cssClassSet=new P.O7(a)
return a._cssClassSet},
-"%":"SVGAltGlyphDefElement|SVGAltGlyphItemElement|SVGComponentTransferFunctionElement|SVGDescElement|SVGFEDistantLightElement|SVGFEFuncAElement|SVGFEFuncBElement|SVGFEFuncGElement|SVGFEFuncRElement|SVGFEMergeNodeElement|SVGFEPointLightElement|SVGFESpotLightElement|SVGFontElement|SVGFontFaceElement|SVGFontFaceFormatElement|SVGFontFaceNameElement|SVGFontFaceSrcElement|SVGFontFaceUriElement|SVGGlyphElement|SVGHKernElement|SVGMetadataElement|SVGMissingGlyphElement|SVGStopElement|SVGTitleElement|SVGVKernElement;SVGElement"},hy:{"":"tp;",
+"%":"SVGAltGlyphDefElement|SVGAltGlyphItemElement|SVGComponentTransferFunctionElement|SVGDescElement|SVGFEDistantLightElement|SVGFEFuncAElement|SVGFEFuncBElement|SVGFEFuncGElement|SVGFEFuncRElement|SVGFEMergeNodeElement|SVGFEPointLightElement|SVGFESpotLightElement|SVGFontElement|SVGFontFaceElement|SVGFontFaceFormatElement|SVGFontFaceNameElement|SVGFontFaceSrcElement|SVGFontFaceUriElement|SVGGlyphElement|SVGHKernElement|SVGMetadataElement|SVGMissingGlyphElement|SVGStopElement|SVGTitleElement|SVGVKernElement;SVGElement"},hy:{"":"zp;",
Kb:function(a,b){return a.getElementById(b)},
$ishy:true,
$isGv:true,
-"%":"SVGSVGElement"},r8:{"":"tp;",$isGv:true,"%":"SVGSwitchElement"},aS:{"":"MB;",$isGv:true,"%":"SVGSymbolElement"},qF:{"":"tp;",$isGv:true,"%":";SVGTextContentElement"},xN:{"":"qF;bP:method=,LU:href=",$isGv:true,"%":"SVGTextPathElement"},Eo:{"":"qF;","%":"SVGTSpanElement|SVGTextElement;SVGTextPositioningElement"},ox:{"":"tp;LU:href=",$isGv:true,"%":"SVGUseElement"},ZD:{"":"MB;",$isGv:true,"%":"SVGViewElement"},wD:{"":"MB;LU:href=",$isGv:true,"%":"SVGGradientElement|SVGLinearGradientElement|SVGRadialGradientElement"},mj:{"":"MB;",$isGv:true,"%":"SVGCursorElement"},cB:{"":"MB;",$isGv:true,"%":"SVGFEDropShadowElement"},nb:{"":"MB;",$isGv:true,"%":"SVGGlyphRefElement"},xt:{"":"MB;",$isGv:true,"%":"SVGMPathElement"},O7:{"":"As;CE",
+"%":"SVGSVGElement"},r8:{"":"zp;",$isGv:true,"%":"SVGSwitchElement"},aS:{"":"MB;",$isGv:true,"%":"SVGSymbolElement"},qF:{"":"zp;",$isGv:true,"%":";SVGTextContentElement"},Rk:{"":"qF;bP:method=,LU:href=",$isGv:true,"%":"SVGTextPathElement"},Eo:{"":"qF;","%":"SVGTSpanElement|SVGTextElement;SVGTextPositioningElement"},UD:{"":"zp;LU:href=",$isGv:true,"%":"SVGUseElement"},ZD:{"":"MB;",$isGv:true,"%":"SVGViewElement"},wD:{"":"MB;LU:href=",$isGv:true,"%":"SVGGradientElement|SVGLinearGradientElement|SVGRadialGradientElement"},mj:{"":"MB;",$isGv:true,"%":"SVGCursorElement"},cB:{"":"MB;",$isGv:true,"%":"SVGFEDropShadowElement"},nb:{"":"MB;",$isGv:true,"%":"SVGGlyphRefElement"},xt:{"":"MB;",$isGv:true,"%":"SVGMPathElement"},O7:{"":"As;CE",
lF:function(){var z,y,x,w,v
z=new W.E9(this.CE).MW.getAttribute("class")
y=P.Ls(null,null,null,J.O)
@@ -15835,18 +15353,15 @@
this.eh[b]=P.wY(c)},
"+[]=:2:0":0,
giO:function(a){return 0},
-"+hashCode":0,
n:function(a,b){var z
if(b==null)return!1
z=J.x(b)
return typeof b==="object"&&b!==null&&!!z.$isE4&&this.eh===b.eh},
-"+==:1:0":0,
Bm:function(a){return a in this.eh},
bu:function(a){var z,y
try{z=String(this.eh)
return z}catch(y){H.Ru(y)
return P.a.prototype.bu.call(this,this)}},
-"+toString:0:0":0,
V7:function(a,b){var z,y
z=this.eh
if(b==null)y=null
@@ -15946,7 +15461,7 @@
z=J.x(y)
if(typeof y!=="object"||y===null||!z.$isMs)throw H.b(new P.AT(H.d(a)+" does not denote a class"))
return y.gJi()},yq:function(a){if(J.xC(a,C.HH)){$.At().toString
-return $.Cr()}return H.jO(a.gIE())},ej:{"":"a;",$isej:true},NL:{"":"a;",$isNL:true,$isej:true},vr:{"":"a;",$isvr:true,$isej:true},D4:{"":"a;",$isD4:true,$isej:true,$isNL:true},L9u:{"":"a;",$isL9u:true,$isNL:true,$isej:true},Ms:{"":"a;",$isMs:true,$isej:true,$isL9u:true,$isNL:true},Fw:{"":"L9u;",$isFw:true},RS:{"":"a;",$isRS:true,$isNL:true,$isej:true},RY:{"":"a;",$isRY:true,$isNL:true,$isej:true},Ys:{"":"a;",$isYs:true,$isRY:true,$isNL:true,$isej:true},vg:{"":"a;c1,m2,nV,V3"}}],["dart.typed_data","dart:typed_data",,P,{AS:{"":"Gv;",
+return $.Cr()}return H.jO(a.gIE())},QF:{"":"a;",$isQF:true},NL:{"":"a;",$isNL:true,$isQF:true},vr:{"":"a;",$isvr:true,$isQF:true},D4:{"":"a;",$isD4:true,$isQF:true,$isNL:true},L9u:{"":"a;",$isL9u:true,$isNL:true,$isQF:true},Ms:{"":"a;",$isMs:true,$isQF:true,$isL9u:true,$isNL:true},Fw:{"":"L9u;",$isFw:true},RS:{"":"a;",$isRS:true,$isNL:true,$isQF:true},RY:{"":"a;",$isRY:true,$isNL:true,$isQF:true},Ys:{"":"a;",$isYs:true,$isRY:true,$isNL:true,$isQF:true},vg:{"":"a;c1,m2,nV,V3"}}],["dart.typed_data","dart:typed_data",,P,{I2:{"":"Gv;",$isI2:true,"%":"ArrayBuffer"},AS:{"":"Gv;",
aq:function(a,b,c){var z=J.Wx(b)
if(z.C(b,0)||z.F(b,c))throw H.b(P.TE(b,0,c))
else throw H.b(P.u("Invalid list index "+H.d(b)))},
@@ -15954,7 +15469,7 @@
Im:function(a,b,c,d){this.iA(a,b,d+1)
return d},
$isAS:true,
-"%":"DataView;ArrayBufferView;xG|Vj|VW|RK|DH|ZK|Th|Vju|KB|RKu|na|TkQ|xGn|ZKG|VWk|w6W|DHb|z9g|G8|UZ"},oI:{"":"Vj;",
+"%":"DataView;ArrayBufferView;xG|Vj|VW|RK|DH|ZK|Th|Vju|KB|RKu|xGn|TkQ|VWk|ZKG|DHb|w6W|Hna|z9g|G8|UZ"},oI:{"":"Vj;",
gB:function(a){return C.i7(a)},
"+length":0,
t:function(a,b){var z=C.i7(a)
@@ -16170,7 +15685,7 @@
$isqC:true,
$iscX:true,
$isXj:true,
-"%":";Uint8Array"},xG:{"":"AS+lD;",$isList:true,$asWO:null,$isqC:true,$iscX:true,$ascX:null},Vj:{"":"xG+SU;",$asWO:null,$ascX:null},VW:{"":"AS+lD;",$isList:true,$asWO:null,$isqC:true,$iscX:true,$ascX:null},RK:{"":"VW+SU;",$asWO:null,$ascX:null},DH:{"":"AS+lD;",$isList:true,$asWO:null,$isqC:true,$iscX:true,$ascX:null},ZK:{"":"DH+SU;",$asWO:null,$ascX:null},Th:{"":"AS+lD;",$isList:true,$asWO:null,$isqC:true,$iscX:true,$ascX:null},Vju:{"":"Th+SU;",$asWO:null,$ascX:null},KB:{"":"AS+lD;",$isList:true,$asWO:null,$isqC:true,$iscX:true,$ascX:null},RKu:{"":"KB+SU;",$asWO:null,$ascX:null},na:{"":"AS+lD;",$isList:true,$asWO:null,$isqC:true,$iscX:true,$ascX:null},TkQ:{"":"na+SU;",$asWO:null,$ascX:null},xGn:{"":"AS+lD;",$isList:true,$asWO:null,$isqC:true,$iscX:true,$ascX:null},ZKG:{"":"xGn+SU;",$asWO:null,$ascX:null},VWk:{"":"AS+lD;",$isList:true,$asWO:null,$isqC:true,$iscX:true,$ascX:null},w6W:{"":"VWk+SU;",$asWO:null,$ascX:null},DHb:{"":"AS+lD;",$isList:true,$asWO:null,$isqC:true,$iscX:true,$ascX:null},z9g:{"":"DHb+SU;",$asWO:null,$ascX:null},G8:{"":"AS;",$isList:true,
+"%":";Uint8Array"},xG:{"":"AS+lD;",$isList:true,$asWO:null,$isqC:true,$iscX:true,$ascX:null},Vj:{"":"xG+SU;",$asWO:null,$ascX:null},VW:{"":"AS+lD;",$isList:true,$asWO:null,$isqC:true,$iscX:true,$ascX:null},RK:{"":"VW+SU;",$asWO:null,$ascX:null},DH:{"":"AS+lD;",$isList:true,$asWO:null,$isqC:true,$iscX:true,$ascX:null},ZK:{"":"DH+SU;",$asWO:null,$ascX:null},Th:{"":"AS+lD;",$isList:true,$asWO:null,$isqC:true,$iscX:true,$ascX:null},Vju:{"":"Th+SU;",$asWO:null,$ascX:null},KB:{"":"AS+lD;",$isList:true,$asWO:null,$isqC:true,$iscX:true,$ascX:null},RKu:{"":"KB+SU;",$asWO:null,$ascX:null},xGn:{"":"AS+lD;",$isList:true,$asWO:null,$isqC:true,$iscX:true,$ascX:null},TkQ:{"":"xGn+SU;",$asWO:null,$ascX:null},VWk:{"":"AS+lD;",$isList:true,$asWO:null,$isqC:true,$iscX:true,$ascX:null},ZKG:{"":"VWk+SU;",$asWO:null,$ascX:null},DHb:{"":"AS+lD;",$isList:true,$asWO:null,$isqC:true,$iscX:true,$ascX:null},w6W:{"":"DHb+SU;",$asWO:null,$ascX:null},Hna:{"":"AS+lD;",$isList:true,$asWO:null,$isqC:true,$iscX:true,$ascX:null},z9g:{"":"Hna+SU;",$asWO:null,$ascX:null},G8:{"":"AS;",$isList:true,
$asWO:function(){return[J.im]},
$isqC:true,
$iscX:true,
@@ -16182,12 +15697,12 @@
$iscX:true,
$ascX:function(){return[J.im]},
$isXj:true,
-static:{"":"U9",}}}],["disassembly_entry_element","package:observatory/src/observatory_elements/disassembly_entry.dart",,E,{Fv:{"":["WZ;FT%-,VJ,Ai,hm-,VJ,Ai,VJ,Ai,ZI,uN,z3,TQ,Vk,Ye,mT,KM-",null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,function(){return[C.nJ]}],
+static:{"":"U9",}}}],["disassembly_entry_element","package:observatory/src/observatory_elements/disassembly_entry.dart",,E,{Fv:{"":["WZ;FT%-,VJ,Ai,tH-,VJ,Ai,VJ,Ai,ZI,uN,z3,TQ,Vk,Ye,mT,KM-",null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,function(){return[C.nJ]}],
gNI:function(a){return a.FT
-"34,35,36"},
+"37,38,39"},
"+instruction":1,
-sNI:function(a,b){a.FT=this.ct(a,C.eJ,a.FT,b)
-"37,28,34,35"},
+sNI:function(a,b){a.FT=this.pD(a,C.eJ,a.FT,b)
+"40,31,37,38"},
"+instruction=":1,
"@":function(){return[C.Vy]},
static:{AH:function(a){var z,y,x,w,v,u
@@ -16206,18 +15721,18 @@
C.Tl.ZL(a)
C.Tl.FH(a)
return a
-"13"},"+new DisassemblyEntryElement$created:0:0":1}},"+DisassemblyEntryElement": [80],WZ:{"":"uL+Pi;",$isd3:true}}],["error_view_element","package:observatory/src/observatory_elements/error_view.dart",,F,{I3:{"":["pv;Py%-,hO%-,VJ,Ai,hm-,VJ,Ai,VJ,Ai,ZI,uN,z3,TQ,Vk,Ye,mT,KM-",null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,function(){return[C.nJ]}],
+"13"},"+new DisassemblyEntryElement$created:0:0":1}},"+DisassemblyEntryElement": [83],WZ:{"":"uL+Pi;",$isd3:true}}],["error_view_element","package:observatory/src/observatory_elements/error_view.dart",,F,{I3:{"":["pv;Py%-,hO%-,VJ,Ai,tH-,VJ,Ai,VJ,Ai,ZI,uN,z3,TQ,Vk,Ye,mT,KM-",null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,function(){return[C.nJ]}],
gkc:function(a){return a.Py
-"8,35,36"},
+"8,38,39"},
"+error":1,
-skc:function(a,b){a.Py=this.ct(a,C.yh,a.Py,b)
-"37,28,8,35"},
+skc:function(a,b){a.Py=this.pD(a,C.YU,a.Py,b)
+"40,31,8,38"},
"+error=":1,
gVB:function(a){return a.hO
-"37,35,36"},
+"40,38,39"},
"+error_obj":1,
-sVB:function(a,b){a.hO=this.ct(a,C.Yn,a.hO,b)
-"37,28,37,35"},
+sVB:function(a,b){a.hO=this.pD(a,C.Yn,a.hO,b)
+"40,31,40,38"},
"+error_obj=":1,
"@":function(){return[C.uW]},
static:{TW:function(a){var z,y,x,w,v
@@ -16234,14 +15749,35 @@
C.OD.ZL(a)
C.OD.FH(a)
return a
-"14"},"+new ErrorViewElement$created:0:0":1}},"+ErrorViewElement": [81],pv:{"":"uL+Pi;",$isd3:true}}],["field_view_element","package:observatory/src/observatory_elements/field_view.dart",,A,{Gk:{"":["Vfx;vt%-,VJ,Ai,hm-,VJ,Ai,VJ,Ai,ZI,uN,z3,TQ,Vk,Ye,mT,KM-",null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,function(){return[C.nJ]}],
-gt0:function(a){return a.vt
-"34,35,36"},
+"14"},"+new ErrorViewElement$created:0:0":1}},"+ErrorViewElement": [84],pv:{"":"uL+Pi;",$isd3:true}}],["field_ref_element","package:observatory/src/observatory_elements/field_ref.dart",,D,{qr:{"":["Vfx;Lf%-,VJ,Ai,tH-,VJ,Ai,VJ,Ai,ZI,uN,z3,TQ,Vk,Ye,mT,KM-",null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,function(){return[C.nJ]}],
+gt0:function(a){return a.Lf
+"37,38,39"},
"+field":1,
-st0:function(a,b){a.vt=this.ct(a,C.WQ,a.vt,b)
-"37,28,34,35"},
+st0:function(a,b){a.Lf=this.pD(a,C.WQ,a.Lf,b)
+"40,31,37,38"},
"+field=":1,
-"@":function(){return[C.mv]},
+"@":function(){return[C.ht]},
+static:{ip:function(a){var z,y,x,w,v
+z=$.Nd()
+y=P.Py(null,null,null,J.O,W.I0)
+x=J.O
+w=W.cv
+v=new V.br(P.Py(null,null,null,x,w),null,null)
+H.VM(v,[x,w])
+a.Ye=z
+a.mT=y
+a.KM=v
+C.WR.ZL(a)
+C.WR.FH(a)
+return a
+"15"},"+new FieldRefElement$created:0:0":1}},"+FieldRefElement": [85],Vfx:{"":"uL+Pi;",$isd3:true}}],["field_view_element","package:observatory/src/observatory_elements/field_view.dart",,A,{Gk:{"":["Dsd;vt%-,VJ,Ai,tH-,VJ,Ai,VJ,Ai,ZI,uN,z3,TQ,Vk,Ye,mT,KM-",null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,function(){return[C.nJ]}],
+gt0:function(a){return a.vt
+"37,38,39"},
+"+field":1,
+st0:function(a,b){a.vt=this.pD(a,C.WQ,a.vt,b)
+"40,31,37,38"},
+"+field=":1,
+"@":function(){return[C.Tq]},
static:{cY:function(a){var z,y,x,w,v
z=$.Nd()
y=P.Py(null,null,null,J.O,W.I0)
@@ -16255,12 +15791,12 @@
C.lS.ZL(a)
C.lS.FH(a)
return a
-"15"},"+new FieldViewElement$created:0:0":1}},"+FieldViewElement": [82],Vfx:{"":"uL+Pi;",$isd3:true}}],["function_view_element","package:observatory/src/observatory_elements/function_view.dart",,N,{Ds:{"":["Dsd;ql%-,VJ,Ai,hm-,VJ,Ai,VJ,Ai,ZI,uN,z3,TQ,Vk,Ye,mT,KM-",null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,function(){return[C.nJ]}],
+"16"},"+new FieldViewElement$created:0:0":1}},"+FieldViewElement": [86],Dsd:{"":"uL+Pi;",$isd3:true}}],["function_view_element","package:observatory/src/observatory_elements/function_view.dart",,N,{Ds:{"":["tuj;ql%-,VJ,Ai,tH-,VJ,Ai,VJ,Ai,ZI,uN,z3,TQ,Vk,Ye,mT,KM-",null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,function(){return[C.nJ]}],
gMj:function(a){return a.ql
-"34,35,36"},
+"37,38,39"},
"+function":1,
-sMj:function(a,b){a.ql=this.ct(a,C.nf,a.ql,b)
-"37,28,34,35"},
+sMj:function(a,b){a.ql=this.pD(a,C.nf,a.ql,b)
+"40,31,37,38"},
"+function=":1,
"@":function(){return[C.Uc]},
static:{p7:function(a){var z,y,x,w,v
@@ -16276,10 +15812,82 @@
C.PJ.ZL(a)
C.PJ.FH(a)
return a
-"16"},"+new FunctionViewElement$created:0:0":1}},"+FunctionViewElement": [83],Dsd:{"":"uL+Pi;",$isd3:true}}],["html_common","dart:html_common",,P,{jD:function(a){return P.Wu(a.getTime(),!0)},o7:function(a,b){var z=[]
+"17"},"+new FunctionViewElement$created:0:0":1}},"+FunctionViewElement": [87],tuj:{"":"uL+Pi;",$isd3:true}}],["html_common","dart:html_common",,P,{jD:function(a){return P.Wu(a.getTime(),!0)},bL:function(a){var z,y
+z=[]
+y=new P.Tm(new P.aI([],z),new P.rG(z),new P.yh(z)).call$1(a)
+new P.wO().call$0()
+return y},o7:function(a,b){var z=[]
return new P.xL(b,new P.CA([],z),new P.YL(z),new P.KC(z)).call$1(a)},dg:function(){if($.L4==null)$.L4=J.Vw(window.navigator.userAgent,"Opera",0)
return $.L4},F7:function(){if($.PN==null)$.PN=P.dg()!==!0&&J.Vw(window.navigator.userAgent,"WebKit",0)
-return $.PN},CA:{"":"Tp;a,b",
+return $.PN},aI:{"":"Tp;b,c",
+call$1:function(a){var z,y,x,w
+z=this.b
+y=z.length
+for(x=0;x<y;++x){w=z[x]
+if(w==null?a==null:w===a)return x}z.push(a)
+this.c.push(null)
+return y},
+"+call:1:0":0,
+$isEH:true,
+$is_HB:true,
+$is_Dv:true},rG:{"":"Tp;d",
+call$1:function(a){var z=this.d
+if(a>>>0!==a||a>=z.length)throw H.e(z,a)
+return z[a]},
+"+call:1:0":0,
+$isEH:true,
+$is_HB:true,
+$is_Dv:true},yh:{"":"Tp;e",
+call$2:function(a,b){var z=this.e
+if(a>>>0!==a||a>=z.length)throw H.e(z,a)
+z[a]=b},
+"+call:2:0":0,
+$isEH:true,
+$is_bh:true},wO:{"":"Tp;",
+call$0:function(){},
+"+call:0:0":0,
+$isEH:true,
+$is_X0:true},Tm:{"":"Tp;f,g,h",
+call$1:function(a){var z,y,x,w,v,u,t
+z={}
+if(a==null)return a
+if(typeof a==="boolean")return a
+if(typeof a==="number")return a
+if(typeof a==="string")return a
+y=J.x(a)
+if(typeof a==="object"&&a!==null&&!!y.$isiP)return new Date(a.rq)
+if(typeof a==="object"&&a!==null&&!!y.$iscT)throw H.b(P.SY("structured clone of RegExp"))
+if(typeof a==="object"&&a!==null&&!!y.$isT5)return a
+if(typeof a==="object"&&a!==null&&!!y.$isAz)return a
+if(typeof a==="object"&&a!==null&&!!y.$isSg)return a
+if(typeof a==="object"&&a!==null&&!!y.$isI2)return a
+if(typeof a==="object"&&a!==null&&!!y.$isAS)return a
+if(typeof a==="object"&&a!==null&&!!y.$isL8){x=this.f.call$1(a)
+z.a=this.g.call$1(x)
+w=z.a
+if(w!=null)return w
+z.a={}
+this.h.call$2(x,z.a)
+y.aN(a,new P.rz(z,this))
+return z.a}if(typeof a==="object"&&a!==null&&(a.constructor===Array||!!y.$isList)){v=y.gB(a)
+x=this.f.call$1(a)
+u=this.g.call$1(x)
+if(u!=null){if(!0===u){u=new Array(v)
+this.h.call$2(x,u)}return u}u=new Array(v)
+this.h.call$2(x,u)
+if(typeof v!=="number")throw H.s(v)
+t=0
+for(;t<v;++t){z=this.call$1(y.t(a,t))
+if(t>=u.length)throw H.e(u,t)
+u[t]=z}return u}throw H.b(P.SY("structured clone of other type"))},
+"+call:1:0":0,
+$isEH:true,
+$is_HB:true,
+$is_Dv:true},rz:{"":"Tp;a,i",
+call$2:function(a,b){this.a.a[a]=this.i.call$1(b)},
+"+call:2:0":0,
+$isEH:true,
+$is_bh:true},CA:{"":"Tp;a,b",
call$1:function(a){var z,y,x,w
z=this.a
y=z.length
@@ -16335,7 +15943,6 @@
$is_Dv:true},As:{"":"a;",
bu:function(a){var z=this.lF()
return z.zV(z," ")},
-"+toString:0:0":0,
gA:function(a){var z=this.lF()
z=new P.zQ(z,z.zN,null,null)
H.VM(z,[null])
@@ -16393,9 +16000,51 @@
"+call:1:0":0,
$isEH:true,
$is_HB:true,
-$is_Dv:true}}],["isolate_list_element","package:observatory/src/observatory_elements/isolate_list.dart",,L,{u7:{"":["uL;hm-,VJ,Ai,VJ,Ai,ZI,uN,z3,TQ,Vk,Ye,mT,KM-",null,null,null,null,null,null,null,null,null,null,null,null,function(){return[C.nJ]}],
+$is_Dv:true}}],["instance_ref_element","package:observatory/src/observatory_elements/instance_ref.dart",,B,{pR:{"":["Vct;iK%-,VJ,Ai,tH-,VJ,Ai,VJ,Ai,ZI,uN,z3,TQ,Vk,Ye,mT,KM-",null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,function(){return[C.nJ]}],
+ghf:function(a){return a.iK
+"37,38,39"},
+"+instance":1,
+shf:function(a,b){a.iK=this.pD(a,C.fn,a.iK,b)
+"40,31,37,38"},
+"+instance=":1,
+"@":function(){return[C.ay]},
+static:{lu:function(a){var z,y,x,w,v
+z=$.Nd()
+y=P.Py(null,null,null,J.O,W.I0)
+x=J.O
+w=W.cv
+v=new V.br(P.Py(null,null,null,x,w),null,null)
+H.VM(v,[x,w])
+a.Ye=z
+a.mT=y
+a.KM=v
+C.cp.ZL(a)
+C.cp.FH(a)
+return a
+"18"},"+new InstanceRefElement$created:0:0":1}},"+InstanceRefElement": [88],Vct:{"":"uL+Pi;",$isd3:true}}],["instance_view_element","package:observatory/src/observatory_elements/instance_view.dart",,Z,{hx:{"":["D13;Xh%-,VJ,Ai,tH-,VJ,Ai,VJ,Ai,ZI,uN,z3,TQ,Vk,Ye,mT,KM-",null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,function(){return[C.nJ]}],
+ghf:function(a){return a.Xh
+"37,38,39"},
+"+instance":1,
+shf:function(a,b){a.Xh=this.pD(a,C.fn,a.Xh,b)
+"40,31,37,38"},
+"+instance=":1,
+"@":function(){return[C.ql]},
+static:{HC:function(a){var z,y,x,w,v
+z=$.Nd()
+y=P.Py(null,null,null,J.O,W.I0)
+x=J.O
+w=W.cv
+v=new V.br(P.Py(null,null,null,x,w),null,null)
+H.VM(v,[x,w])
+a.Ye=z
+a.mT=y
+a.KM=v
+C.yK.ZL(a)
+C.yK.FH(a)
+return a
+"19"},"+new InstanceViewElement$created:0:0":1}},"+InstanceViewElement": [89],D13:{"":"uL+Pi;",$isd3:true}}],["isolate_list_element","package:observatory/src/observatory_elements/isolate_list.dart",,L,{u7:{"":["uL;tH-,VJ,Ai,VJ,Ai,ZI,uN,z3,TQ,Vk,Ye,mT,KM-",null,null,null,null,null,null,null,null,null,null,null,null,function(){return[C.nJ]}],
"@":function(){return[C.jF]},
-static:{ip:function(a){var z,y,x,w,v
+static:{Tt:function(a){var z,y,x,w,v
z=$.Nd()
y=P.Py(null,null,null,J.O,W.I0)
x=J.O
@@ -16408,18 +16057,18 @@
C.Dh.ZL(a)
C.Dh.FH(a)
return a
-"17"},"+new IsolateListElement$created:0:0":1}},"+IsolateListElement": [24]}],["isolate_summary_element","package:observatory/src/observatory_elements/isolate_summary.dart",,D,{St:{"":["tuj;Pw%-,i0%-,VJ,Ai,hm-,VJ,Ai,VJ,Ai,ZI,uN,z3,TQ,Vk,Ye,mT,KM-",null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,function(){return[C.nJ]}],
+"20"},"+new IsolateListElement$created:0:0":1}},"+IsolateListElement": [27]}],["isolate_summary_element","package:observatory/src/observatory_elements/isolate_summary.dart",,D,{St:{"":["WZq;Pw%-,i0%-,VJ,Ai,tH-,VJ,Ai,VJ,Ai,ZI,uN,z3,TQ,Vk,Ye,mT,KM-",null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,function(){return[C.nJ]}],
gF1:function(a){return a.Pw
-"27,35,36"},
+"30,38,39"},
"+isolate":1,
-sF1:function(a,b){a.Pw=this.ct(a,C.Y2,a.Pw,b)
-"37,28,27,35"},
+sF1:function(a,b){a.Pw=this.pD(a,C.Y2,a.Pw,b)
+"40,31,30,38"},
"+isolate=":1,
goc:function(a){return a.i0
-"8,35,36"},
+"8,38,39"},
"+name":1,
-soc:function(a,b){a.i0=this.ct(a,C.YS,a.i0,b)
-"37,28,8,35"},
+soc:function(a,b){a.i0=this.pD(a,C.YS,a.i0,b)
+"40,31,8,38"},
"+name=":1,
"@":function(){return[C.aM]},
static:{N5:function(a){var z,y,x,w,v
@@ -16436,19 +16085,19 @@
C.nM.ZL(a)
C.nM.FH(a)
return a
-"18"},"+new IsolateSummaryElement$created:0:0":1}},"+IsolateSummaryElement": [84],tuj:{"":"uL+Pi;",$isd3:true}}],["json_view_element","package:observatory/src/observatory_elements/json_view.dart",,Z,{vj:{"":["Vct;eb%-,kf%-,VJ,Ai,hm-,VJ,Ai,VJ,Ai,ZI,uN,z3,TQ,Vk,Ye,mT,KM-",null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,function(){return[C.nJ]}],
+"21"},"+new IsolateSummaryElement$created:0:0":1}},"+IsolateSummaryElement": [90],WZq:{"":"uL+Pi;",$isd3:true}}],["json_view_element","package:observatory/src/observatory_elements/json_view.dart",,Z,{vj:{"":["pva;eb%-,kf%-,VJ,Ai,tH-,VJ,Ai,VJ,Ai,ZI,uN,z3,TQ,Vk,Ye,mT,KM-",null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,function(){return[C.nJ]}],
gTn:function(a){return a.eb
-"37,35,36"},
+"40,38,39"},
"+json":1,
-sTn:function(a,b){a.eb=this.ct(a,C.Gd,a.eb,b)
-"37,28,37,35"},
+sTn:function(a,b){a.eb=this.pD(a,C.Gd,a.eb,b)
+"40,31,40,38"},
"+json=":1,
i4:function(a){Z.uL.prototype.i4.call(this,a)
a.kf=0
-"37"},
+"40"},
"+enteredView:0:0":1,
-yC:function(a,b){this.ct(a,C.eR,"a","b")
-"37,85,37"},
+yC:function(a,b){this.pD(a,C.eR,"a","b")
+"40,91,40"},
"+jsonChanged:1:0":1,
gE8:function(a){return J.AG(a.eb)
"8"},
@@ -16464,24 +16113,24 @@
gFe:function(a){var z=a.kf
a.kf=J.WB(z,1)
return z
-"27"},
+"30"},
"+counter":1,
gqC:function(a){var z,y
z=a.eb
y=J.x(z)
if(typeof z==="object"&&z!==null&&(z.constructor===Array||!!y.$isList))return z
return[]
-"67"},
+"70"},
"+list":1,
gvc:function(a){var z,y
z=a.eb
y=J.RE(z)
if(typeof z==="object"&&z!==null&&!!y.$isL8)return J.qA(y.gvc(z))
return[]
-"67"},
+"70"},
"+keys":1,
r6:function(a,b){return J.UQ(a.eb,b)
-"37,75,8"},
+"40,78,8"},
"+value:1:0":1,
gP:function(a){return new P.C7(this,Z.vj.prototype.r6,a,"r6")},
"@":function(){return[C.HN]},
@@ -16500,14 +16149,14 @@
C.GB.ZL(a)
C.GB.FH(a)
return a
-"19"},"+new JsonViewElement$created:0:0":1}},"+JsonViewElement": [86],Vct:{"":"uL+Pi;",$isd3:true}}],["library_view_element","package:observatory/src/observatory_elements/library_view.dart",,M,{CX:{"":["D13;iI%-,VJ,Ai,hm-,VJ,Ai,VJ,Ai,ZI,uN,z3,TQ,Vk,Ye,mT,KM-",null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,function(){return[C.nJ]}],
+"22"},"+new JsonViewElement$created:0:0":1}},"+JsonViewElement": [92],pva:{"":"uL+Pi;",$isd3:true}}],["library_view_element","package:observatory/src/observatory_elements/library_view.dart",,M,{CX:{"":["cda;iI%-,VJ,Ai,tH-,VJ,Ai,VJ,Ai,ZI,uN,z3,TQ,Vk,Ye,mT,KM-",null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,function(){return[C.nJ]}],
gtD:function(a){return a.iI
-"34,35,36"},
+"37,38,39"},
"+library":1,
-stD:function(a,b){a.iI=this.ct(a,C.EV,a.iI,b)
-"37,28,34,35"},
+stD:function(a,b){a.iI=this.pD(a,C.EV,a.iI,b)
+"40,31,37,38"},
"+library=":1,
-"@":function(){return[C.Ob]},
+"@":function(){return[C.Oy]},
static:{SP:function(a){var z,y,x,w,v,u
z=H.B7([],P.L5(null,null,null,null,null))
z=R.Jk(z)
@@ -16524,7 +16173,7 @@
C.MG.ZL(a)
C.MG.FH(a)
return a
-"20"},"+new LibraryViewElement$created:0:0":1}},"+LibraryViewElement": [87],D13:{"":"uL+Pi;",$isd3:true}}],["logging","package:logging/logging.dart",,N,{TJ:{"":"a;oc>,eT>,yz,Cj>,wd,Gs",
+"23"},"+new LibraryViewElement$created:0:0":1}},"+LibraryViewElement": [93],cda:{"":"uL+Pi;",$isd3:true}}],["logging","package:logging/logging.dart",,N,{TJ:{"":"a;oc>,eT>,yz,Cj>,wd,Gs",
gB8:function(){var z,y,x
z=this.eT
y=z==null||J.xC(J.DA(z),"")
@@ -16574,7 +16223,6 @@
if(b==null)return!1
z=J.x(b)
return typeof b==="object"&&b!==null&&!!z.$isNg&&this.P===b.P},
-"+==:1:0":0,
C:function(a,b){var z=J.Vm(b)
if(typeof z!=="number")throw H.s(z)
return this.P<z},
@@ -16591,21 +16239,18 @@
if(typeof z!=="number")throw H.s(z)
return this.P-z},
giO:function(a){return this.P},
-"+hashCode":0,
bu:function(a){return this.oc},
-"+toString:0:0":0,
$isNg:true,
-static:{"":"bR,tm,pR,X8,IQ,Pk,Eb,BC,JY,bo",}},HV:{"":"a;OR<,G1>,iJ,Fl,O0,kc>,I4<",
+static:{"":"bR,tm,EL,X8,IQ,Fn,Eb,AN,JY,bo",}},HV:{"":"a;OR<,G1>,iJ,Fl,O0,kc>,I4<",
bu:function(a){return"["+this.OR.oc+"] "+this.iJ+": "+this.G1},
-"+toString:0:0":0,
-static:{"":"xO",}}}],["message_viewer_element","package:observatory/src/observatory_elements/message_viewer.dart",,L,{BK:{"":["uL;XB%-,hm-,VJ,Ai,VJ,Ai,ZI,uN,z3,TQ,Vk,Ye,mT,KM-",null,null,null,null,null,null,null,null,null,null,null,null,null,function(){return[C.nJ]}],
+static:{"":"xO",}}}],["message_viewer_element","package:observatory/src/observatory_elements/message_viewer.dart",,L,{Nh:{"":["uL;XB%-,tH-,VJ,Ai,VJ,Ai,ZI,uN,z3,TQ,Vk,Ye,mT,KM-",null,null,null,null,null,null,null,null,null,null,null,null,null,function(){return[C.nJ]}],
gG1:function(a){return a.XB
-"34,36"},
+"37,39"},
"+message":1,
sG1:function(a,b){a.XB=b
-this.ct(a,C.KY,"",this.gQW(a))
-this.ct(a,C.wt,[],this.glc(a))
-"37,88,34,36"},
+this.pD(a,C.KY,"",this.gQW(a))
+this.pD(a,C.wt,[],this.glc(a))
+"40,94,37,39"},
"+message=":1,
gQW:function(a){var z=a.XB
if(z==null||J.UQ(z,"type")==null)return"Error"
@@ -16615,7 +16260,7 @@
glc:function(a){var z=a.XB
if(z==null||J.UQ(z,"members")==null)return[]
return J.UQ(a.XB,"members")
-"89"},
+"95"},
"+members":1,
"@":function(){return[C.c0]},
static:{rJ:function(a){var z,y,x,w,v
@@ -16631,7 +16276,7 @@
C.Wp.ZL(a)
C.Wp.FH(a)
return a
-"21"},"+new MessageViewerElement$created:0:0":1}},"+MessageViewerElement": [24]}],["metadata","../../../../../../../../../dart/dart-sdk/lib/html/html_common/metadata.dart",,B,{fA:{"":"a;T9,Jt",static:{"":"Xd,en,yS,PZ,xa",}},tz:{"":"a;"},jR:{"":"a;oc>"},PO:{"":"a;"},c5:{"":"a;"}}],["navigation_bar_element","package:observatory/src/observatory_elements/navigation_bar.dart",,Q,{ih:{"":["uL;hm-,VJ,Ai,VJ,Ai,ZI,uN,z3,TQ,Vk,Ye,mT,KM-",null,null,null,null,null,null,null,null,null,null,null,null,function(){return[C.nJ]}],
+"24"},"+new MessageViewerElement$created:0:0":1}},"+MessageViewerElement": [27]}],["metadata","../../../../../../../../../dart/dart-sdk/lib/html/html_common/metadata.dart",,B,{fA:{"":"a;Kr,Jt",static:{"":"Xd,en,yS,PZ,xa",}},tz:{"":"a;"},jR:{"":"a;oc>"},PO:{"":"a;"},c5:{"":"a;"}}],["navigation_bar_element","package:observatory/src/observatory_elements/navigation_bar.dart",,Q,{ih:{"":["uL;tH-,VJ,Ai,VJ,Ai,ZI,uN,z3,TQ,Vk,Ye,mT,KM-",null,null,null,null,null,null,null,null,null,null,null,null,function(){return[C.nJ]}],
"@":function(){return[C.KG]},
static:{BW:function(a){var z,y,x,w,v
z=$.Nd()
@@ -16646,9 +16291,8 @@
C.Xg.ZL(a)
C.Xg.FH(a)
return a
-"22"},"+new NavigationBarElement$created:0:0":1}},"+NavigationBarElement": [24]}],["observatory","package:observatory/observatory.dart",,L,{mL:{"":["Pi;Z6<-,lw<-,nI<-,VJ,Ai",function(){return[C.mI]},function(){return[C.mI]},function(){return[C.mI]},null,null],
-AQ:function(a){return J.UQ(this.nI.gi2(),a)},
-US:function(){var z,y,x
+"25"},"+new NavigationBarElement$created:0:0":1}},"+NavigationBarElement": [27]}],["observatory","package:observatory/observatory.dart",,L,{mL:{"":["Pi;Z6<-,lw<-,nI<-,VJ,Ai",function(){return[C.mI]},function(){return[C.mI]},function(){return[C.mI]},null,null],
+Ey:function(){var z,y,x
z=this.Z6
z.sJR(this)
y=this.lw
@@ -16657,27 +16301,42 @@
x.sJR(this)
y.se0(x.gVY())
z.kI()},
-static:{AK:function(){var z,y
+AQ:function(a){return J.UQ(this.nI.gi2(),a)},
+hq:function(){this.Ey()},
+US:function(){this.Ey()},
+static:{WS:function(){var z,y,x
+z=P.L5(null,null,null,null,null)
+y=R.Jk([])
+y=new L.Rb(z,0,null,null,"http://127.0.0.1:8181",y,null,null)
+z=C.ph.aM(window)
+x=y.gT9()
+x=new W.Ov(0,z.uv,z.Ph,W.aF(x),z.Sg)
+H.VM(x,[H.W8(z,"RO",0)])
+x.Zz()
+x=P.L5(null,null,null,J.im,L.bv)
+z=R.Jk(x)
+z=new L.mL(new L.dZ(null,"",null,null,null),y,new L.pt(null,z,null,null),null,null)
+z.hq()
+return z},"+new ObservatoryApplication$devtools:0:0":0,AK:function(){var z,y
z=R.Jk([])
y=P.L5(null,null,null,J.im,L.bv)
y=R.Jk(y)
y=new L.mL(new L.dZ(null,"",null,null,null),new L.jI(null,null,"http://127.0.0.1:8181",z,null,null),new L.pt(null,y,null,null),null,null)
y.US()
-return y}}},bv:{"":["Pi;nk,YG,XR<-,VJ,Ai",null,null,function(){return[C.mI]},null,null],
+return y}}},bv:{"":["Pi;nk,SS,XR<-,VJ,Ai",null,null,function(){return[C.mI]},null,null],
gjO:function(a){return this.nk
-"27,35,40"},
+"30,38,43"},
"+id":1,
sjO:function(a,b){this.nk=F.Wi(this,C.EN,this.nk,b)
-"37,28,27,35"},
+"40,31,30,38"},
"+id=":1,
-goc:function(a){return this.YG
-"8,35,40"},
+goc:function(a){return this.SS
+"8,38,43"},
"+name":1,
-soc:function(a,b){this.YG=F.Wi(this,C.YS,this.YG,b)
-"37,28,8,35"},
+soc:function(a,b){this.SS=F.Wi(this,C.YS,this.SS,b)
+"40,31,8,38"},
"+name=":1,
-bu:function(a){return H.d(this.nk)+" "+H.d(this.YG)},
-"+toString:0:0":0,
+bu:function(a){return H.d(this.nk)+" "+H.d(this.SS)},
$isbv:true},pt:{"":["Pi;JR?,i2<-,VJ,Ai",null,function(){return[C.mI]},null,null],
yi:function(){J.kH(this.JR.lw.gn2(),new L.dY(this))},
gVY:function(){return new P.Ip(this,L.pt.prototype.yi,null,"yi")},
@@ -16728,16 +16387,16 @@
$is_HB:true,
$is_Dv:true},dZ:{"":"Pi;JR?,IT,Jj,VJ,Ai",
gzd:function(){return this.IT
-"8,35,40"},
+"8,38,43"},
"+currentHash":1,
szd:function(a){this.IT=F.Wi(this,C.h1,this.IT,a)
-"37,28,8,35"},
+"40,31,8,38"},
"+currentHash=":1,
glD:function(){return this.Jj
-"90,35,40"},
+"96,38,43"},
"+currentHashUri":1,
slD:function(a){this.Jj=F.Wi(this,C.tv,this.Jj,a)
-"37,28,90,35"},
+"40,31,96,38"},
"+currentHashUri=":1,
kI:function(){var z,y
z=C.PP.aM(window)
@@ -16779,35 +16438,35 @@
PI:function(a){var z=this.R6()
if(J.xC(z,0))return"#/isolates/"
return"#/isolates/"+H.d(z)+"/"+H.d(a)
-"8,91,8,40"},
+"8,97,8,43"},
"+currentIsolateRelativeLink:1:0":1,
Ao:function(a){var z=this.R6()
if(J.xC(z,0))return"#/isolates/"
return"#/isolates/"+H.d(z)+"/objects/"+H.d(a)
-"8,92,27,40"},
+"8,98,30,43"},
"+currentIsolateObjectLink:1:0":1,
dL:function(a){var z=this.R6()
if(J.xC(z,0))return"#/isolates/"
return"#/isolates/"+H.d(z)+"/classes/"+H.d(a)
-"8,93,27,40"},
+"8,99,30,43"},
"+currentIsolateClassLink:1:0":1,
WW:function(a,b){var z=this.R6()
if(J.xC(z,0))return"#/isolates/"
return this.yX(z,a,b)
-"8,92,27,7,8,40"},
+"8,98,30,7,8,43"},
"+currentIsolateScriptLink:2:0":1,
r4:function(a,b){return"#/isolates/"+H.d(a)+"/"+H.d(b)
-"8,94,27,91,8,40"},
+"8,100,30,97,8,43"},
"+relativeLink:2:0":1,
Dd:function(a,b){return"#/isolates/"+H.d(a)+"/objects/"+H.d(b)
-"8,94,27,92,27,40"},
+"8,100,30,98,30,43"},
"+objectLink:2:0":1,
bD:function(a,b){return"#/isolates/"+H.d(a)+"/classes/"+H.d(b)
-"8,94,27,93,27,40"},
+"8,100,30,99,30,43"},
"+classLink:2:0":1,
yX:function(a,b,c){var z=P.jW(C.kg,c,!0)
return"#/isolates/"+H.d(a)+"/objects/"+H.d(b)+"?type=Script&name="+z
-"8,94,27,92,27,7,8,40"},
+"8,100,30,98,30,7,8,43"},
"+scriptLink:3:0":1,
static:{"":"kx,K3D,qY",}},Qe:{"":"Tp;a",
call$1:function(a){var z=this.a
@@ -16819,16 +16478,16 @@
$is_Dv:true},Nu:{"":"Pi;JR?,e0?",
pG:function(){return this.e0.call$0()},
gEI:function(){return this.oJ
-"8,35,40"},
+"8,38,43"},
"+prefix":1,
sEI:function(a){this.oJ=F.Wi(this,C.qb,this.oJ,a)
-"37,28,8,35"},
+"40,31,8,38"},
"+prefix=":1,
gn2:function(){return this.vm
-"89,35,40"},
+"95,38,43"},
"+responses":1,
sn2:function(a){this.vm=F.Wi(this,C.wH,this.vm,a)
-"37,28,89,35"},
+"40,31,95,38"},
"+responses=":1,
Qn:function(a){var z,y
z=C.lM.kV(a)
@@ -16864,7 +16523,11 @@
$isEH:true,
$is_HB:true,
$is_Dv:true},nu:{"":"Tp;d",
-call$1:function(a){this.d.AI(J.l2(a))},
+call$1:function(a){var z,y
+z=J.RE(a)
+y=this.d
+if(typeof a==="object"&&a!==null&&!!z.$isaE)y.AI(a.G1)
+else y.AI(z.gN(a))},
"+call:1:0":0,
$isEH:true,
$is_HB:true,
@@ -16882,15 +16545,42 @@
$isEH:true,
$is_HB:true,
$is_Dv:true},jI:{"":"Nu;JR,e0,oJ,vm,VJ,Ai",
-ym:function(a,b){return W.It(J.WB(this.oJ,b),null,null)}},Zw:{"":["Pi;Rd,n7,LA>-,Vg,VJ,Ai",null,null,function(){return[C.mI]},null,null,null],
-gCt:function(){return this.Vg
-"8,35,40"},
+ym:function(a,b){return W.It(J.WB(this.oJ,b),null,null)}},Rb:{"":"Nu;Hr,Oy,JR,e0,oJ,vm,VJ,Ai",
+Vc:function(a){var z,y,x,w,v
+z=J.RE(a)
+y=J.UQ(z.gRn(a),"id")
+x=J.UQ(z.gRn(a),"name")
+w=J.UQ(z.gRn(a),"data")
+if(!J.xC(x,"observatoryData"))return
+P.JS("Got reply "+H.d(y)+" "+H.d(w))
+z=this.Hr
+v=z.t(z,y)
+if(v!=null){z.Rz(z,y)
+P.JS("Completing "+H.d(y))
+J.Xf(v,w)}else P.JS("Could not find completer for "+H.d(y))},
+gT9:function(){return new H.Pm(this,L.Rb.prototype.Vc,null,"Vc")},
+ym:function(a,b){var z,y,x,w
+z=""+this.Oy
+y=H.B7([],P.L5(null,null,null,null,null))
+y.u(y,"id",z)
+y.u(y,"method","observatoryQuery")
+y.u(y,"query",b)
+this.Oy=this.Oy+1
+x=null
+w=new P.Zf(P.Dt(x))
+H.VM(w,[x])
+x=this.Hr
+x.u(x,z,w)
+J.Ih(W.uV(window.parent),C.lM.KP(y),"*")
+return w.MM}},Zw:{"":["Pi;Rd,n7,LA>-,Vg,VJ,Ai",null,null,function(){return[C.mI]},null,null,null],
+geV:function(){return this.Vg
+"8,38,43"},
"+paddedLine":1,
-sCt:function(a){var z=this.Vg
+seV:function(a){var z=this.Vg
if(this.gUV(this)&&!J.xC(z,a)){z=new T.qI(this,C.X9,z,a)
z.$builtinTypeInfo=[null]
this.SZ(this,z)}this.Vg=a
-"37,28,8,35"},
+"40,31,8,38"},
"+paddedLine=":1,
QQ:function(a,b,c){var z,y,x,w,v
z=""+this.Rd
@@ -16904,22 +16594,22 @@
z.QQ(a,b,c)
return z}}},Pf:{"":"Pi;WF,uM,ZQ,VJ,Ai",
gfY:function(a){return this.WF
-"8,35,40"},
+"8,38,43"},
"+kind":1,
sfY:function(a,b){this.WF=F.Wi(this,C.fy,this.WF,b)
-"37,28,8,35"},
+"40,31,8,38"},
"+kind=":1,
gO3:function(a){return this.uM
-"8,35,40"},
+"8,38,43"},
"+url":1,
sO3:function(a,b){this.uM=F.Wi(this,C.Fh,this.uM,b)
-"37,28,8,35"},
+"40,31,8,38"},
"+url=":1,
gXJ:function(){return this.ZQ
-"95,35,40"},
+"101,38,43"},
"+lines":1,
sXJ:function(a){this.ZQ=F.Wi(this,C.Cv,this.ZQ,a)
-"37,28,95,35"},
+"40,31,101,38"},
"+lines=":1,
Cn:function(a){var z,y,x,w,v
z=J.uH(a,"\n")
@@ -16928,7 +16618,6 @@
v=L.il(w,y,z[x])
J.bi(this.ZQ,v)}},
bu:function(a){return"ScriptSource"},
-"+toString:0:0":0,
EQ:function(a){var z,y
z=J.U6(a)
y=z.t(a,"kind")
@@ -16940,10 +16629,17 @@
static:{Sp:function(a){var z=R.Jk([])
z=new L.Pf("","",z,null,null)
z.EQ(a)
-return z}}}}],["observatory_application_element","package:observatory/src/observatory_elements/observatory_application.dart",,V,{F1:{"":["uL;hm-,VJ,Ai,VJ,Ai,ZI,uN,z3,TQ,Vk,Ye,mT,KM-",null,null,null,null,null,null,null,null,null,null,null,null,function(){return[C.nJ]}],
-ZB:function(a){var z=L.AK()
-a.hm=this.ct(a,C.wh,a.hm,z)
-"37"},
+return z}}}}],["observatory_application_element","package:observatory/src/observatory_elements/observatory_application.dart",,V,{F1:{"":["waa;k5%-,VJ,Ai,tH-,VJ,Ai,VJ,Ai,ZI,uN,z3,TQ,Vk,Ye,mT,KM-",null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,function(){return[C.nJ]}],
+gzj:function(a){return a.k5
+"44,38,39"},
+"+devtools":1,
+szj:function(a,b){a.k5=this.pD(a,C.Na,a.k5,b)
+"40,31,44,38"},
+"+devtools=":1,
+ZB:function(a){var z
+if(a.k5===!0){z=L.WS()
+a.tH=this.pD(a,C.wh,a.tH,z)}else{z=L.AK()
+a.tH=this.pD(a,C.wh,a.tH,z)}"40"},
"@":function(){return[C.bd]},
static:{fv:function(a){var z,y,x,w,v
z=$.Nd()
@@ -16952,6 +16648,7 @@
w=W.cv
v=new V.br(P.Py(null,null,null,x,w),null,null)
H.VM(v,[x,w])
+a.k5=!1
a.Ye=z
a.mT=y
a.KM=v
@@ -16959,21 +16656,21 @@
C.k0.FH(a)
C.k0.ZB(a)
return a
-"23"},"+new ObservatoryApplicationElement$created:0:0":1}},"+ObservatoryApplicationElement": [24]}],["observatory_element","package:observatory/src/observatory_elements/observatory_element.dart",,Z,{uL:{"":["Xf;hm%-,VJ,Ai,VJ,Ai,ZI,uN,z3,TQ,Vk,Ye,mT,KM-",null,null,null,null,null,null,null,null,null,null,null,null,function(){return[C.nJ]}],
+"26"},"+new ObservatoryApplicationElement$created:0:0":1}},"+ObservatoryApplicationElement": [102],waa:{"":"uL+Pi;",$isd3:true}}],["observatory_element","package:observatory/src/observatory_elements/observatory_element.dart",,Z,{uL:{"":["Nr;tH%-,VJ,Ai,VJ,Ai,ZI,uN,z3,TQ,Vk,Ye,mT,KM-",null,null,null,null,null,null,null,null,null,null,null,null,function(){return[C.nJ]}],
i4:function(a){A.dM.prototype.i4.call(this,a)
-"37"},
+"40"},
"+enteredView:0:0":1,
Nz:function(a){A.dM.prototype.Nz.call(this,a)
-"37"},
+"40"},
"+leftView:0:0":1,
-gQG:function(a){return a.hm
-"96,35,36"},
+gQG:function(a){return a.tH
+"103,38,39"},
"+app":1,
-sQG:function(a,b){a.hm=this.ct(a,C.wh,a.hm,b)
-"37,28,96,35"},
+sQG:function(a,b){a.tH=this.pD(a,C.wh,a.tH,b)
+"40,31,103,38"},
"+app=":1,
gpQ:function(a){return!0
-"41"},
+"44"},
"+applyAuthorStyles":1,
"@":function(){return[C.J0]},
static:{Hx:function(a){var z,y,x,w,v
@@ -16989,7 +16686,7 @@
C.mk.ZL(a)
C.mk.FH(a)
return a
-"24"},"+new ObservatoryElement$created:0:0":1}},"+ObservatoryElement": [97],Xf:{"":"ir+Pi;",$isd3:true}}],["observe.src.change_notifier","package:observe/src/change_notifier.dart",,O,{Pi:{"":"a;",
+"27"},"+new ObservatoryElement$created:0:0":1}},"+ObservatoryElement": [104],Nr:{"":"ir+Pi;",$isd3:true}}],["observe.src.change_notifier","package:observe/src/change_notifier.dart",,O,{Pi:{"":"a;",
gqh:function(a){var z,y
if(a.VJ==null){z=this.gqw(a)
a.VJ=P.bK(this.gl1(a),z,!0,null)}z=a.VJ
@@ -17018,7 +16715,7 @@
if(z!=null){y=z.iE
z=y==null?z!=null:y!==z}else z=!1
return z},
-ct:function(a,b,c,d){return F.Wi(a,b,c,d)},
+pD:function(a,b,c,d){return F.Wi(a,b,c,d)},
SZ:function(a,b){var z,y
z=a.VJ
if(z!=null){y=z.iE
@@ -17028,13 +16725,12 @@
P.rb(this.gDx(a))}a.Ai.push(b)},
$isd3:true}}],["observe.src.change_record","package:observe/src/change_record.dart",,T,{yj:{"":"a;",$isyj:true},qI:{"":"yj;WA<,oc>,jL>,zZ>",
bu:function(a){return"#<PropertyChangeRecord "+H.d(this.oc)+" from: "+H.d(this.jL)+" to: "+H.d(this.zZ)+">"},
-"+toString:0:0":0,
$isqI:true}}],["observe.src.compound_path_observer","package:observe/src/compound_path_observer.dart",,Y,{J3:{"":"Pi;b9,kK,Sv,rk,YX,B6,VJ,Ai",
kb:function(a){return this.rk.call$1(a)},
gB:function(a){return this.b9.length},
"+length":0,
gP:function(a){return this.Sv
-"37,35"},
+"40,38"},
"+value":1,
r6:function(a,b){return this.gP(a).call$1(b)},
wE:function(a){var z,y,x,w
@@ -17100,7 +16796,7 @@
$.Td=!1},Ht:function(){var z={}
z.a=!1
z=new O.o5(z)
-return new P.wJ(null,null,null,null,new O.zI(z),new O.bF(z),null,null,null,null,null,null)},o5:{"":"Tp;a",
+return new P.wJ(null,null,null,null,new O.zI(z),new O.id(z),null,null,null,null,null,null)},o5:{"":"Tp;a",
call$2:function(a,b){var z=this.a
if(z.a)return
z.a=!0
@@ -17121,7 +16817,7 @@
return this.f.call$0()},
"+call:0:0":0,
$isEH:true,
-$is_X0:true},bF:{"":"Tp;g",
+$is_X0:true},id:{"":"Tp;g",
call$4:function(a,b,c,d){if(d==null)return d
return new O.iV(this.g,b,c,d)},
"+call:4:0":0,
@@ -17333,14 +17029,13 @@
if(typeof z!=="number")throw H.s(z)
return a<z},
bu:function(a){return"#<ListChangeRecord index: "+H.d(this.jr)+", removed: "+H.d(this.Uj)+", addedCount: "+H.d(this.dM)+">"},
-"+toString:0:0":0,
$isW4:true,
static:{XM:function(a,b,c,d){var z
if(d==null)d=[]
if(c==null)c=0
z=new P.Yp(d)
z.$builtinTypeInfo=[null]
-return new G.W4(a,z,d,b,c)}}}}],["observe.src.metadata","package:observe/src/metadata.dart",,K,{ndx:{"":"a;"},Hm:{"":"a;"}}],["observe.src.observable","package:observe/src/observable.dart",,F,{Wi:function(a,b,c,d){var z,y
+return new G.W4(a,z,d,b,c)}}}}],["observe.src.metadata","package:observe/src/metadata.dart",,K,{Fa:{"":"a;"},x9:{"":"a;"}}],["observe.src.observable","package:observe/src/observable.dart",,F,{Wi:function(a,b,c,d){var z,y
z=J.RE(a)
if(z.gUV(a)&&!J.xC(c,d)){y=new T.qI(a,b,c,d)
H.VM(y,[null])
@@ -17360,14 +17055,13 @@
$isEH:true,
$is_bh:true}}],["observe.src.observable_box","package:observe/src/observable_box.dart",,A,{xh:{"":"Pi;",
gP:function(a){return this.L1
-"98,35"},
+"105,38"},
"+value":1,
r6:function(a,b){return this.gP(a).call$1(b)},
sP:function(a,b){this.L1=F.Wi(this,C.ls,this.L1,b)
-"37,99,98,35"},
+"40,106,105,38"},
"+value=":1,
-bu:function(a){return"#<"+H.d(new H.cu(H.dJ(this),null))+" value: "+H.d(this.L1)+">"},
-"+toString:0:0":0}}],["observe.src.observable_list","package:observe/src/observable_list.dart",,Q,{wn:{"":"uF;b3,xg,h3,VJ,Ai",
+bu:function(a){return"#<"+H.d(new H.cu(H.dJ(this),null))+" value: "+H.d(this.L1)+">"}}}],["observe.src.observable_list","package:observe/src/observable_list.dart",,Q,{wn:{"":"uF;b3,xg,h3,VJ,Ai",
gRT:function(){var z,y
if(this.xg==null)this.xg=P.bK(new Q.cj(this),null,!0,null)
z=this.xg
@@ -17376,21 +17070,18 @@
H.VM(y,[H.W8(z,"WV",0)])
return y},
gB:function(a){return this.h3.length
-"27,35"},
+"30,38"},
"+length":1,
sB:function(a,b){var z,y,x,w,v,u,t
z=this.h3
y=z.length
if(y===b)return
-this.ct(this,C.Wn,y,b)
-x=y===0
-w=J.x(b)
-this.ct(this,C.ai,x,w.n(b,0))
-this.ct(this,C.nZ,!x,!w.n(b,0))
+this.pD(this,C.Wn,y,b)
x=this.xg
-if(x!=null){v=x.iE
-x=v==null?x!=null:v!==x}else x=!1
-if(x)if(w.C(b,y)){if(w.C(b,0)||w.D(b,z.length))H.vh(P.TE(b,0,z.length))
+if(x!=null){w=x.iE
+x=w==null?x!=null:w!==x}else x=!1
+if(x){x=J.Wx(b)
+if(x.C(b,y)){if(x.C(b,0)||x.D(b,z.length))H.vh(P.TE(b,0,z.length))
if(typeof b!=="number")throw H.s(b)
if(y<b||y>z.length)H.vh(P.TE(y,b,z.length))
x=new H.nH(z,b,y)
@@ -17403,17 +17094,17 @@
if(v.D(w,u))H.vh(P.TE(w,0,u))}x=x.br(x)
w=new P.Yp(x)
w.$builtinTypeInfo=[null]
-this.iH(new G.W4(this,w,x,b,0))}else{x=w.W(b,y)
+this.iH(new G.W4(this,w,x,b,0))}else{x=x.W(b,y)
t=[]
w=new P.Yp(t)
w.$builtinTypeInfo=[null]
-this.iH(new G.W4(this,w,t,y,x))}C.Nm.sB(z,b)
-"37,28,27,35"},
+this.iH(new G.W4(this,w,t,y,x))}}C.Nm.sB(z,b)
+"40,31,30,38"},
"+length=":1,
t:function(a,b){var z=this.h3
if(b>>>0!==b||b>=z.length)throw H.e(z,b)
return z[b]
-"100,26,27,35"},
+"107,29,30,38"},
"+[]:1:0":1,
u:function(a,b,c){var z,y,x,w
z=this.h3
@@ -17427,18 +17118,12 @@
w.$builtinTypeInfo=[null]
this.iH(new G.W4(this,w,x,b,1))}if(b>=z.length)throw H.e(z,b)
z[b]=c
-"37,26,27,28,100,35"},
+"40,29,30,31,107,38"},
"+[]=:2:0":1,
-gl0:function(a){return P.lD.prototype.gl0.call(this,this)
-"41,35"},
-"+isEmpty":1,
-gor:function(a){return P.lD.prototype.gor.call(this,this)
-"41,35"},
-"+isNotEmpty":1,
h:function(a,b){var z,y,x,w
z=this.h3
y=z.length
-this.Fg(y,y+1)
+this.pD(this,C.Wn,y,y+1)
x=this.xg
if(x!=null){w=x.iE
x=w==null?x!=null:w!==x}else x=!1
@@ -17448,7 +17133,7 @@
z=this.h3
y=z.length
C.Nm.Ay(z,b)
-this.Fg(y,z.length)
+this.pD(this,C.Wn,y,z.length)
x=z.length-y
z=this.xg
if(z!=null){w=z.iE
@@ -17465,12 +17150,7 @@
x=c-b
w=this.h3
v=w.length
-u=v-x
-this.ct(this,C.Wn,v,u)
-t=v===0
-u=u===0
-this.ct(this,C.ai,t,u)
-this.ct(this,C.nZ,!t,!u)
+this.pD(this,C.Wn,v,v-x)
u=this.xg
if(u!=null){t=u.iE
u=t==null?u!=null:t!==u}else u=!1
@@ -17494,12 +17174,6 @@
if(!z)return
if(this.b3==null){this.b3=[]
P.rb(this.gL6())}this.b3.push(a)},
-Fg:function(a,b){var z,y
-this.ct(this,C.Wn,a,b)
-z=a===0
-y=J.x(b)
-this.ct(this,C.ai,z,y.n(b,0))
-this.ct(this,C.nZ,!z,!y.n(b,0))},
oC:function(){var z,y,x
z=this.b3
if(z==null)return!1
@@ -17530,37 +17204,36 @@
if(this.JD)z="insert"
else z=this.dr?"remove":"set"
return"#<MapChangeRecord "+z+" "+H.d(this.G3)+" from: "+H.d(this.jL)+" to: "+H.d(this.zZ)+">"},
-"+toString:0:0":0,
$isHA:true},br:{"":"Pi;Zp,VJ,Ai",
gvc:function(a){var z=this.Zp
return z.gvc(z)
-"101,35"},
+"108,38"},
"+keys":1,
gUQ:function(a){var z=this.Zp
return z.gUQ(z)
-"102,35"},
+"109,38"},
"+values":1,
gB:function(a){var z=this.Zp
return z.gB(z)
-"27,35"},
+"30,38"},
"+length":1,
gl0:function(a){var z=this.Zp
return z.gB(z)===0
-"41,35"},
+"44,38"},
"+isEmpty":1,
gor:function(a){var z=this.Zp
return z.gB(z)!==0
-"41,35"},
+"44,38"},
"+isNotEmpty":1,
PF:function(a){return this.Zp.PF(a)
-"41,28,0,35"},
+"44,31,0,38"},
"+containsValue:1:0":1,
x4:function(a){return this.Zp.x4(a)
-"41,75,0,35"},
+"44,78,0,38"},
"+containsKey:1:0":1,
t:function(a,b){var z=this.Zp
return z.t(z,b)
-"103,75,0,35"},
+"110,78,0,38"},
"+[]:1:0":1,
u:function(a,b,c){var z,y,x,w,v
z=this.Zp
@@ -17577,7 +17250,7 @@
z.$builtinTypeInfo=[null,null]
this.SZ(this,z)}else if(!J.xC(x,c)){z=new V.HA(b,x,c,!1,!1)
z.$builtinTypeInfo=[null,null]
-this.SZ(this,z)}"37,75,104,28,103,35"},
+this.SZ(this,z)}"40,78,111,31,110,38"},
"+[]=:2:0":1,
Ay:function(a,b){b.aN(b,new V.zT(this))},
Rz:function(a,b){var z,y,x,w,v
@@ -17594,7 +17267,6 @@
aN:function(a,b){var z=this.Zp
return z.aN(z,b)},
bu:function(a){return P.vW(this)},
-"+toString:0:0":0,
$asL8:null,
$isL8:true,
static:{WF:function(a,b,c){var z=V.Bq(a,b,c)
@@ -17678,7 +17350,7 @@
if(0>=a.length)throw H.e(a,0)
if(a[0]===".")return!1
return $.tN().zD(a)},D7:{"":"Pi;Ii>,YB,BK,kN,cs,cT,VJ,Ai",
-AR:function(a){return this.cT.call$1(a)},
+E4:function(a){return this.cT.call$1(a)},
gWA:function(){var z=this.kN
if(0>=z.length)throw H.e(z,0)
return z[0]},
@@ -17689,7 +17361,7 @@
z=y==null?z!=null:y!==z}else z=!1
if(!z)this.ov()
return C.Nm.grZ(this.kN)
-"37,35"},
+"40,38"},
"+value":1,
r6:function(a,b){return this.gP(a).call$1(b)},
sP:function(a,b){var z,y,x,w
@@ -17707,7 +17379,7 @@
if(w>=z.length)throw H.e(z,w)
if(L.h6(x,z[w],b)){z=this.kN
if(y>=z.length)throw H.e(z,y)
-z[y]=b}"37,99,0,35"},
+z[y]=b}"40,106,0,38"},
"+value=":1,
w3:function(a){O.Pi.prototype.w3.call(this,this)
this.ov()
@@ -17732,7 +17404,7 @@
v=v[w]
if(w>=z.length)throw H.e(z,w)
u=L.yf(v,z[w])
-if(w===y&&x)u=this.AR(u)
+if(w===y&&x)u=this.E4(u)
v=this.kN;++w
if(w>=v.length)throw H.e(v,w)
v[w]=u}},
@@ -17747,7 +17419,7 @@
t=t[w]
if(w>=z.length)throw H.e(z,w)
u=L.yf(t,z[w])
-if(w===y&&x)u=this.AR(u)
+if(w===y&&x)u=this.E4(u)
if(v==null?u==null:v===u){this.Rl(a,w)
return}t=this.kN
if(s>=t.length)throw H.e(t,s)
@@ -18007,7 +17679,6 @@
if(!y.gA(y).G())return
return J.UQ(y.gFV(y),0)},
bu:function(a){return this.goc(this)},
-"+toString:0:0":0,
static:{"":"ak<",}},BE:{"":"OO;oc>,mI<,DF<,nK<,Ew<,TL"},Qb:{"":"OO;oc>,mI<,DF<,nK<,Ew<,TL"},xI:{"":"OO;oc>,mI<,DF<,nK<,Ew<,TL<,qW"},q1:{"":"a;S,SF,aA,dY,Yj",
IV:function(){var z,y
z=this.Yj
@@ -18030,8 +17701,7 @@
w=v[x]
w=typeof w==="string"?w:H.d(w)
z.vM=z.vM+w}z.KF(C.Nm.grZ(y))
-return z.vM},
-"+toString:0:0":0},"":"O3<"}],["polymer","package:polymer/polymer.dart",,A,{JX:function(){var z,y
+return z.vM}},"":"O3<"}],["polymer","package:polymer/polymer.dart",,A,{JX:function(){var z,y
z=document.createElement("style",null)
z.textContent=".polymer-veiled { opacity: 0; } \n.polymer-unveil{ -webkit-transition: opacity 0.3s; transition: opacity 0.3s; }\n"
y=document.querySelector("head")
@@ -18047,57 +17717,43 @@
if(J.xC(a,$.Tf()))return b
b=A.oF(a.gAY(),b)
for(z=J.GP(J.hI(a.gYK()));z.G();){y=z.gl()
-if(y.gFo()||y.gkw())continue
x=J.x(y)
-if(!(typeof y==="object"&&y!==null&&!!x.$isRY&&!y.gV5()))w=typeof y==="object"&&y!==null&&!!x.$isRS&&y.glT()
-else w=!0
-if(w)for(w=J.GP(y.gc9());w.G();){v=w.mD.gAx()
-u=J.x(v)
-if(typeof v==="object"&&v!==null&&!!u.$isyL){if(typeof y!=="object"||y===null||!x.$isRS||A.bc(a,y)){if(b==null)b=H.B7([],P.L5(null,null,null,null,null))
-b.u(b,y.gIf(),y)}break}}}return b},Oy:function(a,b){var z,y
-do{z=J.UQ(a.gYK(),b)
-y=J.x(z)
-if(typeof z==="object"&&z!==null&&!!y.$isRS&&z.glT()&&A.bc(a,z)||typeof z==="object"&&z!==null&&!!y.$isRY)return z
-a=a.gAY()}while(a!=null)
-return},bc:function(a,b){var z,y
+if(typeof y!=="object"||y===null||!x.$isRY||y.gV5()||y.gFo()||y.gkw())continue
+for(x=J.GP(y.gc9());x.G();){w=x.gl().gAx()
+v=J.x(w)
+if(typeof w==="object"&&w!==null&&!!v.$isyL){if(b==null)b=H.B7([],P.L5(null,null,null,null,null))
+b.u(b,y.gIf(),y)
+break}}}for(z=J.GP(J.hI(a.gYK()));z.G();){u=z.gl()
+x=J.x(u)
+if(typeof u!=="object"||u===null||!x.$isRS||!u.glT()||u.Fo||u.gkw())continue
+for(x=J.GP(u.gc9());x.G();){w=x.gl().gAx()
+v=J.x(w)
+if(typeof w==="object"&&w!==null&&!!v.$isyL){if(A.bc(a,u)){if(b==null)b=H.B7([],P.L5(null,null,null,null,null))
+b.u(b,u.gIf(),u)}break}}}return b},bc:function(a,b){var z,y
z=H.le(H.d(J.Z0(b.gIf()))+"=")
y=J.UQ(a.gYK(),new H.GD(z))
z=J.x(y)
return typeof y==="object"&&y!==null&&!!z.$isRS&&y.ghB()},hO:function(a,b,c){var z,y
if($.LX()==null||a==null)return
-if(!$.LX().Bm("ShadowDOMPolyfill"))return
+if($.LX().Bm("ShadowDOMPolyfill"))return
z=J.UQ($.LX(),"Platform")
if(z==null)return
y=J.UQ(z,"ShadowCSS")
if(y==null)return
-y.V7("shimStyling",[a,b,c])},Hl:function(a){var z,y,x,w,v,u,t
-if(a==null)return""
-w=J.RE(a)
-z=w.gLU(a)
-if(J.xC(z,""))z=w.gQg(a).MW.getAttribute("href")
-if($.LX()!=null&&$.LX().Bm("HTMLImports")){v=J.UQ(P.Oe(a),"__resource")
-if(v!=null)return v
-$.vM().J4("failed to get stylesheet text href=\""+H.d(z)+"\"")
-return""}try{w=new XMLHttpRequest()
-C.W3.i3(w,"GET",z,!1)
-w.send()
-w=w.responseText
-return w}catch(u){w=H.Ru(u)
-t=J.x(w)
-if(typeof w==="object"&&w!==null&&!!t.$isNh){y=w
-x=new H.XO(u,null)
-$.vM().J4("failed to get stylesheet text href=\""+H.d(z)+"\" error: "+H.d(y)+", trace: "+H.d(x))
-return""}else throw u}},oY:function(a){var z=J.UQ($.pT(),a)
+y.V7("shimStyling",[a,b,c])},Hl:function(a){var z
+if(a==null||$.LX()==null)return""
+z=J.UQ(P.Oe(a),"__resource")
+return z!=null?z:""},oY:function(a){var z=J.UQ($.pT(),a)
return z!=null?z:a},Ad:function(a,b){var z,y
if(b==null)b=C.hG
z=$.Ej()
z.u(z,a,b)
z=$.p2()
y=z.Rz(z,a)
-if(y!=null)J.Or(y)},zM:function(a){A.Vx(a,new A.Mq())},Vx:function(a,b){var z
+if(y!=null)J.Or(y)},zM:function(a){A.om(a,new A.Mq())},om:function(a,b){var z
if(a==null)return
b.call$1(a)
-for(z=a.firstChild;z!=null;z=z.nextSibling)A.Vx(z,b)},p1:function(a,b,c,d){var z
+for(z=a.firstChild;z!=null;z=z.nextSibling)A.om(z,b)},p1:function(a,b,c,d){var z
if($.ZH().mL(C.R5))$.ZH().J4("["+H.d(c)+"]: bindProperties: ["+H.d(d)+"] to ["+J.Ro(a)+"].["+H.d(b)+"]")
z=L.ao(c,d,null)
if(z.gP(z)==null)z.sP(z,H.vn(a).rN(b).Ax)
@@ -18106,14 +17762,10 @@
for(;z=J.TZ(a),z!=null;a=z);y=$.od()
return y.t(y,a)},HR:function(a,b,c){var z,y,x
z=H.vn(a)
-y=A.Rk(H.jO(J.bB(z.Ax).IE),b)
+y=J.UQ(H.jO(J.bB(z.Ax).IE).gtx(),b)
if(y!=null){x=y.gJx()
x=x.ev(x,new A.uJ())
-C.Nm.sB(c,x.gB(x))}return z.CI(b,c).Ax},Rk:function(a,b){var z,y
-do{z=J.UQ(a.gYK(),b)
-y=J.x(z)
-if(typeof z==="object"&&z!==null&&!!y.$isRS)return z
-a=a.gAY()}while(a!=null)},ZI:function(a,b){var z,y
+C.Nm.sB(c,x.gB(x))}return z.CI(b,c).Ax},ZI:function(a,b){var z,y
if(a==null)return
z=document.createElement("style",null)
z.textContent=a.textContent
@@ -18160,7 +17812,7 @@
t=t.MM
if(t.Gv!==0)H.vh(new P.lj("Future already completed"))
t.CG(w,x)}}},GA:function(a,b,c,d){var z,y,x,w,v,u
-if(c==null)c=P.Ls(null,null,null,W.QF)
+if(c==null)c=P.Ls(null,null,null,W.YN)
if(d==null){d=[]
d.$builtinTypeInfo=[J.O]}if(a==null){z="warning: "+H.d(b)+" not found."
y=$.oK
@@ -18187,17 +17839,37 @@
z=$.UG().nb
v=z.t(z,w)
if(v!=null)x=v}if(x==null){$.M7().To(H.d(y)+" library not found")
-return}for(z=J.vo(J.hI(x.gYK()),new A.Fn()),z=z.gA(z),u=z.RX;z.G();)A.h5(x,u.gl())
-for(z=J.vo(J.hI(x.gYK()),new A.e3()),z=z.gA(z),u=z.RX;z.G();){t=u.gl()
-for(s=J.GP(t.gc9());s.G();){r=s.gl().gAx()
-q=J.x(r)
-if(typeof r==="object"&&r!==null&&!!q.$isV3){q=r.ns
-p=M.Lh(t)
-if(p==null)p=C.hG
-o=$.Ej()
-o.u(o,q,p)
-o=$.p2()
-n=o.Rz(o,q)
+return}z=x.gmu().nb
+z=z.gUQ(z)
+u=z.Kw
+u=u.gA(u)
+t=H.Y9(z.$asi1,H.oX(z))
+s=t==null?null:t[0]
+t=H.Y9(z.$asi1,H.oX(z))
+r=t==null?null:t[1]
+z=new H.MH(null,u,z.ew)
+z.$builtinTypeInfo=[s,r]
+for(;z.G();)A.h5(x,z.mD)
+z=J.pP(x)
+z=z.gUQ(z)
+u=z.Kw
+u=u.gA(u)
+t=H.Y9(z.$asi1,H.oX(z))
+s=t==null?null:t[0]
+t=H.Y9(z.$asi1,H.oX(z))
+r=t==null?null:t[1]
+z=new H.MH(null,u,z.ew)
+z.$builtinTypeInfo=[s,r]
+for(;z.G();){q=z.mD
+for(u=J.GP(q.gc9());u.G();){p=u.gl().gAx()
+s=J.x(p)
+if(typeof p==="object"&&p!==null&&!!s.$isV3){s=p.ns
+o=M.Lh(q)
+if(o==null)o=C.hG
+r=$.Ej()
+r.u(r,s,o)
+r=$.p2()
+n=r.Rz(r,s)
if(n!=null)J.Or(n)}}}},h5:function(a,b){var z,y,x
for(z=J.GP(b.gc9());y=!1,z.G();)if(z.gl().gAx()===C.za){y=!0
break}if(!y)return
@@ -18258,7 +17930,7 @@
z=a.Dg
if(z!=null)a.Q0=this.Pv(a,z)
this.oq(a,y)},
-fj:function(a,b,c){var z,y,x
+fj:function(a,b,c){var z,y
this.uG(a)
this.W3(a,a.EX)
this.Mi(a)
@@ -18267,10 +17939,8 @@
this.u5(a)
A.hO(this.gr3(a),b,c)
z=P.re(a.di)
-y=J.UQ(z.gYK(),C.Qi)
-if(y!=null){x=J.x(y)
-x=typeof y==="object"&&y!==null&&!!x.$isRS&&y.gFo()&&y.guU()}else x=!1
-if(x)z.CI(C.Qi,[a])},
+y=J.UQ(z.gtx(),C.Qi)
+if(y!=null&&y.gFo()&&y.guU())z.CI(C.Qi,[a])},
Ba:function(a,b){var z,y,x,w
for(z=a,y=null;z!=null;){x=J.RE(z)
y=x.gQg(z).MW.getAttribute("extends")
@@ -18291,7 +17961,9 @@
z=z!=null&&z.x4(w)}else z=!1
if(z)continue
v=new H.GD(H.le(w))
-u=A.Oy(b,v)
+u=J.UQ(b.gYK(),v)
+z=J.x(u)
+if(typeof u==="object"&&u!==null&&!!z.$isRS){if(!u.glT()||!A.bc(b,u))u=null}else if(typeof u!=="object"||u===null||!z.$isRY)u=null
if(u==null){window
z=$.UT()
t="property for attribute "+w+" of polymer-element name="+a.S6+" not found."
@@ -18353,8 +18025,6 @@
new W.E9(z).MW.setAttribute("element",a.S6+"-"+c)
return z},
oq:function(a,b){var z,y,x,w
-if(J.xC(b,$.Tf()))return
-this.oq(a,b.gAY())
for(z=J.GP(J.hI(b.gYK()));z.G();){y=z.gl()
x=J.x(y)
if(typeof y!=="object"||y===null||!x.$isRS||y.gFo()||!y.guU())continue
@@ -18410,16 +18080,16 @@
$isEH:true,
$is_bh:true},w12:{"":"Tp;",
call$0:function(){var z=P.L5(null,null,null,J.O,J.O)
-C.FS.aN(C.FS,new A.ppY(z))
+C.FS.aN(C.FS,new A.fTP(z))
return z},
"+call:0:0":0,
$isEH:true,
-$is_X0:true},ppY:{"":"Tp;a",
+$is_X0:true},fTP:{"":"Tp;a",
call$2:function(a,b){var z=this.a
z.u(z,b,a)},
"+call:2:0":0,
$isEH:true,
-$is_bh:true},yL:{"":"ndx;",$isyL:true},dM:{"":["a;KM=-",function(){return[C.nJ]}],
+$is_bh:true},yL:{"":"Fa;",$isyL:true},dM:{"":["a;KM=-",function(){return[C.nJ]}],
gpQ:function(a){return!1},
"+applyAuthorStyles":0,
Pa:function(a){if(W.uV(this.gM0(a).defaultView)!=null||$.M0>0)this.Ec(a)},
@@ -18447,7 +18117,7 @@
z=J.RE(b)
y=z.Ja(b,"template")
if(y!=null)if(J.Vs(a.ZI).MW.hasAttribute("lightdom")===!0){this.vs(a,y)
-x=null}else x=this.Tp(a,y)
+x=null}else x=this.TH(a,y)
else x=null
w=J.x(x)
if(typeof x!=="object"||x===null||!w.$isI0)return
@@ -18463,7 +18133,7 @@
this.jx(a,y)
this.lj(a,a)
return y},
-Tp:function(a,b){var z,y
+TH:function(a,b){var z,y
if(b==null)return
this.gKE(a)
z=this.er(a)
@@ -18537,7 +18207,7 @@
z=a.TQ
if(z!=null){z.TP(z)
a.TQ=null}if(b===!0)return
-A.Vx(this.gKE(a),new A.TV())},
+A.om(this.gKE(a),new A.TV())},
oW:function(a){return this.BT(a,null)},
Xl:function(a){var z,y,x,w,v,u,t
z=a.ZI
@@ -18664,7 +18334,7 @@
y=z.t(z,a)
if(y!=null){z=this.b
x=J.RE(b)
-J.Ut(z,a,x.gzZ(b),x.gjL(b))
+J.GS(z,a,x.gzZ(b),x.gjL(b))
A.HR(z,y,[x.gjL(b),x.gzZ(b),this.c])}},
"+call:2:0":0,
$isEH:true,
@@ -18761,7 +18431,7 @@
a.KM=v
C.Iv.ZL(a)
C.Iv.FH(a)
-return a},"+new PolymerElement$created:0:0":0}},Tt:{"":["qE+dM;KM=-",function(){return[C.nJ]}],$isdM:true,$ishs:true,$isd3:true,$iscv:true,$isGv:true,$isKV:true,$isD0:true},GN:{"":"Tt+Pi;",$isd3:true},k8:{"":"a;jL>,zZ*",$isk8:true},HJ:{"":"e9;nF"},S0:{"":"a;Ow,VC",
+return a},"+new PolymerElement$created:0:0":0}},Sa:{"":["qE+dM;KM=-",function(){return[C.nJ]}],$isdM:true,$ishs:true,$isd3:true,$iscv:true,$isGv:true,$isKV:true,$isD0:true},GN:{"":"Sa+Pi;",$isd3:true},k8:{"":"a;jL>,zZ*",$isk8:true},HJ:{"":"e9;nF"},S0:{"":"a;Ow,VC",
E5:function(){return this.Ow.call$0()},
TP:function(a){var z=this.VC
if(z!=null){z.ed()
@@ -18776,24 +18446,12 @@
"+call:1:0":0,
$isEH:true,
$is_HB:true,
-$is_Dv:true},Fn:{"":"Tp;",
-call$1:function(a){var z=J.x(a)
-return typeof a==="object"&&a!==null&&!!z.$isRS},
-"+call:1:0":0,
-$isEH:true,
-$is_HB:true,
-$is_Dv:true},e3:{"":"Tp;",
-call$1:function(a){var z=J.x(a)
-return typeof a==="object"&&a!==null&&!!z.$isMs},
-"+call:1:0":0,
-$isEH:true,
-$is_HB:true,
$is_Dv:true},pM:{"":"Tp;",
call$1:function(a){return!a.gQ2()},
"+call:1:0":0,
$isEH:true,
$is_HB:true,
-$is_Dv:true},jh:{"":"a;"}}],["polymer.deserialize","package:polymer/deserialize.dart",,Z,{Zh:function(a,b,c){var z,y,x
+$is_Dv:true},Mh:{"":"a;"}}],["polymer.deserialize","package:polymer/deserialize.dart",,Z,{Zh:function(a,b,c){var z,y,x
z=J.UQ($.WJ(),c.gvd())
if(z!=null)return z.call$2(a,b)
try{y=C.lM.kV(J.JA(a,"'","\""))
@@ -18805,7 +18463,7 @@
z.u(z,C.nz,new Z.pp())
z.u(z,C.Ts,new Z.Nq())
z.u(z,C.PC,new Z.nl())
-z.u(z,C.md,new Z.ik())
+z.u(z,C.md,new Z.ej())
return z},
"+call:0:0":0,
$isEH:true,
@@ -18837,7 +18495,7 @@
"+call:1:0":0,
$isEH:true,
$is_HB:true,
-$is_Dv:true},ik:{"":"Tp;",
+$is_Dv:true},ej:{"":"Tp;",
call$2:function(a,b){return H.IH(a,new Z.HK(b))},
"+call:2:0":0,
$isEH:true,
@@ -18886,8 +18544,8 @@
gca:function(){return new T.Dw(this,T.e9.prototype.yt,null,"yt")},
A5:function(a){return new T.uK(this)}},Xy:{"":"Tp;a,b,c",
call$2:function(a,b){var z=J.x(a)
-if(typeof a!=="object"||a===null||!z.$isz6){z=this.a.nF
-a=new K.z6(null,a,V.WF(z==null?H.B7([],P.L5(null,null,null,null,null)):z,null,null),null)}z=J.x(b)
+if(typeof a!=="object"||a===null||!z.$isz6)a=new K.z6(null,a,V.WF(this.a.nF,null,null),null)
+z=J.x(b)
z=typeof b==="object"&&b!==null&&!!z.$iscv
if(z&&J.xC(this.b,"class"))return T.FL(this.c,a,T.qP)
if(z&&J.xC(this.b,"style"))return T.FL(this.c,a,T.Fx)
@@ -18896,9 +18554,7 @@
$isEH:true,
$is_bh:true},uK:{"":"Tp;a",
call$1:function(a){var z=J.x(a)
-if(typeof a==="object"&&a!==null&&!!z.$isz6)z=a
-else{z=this.a.nF
-z=new K.z6(null,a,V.WF(z==null?H.B7([],P.L5(null,null,null,null,null)):z,null,null),null)}return z},
+return typeof a==="object"&&a!==null&&!!z.$isz6?a:new K.z6(null,a,V.WF(this.a.nF,null,null),null)},
"+call:1:0":0,
$isEH:true,
$is_HB:true,
@@ -18912,14 +18568,14 @@
F.Wi(this,C.ls,z,this.uK)},
gnc:function(){return new H.Pm(this,T.mY.prototype.vr,null,"vr")},
gP:function(a){return this.uK
-"37,35"},
+"40,38"},
"+value":1,
r6:function(a,b){return this.gP(a).call$1(b)},
sP:function(a,b){var z,y,x,w
try{K.jX(this.jf,b,this.qc)}catch(y){x=H.Ru(y)
w=J.x(x)
if(typeof x==="object"&&x!==null&&!!w.$isB0){z=x
-$.IS().A3("Error evaluating expression '"+H.d(this.jf)+"': "+J.z2(z))}else throw y}"37,105,37,35"},
+$.IS().A3("Error evaluating expression '"+H.d(this.jf)+"': "+J.z2(z))}else throw y}"40,112,40,38"},
"+value=":1,
Va:function(a,b,c){var z,y,x,w,v
y=this.jf
@@ -18967,23 +18623,25 @@
H.VM(x,[U.hw])
for(;w=z.a,v=J.RE(w),typeof w==="object"&&w!==null&&!!v.$isuk;){if(!J.xC(v.gkp(w),"|"))break
x.push(v.gT8(w))
-z.a=v.gBb(w)}w=z.a
-v=J.x(w)
-if(typeof w==="object"&&w!==null&&!!v.$isw6){u=v.gP(w)
+z.a=v.gBb(w)}z=z.a
+w=J.x(z)
+if(typeof z==="object"&&z!==null&&!!w.$isw6){u=w.gP(z)
t=C.OL
-s=!1}else if(typeof w==="object"&&w!==null&&!!v.$iszX){w=w.gJn()
+s=!1}else if(typeof z==="object"&&z!==null&&!!w.$isRW){t=z.ghP()
+if(J.xC(w.gbP(z),"[]")){w=z.gre()
+if(0>=w.length)throw H.e(w,0)
+w=w[0]
v=J.x(w)
if(typeof w!=="object"||w===null||!v.$isno)y.call$0()
-z=z.a
-t=z.ghP()
-u=J.Vm(z.gJn())
-s=!0}else{if(typeof w==="object"&&w!==null&&!!v.$isx9){t=w.ghP()
-u=v.goc(w)}else if(typeof w==="object"&&w!==null&&!!v.$isRW){t=w.ghP()
-if(v.gbP(w)!=null){if(z.a.gre()!=null)y.call$0()
-u=J.vF(z.a)}else{y.call$0()
-u=null}}else{y.call$0()
+z=z.gre()
+if(0>=z.length)throw H.e(z,0)
+u=J.Vm(z[0])
+s=!0}else{if(w.gbP(z)!=null){if(z.gre()!=null)y.call$0()
+u=w.gbP(z)}else{y.call$0()
+u=null}s=!1}}else{y.call$0()
t=null
-u=null}s=!1}for(z=new H.a7(x,x.length,0,null),H.VM(z,[H.W8(x,"Q",0)]);z.G();){r=z.mD
+u=null
+s=!1}for(z=new H.a7(x,x.length,0,null),H.VM(z,[H.W8(x,"Q",0)]);z.G();){r=z.mD
q=J.UK(r,new K.G1(c,P.NZ(null,null)))
J.UK(q,new K.Ed(c))
q.gLv()
@@ -19124,7 +18782,6 @@
x.Iv(z)}},
bu:function(a){var z=this.KL
return z.bu(z)},
-"+toString:0:0":0,
$ishw:true},Ed:{"":"a0;Jd",
xn:function(a){a.yc(a,this.Jd)},
ky:function(a){J.UK(a.gT8(a),this)
@@ -19132,18 +18789,6 @@
W9:function(a){return new K.Wh(a,null,null,null,P.bK(null,null,!1,null))},
LT:function(a){var z=a.wz
return z.RR(z,this)},
-co:function(a){var z,y
-z=J.UK(a.ghP(),this)
-y=new K.vl(z,a,null,null,null,P.bK(null,null,!1,null))
-z.sbO(y)
-return y},
-CU:function(a){var z,y,x
-z=J.UK(a.ghP(),this)
-y=J.UK(a.gJn(),this)
-x=new K.iT(z,y,a,null,null,null,P.bK(null,null,!1,null))
-z.sbO(x)
-y.sbO(x)
-return x},
Y7:function(a){var z,y,x,w,v
z=J.UK(a.ghP(),this)
y=a.gre()
@@ -19275,95 +18920,44 @@
$ishw:true},ky:{"":"Ay;Bb>,T8>,KL,bO,tj,Lv,k6",
gkp:function(a){var z=this.KL
return z.gkp(z)},
-Qh:function(a){var z,y,x,w
-z=$.e6()
+Qh:function(a){var z,y,x
+z=$.bF()
y=this.KL
x=z.t(z,y.gkp(y))
if(J.xC(y.gkp(y),"&&")||J.xC(y.gkp(y),"||")){z=this.Bb.gLv()
if(z==null)z=!1
y=this.T8.gLv()
this.Lv=x.call$2(z,y==null?!1:y)}else if(J.xC(y.gkp(y),"==")||J.xC(y.gkp(y),"!="))this.Lv=x.call$2(this.Bb.gLv(),this.T8.gLv())
-else{z=this.Bb
-if(z.gLv()==null||this.T8.gLv()==null)this.Lv=null
-else{if(J.xC(y.gkp(y),"|")){y=z.gLv()
-w=J.x(y)
-w=typeof y==="object"&&y!==null&&!!w.$iswn
-y=w}else y=!1
-if(y)this.tj=H.Go(z.gLv(),"$iswn").gRT().yI(new K.uA(this,a))
-this.Lv=x.call$2(z.gLv(),this.T8.gLv())}}},
+else{z=this.Bb.gLv()
+if(z==null||this.T8.gLv()==null)this.Lv=null
+else this.Lv=x.call$2(z,this.T8.gLv())}},
RR:function(a,b){return b.im(this)},
$asAy:function(){return[U.uk]},
$isuk:true,
-$ishw:true},uA:{"":"Tp;a,b",
-call$1:function(a){return this.a.DX(this.b)},
-"+call:1:0":0,
-$isEH:true,
-$is_HB:true,
-$is_Dv:true},vl:{"":"Ay;hP<,KL,bO,tj,Lv,k6",
-goc:function(a){var z=this.KL
-return z.goc(z)},
-"+name":0,
-Qh:function(a){var z,y,x
-z=this.hP.gLv()
-if(z==null){this.Lv=null
-return}y=this.KL
-x=new H.GD(H.le(y.goc(y)))
-this.Lv=H.vn(z).rN(x).Ax
-y=J.RE(z)
-if(typeof z==="object"&&z!==null&&!!y.$isd3)this.tj=y.gqh(z).yI(new K.Li(this,a,x))},
-RR:function(a,b){return b.co(this)},
-$asAy:function(){return[U.x9]},
-$isx9:true,
-$ishw:true},Li:{"":"Tp;a,b,c",
-call$1:function(a){if(J.ja(a,new K.WK(this.c))===!0)this.a.DX(this.b)},
-"+call:1:0":0,
-$isEH:true,
-$is_HB:true,
-$is_Dv:true},WK:{"":"Tp;d",
-call$1:function(a){var z=J.x(a)
-return typeof a==="object"&&a!==null&&!!z.$isqI&&J.xC(a.oc,this.d)},
-"+call:1:0":0,
-$isEH:true,
-$is_HB:true,
-$is_Dv:true},iT:{"":"Ay;hP<,Jn<,KL,bO,tj,Lv,k6",
-Qh:function(a){var z,y,x
-z=this.hP.gLv()
-if(z==null){this.Lv=null
-return}y=this.Jn.gLv()
-x=J.U6(z)
-this.Lv=x.t(z,y)
-if(typeof z==="object"&&z!==null&&!!x.$isd3)this.tj=x.gqh(z).yI(new K.tE(this,a,y))},
-RR:function(a,b){return b.CU(this)},
-$asAy:function(){return[U.zX]},
-$iszX:true,
-$ishw:true},tE:{"":"Tp;a,b,c",
-call$1:function(a){if(J.ja(a,new K.GS(this.c))===!0)this.a.DX(this.b)},
-"+call:1:0":0,
-$isEH:true,
-$is_HB:true,
-$is_Dv:true},GS:{"":"Tp;d",
-call$1:function(a){var z=J.x(a)
-return typeof a==="object"&&a!==null&&!!z.$isHA&&J.xC(a.G3,this.d)},
-"+call:1:0":0,
-$isEH:true,
-$is_HB:true,
-$is_Dv:true},fa:{"":"Ay;hP<,re<,KL,bO,tj,Lv,k6",
+$ishw:true},fa:{"":"Ay;hP<,re<,KL,bO,tj,Lv,k6",
+glT:function(){return this.KL.glT()},
gbP:function(a){var z=this.KL
return z.gbP(z)},
-Qh:function(a){var z,y,x,w
+Qh:function(a){var z,y,x,w,v,u
z=this.re
-z.toString
+if(z==null)y=[]
+else{z.toString
z=new H.A8(z,new K.WW())
H.VM(z,[null,null])
-y=z.br(z)
-x=this.hP.gLv()
-if(x==null){this.Lv=null
-return}z=this.KL
-if(z.gbP(z)==null)this.Lv=K.Ku(x,y)
-else{w=new H.GD(H.le(z.gbP(z)))
-this.Lv=H.vn(x).F2(w,y,null).Ax
+y=z.tt(z,!1)}x=this.hP.gLv()
+if(x==null)this.Lv=null
+else{z=this.KL
+if(z.gbP(z)==null)if(z.glT())this.Lv=x
+else this.Lv=K.Ku(x,y)
+else if(J.xC(z.gbP(z),"[]")){if(0>=y.length)throw H.e(y,0)
+w=y[0]
+z=J.U6(x)
+this.Lv=z.t(x,w)
+if(typeof x==="object"&&x!==null&&!!z.$isd3)this.tj=z.gqh(x).yI(new K.vQ(this,a,w))}else{v=H.vn(x)
+u=new H.GD(H.le(z.gbP(z)))
+this.Lv=z.glT()?v.rN(u).Ax:v.F2(u,y,null).Ax
z=J.RE(x)
-if(typeof x==="object"&&x!==null&&!!z.$isd3)this.tj=z.gqh(x).yI(new K.vQ(this,a,w))}},
+if(typeof x==="object"&&x!==null&&!!z.$isd3)this.tj=z.gqh(x).yI(new K.jh(this,a,u))}}},
RR:function(a,b){return b.Y7(this)},
$asAy:function(){return[U.RW]},
$isRW:true,
@@ -19379,7 +18973,18 @@
$is_HB:true,
$is_Dv:true},a9:{"":"Tp;d",
call$1:function(a){var z=J.x(a)
-return typeof a==="object"&&a!==null&&!!z.$isqI&&J.xC(a.oc,this.d)},
+return typeof a==="object"&&a!==null&&!!z.$isHA&&J.xC(a.G3,this.d)},
+"+call:1:0":0,
+$isEH:true,
+$is_HB:true,
+$is_Dv:true},jh:{"":"Tp;e,f,g",
+call$1:function(a){if(J.ja(a,new K.e3(this.g))===!0)this.e.DX(this.f)},
+"+call:1:0":0,
+$isEH:true,
+$is_HB:true,
+$is_Dv:true},e3:{"":"Tp;h",
+call$1:function(a){var z=J.x(a)
+return typeof a==="object"&&a!==null&&!!z.$isqI&&J.xC(a.oc,this.h)},
"+call:1:0":0,
$isEH:true,
$is_HB:true,
@@ -19409,7 +19014,6 @@
$is_HB:true,
$is_Dv:true},B0:{"":"a;G1>",
bu:function(a){return"EvalException: "+this.G1},
-"+toString:0:0":0,
$isB0:true,
static:{yN:function(a){return new K.B0(a)}}}}],["polymer_expressions.expression","package:polymer_expressions/expression.dart",,U,{ZP:function(a,b){var z,y,x
z=J.x(a)
@@ -19431,165 +19035,111 @@
a=536870911&a+((67108863&a)<<3>>>0)
a=(a^C.jn.m(a,11))>>>0
return 536870911&a+((16383&a)<<15>>>0)},Fq:{"":"a;",
-Bf:function(a,b,c){return new U.zX(b,c)},
-"+index:2:0":0,
-gvH:function(a){return new A.Y7(this,U.Fq.prototype.Bf,a,"Bf")},
F2:function(a,b,c){return new U.RW(a,b,c)},
-"+invoke:3:0":0},hw:{"":"a;",$ishw:true},EZ:{"":"hw;",
+"+invoke:3:0":0,
+"*invoke":[40],
+CI:function(a,b){return this.F2(a,b,null)},
+"+invoke:2:0":0},hw:{"":"a;",$ishw:true},EZ:{"":"hw;",
RR:function(a,b){return b.W9(this)},
$isEZ:true},no:{"":"hw;P>",
r6:function(a,b){return this.P.call$1(b)},
RR:function(a,b){return b.I6(this)},
bu:function(a){var z=this.P
return typeof z==="string"?"\""+H.d(z)+"\"":H.d(z)},
-"+toString:0:0":0,
n:function(a,b){var z
if(b==null)return!1
z=H.RB(b,"$isno",[H.W8(this,"no",0)],"$asno")
return z&&J.xC(J.Vm(b),this.P)},
-"+==:1:0":0,
giO:function(a){return J.v1(this.P)},
-"+hashCode":0,
$isno:true},kB:{"":"hw;Pu>",
RR:function(a,b){return b.o0(this)},
bu:function(a){return"{"+H.d(this.Pu)+"}"},
-"+toString:0:0":0,
n:function(a,b){var z
if(b==null)return!1
z=J.RE(b)
return typeof b==="object"&&b!==null&&!!z.$iskB&&U.ZP(z.gPu(b),this.Pu)},
-"+==:1:0":0,
giO:function(a){return U.au(this.Pu)},
-"+hashCode":0,
$iskB:true},ae:{"":"hw;G3>,v4<",
RR:function(a,b){return b.YV(this)},
bu:function(a){return H.d(this.G3)+": "+H.d(this.v4)},
-"+toString:0:0":0,
n:function(a,b){var z
if(b==null)return!1
z=J.RE(b)
return typeof b==="object"&&b!==null&&!!z.$isae&&J.xC(z.gG3(b),this.G3)&&J.xC(b.gv4(),this.v4)},
-"+==:1:0":0,
giO:function(a){var z,y
z=J.v1(this.G3.P)
y=J.v1(this.v4)
return U.Up(U.Zm(U.Zm(0,z),y))},
-"+hashCode":0,
$isae:true},Iq:{"":"hw;wz",
RR:function(a,b){return b.LT(this)},
bu:function(a){return"("+H.d(this.wz)+")"},
-"+toString:0:0":0,
n:function(a,b){var z
if(b==null)return!1
z=J.x(b)
return typeof b==="object"&&b!==null&&!!z.$isIq&&J.xC(b.wz,this.wz)},
-"+==:1:0":0,
giO:function(a){return J.v1(this.wz)},
-"+hashCode":0,
$isIq:true},w6:{"":"hw;P>",
r6:function(a,b){return this.P.call$1(b)},
RR:function(a,b){return b.qv(this)},
bu:function(a){return this.P},
-"+toString:0:0":0,
n:function(a,b){var z
if(b==null)return!1
z=J.RE(b)
return typeof b==="object"&&b!==null&&!!z.$isw6&&J.xC(z.gP(b),this.P)},
-"+==:1:0":0,
giO:function(a){return J.v1(this.P)},
-"+hashCode":0,
$isw6:true},jK:{"":"hw;kp>,wz<",
RR:function(a,b){return b.Hx(this)},
bu:function(a){return H.d(this.kp)+" "+H.d(this.wz)},
-"+toString:0:0":0,
n:function(a,b){var z
if(b==null)return!1
z=J.RE(b)
return typeof b==="object"&&b!==null&&!!z.$isjK&&J.xC(z.gkp(b),this.kp)&&J.xC(b.gwz(),this.wz)},
-"+==:1:0":0,
giO:function(a){var z,y
z=J.v1(this.kp)
y=J.v1(this.wz)
return U.Up(U.Zm(U.Zm(0,z),y))},
-"+hashCode":0,
$isjK:true},uk:{"":"hw;kp>,Bb>,T8>",
RR:function(a,b){return b.im(this)},
bu:function(a){return"("+H.d(this.Bb)+" "+H.d(this.kp)+" "+H.d(this.T8)+")"},
-"+toString:0:0":0,
n:function(a,b){var z
if(b==null)return!1
z=J.RE(b)
return typeof b==="object"&&b!==null&&!!z.$isuk&&J.xC(z.gkp(b),this.kp)&&J.xC(z.gBb(b),this.Bb)&&J.xC(z.gT8(b),this.T8)},
-"+==:1:0":0,
giO:function(a){var z,y,x
z=J.v1(this.kp)
y=J.v1(this.Bb)
x=J.v1(this.T8)
return U.Up(U.Zm(U.Zm(U.Zm(0,z),y),x))},
-"+hashCode":0,
$isuk:true},K9:{"":"hw;Bb>,T8>",
RR:function(a,b){return b.ky(this)},
bu:function(a){return"("+H.d(this.Bb)+" in "+H.d(this.T8)+")"},
-"+toString:0:0":0,
n:function(a,b){var z
if(b==null)return!1
z=J.RE(b)
return typeof b==="object"&&b!==null&&!!z.$isK9&&J.xC(z.gBb(b),this.Bb)&&J.xC(z.gT8(b),this.T8)},
-"+==:1:0":0,
giO:function(a){var z,y
z=this.Bb
z=z.giO(z)
y=J.v1(this.T8)
return U.Up(U.Zm(U.Zm(0,z),y))},
-"+hashCode":0,
-$isK9:true},zX:{"":"hw;hP<,Jn<",
-RR:function(a,b){return b.CU(this)},
-bu:function(a){return H.d(this.hP)+"["+H.d(this.Jn)+"]"},
-"+toString:0:0":0,
-n:function(a,b){var z
-if(b==null)return!1
-z=J.x(b)
-return typeof b==="object"&&b!==null&&!!z.$iszX&&J.xC(b.ghP(),this.hP)&&J.xC(b.gJn(),this.Jn)},
-"+==:1:0":0,
-giO:function(a){var z,y
-z=J.v1(this.hP)
-y=J.v1(this.Jn)
-return U.Up(U.Zm(U.Zm(0,z),y))},
-"+hashCode":0,
-$iszX:true},x9:{"":"hw;hP<,oc>",
-RR:function(a,b){return b.co(this)},
-bu:function(a){return H.d(this.hP)+"."+H.d(this.oc)},
-"+toString:0:0":0,
-n:function(a,b){var z
-if(b==null)return!1
-z=J.RE(b)
-return typeof b==="object"&&b!==null&&!!z.$isx9&&J.xC(b.ghP(),this.hP)&&J.xC(z.goc(b),this.oc)},
-"+==:1:0":0,
-giO:function(a){var z,y
-z=J.v1(this.hP)
-y=J.v1(this.oc)
-return U.Up(U.Zm(U.Zm(0,z),y))},
-"+hashCode":0,
-$isx9:true},RW:{"":"hw;hP<,bP>,re<",
+$isK9:true},RW:{"":"hw;hP<,bP>,re<",
RR:function(a,b){return b.Y7(this)},
+glT:function(){return this.re==null},
bu:function(a){return H.d(this.hP)+"."+H.d(this.bP)+"("+H.d(this.re)+")"},
-"+toString:0:0":0,
n:function(a,b){var z
if(b==null)return!1
z=J.RE(b)
return typeof b==="object"&&b!==null&&!!z.$isRW&&J.xC(b.ghP(),this.hP)&&J.xC(z.gbP(b),this.bP)&&U.ZP(b.gre(),this.re)},
-"+==:1:0":0,
giO:function(a){var z,y,x
z=J.v1(this.hP)
y=J.v1(this.bP)
x=U.au(this.re)
return U.Up(U.Zm(U.Zm(U.Zm(0,z),y),x))},
-"+hashCode":0,
$isRW:true},xs:{"":"Tp;",
call$2:function(a,b){return U.Zm(a,J.v1(b))},
"+call:2:0":0,
$isEH:true,
-$is_bh:true}}],["polymer_expressions.parser","package:polymer_expressions/parser.dart",,T,{FX:{"":"a;Sk,Ix,ku,fL",
+$is_bh:true}}],["polymer_expressions.parser","package:polymer_expressions/parser.dart",,T,{FX:{"":"a;Sk,Ix,ku,fL,lQ",
oK:function(){var z,y
this.ku=this.Ix.zl()
z=this.ku
@@ -19600,29 +19150,30 @@
this.w5()
return this.o9()},
Gd:function(a,b){var z
-if(!(a!=null&&!J.xC(J.Iz(this.fL.mD),a)))z=b!=null&&!J.xC(J.Vm(this.fL.mD),b)
+if(!(a!=null&&!J.xC(J.Iz(this.lQ),a)))z=b!=null&&!J.xC(J.Vm(this.lQ),b)
else z=!0
-if(z)throw H.b(Y.RV("Expected "+b+": "+H.d(this.fL.mD)))
-this.fL.G()},
+if(z)throw H.b(Y.RV("Expected "+b+": "+H.d(this.lQ)))
+this.lQ=this.fL.G()?this.fL.mD:null},
w5:function(){return this.Gd(null,null)},
-o9:function(){if(this.fL.mD==null){this.Sk.toString
+o9:function(){if(this.lQ==null){this.Sk.toString
return C.OL}var z=this.Dl()
return z==null?null:this.BH(z,0)},
BH:function(a,b){var z,y,x,w
-for(z=this.Sk;y=this.fL.mD,y!=null;)if(J.xC(J.Iz(y),9))if(J.xC(J.Vm(this.fL.mD),"(")){x=this.qk()
+for(z=this.Sk;y=this.lQ,y!=null;)if(J.xC(J.Iz(y),9))if(J.xC(J.Vm(this.lQ),"(")){x=this.qk()
z.toString
-a=new U.RW(a,null,x)}else if(J.xC(J.Vm(this.fL.mD),"[")){w=this.bK()
+a=new U.RW(a,null,x)}else if(J.xC(J.Vm(this.lQ),"[")){w=this.bK()
+x=w==null?[]:[w]
z.toString
-a=new U.zX(a,w)}else break
-else if(J.xC(J.Iz(this.fL.mD),3)){this.w5()
-a=this.qL(a,this.Dl())}else if(J.xC(J.Iz(this.fL.mD),10)&&J.xC(J.Vm(this.fL.mD),"in"))a=this.xo(a)
-else if(J.xC(J.Iz(this.fL.mD),8)&&J.J5(this.fL.mD.gG8(),b))a=this.Tw(a)
+a=new U.RW(a,"[]",x)}else break
+else if(J.xC(J.Iz(this.lQ),3)){this.w5()
+a=this.ct(a,this.Dl())}else if(J.xC(J.Iz(this.lQ),10)&&J.xC(J.Vm(this.lQ),"in"))a=this.xo(a)
+else if(J.xC(J.Iz(this.lQ),8)&&J.J5(this.lQ.gG8(),b))a=this.Tw(a)
else break
return a},
-qL:function(a,b){var z,y
+ct:function(a,b){var z,y
if(typeof b==="object"&&b!==null&&!!b.$isw6){z=b.gP(b)
this.Sk.toString
-return new U.x9(a,z)}else{if(typeof b==="object"&&b!==null&&!!b.$isRW){z=b.ghP()
+return new U.RW(a,z,null)}else{if(typeof b==="object"&&b!==null&&!!b.$isRW){z=b.ghP()
y=J.x(z)
y=typeof z==="object"&&z!==null&&!!y.$isw6
z=y}else z=!1
@@ -19631,27 +19182,27 @@
this.Sk.toString
return new U.RW(a,z,y)}else throw H.b(Y.RV("expected identifier: "+H.d(b)))}},
Tw:function(a){var z,y,x
-z=this.fL.mD
+z=this.lQ
this.w5()
y=this.Dl()
-while(!0){x=this.fL.mD
-if(x!=null)x=(J.xC(J.Iz(x),8)||J.xC(J.Iz(this.fL.mD),3)||J.xC(J.Iz(this.fL.mD),9))&&J.xZ(this.fL.mD.gG8(),z.gG8())
+while(!0){x=this.lQ
+if(x!=null)x=(J.xC(J.Iz(x),8)||J.xC(J.Iz(this.lQ),3)||J.xC(J.Iz(this.lQ),9))&&J.xZ(this.lQ.gG8(),z.gG8())
else x=!1
if(!x)break
-y=this.BH(y,this.fL.mD.gG8())}x=J.Vm(z)
+y=this.BH(y,this.lQ.gG8())}x=J.Vm(z)
this.Sk.toString
return new U.uk(x,a,y)},
Dl:function(){var z,y,x,w
-if(J.xC(J.Iz(this.fL.mD),8)){z=J.Vm(this.fL.mD)
+if(J.xC(J.Iz(this.lQ),8)){z=J.Vm(this.lQ)
y=J.x(z)
if(y.n(z,"+")||y.n(z,"-")){this.w5()
-if(J.xC(J.Iz(this.fL.mD),6)){y=H.BU(H.d(z)+H.d(J.Vm(this.fL.mD)),null,null)
+if(J.xC(J.Iz(this.lQ),6)){y=H.BU(H.d(z)+H.d(J.Vm(this.lQ)),null,null)
this.Sk.toString
z=new U.no(y)
z.$builtinTypeInfo=[null]
this.w5()
return z}else{y=this.Sk
-if(J.xC(J.Iz(this.fL.mD),7)){x=H.IH(H.d(z)+H.d(J.Vm(this.fL.mD)),null)
+if(J.xC(J.Iz(this.lQ),7)){x=H.IH(H.d(z)+H.d(J.Vm(this.lQ)),null)
y.toString
z=new U.no(x)
z.$builtinTypeInfo=[null]
@@ -19663,7 +19214,7 @@
this.Sk.toString
return new U.jK(z,w)}}return this.lb()},
lb:function(){var z,y
-switch(J.Iz(this.fL.mD)){case 10:z=J.Vm(this.fL.mD)
+switch(J.Iz(this.lQ)){case 10:z=J.Vm(this.lQ)
y=J.x(z)
if(y.n(z,"this")){this.w5()
this.Sk.toString
@@ -19673,23 +19224,23 @@
case 1:return this.qF()
case 6:return this.Ud()
case 7:return this.tw()
-case 9:if(J.xC(J.Vm(this.fL.mD),"("))return this.Pj()
-else if(J.xC(J.Vm(this.fL.mD),"{"))return this.Wc()
+case 9:if(J.xC(J.Vm(this.lQ),"("))return this.Pj()
+else if(J.xC(J.Vm(this.lQ),"{"))return this.Wc()
return
default:return}},
Wc:function(){var z,y,x,w
z=[]
y=this.Sk
do{this.w5()
-if(J.xC(J.Iz(this.fL.mD),9)&&J.xC(J.Vm(this.fL.mD),"}"))break
-x=J.Vm(this.fL.mD)
+if(J.xC(J.Iz(this.lQ),9)&&J.xC(J.Vm(this.lQ),"}"))break
+x=J.Vm(this.lQ)
y.toString
w=new U.no(x)
w.$builtinTypeInfo=[null]
this.w5()
this.Gd(5,":")
z.push(new U.ae(w,this.o9()))
-x=this.fL.mD}while(x!=null&&J.xC(J.Vm(x),","))
+x=this.lQ}while(x!=null&&J.xC(J.Vm(x),","))
this.Gd(9,"}")
return new U.kB(z)},
xo:function(a){var z,y
@@ -19700,15 +19251,15 @@
this.Sk.toString
return new U.K9(a,y)},
Cy:function(){var z,y,x
-if(J.xC(J.Vm(this.fL.mD),"true")){this.w5()
+if(J.xC(J.Vm(this.lQ),"true")){this.w5()
this.Sk.toString
z=new U.no(!0)
H.VM(z,[null])
-return z}if(J.xC(J.Vm(this.fL.mD),"false")){this.w5()
+return z}if(J.xC(J.Vm(this.lQ),"false")){this.w5()
this.Sk.toString
z=new U.no(!1)
H.VM(z,[null])
-return z}if(J.xC(J.Vm(this.fL.mD),"null")){this.w5()
+return z}if(J.xC(J.Vm(this.lQ),"null")){this.w5()
this.Sk.toString
z=new U.no(null)
H.VM(z,[null])
@@ -19717,23 +19268,23 @@
if(x==null)return y
else{this.Sk.toString
return new U.RW(y,null,x)}},
-nt:function(){if(!J.xC(J.Iz(this.fL.mD),2))throw H.b(Y.RV("expected identifier: "+H.d(this.fL.mD)+".value"))
-var z=J.Vm(this.fL.mD)
+nt:function(){if(!J.xC(J.Iz(this.lQ),2))throw H.b(Y.RV("expected identifier: "+H.d(this.lQ)+".value"))
+var z=J.Vm(this.lQ)
this.w5()
this.Sk.toString
return new U.w6(z)},
qk:function(){var z,y
-z=this.fL.mD
-if(z!=null&&J.xC(J.Iz(z),9)&&J.xC(J.Vm(this.fL.mD),"(")){y=[]
+z=this.lQ
+if(z!=null&&J.xC(J.Iz(z),9)&&J.xC(J.Vm(this.lQ),"(")){y=[]
do{this.w5()
-if(J.xC(J.Iz(this.fL.mD),9)&&J.xC(J.Vm(this.fL.mD),")"))break
+if(J.xC(J.Iz(this.lQ),9)&&J.xC(J.Vm(this.lQ),")"))break
y.push(this.o9())
-z=this.fL.mD}while(z!=null&&J.xC(J.Vm(z),","))
+z=this.lQ}while(z!=null&&J.xC(J.Vm(z),","))
this.Gd(9,")")
return y}return},
bK:function(){var z,y
-z=this.fL.mD
-if(z!=null&&J.xC(J.Iz(z),9)&&J.xC(J.Vm(this.fL.mD),"[")){this.w5()
+z=this.lQ
+if(z!=null&&J.xC(J.Iz(z),9)&&J.xC(J.Vm(this.lQ),"[")){this.w5()
y=this.o9()
this.Gd(9,"]")
return y}return},
@@ -19743,14 +19294,14 @@
this.Sk.toString
return new U.Iq(z)},
qF:function(){var z,y
-z=J.Vm(this.fL.mD)
+z=J.Vm(this.lQ)
this.Sk.toString
y=new U.no(z)
H.VM(y,[null])
this.w5()
return y},
pT:function(a){var z,y
-z=H.BU(H.d(a)+H.d(J.Vm(this.fL.mD)),null,null)
+z=H.BU(H.d(a)+H.d(J.Vm(this.lQ)),null,null)
this.Sk.toString
y=new U.no(z)
H.VM(y,[null])
@@ -19758,7 +19309,7 @@
return y},
Ud:function(){return this.pT("")},
yj:function(a){var z,y
-z=H.IH(H.d(a)+H.d(J.Vm(this.fL.mD)),null)
+z=H.IH(H.d(a)+H.d(J.Vm(this.lQ)),null)
this.Sk.toString
y=new U.no(z)
H.VM(y,[null])
@@ -19770,29 +19321,17 @@
H.VM(z,[Y.Pn])
y=P.p9("")
x=new U.Fq()
-return new T.FX(x,new Y.hc(z,y,new P.WU(a,0,0,null),null),null,null)}}}}],["polymer_expressions.src.globals","package:polymer_expressions/src/globals.dart",,K,{Dc:function(a){var z=new K.Bt(a)
+return new T.FX(x,new Y.hc(z,y,new P.WU(a,0,0,null),null),null,null,null)}}}}],["polymer_expressions.src.globals","package:polymer_expressions/src/globals.dart",,K,{Dc:function(a){var z=new K.Bt(a)
H.VM(z,[null])
return z},Ae:{"":"a;vH>-,P>-",
r6:function(a,b){return this.P.call$1(b)},
-n:function(a,b){var z
-if(b==null)return!1
-z=J.x(b)
-return typeof b==="object"&&b!==null&&!!z.$isAe&&J.xC(b.vH,this.vH)&&J.xC(b.P,this.P)
-"37,106,37"},
-"+==:1:0":1,
-giO:function(a){return J.v1(this.P)
-"27"},
-"+hashCode":1,
-bu:function(a){return"("+H.d(this.vH)+", "+H.d(this.P)+")"
-"8"},
-"+toString:0:0":1,
$isAe:true,
"@":function(){return[C.nJ]},
"<>":[3],
static:{i0:function(a,b,c){var z=new K.Ae(a,b)
H.VM(z,[c])
return z
-"25,26,27,28,29"},"+new IndexedValue:2:0":1}},"+IndexedValue": [0],Bt:{"":"mW;YR",
+"28,29,30,31,32"},"+new IndexedValue:2:0":1}},"+IndexedValue": [0],Bt:{"":"mW;YR",
gA:function(a){var z=J.GP(this.YR)
z=new K.vR(z,0,null)
H.VM(z,[H.W8(this,"Bt",0)])
@@ -19848,7 +19387,6 @@
default:return a}},Pn:{"":"a;fY>,P>,G8<",
r6:function(a,b){return this.P.call$1(b)},
bu:function(a){return"("+this.fY+", '"+this.P+"')"},
-"+toString:0:0":0,
$isPn:true},hc:{"":"a;MV,wV,jI,x0",
zl:function(){var z,y,x,w,v
z=this.jI
@@ -19946,18 +19484,11 @@
u.$builtinTypeInfo=[J.im]
v=H.eT(u)}this.MV.push(new Y.Pn(8,v,C.dj.t(C.dj,v)))}},hA:{"":"a;G1>",
bu:function(a){return"ParseException: "+this.G1},
-"+toString:0:0":0,
static:{RV:function(a){return new Y.hA(a)}}}}],["polymer_expressions.visitor","package:polymer_expressions/visitor.dart",,S,{fr:{"":"a;",
DV:function(a){return J.UK(a,this)},
gnG:function(){return new H.Pm(this,S.fr.prototype.DV,null,"DV")}},a0:{"":"fr;",
W9:function(a){return this.xn(a)},
-LT:function(a){var z=a.wz
-z.RR(z,this)
-this.xn(a)},
-co:function(a){J.UK(a.ghP(),this)
-this.xn(a)},
-CU:function(a){J.UK(a.ghP(),this)
-J.UK(a.gJn(),this)
+LT:function(a){a.RR(a,this)
this.xn(a)},
Y7:function(a){var z,y
J.UK(a.ghP(),this)
@@ -19979,7 +19510,7 @@
this.xn(a)},
ky:function(a){J.UK(a.gBb(a),this)
J.UK(a.gT8(a),this)
-this.xn(a)}}}],["response_viewer_element","package:observatory/src/observatory_elements/response_viewer.dart",,Q,{NQ:{"":["uL;hm-,VJ,Ai,VJ,Ai,ZI,uN,z3,TQ,Vk,Ye,mT,KM-",null,null,null,null,null,null,null,null,null,null,null,null,function(){return[C.nJ]}],
+this.xn(a)}}}],["response_viewer_element","package:observatory/src/observatory_elements/response_viewer.dart",,Q,{NQ:{"":["uL;tH-,VJ,Ai,VJ,Ai,ZI,uN,z3,TQ,Vk,Ye,mT,KM-",null,null,null,null,null,null,null,null,null,null,null,null,function(){return[C.nJ]}],
"@":function(){return[C.Ig]},
static:{Zo:function(a){var z,y,x,w,v
z=$.Nd()
@@ -19994,12 +19525,12 @@
C.Cc.ZL(a)
C.Cc.FH(a)
return a
-"30"},"+new ResponseViewerElement$created:0:0":1}},"+ResponseViewerElement": [24]}],["script_view_element","package:observatory/src/observatory_elements/script_view.dart",,U,{fI:{"":["WZq;Uz%-,VJ,Ai,hm-,VJ,Ai,VJ,Ai,ZI,uN,z3,TQ,Vk,Ye,mT,KM-",null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,function(){return[C.nJ]}],
+"33"},"+new ResponseViewerElement$created:0:0":1}},"+ResponseViewerElement": [27]}],["script_view_element","package:observatory/src/observatory_elements/script_view.dart",,U,{fI:{"":["V0;Uz%-,VJ,Ai,tH-,VJ,Ai,VJ,Ai,ZI,uN,z3,TQ,Vk,Ye,mT,KM-",null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,function(){return[C.nJ]}],
gNl:function(a){return a.Uz
-"34,35,36"},
+"37,38,39"},
"+script":1,
-sNl:function(a,b){a.Uz=this.ct(a,C.fX,a.Uz,b)
-"37,28,34,35"},
+sNl:function(a,b){a.Uz=this.pD(a,C.fX,a.Uz,b)
+"40,31,37,38"},
"+script=":1,
"@":function(){return[C.Er]},
static:{Ry:function(a){var z,y,x,w,v
@@ -20015,12 +19546,12 @@
C.cJ.ZL(a)
C.cJ.FH(a)
return a
-"31"},"+new ScriptViewElement$created:0:0":1}},"+ScriptViewElement": [107],WZq:{"":"uL+Pi;",$isd3:true}}],["source_view_element","package:observatory/src/observatory_elements/source_view.dart",,X,{kK:{"":["pva;vX%-,VJ,Ai,hm-,VJ,Ai,VJ,Ai,ZI,uN,z3,TQ,Vk,Ye,mT,KM-",null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,function(){return[C.nJ]}],
+"34"},"+new ScriptViewElement$created:0:0":1}},"+ScriptViewElement": [113],V0:{"":"uL+Pi;",$isd3:true}}],["source_view_element","package:observatory/src/observatory_elements/source_view.dart",,X,{kK:{"":["V4;vX%-,VJ,Ai,tH-,VJ,Ai,VJ,Ai,ZI,uN,z3,TQ,Vk,Ye,mT,KM-",null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,function(){return[C.nJ]}],
gFF:function(a){return a.vX
-"108,35,36"},
+"114,38,39"},
"+source":1,
-sFF:function(a,b){a.vX=this.ct(a,C.hn,a.vX,b)
-"37,28,108,35"},
+sFF:function(a,b){a.vX=this.pD(a,C.hn,a.vX,b)
+"40,31,114,38"},
"+source=":1,
"@":function(){return[C.H8]},
static:{HO:function(a){var z,y,x,w,v
@@ -20036,12 +19567,12 @@
C.Ks.ZL(a)
C.Ks.FH(a)
return a
-"32"},"+new SourceViewElement$created:0:0":1}},"+SourceViewElement": [109],pva:{"":"uL+Pi;",$isd3:true}}],["stack_trace_element","package:observatory/src/observatory_elements/stack_trace.dart",,X,{uw:{"":["cda;Qq%-,VJ,Ai,hm-,VJ,Ai,VJ,Ai,ZI,uN,z3,TQ,Vk,Ye,mT,KM-",null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,function(){return[C.nJ]}],
-gtN:function(a){return a.Qq
-"34,35,36"},
+"35"},"+new SourceViewElement$created:0:0":1}},"+SourceViewElement": [115],V4:{"":"uL+Pi;",$isd3:true}}],["stack_trace_element","package:observatory/src/observatory_elements/stack_trace.dart",,X,{uw:{"":["V6;V4%-,VJ,Ai,tH-,VJ,Ai,VJ,Ai,ZI,uN,z3,TQ,Vk,Ye,mT,KM-",null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,function(){return[C.nJ]}],
+gtN:function(a){return a.V4
+"37,38,39"},
"+trace":1,
-stN:function(a,b){a.Qq=this.ct(a,C.kw,a.Qq,b)
-"37,28,34,35"},
+stN:function(a,b){a.V4=this.pD(a,C.kw,a.V4,b)
+"40,31,37,38"},
"+trace=":1,
"@":function(){return[C.js]},
static:{bV:function(a){var z,y,x,w,v,u
@@ -20053,14 +19584,14 @@
v=W.cv
u=new V.br(P.Py(null,null,null,w,v),null,null)
H.VM(u,[w,v])
-a.Qq=z
+a.V4=z
a.Ye=y
a.mT=x
a.KM=u
C.bg.ZL(a)
C.bg.FH(a)
return a
-"33"},"+new StackTraceElement$created:0:0":1}},"+StackTraceElement": [110],cda:{"":"uL+Pi;",$isd3:true}}],["template_binding","package:template_binding/template_binding.dart",,M,{IP:function(a){var z=J.RE(a)
+"36"},"+new StackTraceElement$created:0:0":1}},"+StackTraceElement": [116],V6:{"":"uL+Pi;",$isd3:true}}],["template_binding","package:template_binding/template_binding.dart",,M,{IP:function(a){var z=J.RE(a)
if(typeof a==="object"&&a!==null&&!!z.$isQl)return C.io.f0(a)
switch(z.gr9(a)){case"checkbox":return $.FF().aM(a)
case"radio":case"select-multiple":case"select-one":return z.gEr(a)
@@ -20075,7 +19606,7 @@
for(y=a.firstChild,x=0;y!=null;y=y.nextSibling,x=w){w=x+1
if(x>=z.length)throw H.e(z,x)
M.HP(y,z[x],c,d,e)}},bM:function(a){var z,y
-for(;z=J.RE(a),y=z.gKV(a),y!=null;a=y);if(typeof a==="object"&&a!==null&&!!z.$isQF||typeof a==="object"&&a!==null&&!!z.$isI0||typeof a==="object"&&a!==null&&!!z.$ishy)return a
+for(;z=J.RE(a),y=z.gKV(a),y!=null;a=y);if(typeof a==="object"&&a!==null&&!!z.$isYN||typeof a==="object"&&a!==null&&!!z.$isI0||typeof a==="object"&&a!==null&&!!z.$ishy)return a
return},pN:function(a,b){var z,y
z=J.x(a)
if(typeof a==="object"&&a!==null&&!!z.$iscv)return M.F5(a,b)
@@ -20216,23 +19747,23 @@
y.sr9(z,"checkbox")
x=[]
w=y.gVl(z)
-v=new W.Ov(0,w.uv,w.Ph,W.aF(new M.LfS(x)),w.Sg)
+v=new W.Ov(0,w.uv,w.Ph,W.aF(new M.ik(x)),w.Sg)
H.VM(v,[H.W8(w,"RO",0)])
v.Zz()
y=y.gEr(z)
-v=new W.Ov(0,y.uv,y.Ph,W.aF(new M.fTP(x)),y.Sg)
+v=new W.Ov(0,y.uv,y.Ph,W.aF(new M.LfS(x)),y.Sg)
H.VM(v,[H.W8(y,"RO",0)])
v.Zz()
z.dispatchEvent(W.H6("click",!1,0,!0,!0,0,0,!1,0,!1,null,0,0,!1,window))
return x.length===1?C.mt:C.Nm.gFV(x)},
"+call:0:0":0,
$isEH:true,
-$is_X0:true},LfS:{"":"Tp;a",
+$is_X0:true},ik:{"":"Tp;a",
call$1:function(a){this.a.push(C.T1)},
"+call:1:0":0,
$isEH:true,
$is_HB:true,
-$is_Dv:true},fTP:{"":"Tp;b",
+$is_Dv:true},LfS:{"":"Tp;b",
call$1:function(a){this.b.push(C.mt)},
"+call:1:0":0,
$isEH:true,
@@ -20889,6 +20420,7 @@
init.globalFunctions.LS=P.LS=new P.Ri(P.qc,"LS")
init.globalFunctions.iv=P.iv=new H.zy(P.Ou,"iv")
init.globalFunctions.py=P.py=new H.Nb(P.T9,"py")
+init.globalFunctions.BC=P.BC=new H.Nb(P.tp,"BC")
init.globalFunctions.n4=P.n4=new H.zy(P.Wc,"n4")
init.globalFunctions.N3=P.N3=new H.zy(P.ad,"N3")
init.globalFunctions.J2=P.J2=new H.Nb(P.xv,"J2")
@@ -20947,15 +20479,10 @@
U.EZ.$isa=true
U.RW.$ishw=true
U.RW.$isa=true
-U.zX.$iszX=true
-U.zX.$ishw=true
-U.zX.$isa=true
U.uk.$ishw=true
U.uk.$isa=true
U.K9.$ishw=true
U.K9.$isa=true
-U.x9.$ishw=true
-U.x9.$isa=true
U.no.$ishw=true
U.no.$isa=true
U.jK.$ishw=true
@@ -20981,38 +20508,38 @@
A.XP.$isD0=true
A.XP.$isa=true
P.vr.$isvr=true
-P.vr.$isej=true
+P.vr.$isQF=true
P.vr.$isa=true
-P.NL.$isej=true
-P.NL.$isa=true
-P.RS.$isej=true
-P.RS.$isa=true
-H.Zk.$isej=true
-H.Zk.$isej=true
-H.Zk.$isej=true
-H.Zk.$isa=true
P.D4.$isD4=true
-P.D4.$isej=true
-P.D4.$isej=true
+P.D4.$isQF=true
+P.D4.$isQF=true
P.D4.$isa=true
-P.ej.$isej=true
-P.ej.$isa=true
-P.RY.$isej=true
-P.RY.$isa=true
-P.Ms.$isMs=true
-P.Ms.$isej=true
-P.Ms.$isej=true
-P.Ms.$isa=true
-P.Ys.$isej=true
+P.RS.$isQF=true
+P.RS.$isa=true
+H.Zk.$isQF=true
+H.Zk.$isQF=true
+H.Zk.$isQF=true
+H.Zk.$isa=true
+P.Ys.$isQF=true
P.Ys.$isa=true
-P.Fw.$isej=true
+P.Ms.$isMs=true
+P.Ms.$isQF=true
+P.Ms.$isQF=true
+P.Ms.$isa=true
+P.Fw.$isQF=true
P.Fw.$isa=true
-P.L9u.$isej=true
+P.L9u.$isQF=true
P.L9u.$isa=true
X.TR.$isa=true
N.TJ.$isa=true
T.yj.$isyj=true
T.yj.$isa=true
+P.NL.$isQF=true
+P.NL.$isa=true
+P.RY.$isQF=true
+P.RY.$isa=true
+P.QF.$isQF=true
+P.QF.$isa=true
P.MO.$isMO=true
P.MO.$isa=true
F.d3.$isa=true
@@ -21036,9 +20563,9 @@
P.uq.$isa=true
P.iD.$isiD=true
P.iD.$isa=true
-W.QF.$isKV=true
-W.QF.$isD0=true
-W.QF.$isa=true
+W.YN.$isKV=true
+W.YN.$isD0=true
+W.YN.$isa=true
P.HI.$isqh=true
P.HI.$asqh=[null]
P.HI.$isa=true
@@ -21057,6 +20584,8 @@
W.ew.$isea=true
W.ew.$isa=true
L.Pf.$isa=true
+W.cx.$isea=true
+W.cx.$isa=true
P.mE.$ismE=true
P.mE.$isa=true
P.KA.$isKA=true
@@ -21070,11 +20599,11 @@
P.JI.$isa=true
H.Uz.$isUz=true
H.Uz.$isD4=true
-H.Uz.$isej=true
-H.Uz.$isej=true
-H.Uz.$isej=true
-H.Uz.$isej=true
-H.Uz.$isej=true
+H.Uz.$isQF=true
+H.Uz.$isQF=true
+H.Uz.$isQF=true
+H.Uz.$isQF=true
+H.Uz.$isQF=true
H.Uz.$isa=true
P.e4.$ise4=true
P.e4.$isa=true
@@ -21144,18 +20673,18 @@
return J.ks(a)}
C.OL=new U.EZ()
C.Gw=new H.SJ()
-C.l0=new J.Q()
+C.E3=new J.Q()
C.Fm=new J.kn()
C.yX=new J.Pp()
-C.wq=new J.im()
+C.c1=new J.im()
C.oD=new J.P()
C.Kn=new J.O()
C.lM=new P.by()
-C.mI=new K.ndx()
+C.mI=new K.Fa()
C.Us=new A.yL()
-C.nJ=new K.Hm()
+C.nJ=new K.x9()
C.Wj=new P.dp()
-C.za=new A.jh()
+C.za=new A.Mh()
C.NU=new P.R8()
C.v8=new P.W5()
C.kk=Z.aC.prototype
@@ -21164,22 +20693,25 @@
C.Vy=new A.V3("disassembly-entry")
C.J0=new A.V3("observatory-element")
C.Er=new A.V3("script-view")
+C.ht=new A.V3("field-ref")
C.aM=new A.V3("isolate-summary")
C.Ig=new A.V3("response-viewer")
C.Uc=new A.V3("function-view")
C.xW=new A.V3("code-view")
C.aQ=new A.V3("class-view")
-C.Ob=new A.V3("library-view")
+C.Oy=new A.V3("library-view")
C.c0=new A.V3("message-viewer")
C.js=new A.V3("stack-trace")
C.jF=new A.V3("isolate-list")
C.KG=new A.V3("navigation-bar")
+C.ay=new A.V3("instance-ref")
C.Gu=new A.V3("collapsible-content")
C.bd=new A.V3("observatory-application")
C.uW=new A.V3("error-view")
C.HN=new A.V3("json-view")
C.H8=new A.V3("source-view")
-C.mv=new A.V3("field-view")
+C.Tq=new A.V3("field-view")
+C.ql=new A.V3("instance-view")
C.Tl=E.Fv.prototype
C.RT=new P.a6(0)
C.OD=F.I3.prototype
@@ -21189,9 +20721,13 @@
C.PP=H.VM(new W.e0("hashchange"),[W.ea])
C.io=H.VM(new W.e0("input"),[W.ea])
C.fK=H.VM(new W.e0("load"),[W.ew])
+C.ph=H.VM(new W.e0("message"),[W.cx])
+C.WR=D.qr.prototype
C.lS=A.Gk.prototype
C.PJ=N.Ds.prototype
C.W3=W.fJ.prototype
+C.cp=B.pR.prototype
+C.yK=Z.hx.prototype
C.Dh=L.u7.prototype
C.nM=D.St.prototype
C.Nm=J.Q.prototype
@@ -21319,6 +20855,7 @@
hooks.prototypeForTag = prototypeForTagIE;
}
C.A3=new P.QM(null)
+C.Ap=new P.dI(null)
C.GB=Z.vj.prototype
C.VZ=new N.Ng("FINER",400)
C.R5=new N.Ng("FINE",500)
@@ -21347,13 +20884,13 @@
C.uE=new H.LP(11,{caption:null,col:null,colgroup:null,option:null,optgroup:null,tbody:null,td:null,tfoot:null,th:null,thead:null,tr:null},C.zJ)
C.uS=I.makeConstantList(["webkitanimationstart","webkitanimationend","webkittransitionend","domfocusout","domfocusin","animationend","animationiteration","animationstart","doubleclick","fullscreenchange","fullscreenerror","keyadded","keyerror","keymessage","needkey","speechchange"])
C.FS=new H.LP(16,{webkitanimationstart:"webkitAnimationStart",webkitanimationend:"webkitAnimationEnd",webkittransitionend:"webkitTransitionEnd",domfocusout:"DOMFocusOut",domfocusin:"DOMFocusIn",animationend:"webkitAnimationEnd",animationiteration:"webkitAnimationIteration",animationstart:"webkitAnimationStart",doubleclick:"dblclick",fullscreenchange:"webkitfullscreenchange",fullscreenerror:"webkitfullscreenerror",keyadded:"webkitkeyadded",keyerror:"webkitkeyerror",keymessage:"webkitkeymessage",needkey:"webkitneedkey",speechchange:"webkitSpeechChange"},C.uS)
-C.qr=I.makeConstantList(["!",":",",",")","]","}","?","||","&&","|","^","&","!=","==",">=",">","<=","<","+","-","%","/","*","(","[",".","{"])
-C.dj=new H.LP(27,{"!":0,":":0,",":0,")":0,"]":0,"}":0,"?":1,"||":2,"&&":3,"|":4,"^":5,"&":6,"!=":7,"==":7,">=":8,">":8,"<=":8,"<":8,"+":9,"-":9,"%":10,"/":10,"*":10,"(":11,"[":11,".":11,"{":11},C.qr)
+C.p5=I.makeConstantList(["!",":",",",")","]","}","?","||","&&","|","^","&","!=","==",">=",">","<=","<","+","-","%","/","*","(","[",".","{"])
+C.dj=new H.LP(27,{"!":0,":":0,",":0,")":0,"]":0,"}":0,"?":1,"||":2,"&&":3,"|":4,"^":5,"&":6,"!=":7,"==":7,">=":8,">":8,"<=":8,"<":8,"+":9,"-":9,"%":10,"/":10,"*":10,"(":11,"[":11,".":11,"{":11},C.p5)
C.pa=I.makeConstantList(["name","extends","constructor","noscript","attributes"])
C.kr=new H.LP(5,{name:1,extends:1,constructor:1,noscript:1,attributes:1},C.pa)
C.ME=I.makeConstantList(["enumerate"])
C.va=new H.LP(1,{enumerate:K.ZO},C.ME)
-C.Wp=L.BK.prototype
+C.Wp=L.Nh.prototype
C.Xg=Q.ih.prototype
C.t5=W.BH.prototype
C.k0=V.F1.prototype
@@ -21378,18 +20915,18 @@
C.Je=new H.GD("current")
C.h1=new H.GD("currentHash")
C.tv=new H.GD("currentHashUri")
+C.Na=new H.GD("devtools")
C.Jw=new H.GD("displayValue")
C.nN=new H.GD("dynamic")
-C.yh=new H.GD("error")
+C.YU=new H.GD("error")
C.Yn=new H.GD("error_obj")
C.WQ=new H.GD("field")
C.nf=new H.GD("function")
C.AZ=new H.GD("dart.core.String")
C.Di=new H.GD("iconClass")
C.EN=new H.GD("id")
+C.fn=new H.GD("instance")
C.eJ=new H.GD("instruction")
-C.ai=new H.GD("isEmpty")
-C.nZ=new H.GD("isNotEmpty")
C.Y2=new H.GD("isolate")
C.Gd=new H.GD("json")
C.fy=new H.GD("kind")
@@ -21425,7 +20962,9 @@
C.wa=new H.Lm(C.vO,"V",0)
C.Ti=H.mm('wn')
C.Mt=new H.Lm(C.Ti,"E",0)
-C.qM=H.mm('F1')
+C.Ye=H.mm('hx')
+C.G6=H.mm('F1')
+C.NM=H.mm('Nh')
C.nY=H.mm('a')
C.Yc=H.mm('iP')
C.LN=H.mm('Be')
@@ -21435,7 +20974,7 @@
C.Op=H.mm('G8')
C.xF=H.mm('NQ')
C.b4=H.mm('ih')
-C.ced=H.mm('kK')
+C.Ob=H.mm('kK')
C.hG=H.mm('ir')
C.aj=H.mm('fI')
C.dA=H.mm('Ms')
@@ -21444,7 +20983,8 @@
C.xE=H.mm('aC')
C.yw=H.mm('int')
C.vuj=H.mm('uw')
-C.Tq=H.mm('vj')
+C.j6=H.mm('qr')
+C.C6=H.mm('vj')
C.CT=H.mm('St')
C.Q4=H.mm('uL')
C.yQ=H.mm('EH')
@@ -21452,14 +20992,14 @@
C.yg=H.mm('I3')
C.XU=H.mm('i6')
C.Bm=H.mm('XP')
+C.Wz=H.mm('pR')
C.HL=H.mm('bool')
C.HH=H.mm('dynamic')
C.Gp=H.mm('cw')
-C.Sa=H.mm('Ds')
+C.mnH=H.mm('Ds')
C.CS=H.mm('vm')
C.XK=H.mm('Gk')
C.GX=H.mm('c8')
-C.WIe=H.mm('BK')
C.vB=J.is.prototype
C.dy=new P.z0(!1)
C.ol=W.K5.prototype
@@ -21506,6 +21046,7 @@
J.EC=function(a){return J.RE(a).giC(a)}
J.EY=function(a,b){return J.RE(a).od(a,b)}
J.Eg=function(a,b){return J.rY(a).Tc(a,b)}
+J.Eh=function(a,b){return J.Wx(a).O(a,b)}
J.F8=function(a){return J.RE(a).gjO(a)}
J.FN=function(a){return J.U6(a).gl0(a)}
J.FW=function(a,b){if(typeof a=="number"&&typeof b=="number")return a/b
@@ -21513,6 +21054,7 @@
J.GJ=function(a,b,c,d){return J.RE(a).Y9(a,b,c,d)}
J.GK=function(a){return J.RE(a).glc(a)}
J.GP=function(a){return J.w1(a).gA(a)}
+J.GS=function(a,b,c,d){return J.RE(a).rJ(a,b,c,d)}
J.GW=function(a){return J.RE(a).gn4(a)}
J.H4=function(a,b){return J.RE(a).wR(a,b)}
J.Hb=function(a,b){if(typeof a=="number"&&typeof b=="number")return a<=b
@@ -21520,6 +21062,7 @@
J.Hf=function(a){return J.RE(a).gTq(a)}
J.I8=function(a,b,c){return J.rY(a).wL(a,b,c)}
J.Ib=function(a){return J.RE(a).gqh(a)}
+J.Ih=function(a,b,c){return J.RE(a).X6(a,b,c)}
J.Ir=function(a){return J.RE(a).gHs(a)}
J.Iz=function(a){return J.RE(a).gfY(a)}
J.J5=function(a,b){if(typeof a=="number"&&typeof b=="number")return a>=b
@@ -21553,7 +21096,6 @@
J.UU=function(a,b){return J.U6(a).u8(a,b)}
J.UW=function(a){return J.RE(a).gLU(a)}
J.UX=function(a){return J.RE(a).gmW(a)}
-J.Ut=function(a,b,c,d){return J.RE(a).rJ(a,b,c,d)}
J.V1=function(a,b){return J.w1(a).Rz(a,b)}
J.VN=function(a){return J.RE(a).gM0(a)}
J.Vm=function(a){return J.RE(a).gP(a)}
@@ -21564,6 +21106,7 @@
return J.Qc(a).g(a,b)}
J.WI=function(a){return J.RE(a).gG3(a)}
J.We=function(a,b){return J.RE(a).scC(a,b)}
+J.Xf=function(a,b){return J.RE(a).oo(a,b)}
J.Y5=function(a){return J.RE(a).gyT(a)}
J.Z0=function(a){return J.RE(a).ghr(a)}
J.Z7=function(a){if(typeof a=="number")return-a
@@ -21573,7 +21116,6 @@
J.bh=function(a,b,c){return J.rY(a).JT(a,b,c)}
J.bi=function(a,b){return J.w1(a).h(a,b)}
J.bs=function(a){return J.RE(a).JP(a)}
-J.c1=function(a,b){return J.Wx(a).O(a,b)}
J.c9=function(a,b){return J.RE(a).sa4(a,b)}
J.co=function(a,b){return J.rY(a).nC(a,b)}
J.e2=function(a,b,c,d,e,f,g,h,i,j,k,l,m,n,o,p){return J.RE(a).nH(a,b,c,d,e,f,g,h,i,j,k,l,m,n,o,p)}
@@ -21617,7 +21159,6 @@
J.uH=function(a,b){return J.rY(a).Fr(a,b)}
J.uf=function(a){return J.RE(a).gxr(a)}
J.v1=function(a){return J.x(a).giO(a)}
-J.vF=function(a){return J.RE(a).gbP(a)}
J.vX=function(a){return J.w1(a).wg(a)}
J.vo=function(a,b){return J.w1(a).ev(a,b)}
J.w8=function(a){return J.RE(a).gkc(a)}
@@ -21634,8 +21175,8 @@
J.z2=function(a){return J.RE(a).gG1(a)}
J.zZ=function(a,b){return J.RE(a).Yv(a,b)}
J.zj=function(a){return J.RE(a).gvH(a)}
-$.Dq=["Ay","BN","BT","Ba","Bf","C","C0","C8","Ch","D","D3","D6","Dh","E","Ec","F","FH","Fr","GB","HG","Hn","Id","Ih","Im","Is","J","J3","JP","JT","JV","Ja","Jk","Kb","LV","Md","Mi","Mu","Nj","Nz","O","On","PM","Pa","Pk","Pv","R3","R4","RB","RR","Rz","SS","SZ","T","T2","TP","TW","Tc","Td","Tp","U","UD","UH","UZ","Uc","V","V1","Vr","Vy","W","W3","W4","WL","WO","WZ","Wt","Wz","XG","XU","Xl","Y9","YU","YW","Ys","Yv","Z","Z1","Z2","ZB","ZL","ZP","Zv","aC","aN","aq","bA","bS","br","bu","cO","cn","ct","d0","dd","du","eR","ea","er","es","ev","ez","f6","fd","fj","fk","fm","g","gA","gB","gBb","gCd","gCj","gDD","gDg","gE8","gEX","gEr","gF1","gFF","gFJ","gFT","gFV","gFe","gG0","gG1","gG3","gGL","gHX","gHs","gI","gIi","gJS","gJf","gKE","gKM","gKV","gLA","gLU","gLm","gM0","gMB","gMj","gN","gNI","gNl","gO3","gP","gP1","gPp","gPu","gPw","gPy","gQ0","gQG","gQW","gQg","gQq","gRu","gT8","gTM","gTn","gTq","gUQ","gUV","gUy","gUz","gVB","gVl","gXB","gXt","gZw","gai","gbP","gbx","gcC","geT","geb","gey","gfY","ghO","ghm","ghr","gi0","giC","giI","giO","gig","gjL","gjO","gjU","gjb","gkU","gkc","gkf","gkp","gl0","gl7","glc","gmW","gmm","gn4","goc","gor","gpQ","gpo","gq6","gqC","gqh","gql","gr3","gr9","grK","grZ","gt0","gtD","gtN","gtT","guD","gvH","gvX","gvc","gvt","gxj","gxr","gyT","gys","gzP","gzZ","gzh","h","h8","hV","hc","i","i3","i4","iA","iM","iw","j","jT","jx","kO","l5","l8","lj","m","mK","mv","n","nB","nC","nH","nP","ni","oB","oW","od","oo","oq","pZ","pl","pr","qZ","r6","rJ","rS","sB","sF1","sFF","sFJ","sFT","sG1","sHX","sIt","sLA","sMj","sNI","sNl","sO3","sP","sPw","sPy","sQG","sQq","sRu","sTn","sTq","sUy","sUz","sVB","sXB","sZw","sa4","sai","scC","seb","sfY","shO","shm","si0","siI","sig","sjO","skc","skf","sl7","soc","sql","sr9","st0","stD","stN","stT","svX","svt","sxj","sxr","szZ","szh","t","tZ","tg","tt","u","u5","u8","uG","vs","w3","wE","wL","wR","wg","x3","xe","y0","yC","yc","ym","yn","yq","yu","yx","yy","z2","zV"]
-$.Au=[C.qM,V.F1,{created:V.fv},C.LN,F.Be,{created:F.Fe},C.Qa,L.u7,{created:L.ip},C.xS,P.UZ,{},C.PT,M.CX,{created:M.SP},C.Op,P.G8,{},C.xF,Q.NQ,{created:Q.Zo},C.b4,Q.ih,{created:Q.BW},C.ced,X.kK,{created:X.HO},C.hG,A.ir,{created:A.oa},C.aj,U.fI,{created:U.Ry},C.mo,E.Fv,{created:E.AH},C.xE,Z.aC,{created:Z.zg},C.vuj,X.uw,{created:X.bV},C.Tq,Z.vj,{created:Z.un},C.CT,D.St,{created:D.N5},C.Q4,Z.uL,{created:Z.Hx},C.yg,F.I3,{created:F.TW},C.XU,R.i6,{created:R.IT},C.Bm,A.XP,{created:A.XL},C.Sa,N.Ds,{created:N.p7},C.XK,A.Gk,{created:A.cY},C.WIe,L.BK,{created:L.rJ}]
+$.Dq=["Ay","BN","BT","Ba","C","C0","C8","Ch","D","D3","D6","Dh","E","Ec","F","FH","Fr","GB","HG","Hn","Id","Ih","Im","Is","J","J3","JP","JT","JV","Ja","Jk","Kb","LV","Md","Mi","Mu","Nj","Nz","O","On","PM","Pa","Pk","Pv","R3","R4","RB","RR","Rz","SZ","T","T2","TH","TP","TW","Tc","Td","U","UD","UH","UZ","Uc","V","V1","Vr","Vy","W","W3","W4","WO","WZ","Wt","Wz","X6","XG","XU","Xl","Y9","YU","YW","Ys","Yv","Z","Z1","Z2","ZB","ZF","ZL","ZP","Zv","aC","aN","aq","bA","bS","br","bu","cO","cn","d0","dR","dd","du","eR","ea","er","es","ev","ez","f6","fd","fj","fk","fm","g","gA","gB","gBb","gCd","gCj","gDD","gDg","gE8","gEX","gEr","gF1","gFF","gFJ","gFT","gFV","gFe","gG0","gG1","gG3","gGL","gHs","gI","gIi","gJS","gJf","gKE","gKM","gKV","gLA","gLU","gLf","gLm","gM0","gMB","gMj","gN","gNI","gNl","gO3","gP","gP1","gP2","gPp","gPu","gPw","gPy","gQ0","gQG","gQW","gQg","gRn","gRu","gT8","gTM","gTn","gTq","gUQ","gUV","gUz","gV4","gVA","gVB","gVl","gXB","gXf","gXh","gXt","gZw","gai","gbP","gbx","gcC","geT","geb","gey","gfY","ghO","ghf","ghr","gi0","giC","giI","giK","giO","gig","gjL","gjO","gjU","gjb","gk5","gkU","gkc","gkf","gkp","gl0","gl7","glc","gmW","gmm","gn4","goc","gor","gpQ","gpo","gq6","gqC","gqh","gql","gr3","gr9","grK","grZ","gt0","gtD","gtH","gtN","gtT","guD","gvH","gvX","gvc","gvt","gxj","gxr","gyT","gys","gzP","gzZ","gzj","h","h8","hV","hc","i","i4","iA","iM","iw","j","jT","jx","kO","l5","l8","lj","m","mK","mv","n","nB","nC","nH","nP","ni","oB","oW","od","oo","oq","pD","pZ","pl","pr","qZ","r6","rJ","rS","sB","sF1","sFF","sFJ","sFT","sG1","sIt","sLA","sLf","sMj","sNI","sNl","sO3","sP","sP2","sPw","sPy","sQG","sRu","sTn","sTq","sUz","sV4","sVA","sVB","sXB","sXf","sXh","sZw","sa4","sai","scC","seb","sfY","shO","shf","si0","siI","siK","sig","sjO","sk5","skc","skf","sl7","soc","sql","sr9","st0","stD","stH","stN","stT","svX","svt","sxj","sxr","szZ","szj","t","tZ","tg","tt","u","u5","u8","uG","vs","w3","wE","wL","wR","wg","x3","xI","xc","xe","y0","yC","yc","ym","yn","yq","yu","yx","yy","z2","zV"]
+$.Au=[C.Ye,Z.hx,{created:Z.HC},C.G6,V.F1,{created:V.fv},C.NM,L.Nh,{created:L.rJ},C.LN,F.Be,{created:F.Fe},C.Qa,L.u7,{created:L.Tt},C.xS,P.UZ,{},C.PT,M.CX,{created:M.SP},C.Op,P.G8,{},C.xF,Q.NQ,{created:Q.Zo},C.b4,Q.ih,{created:Q.BW},C.Ob,X.kK,{created:X.HO},C.hG,A.ir,{created:A.oa},C.aj,U.fI,{created:U.Ry},C.mo,E.Fv,{created:E.AH},C.xE,Z.aC,{created:Z.zg},C.vuj,X.uw,{created:X.bV},C.j6,D.qr,{created:D.ip},C.C6,Z.vj,{created:Z.un},C.CT,D.St,{created:D.N5},C.Q4,Z.uL,{created:Z.Hx},C.yg,F.I3,{created:F.TW},C.XU,R.i6,{created:R.IT},C.Bm,A.XP,{created:A.XL},C.Wz,B.pR,{created:B.lu},C.mnH,N.Ds,{created:N.p7},C.XK,A.Gk,{created:A.cY}]
I.$lazy($,"globalThis","DX","jk",function(){return function() { return this; }()})
I.$lazy($,"globalWindow","pG","Qm",function(){return $.jk().window})
I.$lazy($,"globalWorker","zA","Nl",function(){return $.jk().Worker})
@@ -21689,7 +21230,6 @@
I.$lazy($,"_waitSuper","uv","xY",function(){return P.L5(null,null,null,J.O,[J.Q,A.XP])})
I.$lazy($,"_declarations","EJ","cd",function(){return P.L5(null,null,null,J.O,A.XP)})
I.$lazy($,"_objectType","Cy","Tf",function(){return P.re(C.nY)})
-I.$lazy($,"_sheetLog","Fa","vM",function(){return N.Jx("polymer.stylesheet")})
I.$lazy($,"_reverseEventTranslations","fp","pT",function(){return new A.w12().call$0()})
I.$lazy($,"bindPattern","ZA","VC",function(){return new H.VR(H.v4("\\{\\{([^{}]*)}}",!1,!0,!1),null,null)})
I.$lazy($,"_polymerSyntax","Df","Nd",function(){var z=P.L5(null,null,null,J.O,P.a)
@@ -21723,7 +21263,7 @@
return z.t(z,y)})
I.$lazy($,"_mangledNameField","AU","av",function(){return new M.w13().call$0()})
I.$lazy($,"_logger","Kp","IS",function(){return N.Jx("polymer_expressions")})
-I.$lazy($,"_BINARY_OPERATORS","AM","e6",function(){return H.B7(["+",new K.wJY(),"-",new K.zOQ(),"*",new K.W6o(),"/",new K.MdQ(),"==",new K.YJG(),"!=",new K.DOe(),">",new K.lPa(),">=",new K.Ufa(),"<",new K.Raa(),"<=",new K.w0(),"||",new K.w4(),"&&",new K.w5(),"|",new K.w7()],P.L5(null,null,null,null,null))})
+I.$lazy($,"_BINARY_OPERATORS","tB","bF",function(){return H.B7(["+",new K.wJY(),"-",new K.zOQ(),"*",new K.W6o(),"/",new K.MdQ(),"==",new K.YJG(),"!=",new K.DOe(),">",new K.lPa(),">=",new K.Ufa(),"<",new K.Raa(),"<=",new K.w0(),"||",new K.w4(),"&&",new K.w5(),"|",new K.w7()],P.L5(null,null,null,null,null))})
I.$lazy($,"_UNARY_OPERATORS","ju","YG",function(){return H.B7(["+",new K.w9(),"-",new K.w10(),"!",new K.w11()],P.L5(null,null,null,null,null))})
I.$lazy($,"_checkboxEventType","S8","FF",function(){return new M.Uf().call$0()})
I.$lazy($,"_contentsOwner","mn","LQ",function(){var z=new P.kM(null)
@@ -21736,7 +21276,7 @@
return z})
init.functionAliases={}
-init.metadata=[P.a,C.wK,C.wa,C.WX,C.Mt,C.wW,P.uq,"name",J.O,Z.aC,F.Be,R.i6,W.K5,E.Fv,F.I3,A.Gk,N.Ds,L.u7,D.St,Z.vj,M.CX,L.BK,Q.ih,V.F1,Z.uL,[K.Ae,3],"index",J.im,"value",3,Q.NQ,U.fI,X.kK,X.uw,P.L8,C.nJ,C.Us,,Z.Vf,F.tu,C.mI,J.kn,"r","e",W.ea,"detail","target",W.KV,R.Vc,[P.L8,P.wv,P.RS],[J.Q,H.Zk],"methodOwner",P.NL,[J.Q,P.RY],"fieldOwner",[P.L8,P.wv,P.RY],[P.L8,P.wv,P.ej],[P.L8,P.wv,P.NL],P.vr,"fieldName",P.wv,"arg",H.Uz,[J.Q,P.vr],P.Ms,"memberName","positionalArguments",J.Q,"namedArguments",[P.L8,P.wv,null],[J.Q,P.Ms],"owner",[J.Q,P.Fw],[J.Q,P.L9u],H.Un,"key",P.ej,H.Tp,"tv","i",E.WZ,F.pv,A.Vfx,N.Dsd,D.tuj,"oldValue",Z.Vct,M.D13,"m",[J.Q,P.L8],P.iD,"l","objectId","cid","isolateId",[J.Q,L.Zw],L.mL,Z.Xf,5,"newValue",4,[P.cX,1],[P.cX,2],2,1,"v","o",U.WZq,L.Pf,X.pva,X.cda,];$=null
+init.metadata=[P.a,C.wK,C.wa,C.WX,C.Mt,C.wW,P.uq,"name",J.O,Z.aC,F.Be,R.i6,W.K5,E.Fv,F.I3,D.qr,A.Gk,N.Ds,B.pR,Z.hx,L.u7,D.St,Z.vj,M.CX,L.Nh,Q.ih,V.F1,Z.uL,[K.Ae,3],"index",J.im,"value",3,Q.NQ,U.fI,X.kK,X.uw,P.L8,C.nJ,C.Us,,Z.Vf,F.tu,C.mI,J.kn,"r","e",W.ea,"detail","target",W.KV,R.Vc,[P.L8,P.wv,P.RS],[J.Q,H.Zk],"methodOwner",P.NL,[J.Q,P.RY],"fieldOwner",[P.L8,P.wv,P.RY],[P.L8,P.wv,P.QF],[P.L8,P.wv,P.NL],P.vr,"fieldName",P.wv,"arg",H.Uz,[J.Q,P.vr],P.Ms,"memberName","positionalArguments",J.Q,"namedArguments",[P.L8,P.wv,null],[J.Q,P.Ms],"owner",[J.Q,P.Fw],[J.Q,P.L9u],H.Un,"key",P.QF,H.Tp,"tv","i",E.WZ,F.pv,D.Vfx,A.Dsd,N.tuj,B.Vct,Z.D13,D.WZq,"oldValue",Z.pva,M.cda,"m",[J.Q,P.L8],P.iD,"l","objectId","cid","isolateId",[J.Q,L.Zw],V.waa,L.mL,Z.Nr,5,"newValue",4,[P.cX,1],[P.cX,2],2,1,"v",U.V0,L.Pf,X.V4,X.V6,];$=null
I = I.$finishIsolateConstructor(I)
$=new I()
function convertToFastObject(properties) {
@@ -21798,9 +21338,9 @@
init.currentScript = currentScript;
if (typeof dartMainRunner === "function") {
- dartMainRunner(function() { H.Vg(E.qg); });
+ dartMainRunner(function() { H.SG(E.qg); });
} else {
- H.Vg(E.qg);
+ H.SG(E.qg);
}
})
function init(){I.p={}
@@ -22024,6 +21564,7 @@
$desc=$collectedClasses.OM
if($desc instanceof Array)$desc=$desc[1]
OM.prototype=$desc
+OM.prototype.gRn=function(receiver){return receiver.data}
OM.prototype.gB=function(receiver){return receiver.length}
function QQ(){}QQ.builtin$cls="QQ"
if(!"name" in QQ)QQ.name="QQ"
@@ -22041,16 +21582,17 @@
$desc=$collectedClasses.y4
if($desc instanceof Array)$desc=$desc[1]
y4.prototype=$desc
+y4.prototype.gRn=function(receiver){return receiver.data}
function d7(){}d7.builtin$cls="d7"
if(!"name" in d7)d7.name="d7"
$desc=$collectedClasses.d7
if($desc instanceof Array)$desc=$desc[1]
d7.prototype=$desc
-function Rb(){}Rb.builtin$cls="Rb"
-if(!"name" in Rb)Rb.name="Rb"
-$desc=$collectedClasses.Rb
+function na(){}na.builtin$cls="na"
+if(!"name" in na)na.name="na"
+$desc=$collectedClasses.na
if($desc instanceof Array)$desc=$desc[1]
-Rb.prototype=$desc
+na.prototype=$desc
function oJ(){}oJ.builtin$cls="oJ"
if(!"name" in oJ)oJ.name="oJ"
$desc=$collectedClasses.oJ
@@ -22097,11 +21639,11 @@
$desc=$collectedClasses.Wy
if($desc instanceof Array)$desc=$desc[1]
Wy.prototype=$desc
-function QF(){}QF.builtin$cls="QF"
-if(!"name" in QF)QF.name="QF"
-$desc=$collectedClasses.QF
+function YN(){}YN.builtin$cls="YN"
+if(!"name" in YN)YN.name="YN"
+$desc=$collectedClasses.YN
if($desc instanceof Array)$desc=$desc[1]
-QF.prototype=$desc
+YN.prototype=$desc
function bA(){}bA.builtin$cls="bA"
if(!"name" in bA)bA.name="bA"
$desc=$collectedClasses.bA
@@ -22112,19 +21654,19 @@
$desc=$collectedClasses.Wq
if($desc instanceof Array)$desc=$desc[1]
Wq.prototype=$desc
-function rz(){}rz.builtin$cls="rz"
-if(!"name" in rz)rz.name="rz"
-$desc=$collectedClasses.rz
+function rv(){}rv.builtin$cls="rv"
+if(!"name" in rv)rv.name="rv"
+$desc=$collectedClasses.rv
if($desc instanceof Array)$desc=$desc[1]
-rz.prototype=$desc
-rz.prototype.gG1=function(receiver){return receiver.message}
-rz.prototype.goc=function(receiver){return receiver.name}
-function Nh(){}Nh.builtin$cls="Nh"
-if(!"name" in Nh)Nh.name="Nh"
-$desc=$collectedClasses.Nh
+rv.prototype=$desc
+rv.prototype.gG1=function(receiver){return receiver.message}
+rv.prototype.goc=function(receiver){return receiver.name}
+function BK(){}BK.builtin$cls="BK"
+if(!"name" in BK)BK.name="BK"
+$desc=$collectedClasses.BK
if($desc instanceof Array)$desc=$desc[1]
-Nh.prototype=$desc
-Nh.prototype.gG1=function(receiver){return receiver.message}
+BK.prototype=$desc
+BK.prototype.gG1=function(receiver){return receiver.message}
function wj(){}wj.builtin$cls="wj"
if(!"name" in wj)wj.name="wj"
$desc=$collectedClasses.wj
@@ -22279,6 +21821,7 @@
$desc=$collectedClasses.Sg
if($desc instanceof Array)$desc=$desc[1]
Sg.prototype=$desc
+Sg.prototype.gRn=function(receiver){return receiver.data}
function pA(){}pA.builtin$cls="pA"
if(!"name" in pA)pA.name="pA"
$desc=$collectedClasses.pA
@@ -22392,11 +21935,11 @@
if($desc instanceof Array)$desc=$desc[1]
ku.prototype=$desc
ku.prototype.gG1=function(receiver){return receiver.message}
-function Ih(){}Ih.builtin$cls="Ih"
-if(!"name" in Ih)Ih.name="Ih"
-$desc=$collectedClasses.Ih
+function KM(){}KM.builtin$cls="KM"
+if(!"name" in KM)KM.name="KM"
+$desc=$collectedClasses.KM
if($desc instanceof Array)$desc=$desc[1]
-Ih.prototype=$desc
+KM.prototype=$desc
function cW(){}cW.builtin$cls="cW"
if(!"name" in cW)cW.name="cW"
$desc=$collectedClasses.cW
@@ -22453,6 +21996,7 @@
$desc=$collectedClasses.Hw
if($desc instanceof Array)$desc=$desc[1]
Hw.prototype=$desc
+Hw.prototype.gRn=function(receiver){return receiver.data}
function bn(){}bn.builtin$cls="bn"
if(!"name" in bn)bn.name="bn"
$desc=$collectedClasses.bn
@@ -22516,16 +22060,17 @@
$desc=$collectedClasses.G7
if($desc instanceof Array)$desc=$desc[1]
G7.prototype=$desc
+G7.prototype.gRn=function(receiver){return receiver.data}
G7.prototype.gMB=function(receiver){return receiver.form}
G7.prototype.goc=function(receiver){return receiver.name}
G7.prototype.soc=function(receiver,v){return receiver.name=v}
G7.prototype.gr9=function(receiver){return receiver.type}
G7.prototype.sr9=function(receiver,v){return receiver.type=v}
-function kl(){}kl.builtin$cls="kl"
-if(!"name" in kl)kl.name="kl"
-$desc=$collectedClasses.kl
+function wq(){}wq.builtin$cls="wq"
+if(!"name" in wq)wq.name="wq"
+$desc=$collectedClasses.wq
if($desc instanceof Array)$desc=$desc[1]
-kl.prototype=$desc
+wq.prototype=$desc
function Ql(){}Ql.builtin$cls="Ql"
if(!"name" in Ql)Ql.name="Ql"
$desc=$collectedClasses.Ql
@@ -22660,11 +22205,11 @@
lp.prototype.gr9=function(receiver){return receiver.type}
lp.prototype.gP=function(receiver){return receiver.value}
lp.prototype.sP=function(receiver,v){return receiver.value=v}
-function kd(){}kd.builtin$cls="kd"
-if(!"name" in kd)kd.name="kd"
-$desc=$collectedClasses.kd
+function pD(){}pD.builtin$cls="pD"
+if(!"name" in pD)pD.name="pD"
+$desc=$collectedClasses.pD
if($desc instanceof Array)$desc=$desc[1]
-kd.prototype=$desc
+pD.prototype=$desc
function I0(){}I0.builtin$cls="I0"
if(!"name" in I0)I0.name="I0"
$desc=$collectedClasses.I0
@@ -22781,6 +22326,7 @@
$desc=$collectedClasses.xV
if($desc instanceof Array)$desc=$desc[1]
xV.prototype=$desc
+xV.prototype.gRn=function(receiver){return receiver.data}
function FH(){}FH.builtin$cls="FH"
if(!"name" in FH)FH.name="FH"
$desc=$collectedClasses.FH
@@ -22851,11 +22397,11 @@
UM.prototype.goc=function(receiver){return receiver.name}
UM.prototype.gP=function(receiver){return receiver.value}
UM.prototype.sP=function(receiver,v){return receiver.value=v}
-function WS(){}WS.builtin$cls="WS"
-if(!"name" in WS)WS.name="WS"
-$desc=$collectedClasses.WS
+function UL(){}UL.builtin$cls="UL"
+if(!"name" in UL)UL.name="UL"
+$desc=$collectedClasses.UL
if($desc instanceof Array)$desc=$desc[1]
-WS.prototype=$desc
+UL.prototype=$desc
function rq(){}rq.builtin$cls="rq"
if(!"name" in rq)rq.name="rq"
$desc=$collectedClasses.rq
@@ -22871,11 +22417,11 @@
$desc=$collectedClasses.kc
if($desc instanceof Array)$desc=$desc[1]
kc.prototype=$desc
-function Eh(){}Eh.builtin$cls="Eh"
-if(!"name" in Eh)Eh.name="Eh"
-$desc=$collectedClasses.Eh
+function ij(){}ij.builtin$cls="ij"
+if(!"name" in ij)ij.name="ij"
+$desc=$collectedClasses.ij
if($desc instanceof Array)$desc=$desc[1]
-Eh.prototype=$desc
+ij.prototype=$desc
function ty(){}ty.builtin$cls="ty"
if(!"name" in ty)ty.name="ty"
$desc=$collectedClasses.ty
@@ -22916,11 +22462,11 @@
$desc=$collectedClasses.hF
if($desc instanceof Array)$desc=$desc[1]
hF.prototype=$desc
-function yK(){}yK.builtin$cls="yK"
-if(!"name" in yK)yK.name="yK"
-$desc=$collectedClasses.yK
+function OF(){}OF.builtin$cls="OF"
+if(!"name" in OF)OF.name="OF"
+$desc=$collectedClasses.OF
if($desc instanceof Array)$desc=$desc[1]
-yK.prototype=$desc
+OF.prototype=$desc
function HB(){}HB.builtin$cls="HB"
if(!"name" in HB)HB.name="HB"
$desc=$collectedClasses.HB
@@ -23047,21 +22593,21 @@
$desc=$collectedClasses.VE
if($desc instanceof Array)$desc=$desc[1]
VE.prototype=$desc
-function zp(){}zp.builtin$cls="zp"
-if(!"name" in zp)zp.name="zp"
-$desc=$collectedClasses.zp
+function lc(){}lc.builtin$cls="lc"
+if(!"name" in lc)lc.name="lc"
+$desc=$collectedClasses.lc
if($desc instanceof Array)$desc=$desc[1]
-zp.prototype=$desc
+lc.prototype=$desc
function Xu(){}Xu.builtin$cls="Xu"
if(!"name" in Xu)Xu.name="Xu"
$desc=$collectedClasses.Xu
if($desc instanceof Array)$desc=$desc[1]
Xu.prototype=$desc
-function lu(){}lu.builtin$cls="lu"
-if(!"name" in lu)lu.name="lu"
-$desc=$collectedClasses.lu
+function qM(){}qM.builtin$cls="qM"
+if(!"name" in qM)qM.name="qM"
+$desc=$collectedClasses.qM
if($desc instanceof Array)$desc=$desc[1]
-lu.prototype=$desc
+qM.prototype=$desc
function tk(){}tk.builtin$cls="tk"
if(!"name" in tk)tk.name="tk"
$desc=$collectedClasses.tk
@@ -23078,11 +22624,11 @@
$desc=$collectedClasses.qN
if($desc instanceof Array)$desc=$desc[1]
qN.prototype=$desc
-function NY(){}NY.builtin$cls="NY"
-if(!"name" in NY)NY.name="NY"
-$desc=$collectedClasses.NY
+function nh(){}nh.builtin$cls="nh"
+if(!"name" in nh)nh.name="nh"
+$desc=$collectedClasses.nh
if($desc instanceof Array)$desc=$desc[1]
-NY.prototype=$desc
+nh.prototype=$desc
function d4(){}d4.builtin$cls="d4"
if(!"name" in d4)d4.name="d4"
$desc=$collectedClasses.d4
@@ -23136,11 +22682,11 @@
$desc=$collectedClasses.BA
if($desc instanceof Array)$desc=$desc[1]
BA.prototype=$desc
-function tp(){}tp.builtin$cls="tp"
-if(!"name" in tp)tp.name="tp"
-$desc=$collectedClasses.tp
+function zp(){}zp.builtin$cls="zp"
+if(!"name" in zp)zp.name="zp"
+$desc=$collectedClasses.zp
if($desc instanceof Array)$desc=$desc[1]
-tp.prototype=$desc
+zp.prototype=$desc
function rE(){}rE.builtin$cls="rE"
if(!"name" in rE)rE.name="rE"
$desc=$collectedClasses.rE
@@ -23268,13 +22814,13 @@
$desc=$collectedClasses.MT
if($desc instanceof Array)$desc=$desc[1]
MT.prototype=$desc
-function xN(){}xN.builtin$cls="xN"
-if(!"name" in xN)xN.name="xN"
-$desc=$collectedClasses.xN
+function Rk(){}Rk.builtin$cls="Rk"
+if(!"name" in Rk)Rk.name="Rk"
+$desc=$collectedClasses.Rk
if($desc instanceof Array)$desc=$desc[1]
-xN.prototype=$desc
-xN.prototype.gbP=function(receiver){return receiver.method}
-xN.prototype.gLU=function(receiver){return receiver.href}
+Rk.prototype=$desc
+Rk.prototype.gbP=function(receiver){return receiver.method}
+Rk.prototype.gLU=function(receiver){return receiver.href}
function Eo(){}Eo.builtin$cls="Eo"
if(!"name" in Eo)Eo.name="Eo"
$desc=$collectedClasses.Eo
@@ -23285,12 +22831,12 @@
$desc=$collectedClasses.Dn
if($desc instanceof Array)$desc=$desc[1]
Dn.prototype=$desc
-function ox(){}ox.builtin$cls="ox"
-if(!"name" in ox)ox.name="ox"
-$desc=$collectedClasses.ox
+function UD(){}UD.builtin$cls="UD"
+if(!"name" in UD)UD.name="UD"
+$desc=$collectedClasses.UD
if($desc instanceof Array)$desc=$desc[1]
-ox.prototype=$desc
-ox.prototype.gLU=function(receiver){return receiver.href}
+UD.prototype=$desc
+UD.prototype.gLU=function(receiver){return receiver.href}
function ZD(){}ZD.builtin$cls="ZD"
if(!"name" in ZD)ZD.name="ZD"
$desc=$collectedClasses.ZD
@@ -23337,11 +22883,11 @@
$desc=$collectedClasses.cB
if($desc instanceof Array)$desc=$desc[1]
cB.prototype=$desc
-function k2(){}k2.builtin$cls="k2"
-if(!"name" in k2)k2.name="k2"
-$desc=$collectedClasses.k2
+function uY(){}uY.builtin$cls="uY"
+if(!"name" in uY)uY.name="uY"
+$desc=$collectedClasses.uY
if($desc instanceof Array)$desc=$desc[1]
-k2.prototype=$desc
+uY.prototype=$desc
function yR(){}yR.builtin$cls="yR"
if(!"name" in yR)yR.name="yR"
$desc=$collectedClasses.yR
@@ -23419,6 +22965,11 @@
Cf.prototype=$desc
Cf.prototype.gtT=function(receiver){return receiver.code}
Cf.prototype.gG1=function(receiver){return receiver.message}
+function I2(){}I2.builtin$cls="I2"
+if(!"name" in I2)I2.name="I2"
+$desc=$collectedClasses.I2
+if($desc instanceof Array)$desc=$desc[1]
+I2.prototype=$desc
function AS(){}AS.builtin$cls="AS"
if(!"name" in AS)AS.name="AS"
$desc=$collectedClasses.AS
@@ -23500,11 +23051,11 @@
$desc=$collectedClasses.QI
if($desc instanceof Array)$desc=$desc[1]
QI.prototype=$desc
-function Tm(){}Tm.builtin$cls="Tm"
-if(!"name" in Tm)Tm.name="Tm"
-$desc=$collectedClasses.Tm
+function FP(){}FP.builtin$cls="FP"
+if(!"name" in FP)FP.name="FP"
+$desc=$collectedClasses.FP
if($desc instanceof Array)$desc=$desc[1]
-Tm.prototype=$desc
+FP.prototype=$desc
function is(){}is.builtin$cls="is"
if(!"name" in is)is.name="is"
$desc=$collectedClasses.is
@@ -23600,8 +23151,8 @@
$desc=$collectedClasses.RA
if($desc instanceof Array)$desc=$desc[1]
RA.prototype=$desc
-function IY(F1,xh,G1){this.F1=F1
-this.xh=xh
+function IY(F1,i3,G1){this.F1=F1
+this.i3=i3
this.G1=G1}IY.builtin$cls="IY"
if(!"name" in IY)IY.name="IY"
$desc=$collectedClasses.IY
@@ -24026,10 +23577,10 @@
$desc=$collectedClasses.tQ
if($desc instanceof Array)$desc=$desc[1]
tQ.prototype=$desc
-function aC(FJ,VJ,Ai,hm,VJ,Ai,VJ,Ai,ZI,uN,z3,TQ,Vk,Ye,mT,KM){this.FJ=FJ
+function aC(FJ,VJ,Ai,tH,VJ,Ai,VJ,Ai,ZI,uN,z3,TQ,Vk,Ye,mT,KM){this.FJ=FJ
this.VJ=VJ
this.Ai=Ai
-this.hm=hm
+this.tH=tH
this.VJ=VJ
this.Ai=Ai
this.VJ=VJ
@@ -24055,10 +23606,10 @@
$desc=$collectedClasses.Vf
if($desc instanceof Array)$desc=$desc[1]
Vf.prototype=$desc
-function Be(Zw,VJ,Ai,hm,VJ,Ai,VJ,Ai,ZI,uN,z3,TQ,Vk,Ye,mT,KM){this.Zw=Zw
+function Be(Zw,VJ,Ai,tH,VJ,Ai,VJ,Ai,ZI,uN,z3,TQ,Vk,Ye,mT,KM){this.Zw=Zw
this.VJ=VJ
this.Ai=Ai
-this.hm=hm
+this.tH=tH
this.VJ=VJ
this.Ai=Ai
this.VJ=VJ
@@ -24084,12 +23635,12 @@
$desc=$collectedClasses.tu
if($desc instanceof Array)$desc=$desc[1]
tu.prototype=$desc
-function i6(zh,HX,Uy,VJ,Ai,hm,VJ,Ai,VJ,Ai,ZI,uN,z3,TQ,Vk,Ye,mT,KM){this.zh=zh
-this.HX=HX
-this.Uy=Uy
+function i6(Xf,VA,P2,VJ,Ai,tH,VJ,Ai,VJ,Ai,ZI,uN,z3,TQ,Vk,Ye,mT,KM){this.Xf=Xf
+this.VA=VA
+this.P2=P2
this.VJ=VJ
this.Ai=Ai
-this.hm=hm
+this.tH=tH
this.VJ=VJ
this.Ai=Ai
this.VJ=VJ
@@ -24106,18 +23657,18 @@
$desc=$collectedClasses.i6
if($desc instanceof Array)$desc=$desc[1]
i6.prototype=$desc
-i6.prototype.gzh=function(receiver){return receiver.zh}
-i6.prototype.gzh.$reflectable=1
-i6.prototype.szh=function(receiver,v){return receiver.zh=v}
-i6.prototype.szh.$reflectable=1
-i6.prototype.gHX=function(receiver){return receiver.HX}
-i6.prototype.gHX.$reflectable=1
-i6.prototype.sHX=function(receiver,v){return receiver.HX=v}
-i6.prototype.sHX.$reflectable=1
-i6.prototype.gUy=function(receiver){return receiver.Uy}
-i6.prototype.gUy.$reflectable=1
-i6.prototype.sUy=function(receiver,v){return receiver.Uy=v}
-i6.prototype.sUy.$reflectable=1
+i6.prototype.gXf=function(receiver){return receiver.Xf}
+i6.prototype.gXf.$reflectable=1
+i6.prototype.sXf=function(receiver,v){return receiver.Xf=v}
+i6.prototype.sXf.$reflectable=1
+i6.prototype.gVA=function(receiver){return receiver.VA}
+i6.prototype.gVA.$reflectable=1
+i6.prototype.sVA=function(receiver,v){return receiver.VA=v}
+i6.prototype.sVA.$reflectable=1
+i6.prototype.gP2=function(receiver){return receiver.P2}
+i6.prototype.gP2.$reflectable=1
+i6.prototype.sP2=function(receiver,v){return receiver.P2=v}
+i6.prototype.sP2.$reflectable=1
function Vc(){}Vc.builtin$cls="Vc"
if(!"name" in Vc)Vc.name="Vc"
$desc=$collectedClasses.Vc
@@ -24199,12 +23750,12 @@
$desc=$collectedClasses.rR
if($desc instanceof Array)$desc=$desc[1]
rR.prototype=$desc
-function vZ(Kw,xZ){this.Kw=Kw
-this.xZ=xZ}vZ.builtin$cls="vZ"
-if(!"name" in vZ)vZ.name="vZ"
-$desc=$collectedClasses.vZ
+function AM(Kw,xZ){this.Kw=Kw
+this.xZ=xZ}AM.builtin$cls="AM"
+if(!"name" in AM)AM.name="AM"
+$desc=$collectedClasses.AM
if($desc instanceof Array)$desc=$desc[1]
-vZ.prototype=$desc
+AM.prototype=$desc
function d5(Kw,xZ){this.Kw=Kw
this.xZ=xZ}d5.builtin$cls="d5"
if(!"name" in d5)d5.name="d5"
@@ -24393,11 +23944,11 @@
$desc=$collectedClasses.bl
if($desc instanceof Array)$desc=$desc[1]
bl.prototype=$desc
-function tB(a){this.a=a}tB.builtin$cls="tB"
-if(!"name" in tB)tB.name="tB"
-$desc=$collectedClasses.tB
+function Ef(a){this.a=a}Ef.builtin$cls="Ef"
+if(!"name" in Ef)Ef.name="Ef"
+$desc=$collectedClasses.Ef
if($desc instanceof Array)$desc=$desc[1]
-tB.prototype=$desc
+Ef.prototype=$desc
function Oo(){}Oo.builtin$cls="Oo"
if(!"name" in Oo)Oo.name="Oo"
$desc=$collectedClasses.Oo
@@ -24413,7 +23964,7 @@
$desc=$collectedClasses.Ax
if($desc instanceof Array)$desc=$desc[1]
Ax.prototype=$desc
-function Wf(Cr,Tx,H8,Ht,pz,le,qN,jd,tB,b0,FU,T1,Ly,M2,uA,Db,Ok,qm,UF,nz,If){this.Cr=Cr
+function Wf(WL,Tx,H8,Ht,pz,le,qN,jd,tB,b0,FU,T1,Ly,M2,uA,Db,Ok,qm,UF,nz,If){this.WL=WL
this.Tx=Tx
this.H8=H8
this.Ht=Ht
@@ -24438,8 +23989,8 @@
$desc=$collectedClasses.Wf
if($desc instanceof Array)$desc=$desc[1]
Wf.prototype=$desc
-Wf.prototype.gCr=function(){return this.Cr}
-Wf.prototype.gCr.$reflectable=1
+Wf.prototype.gWL=function(){return this.WL}
+Wf.prototype.gWL.$reflectable=1
Wf.prototype.gTx=function(){return this.Tx}
Wf.prototype.gTx.$reflectable=1
Wf.prototype.gH8=function(){return this.H8}
@@ -24547,7 +24098,7 @@
$desc=$collectedClasses.Sz
if($desc instanceof Array)$desc=$desc[1]
Sz.prototype=$desc
-function Zk(dl,Yq,lT,hB,Fo,xV,qx,nz,le,G6,H3,If){this.dl=dl
+function Zk(dl,Yq,lT,hB,Fo,xV,qx,nz,le,G6,Cr,If){this.dl=dl
this.Yq=Yq
this.lT=lT
this.hB=hB
@@ -24557,7 +24108,7 @@
this.nz=nz
this.le=le
this.G6=G6
-this.H3=H3
+this.Cr=Cr
this.If=If}Zk.builtin$cls="Zk"
if(!"name" in Zk)Zk.name="Zk"
$desc=$collectedClasses.Zk
@@ -24575,14 +24126,14 @@
if($desc instanceof Array)$desc=$desc[1]
fu.prototype=$desc
fu.prototype.gh7=function(){return this.h7}
-function ng(Cr,CM,If){this.Cr=Cr
+function ng(WL,CM,If){this.WL=WL
this.CM=CM
this.If=If}ng.builtin$cls="ng"
if(!"name" in ng)ng.name="ng"
$desc=$collectedClasses.ng
if($desc instanceof Array)$desc=$desc[1]
ng.prototype=$desc
-ng.prototype.gCr=function(){return this.Cr}
+ng.prototype.gWL=function(){return this.WL}
function Ar(d9,o3,yA,zM,h7){this.d9=d9
this.o3=o3
this.yA=yA
@@ -25199,13 +24750,13 @@
$desc=$collectedClasses.fB
if($desc instanceof Array)$desc=$desc[1]
fB.prototype=$desc
-function eO(wc,nn,lv,Pp){this.wc=wc
+function bq(wc,nn,lv,Pp){this.wc=wc
this.nn=nn
this.lv=lv
-this.Pp=Pp}eO.builtin$cls="eO"
-$desc=$collectedClasses.eO
+this.Pp=Pp}bq.builtin$cls="bq"
+$desc=$collectedClasses.bq
if($desc instanceof Array)$desc=$desc[1]
-eO.prototype=$desc
+bq.prototype=$desc
function nO(qs,Sb){this.qs=qs
this.Sb=Sb}nO.builtin$cls="nO"
if(!"name" in nO)nO.name="nO"
@@ -25692,26 +25243,56 @@
$desc=$collectedClasses.ob
if($desc instanceof Array)$desc=$desc[1]
ob.prototype=$desc
+function Ud(Ct,FN){this.Ct=Ct
+this.FN=FN}Ud.builtin$cls="Ud"
+if(!"name" in Ud)Ud.name="Ud"
+$desc=$collectedClasses.Ud
+if($desc instanceof Array)$desc=$desc[1]
+Ud.prototype=$desc
+function K8(Ct,FN){this.Ct=Ct
+this.FN=FN}K8.builtin$cls="K8"
+if(!"name" in K8)K8.name="K8"
+$desc=$collectedClasses.K8
+if($desc instanceof Array)$desc=$desc[1]
+K8.prototype=$desc
function by(){}by.builtin$cls="by"
if(!"name" in by)by.name="by"
$desc=$collectedClasses.by
if($desc instanceof Array)$desc=$desc[1]
by.prototype=$desc
+function dI(ke){this.ke=ke}dI.builtin$cls="dI"
+if(!"name" in dI)dI.name="dI"
+$desc=$collectedClasses.dI
+if($desc instanceof Array)$desc=$desc[1]
+dI.prototype=$desc
function QM(N5){this.N5=N5}QM.builtin$cls="QM"
if(!"name" in QM)QM.name="QM"
$desc=$collectedClasses.QM
if($desc instanceof Array)$desc=$desc[1]
QM.prototype=$desc
+function Sh(WE,u4,JN){this.WE=WE
+this.u4=u4
+this.JN=JN}Sh.builtin$cls="Sh"
+if(!"name" in Sh)Sh.name="Sh"
+$desc=$collectedClasses.Sh
+if($desc instanceof Array)$desc=$desc[1]
+Sh.prototype=$desc
+function tF(a,b){this.a=a
+this.b=b}tF.builtin$cls="tF"
+if(!"name" in tF)tF.name="tF"
+$desc=$collectedClasses.tF
+if($desc instanceof Array)$desc=$desc[1]
+tF.prototype=$desc
function z0(lH){this.lH=lH}z0.builtin$cls="z0"
if(!"name" in z0)z0.name="z0"
$desc=$collectedClasses.z0
if($desc instanceof Array)$desc=$desc[1]
z0.prototype=$desc
-function E3(){}E3.builtin$cls="E3"
-if(!"name" in E3)E3.name="E3"
-$desc=$collectedClasses.E3
+function Vx(){}Vx.builtin$cls="Vx"
+if(!"name" in Vx)Vx.name="Vx"
+$desc=$collectedClasses.Vx
if($desc instanceof Array)$desc=$desc[1]
-E3.prototype=$desc
+Vx.prototype=$desc
function Rw(vn,An,EN){this.vn=vn
this.An=An
this.EN=EN}Rw.builtin$cls="Rw"
@@ -25744,11 +25325,11 @@
$desc=$collectedClasses.CL
if($desc instanceof Array)$desc=$desc[1]
CL.prototype=$desc
-function K8(OF){this.OF=OF}K8.builtin$cls="K8"
-if(!"name" in K8)K8.name="K8"
-$desc=$collectedClasses.K8
+function uA(OF){this.OF=OF}uA.builtin$cls="uA"
+if(!"name" in uA)uA.name="uA"
+$desc=$collectedClasses.uA
if($desc instanceof Array)$desc=$desc[1]
-K8.prototype=$desc
+uA.prototype=$desc
function a2(){}a2.builtin$cls="a2"
if(!"name" in a2)a2.name="a2"
$desc=$collectedClasses.a2
@@ -26075,11 +25656,11 @@
$desc=$collectedClasses.BV
if($desc instanceof Array)$desc=$desc[1]
BV.prototype=$desc
-function id(){}id.builtin$cls="id"
-if(!"name" in id)id.name="id"
-$desc=$collectedClasses.id
+function E1(){}E1.builtin$cls="E1"
+if(!"name" in E1)E1.name="E1"
+$desc=$collectedClasses.E1
if($desc instanceof Array)$desc=$desc[1]
-id.prototype=$desc
+E1.prototype=$desc
function wz(Sn,Sc){this.Sn=Sn
this.Sc=Sc}wz.builtin$cls="wz"
if(!"name" in wz)wz.name="wz"
@@ -26291,12 +25872,12 @@
$desc=$collectedClasses.W9
if($desc instanceof Array)$desc=$desc[1]
W9.prototype=$desc
-function uY(a,b){this.a=a
-this.b=b}uY.builtin$cls="uY"
-if(!"name" in uY)uY.name="uY"
-$desc=$collectedClasses.uY
+function vZ(a,b){this.a=a
+this.b=b}vZ.builtin$cls="vZ"
+if(!"name" in vZ)vZ.name="vZ"
+$desc=$collectedClasses.vZ
if($desc instanceof Array)$desc=$desc[1]
-uY.prototype=$desc
+vZ.prototype=$desc
function dW(Ui){this.Ui=Ui}dW.builtin$cls="dW"
if(!"name" in dW)dW.name="dW"
$desc=$collectedClasses.dW
@@ -26367,11 +25948,11 @@
$desc=$collectedClasses.QS
if($desc instanceof Array)$desc=$desc[1]
QS.prototype=$desc
-function ej(){}ej.builtin$cls="ej"
-if(!"name" in ej)ej.name="ej"
-$desc=$collectedClasses.ej
+function QF(){}QF.builtin$cls="QF"
+if(!"name" in QF)QF.name="QF"
+$desc=$collectedClasses.QF
if($desc instanceof Array)$desc=$desc[1]
-ej.prototype=$desc
+QF.prototype=$desc
function NL(){}NL.builtin$cls="NL"
if(!"name" in NL)NL.name="NL"
$desc=$collectedClasses.NL
@@ -26475,41 +26056,41 @@
$desc=$collectedClasses.RKu
if($desc instanceof Array)$desc=$desc[1]
RKu.prototype=$desc
-function na(){}na.builtin$cls="na"
-if(!"name" in na)na.name="na"
-$desc=$collectedClasses.na
-if($desc instanceof Array)$desc=$desc[1]
-na.prototype=$desc
-function TkQ(){}TkQ.builtin$cls="TkQ"
-if(!"name" in TkQ)TkQ.name="TkQ"
-$desc=$collectedClasses.TkQ
-if($desc instanceof Array)$desc=$desc[1]
-TkQ.prototype=$desc
function xGn(){}xGn.builtin$cls="xGn"
if(!"name" in xGn)xGn.name="xGn"
$desc=$collectedClasses.xGn
if($desc instanceof Array)$desc=$desc[1]
xGn.prototype=$desc
-function ZKG(){}ZKG.builtin$cls="ZKG"
-if(!"name" in ZKG)ZKG.name="ZKG"
-$desc=$collectedClasses.ZKG
+function TkQ(){}TkQ.builtin$cls="TkQ"
+if(!"name" in TkQ)TkQ.name="TkQ"
+$desc=$collectedClasses.TkQ
if($desc instanceof Array)$desc=$desc[1]
-ZKG.prototype=$desc
+TkQ.prototype=$desc
function VWk(){}VWk.builtin$cls="VWk"
if(!"name" in VWk)VWk.name="VWk"
$desc=$collectedClasses.VWk
if($desc instanceof Array)$desc=$desc[1]
VWk.prototype=$desc
-function w6W(){}w6W.builtin$cls="w6W"
-if(!"name" in w6W)w6W.name="w6W"
-$desc=$collectedClasses.w6W
+function ZKG(){}ZKG.builtin$cls="ZKG"
+if(!"name" in ZKG)ZKG.name="ZKG"
+$desc=$collectedClasses.ZKG
if($desc instanceof Array)$desc=$desc[1]
-w6W.prototype=$desc
+ZKG.prototype=$desc
function DHb(){}DHb.builtin$cls="DHb"
if(!"name" in DHb)DHb.name="DHb"
$desc=$collectedClasses.DHb
if($desc instanceof Array)$desc=$desc[1]
DHb.prototype=$desc
+function w6W(){}w6W.builtin$cls="w6W"
+if(!"name" in w6W)w6W.name="w6W"
+$desc=$collectedClasses.w6W
+if($desc instanceof Array)$desc=$desc[1]
+w6W.prototype=$desc
+function Hna(){}Hna.builtin$cls="Hna"
+if(!"name" in Hna)Hna.name="Hna"
+$desc=$collectedClasses.Hna
+if($desc instanceof Array)$desc=$desc[1]
+Hna.prototype=$desc
function z9g(){}z9g.builtin$cls="z9g"
if(!"name" in z9g)z9g.name="z9g"
$desc=$collectedClasses.z9g
@@ -26525,10 +26106,10 @@
$desc=$collectedClasses.UZ
if($desc instanceof Array)$desc=$desc[1]
UZ.prototype=$desc
-function Fv(FT,VJ,Ai,hm,VJ,Ai,VJ,Ai,ZI,uN,z3,TQ,Vk,Ye,mT,KM){this.FT=FT
+function Fv(FT,VJ,Ai,tH,VJ,Ai,VJ,Ai,ZI,uN,z3,TQ,Vk,Ye,mT,KM){this.FT=FT
this.VJ=VJ
this.Ai=Ai
-this.hm=hm
+this.tH=tH
this.VJ=VJ
this.Ai=Ai
this.VJ=VJ
@@ -26554,11 +26135,11 @@
$desc=$collectedClasses.WZ
if($desc instanceof Array)$desc=$desc[1]
WZ.prototype=$desc
-function I3(Py,hO,VJ,Ai,hm,VJ,Ai,VJ,Ai,ZI,uN,z3,TQ,Vk,Ye,mT,KM){this.Py=Py
+function I3(Py,hO,VJ,Ai,tH,VJ,Ai,VJ,Ai,ZI,uN,z3,TQ,Vk,Ye,mT,KM){this.Py=Py
this.hO=hO
this.VJ=VJ
this.Ai=Ai
-this.hm=hm
+this.tH=tH
this.VJ=VJ
this.Ai=Ai
this.VJ=VJ
@@ -26588,10 +26169,39 @@
$desc=$collectedClasses.pv
if($desc instanceof Array)$desc=$desc[1]
pv.prototype=$desc
-function Gk(vt,VJ,Ai,hm,VJ,Ai,VJ,Ai,ZI,uN,z3,TQ,Vk,Ye,mT,KM){this.vt=vt
+function qr(Lf,VJ,Ai,tH,VJ,Ai,VJ,Ai,ZI,uN,z3,TQ,Vk,Ye,mT,KM){this.Lf=Lf
this.VJ=VJ
this.Ai=Ai
-this.hm=hm
+this.tH=tH
+this.VJ=VJ
+this.Ai=Ai
+this.VJ=VJ
+this.Ai=Ai
+this.ZI=ZI
+this.uN=uN
+this.z3=z3
+this.TQ=TQ
+this.Vk=Vk
+this.Ye=Ye
+this.mT=mT
+this.KM=KM}qr.builtin$cls="qr"
+if(!"name" in qr)qr.name="qr"
+$desc=$collectedClasses.qr
+if($desc instanceof Array)$desc=$desc[1]
+qr.prototype=$desc
+qr.prototype.gLf=function(receiver){return receiver.Lf}
+qr.prototype.gLf.$reflectable=1
+qr.prototype.sLf=function(receiver,v){return receiver.Lf=v}
+qr.prototype.sLf.$reflectable=1
+function Vfx(){}Vfx.builtin$cls="Vfx"
+if(!"name" in Vfx)Vfx.name="Vfx"
+$desc=$collectedClasses.Vfx
+if($desc instanceof Array)$desc=$desc[1]
+Vfx.prototype=$desc
+function Gk(vt,VJ,Ai,tH,VJ,Ai,VJ,Ai,ZI,uN,z3,TQ,Vk,Ye,mT,KM){this.vt=vt
+this.VJ=VJ
+this.Ai=Ai
+this.tH=tH
this.VJ=VJ
this.Ai=Ai
this.VJ=VJ
@@ -26612,15 +26222,15 @@
Gk.prototype.gvt.$reflectable=1
Gk.prototype.svt=function(receiver,v){return receiver.vt=v}
Gk.prototype.svt.$reflectable=1
-function Vfx(){}Vfx.builtin$cls="Vfx"
-if(!"name" in Vfx)Vfx.name="Vfx"
-$desc=$collectedClasses.Vfx
+function Dsd(){}Dsd.builtin$cls="Dsd"
+if(!"name" in Dsd)Dsd.name="Dsd"
+$desc=$collectedClasses.Dsd
if($desc instanceof Array)$desc=$desc[1]
-Vfx.prototype=$desc
-function Ds(ql,VJ,Ai,hm,VJ,Ai,VJ,Ai,ZI,uN,z3,TQ,Vk,Ye,mT,KM){this.ql=ql
+Dsd.prototype=$desc
+function Ds(ql,VJ,Ai,tH,VJ,Ai,VJ,Ai,ZI,uN,z3,TQ,Vk,Ye,mT,KM){this.ql=ql
this.VJ=VJ
this.Ai=Ai
-this.hm=hm
+this.tH=tH
this.VJ=VJ
this.Ai=Ai
this.VJ=VJ
@@ -26641,11 +26251,45 @@
Ds.prototype.gql.$reflectable=1
Ds.prototype.sql=function(receiver,v){return receiver.ql=v}
Ds.prototype.sql.$reflectable=1
-function Dsd(){}Dsd.builtin$cls="Dsd"
-if(!"name" in Dsd)Dsd.name="Dsd"
-$desc=$collectedClasses.Dsd
+function tuj(){}tuj.builtin$cls="tuj"
+if(!"name" in tuj)tuj.name="tuj"
+$desc=$collectedClasses.tuj
if($desc instanceof Array)$desc=$desc[1]
-Dsd.prototype=$desc
+tuj.prototype=$desc
+function aI(b,c){this.b=b
+this.c=c}aI.builtin$cls="aI"
+if(!"name" in aI)aI.name="aI"
+$desc=$collectedClasses.aI
+if($desc instanceof Array)$desc=$desc[1]
+aI.prototype=$desc
+function rG(d){this.d=d}rG.builtin$cls="rG"
+if(!"name" in rG)rG.name="rG"
+$desc=$collectedClasses.rG
+if($desc instanceof Array)$desc=$desc[1]
+rG.prototype=$desc
+function yh(e){this.e=e}yh.builtin$cls="yh"
+if(!"name" in yh)yh.name="yh"
+$desc=$collectedClasses.yh
+if($desc instanceof Array)$desc=$desc[1]
+yh.prototype=$desc
+function wO(){}wO.builtin$cls="wO"
+if(!"name" in wO)wO.name="wO"
+$desc=$collectedClasses.wO
+if($desc instanceof Array)$desc=$desc[1]
+wO.prototype=$desc
+function Tm(f,g,h){this.f=f
+this.g=g
+this.h=h}Tm.builtin$cls="Tm"
+if(!"name" in Tm)Tm.name="Tm"
+$desc=$collectedClasses.Tm
+if($desc instanceof Array)$desc=$desc[1]
+Tm.prototype=$desc
+function rz(a,i){this.a=a
+this.i=i}rz.builtin$cls="rz"
+if(!"name" in rz)rz.name="rz"
+$desc=$collectedClasses.rz
+if($desc instanceof Array)$desc=$desc[1]
+rz.prototype=$desc
function CA(a,b){this.a=a
this.b=b}CA.builtin$cls="CA"
if(!"name" in CA)CA.name="CA"
@@ -26680,7 +26324,65 @@
$desc=$collectedClasses.GE
if($desc instanceof Array)$desc=$desc[1]
GE.prototype=$desc
-function u7(hm,VJ,Ai,VJ,Ai,ZI,uN,z3,TQ,Vk,Ye,mT,KM){this.hm=hm
+function pR(iK,VJ,Ai,tH,VJ,Ai,VJ,Ai,ZI,uN,z3,TQ,Vk,Ye,mT,KM){this.iK=iK
+this.VJ=VJ
+this.Ai=Ai
+this.tH=tH
+this.VJ=VJ
+this.Ai=Ai
+this.VJ=VJ
+this.Ai=Ai
+this.ZI=ZI
+this.uN=uN
+this.z3=z3
+this.TQ=TQ
+this.Vk=Vk
+this.Ye=Ye
+this.mT=mT
+this.KM=KM}pR.builtin$cls="pR"
+if(!"name" in pR)pR.name="pR"
+$desc=$collectedClasses.pR
+if($desc instanceof Array)$desc=$desc[1]
+pR.prototype=$desc
+pR.prototype.giK=function(receiver){return receiver.iK}
+pR.prototype.giK.$reflectable=1
+pR.prototype.siK=function(receiver,v){return receiver.iK=v}
+pR.prototype.siK.$reflectable=1
+function Vct(){}Vct.builtin$cls="Vct"
+if(!"name" in Vct)Vct.name="Vct"
+$desc=$collectedClasses.Vct
+if($desc instanceof Array)$desc=$desc[1]
+Vct.prototype=$desc
+function hx(Xh,VJ,Ai,tH,VJ,Ai,VJ,Ai,ZI,uN,z3,TQ,Vk,Ye,mT,KM){this.Xh=Xh
+this.VJ=VJ
+this.Ai=Ai
+this.tH=tH
+this.VJ=VJ
+this.Ai=Ai
+this.VJ=VJ
+this.Ai=Ai
+this.ZI=ZI
+this.uN=uN
+this.z3=z3
+this.TQ=TQ
+this.Vk=Vk
+this.Ye=Ye
+this.mT=mT
+this.KM=KM}hx.builtin$cls="hx"
+if(!"name" in hx)hx.name="hx"
+$desc=$collectedClasses.hx
+if($desc instanceof Array)$desc=$desc[1]
+hx.prototype=$desc
+hx.prototype.gXh=function(receiver){return receiver.Xh}
+hx.prototype.gXh.$reflectable=1
+hx.prototype.sXh=function(receiver,v){return receiver.Xh=v}
+hx.prototype.sXh.$reflectable=1
+function D13(){}D13.builtin$cls="D13"
+if(!"name" in D13)D13.name="D13"
+$desc=$collectedClasses.D13
+if($desc instanceof Array)$desc=$desc[1]
+D13.prototype=$desc
+function u7(tH,VJ,Ai,VJ,Ai,ZI,uN,z3,TQ,Vk,Ye,mT,KM){this.tH=tH
this.VJ=VJ
this.Ai=Ai
this.VJ=VJ
@@ -26697,11 +26399,11 @@
$desc=$collectedClasses.u7
if($desc instanceof Array)$desc=$desc[1]
u7.prototype=$desc
-function St(Pw,i0,VJ,Ai,hm,VJ,Ai,VJ,Ai,ZI,uN,z3,TQ,Vk,Ye,mT,KM){this.Pw=Pw
+function St(Pw,i0,VJ,Ai,tH,VJ,Ai,VJ,Ai,ZI,uN,z3,TQ,Vk,Ye,mT,KM){this.Pw=Pw
this.i0=i0
this.VJ=VJ
this.Ai=Ai
-this.hm=hm
+this.tH=tH
this.VJ=VJ
this.Ai=Ai
this.VJ=VJ
@@ -26726,16 +26428,16 @@
St.prototype.gi0.$reflectable=1
St.prototype.si0=function(receiver,v){return receiver.i0=v}
St.prototype.si0.$reflectable=1
-function tuj(){}tuj.builtin$cls="tuj"
-if(!"name" in tuj)tuj.name="tuj"
-$desc=$collectedClasses.tuj
+function WZq(){}WZq.builtin$cls="WZq"
+if(!"name" in WZq)WZq.name="WZq"
+$desc=$collectedClasses.WZq
if($desc instanceof Array)$desc=$desc[1]
-tuj.prototype=$desc
-function vj(eb,kf,VJ,Ai,hm,VJ,Ai,VJ,Ai,ZI,uN,z3,TQ,Vk,Ye,mT,KM){this.eb=eb
+WZq.prototype=$desc
+function vj(eb,kf,VJ,Ai,tH,VJ,Ai,VJ,Ai,ZI,uN,z3,TQ,Vk,Ye,mT,KM){this.eb=eb
this.kf=kf
this.VJ=VJ
this.Ai=Ai
-this.hm=hm
+this.tH=tH
this.VJ=VJ
this.Ai=Ai
this.VJ=VJ
@@ -26760,15 +26462,15 @@
vj.prototype.gkf.$reflectable=1
vj.prototype.skf=function(receiver,v){return receiver.kf=v}
vj.prototype.skf.$reflectable=1
-function Vct(){}Vct.builtin$cls="Vct"
-if(!"name" in Vct)Vct.name="Vct"
-$desc=$collectedClasses.Vct
+function pva(){}pva.builtin$cls="pva"
+if(!"name" in pva)pva.name="pva"
+$desc=$collectedClasses.pva
if($desc instanceof Array)$desc=$desc[1]
-Vct.prototype=$desc
-function CX(iI,VJ,Ai,hm,VJ,Ai,VJ,Ai,ZI,uN,z3,TQ,Vk,Ye,mT,KM){this.iI=iI
+pva.prototype=$desc
+function CX(iI,VJ,Ai,tH,VJ,Ai,VJ,Ai,ZI,uN,z3,TQ,Vk,Ye,mT,KM){this.iI=iI
this.VJ=VJ
this.Ai=Ai
-this.hm=hm
+this.tH=tH
this.VJ=VJ
this.Ai=Ai
this.VJ=VJ
@@ -26789,11 +26491,11 @@
CX.prototype.giI.$reflectable=1
CX.prototype.siI=function(receiver,v){return receiver.iI=v}
CX.prototype.siI.$reflectable=1
-function D13(){}D13.builtin$cls="D13"
-if(!"name" in D13)D13.name="D13"
-$desc=$collectedClasses.D13
+function cda(){}cda.builtin$cls="cda"
+if(!"name" in cda)cda.name="cda"
+$desc=$collectedClasses.cda
if($desc instanceof Array)$desc=$desc[1]
-D13.prototype=$desc
+cda.prototype=$desc
function TJ(oc,eT,yz,Cj,wd,Gs){this.oc=oc
this.eT=eT
this.yz=yz
@@ -26835,8 +26537,8 @@
HV.prototype.gG1=function(receiver){return this.G1}
HV.prototype.gkc=function(receiver){return this.kc}
HV.prototype.gI4=function(){return this.I4}
-function BK(XB,hm,VJ,Ai,VJ,Ai,ZI,uN,z3,TQ,Vk,Ye,mT,KM){this.XB=XB
-this.hm=hm
+function Nh(XB,tH,VJ,Ai,VJ,Ai,ZI,uN,z3,TQ,Vk,Ye,mT,KM){this.XB=XB
+this.tH=tH
this.VJ=VJ
this.Ai=Ai
this.VJ=VJ
@@ -26848,16 +26550,16 @@
this.Vk=Vk
this.Ye=Ye
this.mT=mT
-this.KM=KM}BK.builtin$cls="BK"
-if(!"name" in BK)BK.name="BK"
-$desc=$collectedClasses.BK
+this.KM=KM}Nh.builtin$cls="Nh"
+if(!"name" in Nh)Nh.name="Nh"
+$desc=$collectedClasses.Nh
if($desc instanceof Array)$desc=$desc[1]
-BK.prototype=$desc
-BK.prototype.gXB=function(receiver){return receiver.XB}
-BK.prototype.gXB.$reflectable=1
-BK.prototype.sXB=function(receiver,v){return receiver.XB=v}
-BK.prototype.sXB.$reflectable=1
-function fA(T9,Jt){this.T9=T9
+Nh.prototype=$desc
+Nh.prototype.gXB=function(receiver){return receiver.XB}
+Nh.prototype.gXB.$reflectable=1
+Nh.prototype.sXB=function(receiver,v){return receiver.XB=v}
+Nh.prototype.sXB.$reflectable=1
+function fA(Kr,Jt){this.Kr=Kr
this.Jt=Jt}fA.builtin$cls="fA"
if(!"name" in fA)fA.name="fA"
$desc=$collectedClasses.fA
@@ -26884,7 +26586,7 @@
$desc=$collectedClasses.c5
if($desc instanceof Array)$desc=$desc[1]
c5.prototype=$desc
-function ih(hm,VJ,Ai,VJ,Ai,ZI,uN,z3,TQ,Vk,Ye,mT,KM){this.hm=hm
+function ih(tH,VJ,Ai,VJ,Ai,ZI,uN,z3,TQ,Vk,Ye,mT,KM){this.tH=tH
this.VJ=VJ
this.Ai=Ai
this.VJ=VJ
@@ -26916,8 +26618,8 @@
mL.prototype.glw.$reflectable=1
mL.prototype.gnI=function(){return this.nI}
mL.prototype.gnI.$reflectable=1
-function bv(nk,YG,XR,VJ,Ai){this.nk=nk
-this.YG=YG
+function bv(nk,SS,XR,VJ,Ai){this.nk=nk
+this.SS=SS
this.XR=XR
this.VJ=VJ
this.Ai=Ai}bv.builtin$cls="bv"
@@ -27024,6 +26726,18 @@
$desc=$collectedClasses.jI
if($desc instanceof Array)$desc=$desc[1]
jI.prototype=$desc
+function Rb(Hr,Oy,JR,e0,oJ,vm,VJ,Ai){this.Hr=Hr
+this.Oy=Oy
+this.JR=JR
+this.e0=e0
+this.oJ=oJ
+this.vm=vm
+this.VJ=VJ
+this.Ai=Ai}Rb.builtin$cls="Rb"
+if(!"name" in Rb)Rb.name="Rb"
+$desc=$collectedClasses.Rb
+if($desc instanceof Array)$desc=$desc[1]
+Rb.prototype=$desc
function Zw(Rd,n7,LA,Vg,VJ,Ai){this.Rd=Rd
this.n7=n7
this.LA=LA
@@ -27045,7 +26759,10 @@
$desc=$collectedClasses.Pf
if($desc instanceof Array)$desc=$desc[1]
Pf.prototype=$desc
-function F1(hm,VJ,Ai,VJ,Ai,ZI,uN,z3,TQ,Vk,Ye,mT,KM){this.hm=hm
+function F1(k5,VJ,Ai,tH,VJ,Ai,VJ,Ai,ZI,uN,z3,TQ,Vk,Ye,mT,KM){this.k5=k5
+this.VJ=VJ
+this.Ai=Ai
+this.tH=tH
this.VJ=VJ
this.Ai=Ai
this.VJ=VJ
@@ -27062,7 +26779,16 @@
$desc=$collectedClasses.F1
if($desc instanceof Array)$desc=$desc[1]
F1.prototype=$desc
-function uL(hm,VJ,Ai,VJ,Ai,ZI,uN,z3,TQ,Vk,Ye,mT,KM){this.hm=hm
+F1.prototype.gk5=function(receiver){return receiver.k5}
+F1.prototype.gk5.$reflectable=1
+F1.prototype.sk5=function(receiver,v){return receiver.k5=v}
+F1.prototype.sk5.$reflectable=1
+function waa(){}waa.builtin$cls="waa"
+if(!"name" in waa)waa.name="waa"
+$desc=$collectedClasses.waa
+if($desc instanceof Array)$desc=$desc[1]
+waa.prototype=$desc
+function uL(tH,VJ,Ai,VJ,Ai,ZI,uN,z3,TQ,Vk,Ye,mT,KM){this.tH=tH
this.VJ=VJ
this.Ai=Ai
this.VJ=VJ
@@ -27079,15 +26805,15 @@
$desc=$collectedClasses.uL
if($desc instanceof Array)$desc=$desc[1]
uL.prototype=$desc
-uL.prototype.ghm=function(receiver){return receiver.hm}
-uL.prototype.ghm.$reflectable=1
-uL.prototype.shm=function(receiver,v){return receiver.hm=v}
-uL.prototype.shm.$reflectable=1
-function Xf(){}Xf.builtin$cls="Xf"
-if(!"name" in Xf)Xf.name="Xf"
-$desc=$collectedClasses.Xf
+uL.prototype.gtH=function(receiver){return receiver.tH}
+uL.prototype.gtH.$reflectable=1
+uL.prototype.stH=function(receiver,v){return receiver.tH=v}
+uL.prototype.stH.$reflectable=1
+function Nr(){}Nr.builtin$cls="Nr"
+if(!"name" in Nr)Nr.name="Nr"
+$desc=$collectedClasses.Nr
if($desc instanceof Array)$desc=$desc[1]
-Xf.prototype=$desc
+Nr.prototype=$desc
function Pi(){}Pi.builtin$cls="Pi"
if(!"name" in Pi)Pi.name="Pi"
$desc=$collectedClasses.Pi
@@ -27150,11 +26876,11 @@
$desc=$collectedClasses.Zb
if($desc instanceof Array)$desc=$desc[1]
Zb.prototype=$desc
-function bF(g){this.g=g}bF.builtin$cls="bF"
-if(!"name" in bF)bF.name="bF"
-$desc=$collectedClasses.bF
+function id(g){this.g=g}id.builtin$cls="id"
+if(!"name" in id)id.name="id"
+$desc=$collectedClasses.id
if($desc instanceof Array)$desc=$desc[1]
-bF.prototype=$desc
+id.prototype=$desc
function iV(h,i,j,k){this.h=h
this.i=i
this.j=j
@@ -27174,16 +26900,16 @@
W4.prototype=$desc
W4.prototype.gWA=function(){return this.WA}
W4.prototype.gIl=function(){return this.Il}
-function ndx(){}ndx.builtin$cls="ndx"
-if(!"name" in ndx)ndx.name="ndx"
-$desc=$collectedClasses.ndx
+function Fa(){}Fa.builtin$cls="Fa"
+if(!"name" in Fa)Fa.name="Fa"
+$desc=$collectedClasses.Fa
if($desc instanceof Array)$desc=$desc[1]
-ndx.prototype=$desc
-function Hm(){}Hm.builtin$cls="Hm"
-if(!"name" in Hm)Hm.name="Hm"
-$desc=$collectedClasses.Hm
+Fa.prototype=$desc
+function x9(){}x9.builtin$cls="x9"
+if(!"name" in x9)x9.name="x9"
+$desc=$collectedClasses.x9
if($desc instanceof Array)$desc=$desc[1]
-Hm.prototype=$desc
+x9.prototype=$desc
function d3(){}d3.builtin$cls="d3"
if(!"name" in d3)d3.name="d3"
$desc=$collectedClasses.d3
@@ -27434,11 +27160,11 @@
$desc=$collectedClasses.w12
if($desc instanceof Array)$desc=$desc[1]
w12.prototype=$desc
-function ppY(a){this.a=a}ppY.builtin$cls="ppY"
-if(!"name" in ppY)ppY.name="ppY"
-$desc=$collectedClasses.ppY
+function fTP(a){this.a=a}fTP.builtin$cls="fTP"
+if(!"name" in fTP)fTP.name="fTP"
+$desc=$collectedClasses.fTP
if($desc instanceof Array)$desc=$desc[1]
-ppY.prototype=$desc
+fTP.prototype=$desc
function yL(){}yL.builtin$cls="yL"
if(!"name" in yL)yL.name="yL"
$desc=$collectedClasses.yL
@@ -27554,11 +27280,11 @@
$desc=$collectedClasses.ir
if($desc instanceof Array)$desc=$desc[1]
ir.prototype=$desc
-function Tt(KM){this.KM=KM}Tt.builtin$cls="Tt"
-if(!"name" in Tt)Tt.name="Tt"
-$desc=$collectedClasses.Tt
+function Sa(KM){this.KM=KM}Sa.builtin$cls="Sa"
+if(!"name" in Sa)Sa.name="Sa"
+$desc=$collectedClasses.Sa
if($desc instanceof Array)$desc=$desc[1]
-Tt.prototype=$desc
+Sa.prototype=$desc
dM.prototype.gKM=function(receiver){return receiver.KM}
dM.prototype.gKM.$reflectable=1
function GN(){}GN.builtin$cls="GN"
@@ -27596,26 +27322,16 @@
$desc=$collectedClasses.Bl
if($desc instanceof Array)$desc=$desc[1]
Bl.prototype=$desc
-function Fn(){}Fn.builtin$cls="Fn"
-if(!"name" in Fn)Fn.name="Fn"
-$desc=$collectedClasses.Fn
-if($desc instanceof Array)$desc=$desc[1]
-Fn.prototype=$desc
-function e3(){}e3.builtin$cls="e3"
-if(!"name" in e3)e3.name="e3"
-$desc=$collectedClasses.e3
-if($desc instanceof Array)$desc=$desc[1]
-e3.prototype=$desc
function pM(){}pM.builtin$cls="pM"
if(!"name" in pM)pM.name="pM"
$desc=$collectedClasses.pM
if($desc instanceof Array)$desc=$desc[1]
pM.prototype=$desc
-function jh(){}jh.builtin$cls="jh"
-if(!"name" in jh)jh.name="jh"
-$desc=$collectedClasses.jh
+function Mh(){}Mh.builtin$cls="Mh"
+if(!"name" in Mh)Mh.name="Mh"
+$desc=$collectedClasses.Mh
if($desc instanceof Array)$desc=$desc[1]
-jh.prototype=$desc
+Mh.prototype=$desc
function Md(){}Md.builtin$cls="Md"
if(!"name" in Md)Md.name="Md"
$desc=$collectedClasses.Md
@@ -27651,11 +27367,11 @@
$desc=$collectedClasses.mf
if($desc instanceof Array)$desc=$desc[1]
mf.prototype=$desc
-function ik(){}ik.builtin$cls="ik"
-if(!"name" in ik)ik.name="ik"
-$desc=$collectedClasses.ik
+function ej(){}ej.builtin$cls="ej"
+if(!"name" in ej)ej.name="ej"
+$desc=$collectedClasses.ej
if($desc instanceof Array)$desc=$desc[1]
-ik.prototype=$desc
+ej.prototype=$desc
function HK(b){this.b=b}HK.builtin$cls="HK"
if(!"name" in HK)HK.name="HK"
$desc=$collectedClasses.HK
@@ -27950,60 +27666,6 @@
ky.prototype=$desc
ky.prototype.gBb=function(receiver){return this.Bb}
ky.prototype.gT8=function(receiver){return this.T8}
-function uA(a,b){this.a=a
-this.b=b}uA.builtin$cls="uA"
-if(!"name" in uA)uA.name="uA"
-$desc=$collectedClasses.uA
-if($desc instanceof Array)$desc=$desc[1]
-uA.prototype=$desc
-function vl(hP,KL,bO,tj,Lv,k6){this.hP=hP
-this.KL=KL
-this.bO=bO
-this.tj=tj
-this.Lv=Lv
-this.k6=k6}vl.builtin$cls="vl"
-if(!"name" in vl)vl.name="vl"
-$desc=$collectedClasses.vl
-if($desc instanceof Array)$desc=$desc[1]
-vl.prototype=$desc
-vl.prototype.ghP=function(){return this.hP}
-function Li(a,b,c){this.a=a
-this.b=b
-this.c=c}Li.builtin$cls="Li"
-if(!"name" in Li)Li.name="Li"
-$desc=$collectedClasses.Li
-if($desc instanceof Array)$desc=$desc[1]
-Li.prototype=$desc
-function WK(d){this.d=d}WK.builtin$cls="WK"
-if(!"name" in WK)WK.name="WK"
-$desc=$collectedClasses.WK
-if($desc instanceof Array)$desc=$desc[1]
-WK.prototype=$desc
-function iT(hP,Jn,KL,bO,tj,Lv,k6){this.hP=hP
-this.Jn=Jn
-this.KL=KL
-this.bO=bO
-this.tj=tj
-this.Lv=Lv
-this.k6=k6}iT.builtin$cls="iT"
-if(!"name" in iT)iT.name="iT"
-$desc=$collectedClasses.iT
-if($desc instanceof Array)$desc=$desc[1]
-iT.prototype=$desc
-iT.prototype.ghP=function(){return this.hP}
-iT.prototype.gJn=function(){return this.Jn}
-function tE(a,b,c){this.a=a
-this.b=b
-this.c=c}tE.builtin$cls="tE"
-if(!"name" in tE)tE.name="tE"
-$desc=$collectedClasses.tE
-if($desc instanceof Array)$desc=$desc[1]
-tE.prototype=$desc
-function GS(d){this.d=d}GS.builtin$cls="GS"
-if(!"name" in GS)GS.name="GS"
-$desc=$collectedClasses.GS
-if($desc instanceof Array)$desc=$desc[1]
-GS.prototype=$desc
function fa(hP,re,KL,bO,tj,Lv,k6){this.hP=hP
this.re=re
this.KL=KL
@@ -28034,6 +27696,18 @@
$desc=$collectedClasses.a9
if($desc instanceof Array)$desc=$desc[1]
a9.prototype=$desc
+function jh(e,f,g){this.e=e
+this.f=f
+this.g=g}jh.builtin$cls="jh"
+if(!"name" in jh)jh.name="jh"
+$desc=$collectedClasses.jh
+if($desc instanceof Array)$desc=$desc[1]
+jh.prototype=$desc
+function e3(h){this.h=h}e3.builtin$cls="e3"
+if(!"name" in e3)e3.name="e3"
+$desc=$collectedClasses.e3
+if($desc instanceof Array)$desc=$desc[1]
+e3.prototype=$desc
function VA(Bb,T8,KL,bO,tj,Lv,k6){this.Bb=Bb
this.T8=T8
this.KL=KL
@@ -28143,22 +27817,6 @@
K9.prototype=$desc
K9.prototype.gBb=function(receiver){return this.Bb}
K9.prototype.gT8=function(receiver){return this.T8}
-function zX(hP,Jn){this.hP=hP
-this.Jn=Jn}zX.builtin$cls="zX"
-if(!"name" in zX)zX.name="zX"
-$desc=$collectedClasses.zX
-if($desc instanceof Array)$desc=$desc[1]
-zX.prototype=$desc
-zX.prototype.ghP=function(){return this.hP}
-zX.prototype.gJn=function(){return this.Jn}
-function x9(hP,oc){this.hP=hP
-this.oc=oc}x9.builtin$cls="x9"
-if(!"name" in x9)x9.name="x9"
-$desc=$collectedClasses.x9
-if($desc instanceof Array)$desc=$desc[1]
-x9.prototype=$desc
-x9.prototype.ghP=function(){return this.hP}
-x9.prototype.goc=function(receiver){return this.oc}
function RW(hP,bP,re){this.hP=hP
this.bP=bP
this.re=re}RW.builtin$cls="RW"
@@ -28174,10 +27832,11 @@
$desc=$collectedClasses.xs
if($desc instanceof Array)$desc=$desc[1]
xs.prototype=$desc
-function FX(Sk,Ix,ku,fL){this.Sk=Sk
+function FX(Sk,Ix,ku,fL,lQ){this.Sk=Sk
this.Ix=Ix
this.ku=ku
-this.fL=fL}FX.builtin$cls="FX"
+this.fL=fL
+this.lQ=lQ}FX.builtin$cls="FX"
if(!"name" in FX)FX.name="FX"
$desc=$collectedClasses.FX
if($desc instanceof Array)$desc=$desc[1]
@@ -28238,7 +27897,7 @@
$desc=$collectedClasses.a0
if($desc instanceof Array)$desc=$desc[1]
a0.prototype=$desc
-function NQ(hm,VJ,Ai,VJ,Ai,ZI,uN,z3,TQ,Vk,Ye,mT,KM){this.hm=hm
+function NQ(tH,VJ,Ai,VJ,Ai,ZI,uN,z3,TQ,Vk,Ye,mT,KM){this.tH=tH
this.VJ=VJ
this.Ai=Ai
this.VJ=VJ
@@ -28255,10 +27914,10 @@
$desc=$collectedClasses.NQ
if($desc instanceof Array)$desc=$desc[1]
NQ.prototype=$desc
-function fI(Uz,VJ,Ai,hm,VJ,Ai,VJ,Ai,ZI,uN,z3,TQ,Vk,Ye,mT,KM){this.Uz=Uz
+function fI(Uz,VJ,Ai,tH,VJ,Ai,VJ,Ai,ZI,uN,z3,TQ,Vk,Ye,mT,KM){this.Uz=Uz
this.VJ=VJ
this.Ai=Ai
-this.hm=hm
+this.tH=tH
this.VJ=VJ
this.Ai=Ai
this.VJ=VJ
@@ -28279,15 +27938,15 @@
fI.prototype.gUz.$reflectable=1
fI.prototype.sUz=function(receiver,v){return receiver.Uz=v}
fI.prototype.sUz.$reflectable=1
-function WZq(){}WZq.builtin$cls="WZq"
-if(!"name" in WZq)WZq.name="WZq"
-$desc=$collectedClasses.WZq
+function V0(){}V0.builtin$cls="V0"
+if(!"name" in V0)V0.name="V0"
+$desc=$collectedClasses.V0
if($desc instanceof Array)$desc=$desc[1]
-WZq.prototype=$desc
-function kK(vX,VJ,Ai,hm,VJ,Ai,VJ,Ai,ZI,uN,z3,TQ,Vk,Ye,mT,KM){this.vX=vX
+V0.prototype=$desc
+function kK(vX,VJ,Ai,tH,VJ,Ai,VJ,Ai,ZI,uN,z3,TQ,Vk,Ye,mT,KM){this.vX=vX
this.VJ=VJ
this.Ai=Ai
-this.hm=hm
+this.tH=tH
this.VJ=VJ
this.Ai=Ai
this.VJ=VJ
@@ -28308,15 +27967,15 @@
kK.prototype.gvX.$reflectable=1
kK.prototype.svX=function(receiver,v){return receiver.vX=v}
kK.prototype.svX.$reflectable=1
-function pva(){}pva.builtin$cls="pva"
-if(!"name" in pva)pva.name="pva"
-$desc=$collectedClasses.pva
+function V4(){}V4.builtin$cls="V4"
+if(!"name" in V4)V4.name="V4"
+$desc=$collectedClasses.V4
if($desc instanceof Array)$desc=$desc[1]
-pva.prototype=$desc
-function uw(Qq,VJ,Ai,hm,VJ,Ai,VJ,Ai,ZI,uN,z3,TQ,Vk,Ye,mT,KM){this.Qq=Qq
+V4.prototype=$desc
+function uw(V4,VJ,Ai,tH,VJ,Ai,VJ,Ai,ZI,uN,z3,TQ,Vk,Ye,mT,KM){this.V4=V4
this.VJ=VJ
this.Ai=Ai
-this.hm=hm
+this.tH=tH
this.VJ=VJ
this.Ai=Ai
this.VJ=VJ
@@ -28333,15 +27992,15 @@
$desc=$collectedClasses.uw
if($desc instanceof Array)$desc=$desc[1]
uw.prototype=$desc
-uw.prototype.gQq=function(receiver){return receiver.Qq}
-uw.prototype.gQq.$reflectable=1
-uw.prototype.sQq=function(receiver,v){return receiver.Qq=v}
-uw.prototype.sQq.$reflectable=1
-function cda(){}cda.builtin$cls="cda"
-if(!"name" in cda)cda.name="cda"
-$desc=$collectedClasses.cda
+uw.prototype.gV4=function(receiver){return receiver.V4}
+uw.prototype.gV4.$reflectable=1
+uw.prototype.sV4=function(receiver,v){return receiver.V4=v}
+uw.prototype.sV4.$reflectable=1
+function V6(){}V6.builtin$cls="V6"
+if(!"name" in V6)V6.name="V6"
+$desc=$collectedClasses.V6
if($desc instanceof Array)$desc=$desc[1]
-cda.prototype=$desc
+V6.prototype=$desc
function V2(N1,bn,Ck){this.N1=N1
this.bn=bn
this.Ck=Ck}V2.builtin$cls="V2"
@@ -28381,16 +28040,16 @@
$desc=$collectedClasses.Uf
if($desc instanceof Array)$desc=$desc[1]
Uf.prototype=$desc
-function LfS(a){this.a=a}LfS.builtin$cls="LfS"
+function ik(a){this.a=a}ik.builtin$cls="ik"
+if(!"name" in ik)ik.name="ik"
+$desc=$collectedClasses.ik
+if($desc instanceof Array)$desc=$desc[1]
+ik.prototype=$desc
+function LfS(b){this.b=b}LfS.builtin$cls="LfS"
if(!"name" in LfS)LfS.name="LfS"
$desc=$collectedClasses.LfS
if($desc instanceof Array)$desc=$desc[1]
LfS.prototype=$desc
-function fTP(b){this.b=b}fTP.builtin$cls="fTP"
-if(!"name" in fTP)fTP.name="fTP"
-$desc=$collectedClasses.fTP
-if($desc instanceof Array)$desc=$desc[1]
-fTP.prototype=$desc
function NP(Ca,LO,ZY,xS,PB,eS,Ii){this.Ca=Ca
this.LO=LO
this.ZY=ZY
@@ -28679,4 +28338,4 @@
$desc=$collectedClasses.PW
if($desc instanceof Array)$desc=$desc[1]
PW.prototype=$desc
-return[qE,Yy,Ps,rK,fY,Mr,zx,ct,nB,i3,it,Az,QP,QW,n6,Ny,OM,QQ,MA,y4,d7,Rb,oJ,DG,mN,vH,hh,Em,Sb,rV,Wy,QF,bA,Wq,rz,Nh,wj,cv,Fs,SX,ea,D0,as,T5,Aa,u5,Yu,iG,jP,U2,tA,xn,Vb,QH,ST,X2,fJ,Vi,tX,Sg,pA,Mi,Gt,In,Gx,eP,AL,Og,cS,M6,El,zm,SV,aB,ku,Ih,cW,DK,qm,ZY,cx,la,Vn,PG,xe,Hw,bn,Im,oB,Aj,oU,qT,KV,BH,mh,G7,kl,Ql,Xp,bP,mX,SN,HD,ni,p3,qj,qW,KR,ew,fs,bX,BL,MC,Mx,j2,yz,lp,kd,I0,QR,Cp,ua,zD,Ul,G0,wb,fq,h4,qk,GI,Tb,tV,BT,yY,kJ,AE,xV,FH,y6,RH,pU,Lq,Mf,BR,r4,aG,J6,K5,UM,WS,rq,nK,kc,Eh,ty,Nf,Nc,rj,rh,Zv,Q7,hF,yK,HB,ZJ,mU,eZ,Fl,y5,nV,Zc,ui,D6,DQ,Sm,dx,es,eG,lv,pf,NV,W1,zo,wf,TU,bb,VE,zp,Xu,lu,tk,me,qN,NY,d4,MI,ca,xX,eW,um,Fu,OE,l6,BA,tp,rE,CC,PQ,uz,Yd,U0,AD,Gr,tc,GH,lo,NJ,nd,vt,rQ,EU,LR,MB,hy,r8,aS,CG,qF,MT,xN,Eo,Dn,ox,ZD,NE,wD,BD,vRT,Fi,Qr,mj,cB,k2,yR,AX,xJ,l4,Et,NC,nb,By,xt,tG,P0,Jq,Xr,qD,Cf,AS,Kq,oI,mJ,rF,vi,ZX,ycx,nE,zt,F0,Lt,Gv,kn,PE,QI,Tm,is,Q,jx,ZC,Jt,P,im,Pp,O,PK,JO,O2,aX,cC,RA,IY,JH,jl,Iy,JM,Ua,JG,ns,wd,TA,YP,yc,I9,Bj,NO,II,aJ,X1,HU,Pm,oo,OW,Dd,AP,yH,FA,Av,oH,LP,c2,WT,p8,XR,LI,A2,F3,u8,Gi,t2,Zr,ZQ,az,vV,Hk,XO,dr,TL,KX,uZ,OQ,Tp,v,Z3,D2,GT,Pe,Eq,cu,Lm,dC,wN,VX,VR,EK,KW,Pb,tQ,aC,Vf,Be,tu,i6,Vc,zO,aL,nH,a7,i1,xy,MH,A8,U5,SO,zs,rR,vZ,d5,U1,SJ,SU,Tv,XC,iK,GD,Sn,nI,jU,Lj,mb,am,cw,EE,Uz,uh,Kv,oP,YX,BI,y1,M2,iu,mg,zE,bl,tB,Oo,Tc,Ax,Wf,Un,Ei,U7,t0,Ld,Sz,Zk,fu,ng,Ar,jB,ye,Gj,Zz,Xh,Ca,Ik,JI,Ip,WV,C7,CQ,dz,tK,OR,Bg,DL,b8,j7,oV,TP,Zf,vs,da,xw,dm,rH,ZL,mi,jb,wB,Pu,qh,QC,Yl,Rv,YJ,jv,LB,DO,lz,Rl,Jb,M4,Jp,h7,pr,eN,B5,PI,j4,i9,VV,Dy,lU,xp,UH,Z5,ii,ib,MO,ms,UO,Bc,vp,lk,Gh,XB,ly,cK,O9,yU,nP,KA,Vo,qB,ez,lx,LV,DS,dp,B3,CR,ny,dR,uR,QX,YR,fB,eO,nO,t3,dq,dX,aY,wJ,e4,JB,Id,fZ,TF,Xz,Cg,Hs,uo,pK,eM,Ue,W5,R8,k6,oi,ce,o2,jG,fG,EQ,YB,iX,ou,S9,ey,xd,v6,db,Cm,N6,jg,YO,oz,b6,ef,zQ,Yp,u3,mW,ar,lD,W0,Sw,o0,a1,jp,Xt,Ba,An,LD,YI,OG,ro,DN,ZM,HW,JC,f1,Uk,wI,ob,by,QM,z0,E3,Rw,GY,jZ,h0,CL,K8,a2,fR,iP,MF,Rq,Hn,Zl,pl,a6,P7,DW,Ge,LK,AT,bJ,mp,ub,ds,lj,UV,VS,t7,HG,aE,kM,EH,cX,eL,L8,c8,a,Od,mE,WU,Rn,wv,uq,iD,hb,XX,Kd,yZ,Gs,pm,Tw,wm,FB,Lk,XZ,qz,hQ,Nw,kZ,JT,d9,rI,dD,QZ,BV,id,wz,B1,M5,Jn,DM,zL,ec,Kx,iO,bU,e7,nj,rl,RAp,ma,cf,E9,nF,FK,Si,vf,Fc,hD,I4,e0,RO,eu,ie,Ea,pu,i2,b0,Ov,qO,RX,kG,Gm,W9,uY,dW,PA,H2,O7,HI,E4,r7,Tz,Wk,DV,Hp,Nz,Jd,QS,ej,NL,vr,D4,L9u,Ms,Fw,RS,RY,Ys,vg,xG,Vj,VW,RK,DH,ZK,Th,Vju,KB,RKu,na,TkQ,xGn,ZKG,VWk,w6W,DHb,z9g,G8,UZ,Fv,WZ,I3,pv,Gk,Vfx,Ds,Dsd,CA,YL,KC,xL,As,GE,u7,St,tuj,vj,Vct,CX,D13,TJ,dG,Ng,HV,BK,fA,tz,jR,PO,c5,ih,mL,bv,pt,Zd,dY,vY,dS,ZW,dZ,Qe,Nu,pF,Ha,nu,be,Pg,jI,Zw,Pf,F1,uL,Xf,Pi,yj,qI,J3,E5,o5,b5,zI,Zb,bF,iV,W4,ndx,Hm,d3,X6,xh,wn,uF,cj,HA,br,zT,D7,qL,C4,l9,lP,km,Qt,Dk,A0,rm,eY,OO,BE,Qb,xI,q1,Zj,XP,q6,CK,BO,ZG,Oc,MX,w12,ppY,yL,dM,Y7,WC,Xi,TV,Mq,Oa,n1,xf,L6,Rs,uJ,hm,Ji,Bf,ir,Tt,GN,k8,HJ,S0,V3,Bl,Fn,e3,pM,jh,Md,Lf,fT,pp,Nq,nl,mf,ik,HK,w13,o8,GL,e9,Dw,Xy,uK,mY,fE,mB,XF,iH,wJY,zOQ,W6o,MdQ,YJG,DOe,lPa,Ufa,Raa,w0,w4,w5,w7,w9,w10,w11,c4,z6,Ay,Ed,G1,Os,Dl,Wh,x5,ev,ID,jV,ek,OC,Xm,Jy,ky,uA,vl,Li,WK,iT,tE,GS,fa,WW,vQ,a9,VA,J1,fk,wL,B0,Fq,hw,EZ,no,kB,ae,Iq,w6,jK,uk,K9,zX,x9,RW,xs,FX,Ae,Bt,vR,Pn,hc,hA,fr,a0,NQ,fI,WZq,kK,pva,uw,cda,V2,D8,jY,ll,Uf,LfS,fTP,NP,Vh,r0,jz,SA,zV,nv,ee,XI,hs,yp,ug,DT,OB,Ra,N9,NW,HS,TG,ts,Kj,VU,Ya,XT,ic,VT,T4,TR,VD,Oh,zy,Nb,Fy,eU,ADW,Ri,kq,Ag,PW]}
\ No newline at end of file
+return[qE,Yy,Ps,rK,fY,Mr,zx,ct,nB,i3,it,Az,QP,QW,n6,Ny,OM,QQ,MA,y4,d7,na,oJ,DG,mN,vH,hh,Em,Sb,rV,Wy,YN,bA,Wq,rv,BK,wj,cv,Fs,SX,ea,D0,as,T5,Aa,u5,Yu,iG,jP,U2,tA,xn,Vb,QH,ST,X2,fJ,Vi,tX,Sg,pA,Mi,Gt,In,Gx,eP,AL,Og,cS,M6,El,zm,SV,aB,ku,KM,cW,DK,qm,ZY,cx,la,Vn,PG,xe,Hw,bn,Im,oB,Aj,oU,qT,KV,BH,mh,G7,wq,Ql,Xp,bP,mX,SN,HD,ni,p3,qj,qW,KR,ew,fs,bX,BL,MC,Mx,j2,yz,lp,pD,I0,QR,Cp,ua,zD,Ul,G0,wb,fq,h4,qk,GI,Tb,tV,BT,yY,kJ,AE,xV,FH,y6,RH,pU,Lq,Mf,BR,r4,aG,J6,K5,UM,UL,rq,nK,kc,ij,ty,Nf,Nc,rj,rh,Zv,Q7,hF,OF,HB,ZJ,mU,eZ,Fl,y5,nV,Zc,ui,D6,DQ,Sm,dx,es,eG,lv,pf,NV,W1,zo,wf,TU,bb,VE,lc,Xu,qM,tk,me,qN,nh,d4,MI,ca,xX,eW,um,Fu,OE,l6,BA,zp,rE,CC,PQ,uz,Yd,U0,AD,Gr,tc,GH,lo,NJ,nd,vt,rQ,EU,LR,MB,hy,r8,aS,CG,qF,MT,Rk,Eo,Dn,UD,ZD,NE,wD,BD,vRT,Fi,Qr,mj,cB,uY,yR,AX,xJ,l4,Et,NC,nb,By,xt,tG,P0,Jq,Xr,qD,Cf,I2,AS,Kq,oI,mJ,rF,vi,ZX,ycx,nE,zt,F0,Lt,Gv,kn,PE,QI,FP,is,Q,jx,ZC,Jt,P,im,Pp,O,PK,JO,O2,aX,cC,RA,IY,JH,jl,Iy,JM,Ua,JG,ns,wd,TA,YP,yc,I9,Bj,NO,II,aJ,X1,HU,Pm,oo,OW,Dd,AP,yH,FA,Av,oH,LP,c2,WT,p8,XR,LI,A2,F3,u8,Gi,t2,Zr,ZQ,az,vV,Hk,XO,dr,TL,KX,uZ,OQ,Tp,v,Z3,D2,GT,Pe,Eq,cu,Lm,dC,wN,VX,VR,EK,KW,Pb,tQ,aC,Vf,Be,tu,i6,Vc,zO,aL,nH,a7,i1,xy,MH,A8,U5,SO,zs,rR,AM,d5,U1,SJ,SU,Tv,XC,iK,GD,Sn,nI,jU,Lj,mb,am,cw,EE,Uz,uh,Kv,oP,YX,BI,y1,M2,iu,mg,zE,bl,Ef,Oo,Tc,Ax,Wf,Un,Ei,U7,t0,Ld,Sz,Zk,fu,ng,Ar,jB,ye,Gj,Zz,Xh,Ca,Ik,JI,Ip,WV,C7,CQ,dz,tK,OR,Bg,DL,b8,j7,oV,TP,Zf,vs,da,xw,dm,rH,ZL,mi,jb,wB,Pu,qh,QC,Yl,Rv,YJ,jv,LB,DO,lz,Rl,Jb,M4,Jp,h7,pr,eN,B5,PI,j4,i9,VV,Dy,lU,xp,UH,Z5,ii,ib,MO,ms,UO,Bc,vp,lk,Gh,XB,ly,cK,O9,yU,nP,KA,Vo,qB,ez,lx,LV,DS,dp,B3,CR,ny,dR,uR,QX,YR,fB,bq,nO,t3,dq,dX,aY,wJ,e4,JB,Id,fZ,TF,Xz,Cg,Hs,uo,pK,eM,Ue,W5,R8,k6,oi,ce,o2,jG,fG,EQ,YB,iX,ou,S9,ey,xd,v6,db,Cm,N6,jg,YO,oz,b6,ef,zQ,Yp,u3,mW,ar,lD,W0,Sw,o0,a1,jp,Xt,Ba,An,LD,YI,OG,ro,DN,ZM,HW,JC,f1,Uk,wI,ob,Ud,K8,by,dI,QM,Sh,tF,z0,Vx,Rw,GY,jZ,h0,CL,uA,a2,fR,iP,MF,Rq,Hn,Zl,pl,a6,P7,DW,Ge,LK,AT,bJ,mp,ub,ds,lj,UV,VS,t7,HG,aE,kM,EH,cX,eL,L8,c8,a,Od,mE,WU,Rn,wv,uq,iD,hb,XX,Kd,yZ,Gs,pm,Tw,wm,FB,Lk,XZ,qz,hQ,Nw,kZ,JT,d9,rI,dD,QZ,BV,E1,wz,B1,M5,Jn,DM,zL,ec,Kx,iO,bU,e7,nj,rl,RAp,ma,cf,E9,nF,FK,Si,vf,Fc,hD,I4,e0,RO,eu,ie,Ea,pu,i2,b0,Ov,qO,RX,kG,Gm,W9,vZ,dW,PA,H2,O7,HI,E4,r7,Tz,Wk,DV,Hp,Nz,Jd,QS,QF,NL,vr,D4,L9u,Ms,Fw,RS,RY,Ys,vg,xG,Vj,VW,RK,DH,ZK,Th,Vju,KB,RKu,xGn,TkQ,VWk,ZKG,DHb,w6W,Hna,z9g,G8,UZ,Fv,WZ,I3,pv,qr,Vfx,Gk,Dsd,Ds,tuj,aI,rG,yh,wO,Tm,rz,CA,YL,KC,xL,As,GE,pR,Vct,hx,D13,u7,St,WZq,vj,pva,CX,cda,TJ,dG,Ng,HV,Nh,fA,tz,jR,PO,c5,ih,mL,bv,pt,Zd,dY,vY,dS,ZW,dZ,Qe,Nu,pF,Ha,nu,be,Pg,jI,Rb,Zw,Pf,F1,waa,uL,Nr,Pi,yj,qI,J3,E5,o5,b5,zI,Zb,id,iV,W4,Fa,x9,d3,X6,xh,wn,uF,cj,HA,br,zT,D7,qL,C4,l9,lP,km,Qt,Dk,A0,rm,eY,OO,BE,Qb,xI,q1,Zj,XP,q6,CK,BO,ZG,Oc,MX,w12,fTP,yL,dM,Y7,WC,Xi,TV,Mq,Oa,n1,xf,L6,Rs,uJ,hm,Ji,Bf,ir,Sa,GN,k8,HJ,S0,V3,Bl,pM,Mh,Md,Lf,fT,pp,Nq,nl,mf,ej,HK,w13,o8,GL,e9,Dw,Xy,uK,mY,fE,mB,XF,iH,wJY,zOQ,W6o,MdQ,YJG,DOe,lPa,Ufa,Raa,w0,w4,w5,w7,w9,w10,w11,c4,z6,Ay,Ed,G1,Os,Dl,Wh,x5,ev,ID,jV,ek,OC,Xm,Jy,ky,fa,WW,vQ,a9,jh,e3,VA,J1,fk,wL,B0,Fq,hw,EZ,no,kB,ae,Iq,w6,jK,uk,K9,RW,xs,FX,Ae,Bt,vR,Pn,hc,hA,fr,a0,NQ,fI,V0,kK,V4,uw,V6,V2,D8,jY,ll,Uf,ik,LfS,NP,Vh,r0,jz,SA,zV,nv,ee,XI,hs,yp,ug,DT,OB,Ra,N9,NW,HS,TG,ts,Kj,VU,Ya,XT,ic,VT,T4,TR,VD,Oh,zy,Nb,Fy,eU,ADW,Ri,kq,Ag,PW]}
\ No newline at end of file
diff --git a/runtime/bin/vmservice/client/deployed/web/index_devtools.html b/runtime/bin/vmservice/client/deployed/web/index_devtools.html
new file mode 100644
index 0000000..c776551
--- /dev/null
+++ b/runtime/bin/vmservice/client/deployed/web/index_devtools.html
@@ -0,0 +1,591 @@
+<!DOCTYPE html><html><head><script src="packages/shadow_dom/shadow_dom.debug.js"></script>
+<script src="packages/custom_element/custom-elements.debug.js"></script>
+<script src="packages/browser/interop.js"></script>
+
+ <title>Dart VM Observatory</title>
+ <meta charset="utf-8">
+ <link type="text/css" rel="stylesheet" href="bootstrap_css/css/bootstrap.min.css">
+
+ <script src="index_devtools.html_bootstrap.dart.js"></script>
+
+</head>
+<body><polymer-element name="observatory-element">
+
+</polymer-element><polymer-element name="error-view" extends="observatory-element">
+ <template>
+ <div class="row">
+ <div class="col-md-8 col-md-offset-2">
+ <div class="panel panel-danger">
+ <div class="panel-heading">Error</div>
+ <div class="panel-body">
+ <template if="{{ (error_obj == null) || (error_obj['type'] != 'LanguageError') }}">
+ <p>{{ error }}</p>
+ </template>
+ <template if="{{ (error_obj != null) && (error_obj['type'] == 'LanguageError') }}">
+ <pre>{{ error_obj['error_msg'] }}</pre>
+ </template>
+ </div>
+ </div>
+ </div>
+ </div>
+ </template>
+
+</polymer-element><polymer-element name="field-ref" extends="observatory-element">
+<template>
+<div>
+ <template if="{{ field['final'] }}"> final </template>
+ <template if="{{ field['const'] }}"> const </template>
+ <template if="{{ (field['declared_type']['name'] == 'dynamic' && !field['final'] && !field['const']) }}">
+ var
+ </template>
+ <template if="{{ (field['declared_type']['name'] != 'dynamic') }}">
+ <a href="{{ app.locationManager.currentIsolateClassLink(field['declared_type']['id']) }}">
+ {{ field['declared_type']['user_name'] }} </a>
+ </template>
+ <a href="{{ app.locationManager.currentIsolateObjectLink(field['id'])}}">
+ {{ field['user_name'] }} </a>
+</div>
+</template> </polymer-element><polymer-element name="instance-ref" extends="observatory-element">
+<template>
+<div>
+ <template if="{{ (instance['type'] == 'null') }}">
+ {{ "null" }}
+ </template>
+ <template if="{{ (instance['type'] != 'null') }}">
+ <a href="{{ app.locationManager.currentIsolateObjectLink(instance['id'])}}">
+ {{ instance['preview'] }}
+ </a>
+ </template>
+ </div>
+</template> </polymer-element><polymer-element name="class-view" extends="observatory-element">
+ <template>
+ <div class="row">
+ <div class="col-md-8 col-md-offset-2">
+ <div class="panel panel-warning">
+ <div class="panel-heading">
+ class <strong>{{ cls['user_name'] }}</strong>
+ <template if="{{ cls['super']['type'] != 'Null' }}">
+ extends
+ <a href="{{ app.locationManager.currentIsolateClassLink(cls['super']['id'])}}">
+ {{ cls['super']['user_name'] }}
+ </a>
+ </template>
+ <a class="pull-right" href="{{ app.locationManager.currentIsolateObjectLink(cls['library']['id'])}}">
+ {{ cls['library']['name'] }}
+ </a>
+ </div>
+ <div class="panel-body">
+ <table class="table table-hover">
+ <tbody>
+ <tr>
+ <td>Abstract</td><td>{{ cls['abstract'] }}</td>
+ </tr>
+ <tr>
+ <td>Const</td><td>{{ cls['const'] }}</td>
+ </tr>
+ <tr>
+ <td>Finalized</td><td>{{ cls['const'] }}</td>
+ </tr>
+ <tr>
+ <td>Implemented</td><td>{{ cls['implemented'] }}</td>
+ </tr>
+ <tr>
+ <td>Patch</td><td>{{ cls['patch'] }}</td>
+ </tr>
+ <tr>
+ <td>VM Name</td><td>{{ cls['name'] }}</td>
+ </tr>
+ </tbody>
+ </table>
+ <template if="{{ cls['error'] == null }}">
+ <blockquote><strong>Fields</strong></blockquote>
+ <table class="table table-hover">
+ <tbody>
+ <tr template="" repeat="{{ field in cls['fields'] }}">
+ <td><field-ref app="{{ app }}" field="{{ field }}"></field-ref></td>
+ <td><instance-ref app="{{ app }}" instance="{{ field['value'] }}"></instance-ref></td>
+ </tr>
+ </tbody>
+ </table>
+ <blockquote><strong>Functions</strong></blockquote>
+ <table class="table table-hover">
+ <thead>
+ <tr>
+ <th>User Name</th>
+ <th>VM Name</th>
+ </tr>
+ </thead>
+ <tbody>
+ <tr template="" repeat="{{ function in cls['functions'] }}">
+ <td><a href="{{ app.locationManager.currentIsolateObjectLink(function['id'])}}">{{ function['user_name'] }}</a></td>
+ <td><a href="{{ app.locationManager.currentIsolateObjectLink(function['id'])}}">{{ function['name'] }}</a></td>
+ </tr>
+ </tbody>
+ </table>
+ </template>
+ <template if="{{ cls['error'] != null }}">
+ <error-view error_obj="{{ cls['error'] }}"></error-view>
+ </template>
+ </div>
+ </div>
+ </div>
+ </div>
+ </template>
+
+</polymer-element><polymer-element name="disassembly-entry" extends="observatory-element">
+ <template>
+ <div class="row">
+ <template if="{{ instruction['type'] == 'DisassembledInstructionComment' }}">
+ <div class="col-md-2"></div>
+ <div class="col-md-2"></div>
+ <div class="col-md-4"><code>{{ instruction['comment'] }}</code></div>
+ </template>
+ <template if="{{ instruction['type'] == 'DisassembledInstruction' }}">
+ <div class="col-md-2"></div>
+ <div class="col-md-2">{{ instruction['pc'] }}</div>
+ <div class="col-md-4">
+ <code>{{ instruction['hex'] }} {{ instruction['human'] }}</code>
+ </div>
+ </template>
+ </div>
+ </template>
+
+</polymer-element><polymer-element name="code-view" extends="observatory-element">
+ <template>
+ <div class="row">
+ <div class="col-md-8 col-md-offset-2">
+ <div class="{{ cssPanelClass }}">
+ <div class="panel-heading">
+ <a href="{{ app.locationManager.currentIsolateObjectLink(code['function']['id'])}}">
+ {{ code['function']['user_name'] }} ({{ code['function']['name'] }})
+ </a>
+ </div>
+ <div class="panel-body">
+ <div class="row">
+ <div class="col-md-2"><strong>Samples</strong></div>
+ <div class="col-md-2"><strong>Address</strong></div>
+ <div><strong>Instruction</strong></div>
+ </div>
+ <template repeat="{{ instruction in code['disassembly'] }}">
+ <disassembly-entry instruction="{{ instruction }}">
+ </disassembly-entry>
+ </template>
+ </div>
+ </div>
+ </div>
+ </div>
+ </template>
+
+</polymer-element><polymer-element name="collapsible-content" extends="observatory-element">
+ <template>
+ <div class="well row">
+ <a on-click="toggleDisplay" class="btn muted unselectable">
+ Raw message... <i class="{{ iconClass }}"></i>
+ </a>
+ <div style="display: {{ displayValue }}" class="well">
+ <content></content>
+ </div>
+ </div>
+ </template>
+
+</polymer-element><polymer-element name="field-view" extends="observatory-element">
+ <template>
+ <div class="row">
+ <div class="col-md-8 col-md-offset-2">
+ <div class="panel panel-warning">
+ <div class="panel-heading">
+ <template if="{{ field['static'] }}">static</template>
+ <template if="{{ field['final'] }}">final</template>
+ <template if="{{ field['const'] }}">const</template>
+ {{ field['user_name'] }} ({{ field['name'] }})
+ <a class="pull-right" href="{{ app.locationManager.currentIsolateClassLink(field['class']['id'])}}">
+ {{ field['class']['user_name'] }}
+ </a>
+ </div>
+ <div class="panel-body">
+ <template if="{{ field['guard_class'] == 'dynamic'}}">
+ <div class="alert alert-danger">
+ Field has been assigned multiple types. If a field is only ever
+ assigned a single type, performance may improve.
+ </div>
+ </template>
+ <template if="{{ field['guard_class'] != 'dynamic'}}">
+ <div class="alert alert-success">Field has monomorphic type</div>
+ <template if="{{ (field['guard_class'] != 'dynamic') &&
+ field['guard_nullable'] }}">
+ <div class="alert alert-info">
+ Field has been assigned null. If a field is never assigned null,
+ performance may improve.
+ </div>
+ </template>
+ <blockquote>
+ <a href="{{ app.locationManager.currentIsolateClassLink(field['guard_class']['id'])}}">
+ {{ field['guard_class']['user_name'] }}
+ </a>
+ </blockquote>
+ </template>
+ </div>
+ </div>
+ </div>
+ </div>
+ </template>
+
+</polymer-element><polymer-element name="function-view" extends="observatory-element">
+ <template>
+ <div class="row">
+ <div class="col-md-8 col-md-offset-2">
+ <div class="panel panel-warning">
+ <div class="panel-heading">
+ {{ function['user_name'] }} ({{ function['name'] }})
+ <a class="pull-right" href="{{ app.locationManager.currentIsolateClassLink(function['class']['id'])}}">
+ {{ function['class']['name'] }}
+ </a>
+ </div>
+ <div class="panel-body">
+ <div>
+ <a class="btn btn-primary" href="{{ app.locationManager.currentIsolateObjectLink(function['code']['id'])}}">Current Code</a>
+ <a class="btn btn-info" href="{{ app.locationManager.currentIsolateObjectLink(function['unoptimized_code']['id'])}}">Unoptimized Code</a>
+ </div>
+ <table class="table table-hover">
+ <tbody>
+ <tr>
+ <td>static</td><td>{{ function['is_static'] }}</td>
+ </tr>
+ <tr>
+ <td>Const</td><td>{{ function['is_const'] }}</td>
+ </tr>
+ <tr>
+ <td>Optimizable</td><td>{{ function['is_optimizable'] }}</td>
+ </tr>
+ <tr>
+ <td>Inlinable</td><td>{{ function['is_inlinable'] }}</td>
+ </tr>
+ <tr>
+ <td>Kind</td><td>{{ function['kind'] }}</td>
+ </tr>
+ <tr>
+ <td>Usage Count</td><td>{{ function['usage_counter'] }}</td>
+ </tr>
+ <tr>
+ <td>Optimized Call Site Count</td><td>{{ function['optimized_call_site_count'] }}</td>
+ </tr>
+ <tr>
+ <td>Deoptimizations</td><td>{{ function['deoptimizations'] }}</td>
+ </tr>
+ </tbody>
+ </table>
+ </div>
+ </div>
+ </div>
+ </div>
+ </template>
+
+</polymer-element><polymer-element name="isolate-summary" extends="observatory-element">
+ <template>
+ <div class="row">
+ <div class="col-md-1">
+ <img src="packages/observatory/src/observatory_elements/img/isolate_icon.png" class="img-polaroid">
+ </div>
+ <div class="col-md-1">{{ isolate }}</div>
+ <div class="col-md-10">{{ name }}</div>
+ </div>
+ <div class="row">
+ <div class="col-md-2"></div>
+ <div class="col-md-1">
+ <a href="{{ app.locationManager.relativeLink(isolate, 'stacktrace') }}">Stacktrace</a>
+ </div>
+ <div class="col-md-1">
+ <a href="{{ app.locationManager.relativeLink(isolate, 'library') }}">Library</a>
+ </div>
+ <div class="col-md-8"></div>
+ </div>
+ </template>
+
+</polymer-element><polymer-element name="isolate-list" extends="observatory-element">
+ <template>
+ <ul class="list-group">
+ <template repeat="{{ isolate in app.isolateManager.isolates.values }}">
+ <li class="list-group-item">
+ <isolate-summary app="{{ app }}" isolate="{{ isolate.id }}" name="{{ isolate.name }}"></isolate-summary>
+ </li>
+ </template>
+ </ul>
+ </template>
+
+</polymer-element><polymer-element name="instance-view" extends="observatory-element">
+ <template>
+ <div class="row">
+ <div class="col-md-8 col-md-offset-2">
+ <div class="panel panel-warning">
+ <div class="panel-heading">
+ Instance of
+ <a href="{{ app.locationManager.currentIsolateClassLink(instance['class']['id'])}}">
+ {{ instance['class']['user_name'] }}
+ </a>
+ </div>
+ <div class="panel-body">
+ <template if="{{ instance['error'] == null }}">
+ <table class="table table-hover">
+ <tbody>
+ <tr>
+ <td>Preview</td><td>{{ instance['preview'] }}</td>
+ </tr>
+ </tbody>
+ </table>
+ <blockquote><strong>Fields</strong></blockquote>
+ <table class="table table-hover">
+ <tbody>
+ <tr template="" repeat="{{ field in instance['fields'] }}">
+ <td><field-ref app="{{ app }}" field="{{ field }}"></field-ref></td>
+ <td><instance-ref app="{{ app }}" instance="{{ field['value'] }}"></instance-ref></td>
+ </tr>
+ </tbody>
+ </table>
+ </template>
+ <template if="{{ instance['error'] != null }}">
+ <error-view error_obj="{{ instance['error'] }}"></error-view>
+ </template>
+ </div>
+ </div>
+ </div>
+ </div>
+ </template>
+
+</polymer-element><polymer-element name="json-view" extends="observatory-element">
+ <template>
+ <template bind="" if="{{ valueType == 'Primitive' }}">
+ <span>{{primitiveString}}</span>
+ </template>
+ <template bind="" if="{{ valueType == 'List' }}">
+ <table class="table table-condensed table-bordered">
+ <caption class="text-left">List, {{list.length}}</caption>
+ <tbody>
+ <tr template="" repeat="{{item in list)}}">
+ <th>{{counter}}</th>
+ <td><json-view json="{{item}}"></json-view></td>
+ </tr>
+ </tbody>
+ </table>
+ </template>
+ <template if="{{ valueType == 'Map' }}">
+ <table class="table table-condensed table-bordered">
+ <caption class="text-left">Map, {{keys.length}}</caption>
+ <tbody>
+ <tr template="" repeat="{{key in keys}}">
+ <th>{{key}}</th>
+ <td><json-view json="{{value(key)}}"></json-view></td>
+ </tr>
+ </tbody>
+ </table>
+ </template>
+ </template>
+
+</polymer-element><polymer-element name="library-view" extends="observatory-element">
+ <template>
+ <div class="alert alert-success">Library {{ library['name'] }}</div>
+ <div class="alert alert-info">Scripts</div>
+ <table class="table table-hover">
+ <tbody>
+ <tr template="" repeat="{{ script in library['scripts']}}">
+ <td>
+ {{ script['kind'] }}
+ </td>
+ <td>
+ <a href="{{ app.locationManager.currentIsolateScriptLink(script['id'], script['name']) }}">{{ script['name'] }}</a>
+ </td>
+ </tr>
+ </tbody>
+ </table>
+ <div class="alert alert-info">Imported Libraries</div>
+ <table class="table table-hover">
+ <tbody>
+ <tr template="" repeat="{{ lib in library['libraries'] }}">
+ <td>
+ <a href="{{ app.locationManager.currentIsolateObjectLink(lib['id'])}}">
+ {{ lib['url'] }}
+ </a>
+ </td>
+ </tr>
+ </tbody>
+ </table>
+ <div class="alert alert-info">Variables</div>
+ <table class="table table-hover">
+ <tbody>
+ <tr template="" repeat="{{ variable in library['variables'] }}">
+ <td><field-ref app="{{ app }}" field="{{ variable }}"></field-ref></td>
+ <td><instance-ref app="{{ app }}" instance="{{ variable['value'] }}"></instance-ref></td>
+ </tr>
+ </tbody>
+ </table>
+ <div class="alert alert-info">Functions</div>
+ <table class="table table-hover">
+ <tbody>
+ <tr template="" repeat="{{ func in library['functions'] }}">
+ <td>
+ <a href="{{ app.locationManager.currentIsolateObjectLink(func['id'])}}">
+ {{ func['user_name'] }}
+ </a>
+ </td>
+ </tr>
+ </tbody>
+ </table>
+ <div class="alert alert-info">Classes</div>
+ <table class="table table-hover">
+ <thead>
+ <tr>
+ <th>Name</th>
+ <th>Internal Name</th>
+ </tr>
+ </thead>
+ <tbody>
+ <tr template="" repeat="{{ cls in library['classes'] }}">
+ <td>
+ <a href="{{ app.locationManager.currentIsolateClassLink(cls['id']) }}">
+ {{ cls['user_name'] }}
+ </a>
+ </td>
+ <td>
+ <a href="{{ app.locationManager.currentIsolateClassLink(cls['id']) }}">
+ {{ cls['name'] }}
+ </a>
+ </td>
+ </tr>
+ </tbody>
+ </table>
+
+ </template>
+
+</polymer-element><polymer-element name="source-view" extends="observatory-element">
+ <template>
+ <div class="row">
+ <div class="col-md-8 col-md-offset-2">
+ <div class="panel-heading">{{ source.url }}</div>
+ <div class="panel-body">
+ <div class="row">
+ <div><strong>Source</strong></div>
+ </div>
+ <pre> <template repeat="{{ line in source.lines }}">{{line.paddedLine}} {{line.src}}
+ </template>
+ </pre>
+ </div>
+ </div>
+ </div>
+ </template>
+
+</polymer-element><polymer-element name="script-view" extends="observatory-element">
+ <template>
+ <source-view app="{{ app }}" source="{{ script['source'] }}"></source-view>
+ </template>
+
+</polymer-element><polymer-element name="stack-trace" extends="observatory-element">
+ <template>
+ <div class="alert alert-info">Stack Trace</div>
+ <table class="table table-hover">
+ <thead>
+ <tr>
+ <th>Depth</th>
+ <th>Function</th>
+ <th>Url</th>
+ <th>Line</th>
+ </tr>
+ </thead>
+ <tbody>
+ <tr template="" repeat="{{ frame in trace['members'] }}">
+ <td>{{$index}}</td>
+ <td><a href="{{app.locationManager.currentIsolateObjectLink(frame['function']['id'])}}">{{ frame['name'] }}</a></td>
+ <td>{{ frame['url'] }}</td>
+ <td>{{ frame['line'] }}</td>
+ </tr>
+ </tbody>
+ </table>
+ </template>
+
+</polymer-element><polymer-element name="message-viewer" extends="observatory-element">
+ <!--
+ This is a big switch statement which instantiates the custom element
+ designated to display the message type.
+ -->
+ <template>
+ <!-- If the message type is an IsolateList -->
+ <template if="{{ messageType == 'IsolateList' }}">
+ <isolate-list app="{{ app }}"></isolate-list>
+ </template>
+ <!-- If the message type is a StackTrace -->
+ <template if="{{ messageType == 'StackTrace' }}">
+ <stack-trace app="{{ app }}" trace="{{ message }}"></stack-trace>
+ </template>
+ <!-- If the message type is a RequestError -->
+ <template if="{{ messageType == 'RequestError' }}">
+ <error-view app="{{ app }}" error="{{ message['error'] }}"></error-view>
+ </template>
+ <template if="{{ messageType == 'Library' }}">
+ <library-view app="{{ app }}" library="{{ message }}"></library-view>
+ </template>
+ <template if="{{ messageType == 'Class' }}">
+ <class-view app="{{ app }}" cls="{{ message }}"></class-view>
+ </template>
+ <template if="{{ messageType == 'Field' }}">
+ <field-view app="{{ app }}" field="{{ message }}"></field-view>
+ </template>
+ <template if="{{ messageType == 'Instance' }}">
+ <instance-view app="{{ app }}" instance="{{ message }}"></instance-view>
+ </template>
+ <template if="{{ messageType == 'Array' }}">
+ <instance-view app="{{ app }}" instance="{{ message }}"></instance-view>
+ </template>
+ <template if="{{ messageType == 'GrowableObjectArray' }}">
+ <instance-view app="{{ app }}" instance="{{ message }}"></instance-view>
+ </template>
+ <template if="{{ messageType == 'String' }}">
+ <instance-view app="{{ app }}" instance="{{ message }}"></instance-view>
+ </template>
+ <template if="{{ messageType == 'Bool' }}">
+ <instance-view app="{{ app }}" instance="{{ message }}"></instance-view>
+ </template>
+ <template if="{{ messageType == 'Smi' }}">
+ <instance-view app="{{ app }}" instance="{{ message }}"></instance-view>
+ </template>
+ <template if="{{ messageType == 'Function' }}">
+ <function-view app="{{ app }}" function="{{ message }}"></function-view>
+ </template>
+ <template if="{{ messageType == 'Code' }}">
+ <code-view app="{{ app }}" code="{{ message }}"></code-view>
+ </template>
+ <template if="{{ messageType == 'Script' }}">
+ <script-view app="{{ app }}" script="{{ message }}"></script-view>
+ </template>
+ <!-- Add new views and message types in the future here. -->
+ </template>
+
+</polymer-element><polymer-element name="navigation-bar" extends="observatory-element">
+ <template>
+ <nav class="navbar navbar-default" role="navigation">
+ <div class="navbar-header">
+ <a class="navbar-brand" href="">Observatory</a>
+ </div>
+ <div class="collapse navbar-collapse navbar-ex1-collapse">
+ <input class="span2 pull-right navbar-form" placeholder="VM Address" type="text" value="{{ app.requestManager.prefix }}">
+ </div>
+ </nav>
+ </template>
+
+</polymer-element><polymer-element name="response-viewer" extends="observatory-element">
+ <template>
+ <template repeat="{{ message in app.requestManager.responses }}">
+ <message-viewer app="{{ app }}" message="{{ message }}"></message-viewer>
+ <collapsible-content>
+ <!-- <json-view json="{{ message }}"></json-view> -->
+ </collapsible-content>
+ </template>
+ </template>
+
+</polymer-element><polymer-element name="observatory-application" extends="observatory-element">
+ <template>
+ <navigation-bar app="{{ app }}"></navigation-bar>
+ <response-viewer app="{{ app }}"></response-viewer>
+ </template>
+
+</polymer-element>
+ <observatory-application devtools="true"></observatory-application>
+
+</body></html>
\ No newline at end of file
diff --git a/runtime/bin/vmservice/client/deployed/web/index_devtools.html_bootstrap.dart.js b/runtime/bin/vmservice/client/deployed/web/index_devtools.html_bootstrap.dart.js
new file mode 100644
index 0000000..1cb385f
--- /dev/null
+++ b/runtime/bin/vmservice/client/deployed/web/index_devtools.html_bootstrap.dart.js
@@ -0,0 +1,48979 @@
+if (!HTMLElement.prototype.createShadowRoot
+ || window.__forceShadowDomPolyfill) {
+
+/*
+ * Copyright 2013 The Polymer Authors. All rights reserved.
+ * Use of this source code is governed by a BSD-style
+ * license that can be found in the LICENSE file.
+ */
+(function() {
+ // TODO(jmesserly): fix dart:html to use unprefixed name
+ if (Element.prototype.webkitCreateShadowRoot) {
+ Element.prototype.webkitCreateShadowRoot = function() {
+ return window.ShadowDOMPolyfill.wrapIfNeeded(this).createShadowRoot();
+ };
+ }
+})();
+
+// Copyright 2012 Google Inc.
+//
+// Licensed under the Apache License, Version 2.0 (the "License");
+// you may not use this file except in compliance with the License.
+// You may obtain a copy of the License at
+//
+// http://www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing, software
+// distributed under the License is distributed on an "AS IS" BASIS,
+// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+// See the License for the specific language governing permissions and
+// limitations under the License.
+
+(function(global) {
+ 'use strict';
+
+ var PROP_ADD_TYPE = 'add';
+ var PROP_UPDATE_TYPE = 'update';
+ var PROP_RECONFIGURE_TYPE = 'reconfigure';
+ var PROP_DELETE_TYPE = 'delete';
+ var ARRAY_SPLICE_TYPE = 'splice';
+
+ // Detect and do basic sanity checking on Object/Array.observe.
+ function detectObjectObserve() {
+ if (typeof Object.observe !== 'function' ||
+ typeof Array.observe !== 'function') {
+ return false;
+ }
+
+ var records = [];
+
+ function callback(recs) {
+ records = recs;
+ }
+
+ var test = {};
+ Object.observe(test, callback);
+ test.id = 1;
+ test.id = 2;
+ delete test.id;
+ Object.deliverChangeRecords(callback);
+ if (records.length !== 3)
+ return false;
+
+ // TODO(rafaelw): Remove this when new change record type names make it to
+ // chrome release.
+ if (records[0].type == 'new' &&
+ records[1].type == 'updated' &&
+ records[2].type == 'deleted') {
+ PROP_ADD_TYPE = 'new';
+ PROP_UPDATE_TYPE = 'updated';
+ PROP_RECONFIGURE_TYPE = 'reconfigured';
+ PROP_DELETE_TYPE = 'deleted';
+ } else if (records[0].type != 'add' ||
+ records[1].type != 'update' ||
+ records[2].type != 'delete') {
+ console.error('Unexpected change record names for Object.observe. ' +
+ 'Using dirty-checking instead');
+ return false;
+ }
+ Object.unobserve(test, callback);
+
+ test = [0];
+ Array.observe(test, callback);
+ test[1] = 1;
+ test.length = 0;
+ Object.deliverChangeRecords(callback);
+ if (records.length != 2)
+ return false;
+ if (records[0].type != ARRAY_SPLICE_TYPE ||
+ records[1].type != ARRAY_SPLICE_TYPE) {
+ return false;
+ }
+ Array.unobserve(test, callback);
+
+ return true;
+ }
+
+ var hasObserve = detectObjectObserve();
+
+ function detectEval() {
+ // don't test for eval if document has CSP securityPolicy object and we can see that
+ // eval is not supported. This avoids an error message in console even when the exception
+ // is caught
+ if (global.document &&
+ 'securityPolicy' in global.document &&
+ !global.document.securityPolicy.allowsEval) {
+ return false;
+ }
+
+ try {
+ var f = new Function('', 'return true;');
+ return f();
+ } catch (ex) {
+ return false;
+ }
+ }
+
+ var hasEval = detectEval();
+
+ function isIndex(s) {
+ return +s === s >>> 0;
+ }
+
+ function toNumber(s) {
+ return +s;
+ }
+
+ function isObject(obj) {
+ return obj === Object(obj);
+ }
+
+ var numberIsNaN = global.Number.isNaN || function isNaN(value) {
+ return typeof value === 'number' && global.isNaN(value);
+ }
+
+ function areSameValue(left, right) {
+ if (left === right)
+ return left !== 0 || 1 / left === 1 / right;
+ if (numberIsNaN(left) && numberIsNaN(right))
+ return true;
+
+ return left !== left && right !== right;
+ }
+
+ var createObject = ('__proto__' in {}) ?
+ function(obj) { return obj; } :
+ function(obj) {
+ var proto = obj.__proto__;
+ if (!proto)
+ return obj;
+ var newObject = Object.create(proto);
+ Object.getOwnPropertyNames(obj).forEach(function(name) {
+ Object.defineProperty(newObject, name,
+ Object.getOwnPropertyDescriptor(obj, name));
+ });
+ return newObject;
+ };
+
+ var identStart = '[\$_a-zA-Z]';
+ var identPart = '[\$_a-zA-Z0-9]';
+ var ident = identStart + '+' + identPart + '*';
+ var elementIndex = '(?:[0-9]|[1-9]+[0-9]+)';
+ var identOrElementIndex = '(?:' + ident + '|' + elementIndex + ')';
+ var path = '(?:' + identOrElementIndex + ')(?:\\s*\\.\\s*' + identOrElementIndex + ')*';
+ var pathRegExp = new RegExp('^' + path + '$');
+
+ function isPathValid(s) {
+ if (typeof s != 'string')
+ return false;
+ s = s.trim();
+
+ if (s == '')
+ return true;
+
+ if (s[0] == '.')
+ return false;
+
+ return pathRegExp.test(s);
+ }
+
+ var constructorIsPrivate = {};
+
+ function Path(s, privateToken) {
+ if (privateToken !== constructorIsPrivate)
+ throw Error('Use Path.get to retrieve path objects');
+
+ if (s.trim() == '')
+ return this;
+
+ if (isIndex(s)) {
+ this.push(s);
+ return this;
+ }
+
+ s.split(/\s*\.\s*/).filter(function(part) {
+ return part;
+ }).forEach(function(part) {
+ this.push(part);
+ }, this);
+
+ if (hasEval && !hasObserve && this.length) {
+ this.getValueFrom = this.compiledGetValueFromFn();
+ }
+ }
+
+ // TODO(rafaelw): Make simple LRU cache
+ var pathCache = {};
+
+ function getPath(pathString) {
+ if (pathString instanceof Path)
+ return pathString;
+
+ if (pathString == null)
+ pathString = '';
+
+ if (typeof pathString !== 'string')
+ pathString = String(pathString);
+
+ var path = pathCache[pathString];
+ if (path)
+ return path;
+ if (!isPathValid(pathString))
+ return invalidPath;
+ var path = new Path(pathString, constructorIsPrivate);
+ pathCache[pathString] = path;
+ return path;
+ }
+
+ Path.get = getPath;
+
+ Path.prototype = createObject({
+ __proto__: [],
+ valid: true,
+
+ toString: function() {
+ return this.join('.');
+ },
+
+ getValueFrom: function(obj, observedSet) {
+ for (var i = 0; i < this.length; i++) {
+ if (obj == null)
+ return;
+ if (observedSet)
+ observedSet.observe(obj);
+ obj = obj[this[i]];
+ }
+ return obj;
+ },
+
+ compiledGetValueFromFn: function() {
+ var accessors = this.map(function(ident) {
+ return isIndex(ident) ? '["' + ident + '"]' : '.' + ident;
+ });
+
+ var str = '';
+ var pathString = 'obj';
+ str += 'if (obj != null';
+ var i = 0;
+ for (; i < (this.length - 1); i++) {
+ var ident = this[i];
+ pathString += accessors[i];
+ str += ' &&\n ' + pathString + ' != null';
+ }
+ str += ')\n';
+
+ pathString += accessors[i];
+
+ str += ' return ' + pathString + ';\nelse\n return undefined;';
+ return new Function('obj', str);
+ },
+
+ setValueFrom: function(obj, value) {
+ if (!this.length)
+ return false;
+
+ for (var i = 0; i < this.length - 1; i++) {
+ if (!isObject(obj))
+ return false;
+ obj = obj[this[i]];
+ }
+
+ if (!isObject(obj))
+ return false;
+
+ obj[this[i]] = value;
+ return true;
+ }
+ });
+
+ var invalidPath = new Path('', constructorIsPrivate);
+ invalidPath.valid = false;
+ invalidPath.getValueFrom = invalidPath.setValueFrom = function() {};
+
+ var MAX_DIRTY_CHECK_CYCLES = 1000;
+
+ function dirtyCheck(observer) {
+ var cycles = 0;
+ while (cycles < MAX_DIRTY_CHECK_CYCLES && observer.check()) {
+ observer.report();
+ cycles++;
+ }
+ if (global.testingExposeCycleCount)
+ global.dirtyCheckCycleCount = cycles;
+ }
+
+ function objectIsEmpty(object) {
+ for (var prop in object)
+ return false;
+ return true;
+ }
+
+ function diffIsEmpty(diff) {
+ return objectIsEmpty(diff.added) &&
+ objectIsEmpty(diff.removed) &&
+ objectIsEmpty(diff.changed);
+ }
+
+ function diffObjectFromOldObject(object, oldObject) {
+ var added = {};
+ var removed = {};
+ var changed = {};
+ var oldObjectHas = {};
+
+ for (var prop in oldObject) {
+ var newValue = object[prop];
+
+ if (newValue !== undefined && newValue === oldObject[prop])
+ continue;
+
+ if (!(prop in object)) {
+ removed[prop] = undefined;
+ continue;
+ }
+
+ if (newValue !== oldObject[prop])
+ changed[prop] = newValue;
+ }
+
+ for (var prop in object) {
+ if (prop in oldObject)
+ continue;
+
+ added[prop] = object[prop];
+ }
+
+ if (Array.isArray(object) && object.length !== oldObject.length)
+ changed.length = object.length;
+
+ return {
+ added: added,
+ removed: removed,
+ changed: changed
+ };
+ }
+
+ function copyObject(object, opt_copy) {
+ var copy = opt_copy || (Array.isArray(object) ? [] : {});
+ for (var prop in object) {
+ copy[prop] = object[prop];
+ };
+ if (Array.isArray(object))
+ copy.length = object.length;
+ return copy;
+ }
+
+ function Observer(object, callback, target, token) {
+ this.closed = false;
+ this.object = object;
+ this.callback = callback;
+ // TODO(rafaelw): Hold this.target weakly when WeakRef is available.
+ this.target = target;
+ this.token = token;
+ this.reporting = true;
+ if (hasObserve) {
+ var self = this;
+ this.boundInternalCallback = function(records) {
+ self.internalCallback(records);
+ };
+ }
+
+ addToAll(this);
+ }
+
+ Observer.prototype = {
+ internalCallback: function(records) {
+ if (this.closed)
+ return;
+ if (this.reporting && this.check(records)) {
+ this.report();
+ if (this.testingResults)
+ this.testingResults.anyChanged = true;
+ }
+ },
+
+ close: function() {
+ if (this.closed)
+ return;
+ if (this.object && typeof this.object.close === 'function')
+ this.object.close();
+
+ this.disconnect();
+ this.object = undefined;
+ this.closed = true;
+ },
+
+ deliver: function(testingResults) {
+ if (this.closed)
+ return;
+ if (hasObserve) {
+ this.testingResults = testingResults;
+ Object.deliverChangeRecords(this.boundInternalCallback);
+ this.testingResults = undefined;
+ } else {
+ dirtyCheck(this);
+ }
+ },
+
+ report: function() {
+ if (!this.reporting)
+ return;
+
+ this.sync(false);
+ if (this.callback) {
+ this.reportArgs.push(this.token);
+ this.invokeCallback(this.reportArgs);
+ }
+ this.reportArgs = undefined;
+ },
+
+ invokeCallback: function(args) {
+ try {
+ this.callback.apply(this.target, args);
+ } catch (ex) {
+ Observer._errorThrownDuringCallback = true;
+ console.error('Exception caught during observer callback: ' + (ex.stack || ex));
+ }
+ },
+
+ reset: function() {
+ if (this.closed)
+ return;
+
+ if (hasObserve) {
+ this.reporting = false;
+ Object.deliverChangeRecords(this.boundInternalCallback);
+ this.reporting = true;
+ }
+
+ this.sync(true);
+ }
+ }
+
+ var collectObservers = !hasObserve || global.forceCollectObservers;
+ var allObservers;
+ Observer._allObserversCount = 0;
+
+ if (collectObservers) {
+ allObservers = [];
+ }
+
+ function addToAll(observer) {
+ if (!collectObservers)
+ return;
+
+ allObservers.push(observer);
+ Observer._allObserversCount++;
+ }
+
+ var runningMicrotaskCheckpoint = false;
+
+ var hasDebugForceFullDelivery = typeof Object.deliverAllChangeRecords == 'function';
+
+ global.Platform = global.Platform || {};
+
+ global.Platform.performMicrotaskCheckpoint = function() {
+ if (runningMicrotaskCheckpoint)
+ return;
+
+ if (hasDebugForceFullDelivery) {
+ Object.deliverAllChangeRecords();
+ return;
+ }
+
+ if (!collectObservers)
+ return;
+
+ runningMicrotaskCheckpoint = true;
+
+ var cycles = 0;
+ var results = {};
+
+ do {
+ cycles++;
+ var toCheck = allObservers;
+ allObservers = [];
+ results.anyChanged = false;
+
+ for (var i = 0; i < toCheck.length; i++) {
+ var observer = toCheck[i];
+ if (observer.closed)
+ continue;
+
+ if (hasObserve) {
+ observer.deliver(results);
+ } else if (observer.check()) {
+ results.anyChanged = true;
+ observer.report();
+ }
+
+ allObservers.push(observer);
+ }
+ } while (cycles < MAX_DIRTY_CHECK_CYCLES && results.anyChanged);
+
+ if (global.testingExposeCycleCount)
+ global.dirtyCheckCycleCount = cycles;
+
+ Observer._allObserversCount = allObservers.length;
+ runningMicrotaskCheckpoint = false;
+ };
+
+ if (collectObservers) {
+ global.Platform.clearObservers = function() {
+ allObservers = [];
+ };
+ }
+
+ function ObjectObserver(object, callback, target, token) {
+ Observer.call(this, object, callback, target, token);
+ this.connect();
+ this.sync(true);
+ }
+
+ ObjectObserver.prototype = createObject({
+ __proto__: Observer.prototype,
+
+ connect: function() {
+ if (hasObserve)
+ Object.observe(this.object, this.boundInternalCallback);
+ },
+
+ sync: function(hard) {
+ if (!hasObserve)
+ this.oldObject = copyObject(this.object);
+ },
+
+ check: function(changeRecords) {
+ var diff;
+ var oldValues;
+ if (hasObserve) {
+ if (!changeRecords)
+ return false;
+
+ oldValues = {};
+ diff = diffObjectFromChangeRecords(this.object, changeRecords,
+ oldValues);
+ } else {
+ oldValues = this.oldObject;
+ diff = diffObjectFromOldObject(this.object, this.oldObject);
+ }
+
+ if (diffIsEmpty(diff))
+ return false;
+
+ this.reportArgs =
+ [diff.added || {}, diff.removed || {}, diff.changed || {}];
+ this.reportArgs.push(function(property) {
+ return oldValues[property];
+ });
+
+ return true;
+ },
+
+ disconnect: function() {
+ if (!hasObserve)
+ this.oldObject = undefined;
+ else if (this.object)
+ Object.unobserve(this.object, this.boundInternalCallback);
+ }
+ });
+
+ function ArrayObserver(array, callback, target, token) {
+ if (!Array.isArray(array))
+ throw Error('Provided object is not an Array');
+ ObjectObserver.call(this, array, callback, target, token);
+ }
+
+ ArrayObserver.prototype = createObject({
+ __proto__: ObjectObserver.prototype,
+
+ connect: function() {
+ if (hasObserve)
+ Array.observe(this.object, this.boundInternalCallback);
+ },
+
+ sync: function() {
+ if (!hasObserve)
+ this.oldObject = this.object.slice();
+ },
+
+ check: function(changeRecords) {
+ var splices;
+ if (hasObserve) {
+ if (!changeRecords)
+ return false;
+ splices = projectArraySplices(this.object, changeRecords);
+ } else {
+ splices = calcSplices(this.object, 0, this.object.length,
+ this.oldObject, 0, this.oldObject.length);
+ }
+
+ if (!splices || !splices.length)
+ return false;
+
+ this.reportArgs = [splices];
+ return true;
+ }
+ });
+
+ ArrayObserver.applySplices = function(previous, current, splices) {
+ splices.forEach(function(splice) {
+ var spliceArgs = [splice.index, splice.removed.length];
+ var addIndex = splice.index;
+ while (addIndex < splice.index + splice.addedCount) {
+ spliceArgs.push(current[addIndex]);
+ addIndex++;
+ }
+
+ Array.prototype.splice.apply(previous, spliceArgs);
+ });
+ };
+
+ function ObservedSet(callback) {
+ this.arr = [];
+ this.callback = callback;
+ this.isObserved = true;
+ }
+
+ // TODO(rafaelw): Consider surfacing a way to avoid observing prototype
+ // ancestors which are expected not to change (e.g. Element, Node...).
+ var objProto = Object.getPrototypeOf({});
+ var arrayProto = Object.getPrototypeOf([]);
+ ObservedSet.prototype = {
+ reset: function() {
+ this.isObserved = !this.isObserved;
+ },
+
+ observe: function(obj) {
+ if (!isObject(obj) || obj === objProto || obj === arrayProto)
+ return;
+ var i = this.arr.indexOf(obj);
+ if (i >= 0 && this.arr[i+1] === this.isObserved)
+ return;
+
+ if (i < 0) {
+ i = this.arr.length;
+ this.arr[i] = obj;
+ Object.observe(obj, this.callback);
+ }
+
+ this.arr[i+1] = this.isObserved;
+ this.observe(Object.getPrototypeOf(obj));
+ },
+
+ cleanup: function() {
+ var i = 0, j = 0;
+ var isObserved = this.isObserved;
+ while(j < this.arr.length) {
+ var obj = this.arr[j];
+ if (this.arr[j + 1] == isObserved) {
+ if (i < j) {
+ this.arr[i] = obj;
+ this.arr[i + 1] = isObserved;
+ }
+ i += 2;
+ } else {
+ Object.unobserve(obj, this.callback);
+ }
+ j += 2;
+ }
+
+ this.arr.length = i;
+ }
+ };
+
+ function PathObserver(object, path, callback, target, token, valueFn,
+ setValueFn) {
+ var path = path instanceof Path ? path : getPath(path);
+ if (!path || !path.length || !isObject(object)) {
+ this.value_ = path ? path.getValueFrom(object) : undefined;
+ this.value = valueFn ? valueFn(this.value_) : this.value_;
+ this.closed = true;
+ return;
+ }
+
+ Observer.call(this, object, callback, target, token);
+ this.valueFn = valueFn;
+ this.setValueFn = setValueFn;
+ this.path = path;
+
+ this.connect();
+ this.sync(true);
+ }
+
+ PathObserver.prototype = createObject({
+ __proto__: Observer.prototype,
+
+ connect: function() {
+ if (hasObserve)
+ this.observedSet = new ObservedSet(this.boundInternalCallback);
+ },
+
+ disconnect: function() {
+ this.value = undefined;
+ this.value_ = undefined;
+ if (this.observedSet) {
+ this.observedSet.reset();
+ this.observedSet.cleanup();
+ this.observedSet = undefined;
+ }
+ },
+
+ check: function() {
+ // Note: Extracting this to a member function for use here and below
+ // regresses dirty-checking path perf by about 25% =-(.
+ if (this.observedSet)
+ this.observedSet.reset();
+
+ this.value_ = this.path.getValueFrom(this.object, this.observedSet);
+
+ if (this.observedSet)
+ this.observedSet.cleanup();
+
+ if (areSameValue(this.value_, this.oldValue_))
+ return false;
+
+ this.value = this.valueFn ? this.valueFn(this.value_) : this.value_;
+ this.reportArgs = [this.value, this.oldValue];
+ return true;
+ },
+
+ sync: function(hard) {
+ if (hard) {
+ if (this.observedSet)
+ this.observedSet.reset();
+
+ this.value_ = this.path.getValueFrom(this.object, this.observedSet);
+ this.value = this.valueFn ? this.valueFn(this.value_) : this.value_;
+
+ if (this.observedSet)
+ this.observedSet.cleanup();
+ }
+
+ this.oldValue_ = this.value_;
+ this.oldValue = this.value;
+ },
+
+ setValue: function(newValue) {
+ if (!this.path)
+ return;
+ if (typeof this.setValueFn === 'function')
+ newValue = this.setValueFn(newValue);
+ this.path.setValueFrom(this.object, newValue);
+ }
+ });
+
+ function CompoundPathObserver(callback, target, token, valueFn) {
+ Observer.call(this, undefined, callback, target, token);
+ this.valueFn = valueFn;
+
+ this.observed = [];
+ this.values = [];
+ this.value = undefined;
+ this.oldValue = undefined;
+ this.oldValues = undefined;
+ this.changeFlags = undefined;
+ this.started = false;
+ }
+
+ CompoundPathObserver.prototype = createObject({
+ __proto__: PathObserver.prototype,
+
+ // TODO(rafaelw): Consider special-casing when |object| is a PathObserver
+ // and path 'value' to avoid explicit observation.
+ addPath: function(object, path) {
+ if (this.started)
+ throw Error('Cannot add more paths once started.');
+
+ var path = path instanceof Path ? path : getPath(path);
+ var value = path ? path.getValueFrom(object) : undefined;
+
+ this.observed.push(object, path);
+ this.values.push(value);
+ },
+
+ start: function() {
+ this.started = true;
+ this.connect();
+ this.sync(true);
+ },
+
+ getValues: function() {
+ if (this.observedSet)
+ this.observedSet.reset();
+
+ var anyChanged = false;
+ for (var i = 0; i < this.observed.length; i = i+2) {
+ var path = this.observed[i+1];
+ if (!path)
+ continue;
+ var object = this.observed[i];
+ var value = path.getValueFrom(object, this.observedSet);
+ var oldValue = this.values[i/2];
+ if (!areSameValue(value, oldValue)) {
+ if (!anyChanged && !this.valueFn) {
+ this.oldValues = this.oldValues || [];
+ this.changeFlags = this.changeFlags || [];
+ for (var j = 0; j < this.values.length; j++) {
+ this.oldValues[j] = this.values[j];
+ this.changeFlags[j] = false;
+ }
+ }
+
+ if (!this.valueFn)
+ this.changeFlags[i/2] = true;
+
+ this.values[i/2] = value;
+ anyChanged = true;
+ }
+ }
+
+ if (this.observedSet)
+ this.observedSet.cleanup();
+
+ return anyChanged;
+ },
+
+ check: function() {
+ if (!this.getValues())
+ return;
+
+ if (this.valueFn) {
+ this.value = this.valueFn(this.values);
+
+ if (areSameValue(this.value, this.oldValue))
+ return false;
+
+ this.reportArgs = [this.value, this.oldValue];
+ } else {
+ this.reportArgs = [this.values, this.oldValues, this.changeFlags,
+ this.observed];
+ }
+
+ return true;
+ },
+
+ sync: function(hard) {
+ if (hard) {
+ this.getValues();
+ if (this.valueFn)
+ this.value = this.valueFn(this.values);
+ }
+
+ if (this.valueFn)
+ this.oldValue = this.value;
+ },
+
+ close: function() {
+ if (this.observed) {
+ for (var i = 0; i < this.observed.length; i = i + 2) {
+ var object = this.observed[i];
+ if (object && typeof object.close === 'function')
+ object.close();
+ }
+ this.observed = undefined;
+ this.values = undefined;
+ }
+
+ Observer.prototype.close.call(this);
+ }
+ });
+
+ var expectedRecordTypes = {};
+ expectedRecordTypes[PROP_ADD_TYPE] = true;
+ expectedRecordTypes[PROP_UPDATE_TYPE] = true;
+ expectedRecordTypes[PROP_DELETE_TYPE] = true;
+
+ function notifyFunction(object, name) {
+ if (typeof Object.observe !== 'function')
+ return;
+
+ var notifier = Object.getNotifier(object);
+ return function(type, oldValue) {
+ var changeRecord = {
+ object: object,
+ type: type,
+ name: name
+ };
+ if (arguments.length === 2)
+ changeRecord.oldValue = oldValue;
+ notifier.notify(changeRecord);
+ }
+ }
+
+ // TODO(rafaelw): It should be possible for the Object.observe case to have
+ // every PathObserver used by defineProperty share a single Object.observe
+ // callback, and thus get() can simply call observer.deliver() and any changes
+ // to any dependent value will be observed.
+ PathObserver.defineProperty = function(object, name, descriptor) {
+ // TODO(rafaelw): Validate errors
+ var obj = descriptor.object;
+ var path = getPath(descriptor.path);
+ var notify = notifyFunction(object, name);
+
+ var observer = new PathObserver(obj, descriptor.path,
+ function(newValue, oldValue) {
+ if (notify)
+ notify(PROP_UPDATE_TYPE, oldValue);
+ }
+ );
+
+ Object.defineProperty(object, name, {
+ get: function() {
+ return path.getValueFrom(obj);
+ },
+ set: function(newValue) {
+ path.setValueFrom(obj, newValue);
+ },
+ configurable: true
+ });
+
+ return {
+ close: function() {
+ var oldValue = path.getValueFrom(obj);
+ if (notify)
+ observer.deliver();
+ observer.close();
+ Object.defineProperty(object, name, {
+ value: oldValue,
+ writable: true,
+ configurable: true
+ });
+ }
+ };
+ }
+
+ function diffObjectFromChangeRecords(object, changeRecords, oldValues) {
+ var added = {};
+ var removed = {};
+
+ for (var i = 0; i < changeRecords.length; i++) {
+ var record = changeRecords[i];
+ if (!expectedRecordTypes[record.type]) {
+ console.error('Unknown changeRecord type: ' + record.type);
+ console.error(record);
+ continue;
+ }
+
+ if (!(record.name in oldValues))
+ oldValues[record.name] = record.oldValue;
+
+ if (record.type == PROP_UPDATE_TYPE)
+ continue;
+
+ if (record.type == PROP_ADD_TYPE) {
+ if (record.name in removed)
+ delete removed[record.name];
+ else
+ added[record.name] = true;
+
+ continue;
+ }
+
+ // type = 'delete'
+ if (record.name in added) {
+ delete added[record.name];
+ delete oldValues[record.name];
+ } else {
+ removed[record.name] = true;
+ }
+ }
+
+ for (var prop in added)
+ added[prop] = object[prop];
+
+ for (var prop in removed)
+ removed[prop] = undefined;
+
+ var changed = {};
+ for (var prop in oldValues) {
+ if (prop in added || prop in removed)
+ continue;
+
+ var newValue = object[prop];
+ if (oldValues[prop] !== newValue)
+ changed[prop] = newValue;
+ }
+
+ return {
+ added: added,
+ removed: removed,
+ changed: changed
+ };
+ }
+
+ function newSplice(index, removed, addedCount) {
+ return {
+ index: index,
+ removed: removed,
+ addedCount: addedCount
+ };
+ }
+
+ var EDIT_LEAVE = 0;
+ var EDIT_UPDATE = 1;
+ var EDIT_ADD = 2;
+ var EDIT_DELETE = 3;
+
+ function ArraySplice() {}
+
+ ArraySplice.prototype = {
+
+ // Note: This function is *based* on the computation of the Levenshtein
+ // "edit" distance. The one change is that "updates" are treated as two
+ // edits - not one. With Array splices, an update is really a delete
+ // followed by an add. By retaining this, we optimize for "keeping" the
+ // maximum array items in the original array. For example:
+ //
+ // 'xxxx123' -> '123yyyy'
+ //
+ // With 1-edit updates, the shortest path would be just to update all seven
+ // characters. With 2-edit updates, we delete 4, leave 3, and add 4. This
+ // leaves the substring '123' intact.
+ calcEditDistances: function(current, currentStart, currentEnd,
+ old, oldStart, oldEnd) {
+ // "Deletion" columns
+ var rowCount = oldEnd - oldStart + 1;
+ var columnCount = currentEnd - currentStart + 1;
+ var distances = new Array(rowCount);
+
+ // "Addition" rows. Initialize null column.
+ for (var i = 0; i < rowCount; i++) {
+ distances[i] = new Array(columnCount);
+ distances[i][0] = i;
+ }
+
+ // Initialize null row
+ for (var j = 0; j < columnCount; j++)
+ distances[0][j] = j;
+
+ for (var i = 1; i < rowCount; i++) {
+ for (var j = 1; j < columnCount; j++) {
+ if (this.equals(current[currentStart + j - 1], old[oldStart + i - 1]))
+ distances[i][j] = distances[i - 1][j - 1];
+ else {
+ var north = distances[i - 1][j] + 1;
+ var west = distances[i][j - 1] + 1;
+ distances[i][j] = north < west ? north : west;
+ }
+ }
+ }
+
+ return distances;
+ },
+
+ // This starts at the final weight, and walks "backward" by finding
+ // the minimum previous weight recursively until the origin of the weight
+ // matrix.
+ spliceOperationsFromEditDistances: function(distances) {
+ var i = distances.length - 1;
+ var j = distances[0].length - 1;
+ var current = distances[i][j];
+ var edits = [];
+ while (i > 0 || j > 0) {
+ if (i == 0) {
+ edits.push(EDIT_ADD);
+ j--;
+ continue;
+ }
+ if (j == 0) {
+ edits.push(EDIT_DELETE);
+ i--;
+ continue;
+ }
+ var northWest = distances[i - 1][j - 1];
+ var west = distances[i - 1][j];
+ var north = distances[i][j - 1];
+
+ var min;
+ if (west < north)
+ min = west < northWest ? west : northWest;
+ else
+ min = north < northWest ? north : northWest;
+
+ if (min == northWest) {
+ if (northWest == current) {
+ edits.push(EDIT_LEAVE);
+ } else {
+ edits.push(EDIT_UPDATE);
+ current = northWest;
+ }
+ i--;
+ j--;
+ } else if (min == west) {
+ edits.push(EDIT_DELETE);
+ i--;
+ current = west;
+ } else {
+ edits.push(EDIT_ADD);
+ j--;
+ current = north;
+ }
+ }
+
+ edits.reverse();
+ return edits;
+ },
+
+ /**
+ * Splice Projection functions:
+ *
+ * A splice map is a representation of how a previous array of items
+ * was transformed into a new array of items. Conceptually it is a list of
+ * tuples of
+ *
+ * <index, removed, addedCount>
+ *
+ * which are kept in ascending index order of. The tuple represents that at
+ * the |index|, |removed| sequence of items were removed, and counting forward
+ * from |index|, |addedCount| items were added.
+ */
+
+ /**
+ * Lacking individual splice mutation information, the minimal set of
+ * splices can be synthesized given the previous state and final state of an
+ * array. The basic approach is to calculate the edit distance matrix and
+ * choose the shortest path through it.
+ *
+ * Complexity: O(l * p)
+ * l: The length of the current array
+ * p: The length of the old array
+ */
+ calcSplices: function(current, currentStart, currentEnd,
+ old, oldStart, oldEnd) {
+ var prefixCount = 0;
+ var suffixCount = 0;
+
+ var minLength = Math.min(currentEnd - currentStart, oldEnd - oldStart);
+ if (currentStart == 0 && oldStart == 0)
+ prefixCount = this.sharedPrefix(current, old, minLength);
+
+ if (currentEnd == current.length && oldEnd == old.length)
+ suffixCount = this.sharedSuffix(current, old, minLength - prefixCount);
+
+ currentStart += prefixCount;
+ oldStart += prefixCount;
+ currentEnd -= suffixCount;
+ oldEnd -= suffixCount;
+
+ if (currentEnd - currentStart == 0 && oldEnd - oldStart == 0)
+ return [];
+
+ if (currentStart == currentEnd) {
+ var splice = newSplice(currentStart, [], 0);
+ while (oldStart < oldEnd)
+ splice.removed.push(old[oldStart++]);
+
+ return [ splice ];
+ } else if (oldStart == oldEnd)
+ return [ newSplice(currentStart, [], currentEnd - currentStart) ];
+
+ var ops = this.spliceOperationsFromEditDistances(
+ this.calcEditDistances(current, currentStart, currentEnd,
+ old, oldStart, oldEnd));
+
+ var splice = undefined;
+ var splices = [];
+ var index = currentStart;
+ var oldIndex = oldStart;
+ for (var i = 0; i < ops.length; i++) {
+ switch(ops[i]) {
+ case EDIT_LEAVE:
+ if (splice) {
+ splices.push(splice);
+ splice = undefined;
+ }
+
+ index++;
+ oldIndex++;
+ break;
+ case EDIT_UPDATE:
+ if (!splice)
+ splice = newSplice(index, [], 0);
+
+ splice.addedCount++;
+ index++;
+
+ splice.removed.push(old[oldIndex]);
+ oldIndex++;
+ break;
+ case EDIT_ADD:
+ if (!splice)
+ splice = newSplice(index, [], 0);
+
+ splice.addedCount++;
+ index++;
+ break;
+ case EDIT_DELETE:
+ if (!splice)
+ splice = newSplice(index, [], 0);
+
+ splice.removed.push(old[oldIndex]);
+ oldIndex++;
+ break;
+ }
+ }
+
+ if (splice) {
+ splices.push(splice);
+ }
+ return splices;
+ },
+
+ sharedPrefix: function(current, old, searchLength) {
+ for (var i = 0; i < searchLength; i++)
+ if (!this.equals(current[i], old[i]))
+ return i;
+ return searchLength;
+ },
+
+ sharedSuffix: function(current, old, searchLength) {
+ var index1 = current.length;
+ var index2 = old.length;
+ var count = 0;
+ while (count < searchLength && this.equals(current[--index1], old[--index2]))
+ count++;
+
+ return count;
+ },
+
+ calculateSplices: function(current, previous) {
+ return this.calcSplices(current, 0, current.length, previous, 0,
+ previous.length);
+ },
+
+ equals: function(currentValue, previousValue) {
+ return currentValue === previousValue;
+ }
+ };
+
+ var arraySplice = new ArraySplice();
+
+ function calcSplices(current, currentStart, currentEnd,
+ old, oldStart, oldEnd) {
+ return arraySplice.calcSplices(current, currentStart, currentEnd,
+ old, oldStart, oldEnd);
+ }
+
+ function intersect(start1, end1, start2, end2) {
+ // Disjoint
+ if (end1 < start2 || end2 < start1)
+ return -1;
+
+ // Adjacent
+ if (end1 == start2 || end2 == start1)
+ return 0;
+
+ // Non-zero intersect, span1 first
+ if (start1 < start2) {
+ if (end1 < end2)
+ return end1 - start2; // Overlap
+ else
+ return end2 - start2; // Contained
+ } else {
+ // Non-zero intersect, span2 first
+ if (end2 < end1)
+ return end2 - start1; // Overlap
+ else
+ return end1 - start1; // Contained
+ }
+ }
+
+ function mergeSplice(splices, index, removed, addedCount) {
+
+ var splice = newSplice(index, removed, addedCount);
+
+ var inserted = false;
+ var insertionOffset = 0;
+
+ for (var i = 0; i < splices.length; i++) {
+ var current = splices[i];
+ current.index += insertionOffset;
+
+ if (inserted)
+ continue;
+
+ var intersectCount = intersect(splice.index,
+ splice.index + splice.removed.length,
+ current.index,
+ current.index + current.addedCount);
+
+ if (intersectCount >= 0) {
+ // Merge the two splices
+
+ splices.splice(i, 1);
+ i--;
+
+ insertionOffset -= current.addedCount - current.removed.length;
+
+ splice.addedCount += current.addedCount - intersectCount;
+ var deleteCount = splice.removed.length +
+ current.removed.length - intersectCount;
+
+ if (!splice.addedCount && !deleteCount) {
+ // merged splice is a noop. discard.
+ inserted = true;
+ } else {
+ var removed = current.removed;
+
+ if (splice.index < current.index) {
+ // some prefix of splice.removed is prepended to current.removed.
+ var prepend = splice.removed.slice(0, current.index - splice.index);
+ Array.prototype.push.apply(prepend, removed);
+ removed = prepend;
+ }
+
+ if (splice.index + splice.removed.length > current.index + current.addedCount) {
+ // some suffix of splice.removed is appended to current.removed.
+ var append = splice.removed.slice(current.index + current.addedCount - splice.index);
+ Array.prototype.push.apply(removed, append);
+ }
+
+ splice.removed = removed;
+ if (current.index < splice.index) {
+ splice.index = current.index;
+ }
+ }
+ } else if (splice.index < current.index) {
+ // Insert splice here.
+
+ inserted = true;
+
+ splices.splice(i, 0, splice);
+ i++;
+
+ var offset = splice.addedCount - splice.removed.length
+ current.index += offset;
+ insertionOffset += offset;
+ }
+ }
+
+ if (!inserted)
+ splices.push(splice);
+ }
+
+ function createInitialSplices(array, changeRecords) {
+ var splices = [];
+
+ for (var i = 0; i < changeRecords.length; i++) {
+ var record = changeRecords[i];
+ switch(record.type) {
+ case ARRAY_SPLICE_TYPE:
+ mergeSplice(splices, record.index, record.removed.slice(), record.addedCount);
+ break;
+ case PROP_ADD_TYPE:
+ case PROP_UPDATE_TYPE:
+ case PROP_DELETE_TYPE:
+ if (!isIndex(record.name))
+ continue;
+ var index = toNumber(record.name);
+ if (index < 0)
+ continue;
+ mergeSplice(splices, index, [record.oldValue], 1);
+ break;
+ default:
+ console.error('Unexpected record type: ' + JSON.stringify(record));
+ break;
+ }
+ }
+
+ return splices;
+ }
+
+ function projectArraySplices(array, changeRecords) {
+ var splices = [];
+
+ createInitialSplices(array, changeRecords).forEach(function(splice) {
+ if (splice.addedCount == 1 && splice.removed.length == 1) {
+ if (splice.removed[0] !== array[splice.index])
+ splices.push(splice);
+
+ return
+ };
+
+ splices = splices.concat(calcSplices(array, splice.index, splice.index + splice.addedCount,
+ splice.removed, 0, splice.removed.length));
+ });
+
+ return splices;
+ }
+
+ global.Observer = Observer;
+ global.Observer.hasObjectObserve = hasObserve;
+ global.ArrayObserver = ArrayObserver;
+ global.ArrayObserver.calculateSplices = function(current, previous) {
+ return arraySplice.calculateSplices(current, previous);
+ };
+
+ global.ArraySplice = ArraySplice;
+ global.ObjectObserver = ObjectObserver;
+ global.PathObserver = PathObserver;
+ global.CompoundPathObserver = CompoundPathObserver;
+ global.Path = Path;
+
+ // TODO(rafaelw): Only needed for testing until new change record names
+ // make it to release.
+ global.Observer.changeRecordTypes = {
+ add: PROP_ADD_TYPE,
+ update: PROP_UPDATE_TYPE,
+ reconfigure: PROP_RECONFIGURE_TYPE,
+ 'delete': PROP_DELETE_TYPE,
+ splice: ARRAY_SPLICE_TYPE
+ };
+})(typeof global !== 'undefined' && global ? global : this);
+
+/*
+ * Copyright 2012 The Polymer Authors. All rights reserved.
+ * Use of this source code is governed by a BSD-style
+ * license that can be found in the LICENSE file.
+ */
+
+if (typeof WeakMap === 'undefined') {
+ (function() {
+ var defineProperty = Object.defineProperty;
+ var counter = Date.now() % 1e9;
+
+ var WeakMap = function() {
+ this.name = '__st' + (Math.random() * 1e9 >>> 0) + (counter++ + '__');
+ };
+
+ WeakMap.prototype = {
+ set: function(key, value) {
+ var entry = key[this.name];
+ if (entry && entry[0] === key)
+ entry[1] = value;
+ else
+ defineProperty(key, this.name, {value: [key, value], writable: true});
+ },
+ get: function(key) {
+ var entry;
+ return (entry = key[this.name]) && entry[0] === key ?
+ entry[1] : undefined;
+ },
+ delete: function(key) {
+ this.set(key, undefined);
+ }
+ };
+
+ window.WeakMap = WeakMap;
+ })();
+}
+
+// Copyright 2012 The Polymer Authors. All rights reserved.
+// Use of this source code is goverened by a BSD-style
+// license that can be found in the LICENSE file.
+
+var ShadowDOMPolyfill = {};
+
+(function(scope) {
+ 'use strict';
+
+ var constructorTable = new WeakMap();
+ var nativePrototypeTable = new WeakMap();
+ var wrappers = Object.create(null);
+
+ // Don't test for eval if document has CSP securityPolicy object and we can
+ // see that eval is not supported. This avoids an error message in console
+ // even when the exception is caught
+ var hasEval = !('securityPolicy' in document) ||
+ document.securityPolicy.allowsEval;
+ if (hasEval) {
+ try {
+ var f = new Function('', 'return true;');
+ hasEval = f();
+ } catch (ex) {
+ hasEval = false;
+ }
+ }
+
+ function assert(b) {
+ if (!b)
+ throw new Error('Assertion failed');
+ };
+
+ function mixin(to, from) {
+ Object.getOwnPropertyNames(from).forEach(function(name) {
+ Object.defineProperty(to, name,
+ Object.getOwnPropertyDescriptor(from, name));
+ });
+ return to;
+ };
+
+ function mixinStatics(to, from) {
+ Object.getOwnPropertyNames(from).forEach(function(name) {
+ switch (name) {
+ case 'arguments':
+ case 'caller':
+ case 'length':
+ case 'name':
+ case 'prototype':
+ case 'toString':
+ return;
+ }
+ Object.defineProperty(to, name,
+ Object.getOwnPropertyDescriptor(from, name));
+ });
+ return to;
+ };
+
+ function oneOf(object, propertyNames) {
+ for (var i = 0; i < propertyNames.length; i++) {
+ if (propertyNames[i] in object)
+ return propertyNames[i];
+ }
+ }
+
+ // Mozilla's old DOM bindings are bretty busted:
+ // https://bugzilla.mozilla.org/show_bug.cgi?id=855844
+ // Make sure they are create before we start modifying things.
+ Object.getOwnPropertyNames(window);
+
+ function getWrapperConstructor(node) {
+ var nativePrototype = node.__proto__ || Object.getPrototypeOf(node);
+ var wrapperConstructor = constructorTable.get(nativePrototype);
+ if (wrapperConstructor)
+ return wrapperConstructor;
+
+ var parentWrapperConstructor = getWrapperConstructor(nativePrototype);
+
+ var GeneratedWrapper = createWrapperConstructor(parentWrapperConstructor);
+ registerInternal(nativePrototype, GeneratedWrapper, node);
+
+ return GeneratedWrapper;
+ }
+
+ function addForwardingProperties(nativePrototype, wrapperPrototype) {
+ installProperty(nativePrototype, wrapperPrototype, true);
+ }
+
+ function registerInstanceProperties(wrapperPrototype, instanceObject) {
+ installProperty(instanceObject, wrapperPrototype, false);
+ }
+
+ var isFirefox = /Firefox/.test(navigator.userAgent);
+
+ // This is used as a fallback when getting the descriptor fails in
+ // installProperty.
+ var dummyDescriptor = {
+ get: function() {},
+ set: function(v) {},
+ configurable: true,
+ enumerable: true
+ };
+
+ function isEventHandlerName(name) {
+ return /^on[a-z]+$/.test(name);
+ }
+
+ function isIdentifierName(name) {
+ return /^\w[a-zA-Z_0-9]*$/.test(name);
+ }
+
+ function getGetter(name) {
+ return hasEval && isIdentifierName(name) ?
+ new Function('return this.impl.' + name) :
+ function() { return this.impl[name]; };
+ }
+
+ function getSetter(name) {
+ return hasEval && isIdentifierName(name) ?
+ new Function('v', 'this.impl.' + name + ' = v') :
+ function(v) { this.impl[name] = v; };
+ }
+
+ function getMethod(name) {
+ return hasEval && isIdentifierName(name) ?
+ new Function('return this.impl.' + name +
+ '.apply(this.impl, arguments)') :
+ function() { return this.impl[name].apply(this.impl, arguments); };
+ }
+
+ function installProperty(source, target, allowMethod) {
+ Object.getOwnPropertyNames(source).forEach(function(name) {
+ if (name in target)
+ return;
+
+ if (isFirefox) {
+ // Tickle Firefox's old bindings.
+ source.__lookupGetter__(name);
+ }
+ var descriptor;
+ try {
+ descriptor = Object.getOwnPropertyDescriptor(source, name);
+ } catch (ex) {
+ // JSC and V8 both use data properties instead of accessors which can
+ // cause getting the property desciptor to throw an exception.
+ // https://bugs.webkit.org/show_bug.cgi?id=49739
+ descriptor = dummyDescriptor;
+ }
+ var getter, setter;
+ if (allowMethod && typeof descriptor.value === 'function') {
+ target[name] = getMethod(name);
+ return;
+ }
+
+ var isEvent = isEventHandlerName(name);
+ if (isEvent)
+ getter = scope.getEventHandlerGetter(name);
+ else
+ getter = getGetter(name);
+
+ if (descriptor.writable || descriptor.set) {
+ if (isEvent)
+ setter = scope.getEventHandlerSetter(name);
+ else
+ setter = getSetter(name);
+ }
+
+ Object.defineProperty(target, name, {
+ get: getter,
+ set: setter,
+ configurable: descriptor.configurable,
+ enumerable: descriptor.enumerable
+ });
+ });
+ }
+
+ /**
+ * @param {Function} nativeConstructor
+ * @param {Function} wrapperConstructor
+ * @param {Object=} opt_instance If present, this is used to extract
+ * properties from an instance object.
+ */
+ function register(nativeConstructor, wrapperConstructor, opt_instance) {
+ var nativePrototype = nativeConstructor.prototype;
+ registerInternal(nativePrototype, wrapperConstructor, opt_instance);
+ mixinStatics(wrapperConstructor, nativeConstructor);
+ }
+
+ function registerInternal(nativePrototype, wrapperConstructor, opt_instance) {
+ var wrapperPrototype = wrapperConstructor.prototype;
+ assert(constructorTable.get(nativePrototype) === undefined);
+
+ constructorTable.set(nativePrototype, wrapperConstructor);
+ nativePrototypeTable.set(wrapperPrototype, nativePrototype);
+
+ addForwardingProperties(nativePrototype, wrapperPrototype);
+ if (opt_instance)
+ registerInstanceProperties(wrapperPrototype, opt_instance);
+ }
+
+ function isWrapperFor(wrapperConstructor, nativeConstructor) {
+ return constructorTable.get(nativeConstructor.prototype) ===
+ wrapperConstructor;
+ }
+
+ /**
+ * Creates a generic wrapper constructor based on |object| and its
+ * constructor.
+ * Sometimes the constructor does not have an associated instance
+ * (CharacterData for example). In that case you can pass the constructor that
+ * you want to map the object to using |opt_nativeConstructor|.
+ * @param {Node} object
+ * @param {Function=} opt_nativeConstructor
+ * @return {Function} The generated constructor.
+ */
+ function registerObject(object) {
+ var nativePrototype = Object.getPrototypeOf(object);
+
+ var superWrapperConstructor = getWrapperConstructor(nativePrototype);
+ var GeneratedWrapper = createWrapperConstructor(superWrapperConstructor);
+ registerInternal(nativePrototype, GeneratedWrapper, object);
+
+ return GeneratedWrapper;
+ }
+
+ function createWrapperConstructor(superWrapperConstructor) {
+ function GeneratedWrapper(node) {
+ superWrapperConstructor.call(this, node);
+ }
+ GeneratedWrapper.prototype =
+ Object.create(superWrapperConstructor.prototype);
+ GeneratedWrapper.prototype.constructor = GeneratedWrapper;
+
+ return GeneratedWrapper;
+ }
+
+ var OriginalDOMImplementation = window.DOMImplementation;
+ var OriginalEvent = window.Event;
+ var OriginalNode = window.Node;
+ var OriginalWindow = window.Window;
+ var OriginalRange = window.Range;
+ var OriginalCanvasRenderingContext2D = window.CanvasRenderingContext2D;
+ var OriginalWebGLRenderingContext = window.WebGLRenderingContext;
+
+ function isWrapper(object) {
+ return object instanceof wrappers.EventTarget ||
+ object instanceof wrappers.Event ||
+ object instanceof wrappers.Range ||
+ object instanceof wrappers.DOMImplementation ||
+ object instanceof wrappers.CanvasRenderingContext2D ||
+ wrappers.WebGLRenderingContext &&
+ object instanceof wrappers.WebGLRenderingContext;
+ }
+
+ function isNative(object) {
+ return object instanceof OriginalNode ||
+ object instanceof OriginalEvent ||
+ object instanceof OriginalWindow ||
+ object instanceof OriginalRange ||
+ object instanceof OriginalDOMImplementation ||
+ object instanceof OriginalCanvasRenderingContext2D ||
+ OriginalWebGLRenderingContext &&
+ object instanceof OriginalWebGLRenderingContext;
+ }
+
+ /**
+ * Wraps a node in a WrapperNode. If there already exists a wrapper for the
+ * |node| that wrapper is returned instead.
+ * @param {Node} node
+ * @return {WrapperNode}
+ */
+ function wrap(impl) {
+ if (impl === null)
+ return null;
+
+ assert(isNative(impl));
+ return impl.polymerWrapper_ ||
+ (impl.polymerWrapper_ = new (getWrapperConstructor(impl))(impl));
+ }
+
+ /**
+ * Unwraps a wrapper and returns the node it is wrapping.
+ * @param {WrapperNode} wrapper
+ * @return {Node}
+ */
+ function unwrap(wrapper) {
+ if (wrapper === null)
+ return null;
+ assert(isWrapper(wrapper));
+ return wrapper.impl;
+ }
+
+ /**
+ * Unwraps object if it is a wrapper.
+ * @param {Object} object
+ * @return {Object} The native implementation object.
+ */
+ function unwrapIfNeeded(object) {
+ return object && isWrapper(object) ? unwrap(object) : object;
+ }
+
+ /**
+ * Wraps object if it is not a wrapper.
+ * @param {Object} object
+ * @return {Object} The wrapper for object.
+ */
+ function wrapIfNeeded(object) {
+ return object && !isWrapper(object) ? wrap(object) : object;
+ }
+
+ /**
+ * Overrides the current wrapper (if any) for node.
+ * @param {Node} node
+ * @param {WrapperNode=} wrapper If left out the wrapper will be created as
+ * needed next time someone wraps the node.
+ */
+ function rewrap(node, wrapper) {
+ if (wrapper === null)
+ return;
+ assert(isNative(node));
+ assert(wrapper === undefined || isWrapper(wrapper));
+ node.polymerWrapper_ = wrapper;
+ }
+
+ function defineGetter(constructor, name, getter) {
+ Object.defineProperty(constructor.prototype, name, {
+ get: getter,
+ configurable: true,
+ enumerable: true
+ });
+ }
+
+ function defineWrapGetter(constructor, name) {
+ defineGetter(constructor, name, function() {
+ return wrap(this.impl[name]);
+ });
+ }
+
+ /**
+ * Forwards existing methods on the native object to the wrapper methods.
+ * This does not wrap any of the arguments or the return value since the
+ * wrapper implementation already takes care of that.
+ * @param {Array.<Function>} constructors
+ * @parem {Array.<string>} names
+ */
+ function forwardMethodsToWrapper(constructors, names) {
+ constructors.forEach(function(constructor) {
+ names.forEach(function(name) {
+ constructor.prototype[name] = function() {
+ var w = wrapIfNeeded(this);
+ return w[name].apply(w, arguments);
+ };
+ });
+ });
+ }
+
+ scope.assert = assert;
+ scope.constructorTable = constructorTable;
+ scope.defineGetter = defineGetter;
+ scope.defineWrapGetter = defineWrapGetter;
+ scope.forwardMethodsToWrapper = forwardMethodsToWrapper;
+ scope.isWrapperFor = isWrapperFor;
+ scope.mixin = mixin;
+ scope.nativePrototypeTable = nativePrototypeTable;
+ scope.oneOf = oneOf;
+ scope.registerObject = registerObject;
+ scope.registerWrapper = register;
+ scope.rewrap = rewrap;
+ scope.unwrap = unwrap;
+ scope.unwrapIfNeeded = unwrapIfNeeded;
+ scope.wrap = wrap;
+ scope.wrapIfNeeded = wrapIfNeeded;
+ scope.wrappers = wrappers;
+
+})(this.ShadowDOMPolyfill);
+
+// Copyright 2013 The Polymer Authors. All rights reserved.
+// Use of this source code is goverened by a BSD-style
+// license that can be found in the LICENSE file.
+
+(function(scope) {
+ 'use strict';
+
+ var forwardMethodsToWrapper = scope.forwardMethodsToWrapper;
+ var mixin = scope.mixin;
+ var registerWrapper = scope.registerWrapper;
+ var unwrap = scope.unwrap;
+ var wrap = scope.wrap;
+ var wrappers = scope.wrappers;
+
+ var wrappedFuns = new WeakMap();
+ var listenersTable = new WeakMap();
+ var handledEventsTable = new WeakMap();
+ var targetTable = new WeakMap();
+ var currentTargetTable = new WeakMap();
+ var relatedTargetTable = new WeakMap();
+ var eventPhaseTable = new WeakMap();
+ var stopPropagationTable = new WeakMap();
+ var stopImmediatePropagationTable = new WeakMap();
+ var eventHandlersTable = new WeakMap();
+ var eventPathTable = new WeakMap();
+
+ function isShadowRoot(node) {
+ return node instanceof wrappers.ShadowRoot;
+ }
+
+ function isInsertionPoint(node) {
+ var localName = node.localName;
+ return localName === 'content' || localName === 'shadow';
+ }
+
+ function isShadowHost(node) {
+ return !!node.shadowRoot;
+ }
+
+ function getEventParent(node) {
+ var dv;
+ return node.parentNode || (dv = node.defaultView) && wrap(dv) || null;
+ }
+
+ // https://dvcs.w3.org/hg/webcomponents/raw-file/tip/spec/shadow/index.html#dfn-adjusted-parent
+ function calculateParents(node, context, ancestors) {
+ if (ancestors.length)
+ return ancestors.shift();
+
+ // 1.
+ if (isShadowRoot(node))
+ return getInsertionParent(node) || node.host;
+
+ // 2.
+ var eventParents = scope.eventParentsTable.get(node);
+ if (eventParents) {
+ // Copy over the remaining event parents for next iteration.
+ for (var i = 1; i < eventParents.length; i++) {
+ ancestors[i - 1] = eventParents[i];
+ }
+ return eventParents[0];
+ }
+
+ // 3.
+ if (context && isInsertionPoint(node)) {
+ var parentNode = node.parentNode;
+ if (parentNode && isShadowHost(parentNode)) {
+ var trees = scope.getShadowTrees(parentNode);
+ var p = getInsertionParent(context);
+ for (var i = 0; i < trees.length; i++) {
+ if (trees[i].contains(p))
+ return p;
+ }
+ }
+ }
+
+ return getEventParent(node);
+ }
+
+ // https://dvcs.w3.org/hg/webcomponents/raw-file/tip/spec/shadow/index.html#event-retargeting
+ function retarget(node) {
+ var stack = []; // 1.
+ var ancestor = node; // 2.
+ var targets = [];
+ var ancestors = [];
+ while (ancestor) { // 3.
+ var context = null; // 3.2.
+ // TODO(arv): Change order of these. If the stack is empty we always end
+ // up pushing ancestor, no matter what.
+ if (isInsertionPoint(ancestor)) { // 3.1.
+ context = topMostNotInsertionPoint(stack); // 3.1.1.
+ var top = stack[stack.length - 1] || ancestor; // 3.1.2.
+ stack.push(top);
+ } else if (!stack.length) {
+ stack.push(ancestor); // 3.3.
+ }
+ var target = stack[stack.length - 1]; // 3.4.
+ targets.push({target: target, currentTarget: ancestor}); // 3.5.
+ if (isShadowRoot(ancestor)) // 3.6.
+ stack.pop(); // 3.6.1.
+
+ ancestor = calculateParents(ancestor, context, ancestors); // 3.7.
+ }
+ return targets;
+ }
+
+ function topMostNotInsertionPoint(stack) {
+ for (var i = stack.length - 1; i >= 0; i--) {
+ if (!isInsertionPoint(stack[i]))
+ return stack[i];
+ }
+ return null;
+ }
+
+ // https://dvcs.w3.org/hg/webcomponents/raw-file/tip/spec/shadow/index.html#dfn-adjusted-related-target
+ function adjustRelatedTarget(target, related) {
+ var ancestors = [];
+ while (target) { // 3.
+ var stack = []; // 3.1.
+ var ancestor = related; // 3.2.
+ var last = undefined; // 3.3. Needs to be reset every iteration.
+ while (ancestor) {
+ var context = null;
+ if (!stack.length) {
+ stack.push(ancestor);
+ } else {
+ if (isInsertionPoint(ancestor)) { // 3.4.3.
+ context = topMostNotInsertionPoint(stack);
+ // isDistributed is more general than checking whether last is
+ // assigned into ancestor.
+ if (isDistributed(last)) { // 3.4.3.2.
+ var head = stack[stack.length - 1];
+ stack.push(head);
+ }
+ }
+ }
+
+ if (inSameTree(ancestor, target)) // 3.4.4.
+ return stack[stack.length - 1];
+
+ if (isShadowRoot(ancestor)) // 3.4.5.
+ stack.pop();
+
+ last = ancestor; // 3.4.6.
+ ancestor = calculateParents(ancestor, context, ancestors); // 3.4.7.
+ }
+ if (isShadowRoot(target)) // 3.5.
+ target = target.host;
+ else
+ target = target.parentNode; // 3.6.
+ }
+ }
+
+ function getInsertionParent(node) {
+ return scope.insertionParentTable.get(node);
+ }
+
+ function isDistributed(node) {
+ return getInsertionParent(node);
+ }
+
+ function rootOfNode(node) {
+ var p;
+ while (p = node.parentNode) {
+ node = p;
+ }
+ return node;
+ }
+
+ function inSameTree(a, b) {
+ return rootOfNode(a) === rootOfNode(b);
+ }
+
+ function enclosedBy(a, b) {
+ if (a === b)
+ return true;
+ if (a instanceof wrappers.ShadowRoot)
+ return enclosedBy(rootOfNode(a.host), b);
+ return false;
+ }
+
+ var mutationEventsAreSilenced = 0;
+
+ function muteMutationEvents() {
+ mutationEventsAreSilenced++;
+ }
+
+ function unmuteMutationEvents() {
+ mutationEventsAreSilenced--;
+ }
+
+ var OriginalMutationEvent = window.MutationEvent;
+
+ function dispatchOriginalEvent(originalEvent) {
+ // Make sure this event is only dispatched once.
+ if (handledEventsTable.get(originalEvent))
+ return;
+ handledEventsTable.set(originalEvent, true);
+
+ // Don't do rendering if this is a mutation event since rendering might
+ // mutate the DOM which would fire more events and we would most likely
+ // just iloop.
+ if (originalEvent instanceof OriginalMutationEvent) {
+ if (mutationEventsAreSilenced)
+ return;
+ } else {
+ scope.renderAllPending();
+ }
+
+ var target = wrap(originalEvent.target);
+ var event = wrap(originalEvent);
+ return dispatchEvent(event, target);
+ }
+
+ function dispatchEvent(event, originalWrapperTarget) {
+ var eventPath = retarget(originalWrapperTarget);
+
+ // For window load events the load event is dispatched at the window but
+ // the target is set to the document.
+ //
+ // http://www.whatwg.org/specs/web-apps/current-work/multipage/the-end.html#the-end
+ //
+ // TODO(arv): Find a less hacky way to do this.
+ if (event.type === 'load' &&
+ eventPath.length === 2 &&
+ eventPath[0].target instanceof wrappers.Document) {
+ eventPath.shift();
+ }
+
+ eventPathTable.set(event, eventPath);
+
+ if (dispatchCapturing(event, eventPath)) {
+ if (dispatchAtTarget(event, eventPath)) {
+ dispatchBubbling(event, eventPath);
+ }
+ }
+
+ eventPhaseTable.set(event, Event.NONE);
+ currentTargetTable.set(event, null);
+
+ return event.defaultPrevented;
+ }
+
+ function dispatchCapturing(event, eventPath) {
+ var phase;
+
+ for (var i = eventPath.length - 1; i > 0; i--) {
+ var target = eventPath[i].target;
+ var currentTarget = eventPath[i].currentTarget;
+ if (target === currentTarget)
+ continue;
+
+ phase = Event.CAPTURING_PHASE;
+ if (!invoke(eventPath[i], event, phase))
+ return false;
+ }
+
+ return true;
+ }
+
+ function dispatchAtTarget(event, eventPath) {
+ var phase = Event.AT_TARGET;
+ return invoke(eventPath[0], event, phase);
+ }
+
+ function dispatchBubbling(event, eventPath) {
+ var bubbles = event.bubbles;
+ var phase;
+
+ for (var i = 1; i < eventPath.length; i++) {
+ var target = eventPath[i].target;
+ var currentTarget = eventPath[i].currentTarget;
+ if (target === currentTarget)
+ phase = Event.AT_TARGET;
+ else if (bubbles && !stopImmediatePropagationTable.get(event))
+ phase = Event.BUBBLING_PHASE;
+ else
+ continue;
+
+ if (!invoke(eventPath[i], event, phase))
+ return;
+ }
+ }
+
+ function invoke(tuple, event, phase) {
+ var target = tuple.target;
+ var currentTarget = tuple.currentTarget;
+
+ var listeners = listenersTable.get(currentTarget);
+ if (!listeners)
+ return true;
+
+ if ('relatedTarget' in event) {
+ var originalEvent = unwrap(event);
+ // X-Tag sets relatedTarget on a CustomEvent. If they do that there is no
+ // way to have relatedTarget return the adjusted target but worse is that
+ // the originalEvent might not have a relatedTarget so we hit an assert
+ // when we try to wrap it.
+ if (originalEvent.relatedTarget) {
+ var relatedTarget = wrap(originalEvent.relatedTarget);
+
+ var adjusted = adjustRelatedTarget(currentTarget, relatedTarget);
+ if (adjusted === target)
+ return true;
+
+ relatedTargetTable.set(event, adjusted);
+ }
+ }
+
+ eventPhaseTable.set(event, phase);
+ var type = event.type;
+
+ var anyRemoved = false;
+ targetTable.set(event, target);
+ currentTargetTable.set(event, currentTarget);
+
+ for (var i = 0; i < listeners.length; i++) {
+ var listener = listeners[i];
+ if (listener.removed) {
+ anyRemoved = true;
+ continue;
+ }
+
+ if (listener.type !== type ||
+ !listener.capture && phase === Event.CAPTURING_PHASE ||
+ listener.capture && phase === Event.BUBBLING_PHASE) {
+ continue;
+ }
+
+ try {
+ if (typeof listener.handler === 'function')
+ listener.handler.call(currentTarget, event);
+ else
+ listener.handler.handleEvent(event);
+
+ if (stopImmediatePropagationTable.get(event))
+ return false;
+
+ } catch (ex) {
+ if (window.onerror)
+ window.onerror(ex.message);
+ else
+ console.error(ex, ex.stack);
+ }
+ }
+
+ if (anyRemoved) {
+ var copy = listeners.slice();
+ listeners.length = 0;
+ for (var i = 0; i < copy.length; i++) {
+ if (!copy[i].removed)
+ listeners.push(copy[i]);
+ }
+ }
+
+ return !stopPropagationTable.get(event);
+ }
+
+ function Listener(type, handler, capture) {
+ this.type = type;
+ this.handler = handler;
+ this.capture = Boolean(capture);
+ }
+ Listener.prototype = {
+ equals: function(that) {
+ return this.handler === that.handler && this.type === that.type &&
+ this.capture === that.capture;
+ },
+ get removed() {
+ return this.handler === null;
+ },
+ remove: function() {
+ this.handler = null;
+ }
+ };
+
+ var OriginalEvent = window.Event;
+
+ /**
+ * Creates a new Event wrapper or wraps an existin native Event object.
+ * @param {string|Event} type
+ * @param {Object=} options
+ * @constructor
+ */
+ function Event(type, options) {
+ if (type instanceof OriginalEvent)
+ this.impl = type;
+ else
+ return wrap(constructEvent(OriginalEvent, 'Event', type, options));
+ }
+ Event.prototype = {
+ get target() {
+ return targetTable.get(this);
+ },
+ get currentTarget() {
+ return currentTargetTable.get(this);
+ },
+ get eventPhase() {
+ return eventPhaseTable.get(this);
+ },
+ get path() {
+ var nodeList = new wrappers.NodeList();
+ var eventPath = eventPathTable.get(this);
+ if (eventPath) {
+ var index = 0;
+ var lastIndex = eventPath.length - 1;
+ var baseRoot = rootOfNode(currentTargetTable.get(this));
+
+ for (var i = 0; i <= lastIndex; i++) {
+ var currentTarget = eventPath[i].currentTarget;
+ var currentRoot = rootOfNode(currentTarget);
+ if (enclosedBy(baseRoot, currentRoot) &&
+ // Make sure we do not add Window to the path.
+ (i !== lastIndex || currentTarget instanceof wrappers.Node)) {
+ nodeList[index++] = currentTarget;
+ }
+ }
+ nodeList.length = index;
+ }
+ return nodeList;
+ },
+ stopPropagation: function() {
+ stopPropagationTable.set(this, true);
+ },
+ stopImmediatePropagation: function() {
+ stopPropagationTable.set(this, true);
+ stopImmediatePropagationTable.set(this, true);
+ }
+ };
+ registerWrapper(OriginalEvent, Event, document.createEvent('Event'));
+
+ function unwrapOptions(options) {
+ if (!options || !options.relatedTarget)
+ return options;
+ return Object.create(options, {
+ relatedTarget: {value: unwrap(options.relatedTarget)}
+ });
+ }
+
+ function registerGenericEvent(name, SuperEvent, prototype) {
+ var OriginalEvent = window[name];
+ var GenericEvent = function(type, options) {
+ if (type instanceof OriginalEvent)
+ this.impl = type;
+ else
+ return wrap(constructEvent(OriginalEvent, name, type, options));
+ };
+ GenericEvent.prototype = Object.create(SuperEvent.prototype);
+ if (prototype)
+ mixin(GenericEvent.prototype, prototype);
+ if (OriginalEvent) {
+ // IE does not support event constructors but FocusEvent can only be
+ // created using new FocusEvent in Firefox.
+ // https://bugzilla.mozilla.org/show_bug.cgi?id=882165
+ if (OriginalEvent.prototype['init' + name]) {
+ registerWrapper(OriginalEvent, GenericEvent,
+ document.createEvent(name));
+ } else {
+ registerWrapper(OriginalEvent, GenericEvent, new OriginalEvent('temp'));
+ }
+ }
+ return GenericEvent;
+ }
+
+ var UIEvent = registerGenericEvent('UIEvent', Event);
+ var CustomEvent = registerGenericEvent('CustomEvent', Event);
+
+ var relatedTargetProto = {
+ get relatedTarget() {
+ return relatedTargetTable.get(this) || wrap(unwrap(this).relatedTarget);
+ }
+ };
+
+ function getInitFunction(name, relatedTargetIndex) {
+ return function() {
+ arguments[relatedTargetIndex] = unwrap(arguments[relatedTargetIndex]);
+ var impl = unwrap(this);
+ impl[name].apply(impl, arguments);
+ };
+ }
+
+ var mouseEventProto = mixin({
+ initMouseEvent: getInitFunction('initMouseEvent', 14)
+ }, relatedTargetProto);
+
+ var focusEventProto = mixin({
+ initFocusEvent: getInitFunction('initFocusEvent', 5)
+ }, relatedTargetProto);
+
+ var MouseEvent = registerGenericEvent('MouseEvent', UIEvent, mouseEventProto);
+ var FocusEvent = registerGenericEvent('FocusEvent', UIEvent, focusEventProto);
+
+ var MutationEvent = registerGenericEvent('MutationEvent', Event, {
+ initMutationEvent: getInitFunction('initMutationEvent', 3),
+ get relatedNode() {
+ return wrap(this.impl.relatedNode);
+ },
+ });
+
+ // In case the browser does not support event constructors we polyfill that
+ // by calling `createEvent('Foo')` and `initFooEvent` where the arguments to
+ // `initFooEvent` are derived from the registered default event init dict.
+ var defaultInitDicts = Object.create(null);
+
+ var supportsEventConstructors = (function() {
+ try {
+ new window.MouseEvent('click');
+ } catch (ex) {
+ return false;
+ }
+ return true;
+ })();
+
+ /**
+ * Constructs a new native event.
+ */
+ function constructEvent(OriginalEvent, name, type, options) {
+ if (supportsEventConstructors)
+ return new OriginalEvent(type, unwrapOptions(options));
+
+ // Create the arguments from the default dictionary.
+ var event = unwrap(document.createEvent(name));
+ var defaultDict = defaultInitDicts[name];
+ var args = [type];
+ Object.keys(defaultDict).forEach(function(key) {
+ var v = options != null && key in options ?
+ options[key] : defaultDict[key];
+ if (key === 'relatedTarget')
+ v = unwrap(v);
+ args.push(v);
+ });
+ event['init' + name].apply(event, args);
+ return event;
+ }
+
+ if (!supportsEventConstructors) {
+ var configureEventConstructor = function(name, initDict, superName) {
+ if (superName) {
+ var superDict = defaultInitDicts[superName];
+ initDict = mixin(mixin({}, superDict), initDict);
+ }
+
+ defaultInitDicts[name] = initDict;
+ };
+
+ // The order of the default event init dictionary keys is important, the
+ // arguments to initFooEvent is derived from that.
+ configureEventConstructor('Event', {bubbles: false, cancelable: false});
+ configureEventConstructor('CustomEvent', {detail: null}, 'Event');
+ configureEventConstructor('UIEvent', {view: null, detail: 0}, 'Event');
+ configureEventConstructor('MouseEvent', {
+ screenX: 0,
+ screenY: 0,
+ clientX: 0,
+ clientY: 0,
+ ctrlKey: false,
+ altKey: false,
+ shiftKey: false,
+ metaKey: false,
+ button: 0,
+ relatedTarget: null
+ }, 'UIEvent');
+ configureEventConstructor('FocusEvent', {relatedTarget: null}, 'UIEvent');
+ }
+
+ function isValidListener(fun) {
+ if (typeof fun === 'function')
+ return true;
+ return fun && fun.handleEvent;
+ }
+
+ var OriginalEventTarget = window.EventTarget;
+
+ /**
+ * This represents a wrapper for an EventTarget.
+ * @param {!EventTarget} impl The original event target.
+ * @constructor
+ */
+ function EventTarget(impl) {
+ this.impl = impl;
+ }
+
+ // Node and Window have different internal type checks in WebKit so we cannot
+ // use the same method as the original function.
+ var methodNames = [
+ 'addEventListener',
+ 'removeEventListener',
+ 'dispatchEvent'
+ ];
+
+ [Node, Window].forEach(function(constructor) {
+ var p = constructor.prototype;
+ methodNames.forEach(function(name) {
+ Object.defineProperty(p, name + '_', {value: p[name]});
+ });
+ });
+
+ function getTargetToListenAt(wrapper) {
+ if (wrapper instanceof wrappers.ShadowRoot)
+ wrapper = wrapper.host;
+ return unwrap(wrapper);
+ }
+
+ EventTarget.prototype = {
+ addEventListener: function(type, fun, capture) {
+ if (!isValidListener(fun))
+ return;
+
+ var listener = new Listener(type, fun, capture);
+ var listeners = listenersTable.get(this);
+ if (!listeners) {
+ listeners = [];
+ listenersTable.set(this, listeners);
+ } else {
+ // Might have a duplicate.
+ for (var i = 0; i < listeners.length; i++) {
+ if (listener.equals(listeners[i]))
+ return;
+ }
+ }
+
+ listeners.push(listener);
+
+ var target = getTargetToListenAt(this);
+ target.addEventListener_(type, dispatchOriginalEvent, true);
+ },
+ removeEventListener: function(type, fun, capture) {
+ capture = Boolean(capture);
+ var listeners = listenersTable.get(this);
+ if (!listeners)
+ return;
+ var count = 0, found = false;
+ for (var i = 0; i < listeners.length; i++) {
+ if (listeners[i].type === type && listeners[i].capture === capture) {
+ count++;
+ if (listeners[i].handler === fun) {
+ found = true;
+ listeners[i].remove();
+ }
+ }
+ }
+
+ if (found && count === 1) {
+ var target = getTargetToListenAt(this);
+ target.removeEventListener_(type, dispatchOriginalEvent, true);
+ }
+ },
+ dispatchEvent: function(event) {
+ var target = getTargetToListenAt(this);
+ var nativeEvent = unwrap(event);
+ // Allow dispatching the same event again. This is safe because if user
+ // code calls this during an existing dispatch of the same event the
+ // native dispatchEvent throws (that is required by the spec).
+ handledEventsTable.set(nativeEvent, false);
+ return target.dispatchEvent_(nativeEvent);
+ }
+ };
+
+ if (OriginalEventTarget)
+ registerWrapper(OriginalEventTarget, EventTarget);
+
+ function wrapEventTargetMethods(constructors) {
+ forwardMethodsToWrapper(constructors, methodNames);
+ }
+
+ var originalElementFromPoint = document.elementFromPoint;
+
+ function elementFromPoint(self, document, x, y) {
+ scope.renderAllPending();
+
+ var element = wrap(originalElementFromPoint.call(document.impl, x, y));
+ var targets = retarget(element, this)
+ for (var i = 0; i < targets.length; i++) {
+ var target = targets[i];
+ if (target.currentTarget === self)
+ return target.target;
+ }
+ return null;
+ }
+
+ /**
+ * Returns a function that is to be used as a getter for `onfoo` properties.
+ * @param {string} name
+ * @return {Function}
+ */
+ function getEventHandlerGetter(name) {
+ return function() {
+ var inlineEventHandlers = eventHandlersTable.get(this);
+ return inlineEventHandlers && inlineEventHandlers[name] &&
+ inlineEventHandlers[name].value || null;
+ };
+ }
+
+ /**
+ * Returns a function that is to be used as a setter for `onfoo` properties.
+ * @param {string} name
+ * @return {Function}
+ */
+ function getEventHandlerSetter(name) {
+ var eventType = name.slice(2);
+ return function(value) {
+ var inlineEventHandlers = eventHandlersTable.get(this);
+ if (!inlineEventHandlers) {
+ inlineEventHandlers = Object.create(null);
+ eventHandlersTable.set(this, inlineEventHandlers);
+ }
+
+ var old = inlineEventHandlers[name];
+ if (old)
+ this.removeEventListener(eventType, old.wrapped, false);
+
+ if (typeof value === 'function') {
+ var wrapped = function(e) {
+ var rv = value.call(this, e);
+ if (rv === false)
+ e.preventDefault();
+ else if (name === 'onbeforeunload' && typeof rv === 'string')
+ e.returnValue = rv;
+ // mouseover uses true for preventDefault but preventDefault for
+ // mouseover is ignored by browsers these day.
+ };
+
+ this.addEventListener(eventType, wrapped, false);
+ inlineEventHandlers[name] = {
+ value: value,
+ wrapped: wrapped
+ };
+ }
+ };
+ }
+
+ scope.adjustRelatedTarget = adjustRelatedTarget;
+ scope.elementFromPoint = elementFromPoint;
+ scope.getEventHandlerGetter = getEventHandlerGetter;
+ scope.getEventHandlerSetter = getEventHandlerSetter;
+ scope.muteMutationEvents = muteMutationEvents;
+ scope.unmuteMutationEvents = unmuteMutationEvents;
+ scope.wrapEventTargetMethods = wrapEventTargetMethods;
+ scope.wrappers.CustomEvent = CustomEvent;
+ scope.wrappers.Event = Event;
+ scope.wrappers.EventTarget = EventTarget;
+ scope.wrappers.FocusEvent = FocusEvent;
+ scope.wrappers.MouseEvent = MouseEvent;
+ scope.wrappers.MutationEvent = MutationEvent;
+ scope.wrappers.UIEvent = UIEvent;
+
+})(this.ShadowDOMPolyfill);
+
+// Copyright 2012 The Polymer Authors. All rights reserved.
+// Use of this source code is goverened by a BSD-style
+// license that can be found in the LICENSE file.
+
+(function(scope) {
+ 'use strict';
+
+ var wrap = scope.wrap;
+
+ function nonEnum(obj, prop) {
+ Object.defineProperty(obj, prop, {enumerable: false});
+ }
+
+ function NodeList() {
+ this.length = 0;
+ nonEnum(this, 'length');
+ }
+ NodeList.prototype = {
+ item: function(index) {
+ return this[index];
+ }
+ };
+ nonEnum(NodeList.prototype, 'item');
+
+ function wrapNodeList(list) {
+ if (list == null)
+ return list;
+ var wrapperList = new NodeList();
+ for (var i = 0, length = list.length; i < length; i++) {
+ wrapperList[i] = wrap(list[i]);
+ }
+ wrapperList.length = length;
+ return wrapperList;
+ }
+
+ function addWrapNodeListMethod(wrapperConstructor, name) {
+ wrapperConstructor.prototype[name] = function() {
+ return wrapNodeList(this.impl[name].apply(this.impl, arguments));
+ };
+ }
+
+ scope.wrappers.NodeList = NodeList;
+ scope.addWrapNodeListMethod = addWrapNodeListMethod;
+ scope.wrapNodeList = wrapNodeList;
+
+})(this.ShadowDOMPolyfill);
+// Copyright 2012 The Polymer Authors. All rights reserved.
+// Use of this source code is goverened by a BSD-style
+// license that can be found in the LICENSE file.
+
+(function(scope) {
+ 'use strict';
+
+ var EventTarget = scope.wrappers.EventTarget;
+ var NodeList = scope.wrappers.NodeList;
+ var defineWrapGetter = scope.defineWrapGetter;
+ var assert = scope.assert;
+ var mixin = scope.mixin;
+ var registerWrapper = scope.registerWrapper;
+ var unwrap = scope.unwrap;
+ var wrap = scope.wrap;
+ var wrapIfNeeded = scope.wrapIfNeeded;
+
+ function assertIsNodeWrapper(node) {
+ assert(node instanceof Node);
+ }
+
+ /**
+ * Collects nodes from a DocumentFragment or a Node for removal followed
+ * by an insertion.
+ *
+ * This updates the internal pointers for node, previousNode and nextNode.
+ */
+ function collectNodes(node, parentNode, previousNode, nextNode) {
+ if (!(node instanceof DocumentFragment)) {
+ if (node.parentNode)
+ node.parentNode.removeChild(node);
+ node.parentNode_ = parentNode;
+ node.previousSibling_ = previousNode;
+ node.nextSibling_ = nextNode;
+ if (previousNode)
+ previousNode.nextSibling_ = node;
+ if (nextNode)
+ nextNode.previousSibling_ = node;
+ return [node];
+ }
+
+ var nodes = [];
+ for (var child = node.firstChild; child; child = child.nextSibling) {
+ nodes.push(child);
+ }
+
+ for (var i = nodes.length - 1; i >= 0; i--) {
+ node.removeChild(nodes[i]);
+ nodes[i].parentNode_ = parentNode;
+ }
+
+ for (var i = 0; i < nodes.length; i++) {
+ nodes[i].previousSibling_ = nodes[i - 1] || previousNode;
+ nodes[i].nextSibling_ = nodes[i + 1] || nextNode;
+ }
+
+ if (previousNode)
+ previousNode.nextSibling_ = nodes[0];
+ if (nextNode)
+ nextNode.previousSibling_ = nodes[nodes.length - 1];
+
+ return nodes;
+ }
+
+ function collectNodesNoNeedToUpdatePointers(node) {
+ if (node instanceof DocumentFragment) {
+ var nodes = [];
+ var i = 0;
+ for (var child = node.firstChild; child; child = child.nextSibling) {
+ nodes[i++] = child;
+ }
+ return nodes;
+ }
+ return [node];
+ }
+
+ function nodesWereAdded(nodes) {
+ for (var i = 0; i < nodes.length; i++) {
+ nodes[i].nodeWasAdded_();
+ }
+ }
+
+ function ensureSameOwnerDocument(parent, child) {
+ var ownerDoc = parent.nodeType === Node.DOCUMENT_NODE ?
+ parent : parent.ownerDocument;
+ if (ownerDoc !== child.ownerDocument)
+ ownerDoc.adoptNode(child);
+ }
+
+ function adoptNodesIfNeeded(owner, nodes) {
+ if (!nodes.length)
+ return;
+
+ var ownerDoc = owner.ownerDocument;
+
+ // All nodes have the same ownerDocument when we get here.
+ if (ownerDoc === nodes[0].ownerDocument)
+ return;
+
+ for (var i = 0; i < nodes.length; i++) {
+ scope.adoptNodeNoRemove(nodes[i], ownerDoc);
+ }
+ }
+
+ function unwrapNodesForInsertion(owner, nodes) {
+ adoptNodesIfNeeded(owner, nodes);
+ var length = nodes.length;
+
+ if (length === 1)
+ return unwrap(nodes[0]);
+
+ var df = unwrap(owner.ownerDocument.createDocumentFragment());
+ for (var i = 0; i < length; i++) {
+ df.appendChild(unwrap(nodes[i]));
+ }
+ return df;
+ }
+
+ function removeAllChildNodes(wrapper) {
+ if (wrapper.invalidateShadowRenderer()) {
+ var childWrapper = wrapper.firstChild;
+ while (childWrapper) {
+ assert(childWrapper.parentNode === wrapper);
+ var nextSibling = childWrapper.nextSibling;
+ var childNode = unwrap(childWrapper);
+ var parentNode = childNode.parentNode;
+ if (parentNode)
+ originalRemoveChild.call(parentNode, childNode);
+ childWrapper.previousSibling_ = childWrapper.nextSibling_ =
+ childWrapper.parentNode_ = null;
+ childWrapper = nextSibling;
+ }
+ wrapper.firstChild_ = wrapper.lastChild_ = null;
+ } else {
+ var node = unwrap(wrapper);
+ var child = node.firstChild;
+ var nextSibling;
+ while (child) {
+ nextSibling = child.nextSibling;
+ originalRemoveChild.call(node, child);
+ child = nextSibling;
+ }
+ }
+ }
+
+ function invalidateParent(node) {
+ var p = node.parentNode;
+ return p && p.invalidateShadowRenderer();
+ }
+
+ var OriginalNode = window.Node;
+
+ /**
+ * This represents a wrapper of a native DOM node.
+ * @param {!Node} original The original DOM node, aka, the visual DOM node.
+ * @constructor
+ * @extends {EventTarget}
+ */
+ function Node(original) {
+ assert(original instanceof OriginalNode);
+
+ EventTarget.call(this, original);
+
+ // These properties are used to override the visual references with the
+ // logical ones. If the value is undefined it means that the logical is the
+ // same as the visual.
+
+ /**
+ * @type {Node|undefined}
+ * @private
+ */
+ this.parentNode_ = undefined;
+
+ /**
+ * @type {Node|undefined}
+ * @private
+ */
+ this.firstChild_ = undefined;
+
+ /**
+ * @type {Node|undefined}
+ * @private
+ */
+ this.lastChild_ = undefined;
+
+ /**
+ * @type {Node|undefined}
+ * @private
+ */
+ this.nextSibling_ = undefined;
+
+ /**
+ * @type {Node|undefined}
+ * @private
+ */
+ this.previousSibling_ = undefined;
+ };
+
+ var OriginalDocumentFragment = window.DocumentFragment;
+ var originalAppendChild = OriginalNode.prototype.appendChild;
+ var originalCompareDocumentPosition =
+ OriginalNode.prototype.compareDocumentPosition;
+ var originalInsertBefore = OriginalNode.prototype.insertBefore;
+ var originalRemoveChild = OriginalNode.prototype.removeChild;
+ var originalReplaceChild = OriginalNode.prototype.replaceChild;
+
+ var isIe = /Trident/.test(navigator.userAgent);
+
+ var removeChildOriginalHelper = isIe ?
+ function(parent, child) {
+ try {
+ originalRemoveChild.call(parent, child);
+ } catch (ex) {
+ if (!(parent instanceof OriginalDocumentFragment))
+ throw ex;
+ }
+ } :
+ function(parent, child) {
+ originalRemoveChild.call(parent, child);
+ };
+
+ Node.prototype = Object.create(EventTarget.prototype);
+ mixin(Node.prototype, {
+ appendChild: function(childWrapper) {
+ assertIsNodeWrapper(childWrapper);
+
+ var nodes;
+
+ if (this.invalidateShadowRenderer() || invalidateParent(childWrapper)) {
+ var previousNode = this.lastChild;
+ var nextNode = null;
+ nodes = collectNodes(childWrapper, this, previousNode, nextNode);
+
+ this.lastChild_ = nodes[nodes.length - 1];
+ if (!previousNode)
+ this.firstChild_ = nodes[0];
+
+ originalAppendChild.call(this.impl, unwrapNodesForInsertion(this, nodes));
+ } else {
+ nodes = collectNodesNoNeedToUpdatePointers(childWrapper)
+ ensureSameOwnerDocument(this, childWrapper);
+ originalAppendChild.call(this.impl, unwrap(childWrapper));
+ }
+
+ nodesWereAdded(nodes);
+
+ return childWrapper;
+ },
+
+ insertBefore: function(childWrapper, refWrapper) {
+ // TODO(arv): Unify with appendChild
+ if (!refWrapper)
+ return this.appendChild(childWrapper);
+
+ assertIsNodeWrapper(childWrapper);
+ assertIsNodeWrapper(refWrapper);
+ assert(refWrapper.parentNode === this);
+
+ var nodes;
+
+ if (this.invalidateShadowRenderer() || invalidateParent(childWrapper)) {
+ var previousNode = refWrapper.previousSibling;
+ var nextNode = refWrapper;
+ nodes = collectNodes(childWrapper, this, previousNode, nextNode);
+
+ if (this.firstChild === refWrapper)
+ this.firstChild_ = nodes[0];
+
+ // insertBefore refWrapper no matter what the parent is?
+ var refNode = unwrap(refWrapper);
+ var parentNode = refNode.parentNode;
+
+ if (parentNode) {
+ originalInsertBefore.call(
+ parentNode,
+ unwrapNodesForInsertion(this, nodes),
+ refNode);
+ } else {
+ adoptNodesIfNeeded(this, nodes);
+ }
+ } else {
+ nodes = collectNodesNoNeedToUpdatePointers(childWrapper);
+ ensureSameOwnerDocument(this, childWrapper);
+ originalInsertBefore.call(this.impl, unwrap(childWrapper),
+ unwrap(refWrapper));
+ }
+
+ nodesWereAdded(nodes);
+
+ return childWrapper;
+ },
+
+ removeChild: function(childWrapper) {
+ assertIsNodeWrapper(childWrapper);
+ if (childWrapper.parentNode !== this) {
+ // IE has invalid DOM trees at times.
+ var found = false;
+ var childNodes = this.childNodes;
+ for (var ieChild = this.firstChild; ieChild;
+ ieChild = ieChild.nextSibling) {
+ if (ieChild === childWrapper) {
+ found = true;
+ break;
+ }
+ }
+ if (!found) {
+ // TODO(arv): DOMException
+ throw new Error('NotFoundError');
+ }
+ }
+
+ var childNode = unwrap(childWrapper);
+ if (this.invalidateShadowRenderer()) {
+
+ // We need to remove the real node from the DOM before updating the
+ // pointers. This is so that that mutation event is dispatched before
+ // the pointers have changed.
+ var thisFirstChild = this.firstChild;
+ var thisLastChild = this.lastChild;
+ var childWrapperNextSibling = childWrapper.nextSibling;
+ var childWrapperPreviousSibling = childWrapper.previousSibling;
+
+ var parentNode = childNode.parentNode;
+ if (parentNode)
+ removeChildOriginalHelper(parentNode, childNode);
+
+ if (thisFirstChild === childWrapper)
+ this.firstChild_ = childWrapperNextSibling;
+ if (thisLastChild === childWrapper)
+ this.lastChild_ = childWrapperPreviousSibling;
+ if (childWrapperPreviousSibling)
+ childWrapperPreviousSibling.nextSibling_ = childWrapperNextSibling;
+ if (childWrapperNextSibling) {
+ childWrapperNextSibling.previousSibling_ =
+ childWrapperPreviousSibling;
+ }
+
+ childWrapper.previousSibling_ = childWrapper.nextSibling_ =
+ childWrapper.parentNode_ = undefined;
+ } else {
+ removeChildOriginalHelper(this.impl, childNode);
+ }
+
+ return childWrapper;
+ },
+
+ replaceChild: function(newChildWrapper, oldChildWrapper) {
+ assertIsNodeWrapper(newChildWrapper);
+ assertIsNodeWrapper(oldChildWrapper);
+
+ if (oldChildWrapper.parentNode !== this) {
+ // TODO(arv): DOMException
+ throw new Error('NotFoundError');
+ }
+
+ var oldChildNode = unwrap(oldChildWrapper);
+ var nodes;
+
+ if (this.invalidateShadowRenderer() ||
+ invalidateParent(newChildWrapper)) {
+ var previousNode = oldChildWrapper.previousSibling;
+ var nextNode = oldChildWrapper.nextSibling;
+ if (nextNode === newChildWrapper)
+ nextNode = newChildWrapper.nextSibling;
+ nodes = collectNodes(newChildWrapper, this, previousNode, nextNode);
+
+ if (this.firstChild === oldChildWrapper)
+ this.firstChild_ = nodes[0];
+ if (this.lastChild === oldChildWrapper)
+ this.lastChild_ = nodes[nodes.length - 1];
+
+ oldChildWrapper.previousSibling_ = oldChildWrapper.nextSibling_ =
+ oldChildWrapper.parentNode_ = undefined;
+
+ // replaceChild no matter what the parent is?
+ if (oldChildNode.parentNode) {
+ originalReplaceChild.call(
+ oldChildNode.parentNode,
+ unwrapNodesForInsertion(this, nodes),
+ oldChildNode);
+ }
+ } else {
+ nodes = collectNodesNoNeedToUpdatePointers(newChildWrapper);
+ ensureSameOwnerDocument(this, newChildWrapper);
+ originalReplaceChild.call(this.impl, unwrap(newChildWrapper),
+ oldChildNode);
+ }
+
+ nodesWereAdded(nodes);
+
+ return oldChildWrapper;
+ },
+
+ /**
+ * Called after a node was added. Subclasses override this to invalidate
+ * the renderer as needed.
+ * @private
+ */
+ nodeWasAdded_: function() {
+ for (var child = this.firstChild; child; child = child.nextSibling) {
+ child.nodeWasAdded_();
+ }
+ },
+
+ hasChildNodes: function() {
+ return this.firstChild !== null;
+ },
+
+ /** @type {Node} */
+ get parentNode() {
+ // If the parentNode has not been overridden, use the original parentNode.
+ return this.parentNode_ !== undefined ?
+ this.parentNode_ : wrap(this.impl.parentNode);
+ },
+
+ /** @type {Node} */
+ get firstChild() {
+ return this.firstChild_ !== undefined ?
+ this.firstChild_ : wrap(this.impl.firstChild);
+ },
+
+ /** @type {Node} */
+ get lastChild() {
+ return this.lastChild_ !== undefined ?
+ this.lastChild_ : wrap(this.impl.lastChild);
+ },
+
+ /** @type {Node} */
+ get nextSibling() {
+ return this.nextSibling_ !== undefined ?
+ this.nextSibling_ : wrap(this.impl.nextSibling);
+ },
+
+ /** @type {Node} */
+ get previousSibling() {
+ return this.previousSibling_ !== undefined ?
+ this.previousSibling_ : wrap(this.impl.previousSibling);
+ },
+
+ get parentElement() {
+ var p = this.parentNode;
+ while (p && p.nodeType !== Node.ELEMENT_NODE) {
+ p = p.parentNode;
+ }
+ return p;
+ },
+
+ get textContent() {
+ // TODO(arv): This should fallback to this.impl.textContent if there
+ // are no shadow trees below or above the context node.
+ var s = '';
+ for (var child = this.firstChild; child; child = child.nextSibling) {
+ s += child.textContent;
+ }
+ return s;
+ },
+ set textContent(textContent) {
+ if (this.invalidateShadowRenderer()) {
+ removeAllChildNodes(this);
+ if (textContent !== '') {
+ var textNode = this.impl.ownerDocument.createTextNode(textContent);
+ this.appendChild(textNode);
+ }
+ } else {
+ this.impl.textContent = textContent;
+ }
+ },
+
+ get childNodes() {
+ var wrapperList = new NodeList();
+ var i = 0;
+ for (var child = this.firstChild; child; child = child.nextSibling) {
+ wrapperList[i++] = child;
+ }
+ wrapperList.length = i;
+ return wrapperList;
+ },
+
+ cloneNode: function(deep) {
+ if (!this.invalidateShadowRenderer())
+ return wrap(this.impl.cloneNode(deep));
+
+ var clone = wrap(this.impl.cloneNode(false));
+ if (deep) {
+ for (var child = this.firstChild; child; child = child.nextSibling) {
+ clone.appendChild(child.cloneNode(true));
+ }
+ }
+ // TODO(arv): Some HTML elements also clone other data like value.
+ return clone;
+ },
+
+ contains: function(child) {
+ if (!child)
+ return false;
+
+ child = wrapIfNeeded(child);
+
+ // TODO(arv): Optimize using ownerDocument etc.
+ if (child === this)
+ return true;
+ var parentNode = child.parentNode;
+ if (!parentNode)
+ return false;
+ return this.contains(parentNode);
+ },
+
+ compareDocumentPosition: function(otherNode) {
+ // This only wraps, it therefore only operates on the composed DOM and not
+ // the logical DOM.
+ return originalCompareDocumentPosition.call(this.impl, unwrap(otherNode));
+ }
+ });
+
+ defineWrapGetter(Node, 'ownerDocument');
+
+ // We use a DocumentFragment as a base and then delete the properties of
+ // DocumentFragment.prototype from the wrapper Node. Since delete makes
+ // objects slow in some JS engines we recreate the prototype object.
+ registerWrapper(OriginalNode, Node, document.createDocumentFragment());
+ delete Node.prototype.querySelector;
+ delete Node.prototype.querySelectorAll;
+ Node.prototype = mixin(Object.create(EventTarget.prototype), Node.prototype);
+
+ scope.wrappers.Node = Node;
+
+})(this.ShadowDOMPolyfill);
+
+// Copyright 2013 The Polymer Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style
+// license that can be found in the LICENSE file.
+
+(function(scope) {
+ 'use strict';
+
+ function findOne(node, selector) {
+ var m, el = node.firstElementChild;
+ while (el) {
+ if (el.matches(selector))
+ return el;
+ m = findOne(el, selector);
+ if (m)
+ return m;
+ el = el.nextElementSibling;
+ }
+ return null;
+ }
+
+ function findAll(node, selector, results) {
+ var el = node.firstElementChild;
+ while (el) {
+ if (el.matches(selector))
+ results[results.length++] = el;
+ findAll(el, selector, results);
+ el = el.nextElementSibling;
+ }
+ return results;
+ }
+
+ // find and findAll will only match Simple Selectors,
+ // Structural Pseudo Classes are not guarenteed to be correct
+ // http://www.w3.org/TR/css3-selectors/#simple-selectors
+
+ var SelectorsInterface = {
+ querySelector: function(selector) {
+ return findOne(this, selector);
+ },
+ querySelectorAll: function(selector) {
+ return findAll(this, selector, new NodeList())
+ }
+ };
+
+ var GetElementsByInterface = {
+ getElementsByTagName: function(tagName) {
+ // TODO(arv): Check tagName?
+ return this.querySelectorAll(tagName);
+ },
+ getElementsByClassName: function(className) {
+ // TODO(arv): Check className?
+ return this.querySelectorAll('.' + className);
+ },
+ getElementsByTagNameNS: function(ns, tagName) {
+ if (ns === '*')
+ return this.getElementsByTagName(tagName);
+
+ // TODO(arv): Check tagName?
+ var result = new NodeList;
+ var els = this.getElementsByTagName(tagName);
+ for (var i = 0, j = 0; i < els.length; i++) {
+ if (els[i].namespaceURI === ns)
+ result[j++] = els[i];
+ }
+ result.length = j;
+ return result;
+ }
+ };
+
+ scope.GetElementsByInterface = GetElementsByInterface;
+ scope.SelectorsInterface = SelectorsInterface;
+
+})(this.ShadowDOMPolyfill);
+
+// Copyright 2013 The Polymer Authors. All rights reserved.
+// Use of this source code is goverened by a BSD-style
+// license that can be found in the LICENSE file.
+
+(function(scope) {
+ 'use strict';
+
+ var NodeList = scope.wrappers.NodeList;
+
+ function forwardElement(node) {
+ while (node && node.nodeType !== Node.ELEMENT_NODE) {
+ node = node.nextSibling;
+ }
+ return node;
+ }
+
+ function backwardsElement(node) {
+ while (node && node.nodeType !== Node.ELEMENT_NODE) {
+ node = node.previousSibling;
+ }
+ return node;
+ }
+
+ var ParentNodeInterface = {
+ get firstElementChild() {
+ return forwardElement(this.firstChild);
+ },
+
+ get lastElementChild() {
+ return backwardsElement(this.lastChild);
+ },
+
+ get childElementCount() {
+ var count = 0;
+ for (var child = this.firstElementChild;
+ child;
+ child = child.nextElementSibling) {
+ count++;
+ }
+ return count;
+ },
+
+ get children() {
+ var wrapperList = new NodeList();
+ var i = 0;
+ for (var child = this.firstElementChild;
+ child;
+ child = child.nextElementSibling) {
+ wrapperList[i++] = child;
+ }
+ wrapperList.length = i;
+ return wrapperList;
+ }
+ };
+
+ var ChildNodeInterface = {
+ get nextElementSibling() {
+ return forwardElement(this.nextSibling);
+ },
+
+ get previousElementSibling() {
+ return backwardsElement(this.previousSibling);
+ }
+ };
+
+ scope.ChildNodeInterface = ChildNodeInterface;
+ scope.ParentNodeInterface = ParentNodeInterface;
+
+})(this.ShadowDOMPolyfill);
+
+// Copyright 2013 The Polymer Authors. All rights reserved.
+// Use of this source code is goverened by a BSD-style
+// license that can be found in the LICENSE file.
+
+(function(scope) {
+ 'use strict';
+
+ var ChildNodeInterface = scope.ChildNodeInterface;
+ var Node = scope.wrappers.Node;
+ var mixin = scope.mixin;
+ var registerWrapper = scope.registerWrapper;
+
+ var OriginalCharacterData = window.CharacterData;
+
+ function CharacterData(node) {
+ Node.call(this, node);
+ }
+ CharacterData.prototype = Object.create(Node.prototype);
+ mixin(CharacterData.prototype, {
+ get textContent() {
+ return this.data;
+ },
+ set textContent(value) {
+ this.data = value;
+ }
+ });
+
+ mixin(CharacterData.prototype, ChildNodeInterface);
+
+ registerWrapper(OriginalCharacterData, CharacterData,
+ document.createTextNode(''));
+
+ scope.wrappers.CharacterData = CharacterData;
+})(this.ShadowDOMPolyfill);
+
+// Copyright 2013 The Polymer Authors. All rights reserved.
+// Use of this source code is goverened by a BSD-style
+// license that can be found in the LICENSE file.
+
+(function(scope) {
+ 'use strict';
+
+ var ChildNodeInterface = scope.ChildNodeInterface;
+ var GetElementsByInterface = scope.GetElementsByInterface;
+ var Node = scope.wrappers.Node;
+ var ParentNodeInterface = scope.ParentNodeInterface;
+ var SelectorsInterface = scope.SelectorsInterface;
+ var addWrapNodeListMethod = scope.addWrapNodeListMethod;
+ var mixin = scope.mixin;
+ var oneOf = scope.oneOf;
+ var registerWrapper = scope.registerWrapper;
+ var wrappers = scope.wrappers;
+
+ var OriginalElement = window.Element;
+
+ var matchesName = oneOf(OriginalElement.prototype, [
+ 'matches',
+ 'mozMatchesSelector',
+ 'msMatchesSelector',
+ 'webkitMatchesSelector',
+ ]);
+
+ var originalMatches = OriginalElement.prototype[matchesName];
+
+ function invalidateRendererBasedOnAttribute(element, name) {
+ // Only invalidate if parent node is a shadow host.
+ var p = element.parentNode;
+ if (!p || !p.shadowRoot)
+ return;
+
+ var renderer = scope.getRendererForHost(p);
+ if (renderer.dependsOnAttribute(name))
+ renderer.invalidate();
+ }
+
+ function Element(node) {
+ Node.call(this, node);
+ }
+ Element.prototype = Object.create(Node.prototype);
+ mixin(Element.prototype, {
+ createShadowRoot: function() {
+ var newShadowRoot = new wrappers.ShadowRoot(this);
+ this.impl.polymerShadowRoot_ = newShadowRoot;
+
+ var renderer = scope.getRendererForHost(this);
+ renderer.invalidate();
+
+ return newShadowRoot;
+ },
+
+ get shadowRoot() {
+ return this.impl.polymerShadowRoot_ || null;
+ },
+
+ setAttribute: function(name, value) {
+ this.impl.setAttribute(name, value);
+ invalidateRendererBasedOnAttribute(this, name);
+ },
+
+ removeAttribute: function(name) {
+ this.impl.removeAttribute(name);
+ invalidateRendererBasedOnAttribute(this, name);
+ },
+
+ matches: function(selector) {
+ return originalMatches.call(this.impl, selector);
+ }
+ });
+
+ Element.prototype[matchesName] = function(selector) {
+ return this.matches(selector);
+ };
+
+ if (OriginalElement.prototype.webkitCreateShadowRoot) {
+ Element.prototype.webkitCreateShadowRoot =
+ Element.prototype.createShadowRoot;
+ }
+
+ /**
+ * Useful for generating the accessor pair for a property that reflects an
+ * attribute.
+ */
+ function setterDirtiesAttribute(prototype, propertyName, opt_attrName) {
+ var attrName = opt_attrName || propertyName;
+ Object.defineProperty(prototype, propertyName, {
+ get: function() {
+ return this.impl[propertyName];
+ },
+ set: function(v) {
+ this.impl[propertyName] = v;
+ invalidateRendererBasedOnAttribute(this, attrName);
+ },
+ configurable: true,
+ enumerable: true
+ });
+ }
+
+ setterDirtiesAttribute(Element.prototype, 'id');
+ setterDirtiesAttribute(Element.prototype, 'className', 'class');
+
+ mixin(Element.prototype, ChildNodeInterface);
+ mixin(Element.prototype, GetElementsByInterface);
+ mixin(Element.prototype, ParentNodeInterface);
+ mixin(Element.prototype, SelectorsInterface);
+
+ registerWrapper(OriginalElement, Element);
+
+ // TODO(arv): Export setterDirtiesAttribute and apply it to more bindings
+ // that reflect attributes.
+ scope.matchesName = matchesName;
+ scope.wrappers.Element = Element;
+})(this.ShadowDOMPolyfill);
+
+// Copyright 2013 The Polymer Authors. All rights reserved.
+// Use of this source code is goverened by a BSD-style
+// license that can be found in the LICENSE file.
+
+(function(scope) {
+ 'use strict';
+
+ var Element = scope.wrappers.Element;
+ var defineGetter = scope.defineGetter;
+ var mixin = scope.mixin;
+ var registerWrapper = scope.registerWrapper;
+ var unwrap = scope.unwrap;
+ var wrap = scope.wrap;
+
+ /////////////////////////////////////////////////////////////////////////////
+ // innerHTML and outerHTML
+
+ var escapeRegExp = /&|<|"/g;
+
+ function escapeReplace(c) {
+ switch (c) {
+ case '&':
+ return '&';
+ case '<':
+ return '<';
+ case '"':
+ return '"'
+ }
+ }
+
+ function escape(s) {
+ return s.replace(escapeRegExp, escapeReplace);
+ }
+
+ // http://www.whatwg.org/specs/web-apps/current-work/#void-elements
+ var voidElements = {
+ 'area': true,
+ 'base': true,
+ 'br': true,
+ 'col': true,
+ 'command': true,
+ 'embed': true,
+ 'hr': true,
+ 'img': true,
+ 'input': true,
+ 'keygen': true,
+ 'link': true,
+ 'meta': true,
+ 'param': true,
+ 'source': true,
+ 'track': true,
+ 'wbr': true
+ };
+
+ function getOuterHTML(node) {
+ switch (node.nodeType) {
+ case Node.ELEMENT_NODE:
+ var tagName = node.tagName.toLowerCase();
+ var s = '<' + tagName;
+ var attrs = node.attributes;
+ for (var i = 0, attr; attr = attrs[i]; i++) {
+ s += ' ' + attr.name + '="' + escape(attr.value) + '"';
+ }
+ s += '>';
+ if (voidElements[tagName])
+ return s;
+
+ return s + getInnerHTML(node) + '</' + tagName + '>';
+
+ case Node.TEXT_NODE:
+ return escape(node.nodeValue);
+
+ case Node.COMMENT_NODE:
+ return '<!--' + escape(node.nodeValue) + '-->';
+ default:
+ console.error(node);
+ throw new Error('not implemented');
+ }
+ }
+
+ function getInnerHTML(node) {
+ var s = '';
+ for (var child = node.firstChild; child; child = child.nextSibling) {
+ s += getOuterHTML(child);
+ }
+ return s;
+ }
+
+ function setInnerHTML(node, value, opt_tagName) {
+ var tagName = opt_tagName || 'div';
+ node.textContent = '';
+ var tempElement = unwrap(node.ownerDocument.createElement(tagName));
+ tempElement.innerHTML = value;
+ var firstChild;
+ while (firstChild = tempElement.firstChild) {
+ node.appendChild(wrap(firstChild));
+ }
+ }
+
+ var OriginalHTMLElement = window.HTMLElement;
+
+ function HTMLElement(node) {
+ Element.call(this, node);
+ }
+ HTMLElement.prototype = Object.create(Element.prototype);
+ mixin(HTMLElement.prototype, {
+ get innerHTML() {
+ // TODO(arv): This should fallback to this.impl.innerHTML if there
+ // are no shadow trees below or above the context node.
+ return getInnerHTML(this);
+ },
+ set innerHTML(value) {
+ if (this.invalidateShadowRenderer())
+ setInnerHTML(this, value, this.tagName);
+ else
+ this.impl.innerHTML = value;
+ },
+
+ get outerHTML() {
+ // TODO(arv): This should fallback to HTMLElement_prototype.outerHTML if there
+ // are no shadow trees below or above the context node.
+ return getOuterHTML(this);
+ },
+ set outerHTML(value) {
+ var p = this.parentNode;
+ if (p) {
+ p.invalidateShadowRenderer();
+ this.impl.outerHTML = value;
+ }
+ }
+ });
+
+ function getter(name) {
+ return function() {
+ scope.renderAllPending();
+ return this.impl[name];
+ };
+ }
+
+ function getterRequiresRendering(name) {
+ defineGetter(HTMLElement, name, getter(name));
+ }
+
+ [
+ 'clientHeight',
+ 'clientLeft',
+ 'clientTop',
+ 'clientWidth',
+ 'offsetHeight',
+ 'offsetLeft',
+ 'offsetTop',
+ 'offsetWidth',
+ 'scrollHeight',
+ 'scrollWidth',
+ ].forEach(getterRequiresRendering);
+
+ function getterAndSetterRequiresRendering(name) {
+ Object.defineProperty(HTMLElement.prototype, name, {
+ get: getter(name),
+ set: function(v) {
+ scope.renderAllPending();
+ this.impl[name] = v;
+ },
+ configurable: true,
+ enumerable: true
+ });
+ }
+
+ [
+ 'scrollLeft',
+ 'scrollTop',
+ ].forEach(getterAndSetterRequiresRendering);
+
+ function methodRequiresRendering(name) {
+ Object.defineProperty(HTMLElement.prototype, name, {
+ value: function() {
+ scope.renderAllPending();
+ return this.impl[name].apply(this.impl, arguments);
+ },
+ configurable: true,
+ enumerable: true
+ });
+ }
+
+ [
+ 'getBoundingClientRect',
+ 'getClientRects',
+ 'scrollIntoView'
+ ].forEach(methodRequiresRendering);
+
+ // HTMLElement is abstract so we use a subclass that has no members.
+ registerWrapper(OriginalHTMLElement, HTMLElement,
+ document.createElement('b'));
+
+ scope.wrappers.HTMLElement = HTMLElement;
+
+ // TODO: Find a better way to share these two with WrapperShadowRoot.
+ scope.getInnerHTML = getInnerHTML;
+ scope.setInnerHTML = setInnerHTML
+})(this.ShadowDOMPolyfill);
+// Copyright 2013 The Polymer Authors. All rights reserved.
+// Use of this source code is goverened by a BSD-style
+// license that can be found in the LICENSE file.
+
+(function(scope) {
+ 'use strict';
+
+ var HTMLElement = scope.wrappers.HTMLElement;
+ var mixin = scope.mixin;
+ var registerWrapper = scope.registerWrapper;
+ var wrap = scope.wrap;
+
+ var OriginalHTMLCanvasElement = window.HTMLCanvasElement;
+
+ function HTMLCanvasElement(node) {
+ HTMLElement.call(this, node);
+ }
+ HTMLCanvasElement.prototype = Object.create(HTMLElement.prototype);
+
+ mixin(HTMLCanvasElement.prototype, {
+ getContext: function() {
+ var context = this.impl.getContext.apply(this.impl, arguments);
+ return context && wrap(context);
+ }
+ });
+
+ registerWrapper(OriginalHTMLCanvasElement, HTMLCanvasElement,
+ document.createElement('canvas'));
+
+ scope.wrappers.HTMLCanvasElement = HTMLCanvasElement;
+})(this.ShadowDOMPolyfill);
+
+// Copyright 2013 The Polymer Authors. All rights reserved.
+// Use of this source code is goverened by a BSD-style
+// license that can be found in the LICENSE file.
+
+(function(scope) {
+ 'use strict';
+
+ var HTMLElement = scope.wrappers.HTMLElement;
+ var mixin = scope.mixin;
+ var registerWrapper = scope.registerWrapper;
+
+ var OriginalHTMLContentElement = window.HTMLContentElement;
+
+ function HTMLContentElement(node) {
+ HTMLElement.call(this, node);
+ }
+ HTMLContentElement.prototype = Object.create(HTMLElement.prototype);
+ mixin(HTMLContentElement.prototype, {
+ get select() {
+ return this.getAttribute('select');
+ },
+ set select(value) {
+ this.setAttribute('select', value);
+ },
+
+ setAttribute: function(n, v) {
+ HTMLElement.prototype.setAttribute.call(this, n, v);
+ if (String(n).toLowerCase() === 'select')
+ this.invalidateShadowRenderer(true);
+ }
+
+ // getDistributedNodes is added in ShadowRenderer
+
+ // TODO: attribute boolean resetStyleInheritance;
+ });
+
+ if (OriginalHTMLContentElement)
+ registerWrapper(OriginalHTMLContentElement, HTMLContentElement);
+
+ scope.wrappers.HTMLContentElement = HTMLContentElement;
+})(this.ShadowDOMPolyfill);
+// Copyright 2013 The Polymer Authors. All rights reserved.
+// Use of this source code is goverened by a BSD-style
+// license that can be found in the LICENSE file.
+
+(function(scope) {
+ 'use strict';
+
+ var HTMLElement = scope.wrappers.HTMLElement;
+ var registerWrapper = scope.registerWrapper;
+ var unwrap = scope.unwrap;
+ var rewrap = scope.rewrap;
+
+ var OriginalHTMLImageElement = window.HTMLImageElement;
+
+ function HTMLImageElement(node) {
+ HTMLElement.call(this, node);
+ }
+ HTMLImageElement.prototype = Object.create(HTMLElement.prototype);
+
+ registerWrapper(OriginalHTMLImageElement, HTMLImageElement,
+ document.createElement('img'));
+
+ function Image(width, height) {
+ if (!(this instanceof Image)) {
+ throw new TypeError(
+ 'DOM object constructor cannot be called as a function.');
+ }
+
+ var node = unwrap(document.createElement('img'));
+ HTMLElement.call(this, node);
+ rewrap(node, this);
+
+ if (width !== undefined)
+ node.width = width;
+ if (height !== undefined)
+ node.height = height;
+ }
+
+ Image.prototype = HTMLImageElement.prototype;
+
+ scope.wrappers.HTMLImageElement = HTMLImageElement;
+ scope.wrappers.Image = Image;
+})(this.ShadowDOMPolyfill);
+
+// Copyright 2013 The Polymer Authors. All rights reserved.
+// Use of this source code is goverened by a BSD-style
+// license that can be found in the LICENSE file.
+
+(function(scope) {
+ 'use strict';
+
+ var HTMLElement = scope.wrappers.HTMLElement;
+ var mixin = scope.mixin;
+ var registerWrapper = scope.registerWrapper;
+
+ var OriginalHTMLShadowElement = window.HTMLShadowElement;
+
+ function HTMLShadowElement(node) {
+ HTMLElement.call(this, node);
+ }
+ HTMLShadowElement.prototype = Object.create(HTMLElement.prototype);
+ mixin(HTMLShadowElement.prototype, {
+ // TODO: attribute boolean resetStyleInheritance;
+ });
+
+ if (OriginalHTMLShadowElement)
+ registerWrapper(OriginalHTMLShadowElement, HTMLShadowElement);
+
+ scope.wrappers.HTMLShadowElement = HTMLShadowElement;
+})(this.ShadowDOMPolyfill);
+
+// Copyright 2013 The Polymer Authors. All rights reserved.
+// Use of this source code is goverened by a BSD-style
+// license that can be found in the LICENSE file.
+
+(function(scope) {
+ 'use strict';
+
+ var HTMLElement = scope.wrappers.HTMLElement;
+ var getInnerHTML = scope.getInnerHTML;
+ var mixin = scope.mixin;
+ var muteMutationEvents = scope.muteMutationEvents;
+ var registerWrapper = scope.registerWrapper;
+ var setInnerHTML = scope.setInnerHTML;
+ var unmuteMutationEvents = scope.unmuteMutationEvents;
+ var unwrap = scope.unwrap;
+ var wrap = scope.wrap;
+
+ var contentTable = new WeakMap();
+ var templateContentsOwnerTable = new WeakMap();
+
+ // http://dvcs.w3.org/hg/webcomponents/raw-file/tip/spec/templates/index.html#dfn-template-contents-owner
+ function getTemplateContentsOwner(doc) {
+ if (!doc.defaultView)
+ return doc;
+ var d = templateContentsOwnerTable.get(doc);
+ if (!d) {
+ // TODO(arv): This should either be a Document or HTMLDocument depending
+ // on doc.
+ d = doc.implementation.createHTMLDocument('');
+ while (d.lastChild) {
+ d.removeChild(d.lastChild);
+ }
+ templateContentsOwnerTable.set(doc, d);
+ }
+ return d;
+ }
+
+ function extractContent(templateElement) {
+ // templateElement is not a wrapper here.
+ var doc = getTemplateContentsOwner(templateElement.ownerDocument);
+ var df = unwrap(doc.createDocumentFragment());
+ var child;
+ muteMutationEvents();
+ while (child = templateElement.firstChild) {
+ df.appendChild(child);
+ }
+ unmuteMutationEvents();
+ return df;
+ }
+
+ var OriginalHTMLTemplateElement = window.HTMLTemplateElement;
+
+ function HTMLTemplateElement(node) {
+ HTMLElement.call(this, node);
+ if (!OriginalHTMLTemplateElement) {
+ var content = extractContent(node);
+ contentTable.set(this, wrap(content));
+ }
+ }
+ HTMLTemplateElement.prototype = Object.create(HTMLElement.prototype);
+
+ mixin(HTMLTemplateElement.prototype, {
+ get content() {
+ if (OriginalHTMLTemplateElement)
+ return wrap(this.impl.content);
+ return contentTable.get(this);
+ },
+
+ get innerHTML() {
+ return getInnerHTML(this.content);
+ },
+ set innerHTML(value) {
+ setInnerHTML(this.content, value);
+ }
+
+ // TODO(arv): cloneNode needs to clone content.
+
+ });
+
+ if (OriginalHTMLTemplateElement)
+ registerWrapper(OriginalHTMLTemplateElement, HTMLTemplateElement);
+
+ scope.wrappers.HTMLTemplateElement = HTMLTemplateElement;
+})(this.ShadowDOMPolyfill);
+// Copyright 2013 The Polymer Authors. All rights reserved.
+// Use of this source code is goverened by a BSD-style
+// license that can be found in the LICENSE file.
+
+(function(scope) {
+ 'use strict';
+
+ var HTMLElement = scope.wrappers.HTMLElement;
+ var registerWrapper = scope.registerWrapper;
+
+ var OriginalHTMLMediaElement = window.HTMLMediaElement;
+
+ function HTMLMediaElement(node) {
+ HTMLElement.call(this, node);
+ }
+ HTMLMediaElement.prototype = Object.create(HTMLElement.prototype);
+
+ registerWrapper(OriginalHTMLMediaElement, HTMLMediaElement,
+ document.createElement('audio'));
+
+ scope.wrappers.HTMLMediaElement = HTMLMediaElement;
+})(this.ShadowDOMPolyfill);
+
+// Copyright 2013 The Polymer Authors. All rights reserved.
+// Use of this source code is goverened by a BSD-style
+// license that can be found in the LICENSE file.
+
+(function(scope) {
+ 'use strict';
+
+ var HTMLMediaElement = scope.wrappers.HTMLMediaElement;
+ var registerWrapper = scope.registerWrapper;
+ var unwrap = scope.unwrap;
+ var rewrap = scope.rewrap;
+
+ var OriginalHTMLAudioElement = window.HTMLAudioElement;
+
+ function HTMLAudioElement(node) {
+ HTMLMediaElement.call(this, node);
+ }
+ HTMLAudioElement.prototype = Object.create(HTMLMediaElement.prototype);
+
+ registerWrapper(OriginalHTMLAudioElement, HTMLAudioElement,
+ document.createElement('audio'));
+
+ function Audio(src) {
+ if (!(this instanceof Audio)) {
+ throw new TypeError(
+ 'DOM object constructor cannot be called as a function.');
+ }
+
+ var node = unwrap(document.createElement('audio'));
+ HTMLMediaElement.call(this, node);
+ rewrap(node, this);
+
+ node.setAttribute('preload', 'auto');
+ if (src !== undefined)
+ node.setAttribute('src', src);
+ }
+
+ Audio.prototype = HTMLAudioElement.prototype;
+
+ scope.wrappers.HTMLAudioElement = HTMLAudioElement;
+ scope.wrappers.Audio = Audio;
+})(this.ShadowDOMPolyfill);
+
+// Copyright 2013 The Polymer Authors. All rights reserved.
+// Use of this source code is goverened by a BSD-style
+// license that can be found in the LICENSE file.
+
+(function(scope) {
+ 'use strict';
+
+ var HTMLElement = scope.wrappers.HTMLElement;
+ var mixin = scope.mixin;
+ var registerWrapper = scope.registerWrapper;
+ var rewrap = scope.rewrap;
+ var unwrap = scope.unwrap;
+ var wrap = scope.wrap;
+
+ var OriginalHTMLOptionElement = window.HTMLOptionElement;
+
+ function trimText(s) {
+ return s.replace(/\s+/g, ' ').trim();
+ }
+
+ function HTMLOptionElement(node) {
+ HTMLElement.call(this, node);
+ }
+ HTMLOptionElement.prototype = Object.create(HTMLElement.prototype);
+ mixin(HTMLOptionElement.prototype, {
+ get text() {
+ return trimText(this.textContent);
+ },
+ set text(value) {
+ this.textContent = trimText(String(value));
+ },
+ get form() {
+ return wrap(unwrap(this).form);
+ }
+ });
+
+ registerWrapper(OriginalHTMLOptionElement, HTMLOptionElement,
+ document.createElement('option'));
+
+ function Option(text, value, defaultSelected, selected) {
+ if (!(this instanceof Option)) {
+ throw new TypeError(
+ 'DOM object constructor cannot be called as a function.');
+ }
+
+ var node = unwrap(document.createElement('option'));
+ HTMLElement.call(this, node);
+ rewrap(node, this);
+
+ if (text !== undefined)
+ node.text = text;
+ if (value !== undefined)
+ node.setAttribute('value', value);
+ if (defaultSelected === true)
+ node.setAttribute('selected', '');
+ node.selected = selected === true;
+ }
+
+ Option.prototype = HTMLOptionElement.prototype;
+
+ scope.wrappers.HTMLOptionElement = HTMLOptionElement;
+ scope.wrappers.Option = Option;
+})(this.ShadowDOMPolyfill);
+
+// Copyright 2013 The Polymer Authors. All rights reserved.
+// Use of this source code is goverened by a BSD-style
+// license that can be found in the LICENSE file.
+
+(function(scope) {
+ 'use strict';
+
+ var HTMLContentElement = scope.wrappers.HTMLContentElement;
+ var HTMLElement = scope.wrappers.HTMLElement;
+ var HTMLShadowElement = scope.wrappers.HTMLShadowElement;
+ var HTMLTemplateElement = scope.wrappers.HTMLTemplateElement;
+ var mixin = scope.mixin;
+ var registerWrapper = scope.registerWrapper;
+
+ var OriginalHTMLUnknownElement = window.HTMLUnknownElement;
+
+ function HTMLUnknownElement(node) {
+ switch (node.localName) {
+ case 'content':
+ return new HTMLContentElement(node);
+ case 'shadow':
+ return new HTMLShadowElement(node);
+ case 'template':
+ return new HTMLTemplateElement(node);
+ }
+ HTMLElement.call(this, node);
+ }
+ HTMLUnknownElement.prototype = Object.create(HTMLElement.prototype);
+ registerWrapper(OriginalHTMLUnknownElement, HTMLUnknownElement);
+ scope.wrappers.HTMLUnknownElement = HTMLUnknownElement;
+})(this.ShadowDOMPolyfill);
+// Copyright 2013 The Polymer Authors. All rights reserved.
+// Use of this source code is goverened by a BSD-style
+// license that can be found in the LICENSE file.
+
+(function(scope) {
+ 'use strict';
+
+ var mixin = scope.mixin;
+ var registerWrapper = scope.registerWrapper;
+ var unwrap = scope.unwrap;
+ var unwrapIfNeeded = scope.unwrapIfNeeded;
+ var wrap = scope.wrap;
+
+ var OriginalCanvasRenderingContext2D = window.CanvasRenderingContext2D;
+
+ function CanvasRenderingContext2D(impl) {
+ this.impl = impl;
+ }
+
+ mixin(CanvasRenderingContext2D.prototype, {
+ get canvas() {
+ return wrap(this.impl.canvas);
+ },
+
+ drawImage: function() {
+ arguments[0] = unwrapIfNeeded(arguments[0]);
+ this.impl.drawImage.apply(this.impl, arguments);
+ },
+
+ createPattern: function() {
+ arguments[0] = unwrap(arguments[0]);
+ return this.impl.createPattern.apply(this.impl, arguments);
+ }
+ });
+
+ registerWrapper(OriginalCanvasRenderingContext2D, CanvasRenderingContext2D);
+
+ scope.wrappers.CanvasRenderingContext2D = CanvasRenderingContext2D;
+})(this.ShadowDOMPolyfill);
+
+// Copyright 2013 The Polymer Authors. All rights reserved.
+// Use of this source code is goverened by a BSD-style
+// license that can be found in the LICENSE file.
+
+(function(scope) {
+ 'use strict';
+
+ var mixin = scope.mixin;
+ var registerWrapper = scope.registerWrapper;
+ var unwrapIfNeeded = scope.unwrapIfNeeded;
+ var wrap = scope.wrap;
+
+ var OriginalWebGLRenderingContext = window.WebGLRenderingContext;
+
+ // IE10 does not have WebGL.
+ if (!OriginalWebGLRenderingContext)
+ return;
+
+ function WebGLRenderingContext(impl) {
+ this.impl = impl;
+ }
+
+ mixin(WebGLRenderingContext.prototype, {
+ get canvas() {
+ return wrap(this.impl.canvas);
+ },
+
+ texImage2D: function() {
+ arguments[5] = unwrapIfNeeded(arguments[5]);
+ this.impl.texImage2D.apply(this.impl, arguments);
+ },
+
+ texSubImage2D: function() {
+ arguments[6] = unwrapIfNeeded(arguments[6]);
+ this.impl.texSubImage2D.apply(this.impl, arguments);
+ }
+ });
+
+ registerWrapper(OriginalWebGLRenderingContext, WebGLRenderingContext);
+
+ scope.wrappers.WebGLRenderingContext = WebGLRenderingContext;
+})(this.ShadowDOMPolyfill);
+
+// Copyright 2013 The Polymer Authors. All rights reserved.
+// Use of this source code is goverened by a BSD-style
+// license that can be found in the LICENSE file.
+
+(function(scope) {
+ 'use strict';
+
+ var GetElementsByInterface = scope.GetElementsByInterface;
+ var ParentNodeInterface = scope.ParentNodeInterface;
+ var SelectorsInterface = scope.SelectorsInterface;
+ var mixin = scope.mixin;
+ var registerObject = scope.registerObject;
+
+ var DocumentFragment = registerObject(document.createDocumentFragment());
+ mixin(DocumentFragment.prototype, ParentNodeInterface);
+ mixin(DocumentFragment.prototype, SelectorsInterface);
+ mixin(DocumentFragment.prototype, GetElementsByInterface);
+
+ var Text = registerObject(document.createTextNode(''));
+ var Comment = registerObject(document.createComment(''));
+
+ scope.wrappers.Comment = Comment;
+ scope.wrappers.DocumentFragment = DocumentFragment;
+ scope.wrappers.Text = Text;
+
+})(this.ShadowDOMPolyfill);
+
+// Copyright 2013 The Polymer Authors. All rights reserved.
+// Use of this source code is goverened by a BSD-style
+// license that can be found in the LICENSE file.
+
+(function(scope) {
+ 'use strict';
+
+ var DocumentFragment = scope.wrappers.DocumentFragment;
+ var elementFromPoint = scope.elementFromPoint;
+ var getInnerHTML = scope.getInnerHTML;
+ var mixin = scope.mixin;
+ var rewrap = scope.rewrap;
+ var setInnerHTML = scope.setInnerHTML;
+ var unwrap = scope.unwrap;
+
+ var shadowHostTable = new WeakMap();
+ var nextOlderShadowTreeTable = new WeakMap();
+
+ function ShadowRoot(hostWrapper) {
+ var node = unwrap(hostWrapper.impl.ownerDocument.createDocumentFragment());
+ DocumentFragment.call(this, node);
+
+ // createDocumentFragment associates the node with a wrapper
+ // DocumentFragment instance. Override that.
+ rewrap(node, this);
+
+ var oldShadowRoot = hostWrapper.shadowRoot;
+ nextOlderShadowTreeTable.set(this, oldShadowRoot);
+
+ shadowHostTable.set(this, hostWrapper);
+ }
+ ShadowRoot.prototype = Object.create(DocumentFragment.prototype);
+ mixin(ShadowRoot.prototype, {
+ get innerHTML() {
+ return getInnerHTML(this);
+ },
+ set innerHTML(value) {
+ setInnerHTML(this, value);
+ this.invalidateShadowRenderer();
+ },
+
+ get olderShadowRoot() {
+ return nextOlderShadowTreeTable.get(this) || null;
+ },
+
+ get host() {
+ return shadowHostTable.get(this) || null;
+ },
+
+ invalidateShadowRenderer: function() {
+ return shadowHostTable.get(this).invalidateShadowRenderer();
+ },
+
+ elementFromPoint: function(x, y) {
+ return elementFromPoint(this, this.ownerDocument, x, y);
+ },
+
+ getElementById: function(id) {
+ return this.querySelector('#' + id);
+ }
+ });
+
+ scope.wrappers.ShadowRoot = ShadowRoot;
+})(this.ShadowDOMPolyfill);
+// Copyright 2013 The Polymer Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style
+// license that can be found in the LICENSE file.
+
+(function(scope) {
+ 'use strict';
+
+ var Element = scope.wrappers.Element;
+ var HTMLContentElement = scope.wrappers.HTMLContentElement;
+ var HTMLShadowElement = scope.wrappers.HTMLShadowElement;
+ var Node = scope.wrappers.Node;
+ var ShadowRoot = scope.wrappers.ShadowRoot;
+ var assert = scope.assert;
+ var mixin = scope.mixin;
+ var muteMutationEvents = scope.muteMutationEvents;
+ var oneOf = scope.oneOf;
+ var unmuteMutationEvents = scope.unmuteMutationEvents;
+ var unwrap = scope.unwrap;
+ var wrap = scope.wrap;
+
+ /**
+ * Updates the fields of a wrapper to a snapshot of the logical DOM as needed.
+ * Up means parentNode
+ * Sideways means previous and next sibling.
+ * @param {!Node} wrapper
+ */
+ function updateWrapperUpAndSideways(wrapper) {
+ wrapper.previousSibling_ = wrapper.previousSibling;
+ wrapper.nextSibling_ = wrapper.nextSibling;
+ wrapper.parentNode_ = wrapper.parentNode;
+ }
+
+ /**
+ * Updates the fields of a wrapper to a snapshot of the logical DOM as needed.
+ * Down means first and last child
+ * @param {!Node} wrapper
+ */
+ function updateWrapperDown(wrapper) {
+ wrapper.firstChild_ = wrapper.firstChild;
+ wrapper.lastChild_ = wrapper.lastChild;
+ }
+
+ function updateAllChildNodes(parentNodeWrapper) {
+ assert(parentNodeWrapper instanceof Node);
+ for (var childWrapper = parentNodeWrapper.firstChild;
+ childWrapper;
+ childWrapper = childWrapper.nextSibling) {
+ updateWrapperUpAndSideways(childWrapper);
+ }
+ updateWrapperDown(parentNodeWrapper);
+ }
+
+ function insertBefore(parentNodeWrapper, newChildWrapper, refChildWrapper) {
+ var parentNode = unwrap(parentNodeWrapper);
+ var newChild = unwrap(newChildWrapper);
+ var refChild = refChildWrapper ? unwrap(refChildWrapper) : null;
+
+ remove(newChildWrapper);
+ updateWrapperUpAndSideways(newChildWrapper);
+
+ if (!refChildWrapper) {
+ parentNodeWrapper.lastChild_ = parentNodeWrapper.lastChild;
+ if (parentNodeWrapper.lastChild === parentNodeWrapper.firstChild)
+ parentNodeWrapper.firstChild_ = parentNodeWrapper.firstChild;
+
+ var lastChildWrapper = wrap(parentNode.lastChild);
+ if (lastChildWrapper)
+ lastChildWrapper.nextSibling_ = lastChildWrapper.nextSibling;
+ } else {
+ if (parentNodeWrapper.firstChild === refChildWrapper)
+ parentNodeWrapper.firstChild_ = refChildWrapper;
+
+ refChildWrapper.previousSibling_ = refChildWrapper.previousSibling;
+ }
+
+ parentNode.insertBefore(newChild, refChild);
+ }
+
+ function remove(nodeWrapper) {
+ var node = unwrap(nodeWrapper)
+ var parentNode = node.parentNode;
+ if (!parentNode)
+ return;
+
+ var parentNodeWrapper = wrap(parentNode);
+ updateWrapperUpAndSideways(nodeWrapper);
+
+ if (nodeWrapper.previousSibling)
+ nodeWrapper.previousSibling.nextSibling_ = nodeWrapper;
+ if (nodeWrapper.nextSibling)
+ nodeWrapper.nextSibling.previousSibling_ = nodeWrapper;
+
+ if (parentNodeWrapper.lastChild === nodeWrapper)
+ parentNodeWrapper.lastChild_ = nodeWrapper;
+ if (parentNodeWrapper.firstChild === nodeWrapper)
+ parentNodeWrapper.firstChild_ = nodeWrapper;
+
+ parentNode.removeChild(node);
+ }
+
+ var distributedChildNodesTable = new WeakMap();
+ var eventParentsTable = new WeakMap();
+ var insertionParentTable = new WeakMap();
+ var rendererForHostTable = new WeakMap();
+
+ function distributeChildToInsertionPoint(child, insertionPoint) {
+ getDistributedChildNodes(insertionPoint).push(child);
+ assignToInsertionPoint(child, insertionPoint);
+
+ var eventParents = eventParentsTable.get(child);
+ if (!eventParents)
+ eventParentsTable.set(child, eventParents = []);
+ eventParents.push(insertionPoint);
+ }
+
+ function resetDistributedChildNodes(insertionPoint) {
+ distributedChildNodesTable.set(insertionPoint, []);
+ }
+
+ function getDistributedChildNodes(insertionPoint) {
+ return distributedChildNodesTable.get(insertionPoint);
+ }
+
+ function getChildNodesSnapshot(node) {
+ var result = [], i = 0;
+ for (var child = node.firstChild; child; child = child.nextSibling) {
+ result[i++] = child;
+ }
+ return result;
+ }
+
+ /**
+ * Visits all nodes in the tree that fulfils the |predicate|. If the |visitor|
+ * function returns |false| the traversal is aborted.
+ * @param {!Node} tree
+ * @param {function(!Node) : boolean} predicate
+ * @param {function(!Node) : *} visitor
+ */
+ function visit(tree, predicate, visitor) {
+ // This operates on logical DOM.
+ for (var node = tree.firstChild; node; node = node.nextSibling) {
+ if (predicate(node)) {
+ if (visitor(node) === false)
+ return;
+ } else {
+ visit(node, predicate, visitor);
+ }
+ }
+ }
+
+ // Matching Insertion Points
+ // http://dvcs.w3.org/hg/webcomponents/raw-file/tip/spec/shadow/index.html#matching-insertion-points
+
+ // TODO(arv): Verify this... I don't remember why I picked this regexp.
+ var selectorMatchRegExp = /^[*.:#[a-zA-Z_|]/;
+
+ var allowedPseudoRegExp = new RegExp('^:(' + [
+ 'link',
+ 'visited',
+ 'target',
+ 'enabled',
+ 'disabled',
+ 'checked',
+ 'indeterminate',
+ 'nth-child',
+ 'nth-last-child',
+ 'nth-of-type',
+ 'nth-last-of-type',
+ 'first-child',
+ 'last-child',
+ 'first-of-type',
+ 'last-of-type',
+ 'only-of-type',
+ ].join('|') + ')');
+
+
+ /**
+ * @param {Element} node
+ * @oaram {Element} point The insertion point element.
+ * @return {boolean} Whether the node matches the insertion point.
+ */
+ function matchesCriteria(node, point) {
+ var select = point.getAttribute('select');
+ if (!select)
+ return true;
+
+ // Here we know the select attribute is a non empty string.
+ select = select.trim();
+ if (!select)
+ return true;
+
+ if (!(node instanceof Element))
+ return false;
+
+ // TODO(arv): This does not seem right. Need to check for a simple selector.
+ if (!selectorMatchRegExp.test(select))
+ return false;
+
+ if (select[0] === ':' && !allowedPseudoRegExp.test(select))
+ return false;
+
+ try {
+ return node.matches(select);
+ } catch (ex) {
+ // Invalid selector.
+ return false;
+ }
+ }
+
+ var request = oneOf(window, [
+ 'requestAnimationFrame',
+ 'mozRequestAnimationFrame',
+ 'webkitRequestAnimationFrame',
+ 'setTimeout'
+ ]);
+
+ var pendingDirtyRenderers = [];
+ var renderTimer;
+
+ function renderAllPending() {
+ for (var i = 0; i < pendingDirtyRenderers.length; i++) {
+ pendingDirtyRenderers[i].render();
+ }
+ pendingDirtyRenderers = [];
+ }
+
+ function handleRequestAnimationFrame() {
+ renderTimer = null;
+ renderAllPending();
+ }
+
+ /**
+ * Returns existing shadow renderer for a host or creates it if it is needed.
+ * @params {!Element} host
+ * @return {!ShadowRenderer}
+ */
+ function getRendererForHost(host) {
+ var renderer = rendererForHostTable.get(host);
+ if (!renderer) {
+ renderer = new ShadowRenderer(host);
+ rendererForHostTable.set(host, renderer);
+ }
+ return renderer;
+ }
+
+ function getShadowRootAncestor(node) {
+ for (; node; node = node.parentNode) {
+ if (node instanceof ShadowRoot)
+ return node;
+ }
+ return null;
+ }
+
+ function getRendererForShadowRoot(shadowRoot) {
+ return getRendererForHost(shadowRoot.host);
+ }
+
+ var spliceDiff = new ArraySplice();
+ spliceDiff.equals = function(renderNode, rawNode) {
+ return unwrap(renderNode.node) === rawNode;
+ };
+
+ /**
+ * RenderNode is used as an in memory "render tree". When we render the
+ * composed tree we create a tree of RenderNodes, then we diff this against
+ * the real DOM tree and make minimal changes as needed.
+ */
+ function RenderNode(node) {
+ this.skip = false;
+ this.node = node;
+ this.childNodes = [];
+ }
+
+ RenderNode.prototype = {
+ append: function(node) {
+ var rv = new RenderNode(node);
+ this.childNodes.push(rv);
+ return rv;
+ },
+
+ sync: function(opt_added) {
+ if (this.skip)
+ return;
+
+ var nodeWrapper = this.node;
+ // plain array of RenderNodes
+ var newChildren = this.childNodes;
+ // plain array of real nodes.
+ var oldChildren = getChildNodesSnapshot(unwrap(nodeWrapper));
+ var added = opt_added || new WeakMap();
+
+ var splices = spliceDiff.calculateSplices(newChildren, oldChildren);
+
+ var newIndex = 0, oldIndex = 0;
+ var lastIndex = 0;
+ for (var i = 0; i < splices.length; i++) {
+ var splice = splices[i];
+ for (; lastIndex < splice.index; lastIndex++) {
+ oldIndex++;
+ newChildren[newIndex++].sync(added);
+ }
+
+ var removedCount = splice.removed.length;
+ for (var j = 0; j < removedCount; j++) {
+ var wrapper = wrap(oldChildren[oldIndex++]);
+ if (!added.get(wrapper))
+ remove(wrapper);
+ }
+
+ var addedCount = splice.addedCount;
+ var refNode = oldChildren[oldIndex] && wrap(oldChildren[oldIndex]);
+ for (var j = 0; j < addedCount; j++) {
+ var newChildRenderNode = newChildren[newIndex++];
+ var newChildWrapper = newChildRenderNode.node;
+ insertBefore(nodeWrapper, newChildWrapper, refNode);
+
+ // Keep track of added so that we do not remove the node after it
+ // has been added.
+ added.set(newChildWrapper, true);
+
+ newChildRenderNode.sync(added);
+ }
+
+ lastIndex += addedCount;
+ }
+
+ for (var i = lastIndex; i < newChildren.length; i++) {
+ newChildren[i].sync(added);
+ }
+ }
+ };
+
+ function ShadowRenderer(host) {
+ this.host = host;
+ this.dirty = false;
+ this.invalidateAttributes();
+ this.associateNode(host);
+ }
+
+ ShadowRenderer.prototype = {
+
+ // http://dvcs.w3.org/hg/webcomponents/raw-file/tip/spec/shadow/index.html#rendering-shadow-trees
+ render: function(opt_renderNode) {
+ if (!this.dirty)
+ return;
+
+ this.invalidateAttributes();
+ this.treeComposition();
+
+ var host = this.host;
+ var shadowRoot = host.shadowRoot;
+
+ this.associateNode(host);
+ var topMostRenderer = !renderNode;
+ var renderNode = opt_renderNode || new RenderNode(host);
+
+ for (var node = shadowRoot.firstChild; node; node = node.nextSibling) {
+ this.renderNode(shadowRoot, renderNode, node, false);
+ }
+
+ if (topMostRenderer) {
+ //muteMutationEvents();
+ renderNode.sync();
+ //unmuteMutationEvents();
+ }
+
+ this.dirty = false;
+ },
+
+ invalidate: function() {
+ if (!this.dirty) {
+ this.dirty = true;
+ pendingDirtyRenderers.push(this);
+ if (renderTimer)
+ return;
+ renderTimer = window[request](handleRequestAnimationFrame, 0);
+ }
+ },
+
+ renderNode: function(shadowRoot, renderNode, node, isNested) {
+ if (isShadowHost(node)) {
+ renderNode = renderNode.append(node);
+ var renderer = getRendererForHost(node);
+ renderer.dirty = true; // Need to rerender due to reprojection.
+ renderer.render(renderNode);
+ } else if (isInsertionPoint(node)) {
+ this.renderInsertionPoint(shadowRoot, renderNode, node, isNested);
+ } else if (isShadowInsertionPoint(node)) {
+ this.renderShadowInsertionPoint(shadowRoot, renderNode, node);
+ } else {
+ this.renderAsAnyDomTree(shadowRoot, renderNode, node, isNested);
+ }
+ },
+
+ renderAsAnyDomTree: function(shadowRoot, renderNode, node, isNested) {
+ renderNode = renderNode.append(node);
+
+ if (isShadowHost(node)) {
+ var renderer = getRendererForHost(node);
+ renderNode.skip = !renderer.dirty;
+ renderer.render(renderNode);
+ } else {
+ for (var child = node.firstChild; child; child = child.nextSibling) {
+ this.renderNode(shadowRoot, renderNode, child, isNested);
+ }
+ }
+ },
+
+ renderInsertionPoint: function(shadowRoot, renderNode, insertionPoint,
+ isNested) {
+ var distributedChildNodes = getDistributedChildNodes(insertionPoint);
+ if (distributedChildNodes.length) {
+ this.associateNode(insertionPoint);
+
+ for (var i = 0; i < distributedChildNodes.length; i++) {
+ var child = distributedChildNodes[i];
+ if (isInsertionPoint(child) && isNested)
+ this.renderInsertionPoint(shadowRoot, renderNode, child, isNested);
+ else
+ this.renderAsAnyDomTree(shadowRoot, renderNode, child, isNested);
+ }
+ } else {
+ this.renderFallbackContent(shadowRoot, renderNode, insertionPoint);
+ }
+ this.associateNode(insertionPoint.parentNode);
+ },
+
+ renderShadowInsertionPoint: function(shadowRoot, renderNode,
+ shadowInsertionPoint) {
+ var nextOlderTree = shadowRoot.olderShadowRoot;
+ if (nextOlderTree) {
+ assignToInsertionPoint(nextOlderTree, shadowInsertionPoint);
+ this.associateNode(shadowInsertionPoint.parentNode);
+ for (var node = nextOlderTree.firstChild;
+ node;
+ node = node.nextSibling) {
+ this.renderNode(nextOlderTree, renderNode, node, true);
+ }
+ } else {
+ this.renderFallbackContent(shadowRoot, renderNode,
+ shadowInsertionPoint);
+ }
+ },
+
+ renderFallbackContent: function(shadowRoot, renderNode, fallbackHost) {
+ this.associateNode(fallbackHost);
+ this.associateNode(fallbackHost.parentNode);
+ for (var node = fallbackHost.firstChild; node; node = node.nextSibling) {
+ this.renderAsAnyDomTree(shadowRoot, renderNode, node, false);
+ }
+ },
+
+ /**
+ * Invalidates the attributes used to keep track of which attributes may
+ * cause the renderer to be invalidated.
+ */
+ invalidateAttributes: function() {
+ this.attributes = Object.create(null);
+ },
+
+ /**
+ * Parses the selector and makes this renderer dependent on the attribute
+ * being used in the selector.
+ * @param {string} selector
+ */
+ updateDependentAttributes: function(selector) {
+ if (!selector)
+ return;
+
+ var attributes = this.attributes;
+
+ // .class
+ if (/\.\w+/.test(selector))
+ attributes['class'] = true;
+
+ // #id
+ if (/#\w+/.test(selector))
+ attributes['id'] = true;
+
+ selector.replace(/\[\s*([^\s=\|~\]]+)/g, function(_, name) {
+ attributes[name] = true;
+ });
+
+ // Pseudo selectors have been removed from the spec.
+ },
+
+ dependsOnAttribute: function(name) {
+ return this.attributes[name];
+ },
+
+ // http://dvcs.w3.org/hg/webcomponents/raw-file/tip/spec/shadow/index.html#dfn-distribution-algorithm
+ distribute: function(tree, pool) {
+ var self = this;
+
+ visit(tree, isActiveInsertionPoint,
+ function(insertionPoint) {
+ resetDistributedChildNodes(insertionPoint);
+ self.updateDependentAttributes(
+ insertionPoint.getAttribute('select'));
+
+ for (var i = 0; i < pool.length; i++) { // 1.2
+ var node = pool[i]; // 1.2.1
+ if (node === undefined) // removed
+ continue;
+ if (matchesCriteria(node, insertionPoint)) { // 1.2.2
+ distributeChildToInsertionPoint(node, insertionPoint); // 1.2.2.1
+ pool[i] = undefined; // 1.2.2.2
+ }
+ }
+ });
+ },
+
+ // http://dvcs.w3.org/hg/webcomponents/raw-file/tip/spec/shadow/index.html#dfn-tree-composition
+ treeComposition: function () {
+ var shadowHost = this.host;
+ var tree = shadowHost.shadowRoot; // 1.
+ var pool = []; // 2.
+
+ for (var child = shadowHost.firstChild;
+ child;
+ child = child.nextSibling) { // 3.
+ if (isInsertionPoint(child)) { // 3.2.
+ var reprojected = getDistributedChildNodes(child); // 3.2.1.
+ // if reprojected is undef... reset it?
+ if (!reprojected || !reprojected.length) // 3.2.2.
+ reprojected = getChildNodesSnapshot(child);
+ pool.push.apply(pool, reprojected); // 3.2.3.
+ } else {
+ pool.push(child); // 3.3.
+ }
+ }
+
+ var shadowInsertionPoint, point;
+ while (tree) { // 4.
+ // 4.1.
+ shadowInsertionPoint = undefined; // Reset every iteration.
+ visit(tree, isActiveShadowInsertionPoint, function(point) {
+ shadowInsertionPoint = point;
+ return false;
+ });
+ point = shadowInsertionPoint;
+
+ this.distribute(tree, pool); // 4.2.
+ if (point) { // 4.3.
+ var nextOlderTree = tree.olderShadowRoot; // 4.3.1.
+ if (!nextOlderTree) {
+ break; // 4.3.1.1.
+ } else {
+ tree = nextOlderTree; // 4.3.2.2.
+ assignToInsertionPoint(tree, point); // 4.3.2.2.
+ continue; // 4.3.2.3.
+ }
+ } else {
+ break; // 4.4.
+ }
+ }
+ },
+
+ associateNode: function(node) {
+ node.impl.polymerShadowRenderer_ = this;
+ }
+ };
+
+ function isInsertionPoint(node) {
+ // Should this include <shadow>?
+ return node instanceof HTMLContentElement;
+ }
+
+ function isActiveInsertionPoint(node) {
+ // <content> inside another <content> or <shadow> is considered inactive.
+ return node instanceof HTMLContentElement;
+ }
+
+ function isShadowInsertionPoint(node) {
+ return node instanceof HTMLShadowElement;
+ }
+
+ function isActiveShadowInsertionPoint(node) {
+ // <shadow> inside another <content> or <shadow> is considered inactive.
+ return node instanceof HTMLShadowElement;
+ }
+
+ function isShadowHost(shadowHost) {
+ return shadowHost.shadowRoot;
+ }
+
+ function getShadowTrees(host) {
+ var trees = [];
+
+ for (var tree = host.shadowRoot; tree; tree = tree.olderShadowRoot) {
+ trees.push(tree);
+ }
+ return trees;
+ }
+
+ function assignToInsertionPoint(tree, point) {
+ insertionParentTable.set(tree, point);
+ }
+
+ // http://dvcs.w3.org/hg/webcomponents/raw-file/tip/spec/shadow/index.html#rendering-shadow-trees
+ function render(host) {
+ new ShadowRenderer(host).render();
+ };
+
+ // Need to rerender shadow host when:
+ //
+ // - a direct child to the ShadowRoot is added or removed
+ // - a direct child to the host is added or removed
+ // - a new shadow root is created
+ // - a direct child to a content/shadow element is added or removed
+ // - a sibling to a content/shadow element is added or removed
+ // - content[select] is changed
+ // - an attribute in a direct child to a host is modified
+
+ /**
+ * This gets called when a node was added or removed to it.
+ */
+ Node.prototype.invalidateShadowRenderer = function(force) {
+ var renderer = this.impl.polymerShadowRenderer_;
+ if (renderer) {
+ renderer.invalidate();
+ return true;
+ }
+
+ return false;
+ };
+
+ HTMLContentElement.prototype.getDistributedNodes = function() {
+ // TODO(arv): We should only rerender the dirty ancestor renderers (from
+ // the root and down).
+ renderAllPending();
+ return getDistributedChildNodes(this);
+ };
+
+ HTMLShadowElement.prototype.nodeWasAdded_ =
+ HTMLContentElement.prototype.nodeWasAdded_ = function() {
+ // Invalidate old renderer if any.
+ this.invalidateShadowRenderer();
+
+ var shadowRoot = getShadowRootAncestor(this);
+ var renderer;
+ if (shadowRoot)
+ renderer = getRendererForShadowRoot(shadowRoot);
+ this.impl.polymerShadowRenderer_ = renderer;
+ if (renderer)
+ renderer.invalidate();
+ };
+
+ scope.eventParentsTable = eventParentsTable;
+ scope.getRendererForHost = getRendererForHost;
+ scope.getShadowTrees = getShadowTrees;
+ scope.insertionParentTable = insertionParentTable;
+ scope.renderAllPending = renderAllPending;
+
+ // Exposed for testing
+ scope.visual = {
+ insertBefore: insertBefore,
+ remove: remove,
+ };
+
+})(this.ShadowDOMPolyfill);
+// Copyright 2013 The Polymer Authors. All rights reserved.
+// Use of this source code is goverened by a BSD-style
+// license that can be found in the LICENSE file.
+
+(function(scope) {
+ 'use strict';
+
+ var HTMLElement = scope.wrappers.HTMLElement;
+ var assert = scope.assert;
+ var mixin = scope.mixin;
+ var registerWrapper = scope.registerWrapper;
+ var unwrap = scope.unwrap;
+ var wrap = scope.wrap;
+
+ var elementsWithFormProperty = [
+ 'HTMLButtonElement',
+ 'HTMLFieldSetElement',
+ 'HTMLInputElement',
+ 'HTMLKeygenElement',
+ 'HTMLLabelElement',
+ 'HTMLLegendElement',
+ 'HTMLObjectElement',
+ // HTMLOptionElement is handled in HTMLOptionElement.js
+ 'HTMLOutputElement',
+ 'HTMLSelectElement',
+ 'HTMLTextAreaElement',
+ ];
+
+ function createWrapperConstructor(name) {
+ if (!window[name])
+ return;
+
+ // Ensure we are not overriding an already existing constructor.
+ assert(!scope.wrappers[name]);
+
+ var GeneratedWrapper = function(node) {
+ // At this point all of them extend HTMLElement.
+ HTMLElement.call(this, node);
+ }
+ GeneratedWrapper.prototype = Object.create(HTMLElement.prototype);
+ mixin(GeneratedWrapper.prototype, {
+ get form() {
+ return wrap(unwrap(this).form);
+ },
+ });
+
+ registerWrapper(window[name], GeneratedWrapper,
+ document.createElement(name.slice(4, -7)));
+ scope.wrappers[name] = GeneratedWrapper;
+ }
+
+ elementsWithFormProperty.forEach(createWrapperConstructor);
+
+})(this.ShadowDOMPolyfill);
+
+// Copyright 2013 The Polymer Authors. All rights reserved.
+// Use of this source code is goverened by a BSD-style
+// license that can be found in the LICENSE file.
+
+(function(scope) {
+ 'use strict';
+
+ var GetElementsByInterface = scope.GetElementsByInterface;
+ var Node = scope.wrappers.Node;
+ var ParentNodeInterface = scope.ParentNodeInterface;
+ var SelectorsInterface = scope.SelectorsInterface;
+ var ShadowRoot = scope.wrappers.ShadowRoot;
+ var defineWrapGetter = scope.defineWrapGetter;
+ var elementFromPoint = scope.elementFromPoint;
+ var forwardMethodsToWrapper = scope.forwardMethodsToWrapper;
+ var matchesName = scope.matchesName;
+ var mixin = scope.mixin;
+ var registerWrapper = scope.registerWrapper;
+ var unwrap = scope.unwrap;
+ var wrap = scope.wrap;
+ var wrapEventTargetMethods = scope.wrapEventTargetMethods;
+ var wrapNodeList = scope.wrapNodeList;
+
+ var implementationTable = new WeakMap();
+
+ function Document(node) {
+ Node.call(this, node);
+ }
+ Document.prototype = Object.create(Node.prototype);
+
+ defineWrapGetter(Document, 'documentElement');
+
+ // Conceptually both body and head can be in a shadow but suporting that seems
+ // overkill at this point.
+ defineWrapGetter(Document, 'body');
+ defineWrapGetter(Document, 'head');
+
+ // document cannot be overridden so we override a bunch of its methods
+ // directly on the instance.
+
+ function wrapMethod(name) {
+ var original = document[name];
+ Document.prototype[name] = function() {
+ return wrap(original.apply(this.impl, arguments));
+ };
+ }
+
+ [
+ 'createComment',
+ 'createDocumentFragment',
+ 'createElement',
+ 'createElementNS',
+ 'createEvent',
+ 'createEventNS',
+ 'createRange',
+ 'createTextNode',
+ 'getElementById',
+ ].forEach(wrapMethod);
+
+ var originalAdoptNode = document.adoptNode;
+
+ function adoptNodeNoRemove(node, doc) {
+ originalAdoptNode.call(doc.impl, unwrap(node));
+ adoptSubtree(node, doc);
+ }
+
+ function adoptSubtree(node, doc) {
+ if (node.shadowRoot)
+ doc.adoptNode(node.shadowRoot);
+ if (node instanceof ShadowRoot)
+ adoptOlderShadowRoots(node, doc);
+ for (var child = node.firstChild; child; child = child.nextSibling) {
+ adoptSubtree(child, doc);
+ }
+ }
+
+ function adoptOlderShadowRoots(shadowRoot, doc) {
+ var oldShadowRoot = shadowRoot.olderShadowRoot;
+ if (oldShadowRoot)
+ doc.adoptNode(oldShadowRoot);
+ }
+
+ mixin(Document.prototype, {
+ adoptNode: function(node) {
+ if (node.parentNode)
+ node.parentNode.removeChild(node);
+ adoptNodeNoRemove(node, this);
+ return node;
+ },
+ elementFromPoint: function(x, y) {
+ return elementFromPoint(this, this, x, y);
+ }
+ });
+
+ if (document.register) {
+ var originalRegister = document.register;
+ Document.prototype.register = function(tagName, object) {
+ var prototype = object.prototype;
+
+ // If we already used the object as a prototype for another custom
+ // element.
+ if (scope.nativePrototypeTable.get(prototype)) {
+ // TODO(arv): DOMException
+ throw new Error('NotSupportedError');
+ }
+
+ // Find first object on the prototype chain that already have a native
+ // prototype. Keep track of all the objects before that so we can create
+ // a similar structure for the native case.
+ var proto = Object.getPrototypeOf(prototype);
+ var nativePrototype;
+ var prototypes = [];
+ while (proto) {
+ nativePrototype = scope.nativePrototypeTable.get(proto);
+ if (nativePrototype)
+ break;
+ prototypes.push(proto);
+ proto = Object.getPrototypeOf(proto);
+ }
+
+ if (!nativePrototype) {
+ // TODO(arv): DOMException
+ throw new Error('NotSupportedError');
+ }
+
+ // This works by creating a new prototype object that is empty, but has
+ // the native prototype as its proto. The original prototype object
+ // passed into register is used as the wrapper prototype.
+
+ var newPrototype = Object.create(nativePrototype);
+ for (var i = prototypes.length - 1; i >= 0; i--) {
+ newPrototype = Object.create(newPrototype);
+ }
+
+ // Add callbacks if present.
+ // Names are taken from:
+ // https://code.google.com/p/chromium/codesearch#chromium/src/third_party/WebKit/Source/bindings/v8/CustomElementConstructorBuilder.cpp&sq=package:chromium&type=cs&l=156
+ // and not from the spec since the spec is out of date.
+ [
+ 'createdCallback',
+ 'enteredViewCallback',
+ 'leftViewCallback',
+ 'attributeChangedCallback',
+ ].forEach(function(name) {
+ var f = prototype[name];
+ if (!f)
+ return;
+ newPrototype[name] = function() {
+ f.apply(wrap(this), arguments);
+ };
+ });
+
+ var p = {prototype: newPrototype};
+ if (object.extends)
+ p.extends = object.extends;
+ var nativeConstructor = originalRegister.call(unwrap(this), tagName, p);
+
+ function GeneratedWrapper(node) {
+ if (!node) {
+ if (object.extends) {
+ return document.createElement(object.extends, tagName);
+ } else {
+ return document.createElement(tagName);
+ }
+ }
+ this.impl = node;
+ }
+ GeneratedWrapper.prototype = prototype;
+ GeneratedWrapper.prototype.constructor = GeneratedWrapper;
+
+ scope.constructorTable.set(newPrototype, GeneratedWrapper);
+ scope.nativePrototypeTable.set(prototype, newPrototype);
+
+ return GeneratedWrapper;
+ };
+
+ forwardMethodsToWrapper([
+ window.HTMLDocument || window.Document, // Gecko adds these to HTMLDocument
+ ], [
+ 'register',
+ ]);
+ }
+
+ // We also override some of the methods on document.body and document.head
+ // for convenience.
+ forwardMethodsToWrapper([
+ window.HTMLBodyElement,
+ window.HTMLDocument || window.Document, // Gecko adds these to HTMLDocument
+ window.HTMLHeadElement,
+ window.HTMLHtmlElement,
+ ], [
+ 'appendChild',
+ 'compareDocumentPosition',
+ 'contains',
+ 'getElementsByClassName',
+ 'getElementsByTagName',
+ 'getElementsByTagNameNS',
+ 'insertBefore',
+ 'querySelector',
+ 'querySelectorAll',
+ 'removeChild',
+ 'replaceChild',
+ matchesName,
+ ]);
+
+ forwardMethodsToWrapper([
+ window.HTMLDocument || window.Document, // Gecko adds these to HTMLDocument
+ ], [
+ 'adoptNode',
+ 'contains',
+ 'createComment',
+ 'createDocumentFragment',
+ 'createElement',
+ 'createElementNS',
+ 'createEvent',
+ 'createEventNS',
+ 'createRange',
+ 'createTextNode',
+ 'elementFromPoint',
+ 'getElementById',
+ ]);
+
+ mixin(Document.prototype, GetElementsByInterface);
+ mixin(Document.prototype, ParentNodeInterface);
+ mixin(Document.prototype, SelectorsInterface);
+
+ mixin(Document.prototype, {
+ get implementation() {
+ var implementation = implementationTable.get(this);
+ if (implementation)
+ return implementation;
+ implementation =
+ new DOMImplementation(unwrap(this).implementation);
+ implementationTable.set(this, implementation);
+ return implementation;
+ }
+ });
+
+ registerWrapper(window.Document, Document,
+ document.implementation.createHTMLDocument(''));
+
+ // Both WebKit and Gecko uses HTMLDocument for document. HTML5/DOM only has
+ // one Document interface and IE implements the standard correctly.
+ if (window.HTMLDocument)
+ registerWrapper(window.HTMLDocument, Document);
+
+ wrapEventTargetMethods([
+ window.HTMLBodyElement,
+ window.HTMLDocument || window.Document, // Gecko adds these to HTMLDocument
+ window.HTMLHeadElement,
+ ]);
+
+ function DOMImplementation(impl) {
+ this.impl = impl;
+ }
+
+ function wrapImplMethod(constructor, name) {
+ var original = document.implementation[name];
+ constructor.prototype[name] = function() {
+ return wrap(original.apply(this.impl, arguments));
+ };
+ }
+
+ function forwardImplMethod(constructor, name) {
+ var original = document.implementation[name];
+ constructor.prototype[name] = function() {
+ return original.apply(this.impl, arguments);
+ };
+ }
+
+ wrapImplMethod(DOMImplementation, 'createDocumentType');
+ wrapImplMethod(DOMImplementation, 'createDocument');
+ wrapImplMethod(DOMImplementation, 'createHTMLDocument');
+ forwardImplMethod(DOMImplementation, 'hasFeature');
+
+ registerWrapper(window.DOMImplementation, DOMImplementation);
+
+ forwardMethodsToWrapper([
+ window.DOMImplementation,
+ ], [
+ 'createDocumentType',
+ 'createDocument',
+ 'createHTMLDocument',
+ 'hasFeature',
+ ]);
+
+ scope.adoptNodeNoRemove = adoptNodeNoRemove;
+ scope.wrappers.DOMImplementation = DOMImplementation;
+ scope.wrappers.Document = Document;
+
+})(this.ShadowDOMPolyfill);
+
+// Copyright 2013 The Polymer Authors. All rights reserved.
+// Use of this source code is goverened by a BSD-style
+// license that can be found in the LICENSE file.
+
+(function(scope) {
+ 'use strict';
+
+ var EventTarget = scope.wrappers.EventTarget;
+ var mixin = scope.mixin;
+ var registerWrapper = scope.registerWrapper;
+ var unwrap = scope.unwrap;
+ var unwrapIfNeeded = scope.unwrapIfNeeded;
+ var wrap = scope.wrap;
+ var renderAllPending = scope.renderAllPending;
+
+ var OriginalWindow = window.Window;
+
+ function Window(impl) {
+ EventTarget.call(this, impl);
+ }
+ Window.prototype = Object.create(EventTarget.prototype);
+
+ var originalGetComputedStyle = window.getComputedStyle;
+ OriginalWindow.prototype.getComputedStyle = function(el, pseudo) {
+ renderAllPending();
+ return originalGetComputedStyle.call(this || window, unwrapIfNeeded(el),
+ pseudo);
+ };
+
+ ['addEventListener', 'removeEventListener', 'dispatchEvent'].forEach(
+ function(name) {
+ OriginalWindow.prototype[name] = function() {
+ var w = wrap(this || window);
+ return w[name].apply(w, arguments);
+ };
+ });
+
+ mixin(Window.prototype, {
+ getComputedStyle: function(el, pseudo) {
+ return originalGetComputedStyle.call(unwrap(this), unwrapIfNeeded(el),
+ pseudo);
+ }
+ });
+
+ registerWrapper(OriginalWindow, Window);
+
+ scope.wrappers.Window = Window;
+
+})(this.ShadowDOMPolyfill);
+
+// Copyright 2013 The Polymer Authors. All rights reserved.
+// Use of this source code is goverened by a BSD-style
+// license that can be found in the LICENSE file.
+
+(function(scope) {
+ 'use strict';
+
+ var defineGetter = scope.defineGetter;
+ var defineWrapGetter = scope.defineWrapGetter;
+ var registerWrapper = scope.registerWrapper;
+ var unwrapIfNeeded = scope.unwrapIfNeeded;
+ var wrapNodeList = scope.wrapNodeList;
+ var wrappers = scope.wrappers;
+
+ var OriginalMutationObserver = window.MutationObserver ||
+ window.WebKitMutationObserver;
+
+ if (!OriginalMutationObserver)
+ return;
+
+ var OriginalMutationRecord = window.MutationRecord;
+
+ function MutationRecord(impl) {
+ this.impl = impl;
+ }
+
+ MutationRecord.prototype = {
+ get addedNodes() {
+ return wrapNodeList(this.impl.addedNodes);
+ },
+ get removedNodes() {
+ return wrapNodeList(this.impl.removedNodes);
+ }
+ };
+
+ ['target', 'previousSibling', 'nextSibling'].forEach(function(name) {
+ defineWrapGetter(MutationRecord, name);
+ });
+
+ // WebKit/Blink treats these as instance properties so we override
+ [
+ 'type',
+ 'attributeName',
+ 'attributeNamespace',
+ 'oldValue'
+ ].forEach(function(name) {
+ defineGetter(MutationRecord, name, function() {
+ return this.impl[name];
+ });
+ });
+
+ if (OriginalMutationRecord)
+ registerWrapper(OriginalMutationRecord, MutationRecord);
+
+ function wrapRecord(record) {
+ return new MutationRecord(record);
+ }
+
+ function wrapRecords(records) {
+ return records.map(wrapRecord);
+ }
+
+ function MutationObserver(callback) {
+ var self = this;
+ this.impl = new OriginalMutationObserver(function(mutations, observer) {
+ callback.call(self, wrapRecords(mutations), self);
+ });
+ }
+
+ var OriginalNode = window.Node;
+
+ MutationObserver.prototype = {
+ observe: function(target, options) {
+ this.impl.observe(unwrapIfNeeded(target), options);
+ },
+ disconnect: function() {
+ this.impl.disconnect();
+ },
+ takeRecords: function() {
+ return wrapRecords(this.impl.takeRecords());
+ }
+ };
+
+ scope.wrappers.MutationObserver = MutationObserver;
+ scope.wrappers.MutationRecord = MutationRecord;
+
+})(this.ShadowDOMPolyfill);
+
+// Copyright 2013 The Polymer Authors. All rights reserved.
+// Use of this source code is goverened by a BSD-style
+// license that can be found in the LICENSE file.
+
+(function(scope) {
+ 'use strict';
+
+ var registerWrapper = scope.registerWrapper;
+ var unwrap = scope.unwrap;
+ var unwrapIfNeeded = scope.unwrapIfNeeded;
+ var wrap = scope.wrap;
+
+ var OriginalRange = window.Range;
+
+ function Range(impl) {
+ this.impl = impl;
+ }
+ Range.prototype = {
+ get startContainer() {
+ return wrap(this.impl.startContainer);
+ },
+ get endContainer() {
+ return wrap(this.impl.endContainer);
+ },
+ get commonAncestorContainer() {
+ return wrap(this.impl.commonAncestorContainer);
+ },
+ setStart: function(refNode,offset) {
+ this.impl.setStart(unwrapIfNeeded(refNode), offset);
+ },
+ setEnd: function(refNode,offset) {
+ this.impl.setEnd(unwrapIfNeeded(refNode), offset);
+ },
+ setStartBefore: function(refNode) {
+ this.impl.setStartBefore(unwrapIfNeeded(refNode));
+ },
+ setStartAfter: function(refNode) {
+ this.impl.setStartAfter(unwrapIfNeeded(refNode));
+ },
+ setEndBefore: function(refNode) {
+ this.impl.setEndBefore(unwrapIfNeeded(refNode));
+ },
+ setEndAfter: function(refNode) {
+ this.impl.setEndAfter(unwrapIfNeeded(refNode));
+ },
+ selectNode: function(refNode) {
+ this.impl.selectNode(unwrapIfNeeded(refNode));
+ },
+ selectNodeContents: function(refNode) {
+ this.impl.selectNodeContents(unwrapIfNeeded(refNode));
+ },
+ compareBoundaryPoints: function(how, sourceRange) {
+ return this.impl.compareBoundaryPoints(how, unwrap(sourceRange));
+ },
+ extractContents: function() {
+ return wrap(this.impl.extractContents());
+ },
+ cloneContents: function() {
+ return wrap(this.impl.cloneContents());
+ },
+ insertNode: function(node) {
+ this.impl.insertNode(unwrapIfNeeded(node));
+ },
+ surroundContents: function(newParent) {
+ this.impl.surroundContents(unwrapIfNeeded(newParent));
+ },
+ cloneRange: function() {
+ return wrap(this.impl.cloneRange());
+ },
+ isPointInRange: function(node, offset) {
+ return this.impl.isPointInRange(unwrapIfNeeded(node), offset);
+ },
+ comparePoint: function(node, offset) {
+ return this.impl.comparePoint(unwrapIfNeeded(node), offset);
+ },
+ intersectsNode: function(node) {
+ return this.impl.intersectsNode(unwrapIfNeeded(node));
+ }
+ };
+
+ // IE9 does not have createContextualFragment.
+ if (OriginalRange.prototype.createContextualFragment) {
+ Range.prototype.createContextualFragment = function(html) {
+ return wrap(this.impl.createContextualFragment(html));
+ };
+ }
+
+ registerWrapper(window.Range, Range);
+
+ scope.wrappers.Range = Range;
+
+})(this.ShadowDOMPolyfill);
+
+// Copyright 2013 The Polymer Authors. All rights reserved.
+// Use of this source code is goverened by a BSD-style
+// license that can be found in the LICENSE file.
+
+(function(scope) {
+ 'use strict';
+
+ var isWrapperFor = scope.isWrapperFor;
+
+ // This is a list of the elements we currently override the global constructor
+ // for.
+ var elements = {
+ 'a': 'HTMLAnchorElement',
+ 'applet': 'HTMLAppletElement',
+ 'area': 'HTMLAreaElement',
+ 'br': 'HTMLBRElement',
+ 'base': 'HTMLBaseElement',
+ 'body': 'HTMLBodyElement',
+ 'button': 'HTMLButtonElement',
+ // 'command': 'HTMLCommandElement', // Not fully implemented in Gecko.
+ 'dl': 'HTMLDListElement',
+ 'datalist': 'HTMLDataListElement',
+ 'data': 'HTMLDataElement',
+ 'dir': 'HTMLDirectoryElement',
+ 'div': 'HTMLDivElement',
+ 'embed': 'HTMLEmbedElement',
+ 'fieldset': 'HTMLFieldSetElement',
+ 'font': 'HTMLFontElement',
+ 'form': 'HTMLFormElement',
+ 'frame': 'HTMLFrameElement',
+ 'frameset': 'HTMLFrameSetElement',
+ 'hr': 'HTMLHRElement',
+ 'head': 'HTMLHeadElement',
+ 'h1': 'HTMLHeadingElement',
+ 'html': 'HTMLHtmlElement',
+ 'iframe': 'HTMLIFrameElement',
+ 'input': 'HTMLInputElement',
+ 'li': 'HTMLLIElement',
+ 'label': 'HTMLLabelElement',
+ 'legend': 'HTMLLegendElement',
+ 'link': 'HTMLLinkElement',
+ 'map': 'HTMLMapElement',
+ 'marquee': 'HTMLMarqueeElement',
+ 'menu': 'HTMLMenuElement',
+ 'menuitem': 'HTMLMenuItemElement',
+ 'meta': 'HTMLMetaElement',
+ 'meter': 'HTMLMeterElement',
+ 'del': 'HTMLModElement',
+ 'ol': 'HTMLOListElement',
+ 'object': 'HTMLObjectElement',
+ 'optgroup': 'HTMLOptGroupElement',
+ 'option': 'HTMLOptionElement',
+ 'output': 'HTMLOutputElement',
+ 'p': 'HTMLParagraphElement',
+ 'param': 'HTMLParamElement',
+ 'pre': 'HTMLPreElement',
+ 'progress': 'HTMLProgressElement',
+ 'q': 'HTMLQuoteElement',
+ 'script': 'HTMLScriptElement',
+ 'select': 'HTMLSelectElement',
+ 'source': 'HTMLSourceElement',
+ 'span': 'HTMLSpanElement',
+ 'style': 'HTMLStyleElement',
+ 'time': 'HTMLTimeElement',
+ 'caption': 'HTMLTableCaptionElement',
+ // WebKit and Moz are wrong:
+ // https://bugs.webkit.org/show_bug.cgi?id=111469
+ // https://bugzilla.mozilla.org/show_bug.cgi?id=848096
+ // 'td': 'HTMLTableCellElement',
+ 'col': 'HTMLTableColElement',
+ 'table': 'HTMLTableElement',
+ 'tr': 'HTMLTableRowElement',
+ 'thead': 'HTMLTableSectionElement',
+ 'tbody': 'HTMLTableSectionElement',
+ 'textarea': 'HTMLTextAreaElement',
+ 'track': 'HTMLTrackElement',
+ 'title': 'HTMLTitleElement',
+ 'ul': 'HTMLUListElement',
+ 'video': 'HTMLVideoElement',
+ };
+
+ function overrideConstructor(tagName) {
+ var nativeConstructorName = elements[tagName];
+ var nativeConstructor = window[nativeConstructorName];
+ if (!nativeConstructor)
+ return;
+ var element = document.createElement(tagName);
+ var wrapperConstructor = element.constructor;
+ window[nativeConstructorName] = wrapperConstructor;
+ }
+
+ Object.keys(elements).forEach(overrideConstructor);
+
+ Object.getOwnPropertyNames(scope.wrappers).forEach(function(name) {
+ window[name] = scope.wrappers[name]
+ });
+
+ // Export for testing.
+ scope.knownElements = elements;
+
+})(this.ShadowDOMPolyfill);
+/*
+ * Copyright 2013 The Polymer Authors. All rights reserved.
+ * Use of this source code is governed by a BSD-style
+ * license that can be found in the LICENSE file.
+ */
+(function() {
+ var ShadowDOMPolyfill = window.ShadowDOMPolyfill;
+ var wrap = ShadowDOMPolyfill.wrap;
+
+ // patch in prefixed name
+ Object.defineProperties(HTMLElement.prototype, {
+ //TODO(sjmiles): review accessor alias with Arv
+ webkitShadowRoot: {
+ get: function() {
+ return this.shadowRoot;
+ }
+ }
+ });
+
+ //TODO(sjmiles): review method alias with Arv
+ HTMLElement.prototype.webkitCreateShadowRoot =
+ HTMLElement.prototype.createShadowRoot;
+
+ // TODO(jmesserly): we need to wrap document somehow (a dart:html hook?)
+ window.dartExperimentalFixupGetTag = function(originalGetTag) {
+ var NodeList = ShadowDOMPolyfill.wrappers.NodeList;
+ var ShadowRoot = ShadowDOMPolyfill.wrappers.ShadowRoot;
+ var unwrapIfNeeded = ShadowDOMPolyfill.unwrapIfNeeded;
+ function getTag(obj) {
+ // TODO(jmesserly): do we still need these?
+ if (obj instanceof NodeList) return 'NodeList';
+ if (obj instanceof ShadowRoot) return 'ShadowRoot';
+ if (window.MutationRecord && (obj instanceof MutationRecord))
+ return 'MutationRecord';
+ if (window.MutationObserver && (obj instanceof MutationObserver))
+ return 'MutationObserver';
+
+ // TODO(jmesserly): this prevents incorrect interaction between ShadowDOM
+ // and dart:html's <template> polyfill. Essentially, ShadowDOM is
+ // polyfilling native template, but our Dart polyfill fails to detect this
+ // because the unwrapped node is an HTMLUnknownElement, leading it to
+ // think the node has no content.
+ if (obj instanceof HTMLTemplateElement) return 'HTMLTemplateElement';
+
+ var unwrapped = unwrapIfNeeded(obj);
+ if (obj !== unwrapped) {
+ // Fix up class names for Firefox.
+ // For some of them (like HTMLFormElement and HTMLInputElement),
+ // the "constructor" property of the unwrapped nodes points at the
+ // same constructor as the wrapper.
+ var ctor = obj.constructor
+ if (ctor === unwrapped.constructor) {
+ var name = ctor._ShadowDOMPolyfill$cacheTag_;
+ if (!name) {
+ name = Object.prototype.toString.call(unwrapped);
+ name = name.substring(8, name.length - 1);
+ ctor._ShadowDOMPolyfill$cacheTag_ = name;
+ }
+ return name;
+ }
+
+ obj = unwrapped;
+ }
+ return originalGetTag(obj);
+ }
+
+ return getTag;
+ };
+})();
+
+// Copyright (c) 2013, the Dart project authors. Please see the AUTHORS file
+// for details. All rights reserved. Use of this source code is governed by a
+// BSD-style license that can be found in the LICENSE file.
+
+var Platform = {};
+
+/*
+ * Copyright 2012 The Polymer Authors. All rights reserved.
+ * Use of this source code is governed by a BSD-style
+ * license that can be found in the LICENSE file.
+ */
+
+/*
+ This is a limited shim for ShadowDOM css styling.
+ https://dvcs.w3.org/hg/webcomponents/raw-file/tip/spec/shadow/index.html#styles
+
+ The intention here is to support only the styling features which can be
+ relatively simply implemented. The goal is to allow users to avoid the
+ most obvious pitfalls and do so without compromising performance significantly.
+ For ShadowDOM styling that's not covered here, a set of best practices
+ can be provided that should allow users to accomplish more complex styling.
+
+ The following is a list of specific ShadowDOM styling features and a brief
+ discussion of the approach used to shim.
+
+ Shimmed features:
+
+ * @host: ShadowDOM allows styling of the shadowRoot's host element using the
+ @host rule. To shim this feature, the @host styles are reformatted and
+ prefixed with a given scope name and promoted to a document level stylesheet.
+ For example, given a scope name of .foo, a rule like this:
+
+ @host {
+ * {
+ background: red;
+ }
+ }
+
+ becomes:
+
+ .foo {
+ background: red;
+ }
+
+ * encapsultion: Styles defined within ShadowDOM, apply only to
+ dom inside the ShadowDOM. Polymer uses one of two techniques to imlement
+ this feature.
+
+ By default, rules are prefixed with the host element tag name
+ as a descendant selector. This ensures styling does not leak out of the 'top'
+ of the element's ShadowDOM. For example,
+
+ div {
+ font-weight: bold;
+ }
+
+ becomes:
+
+ x-foo div {
+ font-weight: bold;
+ }
+
+ becomes:
+
+
+ Alternatively, if Platform.ShadowCSS.strictStyling is set to true then
+ selectors are scoped by adding an attribute selector suffix to each
+ simple selector that contains the host element tag name. Each element
+ in the element's ShadowDOM template is also given the scope attribute.
+ Thus, these rules match only elements that have the scope attribute.
+ For example, given a scope name of x-foo, a rule like this:
+
+ div {
+ font-weight: bold;
+ }
+
+ becomes:
+
+ div[x-foo] {
+ font-weight: bold;
+ }
+
+ Note that elements that are dynamically added to a scope must have the scope
+ selector added to them manually.
+
+ * ::pseudo: These rules are converted to rules that take advantage of the
+ pseudo attribute. For example, a shadowRoot like this inside an x-foo
+
+ <div pseudo="x-special">Special</div>
+
+ with a rule like this:
+
+ x-foo::x-special { ... }
+
+ becomes:
+
+ x-foo [pseudo=x-special] { ... }
+
+ * ::part(): These rules are converted to rules that take advantage of the
+ part attribute. For example, a shadowRoot like this inside an x-foo
+
+ <div part="special">Special</div>
+
+ with a rule like this:
+
+ x-foo::part(special) { ... }
+
+ becomes:
+
+ x-foo [part=special] { ... }
+
+ Unaddressed ShadowDOM styling features:
+
+ * upper/lower bound encapsulation: Styles which are defined outside a
+ shadowRoot should not cross the ShadowDOM boundary and should not apply
+ inside a shadowRoot.
+
+ This styling behavior is not emulated. Some possible ways to do this that
+ were rejected due to complexity and/or performance concerns include: (1) reset
+ every possible property for every possible selector for a given scope name;
+ (2) re-implement css in javascript.
+
+ As an alternative, users should make sure to use selectors
+ specific to the scope in which they are working.
+
+ * ::distributed: This behavior is not emulated. It's often not necessary
+ to style the contents of a specific insertion point and instead, descendants
+ of the host element can be styled selectively. Users can also create an
+ extra node around an insertion point and style that node's contents
+ via descendent selectors. For example, with a shadowRoot like this:
+
+ <style>
+ content::-webkit-distributed(div) {
+ background: red;
+ }
+ </style>
+ <content></content>
+
+ could become:
+
+ <style>
+ / *@polyfill .content-container div * /
+ content::-webkit-distributed(div) {
+ background: red;
+ }
+ </style>
+ <div class="content-container">
+ <content></content>
+ </div>
+
+ Note the use of @polyfill in the comment above a ShadowDOM specific style
+ declaration. This is a directive to the styling shim to use the selector
+ in comments in lieu of the next selector when running under polyfill.
+*/
+(function(scope) {
+
+var ShadowCSS = {
+ strictStyling: false,
+ registry: {},
+ // Shim styles for a given root associated with a name and extendsName
+ // 1. cache root styles by name
+ // 2. optionally tag root nodes with scope name
+ // 3. shim polyfill directives /* @polyfill */ and /* @polyfill-rule */
+ // 4. shim @host and scoping
+ shimStyling: function(root, name, extendsName) {
+ var typeExtension = this.isTypeExtension(extendsName);
+ // use caching to make working with styles nodes easier and to facilitate
+ // lookup of extendee
+ var def = this.registerDefinition(root, name, extendsName);
+ // find styles and apply shimming...
+ if (this.strictStyling) {
+ this.applyScopeToContent(root, name);
+ }
+ // insert @polyfill and @polyfill-rule rules into style elements
+ // scoping process takes care of shimming these
+ this.insertPolyfillDirectives(def.rootStyles);
+ this.insertPolyfillRules(def.rootStyles);
+ var cssText = this.stylesToShimmedCssText(def.scopeStyles, name,
+ typeExtension);
+ // note: we only need to do rootStyles since these are unscoped.
+ cssText += this.extractPolyfillUnscopedRules(def.rootStyles);
+ // provide shimmedStyle for user extensibility
+ def.shimmedStyle = cssTextToStyle(cssText);
+ if (root) {
+ root.shimmedStyle = def.shimmedStyle;
+ }
+ // remove existing style elements
+ for (var i=0, l=def.rootStyles.length, s; (i<l) && (s=def.rootStyles[i]);
+ i++) {
+ s.parentNode.removeChild(s);
+ }
+ // add style to document
+ addCssToDocument(cssText);
+ },
+ registerDefinition: function(root, name, extendsName) {
+ var def = this.registry[name] = {
+ root: root,
+ name: name,
+ extendsName: extendsName
+ }
+ var styles = root ? root.querySelectorAll('style') : [];
+ styles = styles ? Array.prototype.slice.call(styles, 0) : [];
+ def.rootStyles = styles;
+ def.scopeStyles = def.rootStyles;
+ var extendee = this.registry[def.extendsName];
+ if (extendee && (!root || root.querySelector('shadow'))) {
+ def.scopeStyles = extendee.scopeStyles.concat(def.scopeStyles);
+ }
+ return def;
+ },
+ isTypeExtension: function(extendsName) {
+ return extendsName && extendsName.indexOf('-') < 0;
+ },
+ applyScopeToContent: function(root, name) {
+ if (root) {
+ // add the name attribute to each node in root.
+ Array.prototype.forEach.call(root.querySelectorAll('*'),
+ function(node) {
+ node.setAttribute(name, '');
+ });
+ // and template contents too
+ Array.prototype.forEach.call(root.querySelectorAll('template'),
+ function(template) {
+ this.applyScopeToContent(template.content, name);
+ },
+ this);
+ }
+ },
+ /*
+ * Process styles to convert native ShadowDOM rules that will trip
+ * up the css parser; we rely on decorating the stylesheet with comments.
+ *
+ * For example, we convert this rule:
+ *
+ * (comment start) @polyfill :host menu-item (comment end)
+ * shadow::-webkit-distributed(menu-item) {
+ *
+ * to this:
+ *
+ * scopeName menu-item {
+ *
+ **/
+ insertPolyfillDirectives: function(styles) {
+ if (styles) {
+ Array.prototype.forEach.call(styles, function(s) {
+ s.textContent = this.insertPolyfillDirectivesInCssText(s.textContent);
+ }, this);
+ }
+ },
+ insertPolyfillDirectivesInCssText: function(cssText) {
+ return cssText.replace(cssPolyfillCommentRe, function(match, p1) {
+ // remove end comment delimiter and add block start
+ return p1.slice(0, -2) + '{';
+ });
+ },
+ /*
+ * Process styles to add rules which will only apply under the polyfill
+ *
+ * For example, we convert this rule:
+ *
+ * (comment start) @polyfill-rule :host menu-item {
+ * ... } (comment end)
+ *
+ * to this:
+ *
+ * scopeName menu-item {...}
+ *
+ **/
+ insertPolyfillRules: function(styles) {
+ if (styles) {
+ Array.prototype.forEach.call(styles, function(s) {
+ s.textContent = this.insertPolyfillRulesInCssText(s.textContent);
+ }, this);
+ }
+ },
+ insertPolyfillRulesInCssText: function(cssText) {
+ return cssText.replace(cssPolyfillRuleCommentRe, function(match, p1) {
+ // remove end comment delimiter
+ return p1.slice(0, -1);
+ });
+ },
+ /*
+ * Process styles to add rules which will only apply under the polyfill
+ * and do not process via CSSOM. (CSSOM is destructive to rules on rare
+ * occasions, e.g. -webkit-calc on Safari.)
+ * For example, we convert this rule:
+ *
+ * (comment start) @polyfill-unscoped-rule menu-item {
+ * ... } (comment end)
+ *
+ * to this:
+ *
+ * menu-item {...}
+ *
+ **/
+ extractPolyfillUnscopedRules: function(styles) {
+ var cssText = '';
+ if (styles) {
+ Array.prototype.forEach.call(styles, function(s) {
+ cssText += this.extractPolyfillUnscopedRulesFromCssText(
+ s.textContent) + '\n\n';
+ }, this);
+ }
+ return cssText;
+ },
+ extractPolyfillUnscopedRulesFromCssText: function(cssText) {
+ var r = '', matches;
+ while (matches = cssPolyfillUnscopedRuleCommentRe.exec(cssText)) {
+ r += matches[1].slice(0, -1) + '\n\n';
+ }
+ return r;
+ },
+ // apply @host and scope shimming
+ stylesToShimmedCssText: function(styles, name, typeExtension) {
+ return this.shimAtHost(styles, name, typeExtension) +
+ this.shimScoping(styles, name, typeExtension);
+ },
+ // form: @host { .foo { declarations } }
+ // becomes: scopeName.foo { declarations }
+ shimAtHost: function(styles, name, typeExtension) {
+ if (styles) {
+ return this.convertAtHostStyles(styles, name, typeExtension);
+ }
+ },
+ convertAtHostStyles: function(styles, name, typeExtension) {
+ var cssText = stylesToCssText(styles), self = this;
+ cssText = cssText.replace(hostRuleRe, function(m, p1) {
+ return self.scopeHostCss(p1, name, typeExtension);
+ });
+ cssText = rulesToCss(this.findAtHostRules(cssToRules(cssText),
+ this.makeScopeMatcher(name, typeExtension)));
+ return cssText;
+ },
+ scopeHostCss: function(cssText, name, typeExtension) {
+ var self = this;
+ return cssText.replace(selectorRe, function(m, p1, p2) {
+ return self.scopeHostSelector(p1, name, typeExtension) + ' ' + p2 + '\n\t';
+ });
+ },
+ // supports scopig by name and [is=name] syntax
+ scopeHostSelector: function(selector, name, typeExtension) {
+ var r = [], parts = selector.split(','), is = '[is=' + name + ']';
+ parts.forEach(function(p) {
+ p = p.trim();
+ // selector: *|:scope -> name
+ if (p.match(hostElementRe)) {
+ p = p.replace(hostElementRe, typeExtension ? is + '$1$3' :
+ name + '$1$3');
+ // selector: .foo -> name.foo (OR) [bar] -> name[bar]
+ } else if (p.match(hostFixableRe)) {
+ p = typeExtension ? is + p : name + p;
+ }
+ r.push(p);
+ }, this);
+ return r.join(', ');
+ },
+ // consider styles that do not include component name in the selector to be
+ // unscoped and in need of promotion;
+ // for convenience, also consider keyframe rules this way.
+ findAtHostRules: function(cssRules, matcher) {
+ return Array.prototype.filter.call(cssRules,
+ this.isHostRule.bind(this, matcher));
+ },
+ isHostRule: function(matcher, cssRule) {
+ return (cssRule.selectorText && cssRule.selectorText.match(matcher)) ||
+ (cssRule.cssRules && this.findAtHostRules(cssRule.cssRules, matcher).length) ||
+ (cssRule.type == CSSRule.WEBKIT_KEYFRAMES_RULE);
+ },
+ /* Ensure styles are scoped. Pseudo-scoping takes a rule like:
+ *
+ * .foo {... }
+ *
+ * and converts this to
+ *
+ * scopeName .foo { ... }
+ */
+ shimScoping: function(styles, name, typeExtension) {
+ if (styles) {
+ return this.convertScopedStyles(styles, name, typeExtension);
+ }
+ },
+ convertScopedStyles: function(styles, name, typeExtension) {
+ var cssText = stylesToCssText(styles).replace(hostRuleRe, '');
+ cssText = this.insertPolyfillHostInCssText(cssText);
+ cssText = this.convertColonHost(cssText);
+ cssText = this.convertPseudos(cssText);
+ cssText = this.convertParts(cssText);
+ cssText = this.convertCombinators(cssText);
+ var rules = cssToRules(cssText);
+ cssText = this.scopeRules(rules, name, typeExtension);
+ return cssText;
+ },
+ convertPseudos: function(cssText) {
+ return cssText.replace(cssPseudoRe, ' [pseudo=$1]');
+ },
+ convertParts: function(cssText) {
+ return cssText.replace(cssPartRe, ' [part=$1]');
+ },
+ /*
+ * convert a rule like :host(.foo) > .bar { }
+ *
+ * to
+ *
+ * scopeName.foo > .bar, .foo scopeName > .bar { }
+ *
+ * and
+ *
+ * :host(.foo:host) .bar { ... }
+ *
+ * to
+ *
+ * scopeName.foo .bar { ... }
+ */
+ convertColonHost: function(cssText) {
+ // p1 = :host, p2 = contents of (), p3 rest of rule
+ return cssText.replace(cssColonHostRe, function(m, p1, p2, p3) {
+ p1 = polyfillHostNoCombinator;
+ if (p2) {
+ if (p2.match(polyfillHost)) {
+ return p1 + p2.replace(polyfillHost, '') + p3;
+ } else {
+ return p1 + p2 + p3 + ', ' + p2 + ' ' + p1 + p3;
+ }
+ } else {
+ return p1 + p3;
+ }
+ });
+ },
+ /*
+ * Convert ^ and ^^ combinators by replacing with space.
+ */
+ convertCombinators: function(cssText) {
+ return cssText.replace('^^', ' ').replace('^', ' ');
+ },
+ // change a selector like 'div' to 'name div'
+ scopeRules: function(cssRules, name, typeExtension) {
+ var cssText = '';
+ Array.prototype.forEach.call(cssRules, function(rule) {
+ if (rule.selectorText && (rule.style && rule.style.cssText)) {
+ cssText += this.scopeSelector(rule.selectorText, name, typeExtension,
+ this.strictStyling) + ' {\n\t';
+ cssText += this.propertiesFromRule(rule) + '\n}\n\n';
+ } else if (rule.media) {
+ cssText += '@media ' + rule.media.mediaText + ' {\n';
+ cssText += this.scopeRules(rule.cssRules, name);
+ cssText += '\n}\n\n';
+ } else if (rule.cssText) {
+ cssText += rule.cssText + '\n\n';
+ }
+ }, this);
+ return cssText;
+ },
+ scopeSelector: function(selector, name, typeExtension, strict) {
+ var r = [], parts = selector.split(',');
+ parts.forEach(function(p) {
+ p = p.trim();
+ if (this.selectorNeedsScoping(p, name, typeExtension)) {
+ p = strict ? this.applyStrictSelectorScope(p, name) :
+ this.applySimpleSelectorScope(p, name, typeExtension);
+ }
+ r.push(p);
+ }, this);
+ return r.join(', ');
+ },
+ selectorNeedsScoping: function(selector, name, typeExtension) {
+ var re = this.makeScopeMatcher(name, typeExtension);
+ return !selector.match(re);
+ },
+ makeScopeMatcher: function(name, typeExtension) {
+ var matchScope = typeExtension ? '\\[is=[\'"]?' + name + '[\'"]?\\]' : name;
+ return new RegExp('^(' + matchScope + ')' + selectorReSuffix, 'm');
+ },
+ // scope via name and [is=name]
+ applySimpleSelectorScope: function(selector, name, typeExtension) {
+ var scoper = typeExtension ? '[is=' + name + ']' : name;
+ if (selector.match(polyfillHostRe)) {
+ selector = selector.replace(polyfillHostNoCombinator, scoper);
+ return selector.replace(polyfillHostRe, scoper + ' ');
+ } else {
+ return scoper + ' ' + selector;
+ }
+ },
+ // return a selector with [name] suffix on each simple selector
+ // e.g. .foo.bar > .zot becomes .foo[name].bar[name] > .zot[name]
+ applyStrictSelectorScope: function(selector, name) {
+ var splits = [' ', '>', '+', '~'],
+ scoped = selector,
+ attrName = '[' + name + ']';
+ splits.forEach(function(sep) {
+ var parts = scoped.split(sep);
+ scoped = parts.map(function(p) {
+ // remove :host since it should be unnecessary
+ var t = p.trim().replace(polyfillHostRe, '');
+ if (t && (splits.indexOf(t) < 0) && (t.indexOf(attrName) < 0)) {
+ p = t.replace(/([^:]*)(:*)(.*)/, '$1' + attrName + '$2$3')
+ }
+ return p;
+ }).join(sep);
+ });
+ return scoped;
+ },
+ insertPolyfillHostInCssText: function(selector) {
+ return selector.replace(hostRe, polyfillHost).replace(colonHostRe,
+ polyfillHost);
+ },
+ propertiesFromRule: function(rule) {
+ var properties = rule.style.cssText;
+ // TODO(sorvell): Chrome cssom incorrectly removes quotes from the content
+ // property. (https://code.google.com/p/chromium/issues/detail?id=247231)
+ if (rule.style.content && !rule.style.content.match(/['"]+/)) {
+ properties = 'content: \'' + rule.style.content + '\';\n' +
+ rule.style.cssText.replace(/content:[^;]*;/g, '');
+ }
+ return properties;
+ }
+};
+
+var hostRuleRe = /@host[^{]*{(([^}]*?{[^{]*?}[\s\S]*?)+)}/gim,
+ selectorRe = /([^{]*)({[\s\S]*?})/gim,
+ hostElementRe = /(.*)((?:\*)|(?:\:scope))(.*)/,
+ hostFixableRe = /^[.\[:]/,
+ cssCommentRe = /\/\*[^*]*\*+([^/*][^*]*\*+)*\//gim,
+ cssPolyfillCommentRe = /\/\*\s*@polyfill ([^*]*\*+([^/*][^*]*\*+)*\/)([^{]*?){/gim,
+ cssPolyfillRuleCommentRe = /\/\*\s@polyfill-rule([^*]*\*+([^/*][^*]*\*+)*)\//gim,
+ cssPolyfillUnscopedRuleCommentRe = /\/\*\s@polyfill-unscoped-rule([^*]*\*+([^/*][^*]*\*+)*)\//gim,
+ cssPseudoRe = /::(x-[^\s{,(]*)/gim,
+ cssPartRe = /::part\(([^)]*)\)/gim,
+ // note: :host pre-processed to -host.
+ cssColonHostRe = /(-host)(?:\(([^)]*)\))?([^,{]*)/gim,
+ selectorReSuffix = '([>\\s~+\[.,{:][\\s\\S]*)?$',
+ hostRe = /@host/gim,
+ colonHostRe = /\:host/gim,
+ polyfillHost = '-host',
+ /* host name without combinator */
+ polyfillHostNoCombinator = '-host-no-combinator',
+ polyfillHostRe = /-host/gim;
+
+function stylesToCssText(styles, preserveComments) {
+ var cssText = '';
+ Array.prototype.forEach.call(styles, function(s) {
+ cssText += s.textContent + '\n\n';
+ });
+ // strip comments for easier processing
+ if (!preserveComments) {
+ cssText = cssText.replace(cssCommentRe, '');
+ }
+ return cssText;
+}
+
+function cssTextToStyle(cssText) {
+ var style = document.createElement('style');
+ style.textContent = cssText;
+ return style;
+}
+
+function cssToRules(cssText) {
+ var style = cssTextToStyle(cssText);
+ document.head.appendChild(style);
+ var rules = style.sheet.cssRules;
+ style.parentNode.removeChild(style);
+ return rules;
+}
+
+function rulesToCss(cssRules) {
+ for (var i=0, css=[]; i < cssRules.length; i++) {
+ css.push(cssRules[i].cssText);
+ }
+ return css.join('\n\n');
+}
+
+function addCssToDocument(cssText) {
+ if (cssText) {
+ getSheet().appendChild(document.createTextNode(cssText));
+ }
+}
+
+var sheet;
+function getSheet() {
+ if (!sheet) {
+ sheet = document.createElement("style");
+ sheet.setAttribute('ShadowCSSShim', '');
+ }
+ return sheet;
+}
+
+// add polyfill stylesheet to document
+if (window.ShadowDOMPolyfill) {
+ addCssToDocument('style { display: none !important; }\n');
+ var head = document.querySelector('head');
+ head.insertBefore(getSheet(), head.childNodes[0]);
+}
+
+// exports
+scope.ShadowCSS = ShadowCSS;
+
+})(window.Platform);
+}// Copyright (c) 2012 The Polymer Authors. All rights reserved.
+//
+// Redistribution and use in source and binary forms, with or without
+// modification, are permitted provided that the following conditions are
+// met:
+//
+// * Redistributions of source code must retain the above copyright
+// notice, this list of conditions and the following disclaimer.
+// * Redistributions in binary form must reproduce the above
+// copyright notice, this list of conditions and the following disclaimer
+// in the documentation and/or other materials provided with the
+// distribution.
+// * Neither the name of Google Inc. nor the names of its
+// contributors may be used to endorse or promote products derived from
+// this software without specific prior written permission.
+//
+// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+window.CustomElements = {flags:{}};
+// SideTable is a weak map where possible. If WeakMap is not available the
+// association is stored as an expando property.
+var SideTable;
+// TODO(arv): WeakMap does not allow for Node etc to be keys in Firefox
+if (typeof WeakMap !== 'undefined' && navigator.userAgent.indexOf('Firefox/') < 0) {
+ SideTable = WeakMap;
+} else {
+ (function() {
+ var defineProperty = Object.defineProperty;
+ var counter = Date.now() % 1e9;
+
+ SideTable = function() {
+ this.name = '__st' + (Math.random() * 1e9 >>> 0) + (counter++ + '__');
+ };
+
+ SideTable.prototype = {
+ set: function(key, value) {
+ var entry = key[this.name];
+ if (entry && entry[0] === key)
+ entry[1] = value;
+ else
+ defineProperty(key, this.name, {value: [key, value], writable: true});
+ },
+ get: function(key) {
+ var entry;
+ return (entry = key[this.name]) && entry[0] === key ?
+ entry[1] : undefined;
+ },
+ delete: function(key) {
+ this.set(key, undefined);
+ }
+ }
+ })();
+}
+
+(function(global) {
+
+ var registrationsTable = new SideTable();
+
+ // We use setImmediate or postMessage for our future callback.
+ var setImmediate = window.msSetImmediate;
+
+ // Use post message to emulate setImmediate.
+ if (!setImmediate) {
+ var setImmediateQueue = [];
+ var sentinel = String(Math.random());
+ window.addEventListener('message', function(e) {
+ if (e.data === sentinel) {
+ var queue = setImmediateQueue;
+ setImmediateQueue = [];
+ queue.forEach(function(func) {
+ func();
+ });
+ }
+ });
+ setImmediate = function(func) {
+ setImmediateQueue.push(func);
+ window.postMessage(sentinel, '*');
+ };
+ }
+
+ // This is used to ensure that we never schedule 2 callas to setImmediate
+ var isScheduled = false;
+
+ // Keep track of observers that needs to be notified next time.
+ var scheduledObservers = [];
+
+ /**
+ * Schedules |dispatchCallback| to be called in the future.
+ * @param {MutationObserver} observer
+ */
+ function scheduleCallback(observer) {
+ scheduledObservers.push(observer);
+ if (!isScheduled) {
+ isScheduled = true;
+ setImmediate(dispatchCallbacks);
+ }
+ }
+
+ function wrapIfNeeded(node) {
+ return window.ShadowDOMPolyfill &&
+ window.ShadowDOMPolyfill.wrapIfNeeded(node) ||
+ node;
+ }
+
+ function dispatchCallbacks() {
+ // http://dom.spec.whatwg.org/#mutation-observers
+
+ isScheduled = false; // Used to allow a new setImmediate call above.
+
+ var observers = scheduledObservers;
+ scheduledObservers = [];
+ // Sort observers based on their creation UID (incremental).
+ observers.sort(function(o1, o2) {
+ return o1.uid_ - o2.uid_;
+ });
+
+ var anyNonEmpty = false;
+ observers.forEach(function(observer) {
+
+ // 2.1, 2.2
+ var queue = observer.takeRecords();
+ // 2.3. Remove all transient registered observers whose observer is mo.
+ removeTransientObserversFor(observer);
+
+ // 2.4
+ if (queue.length) {
+ observer.callback_(queue, observer);
+ anyNonEmpty = true;
+ }
+ });
+
+ // 3.
+ if (anyNonEmpty)
+ dispatchCallbacks();
+ }
+
+ function removeTransientObserversFor(observer) {
+ observer.nodes_.forEach(function(node) {
+ var registrations = registrationsTable.get(node);
+ if (!registrations)
+ return;
+ registrations.forEach(function(registration) {
+ if (registration.observer === observer)
+ registration.removeTransientObservers();
+ });
+ });
+ }
+
+ /**
+ * This function is used for the "For each registered observer observer (with
+ * observer's options as options) in target's list of registered observers,
+ * run these substeps:" and the "For each ancestor ancestor of target, and for
+ * each registered observer observer (with options options) in ancestor's list
+ * of registered observers, run these substeps:" part of the algorithms. The
+ * |options.subtree| is checked to ensure that the callback is called
+ * correctly.
+ *
+ * @param {Node} target
+ * @param {function(MutationObserverInit):MutationRecord} callback
+ */
+ function forEachAncestorAndObserverEnqueueRecord(target, callback) {
+ for (var node = target; node; node = node.parentNode) {
+ var registrations = registrationsTable.get(node);
+
+ if (registrations) {
+ for (var j = 0; j < registrations.length; j++) {
+ var registration = registrations[j];
+ var options = registration.options;
+
+ // Only target ignores subtree.
+ if (node !== target && !options.subtree)
+ continue;
+
+ var record = callback(options);
+ if (record)
+ registration.enqueue(record);
+ }
+ }
+ }
+ }
+
+ var uidCounter = 0;
+
+ /**
+ * The class that maps to the DOM MutationObserver interface.
+ * @param {Function} callback.
+ * @constructor
+ */
+ function JsMutationObserver(callback) {
+ this.callback_ = callback;
+ this.nodes_ = [];
+ this.records_ = [];
+ this.uid_ = ++uidCounter;
+ }
+
+ JsMutationObserver.prototype = {
+ observe: function(target, options) {
+ target = wrapIfNeeded(target);
+
+ // 1.1
+ if (!options.childList && !options.attributes && !options.characterData ||
+
+ // 1.2
+ options.attributeOldValue && !options.attributes ||
+
+ // 1.3
+ options.attributeFilter && options.attributeFilter.length &&
+ !options.attributes ||
+
+ // 1.4
+ options.characterDataOldValue && !options.characterData) {
+
+ throw new SyntaxError();
+ }
+
+ var registrations = registrationsTable.get(target);
+ if (!registrations)
+ registrationsTable.set(target, registrations = []);
+
+ // 2
+ // If target's list of registered observers already includes a registered
+ // observer associated with the context object, replace that registered
+ // observer's options with options.
+ var registration;
+ for (var i = 0; i < registrations.length; i++) {
+ if (registrations[i].observer === this) {
+ registration = registrations[i];
+ registration.removeListeners();
+ registration.options = options;
+ break;
+ }
+ }
+
+ // 3.
+ // Otherwise, add a new registered observer to target's list of registered
+ // observers with the context object as the observer and options as the
+ // options, and add target to context object's list of nodes on which it
+ // is registered.
+ if (!registration) {
+ registration = new Registration(this, target, options);
+ registrations.push(registration);
+ this.nodes_.push(target);
+ }
+
+ registration.addListeners();
+ },
+
+ disconnect: function() {
+ this.nodes_.forEach(function(node) {
+ var registrations = registrationsTable.get(node);
+ for (var i = 0; i < registrations.length; i++) {
+ var registration = registrations[i];
+ if (registration.observer === this) {
+ registration.removeListeners();
+ registrations.splice(i, 1);
+ // Each node can only have one registered observer associated with
+ // this observer.
+ break;
+ }
+ }
+ }, this);
+ this.records_ = [];
+ },
+
+ takeRecords: function() {
+ var copyOfRecords = this.records_;
+ this.records_ = [];
+ return copyOfRecords;
+ }
+ };
+
+ /**
+ * @param {string} type
+ * @param {Node} target
+ * @constructor
+ */
+ function MutationRecord(type, target) {
+ this.type = type;
+ this.target = target;
+ this.addedNodes = [];
+ this.removedNodes = [];
+ this.previousSibling = null;
+ this.nextSibling = null;
+ this.attributeName = null;
+ this.attributeNamespace = null;
+ this.oldValue = null;
+ }
+
+ function copyMutationRecord(original) {
+ var record = new MutationRecord(original.type, original.target);
+ record.addedNodes = original.addedNodes.slice();
+ record.removedNodes = original.removedNodes.slice();
+ record.previousSibling = original.previousSibling;
+ record.nextSibling = original.nextSibling;
+ record.attributeName = original.attributeName;
+ record.attributeNamespace = original.attributeNamespace;
+ record.oldValue = original.oldValue;
+ return record;
+ };
+
+ // We keep track of the two (possibly one) records used in a single mutation.
+ var currentRecord, recordWithOldValue;
+
+ /**
+ * Creates a record without |oldValue| and caches it as |currentRecord| for
+ * later use.
+ * @param {string} oldValue
+ * @return {MutationRecord}
+ */
+ function getRecord(type, target) {
+ return currentRecord = new MutationRecord(type, target);
+ }
+
+ /**
+ * Gets or creates a record with |oldValue| based in the |currentRecord|
+ * @param {string} oldValue
+ * @return {MutationRecord}
+ */
+ function getRecordWithOldValue(oldValue) {
+ if (recordWithOldValue)
+ return recordWithOldValue;
+ recordWithOldValue = copyMutationRecord(currentRecord);
+ recordWithOldValue.oldValue = oldValue;
+ return recordWithOldValue;
+ }
+
+ function clearRecords() {
+ currentRecord = recordWithOldValue = undefined;
+ }
+
+ /**
+ * @param {MutationRecord} record
+ * @return {boolean} Whether the record represents a record from the current
+ * mutation event.
+ */
+ function recordRepresentsCurrentMutation(record) {
+ return record === recordWithOldValue || record === currentRecord;
+ }
+
+ /**
+ * Selects which record, if any, to replace the last record in the queue.
+ * This returns |null| if no record should be replaced.
+ *
+ * @param {MutationRecord} lastRecord
+ * @param {MutationRecord} newRecord
+ * @param {MutationRecord}
+ */
+ function selectRecord(lastRecord, newRecord) {
+ if (lastRecord === newRecord)
+ return lastRecord;
+
+ // Check if the the record we are adding represents the same record. If
+ // so, we keep the one with the oldValue in it.
+ if (recordWithOldValue && recordRepresentsCurrentMutation(lastRecord))
+ return recordWithOldValue;
+
+ return null;
+ }
+
+ /**
+ * Class used to represent a registered observer.
+ * @param {MutationObserver} observer
+ * @param {Node} target
+ * @param {MutationObserverInit} options
+ * @constructor
+ */
+ function Registration(observer, target, options) {
+ this.observer = observer;
+ this.target = target;
+ this.options = options;
+ this.transientObservedNodes = [];
+ }
+
+ Registration.prototype = {
+ enqueue: function(record) {
+ var records = this.observer.records_;
+ var length = records.length;
+
+ // There are cases where we replace the last record with the new record.
+ // For example if the record represents the same mutation we need to use
+ // the one with the oldValue. If we get same record (this can happen as we
+ // walk up the tree) we ignore the new record.
+ if (records.length > 0) {
+ var lastRecord = records[length - 1];
+ var recordToReplaceLast = selectRecord(lastRecord, record);
+ if (recordToReplaceLast) {
+ records[length - 1] = recordToReplaceLast;
+ return;
+ }
+ } else {
+ scheduleCallback(this.observer);
+ }
+
+ records[length] = record;
+ },
+
+ addListeners: function() {
+ this.addListeners_(this.target);
+ },
+
+ addListeners_: function(node) {
+ var options = this.options;
+ if (options.attributes)
+ node.addEventListener('DOMAttrModified', this, true);
+
+ if (options.characterData)
+ node.addEventListener('DOMCharacterDataModified', this, true);
+
+ if (options.childList)
+ node.addEventListener('DOMNodeInserted', this, true);
+
+ if (options.childList || options.subtree)
+ node.addEventListener('DOMNodeRemoved', this, true);
+ },
+
+ removeListeners: function() {
+ this.removeListeners_(this.target);
+ },
+
+ removeListeners_: function(node) {
+ var options = this.options;
+ if (options.attributes)
+ node.removeEventListener('DOMAttrModified', this, true);
+
+ if (options.characterData)
+ node.removeEventListener('DOMCharacterDataModified', this, true);
+
+ if (options.childList)
+ node.removeEventListener('DOMNodeInserted', this, true);
+
+ if (options.childList || options.subtree)
+ node.removeEventListener('DOMNodeRemoved', this, true);
+ },
+
+ /**
+ * Adds a transient observer on node. The transient observer gets removed
+ * next time we deliver the change records.
+ * @param {Node} node
+ */
+ addTransientObserver: function(node) {
+ // Don't add transient observers on the target itself. We already have all
+ // the required listeners set up on the target.
+ if (node === this.target)
+ return;
+
+ this.addListeners_(node);
+ this.transientObservedNodes.push(node);
+ var registrations = registrationsTable.get(node);
+ if (!registrations)
+ registrationsTable.set(node, registrations = []);
+
+ // We know that registrations does not contain this because we already
+ // checked if node === this.target.
+ registrations.push(this);
+ },
+
+ removeTransientObservers: function() {
+ var transientObservedNodes = this.transientObservedNodes;
+ this.transientObservedNodes = [];
+
+ transientObservedNodes.forEach(function(node) {
+ // Transient observers are never added to the target.
+ this.removeListeners_(node);
+
+ var registrations = registrationsTable.get(node);
+ for (var i = 0; i < registrations.length; i++) {
+ if (registrations[i] === this) {
+ registrations.splice(i, 1);
+ // Each node can only have one registered observer associated with
+ // this observer.
+ break;
+ }
+ }
+ }, this);
+ },
+
+ handleEvent: function(e) {
+ // Stop propagation since we are managing the propagation manually.
+ // This means that other mutation events on the page will not work
+ // correctly but that is by design.
+ e.stopImmediatePropagation();
+
+ switch (e.type) {
+ case 'DOMAttrModified':
+ // http://dom.spec.whatwg.org/#concept-mo-queue-attributes
+
+ var name = e.attrName;
+ var namespace = e.relatedNode.namespaceURI;
+ var target = e.target;
+
+ // 1.
+ var record = new getRecord('attributes', target);
+ record.attributeName = name;
+ record.attributeNamespace = namespace;
+
+ // 2.
+ var oldValue =
+ e.attrChange === MutationEvent.ADDITION ? null : e.prevValue;
+
+ forEachAncestorAndObserverEnqueueRecord(target, function(options) {
+ // 3.1, 4.2
+ if (!options.attributes)
+ return;
+
+ // 3.2, 4.3
+ if (options.attributeFilter && options.attributeFilter.length &&
+ options.attributeFilter.indexOf(name) === -1 &&
+ options.attributeFilter.indexOf(namespace) === -1) {
+ return;
+ }
+ // 3.3, 4.4
+ if (options.attributeOldValue)
+ return getRecordWithOldValue(oldValue);
+
+ // 3.4, 4.5
+ return record;
+ });
+
+ break;
+
+ case 'DOMCharacterDataModified':
+ // http://dom.spec.whatwg.org/#concept-mo-queue-characterdata
+ var target = e.target;
+
+ // 1.
+ var record = getRecord('characterData', target);
+
+ // 2.
+ var oldValue = e.prevValue;
+
+
+ forEachAncestorAndObserverEnqueueRecord(target, function(options) {
+ // 3.1, 4.2
+ if (!options.characterData)
+ return;
+
+ // 3.2, 4.3
+ if (options.characterDataOldValue)
+ return getRecordWithOldValue(oldValue);
+
+ // 3.3, 4.4
+ return record;
+ });
+
+ break;
+
+ case 'DOMNodeRemoved':
+ this.addTransientObserver(e.target);
+ // Fall through.
+ case 'DOMNodeInserted':
+ // http://dom.spec.whatwg.org/#concept-mo-queue-childlist
+ var target = e.relatedNode;
+ var changedNode = e.target;
+ var addedNodes, removedNodes;
+ if (e.type === 'DOMNodeInserted') {
+ addedNodes = [changedNode];
+ removedNodes = [];
+ } else {
+
+ addedNodes = [];
+ removedNodes = [changedNode];
+ }
+ var previousSibling = changedNode.previousSibling;
+ var nextSibling = changedNode.nextSibling;
+
+ // 1.
+ var record = getRecord('childList', target);
+ record.addedNodes = addedNodes;
+ record.removedNodes = removedNodes;
+ record.previousSibling = previousSibling;
+ record.nextSibling = nextSibling;
+
+ forEachAncestorAndObserverEnqueueRecord(target, function(options) {
+ // 2.1, 3.2
+ if (!options.childList)
+ return;
+
+ // 2.2, 3.3
+ return record;
+ });
+
+ }
+
+ clearRecords();
+ }
+ };
+
+ global.JsMutationObserver = JsMutationObserver;
+
+})(this);
+
+if (!window.MutationObserver) {
+ window.MutationObserver =
+ window.WebKitMutationObserver ||
+ window.JsMutationObserver;
+ if (!MutationObserver) {
+ throw new Error("no mutation observer support");
+ }
+}
+
+(function(scope){
+
+var logFlags = window.logFlags || {};
+
+// walk the subtree rooted at node, applying 'find(element, data)' function
+// to each element
+// if 'find' returns true for 'element', do not search element's subtree
+function findAll(node, find, data) {
+ var e = node.firstElementChild;
+ if (!e) {
+ e = node.firstChild;
+ while (e && e.nodeType !== Node.ELEMENT_NODE) {
+ e = e.nextSibling;
+ }
+ }
+ while (e) {
+ if (find(e, data) !== true) {
+ findAll(e, find, data);
+ }
+ e = e.nextElementSibling;
+ }
+ return null;
+}
+
+// walk all shadowRoots on a given node.
+function forRoots(node, cb) {
+ var root = node.shadowRoot;
+ while(root) {
+ forSubtree(root, cb);
+ root = root.olderShadowRoot;
+ }
+}
+
+// walk the subtree rooted at node, including descent into shadow-roots,
+// applying 'cb' to each element
+function forSubtree(node, cb) {
+ //logFlags.dom && node.childNodes && node.childNodes.length && console.group('subTree: ', node);
+ findAll(node, function(e) {
+ if (cb(e)) {
+ return true;
+ }
+ forRoots(e, cb);
+ });
+ forRoots(node, cb);
+ //logFlags.dom && node.childNodes && node.childNodes.length && console.groupEnd();
+}
+
+// manage lifecycle on added node
+function added(node) {
+ if (upgrade(node)) {
+ insertedNode(node);
+ return true;
+ }
+ inserted(node);
+}
+
+// manage lifecycle on added node's subtree only
+function addedSubtree(node) {
+ forSubtree(node, function(e) {
+ if (added(e)) {
+ return true;
+ }
+ });
+}
+
+// manage lifecycle on added node and it's subtree
+function addedNode(node) {
+ return added(node) || addedSubtree(node);
+}
+
+// upgrade custom elements at node, if applicable
+function upgrade(node) {
+ if (!node.__upgraded__ && node.nodeType === Node.ELEMENT_NODE) {
+ var type = node.getAttribute('is') || node.localName;
+ var definition = scope.registry[type];
+ if (definition) {
+ logFlags.dom && console.group('upgrade:', node.localName);
+ scope.upgrade(node);
+ logFlags.dom && console.groupEnd();
+ return true;
+ }
+ }
+}
+
+function insertedNode(node) {
+ inserted(node);
+ if (inDocument(node)) {
+ forSubtree(node, function(e) {
+ inserted(e);
+ });
+ }
+}
+
+
+// TODO(sorvell): on platforms without MutationObserver, mutations may not be
+// reliable and therefore entered/leftView are not reliable.
+// To make these callbacks less likely to fail, we defer all inserts and removes
+// to give a chance for elements to be inserted into dom.
+// This ensures enteredViewCallback fires for elements that are created and
+// immediately added to dom.
+var hasPolyfillMutations = (!window.MutationObserver ||
+ (window.MutationObserver === window.JsMutationObserver));
+scope.hasPolyfillMutations = hasPolyfillMutations;
+
+var isPendingMutations = false;
+var pendingMutations = [];
+function deferMutation(fn) {
+ pendingMutations.push(fn);
+ if (!isPendingMutations) {
+ isPendingMutations = true;
+ var async = (window.Platform && window.Platform.endOfMicrotask) ||
+ setTimeout;
+ async(takeMutations);
+ }
+}
+
+function takeMutations() {
+ isPendingMutations = false;
+ var $p = pendingMutations;
+ for (var i=0, l=$p.length, p; (i<l) && (p=$p[i]); i++) {
+ p();
+ }
+ pendingMutations = [];
+}
+
+function inserted(element) {
+ if (hasPolyfillMutations) {
+ deferMutation(function() {
+ _inserted(element);
+ });
+ } else {
+ _inserted(element);
+ }
+}
+
+// TODO(sjmiles): if there are descents into trees that can never have inDocument(*) true, fix this
+function _inserted(element) {
+ // TODO(sjmiles): it's possible we were inserted and removed in the space
+ // of one microtask, in which case we won't be 'inDocument' here
+ // But there are other cases where we are testing for inserted without
+ // specific knowledge of mutations, and must test 'inDocument' to determine
+ // whether to call inserted
+ // If we can factor these cases into separate code paths we can have
+ // better diagnostics.
+ // TODO(sjmiles): when logging, do work on all custom elements so we can
+ // track behavior even when callbacks not defined
+ //console.log('inserted: ', element.localName);
+ if (element.enteredViewCallback || (element.__upgraded__ && logFlags.dom)) {
+ logFlags.dom && console.group('inserted:', element.localName);
+ if (inDocument(element)) {
+ element.__inserted = (element.__inserted || 0) + 1;
+ // if we are in a 'removed' state, bluntly adjust to an 'inserted' state
+ if (element.__inserted < 1) {
+ element.__inserted = 1;
+ }
+ // if we are 'over inserted', squelch the callback
+ if (element.__inserted > 1) {
+ logFlags.dom && console.warn('inserted:', element.localName,
+ 'insert/remove count:', element.__inserted)
+ } else if (element.enteredViewCallback) {
+ logFlags.dom && console.log('inserted:', element.localName);
+ element.enteredViewCallback();
+ }
+ }
+ logFlags.dom && console.groupEnd();
+ }
+}
+
+function removedNode(node) {
+ removed(node);
+ forSubtree(node, function(e) {
+ removed(e);
+ });
+}
+
+
+function removed(element) {
+ if (hasPolyfillMutations) {
+ deferMutation(function() {
+ _removed(element);
+ });
+ } else {
+ _removed(element);
+ }
+}
+
+function removed(element) {
+ // TODO(sjmiles): temporary: do work on all custom elements so we can track
+ // behavior even when callbacks not defined
+ if (element.leftViewCallback || (element.__upgraded__ && logFlags.dom)) {
+ logFlags.dom && console.log('removed:', element.localName);
+ if (!inDocument(element)) {
+ element.__inserted = (element.__inserted || 0) - 1;
+ // if we are in a 'inserted' state, bluntly adjust to an 'removed' state
+ if (element.__inserted > 0) {
+ element.__inserted = 0;
+ }
+ // if we are 'over removed', squelch the callback
+ if (element.__inserted < 0) {
+ logFlags.dom && console.warn('removed:', element.localName,
+ 'insert/remove count:', element.__inserted)
+ } else if (element.leftViewCallback) {
+ element.leftViewCallback();
+ }
+ }
+ }
+}
+
+function inDocument(element) {
+ var p = element;
+ var doc = window.ShadowDOMPolyfill &&
+ window.ShadowDOMPolyfill.wrapIfNeeded(document) || document;
+ while (p) {
+ if (p == doc) {
+ return true;
+ }
+ p = p.parentNode || p.host;
+ }
+}
+
+function watchShadow(node) {
+ if (node.shadowRoot && !node.shadowRoot.__watched) {
+ logFlags.dom && console.log('watching shadow-root for: ', node.localName);
+ // watch all unwatched roots...
+ var root = node.shadowRoot;
+ while (root) {
+ watchRoot(root);
+ root = root.olderShadowRoot;
+ }
+ }
+}
+
+function watchRoot(root) {
+ if (!root.__watched) {
+ observe(root);
+ root.__watched = true;
+ }
+}
+
+function filter(inNode) {
+ switch (inNode.localName) {
+ case 'style':
+ case 'script':
+ case 'template':
+ case undefined:
+ return true;
+ }
+}
+
+function handler(mutations) {
+ //
+ if (logFlags.dom) {
+ var mx = mutations[0];
+ if (mx && mx.type === 'childList' && mx.addedNodes) {
+ if (mx.addedNodes) {
+ var d = mx.addedNodes[0];
+ while (d && d !== document && !d.host) {
+ d = d.parentNode;
+ }
+ var u = d && (d.URL || d._URL || (d.host && d.host.localName)) || '';
+ u = u.split('/?').shift().split('/').pop();
+ }
+ }
+ console.group('mutations (%d) [%s]', mutations.length, u || '');
+ }
+ //
+ mutations.forEach(function(mx) {
+ //logFlags.dom && console.group('mutation');
+ if (mx.type === 'childList') {
+ forEach(mx.addedNodes, function(n) {
+ //logFlags.dom && console.log(n.localName);
+ if (filter(n)) {
+ return;
+ }
+ // nodes added may need lifecycle management
+ addedNode(n);
+ });
+ // removed nodes may need lifecycle management
+ forEach(mx.removedNodes, function(n) {
+ //logFlags.dom && console.log(n.localName);
+ if (filter(n)) {
+ return;
+ }
+ removedNode(n);
+ });
+ }
+ //logFlags.dom && console.groupEnd();
+ });
+ logFlags.dom && console.groupEnd();
+};
+
+var observer = new MutationObserver(handler);
+
+function takeRecords() {
+ // TODO(sjmiles): ask Raf why we have to call handler ourselves
+ handler(observer.takeRecords());
+ takeMutations();
+}
+
+var forEach = Array.prototype.forEach.call.bind(Array.prototype.forEach);
+
+function observe(inRoot) {
+ observer.observe(inRoot, {childList: true, subtree: true});
+}
+
+function observeDocument(document) {
+ observe(document);
+}
+
+function upgradeDocument(document) {
+ logFlags.dom && console.group('upgradeDocument: ', (document.URL || document._URL || '').split('/').pop());
+ addedNode(document);
+ logFlags.dom && console.groupEnd();
+}
+
+// exports
+
+scope.watchShadow = watchShadow;
+scope.upgradeAll = addedNode;
+scope.upgradeSubtree = addedSubtree;
+
+scope.observeDocument = observeDocument;
+scope.upgradeDocument = upgradeDocument;
+
+scope.takeRecords = takeRecords;
+
+})(window.CustomElements);
+
+/**
+ * Implements `document.register`
+ * @module CustomElements
+*/
+
+/**
+ * Polyfilled extensions to the `document` object.
+ * @class Document
+*/
+
+(function(scope) {
+
+// imports
+
+if (!scope) {
+ scope = window.CustomElements = {flags:{}};
+}
+var flags = scope.flags;
+
+// native document.register?
+
+var hasNative = Boolean(document.register);
+var useNative = !flags.register && hasNative;
+
+if (useNative) {
+
+ // stub
+ var nop = function() {};
+
+ // exports
+ scope.registry = {};
+ scope.upgradeElement = nop;
+
+ scope.watchShadow = nop;
+ scope.upgrade = nop;
+ scope.upgradeAll = nop;
+ scope.upgradeSubtree = nop;
+ scope.observeDocument = nop;
+ scope.upgradeDocument = nop;
+ scope.takeRecords = nop;
+
+} else {
+
+ /**
+ * Registers a custom tag name with the document.
+ *
+ * When a registered element is created, a `readyCallback` method is called
+ * in the scope of the element. The `readyCallback` method can be specified on
+ * either `options.prototype` or `options.lifecycle` with the latter taking
+ * precedence.
+ *
+ * @method register
+ * @param {String} name The tag name to register. Must include a dash ('-'),
+ * for example 'x-component'.
+ * @param {Object} options
+ * @param {String} [options.extends]
+ * (_off spec_) Tag name of an element to extend (or blank for a new
+ * element). This parameter is not part of the specification, but instead
+ * is a hint for the polyfill because the extendee is difficult to infer.
+ * Remember that the input prototype must chain to the extended element's
+ * prototype (or HTMLElement.prototype) regardless of the value of
+ * `extends`.
+ * @param {Object} options.prototype The prototype to use for the new
+ * element. The prototype must inherit from HTMLElement.
+ * @param {Object} [options.lifecycle]
+ * Callbacks that fire at important phases in the life of the custom
+ * element.
+ *
+ * @example
+ * FancyButton = document.register("fancy-button", {
+ * extends: 'button',
+ * prototype: Object.create(HTMLButtonElement.prototype, {
+ * readyCallback: {
+ * value: function() {
+ * console.log("a fancy-button was created",
+ * }
+ * }
+ * })
+ * });
+ * @return {Function} Constructor for the newly registered type.
+ */
+ function register(name, options) {
+ //console.warn('document.register("' + name + '", ', options, ')');
+ // construct a defintion out of options
+ // TODO(sjmiles): probably should clone options instead of mutating it
+ var definition = options || {};
+ if (!name) {
+ // TODO(sjmiles): replace with more appropriate error (EricB can probably
+ // offer guidance)
+ throw new Error('document.register: first argument `name` must not be empty');
+ }
+ if (name.indexOf('-') < 0) {
+ // TODO(sjmiles): replace with more appropriate error (EricB can probably
+ // offer guidance)
+ throw new Error('document.register: first argument (\'name\') must contain a dash (\'-\'). Argument provided was \'' + String(name) + '\'.');
+ }
+ // record name
+ definition.name = name;
+ // must have a prototype, default to an extension of HTMLElement
+ // TODO(sjmiles): probably should throw if no prototype, check spec
+ if (!definition.prototype) {
+ // TODO(sjmiles): replace with more appropriate error (EricB can probably
+ // offer guidance)
+ throw new Error('Options missing required prototype property');
+ }
+ // ensure a lifecycle object so we don't have to null test it
+ definition.lifecycle = definition.lifecycle || {};
+ // build a list of ancestral custom elements (for native base detection)
+ // TODO(sjmiles): we used to need to store this, but current code only
+ // uses it in 'resolveTagName': it should probably be inlined
+ definition.ancestry = ancestry(definition.extends);
+ // extensions of native specializations of HTMLElement require localName
+ // to remain native, and use secondary 'is' specifier for extension type
+ resolveTagName(definition);
+ // some platforms require modifications to the user-supplied prototype
+ // chain
+ resolvePrototypeChain(definition);
+ // overrides to implement attributeChanged callback
+ overrideAttributeApi(definition.prototype);
+ // 7.1.5: Register the DEFINITION with DOCUMENT
+ registerDefinition(name, definition);
+ // 7.1.7. Run custom element constructor generation algorithm with PROTOTYPE
+ // 7.1.8. Return the output of the previous step.
+ definition.ctor = generateConstructor(definition);
+ definition.ctor.prototype = definition.prototype;
+ // force our .constructor to be our actual constructor
+ definition.prototype.constructor = definition.ctor;
+ // if initial parsing is complete
+ if (scope.ready || scope.performedInitialDocumentUpgrade) {
+ // upgrade any pre-existing nodes of this type
+ scope.upgradeAll(document);
+ }
+ return definition.ctor;
+ }
+
+ function ancestry(extnds) {
+ var extendee = registry[extnds];
+ if (extendee) {
+ return ancestry(extendee.extends).concat([extendee]);
+ }
+ return [];
+ }
+
+ function resolveTagName(definition) {
+ // if we are explicitly extending something, that thing is our
+ // baseTag, unless it represents a custom component
+ var baseTag = definition.extends;
+ // if our ancestry includes custom components, we only have a
+ // baseTag if one of them does
+ for (var i=0, a; (a=definition.ancestry[i]); i++) {
+ baseTag = a.is && a.tag;
+ }
+ // our tag is our baseTag, if it exists, and otherwise just our name
+ definition.tag = baseTag || definition.name;
+ if (baseTag) {
+ // if there is a base tag, use secondary 'is' specifier
+ definition.is = definition.name;
+ }
+ }
+
+ function resolvePrototypeChain(definition) {
+ // if we don't support __proto__ we need to locate the native level
+ // prototype for precise mixing in
+ if (!Object.__proto__) {
+ // default prototype
+ var nativePrototype = HTMLElement.prototype;
+ // work out prototype when using type-extension
+ if (definition.is) {
+ var inst = document.createElement(definition.tag);
+ nativePrototype = Object.getPrototypeOf(inst);
+ }
+ // ensure __proto__ reference is installed at each point on the prototype
+ // chain.
+ // NOTE: On platforms without __proto__, a mixin strategy is used instead
+ // of prototype swizzling. In this case, this generated __proto__ provides
+ // limited support for prototype traversal.
+ var proto = definition.prototype, ancestor;
+ while (proto && (proto !== nativePrototype)) {
+ var ancestor = Object.getPrototypeOf(proto);
+ proto.__proto__ = ancestor;
+ proto = ancestor;
+ }
+ }
+ // cache this in case of mixin
+ definition.native = nativePrototype;
+ }
+
+ // SECTION 4
+
+ function instantiate(definition) {
+ // 4.a.1. Create a new object that implements PROTOTYPE
+ // 4.a.2. Let ELEMENT by this new object
+ //
+ // the custom element instantiation algorithm must also ensure that the
+ // output is a valid DOM element with the proper wrapper in place.
+ //
+ return upgrade(domCreateElement(definition.tag), definition);
+ }
+
+ function upgrade(element, definition) {
+ // some definitions specify an 'is' attribute
+ if (definition.is) {
+ element.setAttribute('is', definition.is);
+ }
+ // make 'element' implement definition.prototype
+ implement(element, definition);
+ // flag as upgraded
+ element.__upgraded__ = true;
+ // there should never be a shadow root on element at this point
+ // we require child nodes be upgraded before `created`
+ scope.upgradeSubtree(element);
+ // lifecycle management
+ created(element);
+ // OUTPUT
+ return element;
+ }
+
+ function implement(element, definition) {
+ // prototype swizzling is best
+ if (Object.__proto__) {
+ element.__proto__ = definition.prototype;
+ } else {
+ // where above we can re-acquire inPrototype via
+ // getPrototypeOf(Element), we cannot do so when
+ // we use mixin, so we install a magic reference
+ customMixin(element, definition.prototype, definition.native);
+ element.__proto__ = definition.prototype;
+ }
+ }
+
+ function customMixin(inTarget, inSrc, inNative) {
+ // TODO(sjmiles): 'used' allows us to only copy the 'youngest' version of
+ // any property. This set should be precalculated. We also need to
+ // consider this for supporting 'super'.
+ var used = {};
+ // start with inSrc
+ var p = inSrc;
+ // sometimes the default is HTMLUnknownElement.prototype instead of
+ // HTMLElement.prototype, so we add a test
+ // the idea is to avoid mixing in native prototypes, so adding
+ // the second test is WLOG
+ while (p && p !== inNative && p !== HTMLUnknownElement.prototype) {
+ var keys = Object.getOwnPropertyNames(p);
+ for (var i=0, k; k=keys[i]; i++) {
+ if (!used[k]) {
+ Object.defineProperty(inTarget, k,
+ Object.getOwnPropertyDescriptor(p, k));
+ used[k] = 1;
+ }
+ }
+ p = Object.getPrototypeOf(p);
+ }
+ }
+
+ function created(element) {
+ // invoke createdCallback
+ if (element.createdCallback) {
+ element.createdCallback();
+ }
+ }
+
+ // attribute watching
+
+ function overrideAttributeApi(prototype) {
+ // overrides to implement callbacks
+ // TODO(sjmiles): should support access via .attributes NamedNodeMap
+ // TODO(sjmiles): preserves user defined overrides, if any
+ var setAttribute = prototype.setAttribute;
+ prototype.setAttribute = function(name, value) {
+ changeAttribute.call(this, name, value, setAttribute);
+ }
+ var removeAttribute = prototype.removeAttribute;
+ prototype.removeAttribute = function(name) {
+ changeAttribute.call(this, name, null, removeAttribute);
+ }
+ }
+
+ function changeAttribute(name, value, operation) {
+ var oldValue = this.getAttribute(name);
+ operation.apply(this, arguments);
+ if (this.attributeChangedCallback
+ && (this.getAttribute(name) !== oldValue)) {
+ this.attributeChangedCallback(name, oldValue, value);
+ }
+ }
+
+ // element registry (maps tag names to definitions)
+
+ var registry = {};
+
+ function registerDefinition(name, definition) {
+ if (registry[name]) {
+ throw new Error('Cannot register a tag more than once');
+ }
+ registry[name] = definition;
+ }
+
+ function generateConstructor(definition) {
+ return function() {
+ return instantiate(definition);
+ };
+ }
+
+ function createElement(tag, typeExtension) {
+ var definition = registry[typeExtension || tag];
+ if (definition) {
+ if (tag == definition.tag && typeExtension == definition.is) {
+ return new definition.ctor();
+ }
+ // Handle empty string for type extension.
+ if (!typeExtension && !definition.is) {
+ return new definition.ctor();
+ }
+ }
+
+ if (typeExtension) {
+ var element = createElement(tag);
+ element.setAttribute('is', typeExtension);
+ return element;
+ }
+ var element = domCreateElement(tag);
+ // Custom tags should be HTMLElements even if not upgraded.
+ if (tag.indexOf('-') >= 0) {
+ implement(element, HTMLElement);
+ }
+ return element;
+ }
+
+ function upgradeElement(element) {
+ if (!element.__upgraded__ && (element.nodeType === Node.ELEMENT_NODE)) {
+ var is = element.getAttribute('is');
+ var definition = registry[is || element.localName];
+ if (definition) {
+ if (is && definition.tag == element.localName) {
+ return upgrade(element, definition);
+ } else if (!is && !definition.extends) {
+ return upgrade(element, definition);
+ }
+ }
+ }
+ }
+
+ function cloneNode(deep) {
+ // call original clone
+ var n = domCloneNode.call(this, deep);
+ // upgrade the element and subtree
+ scope.upgradeAll(n);
+ // return the clone
+ return n;
+ }
+ // capture native createElement before we override it
+
+ var domCreateElement = document.createElement.bind(document);
+
+ // capture native cloneNode before we override it
+
+ var domCloneNode = Node.prototype.cloneNode;
+
+ // exports
+
+ document.register = register;
+ document.createElement = createElement; // override
+ Node.prototype.cloneNode = cloneNode; // override
+
+ scope.registry = registry;
+
+ /**
+ * Upgrade an element to a custom element. Upgrading an element
+ * causes the custom prototype to be applied, an `is` attribute
+ * to be attached (as needed), and invocation of the `readyCallback`.
+ * `upgrade` does nothing if the element is already upgraded, or
+ * if it matches no registered custom tag name.
+ *
+ * @method ugprade
+ * @param {Element} element The element to upgrade.
+ * @return {Element} The upgraded element.
+ */
+ scope.upgrade = upgradeElement;
+}
+
+scope.hasNative = hasNative;
+scope.useNative = useNative;
+
+})(window.CustomElements);
+
+(function() {
+
+// import
+
+var IMPORT_LINK_TYPE = window.HTMLImports ? HTMLImports.IMPORT_LINK_TYPE : 'none';
+
+// highlander object for parsing a document tree
+
+var parser = {
+ selectors: [
+ 'link[rel=' + IMPORT_LINK_TYPE + ']'
+ ],
+ map: {
+ link: 'parseLink'
+ },
+ parse: function(inDocument) {
+ if (!inDocument.__parsed) {
+ // only parse once
+ inDocument.__parsed = true;
+ // all parsable elements in inDocument (depth-first pre-order traversal)
+ var elts = inDocument.querySelectorAll(parser.selectors);
+ // for each parsable node type, call the mapped parsing method
+ forEach(elts, function(e) {
+ parser[parser.map[e.localName]](e);
+ });
+ // upgrade all upgradeable static elements, anything dynamically
+ // created should be caught by observer
+ CustomElements.upgradeDocument(inDocument);
+ // observe document for dom changes
+ CustomElements.observeDocument(inDocument);
+ }
+ },
+ parseLink: function(linkElt) {
+ // imports
+ if (isDocumentLink(linkElt)) {
+ this.parseImport(linkElt);
+ }
+ },
+ parseImport: function(linkElt) {
+ if (linkElt.content) {
+ parser.parse(linkElt.content);
+ }
+ }
+};
+
+function isDocumentLink(inElt) {
+ return (inElt.localName === 'link'
+ && inElt.getAttribute('rel') === IMPORT_LINK_TYPE);
+}
+
+var forEach = Array.prototype.forEach.call.bind(Array.prototype.forEach);
+
+// exports
+
+CustomElements.parser = parser;
+
+})();
+(function(){
+
+// bootstrap parsing
+function bootstrap() {
+ // parse document
+ CustomElements.parser.parse(document);
+ // one more pass before register is 'live'
+ CustomElements.upgradeDocument(document);
+ CustomElements.performedInitialDocumentUpgrade = true;
+ // choose async
+ var async = window.Platform && Platform.endOfMicrotask ?
+ Platform.endOfMicrotask :
+ setTimeout;
+ async(function() {
+ // set internal 'ready' flag, now document.register will trigger
+ // synchronous upgrades
+ CustomElements.ready = true;
+ // capture blunt profiling data
+ CustomElements.readyTime = Date.now();
+ if (window.HTMLImports) {
+ CustomElements.elapsed = CustomElements.readyTime - HTMLImports.readyTime;
+ }
+ // notify the system that we are bootstrapped
+ document.body.dispatchEvent(
+ new CustomEvent('WebComponentsReady', {bubbles: true})
+ );
+ });
+}
+
+// CustomEvent shim for IE
+if (typeof window.CustomEvent !== 'function') {
+ window.CustomEvent = function(inType) {
+ var e = document.createEvent('HTMLEvents');
+ e.initEvent(inType, true, true);
+ return e;
+ };
+}
+
+if (document.readyState === 'complete') {
+ bootstrap();
+} else {
+ var loadEvent = window.HTMLImports ? 'HTMLImportsLoaded' :
+ document.readyState == 'loading' ? 'DOMContentLoaded' : 'load';
+ window.addEventListener(loadEvent, bootstrap);
+}
+
+})();
+
+(function() {
+// Patch to allow custom element and shadow dom to work together, from:
+// https://github.com/Polymer/platform/blob/master/src/patches-shadowdom-polyfill.js
+// include .host reference
+if (HTMLElement.prototype.createShadowRoot) {
+ var originalCreateShadowRoot = HTMLElement.prototype.createShadowRoot;
+ HTMLElement.prototype.createShadowRoot = function() {
+ var root = originalCreateShadowRoot.call(this);
+ root.host = this;
+ return root;
+ }
+}
+
+
+// Patch to allow custom elements and shadow dom to work together, from:
+// https://github.com/Polymer/platform/blob/master/src/patches-custom-elements.js
+if (window.ShadowDOMPolyfill) {
+ function nop() {};
+
+ // disable shadow dom watching
+ CustomElements.watchShadow = nop;
+ CustomElements.watchAllShadows = nop;
+
+ // ensure wrapped inputs for these functions
+ var fns = ['upgradeAll', 'upgradeSubtree', 'observeDocument',
+ 'upgradeDocument'];
+
+ // cache originals
+ var original = {};
+ fns.forEach(function(fn) {
+ original[fn] = CustomElements[fn];
+ });
+
+ // override
+ fns.forEach(function(fn) {
+ CustomElements[fn] = function(inNode) {
+ return original[fn](ShadowDOMPolyfill.wrapIfNeeded(inNode));
+ };
+ });
+}
+
+})();
+// Copyright (c) 2013, the Dart project authors. Please see the AUTHORS file
+// for details. All rights reserved. Use of this source code is governed by a
+// BSD-style license that can be found in the LICENSE file.
+
+// Type for remote proxies to Dart objects with dart2js.
+// WARNING: do not call this constructor or rely on it being
+// in the global namespace, as it may be removed.
+function DartObject(o) {
+ this.o = o;
+}
+// Generated by dart2js, the Dart to JavaScript compiler version: 1.0.0.3_r30188.
+(function($){var A={}
+delete A.x
+var B={}
+delete B.x
+var C={}
+delete C.x
+var D={}
+delete D.x
+var E={}
+delete E.x
+var F={}
+delete F.x
+var G={}
+delete G.x
+var H={}
+delete H.x
+var J={}
+delete J.x
+var K={}
+delete K.x
+var L={}
+delete L.x
+var M={}
+delete M.x
+var N={}
+delete N.x
+var O={}
+delete O.x
+var P={}
+delete P.x
+var Q={}
+delete Q.x
+var R={}
+delete R.x
+var S={}
+delete S.x
+var T={}
+delete T.x
+var U={}
+delete U.x
+var V={}
+delete V.x
+var W={}
+delete W.x
+var X={}
+delete X.x
+var Y={}
+delete Y.x
+var Z={}
+delete Z.x
+function I(){}
+init()
+$=I.p
+var $$={}
+$$.YP=[H,{"":"v;wc,nn,lv,Pp",
+call$0:function(){return this.nn.call(this.wc,this.lv)},
+$is_X0:true}]
+$$.Pm=[H,{"":"v;wc,nn,lv,Pp",
+call$1:function(a){return this.nn.call(this.wc,a)},
+$is_HB:true,
+$is_Dv:true}]
+$$.Ip=[P,{"":"v;wc,nn,lv,Pp",
+call$0:function(){return this.nn.call(this.wc)},
+$is_X0:true}]
+$$.C7=[P,{"":"v;wc,nn,lv,Pp",
+call$1:function(a){return this.nn.call(this.wc,this.lv,a)},
+$is_HB:true,
+$is_Dv:true}]
+$$.CQ=[P,{"":"v;wc,nn,lv,Pp",
+call$2:function(a,b){return this.nn.call(this.wc,a,b)},
+call$1:function(a){return this.call$2(a,null)},
+"+call:1:0":0,
+$is_bh:true,
+$is_HB:true,
+$is_Dv:true}]
+$$.bq=[P,{"":"v;wc,nn,lv,Pp",
+call$2:function(a,b){return this.nn.call(this.wc,a,b)},
+$is_bh:true}]
+$$.Y7=[A,{"":"v;wc,nn,lv,Pp",
+call$2:function(a,b){return this.nn.call(this.wc,this.lv,a,b)},
+$is_bh:true}]
+$$.Dw=[T,{"":"v;wc,nn,lv,Pp",
+call$3:function(a,b,c){return this.nn.call(this.wc,a,b,c)}}]
+$$.zy=[H,{"":"Tp;call$2,$name",$is_bh:true}]
+$$.Nb=[H,{"":"Tp;call$1,$name",$is_HB:true,$is_Dv:true}]
+$$.Fy=[H,{"":"Tp;call$0,$name",$is_X0:true}]
+$$.eU=[H,{"":"Tp;call$7,$name"}]
+$$.ADW=[P,{"":"Tp;call$2,$name",
+call$1:function(a){return this.call$2(a,null)},
+"+call:1:0":0,
+$is_bh:true,
+$is_HB:true,
+$is_Dv:true}]
+$$.Ri=[P,{"":"Tp;call$5,$name"}]
+$$.kq=[P,{"":"Tp;call$4,$name"}]
+$$.Ag=[P,{"":"Tp;call$6,$name"}]
+$$.PW=[P,{"":"Tp;call$3$onError$radix,$name",
+call$1:function(a){return this.call$3$onError$radix(a,null,null)},
+"+call:1:0":0,
+call$2$onError:function(a,b){return this.call$3$onError$radix(a,b,null)},
+"+call:2:0:onError":0,
+call$catchAll:function(){return{onError:null,radix:null}},
+$is_HB:true,
+$is_Dv:true}]
+;init.mangledNames={gB:"length",gDb:"_cachedDeclarations",gEI:"prefix",gF1:"isolate",gFF:"source",gFJ:"__$cls",gFT:"__$instruction",gFU:"_cachedMethodsMap",gG1:"message",gH8:"_fieldsDescriptor",gHt:"_fieldsMetadata",gKM:"$",gLA:"src",gLf:"__$field",gLy:"_cachedSetters",gM2:"_cachedVariables",gMj:"function",gNI:"instruction",gNl:"script",gO3:"url",gOk:"_cachedMetadata",gP:"value",gP2:"_collapsed",gPw:"__$isolate",gPy:"__$error",gQG:"app",gRu:"cls",gT1:"_cachedGetters",gTn:"json",gTx:"_jsConstructorOrInterceptor",gUF:"_cachedTypeVariables",gUz:"__$script",gV4:"__$trace",gVA:"__$displayValue",gVB:"error_obj",gWL:"_mangledName",gXB:"_message",gXJ:"lines",gXR:"scripts",gXf:"__$iconClass",gXh:"__$instance",gZ6:"locationManager",gZw:"__$code",ga:"a",gai:"displayValue",gb:"b",gb0:"_cachedConstructors",gcC:"hash",geV:"paddedLine",geb:"__$json",gfY:"kind",ghO:"__$error_obj",ghf:"instance",gi0:"__$name",gi2:"isolates",giI:"__$library",giK:"__$instance",gjO:"id",gjd:"_cachedMethods",gk5:"__$devtools",gkc:"error",gkf:"_count",gl7:"iconClass",glD:"currentHashUri",gle:"_metadata",glw:"requestManager",gn2:"responses",gnI:"isolateManager",gnz:"_owner",goc:"name",gpz:"_jsConstructorCache",gqN:"_superclass",gql:"__$function",gqm:"_cachedSuperinterfaces",gt0:"field",gtB:"_cachedFields",gtD:"library",gtH:"__$app",gtN:"trace",gtT:"code",guA:"_cachedMembers",gvH:"index",gvX:"__$source",gvt:"__$field",gxj:"collapsed",gzd:"currentHash",gzj:"devtools"};init.mangledGlobalNames={DI:"_closeIconClass",Vl:"_openIconClass"};(function (reflectionData) {
+ function map(x){x={x:x};delete x.x;return x}
+ if (!init.libraries) init.libraries = [];
+ if (!init.mangledNames) init.mangledNames = map();
+ if (!init.mangledGlobalNames) init.mangledGlobalNames = map();
+ if (!init.statics) init.statics = map();
+ if (!init.typeInformation) init.typeInformation = map();
+ if (!init.globalFunctions) init.globalFunctions = map();
+ var libraries = init.libraries;
+ var mangledNames = init.mangledNames;
+ var mangledGlobalNames = init.mangledGlobalNames;
+ var hasOwnProperty = Object.prototype.hasOwnProperty;
+ var length = reflectionData.length;
+ for (var i = 0; i < length; i++) {
+ var data = reflectionData[i];
+ var name = data[0];
+ var uri = data[1];
+ var metadata = data[2];
+ var globalObject = data[3];
+ var descriptor = data[4];
+ var isRoot = !!data[5];
+ var fields = descriptor && descriptor[""];
+ var classes = [];
+ var functions = [];
+ function processStatics(descriptor) {
+ for (var property in descriptor) {
+ if (!hasOwnProperty.call(descriptor, property)) continue;
+ if (property === "") continue;
+ var element = descriptor[property];
+ var firstChar = property.substring(0, 1);
+ var previousProperty;
+ if (firstChar === "+") {
+ mangledGlobalNames[previousProperty] = property.substring(1);
+ if (descriptor[property] == 1) descriptor[previousProperty].$reflectable = 1;
+ if (element && element.length) init.typeInformation[previousProperty] = element;
+ } else if (firstChar === "@") {
+ property = property.substring(1);
+ $[property]["@"] = element;
+ } else if (firstChar === "*") {
+ globalObject[previousProperty].$defaultValues = element;
+ var optionalMethods = descriptor.$methodsWithOptionalArguments;
+ if (!optionalMethods) {
+ descriptor.$methodsWithOptionalArguments = optionalMethods = {}
+ }
+ optionalMethods[property] = previousProperty;
+ } else if (typeof element === "function") {
+ globalObject[previousProperty = property] = element;
+ functions.push(property);
+ init.globalFunctions[property] = element;
+ } else {
+ previousProperty = property;
+ var newDesc = {};
+ var previousProp;
+ for (var prop in element) {
+ if (!hasOwnProperty.call(element, prop)) continue;
+ firstChar = prop.substring(0, 1);
+ if (prop === "static") {
+ processStatics(init.statics[property] = element[prop]);
+ } else if (firstChar === "+") {
+ mangledNames[previousProp] = prop.substring(1);
+ if (element[prop] == 1) element[previousProp].$reflectable = 1;
+ } else if (firstChar === "@" && prop !== "@") {
+ newDesc[prop.substring(1)]["@"] = element[prop];
+ } else if (firstChar === "*") {
+ newDesc[previousProp].$defaultValues = element[prop];
+ var optionalMethods = newDesc.$methodsWithOptionalArguments;
+ if (!optionalMethods) {
+ newDesc.$methodsWithOptionalArguments = optionalMethods={}
+ }
+ optionalMethods[prop] = previousProp;
+ } else {
+ newDesc[previousProp = prop] = element[prop];
+ }
+ }
+ $$[property] = [globalObject, newDesc];
+ classes.push(property);
+ }
+ }
+ }
+ processStatics(descriptor);
+ libraries.push([name, uri, classes, functions, metadata, fields, isRoot,
+ globalObject]);
+ }
+})([["_foreign_helper","dart:_foreign_helper",,H,{Lt:{"":"a;tT>"}}],["_interceptors","dart:_interceptors",,J,{x:function(a){return void 0},Qu:function(a,b,c,d){return{i: a, p: b, e: c, x: d}},ks:function(a){var z,y,x,w
+z=a[init.dispatchPropertyName]
+if(z==null)if($.Bv==null){H.XD()
+z=a[init.dispatchPropertyName]}if(z!=null){y=z.p
+if(!1===y)return z.i
+if(!0===y)return a
+x=Object.getPrototypeOf(a)
+if(y===x)return z.i
+if(z.e===x)throw H.b(P.SY("Return interceptor for "+H.d(y(a,z))))}w=H.w3(a)
+if(w==null)return C.vB
+return w},e1:function(a){var z,y,x,w
+z=$.Au
+if(z==null)return
+y=z
+for(z=y.length,x=J.x(a),w=0;w+1<z;w+=3){if(w>=z)throw H.e(y,w)
+if(x.n(a,y[w]))return w}return},Fb:function(a){var z,y
+z=J.e1(a)
+if(z==null)return
+y=$.Au
+if(typeof z!=="number")throw z.g()
+return J.UQ(y,z+1)},Dp:function(a,b){var z,y
+z=J.e1(a)
+if(z==null)return
+y=$.Au
+if(typeof z!=="number")throw z.g()
+return J.UQ(y,z+2)[b]},Gv:{"":"a;",
+n:function(a,b){return a===b},
+giO:function(a){return H.eQ(a)},
+bu:function(a){return H.a5(a)},
+T:function(a,b){throw H.b(P.lr(a,b.gWa(),b.gnd(),b.gVm(),null))},
+"+noSuchMethod:1:0":0,
+gbx:function(a){return new H.cu(H.dJ(a),null)},
+$isGv:true,
+"%":"DOMImplementation|SVGAnimatedEnumeration|SVGAnimatedNumberList|SVGAnimatedString"},kn:{"":"bool/Gv;",
+bu:function(a){return String(a)},
+giO:function(a){return a?519018:218159},
+gbx:function(a){return C.HL},
+$isbool:true},PE:{"":"Gv;",
+n:function(a,b){return null==b},
+bu:function(a){return"null"},
+giO:function(a){return 0},
+gbx:function(a){return C.GX}},QI:{"":"Gv;",
+giO:function(a){return 0},
+gbx:function(a){return C.CS}},FP:{"":"QI;"},is:{"":"QI;"},Q:{"":"List/Gv;",
+h:function(a,b){if(!!a.fixed$length)H.vh(P.f("add"))
+a.push(b)},
+W4:function(a,b){if(b<0||b>=a.length)throw H.b(new P.bJ("value "+b))
+if(!!a.fixed$length)H.vh(P.f("removeAt"))
+return a.splice(b,1)[0]},
+xe:function(a,b,c){if(b<0||b>a.length)throw H.b(new P.bJ("value "+b))
+if(!!a.fixed$length)H.vh(P.f("insert"))
+a.splice(b,0,c)},
+mv:function(a){if(!!a.fixed$length)H.vh(P.f("removeLast"))
+if(a.length===0)throw H.b(new P.bJ("value -1"))
+return a.pop()},
+Rz:function(a,b){var z
+if(!!a.fixed$length)H.vh(P.f("remove"))
+for(z=0;z<a.length;++z)if(J.xC(a[z],b)){a.splice(z,1)
+return!0}return!1},
+ev:function(a,b){var z=new H.U5(a,b)
+H.VM(z,[null])
+return z},
+Ay:function(a,b){var z
+for(z=J.GP(b);z.G();)this.h(a,z.gl())},
+aN:function(a,b){return H.bQ(a,b)},
+ez:function(a,b){var z=new H.A8(a,b)
+H.VM(z,[null,null])
+return z},
+zV:function(a,b){var z,y,x,w
+z=a.length
+y=P.A(z,null)
+for(x=0;x<a.length;++x){w=H.d(a[x])
+if(x>=z)throw H.e(y,x)
+y[x]=w}return y.join(b)},
+eR:function(a,b){return H.j5(a,b,null,null)},
+Zv:function(a,b){if(b>>>0!==b||b>=a.length)throw H.e(a,b)
+return a[b]},
+D6:function(a,b,c){if(typeof b!=="number"||Math.floor(b)!==b)throw H.b(new P.AT(b))
+if(b<0||b>a.length)throw H.b(P.TE(b,0,a.length))
+if(c==null)c=a.length
+else{if(typeof c!=="number"||Math.floor(c)!==c)throw H.b(new P.AT(c))
+if(c<b||c>a.length)throw H.b(P.TE(c,b,a.length))}if(b===c)return[]
+return a.slice(b,c)},
+Jk:function(a,b){return this.D6(a,b,null)},
+Mu:function(a,b,c){H.S6(a,b,c)
+return H.j5(a,b,c,null)},
+gFV:function(a){if(a.length>0)return a[0]
+throw H.b(new P.lj("No elements"))},
+grZ:function(a){var z=a.length
+if(z>0)return a[z-1]
+throw H.b(new P.lj("No elements"))},
+UZ:function(a,b,c){var z,y
+if(!!a.fixed$length)H.vh(P.f("removeRange"))
+z=a.length
+y=J.Wx(b)
+if(y.C(b,0)||y.D(b,z))throw H.b(P.TE(b,0,z))
+y=J.Wx(c)
+if(y.C(c,b)||y.D(c,z))throw H.b(P.TE(c,b,z))
+if(typeof c!=="number")throw H.s(c)
+H.Zi(a,c,a,b,z-c)
+if(typeof b!=="number")throw H.s(b)
+this.sB(a,z-(c-b))},
+Vr:function(a,b){return H.Ck(a,b)},
+XU:function(a,b,c){return H.Ub(a,b,c,a.length)},
+u8:function(a,b){return this.XU(a,b,0)},
+Pk:function(a,b,c){return H.Wv(a,b,c)},
+cn:function(a,b){return this.Pk(a,b,null)},
+tg:function(a,b){var z
+for(z=0;z<a.length;++z)if(J.xC(a[z],b))return!0
+return!1},
+gl0:function(a){return a.length===0},
+"+isEmpty":0,
+gor:function(a){return a.length!==0},
+"+isNotEmpty":0,
+bu:function(a){return H.mx(a,"[","]")},
+tt:function(a,b){return P.F(a,b,H.W8(a,"Q",0))},
+br:function(a){return this.tt(a,!0)},
+gA:function(a){var z=new H.a7(a,a.length,0,null)
+H.VM(z,[H.W8(a,"Q",0)])
+return z},
+giO:function(a){return H.eQ(a)},
+gB:function(a){return a.length},
+"+length":0,
+sB:function(a,b){if(typeof b!=="number"||Math.floor(b)!==b)throw H.b(new P.AT(b))
+if(b<0)throw H.b(P.N(b))
+if(!!a.fixed$length)H.vh(P.f("set length"))
+a.length=b},
+"+length=":0,
+t:function(a,b){if(typeof b!=="number"||Math.floor(b)!==b)throw H.b(P.u(b))
+if(b>=a.length||b<0)throw H.b(P.N(b))
+return a[b]},
+"+[]:1:0":0,
+u:function(a,b,c){if(!!a.immutable$list)H.vh(P.f("indexed set"))
+if(typeof b!=="number"||Math.floor(b)!==b)throw H.b(new P.AT(b))
+if(b>=a.length||b<0)throw H.b(P.N(b))
+a[b]=c},
+"+[]=:2:0":0,
+$isList:true,
+$asWO:null,
+$ascX:null,
+$isList:true,
+$isqC:true,
+$iscX:true},jx:{"":"Q;",$isjx:true,
+$asQ:function(){return[null]},
+$asWO:function(){return[null]},
+$ascX:function(){return[null]}},ZC:{"":"jx;"},Jt:{"":"jx;",$isJt:true},P:{"":"num/Gv;",
+iM:function(a,b){var z
+if(typeof b!=="number")throw H.b(new P.AT(b))
+if(a<b)return-1
+else if(a>b)return 1
+else if(a===b){if(a===0){z=this.gzP(b)
+if(this.gzP(a)===z)return 0
+if(this.gzP(a))return-1
+return 1}return 0}else if(isNaN(a)){if(this.gG0(b))return 0
+return 1}else return-1},
+gzP:function(a){return a===0?1/a<0:a<0},
+gG0:function(a){return isNaN(a)},
+JV:function(a,b){return a%b},
+Vy:function(a){return Math.abs(a)},
+yu:function(a){var z
+if(a>=-2147483648&&a<=2147483647)return a|0
+if(isFinite(a)){z=a<0?Math.ceil(a):Math.floor(a)
+return z+0}throw H.b(P.f(''+a))},
+HG:function(a){return this.yu(this.UD(a))},
+UD:function(a){if(a<0)return-Math.round(-a)
+else return Math.round(a)},
+WZ:function(a,b){if(b<2||b>36)throw H.b(P.C3(b))
+return a.toString(b)},
+bu:function(a){if(a===0&&1/a<0)return"-0.0"
+else return""+a},
+giO:function(a){return a&0x1FFFFFFF},
+J:function(a){return-a},
+g:function(a,b){if(typeof b!=="number")throw H.b(new P.AT(b))
+return a+b},
+W:function(a,b){if(typeof b!=="number")throw H.b(P.u(b))
+return a-b},
+V:function(a,b){if(typeof b!=="number")throw H.b(new P.AT(b))
+return a/b},
+U:function(a,b){if(typeof b!=="number")throw H.b(new P.AT(b))
+return a*b},
+Z:function(a,b){if((a|0)===a&&(b|0)===b&&0!==b&&-1!==b)return a/b|0
+else return this.ZP(a,b)},
+ZP:function(a,b){return this.yu(a/b)},
+O:function(a,b){if(b<0)throw H.b(new P.AT(b))
+if(b>31)return 0
+return a<<b>>>0},
+m:function(a,b){if(b<0)throw H.b(P.u(b))
+if(a>0){if(b>31)return 0
+return a>>>b}if(b>31)b=31
+return a>>b>>>0},
+i:function(a,b){if(typeof b!=="number")throw H.b(new P.AT(b))
+return(a&b)>>>0},
+C:function(a,b){if(typeof b!=="number")throw H.b(P.u(b))
+return a<b},
+D:function(a,b){if(typeof b!=="number")throw H.b(P.u(b))
+return a>b},
+E:function(a,b){if(typeof b!=="number")throw H.b(new P.AT(b))
+return a<=b},
+F:function(a,b){if(typeof b!=="number")throw H.b(P.u(b))
+return a>=b},
+$isnum:true,
+static:{"":"l8,nr",}},im:{"":"int/P;",
+gbx:function(a){return C.yw},
+$isdouble:true,
+$isnum:true,
+$isint:true},Pp:{"":"double/P;",
+gbx:function(a){return C.O4},
+$isdouble:true,
+$isnum:true},O:{"":"String/Gv;",
+j:function(a,b){if(typeof b!=="number"||Math.floor(b)!==b)throw H.b(P.u(b))
+if(b<0)throw H.b(P.N(b))
+if(b>=a.length)throw H.b(P.N(b))
+return a.charCodeAt(b)},
+dd:function(a,b){return H.ZT(a,b)},
+wL:function(a,b,c){var z,y,x,w
+if(c<0||c>b.length)throw H.b(P.TE(c,0,b.length))
+z=a.length
+y=b.length
+if(c+z>y)return
+for(x=0;x<z;++x){w=c+x
+if(typeof w!=="number"||Math.floor(w)!==w)H.vh(new P.AT(w))
+if(w<0)H.vh(P.N(w))
+if(w>=y)H.vh(P.N(w))
+w=b.charCodeAt(w)
+if(x>=z)H.vh(P.N(x))
+if(w!==a.charCodeAt(x))return}return new H.tQ(c,b,a)},
+g:function(a,b){if(typeof b!=="string")throw H.b(new P.AT(b))
+return a+b},
+Tc:function(a,b){var z,y
+z=b.length
+y=a.length
+if(z>y)return!1
+return b===this.yn(a,y-z)},
+h8:function(a,b,c){return H.ys(a,b,c)},
+Fr:function(a,b){return a.split(b)},
+Ys:function(a,b,c){var z
+if(c<0||c>a.length)throw H.b(P.TE(c,0,a.length))
+if(typeof b==="string"){z=c+b.length
+if(z>a.length)return!1
+return b===a.substring(c,z)}return J.I8(b,a,c)!=null},
+nC:function(a,b){return this.Ys(a,b,0)},
+JT:function(a,b,c){var z
+if(typeof b!=="number"||Math.floor(b)!==b)H.vh(P.u(b))
+if(c==null)c=a.length
+if(typeof c!=="number"||Math.floor(c)!==c)H.vh(P.u(c))
+z=J.Wx(b)
+if(z.C(b,0))throw H.b(P.N(b))
+if(z.D(b,c))throw H.b(P.N(b))
+if(J.xZ(c,a.length))throw H.b(P.N(c))
+return a.substring(b,c)},
+yn:function(a,b){return this.JT(a,b,null)},
+hc:function(a){return a.toLowerCase()},
+bS:function(a){var z,y,x,w,v
+for(z=a.length,y=0;y<z;){if(y>=z)H.vh(P.N(y))
+x=a.charCodeAt(y)
+if(x===32||x===13||J.Ga(x))++y
+else break}if(y===z)return""
+for(w=z;!0;w=v){v=w-1
+if(v<0)H.vh(P.N(v))
+if(v>=z)H.vh(P.N(v))
+x=a.charCodeAt(v)
+if(x===32||x===13||J.Ga(x));else break}if(y===0&&w===z)return a
+return a.substring(y,w)},
+XU:function(a,b,c){if(typeof c!=="number"||Math.floor(c)!==c)throw H.b(new P.AT(c))
+if(c<0||c>a.length)throw H.b(P.TE(c,0,a.length))
+return a.indexOf(b,c)},
+u8:function(a,b){return this.XU(a,b,0)},
+Pk:function(a,b,c){var z,y,x
+c=a.length
+if(typeof b==="string"){z=b.length
+if(typeof c!=="number")throw c.g()
+y=a.length
+if(c+z>y)c=y-z
+return a.lastIndexOf(b,c)}z=J.rY(b)
+x=c
+while(!0){if(typeof x!=="number")throw x.F()
+if(!(x>=0))break
+if(z.wL(b,a,x)!=null)return x;--x}return-1},
+cn:function(a,b){return this.Pk(a,b,null)},
+Is:function(a,b,c){if(b==null)H.vh(new P.AT(null))
+if(c<0||c>a.length)throw H.b(P.TE(c,0,a.length))
+return H.m2(a,b,c)},
+tg:function(a,b){return this.Is(a,b,0)},
+gl0:function(a){return a.length===0},
+"+isEmpty":0,
+gor:function(a){return a.length!==0},
+"+isNotEmpty":0,
+iM:function(a,b){var z
+if(typeof b!=="string")throw H.b(new P.AT(b))
+if(a===b)z=0
+else z=a<b?-1:1
+return z},
+bu:function(a){return a},
+giO:function(a){var z,y,x
+for(z=a.length,y=0,x=0;x<z;++x){y=536870911&y+a.charCodeAt(x)
+y=536870911&y+((524287&y)<<10>>>0)
+y^=y>>6}y=536870911&y+((67108863&y)<<3>>>0)
+y^=y>>11
+return 536870911&y+((16383&y)<<15>>>0)},
+gbx:function(a){return C.Db},
+gB:function(a){return a.length},
+"+length":0,
+t:function(a,b){if(typeof b!=="number"||Math.floor(b)!==b)throw H.b(P.u(b))
+if(b>=a.length||b<0)throw H.b(P.N(b))
+return a[b]},
+"+[]:1:0":0,
+$isString:true,
+static:{Ga:function(a){if(a<256)switch(a){case 9:case 10:case 11:case 12:case 13:case 32:case 133:case 160:return!0
+default:return!1}switch(a){case 5760:case 6158:case 8192:case 8193:case 8194:case 8195:case 8196:case 8197:case 8198:case 8199:case 8200:case 8201:case 8202:case 8232:case 8233:case 8239:case 8287:case 12288:case 65279:return!0
+default:return!1}}}}}],["_isolate_helper","dart:_isolate_helper",,H,{zd:function(a,b){var z=a.vV(b)
+$globalState.Xz.bL()
+return z},SG:function(a){var z
+$globalState=H.SK(a)
+if($globalState.EF===!0)return
+z=H.CO()
+$globalState.Nr=z
+$globalState.N0=z
+if(!!a.$is_Dv)z.vV(new H.PK(a))
+else if(!!a.$is_bh)z.vV(new H.JO(a))
+else z.vV(a)
+$globalState.Xz.bL()},yl:function(){var z=init.currentScript
+if(z!=null)return String(z.src)
+if(typeof version=="function"&&typeof os=="object"&&"system" in os)return H.ZV()
+if(typeof version=="function"&&typeof system=="function")return thisFilename()
+return},ZV:function(){var z,y
+z=new Error().stack
+if(z==null){z=(function() {try { throw new Error() } catch(e) { return e.stack }})()
+if(z==null)throw H.b(P.f("No stack trace"))}y=z.match(new RegExp("^ *at [^(]*\\((.*):[0-9]*:[0-9]*\\)$","m"))
+if(y!=null)return y[1]
+y=z.match(new RegExp("^[^@]*@(.*):[0-9]*$","m"))
+if(y!=null)return y[1]
+throw H.b(P.f("Cannot extract URI from \""+z+"\""))},Mg:function(a,b){var z,y,x,w,v,u,t,s,r,q
+z=H.Hh(b.data)
+y=J.U6(z)
+switch(y.t(z,"command")){case"start":$globalState.oL=y.t(z,"id")
+x=y.t(z,"functionName")
+w=x==null?$globalState.w2:init.globalFunctions[x]
+v=y.t(z,"args")
+u=H.Hh(y.t(z,"msg"))
+t=y.t(z,"isSpawnUri")
+s=H.Hh(y.t(z,"replyTo"))
+r=H.CO()
+$globalState.Xz.Rk.NZ(new H.IY(r,new H.jl(w,v,u,t,s),"worker-start"))
+$globalState.N0=r
+$globalState.Xz.bL()
+break
+case"spawn-worker":H.oT(y.t(z,"functionName"),y.t(z,"uri"),y.t(z,"args"),y.t(z,"msg"),y.t(z,"isSpawnUri"),y.t(z,"replyPort"))
+break
+case"message":if(y.t(z,"port")!=null)J.H4(y.t(z,"port"),y.t(z,"msg"))
+$globalState.Xz.bL()
+break
+case"close":y=$globalState.XC
+q=$.p6()
+y.Rz(y,q.t(q,a))
+a.terminate()
+$globalState.Xz.bL()
+break
+case"log":H.ZF(y.t(z,"msg"))
+break
+case"print":if($globalState.EF===!0){y=$globalState.rj
+q=H.Gy(H.B7(["command","print","msg",z],P.L5(null,null,null,null,null)))
+y.toString
+self.postMessage(q)}else P.JS(y.t(z,"msg"))
+break
+case"error":throw H.b(y.t(z,"msg"))
+default:}},ZF:function(a){var z,y,x,w
+if($globalState.EF===!0){y=$globalState.rj
+x=H.Gy(H.B7(["command","log","msg",a],P.L5(null,null,null,null,null)))
+y.toString
+self.postMessage(x)}else try{$.jk().console.log(a)}catch(w){H.Ru(w)
+z=new H.XO(w,null)
+throw H.b(P.FM(z))}},Kc:function(a,b,c,d,e){var z
+H.nC($globalState.N0.jO)
+$.lE=H.Ty()
+z=$.lE
+z.toString
+J.H4(e,["spawned",new H.JM(z,$globalState.N0.jO)])
+if(d!==!0)a.call$1(c)
+else{z=J.x(a)
+if(!!z.$is_bh)a.call$2(b,c)
+else if(!!z.$is_Dv)a.call$1(b)
+else a.call$0()}},oT:function(a,b,c,d,e,f){var z,y,x
+if(b==null)b=$.Cl()
+z=new Worker(b)
+z.onmessage=function(e) { H.NB.call$2(z, e); }
+y=$globalState
+x=y.hJ
+y.hJ=x+1
+y=$.p6()
+y.u(y,z,x)
+y=$globalState.XC
+y.u(y,x,z)
+z.postMessage(H.Gy(H.B7(["command","start","id",x,"replyTo",H.Gy(f),"args",c,"msg",H.Gy(d),"isSpawnUri",e,"functionName",a],P.L5(null,null,null,null,null))))},ff:function(a,b){var z=H.kU()
+z.YQ(a)
+P.pH(z.Gx).ml(new H.yc(b))},Gy:function(a){var z
+if($globalState.ji===!0){z=new H.Bj(0,new H.X1())
+z.mR=new H.aJ(null)
+return z.YQ(a)}else{z=new H.NO(new H.X1())
+z.mR=new H.aJ(null)
+return z.YQ(a)}},Hh:function(a){if($globalState.ji===!0)return new H.II(null).QS(a)
+else return a},vM:function(a){return a==null||typeof a==="string"||typeof a==="number"||typeof a==="boolean"},kV:function(a){return a==null||typeof a==="string"||typeof a==="number"||typeof a==="boolean"},PK:{"":"Tp;a",
+call$0:function(){this.a.call$1([])},
+"+call:0:0":0,
+$isEH:true,
+$is_X0:true},JO:{"":"Tp;b",
+call$0:function(){this.b.call$2([],null)},
+"+call:0:0":0,
+$isEH:true,
+$is_X0:true},O2:{"":"a;Hg,oL,hJ,N0,Nr,Xz,vu,EF,ji,i2@,rj,XC,w2",
+Jh:function(){var z,y
+z=$.Qm()==null
+y=$.Nl()
+this.EF=z&&$.JU()===!0
+if(this.EF!==!0)y=y!=null&&$.Cl()!=null
+else y=!0
+this.ji=y
+this.vu=z&&this.EF!==!0},
+hn:function(){var z=function (e) { H.NB.call$2(this.rj, e); }
+$.jk().onmessage=z
+$.jk().dartPrint = function (object) {}},
+i6:function(a){this.Jh()
+this.Xz=new H.cC(P.NZ(null,H.IY),0)
+this.i2=P.L5(null,null,null,J.im,H.aX)
+this.XC=P.L5(null,null,null,J.im,null)
+if(this.EF===!0){this.rj=new H.JH()
+this.hn()}},
+static:{SK:function(a){var z=new H.O2(0,0,1,null,null,null,null,null,null,null,null,null,a)
+z.i6(a)
+return z}}},aX:{"":"a;jO*,Gx,En<",
+vV:function(a){var z,y
+z=$globalState.N0
+$globalState.N0=this
+$=this.En
+y=null
+try{y=a.call$0()}finally{$globalState.N0=z
+if(z!=null)$=z.gEn()}return y},
+Zt:function(a){var z=this.Gx
+return z.t(z,a)},
+jT:function(a,b,c){var z
+if(this.Gx.x4(b))throw H.b(P.FM("Registry: ports must be registered only once."))
+z=this.Gx
+z.u(z,b,c)
+z=$globalState.i2
+z.u(z,this.jO,this)},
+IJ:function(a){var z=this.Gx
+z.Rz(z,a)
+if(this.Gx.X5===0){z=$globalState.i2
+z.Rz(z,this.jO)}},
+iZ:function(){var z,y
+z=$globalState
+y=z.Hg
+z.Hg=y+1
+this.jO=y
+this.Gx=P.L5(null,null,null,J.im,P.HI)
+this.En=new I()},
+$isaX:true,
+static:{CO:function(){var z=new H.aX(null,null,null)
+z.iZ()
+return z}}},cC:{"":"a;Rk,bZ",
+Jc:function(){var z=this.Rk
+if(z.av===z.HV)return
+return z.Ux()},
+LM:function(){if($globalState.Nr!=null&&$globalState.i2.x4($globalState.Nr.jO)&&$globalState.vu===!0&&$globalState.Nr.Gx.X5===0)throw H.b(P.FM("Program exited with open ReceivePorts."))},
+xB:function(){var z,y,x
+z=this.Jc()
+if(z==null){this.LM()
+y=$globalState
+if(y.EF===!0&&y.i2.X5===0&&y.Xz.bZ===0){y=y.rj
+x=H.Gy(H.B7(["command","close"],P.L5(null,null,null,null,null)))
+y.toString
+self.postMessage(x)}return!1}z.VU()
+return!0},
+Wu:function(){if($.Qm()!=null)new H.RA(this).call$0()
+else for(;this.xB(););},
+bL:function(){var z,y,x,w,v
+if($globalState.EF!==!0)this.Wu()
+else try{this.Wu()}catch(x){w=H.Ru(x)
+z=w
+y=new H.XO(x,null)
+w=$globalState.rj
+v=H.Gy(H.B7(["command","error","msg",H.d(z)+"\n"+H.d(y)],P.L5(null,null,null,null,null)))
+w.toString
+self.postMessage(v)}}},RA:{"":"Tp;a",
+call$0:function(){if(!this.a.xB())return
+P.rT(C.RT,this)},
+"+call:0:0":0,
+$isEH:true,
+$is_X0:true},IY:{"":"a;F1*,i3,G1*",
+VU:function(){this.F1.vV(this.i3)},
+$isIY:true},JH:{"":"a;"},jl:{"":"Tp;a,b,c,d,e",
+call$0:function(){H.Kc(this.a,this.b,this.c,this.d,this.e)},
+"+call:0:0":0,
+$isEH:true,
+$is_X0:true},Iy:{"":"a;",$isbC:true},JM:{"":"Iy;JE,tv",
+wR:function(a,b){H.ff(b,new H.Ua(this,b))},
+n:function(a,b){var z
+if(b==null)return!1
+z=J.x(b)
+return typeof b==="object"&&b!==null&&!!z.$isJM&&J.xC(this.JE,b.JE)},
+giO:function(a){return this.JE.gng()},
+$isJM:true,
+$isbC:true},Ua:{"":"Tp;b,c",
+call$0:function(){var z,y,x,w,v,u,t
+z={}
+y=$globalState.i2
+x=this.b
+w=x.tv
+v=y.t(y,w)
+if(v==null)return
+if((x.JE.gda().Gv&4)!==0)return
+u=$globalState.N0!=null&&$globalState.N0.jO!==w
+t=this.c
+z.a=t
+if(u)z.a=H.Gy(z.a)
+y=$globalState.Xz
+w="receive "+H.d(t)
+y.Rk.NZ(new H.IY(v,new H.JG(z,x,u),w))},
+"+call:0:0":0,
+$isEH:true,
+$is_X0:true},JG:{"":"Tp;a,d,e",
+call$0:function(){var z,y
+z=this.d.JE
+if((z.gda().Gv&4)===0){if(this.e){y=this.a
+y.a=H.Hh(y.a)}z=z.gda()
+y=this.a.a
+if(z.Gv>=4)H.vh(z.BW())
+z.Rg(y)}},
+"+call:0:0":0,
+$isEH:true,
+$is_X0:true},ns:{"":"Iy;Ws,bv,tv",
+wR:function(a,b){H.ff(b,new H.wd(this,b))},
+n:function(a,b){var z
+if(b==null)return!1
+z=J.x(b)
+return typeof b==="object"&&b!==null&&!!z.$isns&&J.xC(this.Ws,b.Ws)&&J.xC(this.tv,b.tv)&&J.xC(this.bv,b.bv)},
+giO:function(a){var z,y,x
+z=J.Eh(this.Ws,16)
+y=J.Eh(this.tv,8)
+x=this.bv
+if(typeof x!=="number")throw H.s(x)
+return(z^y^x)>>>0},
+$isns:true,
+$isbC:true},wd:{"":"Tp;a,b",
+call$0:function(){var z,y,x,w
+z=this.a
+y=H.Gy(H.B7(["command","message","port",z,"msg",this.b],P.L5(null,null,null,null,null)))
+if($globalState.EF===!0){$globalState.rj.toString
+self.postMessage(y)}else{x=$globalState.XC
+w=x.t(x,z.Ws)
+if(w!=null)w.postMessage(y)}},
+"+call:0:0":0,
+$isEH:true,
+$is_X0:true},TA:{"":"qh;ng<,da<",
+KR:function(a,b,c,d){var z=this.da
+z.toString
+z=new P.O9(z)
+H.VM(z,[null])
+return z.KR(a,b,c,d)},
+zC:function(a,b,c){return this.KR(a,null,b,c)},
+yI:function(a){return this.KR(a,null,null,null)},
+cO:function(a){var z=this.da
+if((z.Gv&4)!==0)return
+z.cO(z)
+$globalState.N0.IJ(this.ng)},
+gJK:function(a){return new H.YP(this,H.TA.prototype.cO,a,"cO")},
+Oe:function(){this.da=P.Ve(this.gJK(this),null,null,null,!0,null)
+var z=$globalState.N0
+z.jT(z,this.ng,this)},
+$asqh:function(){return[null]},
+$isHI:true,
+$isqh:true,
+static:{"":"b9",Ty:function(){var z=$.b9
+$.b9=z+1
+z=new H.TA(z,null)
+z.Oe()
+return z}}},yc:{"":"Tp;a",
+call$1:function(a){return this.a.call$0()},
+"+call:1:0":0,
+$isEH:true,
+$is_HB:true,
+$is_Dv:true},I9:{"":"HU;Gx,mR",
+Pq:function(a){},
+wb:function(a){var z=this.mR
+if(z.t(z,a)!=null)return
+z=this.mR
+z.u(z,a,!0)
+J.kH(a,this.gRQ())},
+OI:function(a){var z=this.mR
+if(z.t(z,a)!=null)return
+z=this.mR
+z.u(z,a,!0)
+J.kH(a.gUQ(a),this.gRQ())},
+DE:function(a){},
+IW:function(){this.mR=new H.aJ(null)},
+static:{kU:function(){var z=new H.I9([],new H.X1())
+z.IW()
+return z}}},Bj:{"":"Dd;CN,mR",
+DE:function(a){if(!!a.$isJM)return["sendport",$globalState.oL,a.tv,a.JE.gng()]
+if(!!a.$isns)return["sendport",a.Ws,a.tv,a.bv]
+throw H.b("Illegal underlying port "+H.d(a))}},NO:{"":"oo;mR",
+DE:function(a){if(!!a.$isJM)return new H.JM(a.JE,a.tv)
+if(!!a.$isns)return new H.ns(a.Ws,a.bv,a.tv)
+throw H.b("Illegal underlying port "+H.d(a))}},II:{"":"AP;RZ",
+Vf:function(a){var z,y,x,w,v,u
+z=J.U6(a)
+y=z.t(a,1)
+x=z.t(a,2)
+w=z.t(a,3)
+if(J.xC(y,$globalState.oL)){z=$globalState.i2
+v=z.t(z,x)
+if(v==null)return
+u=v.Zt(w)
+if(u==null)return
+return new H.JM(u,x)}else return new H.ns(y,w,x)}},aJ:{"":"a;MD",
+t:function(a,b){return b.__MessageTraverser__attached_info__},
+"+[]:1:0":0,
+u:function(a,b,c){this.MD.push(b)
+b.__MessageTraverser__attached_info__=c},
+"+[]=:2:0":0,
+Hn:function(a){this.MD=P.A(null,null)},
+F4:function(){var z,y,x
+for(z=this.MD.length,y=0;y<z;++y){x=this.MD
+if(y>=x.length)throw H.e(x,y)
+x[y].__MessageTraverser__attached_info__=null}this.MD=null}},X1:{"":"a;",
+t:function(a,b){return},
+"+[]:1:0":0,
+u:function(a,b,c){},
+"+[]=:2:0":0,
+Hn:function(a){},
+F4:function(){}},HU:{"":"a;",
+YQ:function(a){var z,y
+if(H.vM(a))return this.Pq(a)
+y=this.mR
+y.Hn(y)
+z=null
+try{z=this.I8(a)}finally{this.mR.F4()}return z},
+I8:function(a){var z
+if(a==null||typeof a==="string"||typeof a==="number"||typeof a==="boolean")return this.Pq(a)
+z=J.x(a)
+if(typeof a==="object"&&a!==null&&(a.constructor===Array||!!z.$isList))return this.wb(a)
+if(typeof a==="object"&&a!==null&&!!z.$isL8)return this.OI(a)
+if(typeof a==="object"&&a!==null&&!!z.$isbC)return this.DE(a)
+return this.YZ(a)},
+gRQ:function(){return new H.Pm(this,H.HU.prototype.I8,null,"I8")},
+YZ:function(a){throw H.b("Message serialization: Illegal value "+H.d(a)+" passed")}},oo:{"":"HU;",
+Pq:function(a){return a},
+wb:function(a){var z,y,x,w,v,u
+z=this.mR
+y=z.t(z,a)
+if(y!=null)return y
+z=J.U6(a)
+x=z.gB(a)
+y=P.A(x,null)
+w=this.mR
+w.u(w,a,y)
+if(typeof x!=="number")throw H.s(x)
+w=y.length
+v=0
+for(;v<x;++v){u=this.I8(z.t(a,v))
+if(v>=w)throw H.e(y,v)
+y[v]=u}return y},
+OI:function(a){var z,y
+z={}
+y=this.mR
+z.a=y.t(y,a)
+y=z.a
+if(y!=null)return y
+z.a=P.L5(null,null,null,null,null)
+y=this.mR
+y.u(y,a,z.a)
+a.aN(a,new H.OW(z,this))
+return z.a}},OW:{"":"Tp;a,b",
+call$2:function(a,b){var z=this.b
+J.kW(this.a.a,z.I8(a),z.I8(b))},
+"+call:2:0":0,
+$isEH:true,
+$is_bh:true},Dd:{"":"HU;",
+Pq:function(a){return a},
+wb:function(a){var z,y,x
+z=this.mR
+y=z.t(z,a)
+if(y!=null)return["ref",y]
+x=this.CN
+this.CN=x+1
+z=this.mR
+z.u(z,a,x)
+return["list",x,this.mE(a)]},
+OI:function(a){var z,y,x
+z=this.mR
+y=z.t(z,a)
+if(y!=null)return["ref",y]
+x=this.CN
+this.CN=x+1
+z=this.mR
+z.u(z,a,x)
+return["map",x,this.mE(J.qA(a.gvc(a))),this.mE(J.qA(a.gUQ(a)))]},
+mE:function(a){var z,y,x,w,v,u
+z=J.U6(a)
+y=z.gB(a)
+x=P.A(y,null)
+if(typeof y!=="number")throw H.s(y)
+w=x.length
+v=0
+for(;v<y;++v){u=this.I8(z.t(a,v))
+if(v>=w)throw H.e(x,v)
+x[v]=u}return x}},AP:{"":"a;",
+QS:function(a){if(H.kV(a))return a
+this.RZ=P.Py(null,null,null,null,null)
+return this.XE(a)},
+XE:function(a){var z,y
+if(a==null||typeof a==="string"||typeof a==="number"||typeof a==="boolean")return a
+z=J.U6(a)
+switch(z.t(a,0)){case"ref":y=z.t(a,1)
+z=this.RZ
+return z.t(z,y)
+case"list":return this.Dj(a)
+case"map":return this.GD(a)
+case"sendport":return this.Vf(a)
+default:return this.PR(a)}},
+Dj:function(a){var z,y,x,w,v
+z=J.U6(a)
+y=z.t(a,1)
+x=z.t(a,2)
+z=this.RZ
+z.u(z,y,x)
+z=J.U6(x)
+w=z.gB(x)
+if(typeof w!=="number")throw H.s(w)
+v=0
+for(;v<w;++v)z.u(x,v,this.XE(z.t(x,v)))
+return x},
+GD:function(a){var z,y,x,w,v,u,t,s
+z=P.L5(null,null,null,null,null)
+y=J.U6(a)
+x=y.t(a,1)
+w=this.RZ
+w.u(w,x,z)
+v=y.t(a,2)
+u=y.t(a,3)
+y=J.U6(v)
+t=y.gB(v)
+if(typeof t!=="number")throw H.s(t)
+w=J.U6(u)
+s=0
+for(;s<t;++s)z.u(z,this.XE(y.t(v,s)),this.XE(w.t(u,s)))
+return z},
+PR:function(a){throw H.b("Unexpected serialized object")}},yH:{"":"a;Kf,zu,p9",
+ed:function(){if($.jk().setTimeout!=null){if(this.zu)throw H.b(P.f("Timer in event loop cannot be canceled."))
+if(this.p9==null)return
+var z=$globalState.Xz
+z.bZ=z.bZ-1
+if(this.Kf)$.jk().clearTimeout(this.p9)
+else $.jk().clearInterval(this.p9)
+this.p9=null}else throw H.b(P.f("Canceling a timer."))},
+Qa:function(a,b){var z,y
+if(a===0)z=$.jk().setTimeout==null||$globalState.EF===!0
+else z=!1
+if(z){this.p9=1
+z=$globalState.Xz
+y=$globalState.N0
+z.Rk.NZ(new H.IY(y,new H.FA(this,b),"timer"))
+this.zu=!0}else if($.jk().setTimeout!=null){z=$globalState.Xz
+z.bZ=z.bZ+1
+this.p9=$.jk().setTimeout(H.tR(new H.Av(this,b),0),a)}else throw H.b(P.f("Timer greater than 0."))},
+static:{cy:function(a,b){var z=new H.yH(!0,!1,null)
+z.Qa(a,b)
+return z}}},FA:{"":"Tp;a,b",
+call$0:function(){this.a.p9=null
+this.b.call$0()},
+"+call:0:0":0,
+$isEH:true,
+$is_X0:true},Av:{"":"Tp;c,d",
+call$0:function(){this.c.p9=null
+var z=$globalState.Xz
+z.bZ=z.bZ-1
+this.d.call$0()},
+"+call:0:0":0,
+$isEH:true,
+$is_X0:true}}],["_js_helper","dart:_js_helper",,H,{wV:function(a,b){var z,y
+if(b!=null){z=b.x
+if(z!=null)return z}y=J.x(a)
+return typeof a==="object"&&a!==null&&!!y.$isXj},d:function(a){var z
+if(typeof a==="string")return a
+if(typeof a==="number"){if(a!==0)return""+a}else if(!0===a)return"true"
+else if(!1===a)return"false"
+else if(a==null)return"null"
+z=J.AG(a)
+if(typeof z!=="string")throw H.b(P.u(a))
+return z},Hz:function(a){throw H.b(P.f("Can't use '"+H.d(a)+"' in reflection because it is not included in a @MirrorsUsed annotation."))},nC:function(a){$.te=$.te+("_"+H.d(a))
+$.eb=$.eb+("_"+H.d(a))},eQ:function(a){var z=a.$identityHash
+if(z==null){z=Math.random()*0x3fffffff|0
+a.$identityHash=z}return z},vx:function(a){throw H.b(P.cD(a))},BU:function(a,b,c){var z,y,x,w,v,u
+if(c==null)c=H.Rm
+if(typeof a!=="string")H.vh(new P.AT(a))
+z=/^\s*[+-]?((0x[a-f0-9]+)|(\d+)|([a-z0-9]+))\s*$/i.exec(a)
+if(b==null){if(z!=null){y=z.length
+if(2>=y)throw H.e(z,2)
+if(z[2]!=null)return parseInt(a,16)
+if(3>=y)throw H.e(z,3)
+if(z[3]!=null)return parseInt(a,10)
+return c.call$1(a)}b=10}else{if(typeof b!=="number"||Math.floor(b)!==b)throw H.b(new P.AT("Radix is not an integer"))
+if(b<2||b>36)throw H.b(P.C3("Radix "+H.d(b)+" not in range 2..36"))
+if(z!=null){if(b===10){if(3>=z.length)throw H.e(z,3)
+y=z[3]!=null}else y=!1
+if(y)return parseInt(a,10)
+if(!(b<10)){if(3>=z.length)throw H.e(z,3)
+y=z[3]==null}else y=!0
+if(y){x=b<=10?48+b-1:97+b-10-1
+if(1>=z.length)throw H.e(z,1)
+w=z[1]
+y=J.U6(w)
+v=0
+while(!0){u=y.gB(w)
+if(typeof u!=="number")throw H.s(u)
+if(!(v<u))break
+y.j(w,0)
+if(y.j(w,v)>x)return c.call$1(a);++v}}}}if(z==null)return c.call$1(a)
+return parseInt(a,b)},IH:function(a,b){var z,y
+if(typeof a!=="string")H.vh(new P.AT(a))
+if(b==null)b=H.Rm
+if(!/^\s*[+-]?(?:Infinity|NaN|(?:\.\d+|\d+(?:\.\d*)?)(?:[eE][+-]?\d+)?)\s*$/.test(a))return b.call$1(a)
+z=parseFloat(a)
+if(isNaN(z)){y=J.rr(a)
+if(y==="NaN"||y==="+NaN"||y==="-NaN")return z
+return b.call$1(a)}return z},lh:function(a){var z,y,x
+z=C.Mo(J.x(a))
+if(z==="Object"){y=String(a.constructor).match(/^\s*function\s*(\S*)\s*\(/)[1]
+if(typeof y==="string")z=y}x=J.rY(z)
+if(x.j(z,0)===36)z=x.yn(z,1)
+x=H.oX(a)
+return H.d(z)+H.ia(x,0,null)},a5:function(a){return"Instance of '"+H.lh(a)+"'"},rD:function(a){var z=new Array(a)
+z.fixed$length=!0
+return z},VK:function(a){var z,y,x,w,v,u
+z=a.length
+for(y=z<=500,x="",w=0;w<z;w+=500){if(y)v=a
+else{u=w+500
+u=u<z?u:z
+v=a.slice(w,u)}x+=String.fromCharCode.apply(null,v)}return x},Cq:function(a){var z,y,x,w,v
+z=[]
+z.$builtinTypeInfo=[J.im]
+y=H.Y9(a.$asQ,H.oX(a))
+x=y==null?null:y[0]
+w=new H.a7(a,a.length,0,null)
+w.$builtinTypeInfo=[x]
+for(;w.G();){v=w.mD
+if(typeof v!=="number"||Math.floor(v)!==v)throw H.b(P.u(v))
+if(v<=65535)z.push(v)
+else if(v<=1114111){z.push(55296+(C.jn.m(v-65536,10)&1023))
+z.push(56320+(v&1023))}else throw H.b(P.u(v))}return H.VK(z)},eT:function(a){var z,y
+for(z=new H.a7(a,a.length,0,null),H.VM(z,[H.W8(a,"Q",0)]);z.G();){y=z.mD
+if(typeof y!=="number"||Math.floor(y)!==y)throw H.b(P.u(y))
+if(y<0)throw H.b(P.u(y))
+if(y>65535)return H.Cq(a)}return H.VK(a)},zW:function(a,b,c,d,e,f,g,h){var z,y,x
+if(typeof a!=="number"||Math.floor(a)!==a)H.vh(new P.AT(a))
+if(typeof b!=="number"||Math.floor(b)!==b)H.vh(new P.AT(b))
+if(typeof c!=="number"||Math.floor(c)!==c)H.vh(new P.AT(c))
+if(typeof d!=="number"||Math.floor(d)!==d)H.vh(new P.AT(d))
+if(typeof e!=="number"||Math.floor(e)!==e)H.vh(new P.AT(e))
+if(typeof f!=="number"||Math.floor(f)!==f)H.vh(new P.AT(f))
+z=J.xH(b,1)
+y=h?Date.UTC(a,z,c,d,e,f,g):new Date(a,z,c,d,e,f,g).valueOf()
+if(isNaN(y)||y<-8640000000000000||y>8640000000000000)throw H.b(new P.AT(null))
+x=J.Wx(a)
+if(x.E(a,0)||x.C(a,100))return H.uM(y,a,h)
+return y},uM:function(a,b,c){var z=new Date(a)
+if(c)z.setUTCFullYear(b)
+else z.setFullYear(b)
+return z.valueOf()},U8:function(a){if(a.date===void 0)a.date=new Date(a.rq)
+return a.date},tJ:function(a){return a.aL?H.U8(a).getUTCFullYear()+0:H.U8(a).getFullYear()+0},NS:function(a){return a.aL?H.U8(a).getUTCMonth()+1:H.U8(a).getMonth()+1},jA:function(a){return a.aL?H.U8(a).getUTCDate()+0:H.U8(a).getDate()+0},KL:function(a){return a.aL?H.U8(a).getUTCHours()+0:H.U8(a).getHours()+0},ch:function(a){return a.aL?H.U8(a).getUTCMinutes()+0:H.U8(a).getMinutes()+0},XJ:function(a){return a.aL?H.U8(a).getUTCSeconds()+0:H.U8(a).getSeconds()+0},o1:function(a){return a.aL?H.U8(a).getUTCMilliseconds()+0:H.U8(a).getMilliseconds()+0},of:function(a,b){if(a==null||typeof a==="boolean"||typeof a==="number"||typeof a==="string")throw H.b(new P.AT(a))
+return a[b]},aw:function(a,b,c){if(a==null||typeof a==="boolean"||typeof a==="number"||typeof a==="string")throw H.b(new P.AT(a))
+a[b]=c},Ek:function(a,b,c){var z,y,x,w,v,u,t,s,r,q
+z={}
+z.a=0
+y=P.p9("")
+x=[]
+z.a=z.a+b.length
+C.Nm.Ay(x,b)
+if("call$catchAll" in a){w=a.call$catchAll()
+if(c!=null&&!c.gl0(c))c.aN(c,new H.u8(w))
+v=Object.getOwnPropertyNames(w)
+u=z.a
+t=J.U6(v)
+s=t.gB(v)
+if(typeof s!=="number")throw H.s(s)
+z.a=u+s
+t.aN(v,new H.Gi(y,x,w))}else if(c!=null&&!c.gl0(c))c.aN(c,new H.t2(z,y,x))
+r="call$"+H.d(z.a)+H.d(y)
+q=a[r]
+if(q==null){if(c==null)z=[]
+else{z=c.gvc(c)
+z=P.F(z,!0,H.W8(z,"mW",0))}return J.jf(a,new H.LI(C.Ka,r,0,x,z,null))}return q.apply(a,x)},pL:function(a){if(a=="String")return C.Kn
+if(a=="int")return C.c1
+if(a=="double")return C.yX
+if(a=="num")return C.oD
+if(a=="bool")return C.Fm
+if(a=="List")return C.E3
+return init.allClasses[a]},Pq:function(){var z={x:0}
+delete z.x
+return z},s:function(a){throw H.b(P.u(a))},e:function(a,b){if(a==null)J.q8(a)
+if(typeof b!=="number"||Math.floor(b)!==b)H.s(b)
+throw H.b(P.N(b))},b:function(a){var z
+if(a==null)a=new P.LK()
+z=new Error()
+z.dartException=a
+if("defineProperty" in Object){Object.defineProperty(z, "message", { get: H.Eu.call$0 })
+z.name=""}else z.toString=H.Eu.call$0
+return z},Ju:function(){return J.AG(this.dartException)},vh:function(a){throw H.b(a)},m9:function(a){a.immutable$list=!0
+a.fixed$length=!0
+return a},Ru:function(a){var z,y,x,w,v,u,t,s,r,q,p,o,n,m
+z=new H.Hk(a)
+if(a==null)return
+if(typeof a!=="object")return a
+if("dartException" in a)return z.call$1(a.dartException)
+else if(!("message" in a))return a
+y=a.message
+if("number" in a&&typeof a.number=="number"){x=a.number
+w=x&65535
+if((C.jn.m(x,16)&8191)===10)switch(w){case 438:return z.call$1(H.T3(H.d(y)+" (Error "+w+")",null))
+case 445:case 5007:v=H.d(y)+" (Error "+w+")"
+return z.call$1(new H.ZQ(v,null))
+default:}}if(a instanceof TypeError){v=$.WD()
+u=$.OI()
+t=$.PH()
+s=$.D1()
+r=$.rx()
+q=$.Kr()
+p=$.W6()
+$.Bi()
+o=$.eA()
+n=$.ko()
+m=v.qS(y)
+if(m!=null)return z.call$1(H.T3(y,m))
+else{m=u.qS(y)
+if(m!=null){m.method="call"
+return z.call$1(H.T3(y,m))}else{m=t.qS(y)
+if(m==null){m=s.qS(y)
+if(m==null){m=r.qS(y)
+if(m==null){m=q.qS(y)
+if(m==null){m=p.qS(y)
+if(m==null){m=s.qS(y)
+if(m==null){m=o.qS(y)
+if(m==null){m=n.qS(y)
+v=m!=null}else v=!0}else v=!0}else v=!0}else v=!0}else v=!0}else v=!0}else v=!0
+if(v){v=m==null?null:m.method
+return z.call$1(new H.ZQ(y,v))}}}v=typeof y==="string"?y:""
+return z.call$1(new H.vV(v))}if(a instanceof RangeError){if(typeof y==="string"&&y.indexOf("call stack")!==-1)return new P.VS()
+return z.call$1(new P.AT(null))}if(typeof InternalError=="function"&&a instanceof InternalError)if(typeof y==="string"&&y==="too much recursion")return new P.VS()
+return a},CU:function(a){if(a==null||typeof a!='object')return J.v1(a)
+else return H.eQ(a)},B7:function(a,b){var z,y,x,w
+z=a.length
+for(y=0;y<z;y=w){x=y+1
+w=x+1
+b.u(b,a[y],a[x])}return b},ft:function(a,b,c,d,e,f,g){var z=J.x(c)
+if(z.n(c,0))return H.zd(b,new H.dr(a))
+else if(z.n(c,1))return H.zd(b,new H.TL(a,d))
+else if(z.n(c,2))return H.zd(b,new H.KX(a,d,e))
+else if(z.n(c,3))return H.zd(b,new H.uZ(a,d,e,f))
+else if(z.n(c,4))return H.zd(b,new H.OQ(a,d,e,f,g))
+else throw H.b(P.FM("Unsupported number of arguments for wrapped closure"))},tR:function(a,b){var z
+if(a==null)return
+z=a.$identity
+if(!!z)return z
+z=(function(closure, arity, context, invoke) { return function(a1, a2, a3, a4) { return invoke(closure, context, arity, a1, a2, a3, a4); };})(a,b,$globalState.N0,H.eH.call$7)
+a.$identity=z
+return z},SE:function(a,b){var z=J.U6(b)
+throw H.b(H.aq(H.lh(a),z.JT(b,3,z.gB(b))))},Go:function(a,b){var z
+if(a!=null)z=typeof a==="object"&&J.x(a)[b]
+else z=!0
+if(z)return a
+H.SE(a,b)},ag:function(a){throw H.b(P.Gz("Cyclic initialization for static "+H.d(a)))},mm:function(a){return new H.cu(a,null)
+"6,7,8"},"+createRuntimeType:1:0":1,VM:function(a,b){if(a!=null)a.$builtinTypeInfo=b
+return a},oX:function(a){if(a==null)return
+return a.$builtinTypeInfo},IM:function(a,b){return H.Y9(a["$as"+H.d(b)],H.oX(a))},W8:function(a,b,c){var z=H.IM(a,b)
+return z==null?null:z[c]},mS:function(a,b){return a[0].builtin$cls+H.ia(a,1,b)},Ko:function(a,b){if(a==null)return"dynamic"
+else if(typeof a==="object"&&a!==null&&a.constructor===Array)return H.mS(a,b)
+else if(typeof a=="function")return a.builtin$cls
+else if(typeof a==="number"&&Math.floor(a)===a)if(b==null)return C.jn.bu(a)
+else return b.call$1(a)
+else return},ia:function(a,b,c){var z,y,x,w,v,u
+if(a==null)return""
+z=P.p9("")
+for(y=b,x=!0,w=!0;y<a.length;++y){if(x)x=!1
+else z.vM=z.vM+", "
+v=a[y]
+if(v!=null)w=!1
+u=H.Ko(v,c)
+u=typeof u==="string"?u:H.d(u)
+z.vM=z.vM+u}return w?"":"<"+H.d(z)+">"},dJ:function(a){var z=typeof a==="object"&&a!==null&&a.constructor===Array?"List":J.x(a).constructor.builtin$cls
+return z+H.ia(a.$builtinTypeInfo,0,null)},Y9:function(a,b){if(typeof a==="object"&&a!==null&&a.constructor===Array)b=a
+else if(typeof a=="function"){a=H.ml(a,null,b)
+if(typeof a==="object"&&a!==null&&a.constructor===Array)b=a
+else if(typeof a=="function")b=H.ml(a,null,b)}return b},RB:function(a,b,c,d){var z,y
+if(a==null)return!1
+z=H.oX(a)
+y=J.x(a)
+if(y[b]==null)return!1
+return H.hv(H.Y9(y[d],z),c)},hv:function(a,b){var z,y
+if(a==null||b==null)return!0
+z=a.length
+for(y=0;y<z;++y)if(!H.t1(a[y],b[y]))return!1
+return!0},zN:function(a,b,c,d,e){var z,y,x,w,v
+if(a==null)return!0
+z=J.x(a)
+if("$is_"+H.d(b) in z)return!0
+y=$
+if(c!=null)y=init.allClasses[c]
+x=y["$signature_"+H.d(b)]
+if(x==null)return!1
+w=z.$signature
+if(w==null)return!1
+v=H.ml(w,z,null)
+if(typeof x=="function")if(e!=null)x=H.ml(x,null,e)
+else x=d!=null?H.ml(x,null,H.IM(d,c)):H.ml(x,null,null)
+return H.Ly(v,x)},IG:function(a,b,c){return H.ml(a,b,H.IM(b,c))},jH:function(a){return a==null||a.builtin$cls==="a"||a.builtin$cls==="c8"},Gq:function(a,b){var z,y
+if(a==null)return H.jH(b)
+if(b==null)return!0
+z=H.oX(a)
+a=J.x(a)
+if(z!=null){y=z.slice()
+y.splice(0,0,a)}else y=a
+return H.t1(y,b)},t1:function(a,b){var z,y,x,w,v,u
+if(a===b)return!0
+if(a==null||b==null)return!0
+if("func" in b){if(!("func" in a)){if("$is_"+H.d(b.func) in a)return!0
+z=a.$signature
+if(z==null)return!1
+a=z.apply(a,null)}return H.Ly(a,b)}if(b.builtin$cls==="EH"&&"func" in a)return!0
+y=typeof a==="object"&&a!==null&&a.constructor===Array
+x=y?a[0]:a
+w=typeof b==="object"&&b!==null&&b.constructor===Array
+v=w?b[0]:b
+if(!("$is"+H.d(H.Ko(v,null)) in x))return!1
+u=v!==x?x["$as"+H.d(H.Ko(v,null))]:null
+if(!y&&u==null||!w)return!0
+y=y?a.slice(1):null
+w=w?b.slice(1):null
+return H.hv(H.Y9(u,y),w)},pe:function(a,b){return H.t1(a,b)||H.t1(b,a)},Hc:function(a,b,c){var z,y,x,w,v
+if(b==null&&a==null)return!0
+if(b==null)return c
+if(a==null)return!1
+z=a.length
+y=b.length
+if(c){if(z<y)return!1}else if(z!==y)return!1
+for(x=0;x<y;++x){w=a[x]
+v=b[x]
+if(!(H.t1(w,v)||H.t1(v,w)))return!1}return!0},Vt:function(a,b){if(b==null)return!0
+if(a==null)return!1
+return function (t, s, isAssignable) {
+ for (var $name in t) {
+ if (!s.hasOwnProperty($name)) {
+ return false;
+ }
+ var tType = t[$name];
+ var sType = s[$name];
+ if (!isAssignable.call$2(sType, tType)) {
+ return false;
+ }
+ }
+ return true;
+ }(b, a, H.Qv)
+ },Ly:function(a,b){var z,y,x,w,v,u,t,s,r,q,p,o,n,m,l
+if(!("func" in a))return!1
+if("void" in a){if(!("void" in b)&&"ret" in b)return!1}else if(!("void" in b)){z=a.ret
+y=b.ret
+if(!(H.t1(z,y)||H.t1(y,z)))return!1}x=a.args
+w=b.args
+v=a.opt
+u=b.opt
+t=x!=null?x.length:0
+s=w!=null?w.length:0
+r=v!=null?v.length:0
+q=u!=null?u.length:0
+if(t>s)return!1
+if(t+r<s+q)return!1
+if(t===s){if(!H.Hc(x,w,!1))return!1
+if(!H.Hc(v,u,!0))return!1}else{for(p=0;p<t;++p){o=x[p]
+n=w[p]
+if(!(H.t1(o,n)||H.t1(n,o)))return!1}for(m=p,l=0;m<s;++l,++m){o=v[l]
+n=w[m]
+if(!(H.t1(o,n)||H.t1(n,o)))return!1}for(l=0;m<q;++l,++m){o=u[l]
+n=u[m]
+if(!(H.t1(o,n)||H.t1(n,o)))return!1}}return H.Vt(a.named,b.named)},ml:function(a,b,c){return a.apply(b,c)},uc:function(a){var z=$.NF
+return"Instance of "+(z==null?"<Unknown>":z.call$1(a))},bw:function(a){return H.eQ(a)},iw:function(a,b,c){Object.defineProperty(a, b, {value: c, enumerable: false, writable: true, configurable: true})},w3:function(a){var z,y,x,w,v,u
+z=$.NF.call$1(a)
+y=$.nw[z]
+if(y!=null){Object.defineProperty(a, init.dispatchPropertyName, {value: y, enumerable: false, writable: true, configurable: true})
+return y.i}x=$.vv[z]
+if(x!=null)return x
+w=init.interceptorsByTag[z]
+if(w==null){z=$.TX.call$2(a,z)
+if(z!=null){y=$.nw[z]
+if(y!=null){Object.defineProperty(a, init.dispatchPropertyName, {value: y, enumerable: false, writable: true, configurable: true})
+return y.i}x=$.vv[z]
+if(x!=null)return x
+w=init.interceptorsByTag[z]}}if(w==null)return
+x=w.prototype
+v=z[0]
+if(v==="!"){y=H.Va(x)
+$.nw[z]=y
+Object.defineProperty(a, init.dispatchPropertyName, {value: y, enumerable: false, writable: true, configurable: true})
+return y.i}if(v==="~"){$.vv[z]=x
+return x}if(v==="-"){u=H.Va(x)
+Object.defineProperty(Object.getPrototypeOf(a), init.dispatchPropertyName, {value: u, enumerable: false, writable: true, configurable: true})
+return u.i}if(v==="+")return H.Lc(a,x)
+if(v==="*")throw H.b(P.SY(z))
+if(init.leafTags[z]===true){u=H.Va(x)
+Object.defineProperty(Object.getPrototypeOf(a), init.dispatchPropertyName, {value: u, enumerable: false, writable: true, configurable: true})
+return u.i}else return H.Lc(a,x)},Lc:function(a,b){var z,y
+z=Object.getPrototypeOf(a)
+y=J.Qu(b,z,null,null)
+Object.defineProperty(z, init.dispatchPropertyName, {value: y, enumerable: false, writable: true, configurable: true})
+return b},Va:function(a){return J.Qu(a,!1,null,!!a.$isXj)},VF:function(a,b,c){var z=b.prototype
+if(init.leafTags[a]===true)return J.Qu(z,!1,null,!!z.$isXj)
+else return J.Qu(z,c,null,null)},XD:function(){if(!0===$.Bv)return
+$.Bv=!0
+H.Z1()},Z1:function(){var z,y,x,w,v,u,t
+$.nw=Object.create(null)
+$.vv=Object.create(null)
+H.kO()
+z=init.interceptorsByTag
+y=Object.getOwnPropertyNames(z)
+if(typeof window!="undefined"){window
+for(x=0;x<y.length;++x){w=y[x]
+v=$.x7.call$1(w)
+if(v!=null){u=H.VF(w,z[w],v)
+if(u!=null)Object.defineProperty(v, init.dispatchPropertyName, {value: u, enumerable: false, writable: true, configurable: true})}}}for(x=0;x<y.length;++x){w=y[x]
+if(/^[A-Za-z_]/.test(w)){t=z[w]
+z["!"+w]=t
+z["~"+w]=t
+z["-"+w]=t
+z["+"+w]=t
+z["*"+w]=t}}},kO:function(){var z,y,x,w,v,u,t
+z=C.HX()
+z=H.ud(C.Mc,H.ud(C.XQ,H.ud(C.XQ,H.ud(C.Px,H.ud(C.dE,H.ud(C.dK(C.Mo),z))))))
+if(typeof dartNativeDispatchHooksTransformer!="undefined"){y=dartNativeDispatchHooksTransformer
+if(typeof y=="function")y=[y]
+if(y.constructor==Array)for(x=0;x<y.length;++x){w=y[x]
+if(typeof w=="function")z=w(z)||z}}v=z.getTag
+u=z.getUnknownTag
+t=z.prototypeForTag
+$.NF=new H.dC(v)
+$.TX=new H.wN(u)
+$.x7=new H.VX(t)},ud:function(a,b){return a(b)||b},f7:function(a){var z=a.goX()
+z.lastIndex=0
+return z},ZT:function(a,b){var z,y,x,w,v,u
+z=P.A(null,P.Od)
+H.VM(z,[P.Od])
+y=b.length
+x=a.length
+for(w=0;!0;){v=C.xB.XU(b,a,w)
+if(v===-1)break
+z.push(new H.tQ(v,b,a))
+u=v+x
+if(u===y)break
+else w=v===u?w+1:u}return z},m2:function(a,b,c){var z,y
+if(typeof b==="string")return C.xB.XU(a,b,c)!==-1
+else{z=J.rY(b)
+if(typeof b==="object"&&b!==null&&!!z.$isVR){z=C.xB.yn(a,c)
+y=b.SQ
+return y.test(z)}else return J.pO(z.dd(b,C.xB.yn(a,c)))}},ys:function(a,b,c){var z,y,x,w
+if(typeof b==="string")if(b==="")if(a==="")return c
+else{z=P.p9("")
+y=a.length
+z.KF(c)
+for(x=0;x<y;++x){w=a[x]
+z.vM=z.vM+w
+z.vM=z.vM+c}return z.vM}else return a.replace(new RegExp(b.replace(new RegExp("[[\\]{}()*+?.\\\\^$|]",'g'),"\\$&"),'g'),c.replace("$","$$$$"))
+else{w=J.x(b)
+if(typeof b==="object"&&b!==null&&!!w.$isVR)return a.replace(H.f7(b),c.replace("$","$$$$"))
+else{if(b==null)H.vh(new P.AT(null))
+throw H.b("String.replaceAll(Pattern) UNIMPLEMENTED")}}},oH:{"":"a;",
+gl0:function(a){return J.xC(this.gB(this),0)},
+"+isEmpty":0,
+gor:function(a){return!J.xC(this.gB(this),0)},
+"+isNotEmpty":0,
+bu:function(a){return P.vW(this)},
+q3:function(){throw H.b(P.f("Cannot modify unmodifiable Map"))},
+u:function(a,b,c){return this.q3()},
+"+[]=:2:0":0,
+Rz:function(a,b){return this.q3()},
+$isL8:true},LP:{"":"oH;B>,il,js",
+PF:function(a){var z=this.gUQ(this)
+return z.Vr(z,new H.c2(this,a))},
+"+containsValue:1:0":0,
+x4:function(a){if(typeof a!=="string")return!1
+if(a==="__proto__")return!1
+return this.il.hasOwnProperty(a)},
+"+containsKey:1:0":0,
+t:function(a,b){if(typeof b!=="string")return
+if(!this.x4(b))return
+return this.il[b]},
+"+[]:1:0":0,
+aN:function(a,b){J.kH(this.js,new H.WT(this,b))},
+gvc:function(a){var z=new H.XR(this)
+H.VM(z,[H.W8(this,"LP",0)])
+return z},
+"+keys":0,
+gUQ:function(a){return J.C0(this.js,new H.p8(this))},
+"+values":0,
+$asoH:null,
+$asL8:null,
+$isqC:true},c2:{"":"Tp;a,b",
+call$1:function(a){return J.xC(a,this.b)},
+"+call:1:0":0,
+$isEH:true,
+$is_HB:true,
+$is_Dv:true},WT:{"":"Tp;a,b",
+call$1:function(a){var z=this.a
+return this.b.call$2(a,z.t(z,a))},
+"+call:1:0":0,
+$isEH:true,
+$is_HB:true,
+$is_Dv:true},p8:{"":"Tp;a",
+call$1:function(a){var z=this.a
+return z.t(z,a)},
+"+call:1:0":0,
+$isEH:true,
+$is_HB:true,
+$is_Dv:true},XR:{"":"mW;Nt",
+gA:function(a){return J.GP(this.Nt.js)},
+$asmW:null,
+$ascX:null},LI:{"":"a;t5,Qp,GF,FQ,md,mG",
+gWa:function(){var z,y,x
+z=this.t5
+y=J.x(z)
+if(typeof z==="object"&&z!==null&&!!y.$iswv)return z
+y=$.bx()
+x=y.t(y,z)
+if(x!=null){y=J.uH(x,":")
+if(0>=y.length)throw H.e(y,0)
+z=y[0]}this.t5=new H.GD(z)
+return this.t5},
+glT:function(){return this.GF===1},
+ghB:function(){return this.GF===2},
+gnd:function(){var z,y,x,w
+if(this.GF===1)return C.xD
+z=this.FQ
+y=z.length-this.md.length
+if(y===0)return C.xD
+x=[]
+for(w=0;w<y;++w){if(w>=z.length)throw H.e(z,w)
+x.push(z[w])}return H.m9(x)},
+gVm:function(){var z,y,x,w,v,u,t,s
+if(this.GF!==0){z=H.B7([],P.L5(null,null,null,null,null))
+H.VM(z,[P.wv,null])
+return z}z=this.md
+y=z.length
+x=this.FQ
+w=x.length-y
+if(y===0){z=H.B7([],P.L5(null,null,null,null,null))
+H.VM(z,[P.wv,null])
+return z}v=P.L5(null,null,null,P.wv,null)
+for(u=0;u<y;++u){if(u>=z.length)throw H.e(z,u)
+t=z[u]
+s=w+u
+if(s<0||s>=x.length)throw H.e(x,s)
+v.u(v,new H.GD(t),x[s])}return v},
+Yd:function(a){var z,y,x,w,v,u
+z=J.x(a)
+y=this.Qp
+x=$.Dq.indexOf(y)!==-1
+if(x){w=a===z?null:z
+v=z
+z=w}else{v=a
+z=null}u=v[y]
+if(typeof u==="function"){if(!("$reflectable" in u))H.Hz(J.Z0(this.gWa()))
+return new H.A2(u,x,z)}else return new H.F3(z)},
+static:{"":"W2,Le,De",}},A2:{"":"a;mr,eK,Ot",
+gpf:function(){return!1},
+Bj:function(a,b){var z,y
+if(!this.eK){if(typeof b!=="object"||b===null||b.constructor!==Array)b=P.F(b,!0,null)
+z=a}else{y=[a]
+C.Nm.Ay(y,b)
+z=this.Ot
+z=z!=null?z:a
+b=y}return this.mr.apply(z,b)}},F3:{"":"a;e0?",
+gpf:function(){return!0},
+Bj:function(a,b){var z=this.e0
+return J.jf(z==null?a:z,b)}},u8:{"":"Tp;b",
+call$2:function(a,b){this.b[a]=b},
+"+call:2:0":0,
+$isEH:true,
+$is_bh:true},Gi:{"":"Tp;c,d,e",
+call$1:function(a){this.c.KF("$"+H.d(a))
+this.d.push(this.e[a])},
+"+call:1:0":0,
+$isEH:true,
+$is_HB:true,
+$is_Dv:true},t2:{"":"Tp;a,f,g",
+call$2:function(a,b){var z
+this.f.KF("$"+H.d(a))
+this.g.push(b)
+z=this.a
+z.a=z.a+1},
+"+call:2:0":0,
+$isEH:true,
+$is_bh:true},Zr:{"":"a;i9,FQ,Vv,yB,Sp,lv",
+qS:function(a){var z,y,x
+z=new RegExp(this.i9).exec(a)
+if(z==null)return
+y={}
+x=this.FQ
+if(x!==-1)y.arguments=z[x+1]
+x=this.Vv
+if(x!==-1)y.argumentsExpr=z[x+1]
+x=this.yB
+if(x!==-1)y.expr=z[x+1]
+x=this.Sp
+if(x!==-1)y.method=z[x+1]
+x=this.lv
+if(x!==-1)y.receiver=z[x+1]
+return y},
+static:{"":"lm,k1,Re,fN,qi,rZ,BX,tt,dt,A7",cM:function(a){var z,y,x,w,v,u
+a=a.replace(String({}), '$receiver$').replace(new RegExp("[[\\]{}()*+?.\\\\^$|]",'g'),'\\$&')
+z=a.match(/\\\$[a-zA-Z]+\\\$/g)
+if(z==null)z=[]
+y=z.indexOf("\\$arguments\\$")
+x=z.indexOf("\\$argumentsExpr\\$")
+w=z.indexOf("\\$expr\\$")
+v=z.indexOf("\\$method\\$")
+u=z.indexOf("\\$receiver\\$")
+return new H.Zr(a.replace('\\$arguments\\$','((?:x|[^x])*)').replace('\\$argumentsExpr\\$','((?:x|[^x])*)').replace('\\$expr\\$','((?:x|[^x])*)').replace('\\$method\\$','((?:x|[^x])*)').replace('\\$receiver\\$','((?:x|[^x])*)'),y,x,w,v,u)},S7:function(a){return function($expr$) {
+ var $argumentsExpr$ = '$arguments$'
+ try {
+ $expr$.$method$($argumentsExpr$);
+ } catch (e) {
+ return e.message;
+ }
+}(a)},pb:function(){return function() {
+ var $argumentsExpr$ = '$arguments$'
+ try {
+ null.$method$($argumentsExpr$);
+ } catch (e) {
+ return e.message;
+ }
+}()},u9:function(){return function() {
+ var $argumentsExpr$ = '$arguments$'
+ try {
+ (void 0).$method$($argumentsExpr$);
+ } catch (e) {
+ return e.message;
+ }
+}()},Mj:function(a){return function($expr$) {
+ try {
+ $expr$.$method$;
+ } catch (e) {
+ return e.message;
+ }
+}(a)},Qd:function(){return function() {
+ try {
+ null.$method$;
+ } catch (e) {
+ return e.message;
+ }
+}()},m0:function(){return function() {
+ try {
+ (void 0).$method$;
+ } catch (e) {
+ return e.message;
+ }
+}()}}},ZQ:{"":"Ge;Zf,Sp",
+bu:function(a){var z=this.Sp
+if(z==null)return"NullError: "+H.d(this.Zf)
+return"NullError: Cannot call \""+H.d(z)+"\" on null"},
+$ismp:true,
+$isGe:true},az:{"":"Ge;Zf,Sp,lv",
+bu:function(a){var z,y
+z=this.Sp
+if(z==null)return"NoSuchMethodError: "+H.d(this.Zf)
+y=this.lv
+if(y==null)return"NoSuchMethodError: Cannot call \""+z+"\" ("+H.d(this.Zf)+")"
+return"NoSuchMethodError: Cannot call \""+z+"\" on \""+y+"\" ("+H.d(this.Zf)+")"},
+$ismp:true,
+$isGe:true,
+static:{T3:function(a,b){var z,y
+z=b==null
+y=z?null:b.method
+z=z?null:b.receiver
+return new H.az(a,y,z)}}},vV:{"":"Ge;Zf",
+bu:function(a){var z=this.Zf
+return C.xB.gl0(z)?"Error":"Error: "+z}},Hk:{"":"Tp;a",
+call$1:function(a){var z=J.x(a)
+if(typeof a==="object"&&a!==null&&!!z.$isGe)if(a.$thrownJsError==null)a.$thrownJsError=this.a
+return a},
+"+call:1:0":0,
+$isEH:true,
+$is_HB:true,
+$is_Dv:true},XO:{"":"a;MP,bQ",
+bu:function(a){var z,y
+z=this.bQ
+if(z!=null)return z
+z=this.MP
+y=typeof z==="object"?z.stack:null
+z=y==null?"":y
+this.bQ=z
+return z}},dr:{"":"Tp;a",
+call$0:function(){return this.a.call$0()},
+"+call:0:0":0,
+$isEH:true,
+$is_X0:true},TL:{"":"Tp;b,c",
+call$0:function(){return this.b.call$1(this.c)},
+"+call:0:0":0,
+$isEH:true,
+$is_X0:true},KX:{"":"Tp;d,e,f",
+call$0:function(){return this.d.call$2(this.e,this.f)},
+"+call:0:0":0,
+$isEH:true,
+$is_X0:true},uZ:{"":"Tp;g,h,i,j",
+call$0:function(){return this.g.call$3(this.h,this.i,this.j)},
+"+call:0:0":0,
+$isEH:true,
+$is_X0:true},OQ:{"":"Tp;k,l,m,n,o",
+call$0:function(){return this.k.call$4(this.l,this.m,this.n,this.o)},
+"+call:0:0":0,
+$isEH:true,
+$is_X0:true},Tp:{"":"a;",
+bu:function(a){return"Closure"},
+$isTp:true,
+$isEH:true},v:{"":"Tp;wc<,nn<,lv,Pp>",
+n:function(a,b){var z
+if(b==null)return!1
+if(this===b)return!0
+z=J.x(b)
+if(typeof b!=="object"||b===null||!z.$isv)return!1
+return this.wc===b.wc&&this.nn===b.nn&&this.lv===b.lv},
+giO:function(a){var z,y
+z=this.lv
+if(z==null)y=H.eQ(this.wc)
+else y=typeof z!=="object"?J.v1(z):H.eQ(z)
+return(y^H.eQ(this.nn))>>>0},
+$isv:true},Z3:{"":"a;Jy"},D2:{"":"a;Jy"},GT:{"":"a;oc>"},Pe:{"":"Ge;G1>",
+bu:function(a){return this.G1},
+$isGe:true,
+static:{aq:function(a,b){return new H.Pe("CastError: Casting value of type "+a+" to incompatible type "+H.d(b))}}},Eq:{"":"Ge;G1>",
+bu:function(a){return"RuntimeError: "+this.G1},
+static:{Pa:function(a){return new H.Eq(a)}}},cu:{"":"a;IE<,rE",
+bu:function(a){var z,y,x
+z=this.rE
+if(z!=null)return z
+y=this.IE
+x=H.Jg(y)
+y=x==null?y:x
+this.rE=y
+return y},
+giO:function(a){return J.v1(this.IE)},
+n:function(a,b){var z
+if(b==null)return!1
+z=J.x(b)
+return typeof b==="object"&&b!==null&&!!z.$iscu&&J.xC(this.IE,b.IE)},
+$iscu:true,
+$isuq:true},Lm:{"":"a;h7<,oc>,kU>"},dC:{"":"Tp;a",
+call$1:function(a){return this.a(a)},
+"+call:1:0":0,
+$isEH:true,
+$is_HB:true,
+$is_Dv:true},wN:{"":"Tp;b",
+call$2:function(a,b){return this.b(a,b)},
+"+call:2:0":0,
+$isEH:true,
+$is_bh:true},VX:{"":"Tp;c",
+call$1:function(a){return this.c(a)},
+"+call:1:0":0,
+$isEH:true,
+$is_HB:true,
+$is_Dv:true},VR:{"":"a;SQ,h2,fX",
+goX:function(){var z=this.h2
+if(z!=null)return z
+z=this.SQ
+z=H.v4(z.source,z.multiline,!z.ignoreCase,!0)
+this.h2=z
+return z},
+gXP:function(){var z=this.fX
+if(z!=null)return z
+z=this.SQ
+z=H.v4(z.source+"|()",z.multiline,!z.ignoreCase,!0)
+this.fX=z
+return z},
+ej:function(a){var z
+if(typeof a!=="string")H.vh(new P.AT(a))
+z=this.SQ.exec(a)
+if(z==null)return
+return H.yx(this,z)},
+zD:function(a){if(typeof a!=="string")H.vh(new P.AT(a))
+return this.SQ.test(a)},
+dd:function(a,b){if(typeof b!=="string")H.vh(new P.AT(b))
+return new H.KW(this,b)},
+oG:function(a,b){var z,y
+z=this.goX()
+z.lastIndex=b
+y=z.exec(a)
+if(y==null)return
+return H.yx(this,y)},
+Nd:function(a,b){var z,y,x,w
+z=this.gXP()
+z.lastIndex=b
+y=z.exec(a)
+if(y==null)return
+x=y.length
+w=x-1
+if(w<0)throw H.e(y,w)
+if(y[w]!=null)return
+J.wg(y,w)
+return H.yx(this,y)},
+wL:function(a,b,c){var z
+if(c>=0){z=J.q8(b)
+if(typeof z!=="number")throw H.s(z)
+z=c>z}else z=!0
+if(z)throw H.b(P.TE(c,0,J.q8(b)))
+return this.Nd(b,c)},
+R4:function(a,b){return this.wL(a,b,0)},
+$isVR:true,
+$iscT:true,
+static:{v4:function(a,b,c,d){var z,y,x,w,v
+z=b?"m":""
+y=c?"":"i"
+x=d?"g":""
+w=(function() {try {return new RegExp(a, z + y + x);} catch (e) {return e;}})()
+if(w instanceof RegExp)return w
+v=String(w)
+throw H.b(P.cD("Illegal RegExp pattern: "+a+", "+v))}}},EK:{"":"a;zO,oH",
+t:function(a,b){var z=this.oH
+if(b>>>0!==b||b>=z.length)throw H.e(z,b)
+return z[b]},
+"+[]:1:0":0,
+kx:function(a,b){},
+$isOd:true,
+static:{yx:function(a,b){var z=new H.EK(a,b)
+z.kx(a,b)
+return z}}},KW:{"":"mW;td,BZ",
+gA:function(a){return new H.Pb(this.td,this.BZ,null)},
+$asmW:function(){return[P.Od]},
+$ascX:function(){return[P.Od]}},Pb:{"":"a;EW,BZ,Jz",
+gl:function(){return this.Jz},
+"+current":0,
+G:function(){var z,y,x
+if(this.BZ==null)return!1
+z=this.Jz
+if(z!=null){z=z.oH
+y=z.index
+if(0>=z.length)throw H.e(z,0)
+z=J.q8(z[0])
+if(typeof z!=="number")throw H.s(z)
+x=y+z
+if(this.Jz.oH.index===x)++x}else x=0
+this.Jz=this.EW.oG(this.BZ,x)
+if(this.Jz==null){this.BZ=null
+return!1}return!0}},tQ:{"":"a;M,J9,zO",
+t:function(a,b){if(!J.xC(b,0))H.vh(P.N(b))
+return this.zO},
+"+[]:1:0":0,
+$isOd:true}}],["app_bootstrap","index.html_bootstrap.dart",,E,{E2:function(){$.x2=["package:observatory/src/observatory_elements/observatory_element.dart","package:observatory/src/observatory_elements/error_view.dart","package:observatory/src/observatory_elements/field_ref.dart","package:observatory/src/observatory_elements/instance_ref.dart","package:observatory/src/observatory_elements/class_view.dart","package:observatory/src/observatory_elements/disassembly_entry.dart","package:observatory/src/observatory_elements/code_view.dart","package:observatory/src/observatory_elements/collapsible_content.dart","package:observatory/src/observatory_elements/field_view.dart","package:observatory/src/observatory_elements/function_view.dart","package:observatory/src/observatory_elements/isolate_summary.dart","package:observatory/src/observatory_elements/isolate_list.dart","package:observatory/src/observatory_elements/instance_view.dart","package:observatory/src/observatory_elements/json_view.dart","package:observatory/src/observatory_elements/library_view.dart","package:observatory/src/observatory_elements/source_view.dart","package:observatory/src/observatory_elements/script_view.dart","package:observatory/src/observatory_elements/stack_trace.dart","package:observatory/src/observatory_elements/message_viewer.dart","package:observatory/src/observatory_elements/navigation_bar.dart","package:observatory/src/observatory_elements/response_viewer.dart","package:observatory/src/observatory_elements/observatory_application.dart","index.html.0.dart"]
+$.uP=!1
+A.Ok()}},1],["class_view_element","package:observatory/src/observatory_elements/class_view.dart",,Z,{aC:{"":["Vf;FJ%-,VJ,Ai,tH-,VJ,Ai,VJ,Ai,ZI,uN,z3,TQ,Vk,Ye,mT,KM-",null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,function(){return[C.nJ]}],
+gRu:function(a){return a.FJ
+"37,38,39"},
+"+cls":1,
+sRu:function(a,b){a.FJ=this.pD(a,C.XA,a.FJ,b)
+"40,31,37,38"},
+"+cls=":1,
+"@":function(){return[C.aQ]},
+static:{zg:function(a){var z,y,x,w,v
+z=$.Nd()
+y=P.Py(null,null,null,J.O,W.I0)
+x=J.O
+w=W.cv
+v=new V.br(P.Py(null,null,null,x,w),null,null)
+H.VM(v,[x,w])
+a.Ye=z
+a.mT=y
+a.KM=v
+C.kk.ZL(a)
+C.kk.FH(a)
+return a
+"9"},"+new ClassViewElement$created:0:0":1}},"+ClassViewElement": [41],Vf:{"":"uL+Pi;",$isd3:true}}],["code_view_element","package:observatory/src/observatory_elements/code_view.dart",,F,{Be:{"":["tu;Zw%-,VJ,Ai,tH-,VJ,Ai,VJ,Ai,ZI,uN,z3,TQ,Vk,Ye,mT,KM-",null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,function(){return[C.nJ]}],
+gtT:function(a){return a.Zw
+"37,38,39"},
+"+code":1,
+stT:function(a,b){a.Zw=this.pD(a,C.b1,a.Zw,b)
+"40,31,37,38"},
+"+code=":1,
+grK:function(a){var z=a.Zw
+if(z!=null&&J.UQ(z,"is_optimized")!=null)return"panel panel-success"
+return"panel panel-warning"
+"8"},
+"+cssPanelClass":1,
+"@":function(){return[C.xW]},
+static:{Fe:function(a){var z,y,x,w,v,u
+z=H.B7([],P.L5(null,null,null,null,null))
+z=R.Jk(z)
+y=$.Nd()
+x=P.Py(null,null,null,J.O,W.I0)
+w=J.O
+v=W.cv
+u=new V.br(P.Py(null,null,null,w,v),null,null)
+H.VM(u,[w,v])
+a.Zw=z
+a.Ye=y
+a.mT=x
+a.KM=u
+C.YD.ZL(a)
+C.YD.FH(a)
+return a
+"10"},"+new CodeViewElement$created:0:0":1}},"+CodeViewElement": [42],tu:{"":"uL+Pi;",$isd3:true}}],["collapsible_content_element","package:observatory/src/observatory_elements/collapsible_content.dart",,R,{i6:{"":["Vc;Xf%-,VA%-,P2%-,VJ,Ai,tH-,VJ,Ai,VJ,Ai,ZI,uN,z3,TQ,Vk,Ye,mT,KM-",null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,function(){return[C.nJ]}],
+gl7:function(a){return a.Xf
+"8,38,43"},
+"+iconClass":1,
+sl7:function(a,b){a.Xf=this.pD(a,C.Di,a.Xf,b)
+"40,31,8,38"},
+"+iconClass=":1,
+gai:function(a){return a.VA
+"8,38,43"},
+"+displayValue":1,
+sai:function(a,b){a.VA=this.pD(a,C.Jw,a.VA,b)
+"40,31,8,38"},
+"+displayValue=":1,
+gxj:function(a){return a.P2
+"44"},
+"+collapsed":1,
+sxj:function(a,b){a.P2=b
+this.dR(a)
+"40,45,44"},
+"+collapsed=":1,
+i4:function(a){Z.uL.prototype.i4.call(this,a)
+this.dR(a)
+"40"},
+"+enteredView:0:0":1,
+rS:function(a,b,c,d){a.P2=a.P2!==!0
+this.dR(a)
+this.dR(a)
+"40,46,47,48,40,49,50"},
+"+toggleDisplay:3:0":1,
+dR:function(a){var z,y
+z=a.P2
+y=a.Xf
+if(z===!0){a.Xf=this.pD(a,C.Di,y,"glyphicon glyphicon-chevron-down")
+a.VA=this.pD(a,C.Jw,a.VA,"none")}else{a.Xf=this.pD(a,C.Di,y,"glyphicon glyphicon-chevron-up")
+a.VA=this.pD(a,C.Jw,a.VA,"block")}"40"},
+"+_refresh:0:0":1,
+"@":function(){return[C.Gu]},
+static:{"":"Vl<-,DI<-",IT:function(a){var z,y,x,w,v
+z=$.Nd()
+y=P.Py(null,null,null,J.O,W.I0)
+x=J.O
+w=W.cv
+v=new V.br(P.Py(null,null,null,x,w),null,null)
+H.VM(v,[x,w])
+a.Xf="glyphicon glyphicon-chevron-down"
+a.VA="none"
+a.P2=!0
+a.Ye=z
+a.mT=y
+a.KM=v
+C.j8.ZL(a)
+C.j8.FH(a)
+return a
+"11"},"+new CollapsibleContentElement$created:0:0":1}},"+CollapsibleContentElement": [51],Vc:{"":"uL+Pi;",$isd3:true}}],["custom_element.polyfill","package:custom_element/polyfill.dart",,B,{G9:function(){if($.LX()==null)return!0
+var z=J.UQ($.LX(),"CustomElements")
+if(z==null)return"register" in document
+return J.xC(J.UQ(z,"ready"),!0)},zO:{"":"Tp;",
+call$0:function(){if(B.G9())return P.Ab(null,null)
+var z=new W.RO(new W.Jn(document).WK,"WebComponentsReady",!1)
+H.VM(z,[null])
+return z.gFV(z)},
+"+call:0:0":0,
+$isEH:true,
+$is_X0:true}}],["dart._collection.dev","dart:_collection-dev",,H,{Zi:function(a,b,c,d,e){var z,y,x,w,v
+z=J.Wx(b)
+if(z.C(b,d))for(y=J.xH(z.g(b,e),1),x=J.xH(J.WB(d,e),1),z=J.U6(a);w=J.Wx(y),w.F(y,b);y=w.W(y,1),x=J.xH(x,1))C.Nm.u(c,x,z.t(a,y))
+else for(w=J.U6(a),x=d,y=b;v=J.Wx(y),v.C(y,z.g(b,e));y=v.g(y,1),x=J.WB(x,1))C.Nm.u(c,x,w.t(a,y))},Ub:function(a,b,c,d){var z
+if(c>=a.length)return-1
+if(c<0)c=0
+for(z=c;z<d;++z){if(z>>>0!==z||z>=a.length)throw H.e(a,z)
+if(J.xC(a[z],b))return z}return-1},hH:function(a,b,c){var z,y
+if(typeof c!=="number")throw c.C()
+if(c<0)return-1
+z=a.length
+if(c>=z)c=z-1
+for(y=c;y>=0;--y){if(y>=a.length)throw H.e(a,y)
+if(J.xC(a[y],b))return y}return-1},bQ:function(a,b){var z
+for(z=new H.a7(a,a.length,0,null),H.VM(z,[H.W8(a,"Q",0)]);z.G();)b.call$1(z.mD)},Ck:function(a,b){var z
+for(z=new H.a7(a,a.length,0,null),H.VM(z,[H.W8(a,"Q",0)]);z.G();)if(b.call$1(z.mD)===!0)return!0
+return!1},n3:function(a,b,c){var z
+for(z=new H.a7(a,a.length,0,null),H.VM(z,[H.W8(a,"Q",0)]);z.G();)b=c.call$2(b,z.mD)
+return b},mx:function(a,b,c){var z,y,x
+for(y=0;y<$.RM().length;++y){x=$.RM()
+if(y>=x.length)throw H.e(x,y)
+if(x[y]===a)return H.d(b)+"..."+H.d(c)}z=P.p9("")
+try{$.RM().push(a)
+z.KF(b)
+z.We(a,", ")
+z.KF(c)}finally{x=$.RM()
+if(0>=x.length)throw H.e(x,0)
+x.pop()}return z.gvM()},Wv:function(a,b,c){return H.hH(a,b,a.length-1)},S6:function(a,b,c){var z=J.Wx(b)
+if(z.C(b,0)||z.D(b,a.length))throw H.b(P.TE(b,0,a.length))
+z=J.Wx(c)
+if(z.C(c,b)||z.D(c,a.length))throw H.b(P.TE(c,b,a.length))},qG:function(a,b,c,d,e){var z,y
+H.S6(a,b,c)
+if(typeof b!=="number")throw H.s(b)
+z=c-b
+if(z===0)return
+y=J.Wx(e)
+if(y.C(e,0))throw H.b(new P.AT(e))
+if(J.xZ(y.g(e,z),J.q8(d)))throw H.b(P.w("Not enough elements"))
+H.Zi(d,e,a,b,z)},IC:function(a,b,c){var z,y,x,w,v,u
+z=J.Wx(b)
+if(z.C(b,0)||z.D(b,a.length))throw H.b(P.TE(b,0,a.length))
+y=J.U6(c)
+x=y.gB(c)
+w=a.length
+if(typeof x!=="number")throw H.s(x)
+C.Nm.sB(a,w+x)
+z=z.g(b,x)
+w=a.length
+if(!!a.immutable$list)H.vh(P.f("set range"))
+H.qG(a,z,w,a,b)
+for(z=y.gA(c);z.G();b=u){v=z.mD
+u=J.WB(b,1)
+C.Nm.u(a,b,v)}},LJ:function(a){if(typeof dartPrint=="function"){dartPrint(a)
+return}if(typeof console=="object"&&typeof console.log=="function"){console.log(a)
+return}if(typeof window=="object")return
+if(typeof print=="function"){print(a)
+return}throw "Unable to print message: " + String(a)},aL:{"":"mW;",
+gA:function(a){var z=new H.a7(this,this.gB(this),0,null)
+H.VM(z,[H.W8(this,"aL",0)])
+return z},
+aN:function(a,b){var z,y
+z=this.gB(this)
+if(typeof z!=="number")throw H.s(z)
+y=0
+for(;y<z;++y){b.call$1(this.Zv(this,y))
+if(z!==this.gB(this))throw H.b(P.a4(this))}},
+gl0:function(a){return J.xC(this.gB(this),0)},
+"+isEmpty":0,
+grZ:function(a){if(J.xC(this.gB(this),0))throw H.b(new P.lj("No elements"))
+return this.Zv(this,J.xH(this.gB(this),1))},
+tg:function(a,b){var z,y
+z=this.gB(this)
+if(typeof z!=="number")throw H.s(z)
+y=0
+for(;y<z;++y){if(J.xC(this.Zv(this,y),b))return!0
+if(z!==this.gB(this))throw H.b(P.a4(this))}return!1},
+Vr:function(a,b){var z,y
+z=this.gB(this)
+if(typeof z!=="number")throw H.s(z)
+y=0
+for(;y<z;++y){if(b.call$1(this.Zv(this,y))===!0)return!0
+if(z!==this.gB(this))throw H.b(P.a4(this))}return!1},
+zV:function(a,b){var z,y,x,w,v,u
+z=this.gB(this)
+if(b.length!==0){y=J.x(z)
+if(y.n(z,0))return""
+x=H.d(this.Zv(this,0))
+if(!y.n(z,this.gB(this)))throw H.b(P.a4(this))
+w=P.p9(x)
+if(typeof z!=="number")throw H.s(z)
+v=1
+for(;v<z;++v){w.vM=w.vM+b
+u=this.Zv(this,v)
+u=typeof u==="string"?u:H.d(u)
+w.vM=w.vM+u
+if(z!==this.gB(this))throw H.b(P.a4(this))}return w.vM}else{w=P.p9("")
+if(typeof z!=="number")throw H.s(z)
+v=0
+for(;v<z;++v){u=this.Zv(this,v)
+u=typeof u==="string"?u:H.d(u)
+w.vM=w.vM+u
+if(z!==this.gB(this))throw H.b(P.a4(this))}return w.vM}},
+ev:function(a,b){return P.mW.prototype.ev.call(this,this,b)},
+ez:function(a,b){var z=new H.A8(this,b)
+H.VM(z,[null,null])
+return z},
+es:function(a,b,c){var z,y,x
+z=this.gB(this)
+if(typeof z!=="number")throw H.s(z)
+y=b
+x=0
+for(;x<z;++x){y=c.call$2(y,this.Zv(this,x))
+if(z!==this.gB(this))throw H.b(P.a4(this))}return y},
+eR:function(a,b){return H.j5(this,b,null,null)},
+tt:function(a,b){var z,y,x
+if(b){z=P.A(null,H.W8(this,"aL",0))
+H.VM(z,[H.W8(this,"aL",0)])
+C.Nm.sB(z,this.gB(this))}else{z=P.A(this.gB(this),H.W8(this,"aL",0))
+H.VM(z,[H.W8(this,"aL",0)])}y=0
+while(!0){x=this.gB(this)
+if(typeof x!=="number")throw H.s(x)
+if(!(y<x))break
+x=this.Zv(this,y)
+if(y>=z.length)throw H.e(z,y)
+z[y]=x;++y}return z},
+br:function(a){return this.tt(a,!0)},
+$asmW:null,
+$ascX:null,
+$isqC:true},nH:{"":"aL;Kw,Bz,n1",
+gX1:function(){var z,y
+z=J.q8(this.Kw)
+y=this.n1
+if(y==null||J.xZ(y,z))return z
+return y},
+gtO:function(){var z,y
+z=J.q8(this.Kw)
+y=this.Bz
+if(J.xZ(y,z))return z
+return y},
+gB:function(a){var z,y,x
+z=J.q8(this.Kw)
+y=this.Bz
+if(J.J5(y,z))return 0
+x=this.n1
+if(x==null||J.J5(x,z))return J.xH(z,y)
+return J.xH(x,y)},
+"+length":0,
+Zv:function(a,b){var z=J.WB(this.gtO(),b)
+if(J.u6(b,0)||J.J5(z,this.gX1()))throw H.b(P.TE(b,0,this.gB(this)))
+return J.i4(this.Kw,z)},
+eR:function(a,b){if(b<0)throw H.b(new P.bJ("value "+b))
+return H.j5(this.Kw,J.WB(this.Bz,b),this.n1,null)},
+qZ:function(a,b){var z,y,x
+if(J.u6(b,0))throw H.b(P.N(b))
+z=this.n1
+y=this.Bz
+if(z==null)return H.j5(this.Kw,y,J.WB(y,b),null)
+else{x=J.WB(y,b)
+if(J.u6(z,x))return this
+return H.j5(this.Kw,y,x,null)}},
+Hd:function(a,b,c,d){var z,y,x
+z=this.Bz
+y=J.Wx(z)
+if(y.C(z,0))throw H.b(P.N(z))
+x=this.n1
+if(x!=null){if(J.u6(x,0))throw H.b(P.N(x))
+if(y.D(z,x))throw H.b(P.TE(z,0,x))}},
+$asaL:null,
+$ascX:null,
+static:{j5:function(a,b,c,d){var z=new H.nH(a,b,c)
+H.VM(z,[d])
+z.Hd(a,b,c,d)
+return z}}},a7:{"":"a;Kw,qn,j2,mD",
+gl:function(){return this.mD},
+"+current":0,
+G:function(){var z,y,x,w
+z=this.Kw
+y=J.U6(z)
+x=y.gB(z)
+if(!J.xC(this.qn,x))throw H.b(P.a4(z))
+w=this.j2
+if(typeof x!=="number")throw H.s(x)
+if(w>=x){this.mD=null
+return!1}this.mD=y.Zv(z,w)
+this.j2=this.j2+1
+return!0}},i1:{"":"mW;Kw,ew",
+ei:function(a){return this.ew.call$1(a)},
+gA:function(a){var z=this.Kw
+z=z.gA(z)
+z=new H.MH(null,z,this.ew)
+H.VM(z,[H.W8(this,"i1",0),H.W8(this,"i1",1)])
+return z},
+gB:function(a){var z=this.Kw
+return z.gB(z)},
+"+length":0,
+gl0:function(a){var z=this.Kw
+return z.gl0(z)},
+"+isEmpty":0,
+grZ:function(a){var z=this.Kw
+return this.ei(z.grZ(z))},
+Zv:function(a,b){var z=this.Kw
+return this.ei(z.Zv(z,b))},
+$asmW:function(a,b){return[b]},
+$ascX:function(a,b){return[b]},
+static:{K1:function(a,b,c,d){var z
+if(!!a.$isqC){z=new H.xy(a,b)
+H.VM(z,[c,d])
+return z}z=new H.i1(a,b)
+H.VM(z,[c,d])
+return z}}},xy:{"":"i1;Kw,ew",$asi1:null,
+$ascX:function(a,b){return[b]},
+$isqC:true},MH:{"":"eL;mD,RX,ew",
+ei:function(a){return this.ew.call$1(a)},
+G:function(){var z=this.RX
+if(z.G()){this.mD=this.ei(z.gl())
+return!0}this.mD=null
+return!1},
+gl:function(){return this.mD},
+"+current":0,
+$aseL:function(a,b){return[b]}},A8:{"":"aL;qb,ew",
+ei:function(a){return this.ew.call$1(a)},
+gB:function(a){return J.q8(this.qb)},
+"+length":0,
+Zv:function(a,b){return this.ei(J.i4(this.qb,b))},
+$asaL:function(a,b){return[b]},
+$ascX:function(a,b){return[b]},
+$isqC:true},U5:{"":"mW;Kw,ew",
+gA:function(a){var z=J.GP(this.Kw)
+z=new H.SO(z,this.ew)
+H.VM(z,[H.W8(this,"U5",0)])
+return z},
+$asmW:null,
+$ascX:null},SO:{"":"eL;RX,ew",
+ei:function(a){return this.ew.call$1(a)},
+G:function(){for(var z=this.RX;z.G();)if(this.ei(z.gl())===!0)return!0
+return!1},
+gl:function(){return this.RX.gl()},
+"+current":0,
+$aseL:null},zs:{"":"mW;Kw,ew",
+gA:function(a){var z=J.GP(this.Kw)
+z=new H.rR(z,this.ew,C.Gw,null)
+H.VM(z,[H.W8(this,"zs",0),H.W8(this,"zs",1)])
+return z},
+$asmW:function(a,b){return[b]},
+$ascX:function(a,b){return[b]}},rR:{"":"a;RX,ew,IO,mD",
+ei:function(a){return this.ew.call$1(a)},
+gl:function(){return this.mD},
+"+current":0,
+G:function(){if(this.IO==null)return!1
+for(var z=this.RX;!this.IO.G();){this.mD=null
+if(z.G()){this.IO=null
+this.IO=J.GP(this.ei(z.gl()))}else return!1}this.mD=this.IO.gl()
+return!0}},AM:{"":"mW;Kw,xZ",
+eR:function(a,b){if(b<0)throw H.b(new P.bJ("value "+b))
+return H.ke(this.Kw,this.xZ+b,H.W8(this,"AM",0))},
+gA:function(a){var z=this.Kw
+z=z.gA(z)
+z=new H.U1(z,this.xZ)
+H.VM(z,[H.W8(this,"AM",0)])
+return z},
+q1:function(a,b,c){if(this.xZ<0)throw H.b(P.C3(this.xZ))},
+$asmW:null,
+$ascX:null,
+static:{ke:function(a,b,c){var z,y
+if(!!a.$isqC){z=c
+y=new H.d5(a,b)
+H.VM(y,[z])
+y.q1(a,b,z)
+return y}return H.bk(a,b,c)},bk:function(a,b,c){var z=new H.AM(a,b)
+H.VM(z,[c])
+z.q1(a,b,c)
+return z}}},d5:{"":"AM;Kw,xZ",
+gB:function(a){var z,y
+z=this.Kw
+y=J.xH(z.gB(z),this.xZ)
+if(J.J5(y,0))return y
+return 0},
+"+length":0,
+$asAM:null,
+$ascX:null,
+$isqC:true},U1:{"":"eL;RX,xZ",
+G:function(){var z,y
+for(z=this.RX,y=0;y<this.xZ;++y)z.G()
+this.xZ=0
+return z.G()},
+gl:function(){return this.RX.gl()},
+"+current":0,
+$aseL:null},SJ:{"":"a;",
+G:function(){return!1},
+gl:function(){return},
+"+current":0},SU:{"":"a;",
+sB:function(a,b){throw H.b(P.f("Cannot change the length of a fixed-length list"))},
+"+length=":0,
+h:function(a,b){throw H.b(P.f("Cannot add to a fixed-length list"))},
+Rz:function(a,b){throw H.b(P.f("Cannot remove from a fixed-length list"))}},Tv:{"":"a;",
+u:function(a,b,c){throw H.b(P.f("Cannot modify an unmodifiable list"))},
+"+[]=:2:0":0,
+sB:function(a,b){throw H.b(P.f("Cannot change the length of an unmodifiable list"))},
+"+length=":0,
+h:function(a,b){throw H.b(P.f("Cannot add to an unmodifiable list"))},
+Rz:function(a,b){throw H.b(P.f("Cannot remove from an unmodifiable list"))},
+YW:function(a,b,c,d,e){throw H.b(P.f("Cannot modify an unmodifiable list"))},
+$isList:true,
+$asWO:null,
+$isqC:true,
+$iscX:true,
+$ascX:null},XC:{"":"ar+Tv;",$asar:null,$asWO:null,$ascX:null,$isList:true,$isqC:true,$iscX:true},iK:{"":"aL;qb",
+gB:function(a){return J.q8(this.qb)},
+"+length":0,
+Zv:function(a,b){var z,y
+z=this.qb
+y=J.U6(z)
+return y.Zv(z,J.xH(J.xH(y.gB(z),1),b))},
+$asaL:null,
+$ascX:null},GD:{"":"a;hr>",
+n:function(a,b){var z
+if(b==null)return!1
+z=J.x(b)
+return typeof b==="object"&&b!==null&&!!z.$isGD&&J.xC(this.hr,b.hr)},
+giO:function(a){return 536870911&664597*J.v1(this.hr)},
+bu:function(a){return"Symbol(\""+H.d(this.hr)+"\")"},
+$isGD:true,
+$iswv:true,
+static:{"":"zP",le:function(a){var z=J.U6(a)
+if(z.gl0(a)===!0)return a
+if(z.nC(a,"_"))throw H.b(new P.AT("\""+H.d(a)+"\" is a private identifier"))
+z=$.R0().SQ
+if(typeof a!=="string")H.vh(new P.AT(a))
+if(!z.test(a))throw H.b(new P.AT("\""+H.d(a)+"\" is not an identifier or an empty String"))
+return a}}}}],["dart._js_mirrors","dart:_js_mirrors",,H,{YC:function(a){if(a==null)return
+return new H.GD(a)},X7:function(a){return H.YC(H.d(J.Z0(a))+"=")},vn:function(a){var z=J.x(a)
+if(typeof a==="object"&&a!==null&&!!z.$isTp)return new H.Sz(a)
+else return new H.iu(a)},jO:function(a){var z,y
+z=$.Sl()
+y=z.t(z,a)
+return H.tT(H.YC(y==null?a:y),a)},tT:function(a,b){var z,y,x,w,v,u,t,s,r,q,p
+if($.tY==null)$.tY=H.Pq()
+z=$.tY[b]
+if(z!=null)return z
+y=J.U6(b)
+x=y.u8(b,"<")
+if(x!==-1){w=H.jO(y.JT(b,0,x))
+z=new H.bl(w,y.JT(b,x+1,J.xH(y.gB(b),1)),null,null,null,null,null,null,null,null,null,null,null,w.gIf())
+$.tY[b]=z
+return z}v=H.pL(b)
+if(v==null){u=init.functionAliases[b]
+if(u!=null){z=new H.ng(b,null,a)
+z.CM=new H.Ar(init.metadata[u],null,null,null,z)
+$.tY[b]=z
+return z}throw H.b(P.f("Cannot find class for: "+H.d(a.hr)))}y=J.x(v)
+t=typeof v==="object"&&v!==null&&!!y.$isGv?v.constructor:v
+s=t["@"]
+if(s==null){r=null
+q=null}else{r=s[""]
+y=J.U6(r)
+if(typeof r==="object"&&r!==null&&(r.constructor===Array||!!y.$isList)){w=y.Mu(r,1,y.gB(r))
+q=w.br(w)
+r=y.t(r,0)}else q=null
+if(typeof r!=="string")r=""}y=J.uH(r,";")
+if(0>=y.length)throw H.e(y,0)
+p=J.uH(y[0],"+")
+if(p.length>1){y=$.Sl()
+y=y.t(y,b)==null}else y=!1
+z=y?H.MJ(p,b):new H.Wf(b,v,r,q,H.Pq(),null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,a)
+$.tY[b]=z
+return z},Vv:function(a){var z,y,x
+z=P.L5(null,null,null,null,null)
+for(y=J.GP(a);y.G();){x=y.gl()
+if(!x.gxV()&&!x.glT()&&!x.ghB())z.u(z,x.gIf(),x)}return z},Fk:function(a){var z,y,x
+z=P.L5(null,null,null,null,null)
+for(y=J.GP(a);y.G();){x=y.gl()
+if(x.gxV())z.u(z,x.gIf(),x)}return z},vE:function(a,b){var z,y,x,w,v,u
+z=P.L5(null,null,null,null,null)
+z.Ay(z,b)
+for(y=J.GP(a);y.G();){x=y.gl()
+if(x.ghB()){w=J.Z0(x.gIf())
+v=J.U6(w)
+v=z.t(z,H.YC(v.JT(w,0,J.xH(v.gB(w),1))))
+u=J.x(v)
+if(typeof v==="object"&&v!==null&&!!u.$isRY)continue}if(x.gxV())continue
+z.to(x.gIf(),new H.YX(x))}return z},MJ:function(a,b){var z,y,x,w,v,u,t
+z=[]
+for(y=new H.a7(a,a.length,0,null),H.VM(y,[H.W8(a,"Q",0)]);y.G();){x=y.mD
+w=$.Sl()
+v=w.t(w,x)
+z.push(H.tT(H.YC(v==null?x:v),x))}u=new H.a7(z,z.length,0,null)
+H.VM(u,[H.W8(z,"Q",0)])
+u.G()
+t=u.mD
+for(;u.G();)t=new H.BI(t,u.mD,null,H.YC(b))
+return t},w2:function(a,b){var z,y,x
+z=J.U6(a)
+y=0
+while(!0){x=z.gB(a)
+if(typeof x!=="number")throw H.s(x)
+if(!(y<x))break
+if(J.xC(z.t(a,y).gIf(),H.YC(b)))return y;++y}throw H.b(new P.AT("Type variable not present in list."))},Jf:function(a,b){var z,y,x,w,v,u
+z={}
+z.a=null
+for(y=a;y!=null;){x=J.x(y)
+if(typeof y==="object"&&y!==null&&!!x.$isMs){z.a=y
+break}y=y.gh7()}if(b==null)return $.Cr()
+else{x=z.a
+if(x==null)w=H.Ko(b,null)
+else if(x.gHA())if(typeof b==="number"&&Math.floor(b)===b){v=init.metadata[b]
+u=x.gNy()
+return J.UQ(u,H.w2(u,J.DA(v)))}else w=H.Ko(b,null)
+else w=H.Ko(b,new H.jB(z))}if(w!=null)return H.jO(new H.cu(w,null).IE)
+return P.re(C.yQ)},fb:function(a,b){if(a==null)return b
+return H.YC(H.d(J.Z0(a.gvd()))+"."+H.d(J.Z0(b)))},pj:function(a){var z,y,x,w
+z=a["@"]
+if(z!=null)return z()
+if(typeof a!=="function")return C.xD
+y=Function.prototype.toString.call(a)
+x=C.xB.cn(y,new H.VR(H.v4("\"[0-9,]*\";?[ \n\r]*}",!1,!0,!1),null,null))
+if(x===-1)return C.xD;++x
+w=new H.A8(C.xB.JT(y,x,C.xB.XU(y,"\"",x)).split(","),P.ya)
+H.VM(w,[null,null])
+w=new H.A8(w,new H.ye())
+H.VM(w,[null,null])
+return w.br(w)},jw:function(a,b,c,d){var z,y,x,w,v,u,t,s,r
+z=J.U6(b)
+if(typeof b==="object"&&b!==null&&(b.constructor===Array||!!z.$isList)){y=H.Mk(z.t(b,0),",")
+x=z.Jk(b,1)}else{y=typeof b==="string"?H.Mk(b,","):[]
+x=null}for(z=new H.a7(y,y.length,0,null),H.VM(z,[H.W8(y,"Q",0)]),w=x!=null,v=0;z.G();){u=z.mD
+if(w){t=v+1
+if(v>=x.length)throw H.e(x,v)
+s=x[v]
+v=t}else s=null
+r=H.pS(u,s,a,c)
+if(r!=null)d.push(r)}},Mk:function(a,b){var z=J.U6(a)
+if(z.gl0(a)===!0){z=[]
+H.VM(z,[J.O])
+return z}return z.Fr(a,b)},BF:function(a){switch(a){case"==":case"[]":case"*":case"/":case"%":case"~/":case"+":case"<<":case">>":case">=":case">":case"<=":case"<":case"&":case"^":case"|":case"-":case"unary-":case"[]=":case"~":return!0
+default:return!1}},Y6:function(a){var z,y
+z=J.x(a)
+if(z.n(a,"")||z.n(a,"$methodsWithOptionalArguments"))return!0
+y=z.t(a,0)
+z=J.x(y)
+return z.n(y,"*")||z.n(y,"+")},Sn:{"":"a;L5,F1>",
+gvU:function(){var z,y,x,w
+z=this.L5
+if(z!=null)return z
+y=P.L5(null,null,null,null,null)
+for(z=$.vK(),z=z.gUQ(z),x=z.Kw,x=x.gA(x),x=new H.MH(null,x,z.ew),H.VM(x,[H.W8(z,"i1",0),H.W8(z,"i1",1)]);x.G();)for(z=J.GP(x.mD);z.G();){w=z.gl()
+y.u(y,w.gFP(),w)}z=new H.Gj(y)
+H.VM(z,[P.iD,P.D4])
+this.L5=z
+return z},
+static:{"":"QG,RC,Ct",dF:function(){var z,y,x,w,v,u,t,s,r,q,p,o,n,m,l
+z=P.L5(null,null,null,J.O,[J.Q,P.D4])
+y=init.libraries
+if(y==null)return z
+for(y.toString,x=new H.a7(y,y.length,0,null),H.VM(x,[H.W8(y,"Q",0)]);x.G();){w=x.mD
+v=J.U6(w)
+u=v.t(w,0)
+t=v.t(w,1)
+s=P.r6($.cO().ej(t))
+r=v.t(w,2)
+q=v.t(w,3)
+p=v.t(w,4)
+o=v.t(w,5)
+n=v.t(w,6)
+m=v.t(w,7)
+l=p==null?C.xD:p()
+J.bi(z.to(u,new H.nI()),new H.Uz(s,r,q,l,o,n,m,null,null,null,null,null,null,null,null,null,null,H.YC(u)))}return z}}},nI:{"":"Tp;",
+call$0:function(){var z=[]
+H.VM(z,[P.D4])
+return z},
+"+call:0:0":0,
+$isEH:true,
+$is_X0:true},jU:{"":"a;",
+bu:function(a){return this.gOO()},
+IB:function(a){throw H.b(P.SY(null))},
+Hy:function(a,b){throw H.b(P.SY(null))},
+$isQF:true},Lj:{"":"jU;MA",
+gOO:function(){return"Isolate"},
+gcZ:function(){var z=$.At().gvU().nb
+z=z.gUQ(z)
+return z.XG(z,new H.mb())},
+$isQF:true},mb:{"":"Tp;",
+call$1:function(a){return a.grv()},
+"+call:1:0":0,
+$isEH:true,
+$is_HB:true,
+$is_Dv:true},am:{"":"jU;If<",
+gvd:function(){return H.fb(this.gh7(),this.gIf())},
+gkw:function(){return J.co(J.Z0(this.gIf()),"_")},
+bu:function(a){return this.gOO()+" on '"+H.d(J.Z0(this.gIf()))+"'"},
+gEO:function(){throw H.b(H.Pa("Should not call _methods"))},
+qj:function(a,b){throw H.b(H.Pa("Should not call _invoke"))},
+gmW:function(a){return H.vh(P.SY(null))},
+$isNL:true,
+$isQF:true},cw:{"":"EE;h7<,xW,LQ,If",
+n:function(a,b){var z
+if(b==null)return!1
+z=J.x(b)
+return typeof b==="object"&&b!==null&&!!z.$iscw&&J.xC(this.If,b.If)&&J.xC(this.h7,b.h7)},
+giO:function(a){return(1073741823&J.v1(C.Gp.IE)^17*J.v1(this.If)^19*J.v1(this.h7))>>>0},
+gOO:function(){return"TypeVariableMirror"},
+$iscw:true,
+$isFw:true,
+$isL9u:true,
+$isNL:true,
+$isQF:true},EE:{"":"am;If",
+gOO:function(){return"TypeMirror"},
+gh7:function(){return},
+gc9:function(){return H.vh(P.SY(null))},
+gNy:function(){return C.dn},
+gw8:function(){return C.hU},
+gHA:function(){return!0},
+gJi:function(){return this},
+$isL9u:true,
+$isNL:true,
+$isQF:true},Uz:{"":"uh;FP<,aP,wP,le,LB,rv<,ae<,SD,tB,P8,mX,T1,Ly,M2,uA,Db,Ok,If",
+gOO:function(){return"LibraryMirror"},
+gvd:function(){return this.If},
+gEO:function(){return this.gm8()},
+gDD:function(a){var z,y,x,w,v,u
+z=this.P8
+if(z!=null)return z
+y=P.L5(null,null,null,null,null)
+for(z=J.GP(this.aP);z.G();){x=z.gl()
+w=$.Sl()
+v=w.t(w,x)
+u=H.tT(H.YC(v==null?x:v),x)
+w=J.x(u)
+if(typeof u==="object"&&u!==null&&!!w.$isWf){y.u(y,u.If,u)
+u.nz=this}}z=new H.Gj(y)
+H.VM(z,[P.wv,P.Ms])
+this.P8=z
+return z},
+PU:function(a,b){var z,y,x,w
+z=a.ghr(a)
+if(z.Tc(z,"="))throw H.b(new P.AT(""))
+y=this.gmu()
+x=H.YC(H.d(z)+"=")
+y=y.nb
+w=y.t(y,x)
+if(w==null){y=this.gZ3().nb
+w=y.t(y,a)}if(w==null)throw H.b(P.lr(this,H.X7(a),[b],null,null))
+w.Hy(this,b)
+return H.vn(b)},
+"+setField:2:0":0,
+rN:function(a){var z,y
+z=this.glc(this).nb
+y=z.t(z,a)
+if(y==null)throw H.b(P.lr(this,a,[],null,null))
+return H.vn(y.IB(this))},
+"+getField:1:0":0,
+F2:function(a,b,c){var z,y
+z=this.glc(this).nb
+y=z.t(z,a)
+if(y==null)throw H.b(P.lr(this,a,b,c,null))
+z=J.x(y)
+if(typeof y==="object"&&y!==null&&!!z.$isZk)if(!("$reflectable" in y.dl))H.Hz(J.Z0(a))
+return H.vn(y.qj(b,c))},
+"+invoke:3:0":0,
+"*invoke":[40],
+CI:function(a,b){return this.F2(a,b,null)},
+"+invoke:2:0":0,
+Z0:function(a){return $[a]},
+H7:function(a,b){$[a]=b},
+gm8:function(){var z,y,x,w,v,u,t,s,r,q,p
+z=this.SD
+if(z!=null)return z
+y=P.A(null,H.Zk)
+H.VM(y,[H.Zk])
+z=this.wP
+x=J.U6(z)
+w=this.ae
+v=0
+while(!0){u=x.gB(z)
+if(typeof u!=="number")throw H.s(u)
+if(!(v<u))break
+c$0:{t=x.t(z,v)
+s=w[t]
+u=$.Sl()
+r=u.t(u,t)
+if(r==null)break c$0
+u=J.rY(r)
+q=u.nC(r,"new ")
+if(q){u=u.yn(r,4)
+r=H.ys(u,"$",".")}p=H.Sd(r,s,!q,q)
+y.push(p)
+p.nz=this}++v}this.SD=y
+return y},
+gKn:function(){var z,y
+z=this.tB
+if(z!=null)return z
+y=[]
+H.VM(y,[P.RY])
+H.jw(this,this.LB,!0,y)
+this.tB=y
+return y},
+gmu:function(){var z,y,x,w
+z=this.mX
+if(z!=null)return z
+y=P.L5(null,null,null,null,null)
+for(z=this.gm8(),z.toString,x=new H.a7(z,z.length,0,null),H.VM(x,[H.W8(z,"Q",0)]);x.G();){w=x.mD
+if(!w.gxV())y.u(y,w.gIf(),w)}z=new H.Gj(y)
+H.VM(z,[P.wv,P.RS])
+this.mX=z
+return z},
+gII:function(){var z=this.T1
+if(z!=null)return z
+z=new H.Gj(P.L5(null,null,null,null,null))
+H.VM(z,[P.wv,P.RS])
+this.T1=z
+return z},
+gF8:function(){var z=this.Ly
+if(z!=null)return z
+z=new H.Gj(P.L5(null,null,null,null,null))
+H.VM(z,[P.wv,P.RS])
+this.Ly=z
+return z},
+gZ3:function(){var z,y,x,w
+z=this.M2
+if(z!=null)return z
+y=P.L5(null,null,null,null,null)
+for(z=this.gKn(),z.toString,x=new H.a7(z,z.length,0,null),H.VM(x,[H.W8(z,"Q",0)]);x.G();){w=x.mD
+y.u(y,w.gIf(),w)}z=new H.Gj(y)
+H.VM(z,[P.wv,P.RY])
+this.M2=z
+return z},
+glc:function(a){var z,y,x
+z=this.uA
+if(z!=null)return z
+z=this.gDD(this)
+y=P.L5(null,null,null,null,null)
+y.Ay(y,z)
+z=new H.Kv(y)
+x=this.gmu().nb
+x.aN(x,z)
+x=this.gII().nb
+x.aN(x,z)
+x=this.gF8().nb
+x.aN(x,z)
+x=this.gZ3().nb
+x.aN(x,z)
+z=new H.Gj(y)
+H.VM(z,[P.wv,P.QF])
+this.uA=z
+return z},
+"+members":0,
+gYK:function(){var z,y
+z=this.Db
+if(z!=null)return z
+y=P.L5(null,null,null,P.wv,P.NL)
+z=this.glc(this).nb
+z.aN(z,new H.oP(y))
+z=new H.Gj(y)
+H.VM(z,[P.wv,P.NL])
+this.Db=z
+return z},
+"+declarations":0,
+gc9:function(){var z=this.Ok
+if(z!=null)return z
+z=new P.Yp(J.C0(this.le,H.Yf))
+H.VM(z,[P.vr])
+this.Ok=z
+return z},
+gh7:function(){return},
+$isD4:true,
+$isQF:true,
+$isNL:true},uh:{"":"am+M2;",$isQF:true},Kv:{"":"Tp;a",
+call$2:function(a,b){var z=this.a
+z.u(z,a,b)},
+"+call:2:0":0,
+$isEH:true,
+$is_bh:true},oP:{"":"Tp;a",
+call$2:function(a,b){var z=this.a
+z.u(z,a,b)},
+"+call:2:0":0,
+$isEH:true,
+$is_bh:true},YX:{"":"Tp;a",
+call$0:function(){return this.a},
+"+call:0:0":0,
+$isEH:true,
+$is_X0:true},BI:{"":"y1;AY<,XW,BB,If",
+gOO:function(){return"ClassMirror"},
+gIf:function(){var z,y
+z=this.BB
+if(z!=null)return z
+y=J.Z0(this.AY.gvd())
+z=this.XW
+z=J.kE(y," with ")===!0?H.YC(H.d(y)+", "+H.d(J.Z0(z.gvd()))):H.YC(H.d(y)+" with "+H.d(J.Z0(z.gvd())))
+this.BB=z
+return z},
+gvd:function(){return this.gIf()},
+glc:function(a){return J.GK(this.XW)},
+"+members":0,
+gtx:function(){return this.XW.gtx()},
+gZ3:function(){return this.XW.gZ3()},
+gYK:function(){return this.XW.gYK()},
+"+declarations":0,
+F2:function(a,b,c){throw H.b(P.lr(this,a,b,c,null))},
+"+invoke:3:0":0,
+"*invoke":[40],
+CI:function(a,b){return this.F2(a,b,null)},
+"+invoke:2:0":0,
+rN:function(a){throw H.b(P.lr(this,a,null,null,null))},
+"+getField:1:0":0,
+PU:function(a,b){throw H.b(P.lr(this,H.X7(a),[b],null,null))},
+"+setField:2:0":0,
+gkZ:function(){return[this.XW]},
+gHA:function(){return!0},
+gJi:function(){return this},
+gNy:function(){throw H.b(P.SY(null))},
+gw8:function(){return C.hU},
+$isMs:true,
+$isQF:true,
+$isL9u:true,
+$isNL:true},y1:{"":"EE+M2;",$isQF:true},M2:{"":"a;",$isQF:true},iu:{"":"M2;Ax<",
+gr9:function(a){return H.jO(J.bB(this.Ax).IE)},
+F2:function(a,b,c){var z,y
+z=J.Z0(a)
+y=z+":"+b.length+":0"
+return this.tu(a,0,y,b)},
+"+invoke:3:0":0,
+"*invoke":[40],
+CI:function(a,b){return this.F2(a,b,null)},
+"+invoke:2:0":0,
+tu:function(a,b,c,d){var z,y,x,w,v,u,t,s
+z=$.eb
+y=this.Ax
+x=y.constructor[z]
+if(x==null){x=H.Pq()
+y.constructor[z]=x}w=x[c]
+if(w==null){v=$.I6()
+u=v.t(v,c)
+if(b===0){v=H.j5(J.uH(c,":"),3,null,null)
+t=v.br(v)}else t=C.xD
+s=new H.LI(a,u,b,d,t,null)
+w=s.Yd(y)
+x[c]=w}else s=null
+if(w.gpf()){if(s==null){v=$.I6()
+s=new H.LI(a,v.t(v,c),b,d,[],null)}return H.vn(w.Bj(y,s))}else return H.vn(w.Bj(y,d))},
+PU:function(a,b){var z=H.d(J.Z0(a))+"="
+this.tu(H.YC(z),2,z,[b])
+return H.vn(b)},
+"+setField:2:0":0,
+rN:function(a){return this.tu(a,1,J.Z0(a),[])},
+"+getField:1:0":0,
+n:function(a,b){var z,y
+if(b==null)return!1
+z=J.x(b)
+if(typeof b==="object"&&b!==null&&!!z.$isiu){z=this.Ax
+y=b.Ax
+y=z==null?y==null:z===y
+z=y}else z=!1
+return z},
+giO:function(a){return(H.CU(this.Ax)^909522486)>>>0},
+bu:function(a){return"InstanceMirror on "+H.d(P.hl(this.Ax))},
+$isiu:true,
+$isvr:true,
+$isQF:true},mg:{"":"Tp;",
+call$1:function(a){return init.metadata[a]},
+"+call:1:0":0,
+$isEH:true,
+$is_HB:true,
+$is_Dv:true},zE:{"":"Tp;a",
+call$2:function(a,b){var z,y
+z=J.Z0(a)
+y=this.a
+if(y.x4(z))y.u(y,z,b)
+else throw H.b(H.WE("Invoking noSuchMethod with named arguments not implemented"))},
+"+call:2:0":0,
+$isEH:true,
+$is_bh:true},bl:{"":"am;NK,EZ,ut,Db,uA,b0,M2,T1,Ly,FU,jd,qN,qm,If",
+gOO:function(){return"ClassMirror"},
+gWL:function(){return H.d(this.NK.gWL())+"<"+this.EZ+">"},
+"+_mangledName":0,
+gNy:function(){return this.NK.gNy()},
+gw8:function(){var z,y,x,w,v,u,t,s
+z=this.ut
+if(z!=null)return z
+y=P.A(null,null)
+z=new H.Ef(y)
+x=this.EZ
+if(C.xB.u8(x,"<")===-1)H.bQ(x.split(","),new H.Tc(z))
+else{for(w=x.length,v=0,u="",t=0;t<w;++t){s=x[t]
+if(s===" ")continue
+else if(s==="<"){u+=s;++v}else if(s===">"){u+=s;--v}else if(s===",")if(v>0)u+=s
+else{z.call$1(u)
+u=""}else u+=s}z.call$1(u)}z=new P.Yp(y)
+H.VM(z,[null])
+this.ut=z
+return z},
+gEO:function(){var z=this.jd
+if(z!=null)return z
+z=this.NK.ly(this)
+this.jd=z
+return z},
+gtx:function(){var z=this.FU
+if(z!=null)return z
+z=new H.Gj(H.Vv(this.gEO()))
+H.VM(z,[P.wv,P.RS])
+this.FU=z
+return z},
+gDI:function(){var z=this.b0
+if(z!=null)return z
+z=new H.Gj(H.Fk(this.gEO()))
+H.VM(z,[P.wv,P.RS])
+this.b0=z
+return z},
+gZ3:function(){var z,y,x,w
+z=this.M2
+if(z!=null)return z
+y=P.L5(null,null,null,null,null)
+for(z=this.NK.ws(this),x=new H.a7(z,z.length,0,null),H.VM(x,[H.W8(z,"Q",0)]);x.G();){w=x.mD
+y.u(y,w.gIf(),w)}z=new H.Gj(y)
+H.VM(z,[P.wv,P.RY])
+this.M2=z
+return z},
+glc:function(a){var z=this.uA
+if(z!=null)return z
+z=new H.Gj(H.vE(this.gEO(),this.gZ3()))
+H.VM(z,[P.wv,P.NL])
+this.uA=z
+return z},
+"+members":0,
+gYK:function(){var z,y
+z=this.Db
+if(z!=null)return z
+y=P.L5(null,null,null,P.wv,P.NL)
+y.Ay(y,this.glc(this))
+y.Ay(y,this.gDI())
+J.kH(this.NK.gNy(),new H.Ax(y))
+z=new H.Gj(y)
+H.VM(z,[P.wv,P.NL])
+this.Db=z
+return z},
+"+declarations":0,
+PU:function(a,b){return this.NK.PU(a,b)},
+"+setField:2:0":0,
+rN:function(a){return this.NK.rN(a)},
+"+getField:1:0":0,
+gh7:function(){return this.NK.gh7()},
+gc9:function(){return this.NK.gc9()},
+gAY:function(){var z=this.qN
+if(z!=null)return z
+z=H.Jf(this,init.metadata[J.UQ(init.typeInformation[this.NK.gWL()],0)])
+this.qN=z
+return z},
+F2:function(a,b,c){return this.NK.F2(a,b,c)},
+"+invoke:3:0":0,
+"*invoke":[40],
+CI:function(a,b){return this.F2(a,b,null)},
+"+invoke:2:0":0,
+gHA:function(){return!1},
+gJi:function(){return this.NK},
+gkZ:function(){var z=this.qm
+if(z!=null)return z
+z=this.NK.MR(this)
+this.qm=z
+return z},
+gmW:function(a){return J.UX(this.NK)},
+gvd:function(){return this.NK.gvd()},
+gIf:function(){return this.NK.gIf()},
+$isMs:true,
+$isQF:true,
+$isL9u:true,
+$isNL:true},Ef:{"":"Tp;a",
+call$1:function(a){var z,y,x
+z=H.BU(a,null,new H.Oo())
+y=this.a
+if(J.xC(z,-1))y.push(H.jO(J.rr(a)))
+else{x=init.metadata[z]
+y.push(new H.cw(P.re(x.gh7()),x,null,H.YC(J.DA(x))))}},
+"+call:1:0":0,
+$isEH:true,
+$is_HB:true,
+$is_Dv:true},Oo:{"":"Tp;",
+call$1:function(a){return-1},
+"+call:1:0":0,
+$isEH:true,
+$is_HB:true,
+$is_Dv:true},Tc:{"":"Tp;b",
+call$1:function(a){return this.b.call$1(a)},
+"+call:1:0":0,
+$isEH:true,
+$is_HB:true,
+$is_Dv:true},Ax:{"":"Tp;a",
+call$1:function(a){var z=this.a
+z.u(z,a.gIf(),a)
+return a},
+"+call:1:0":0,
+$isEH:true,
+$is_HB:true,
+$is_Dv:true},Wf:{"":"Un;WL<-,Tx<-,H8<-,Ht<-,pz<-,le@-,qN@-,jd@-,tB@-,b0@-,FU@-,T1@-,Ly@-,M2@-,uA@-,Db@-,Ok@-,qm@-,UF@-,nz@-,If",
+gOO:function(){return"ClassMirror"
+"8"},
+"+_prettyName":1,
+gaB:function(){var z,y
+z=this.Tx
+y=J.x(z)
+if(typeof z==="object"&&z!==null&&!!y.$isGv)return z.constructor
+else return z
+"40"},
+"+_jsConstructor":1,
+gDI:function(){var z=this.b0
+if(z!=null)return z
+z=new H.Gj(H.Fk(this.gEO()))
+H.VM(z,[P.wv,P.RS])
+this.b0=z
+return z
+"52"},
+"+constructors":1,
+ly:function(a){var z,y,x,w,v,u,t,s,r,q,p,o,n,m,l,k
+z=this.gaB().prototype
+y=(function(victim, hasOwnProperty) {
+ var result = [];
+ for (var key in victim) {
+ if (hasOwnProperty.call(victim, key)) result.push(key);
+ }
+ return result;
+})(z, Object.prototype.hasOwnProperty)
+x=[]
+H.VM(x,[H.Zk])
+for(w=J.GP(y);w.G();){v=w.gl()
+if(H.Y6(v))continue
+u=$.bx()
+t=u.t(u,v)
+if(t==null)continue
+s=H.Sd(t,z[v],!1,!1)
+x.push(s)
+s.nz=a}y=(function(victim, hasOwnProperty) {
+ var result = [];
+ for (var key in victim) {
+ if (hasOwnProperty.call(victim, key)) result.push(key);
+ }
+ return result;
+})(init.statics[this.WL], Object.prototype.hasOwnProperty)
+w=J.U6(y)
+r=w.gB(y)
+if(typeof r!=="number")throw H.s(r)
+q=0
+for(;q<r;++q){p=w.t(y,q)
+if(H.Y6(p))continue
+o=this.gh7().gae()[p]
+n=q+1
+if(n<r){m=w.t(y,n)
+u=J.rY(m)
+if(u.nC(m,"+")){m=u.yn(m,1)
+l=C.xB.nC(m,"new ")
+if(l){u=C.xB.yn(m,4)
+m=H.ys(u,"$",".")}q=n}else l=!1
+k=m}else{k=p
+l=!1}s=H.Sd(k,o,!l,l)
+x.push(s)
+s.nz=a}return x
+"53,54,55"},
+"+_getMethodsWithOwner:1:0":1,
+gEO:function(){var z=this.jd
+if(z!=null)return z
+z=this.ly(this)
+this.jd=z
+return z
+"53"},
+"+_methods":1,
+ws:function(a){var z,y,x,w
+z=[]
+H.VM(z,[P.RY])
+y=J.uH(this.H8,";")
+if(1>=y.length)throw H.e(y,1)
+x=y[1]
+y=this.Ht
+if(y!=null){x=[x]
+C.Nm.Ay(x,y)}H.jw(a,x,!1,z)
+w=init.statics[this.WL]
+if(w!=null)H.jw(a,w[""],!0,z)
+return z
+"56,57,55"},
+"+_getFieldsWithOwner:1:0":1,
+gKn:function(){var z=this.tB
+if(z!=null)return z
+z=this.ws(this)
+this.tB=z
+return z
+"56"},
+"+_fields":1,
+gtx:function(){var z=this.FU
+if(z!=null)return z
+z=new H.Gj(H.Vv(this.gEO()))
+H.VM(z,[P.wv,P.RS])
+this.FU=z
+return z
+"52"},
+"+methods":1,
+gZ3:function(){var z,y,x
+z=this.M2
+if(z!=null)return z
+y=P.L5(null,null,null,null,null)
+for(z=J.GP(this.gKn());z.G();){x=z.gl()
+y.u(y,x.gIf(),x)}z=new H.Gj(y)
+H.VM(z,[P.wv,P.RY])
+this.M2=z
+return z
+"58"},
+"+variables":1,
+glc:function(a){var z=this.uA
+if(z!=null)return z
+z=new H.Gj(H.vE(this.gEO(),this.gZ3()))
+H.VM(z,[P.wv,P.QF])
+this.uA=z
+return z
+"59"},
+"+members":1,
+gYK:function(){var z,y
+z=this.Db
+if(z!=null)return z
+y=P.L5(null,null,null,P.wv,P.NL)
+z=new H.Ei(y)
+J.kH(this.glc(this),z)
+J.kH(this.gDI(),z)
+J.kH(this.gNy(),new H.U7(y))
+z=new H.Gj(y)
+H.VM(z,[P.wv,P.NL])
+this.Db=z
+return z
+"60"},
+"+declarations":1,
+PU:function(a,b){var z,y
+z=J.UQ(this.gZ3(),a)
+if(z!=null&&z.gFo()&&!z.gV5()){y=z.gao()
+if(!(y in $))throw H.b(H.Pa("Cannot find \""+y+"\" in current isolate."))
+$[y]=b
+return H.vn(b)}throw H.b(P.lr(this,H.X7(a),[b],null,null))
+"61,62,63,64,0"},
+"+setField:2:0":1,
+rN:function(a){var z,y
+z=J.UQ(this.gZ3(),a)
+if(z!=null&&z.gFo()){y=z.gao()
+if(!(y in $))throw H.b(H.Pa("Cannot find \""+y+"\" in current isolate."))
+if(y in init.lazies)return H.vn($[init.lazies[y]]())
+else return H.vn($[y])}throw H.b(P.lr(this,a,null,null,null))
+"61,62,63"},
+"+getField:1:0":1,
+gh7:function(){var z,y,x,w,v,u,t
+if(this.nz==null){z=this.Tx
+y=J.x(z)
+if(typeof z==="object"&&z!==null&&!!y.$isGv){x=C.nY.IE
+z=$.Sl()
+w=z.t(z,x)
+this.nz=H.tT(H.YC(w==null?x:w),x).gh7()}else{z=$.vK()
+z=z.gUQ(z)
+y=z.Kw
+y=y.gA(y)
+v=H.Y9(z.$asi1,H.oX(z))
+u=v==null?null:v[0]
+v=H.Y9(z.$asi1,H.oX(z))
+t=v==null?null:v[1]
+z=new H.MH(null,y,z.ew)
+z.$builtinTypeInfo=[u,t]
+for(;z.G();)for(y=J.GP(z.mD);y.G();)J.pP(y.gl())}if(this.nz==null)throw H.b(new P.lj("Class \""+H.d(J.Z0(this.If))+"\" has no owner"))}return this.nz
+"65"},
+"+owner":1,
+gc9:function(){var z=this.Ok
+if(z!=null)return z
+if(this.le==null)this.le=H.pj(this.gaB().prototype)
+z=new P.Yp(J.C0(this.le,H.Yf))
+H.VM(z,[P.vr])
+this.Ok=z
+return z
+"66"},
+"+metadata":1,
+gAY:function(){var z,y,x,w,v,u
+if(this.qN==null){z=init.typeInformation[this.WL]
+if(z!=null)this.qN=H.Jf(this,init.metadata[J.UQ(z,0)])
+else{y=this.H8
+x=J.uH(y,";")
+if(0>=x.length)throw H.e(x,0)
+w=x[0]
+x=J.rY(w)
+v=x.Fr(w,"+")
+u=v.length
+if(u>1){if(u!==2)throw H.b(H.Pa("Strange mixin: "+H.d(y)))
+this.qN=H.jO(v[0])}else this.qN=x.n(w,"")?this:H.jO(w)}}return J.xC(this.qN,this)?null:this.qN
+"67"},
+"+superclass":1,
+F2:function(a,b,c){var z
+if(c!=null&&J.FN(c)!==!0)throw H.b(P.f("Named arguments are not implemented."))
+z=J.UQ(this.gtx(),a)
+if(z==null||!z.gFo())throw H.b(P.lr(this,a,b,c,null))
+if(!z.yR())H.Hz(J.Z0(a))
+return H.vn(z.qj(b,c))
+"61,68,63,69,70,71,72"},
+"+invoke:3:0":1,
+"*invoke":[40],
+CI:function(a,b){return this.F2(a,b,null)},
+"+invoke:2:0":1,
+gHA:function(){return!0
+"44"},
+"+isOriginalDeclaration":1,
+gJi:function(){return this
+"67"},
+"+originalDeclaration":1,
+MR:function(a){var z,y,x
+z=init.typeInformation[this.WL]
+if(z!=null){y=new H.A8(J.Pr(z,1),new H.t0(a))
+H.VM(y,[null,null])
+x=y.br(y)}else x=C.Me
+y=new P.Yp(x)
+H.VM(y,[P.Ms])
+return y
+"73,74,55"},
+"+_getSuperinterfacesWithOwner:1:0":1,
+gkZ:function(){var z=this.qm
+if(z!=null)return z
+z=this.MR(this)
+this.qm=z
+return z
+"73"},
+"+superinterfaces":1,
+gNy:function(){var z,y,x,w,v
+z=this.UF
+if(z!=null)return z
+y=P.A(null,null)
+x=this.gaB().prototype["<>"]
+if(x==null)return y
+for(w=0;w<x.length;++w){v=init.metadata[x[w]]
+y.push(new H.cw(this,v,null,H.YC(J.DA(v))))}z=new P.Yp(y)
+H.VM(z,[null])
+this.UF=z
+return z
+"75"},
+"+typeVariables":1,
+gw8:function(){return C.hU
+"76"},
+"+typeArguments":1,
+$isWf:true,
+$isMs:true,
+$isQF:true,
+$isL9u:true,
+$isNL:true},"+JsClassMirror": [77, 67],Un:{"":"EE+M2;",$isQF:true},Ei:{"":"Tp;a-",
+call$2:function(a,b){J.kW(this.a,a,b)
+"40,78,63,31,79"},
+"+call:2:0":1,
+$isEH:true,
+$is_bh:true},"+JsClassMirror_declarations_addToResult": [80],U7:{"":"Tp;b-",
+call$1:function(a){J.kW(this.b,a.gIf(),a)
+return a
+"40,81,40"},
+"+call:1:0":1,
+$isEH:true,
+$is_HB:true,
+$is_Dv:true},"+JsClassMirror_declarations_closure": [80],t0:{"":"Tp;a-",
+call$1:function(a){return H.Jf(this.a,init.metadata[a])
+"67,82,30"},
+"+call:1:0":1,
+$isEH:true,
+$is_HB:true,
+$is_Dv:true},"+JsClassMirror__getSuperinterfacesWithOwner_lookupType": [80],Ld:{"":"am;ao<,V5<,Fo<,n6,nz,le,If",
+gOO:function(){return"VariableMirror"},
+"+_prettyName":0,
+gr9:function(a){return $.Cr()},
+gh7:function(){return this.nz},
+"+owner":0,
+gc9:function(){if(this.le==null){var z=this.n6
+this.le=z==null?C.xD:z()}z=J.C0(this.le,H.Yf)
+return z.br(z)},
+"+metadata":0,
+IB:function(a){return a.Z0(this.ao)},
+Hy:function(a,b){if(this.V5)throw H.b(P.lr(this,H.X7(this.If),[b],null,null))
+a.H7(this.ao,b)},
+$isRY:true,
+$isNL:true,
+$isQF:true,
+static:{"":"Z8",pS:function(a,b,c,d){var z,y,x,w,v,u,t,s,r,q
+z=J.U6(a)
+y=z.gB(a)
+x=J.Wx(y)
+if(H.GQ(z.j(a,x.W(y,1)))===45){y=x.W(y,1)
+x=J.Wx(y)
+w=H.GQ(z.j(a,x.W(y,1)))}else return
+if(w===0)return
+v=C.jn.m(w,2)===0
+u=z.JT(a,0,x.W(y,1))
+t=z.u8(a,":")
+if(t>0){s=C.xB.JT(u,0,t)
+u=z.yn(a,t+1)}else s=u
+if(d){z=$.Sl()
+r=z.t(z,s)}else{z=$.bx()
+r=z.t(z,"g"+s)}if(r==null)r=s
+if(v){q=H.YC(H.d(r)+"=")
+for(z=J.GP(c.gEO());v=!0,z.G();)if(J.xC(z.gl().gIf(),q)){v=!1
+break}}return new H.Ld(u,v,d,b,c,null,H.YC(r))},GQ:function(a){if(a===45)return a
+if(a>=60&&a<=64)return a-59
+if(a>=123&&a<=126)return a-117
+if(a>=37&&a<=43)return a-27
+return 0}}},Sz:{"":"iu;Ax",
+gMj:function(a){var z,y,x,w,v,u,t,s,r
+z=$.te
+y=this.Ax
+x=y.constructor[z]
+if(x!=null)return x
+w=function(reflectee) {
+ for (var property in reflectee) {
+ if ("call$" == property.substring(0, 5)) return property;
+ }
+ return null;
+}
+(y)
+if(w==null)throw H.b(H.Pa("Cannot find callName on \""+H.d(y)+"\""))
+v=w.split("$")
+if(1>=v.length)throw H.e(v,1)
+u=H.BU(v[1],null,null)
+v=J.RE(y)
+if(typeof y==="object"&&y!==null&&!!v.$isv){t=y.gnn()
+y.gwc()
+s=$.bx()
+r=s.t(s,v.gPp(y))
+if(r==null)H.Hz(r)
+x=H.Sd(r,t,!1,!1)}else x=new H.Zk(y[w],u,!1,!1,!0,!1,!1,null,null,null,null,H.YC(w))
+y.constructor[z]=x
+return x},
+"+function":0,
+bu:function(a){return"ClosureMirror on '"+H.d(P.hl(this.Ax))+"'"},
+gFF:function(a){return H.vh(P.SY(null))},
+"+source":0,
+$isvr:true,
+$isQF:true},Zk:{"":"am;dl,Yq,lT<,hB<,Fo<,xV<,qx,nz,le,G6,Cr,If",
+gOO:function(){return"MethodMirror"},
+"+_prettyName":0,
+gJx:function(){var z=this.Cr
+if(z!=null)return z
+this.gc9()
+return this.Cr},
+yR:function(){return"$reflectable" in this.dl},
+gh7:function(){return this.nz},
+"+owner":0,
+gdw:function(){this.gc9()
+return H.Jf(this.nz,this.G6)},
+gc9:function(){var z,y,x,w,v,u,t,s,r,q,p
+if(this.le==null){z=H.pj(this.dl)
+y=this.Yq
+x=P.A(y,null)
+w=J.U6(z)
+if(w.gl0(z)!==!0){this.G6=w.t(z,0)
+y=J.p0(y,2)
+if(typeof y!=="number")throw H.s(y)
+v=1+y
+for(y=x.length,u=0,t=1;t<v;t+=2,u=q){s=w.t(z,t)
+r=w.t(z,t+1)
+q=u+1
+p=H.YC(s)
+if(u>=y)throw H.e(x,u)
+x[u]=new H.fu(this,r,p)}z=w.Jk(z,v)}else{if(typeof y!=="number")throw H.s(y)
+w=x.length
+t=0
+for(;t<y;++t){p=H.YC("argument"+t)
+if(t>=w)throw H.e(x,t)
+x[t]=new H.fu(this,null,p)}}y=new P.Yp(x)
+H.VM(y,[P.Ys])
+this.Cr=y
+y=new P.Yp(J.C0(z,H.Yf))
+H.VM(y,[null])
+this.le=y}return this.le},
+"+metadata":0,
+qj:function(a,b){if(b!=null&&J.FN(b)!==!0)throw H.b(P.f("Named arguments are not implemented."))
+if(!this.Fo&&!this.xV)throw H.b(H.Pa("Cannot invoke instance method without receiver."))
+if(!J.xC(this.Yq,J.q8(a))||this.dl==null)throw H.b(P.lr(this.nz,this.If,a,b,null))
+return this.dl.apply($,P.F(a,!0,null))},
+IB:function(a){if(this.lT)return this.qj([],null)
+else throw H.b(P.SY("getField on "+H.d(a)))},
+Hy:function(a,b){if(this.hB)return this.qj([b],null)
+else throw H.b(P.lr(this,H.X7(this.If),[],null,null))},
+guU:function(){return!this.lT&&!this.hB&&!this.xV},
+$isZk:true,
+$isRS:true,
+$isNL:true,
+$isQF:true,
+static:{Sd:function(a,b,c,d){var z,y,x,w,v,u,t
+z=J.uH(a,":")
+if(0>=z.length)throw H.e(z,0)
+a=z[0]
+y=H.BF(a)
+x=!y&&J.Eg(a,"=")
+w=z.length
+if(w===1){if(x){v=1
+u=!1}else{v=0
+u=!0}t=0}else{if(1>=w)throw H.e(z,1)
+v=H.BU(z[1],null,null)
+if(2>=z.length)throw H.e(z,2)
+t=H.BU(z[2],null,null)
+u=!1}w=H.YC(a)
+return new H.Zk(b,J.WB(v,t),u,x,c,d,y,null,null,null,null,w)}}},fu:{"":"am;h7<,Ad,If",
+gOO:function(){return"ParameterMirror"},
+"+_prettyName":0,
+gr9:function(a){return H.Jf(this.h7,this.Ad)},
+gFo:function(){return!1},
+gV5:function(){return!1},
+gQ2:function(){return!1},
+gc9:function(){return H.vh(P.SY(null))},
+"+metadata":0,
+$isYs:true,
+$isRY:true,
+$isNL:true,
+$isQF:true},ng:{"":"am;WL<,CM,If",
+gP:function(a){return this.CM},
+"+value":0,
+r6:function(a,b){return this.gP(a).call$1(b)},
+gOO:function(){return"TypedefMirror"},
+"+_prettyName":0,
+$isL9u:true,
+$isNL:true,
+$isQF:true},Ar:{"":"a;d9,o3,yA,zM,h7<",
+gHA:function(){return!0},
+"+isOriginalDeclaration":0,
+gJx:function(){var z,y,x,w,v,u,t
+z=this.zM
+if(z!=null)return z
+y=[]
+z=this.d9
+if("args" in z)for(x=z.args,w=new H.a7(x,x.length,0,null),H.VM(w,[H.W8(x,"Q",0)]),v=0;w.G();v=u){u=v+1
+y.push(new H.fu(this,w.mD,H.YC("argument"+v)))}else v=0
+if("opt" in z)for(x=z.opt,w=new H.a7(x,x.length,0,null),H.VM(w,[H.W8(x,"Q",0)]);w.G();v=u){u=v+1
+y.push(new H.fu(this,w.mD,H.YC("argument"+v)))}if("named" in z)for(x=J.GP((function(victim, hasOwnProperty) {
+ var result = [];
+ for (var key in victim) {
+ if (hasOwnProperty.call(victim, key)) result.push(key);
+ }
+ return result;
+})(z.named, Object.prototype.hasOwnProperty));x.G();){t=x.gl()
+y.push(new H.fu(this,z.named[t],H.YC(t)))}z=new P.Yp(y)
+H.VM(z,[P.Ys])
+this.zM=z
+return z},
+bu:function(a){var z,y,x,w,v,u,t
+z=this.o3
+if(z!=null)return z
+z=this.d9
+if("args" in z)for(y=z.args,x=new H.a7(y,y.length,0,null),H.VM(x,[H.W8(y,"Q",0)]),w="FunctionTypeMirror on '(",v="";x.G();v=", "){u=x.mD
+w=C.xB.g(w+v,H.Ko(u,null))}else{w="FunctionTypeMirror on '("
+v=""}if("opt" in z){w+=v+"["
+for(y=z.opt,x=new H.a7(y,y.length,0,null),H.VM(x,[H.W8(y,"Q",0)]),v="";x.G();v=", "){u=x.mD
+w=C.xB.g(w+v,H.Ko(u,null))}w+="]"}if("named" in z){w+=v+"{"
+for(y=J.GP((function(victim, hasOwnProperty) {
+ var result = [];
+ for (var key in victim) {
+ if (hasOwnProperty.call(victim, key)) result.push(key);
+ }
+ return result;
+})(z.named, Object.prototype.hasOwnProperty)),v="";y.G();v=", "){t=y.gl()
+w=C.xB.g(w+v+(H.d(t)+": "),H.Ko(z.named[t],null))}w+="}"}w+=") -> "
+if(!!z.void)w+="void"
+else w="ret" in z?C.xB.g(w,H.Ko(z.ret,null)):w+"dynamic"
+z=w+"'"
+this.o3=z
+return z},
+$isMs:true,
+$isQF:true,
+$isL9u:true,
+$isNL:true},jB:{"":"Tp;a",
+call$1:function(a){var z,y,x
+z=init.metadata[a]
+y=this.a
+x=H.w2(y.a.gNy(),J.DA(z))
+return J.UQ(y.a.gw8(),x).gWL()},
+"+call:1:0":0,
+$isEH:true,
+$is_HB:true,
+$is_Dv:true},ye:{"":"Tp;",
+call$1:function(a){return init.metadata[a]},
+"+call:1:0":0,
+$isEH:true,
+$is_HB:true,
+$is_Dv:true},Gj:{"":"a;nb",
+gB:function(a){return this.nb.X5},
+"+length":0,
+gl0:function(a){return this.nb.X5===0},
+"+isEmpty":0,
+gor:function(a){return this.nb.X5!==0},
+"+isNotEmpty":0,
+t:function(a,b){var z=this.nb
+return z.t(z,b)},
+"+[]:1:0":0,
+x4:function(a){return this.nb.x4(a)},
+"+containsKey:1:0":0,
+PF:function(a){return this.nb.PF(a)},
+"+containsValue:1:0":0,
+aN:function(a,b){var z=this.nb
+return z.aN(z,b)},
+gvc:function(a){var z,y
+z=this.nb
+y=new P.Cm(z)
+H.VM(y,[H.W8(z,"YB",0)])
+return y},
+"+keys":0,
+gUQ:function(a){var z=this.nb
+return z.gUQ(z)},
+"+values":0,
+u:function(a,b,c){return H.kT()},
+"+[]=:2:0":0,
+Rz:function(a,b){H.kT()},
+$isL8:true,
+static:{kT:function(){throw H.b(P.f("Cannot modify an unmodifiable Map"))}}},Zz:{"":"Ge;hu",
+bu:function(a){return"Unsupported operation: "+this.hu},
+$ismp:true,
+$isGe:true,
+static:{WE:function(a){return new H.Zz(a)}}},"":"uN<"}],["dart._js_names","dart:_js_names",,H,{hY:function(a,b){var z,y,x,w,v,u,t
+z=(function(victim, hasOwnProperty) {
+ var result = [];
+ for (var key in victim) {
+ if (hasOwnProperty.call(victim, key)) result.push(key);
+ }
+ return result;
+})(a, Object.prototype.hasOwnProperty)
+y=H.B7([],P.L5(null,null,null,null,null))
+H.VM(y,[J.O,J.O])
+for(x=J.GP(z),w=!b;x.G();){v=x.gl()
+u=a[v]
+y.u(y,v,u)
+if(w){t=J.rY(v)
+if(t.nC(v,"g"))y.u(y,"s"+t.yn(v,1),u+"=")}}return y},YK:function(a){var z=H.B7([],P.L5(null,null,null,null,null))
+H.VM(z,[J.O,J.O])
+a.aN(a,new H.Xh(z))
+return z},Jg:function(a){return init.mangledGlobalNames[a]},Xh:{"":"Tp;a",
+call$2:function(a,b){var z=this.a
+z.u(z,b,a)},
+"+call:2:0":0,
+$isEH:true,
+$is_bh:true}}],["dart.async","dart:async",,P,{K2:function(a,b,c){var z=J.x(a)
+if(!!z.$is_bh)return a.call$2(b,c)
+else return a.call$1(b)},VH:function(a,b){var z=J.x(a)
+if(!!z.$is_bh)return b.O8(a)
+else return b.cR(a)},pH:function(a){var z,y,x,w,v,u,t,s,r
+z={}
+z.a=null
+z.b=null
+y=new P.j7(z)
+z.c=0
+for(x=new H.a7(a,a.length,0,null),H.VM(x,[H.W8(a,"Q",0)]);x.G();){w=x.mD
+v=z.c
+z.c=v+1
+u=w.OA(y)
+t=$.X3
+s=new P.vs(0,t,null,null,t.cR(new P.oV(z,v)),null,P.VH(null,$.X3),null)
+s.$builtinTypeInfo=[null]
+u.au(s)}y=z.c
+if(y===0)return P.Ab(C.xD,null)
+z.b=P.A(y,null)
+y=J.Q
+r=new P.Zf(P.Dt(y))
+H.VM(r,[y])
+z.a=r
+return z.a.MM},BG:function(){var z,y,x,w
+for(;y=$.P8(),y.av!==y.HV;){z=$.P8().Ux()
+try{z.call$0()}catch(x){H.Ru(x)
+w=C.RT.gVs()
+H.cy(w<0?0:w,P.qZ)
+throw x}}$.TH=!1},IA:function(a){$.P8().NZ(a)
+if(!$.TH){P.jL(C.RT,P.qZ)
+$.TH=!0}},rb:function(a){var z
+if(J.xC($.X3,C.NU)){$.X3.wr(a)
+return}z=$.X3
+z.wr(z.xi(a,!0))},Ve:function(a,b,c,d,e,f){var z
+if(e){z=new P.ly(b,c,d,a,null,0,null)
+H.VM(z,[f])}else{z=new P.Gh(b,c,d,a,null,0,null)
+H.VM(z,[f])}return z},bK:function(a,b,c,d){var z
+if(c){z=new P.dz(b,a,0,null,null,null,null)
+H.VM(z,[d])
+z.SJ=z
+z.iE=z}else{z=new P.DL(b,a,0,null,null,null,null)
+H.VM(z,[d])
+z.SJ=z
+z.iE=z}return z},ot:function(a){var z,y,x,w,v,u
+if(a==null)return
+try{z=a.call$0()
+w=z
+v=J.x(w)
+if(typeof w==="object"&&w!==null&&!!v.$isb8)return z
+return}catch(u){w=H.Ru(u)
+y=w
+x=new H.XO(u,null)
+$.X3.hk(y,x)}},YE:function(a){},SZ:function(a,b){$.X3.hk(a,b)},ax:function(){},FE:function(a,b,c){var z,y,x,w
+try{b.call$1(a.call$0())}catch(x){w=H.Ru(x)
+z=w
+y=new H.XO(x,null)
+c.call$2(z,y)}},NX:function(a,b,c,d){var z,y
+z=a.ed()
+y=J.x(z)
+if(typeof z==="object"&&z!==null&&!!y.$isb8)z.wM(new P.dR(b,c,d))
+else b.K5(c,d)},TB:function(a,b){return new P.uR(a,b)},Bb:function(a,b,c){var z,y
+z=a.ed()
+y=J.x(z)
+if(typeof z==="object"&&z!==null&&!!y.$isb8)z.wM(new P.QX(b,c))
+else b.rX(c)},rT:function(a,b){var z
+if(J.xC($.X3,C.NU))return $.X3.kG(a,b)
+z=$.X3
+return z.kG(a,z.xi(b,!0))},jL:function(a,b){var z=a.gVs()
+return H.cy(z<0?0:z,b)},L2:function(a,b,c,d,e){a.Gr(new P.pK(d,e))},T8:function(a,b,c,d){var z,y
+if(J.xC($.X3,c))return d.call$0()
+z=$.X3
+try{$.X3=c
+y=d.call$0()
+return y}finally{$.X3=z}},V7:function(a,b,c,d,e){var z,y
+if(J.xC($.X3,c))return d.call$1(e)
+z=$.X3
+try{$.X3=c
+y=d.call$1(e)
+return y}finally{$.X3=z}},Qx:function(a,b,c,d,e,f){var z,y
+if(J.xC($.X3,c))return d.call$2(e,f)
+z=$.X3
+try{$.X3=c
+y=d.call$2(e,f)
+return y}finally{$.X3=z}},Ee:function(a,b,c,d){return d},cQ:function(a,b,c,d){return d},dL:function(a,b,c,d){return d},Tk:function(a,b,c,d){P.IA(d)},h8:function(a,b,c,d,e){return P.jL(d,e)},Jj:function(a,b,c,d){H.LJ(d)},CI:function(a){J.wl($.X3,a)},qc:function(a,b,c,d,e){var z,y
+$.oK=P.jt
+if(d==null)d=C.Qq
+else{z=J.x(d)
+if(typeof d!=="object"||d===null||!z.$iswJ)throw H.b(P.u("ZoneSpecifications must be instantiated with the provided constructor."))}y=P.Py(null,null,null,null,null)
+if(e!=null)J.kH(e,new P.Ue(y))
+return new P.uo(c,d,y)},Ca:{"":"a;kc>,I4<",$isGe:true},Ik:{"":"O9;Y8",$asO9:null,$asqh:null},JI:{"":"yU;Ae@,iE@,SJ@,Y8,dB,o7,Bd,Lj,Gv,lz,Ri",
+gY8:function(){return this.Y8},
+uR:function(a){var z=this.Ae
+if(typeof z!=="number")throw z.i()
+return(z&1)===a},
+Ac:function(){var z=this.Ae
+if(typeof z!=="number")throw z.w()
+this.Ae=(z^1)>>>0},
+gP4:function(){var z=this.Ae
+if(typeof z!=="number")throw z.i()
+return(z&2)!==0},
+dK:function(){var z=this.Ae
+if(typeof z!=="number")throw z.k()
+this.Ae=(z|4)>>>0},
+gHj:function(){var z=this.Ae
+if(typeof z!=="number")throw z.i()
+return(z&4)!==0},
+uO:function(){},
+gp4:function(){return new P.Ip(this,P.JI.prototype.uO,null,"uO")},
+LP:function(){},
+gZ9:function(){return new P.Ip(this,P.JI.prototype.LP,null,"LP")},
+$asyU:null,
+$asMO:null,
+static:{"":"kb,CM,fw",}},WV:{"":"a;nL<,QC<,iE@,SJ@",
+gP4:function(){return(this.Gv&2)!==0},
+SL:function(){var z=this.Ip
+if(z!=null)return z
+z=P.Dt(null)
+this.Ip=z
+return z},
+au:function(a){a.SJ=this.SJ
+a.iE=this
+this.SJ.siE(a)
+this.SJ=a
+a.Ae=this.Gv&1},
+p1:function(a){var z,y
+z=a.gSJ()
+y=a.giE()
+z.siE(y)
+y.sSJ(z)
+a.sSJ(a)
+a.siE(a)},
+ET:function(a){var z,y,x,w
+if((this.Gv&4)!==0)throw H.b(new P.lj("Subscribing to closed stream"))
+z=H.W8(this,"WV",0)
+y=$.X3
+x=a?1:0
+w=new P.JI(null,null,null,this,null,null,null,y,x,null,null)
+H.VM(w,[z])
+w.SJ=w
+w.iE=w
+this.au(w)
+z=this.iE
+y=this.SJ
+if(z==null?y==null:z===y)P.ot(this.nL)
+return w},
+j0:function(a){if(a.giE()===a)return
+if(a.gP4())a.dK()
+else{this.p1(a)
+if((this.Gv&2)===0&&this.iE===this)this.Of()}},
+mO:function(a){},
+m4:function(a){},
+q7:function(){if((this.Gv&4)!==0)return new P.lj("Cannot add new events after calling close")
+return new P.lj("Cannot add new events while doing an addStream")},
+h:function(a,b){if(this.Gv>=4)throw H.b(this.q7())
+this.Iv(b)},
+ght:function(a){return new P.C7(this,P.WV.prototype.h,a,"h")},
+zw:function(a,b){if(this.Gv>=4)throw H.b(this.q7())
+this.pb(a,b)},
+gGj:function(){return new P.CQ(this,P.WV.prototype.zw,null,"zw")},
+cO:function(a){var z,y
+z=this.Gv
+if((z&4)!==0)return this.Ip
+if(z>=4)throw H.b(this.q7())
+this.Gv=(z|4)>>>0
+y=this.SL()
+this.SY()
+return y},
+Rg:function(a){this.Iv(a)},
+V8:function(a,b){this.pb(a,b)},
+Qj:function(){var z=this.AN
+this.AN=null
+this.Gv=(this.Gv&4294967287)>>>0
+C.jN.tZ(z)},
+nE:function(a){var z,y,x,w
+z=this.Gv
+if((z&2)!==0)throw H.b(new P.lj("Cannot fire new event. Controller is already firing an event"))
+if(this.iE===this)return
+y=z&1
+this.Gv=(z^3)>>>0
+x=this.iE
+for(;x!==this;)if(x.uR(y)){z=x.gAe()
+if(typeof z!=="number")throw z.k()
+x.sAe((z|2)>>>0)
+a.call$1(x)
+x.Ac()
+w=x.giE()
+if(x.gHj())this.p1(x)
+z=x.gAe()
+if(typeof z!=="number")throw z.i()
+x.sAe((z&4294967293)>>>0)
+x=w}else x=x.giE()
+this.Gv=(this.Gv&4294967293)>>>0
+if(this.iE===this)this.Of()},
+Of:function(){if((this.Gv&4)!==0&&this.Ip.Gv===0)this.Ip.OH(null)
+P.ot(this.QC)}},dz:{"":"WV;nL,QC,Gv,iE,SJ,AN,Ip",
+Iv:function(a){if(this.iE===this)return
+this.nE(new P.tK(this,a))},
+pb:function(a,b){if(this.iE===this)return
+this.nE(new P.OR(this,a,b))},
+SY:function(){if(this.iE!==this)this.nE(new P.Bg(this))
+else this.Ip.OH(null)},
+$asWV:null},tK:{"":"Tp;a,b",
+call$1:function(a){a.Rg(this.b)},
+"+call:1:0":0,
+$isEH:true,
+$is_HB:true,
+$is_Dv:true},OR:{"":"Tp;a,b,c",
+call$1:function(a){a.V8(this.b,this.c)},
+"+call:1:0":0,
+$isEH:true,
+$is_HB:true,
+$is_Dv:true},Bg:{"":"Tp;a",
+call$1:function(a){a.Qj()},
+"+call:1:0":0,
+$isEH:true,
+$is_HB:true,
+$is_Dv:true},DL:{"":"WV;nL,QC,Gv,iE,SJ,AN,Ip",
+Iv:function(a){var z,y
+for(z=this.iE;z!==this;z=z.giE()){y=new P.LV(a,null)
+y.$builtinTypeInfo=[null]
+z.w6(y)}},
+pb:function(a,b){var z
+for(z=this.iE;z!==this;z=z.giE())z.w6(new P.DS(a,b,null))},
+SY:function(){var z=this.iE
+if(z!==this)for(;z!==this;z=z.giE())z.w6(C.Wj)
+else this.Ip.OH(null)},
+$asWV:null},b8:{"":"a;",$isb8:true},j7:{"":"Tp;a",
+call$1:function(a){var z=this.a
+if(z.b!=null){z.b=null
+z.a.pm(a)}return},
+"+call:1:0":0,
+$isEH:true,
+$is_HB:true,
+$is_Dv:true},oV:{"":"Tp;a,b",
+call$1:function(a){var z,y,x
+z=this.a
+y=z.b
+if(y==null)return
+x=this.b
+if(x<0||x>=y.length)throw H.e(y,x)
+y[x]=a
+z.c=z.c-1
+if(z.c===0){y=z.a
+z=z.b
+y=y.MM
+if(y.Gv!==0)H.vh(new P.lj("Future already completed"))
+y.OH(z)}},
+"+call:1:0":0,
+$isEH:true,
+$is_HB:true,
+$is_Dv:true},TP:{"":"a;"},Zf:{"":"TP;MM",
+oo:function(a,b){var z=this.MM
+if(z.Gv!==0)throw H.b(new P.lj("Future already completed"))
+z.OH(b)},
+tZ:function(a){return this.oo(a,null)},
+w0:function(a,b){var z
+if(a==null)throw H.b(new P.AT("Error must not be null"))
+z=this.MM
+if(z.Gv!==0)throw H.b(new P.lj("Future already completed"))
+z.CG(a,b)},
+pm:function(a){return this.w0(a,null)},
+gYJ:function(){return new P.CQ(this,P.Zf.prototype.w0,null,"w0")},
+$asTP:null},vs:{"":"a;Gv,Lj<,jk,BQ@,OY,As,qV,o4",
+gcg:function(){return this.Gv>=4},
+gNm:function(){return this.Gv===8},
+swG:function(a){if(a)this.Gv=2
+else this.Gv=0},
+gO1:function(){return this.Gv===2?null:this.OY},
+GP:function(a){return this.gO1().call$1(a)},
+gyK:function(){return this.Gv===2?null:this.As},
+go7:function(){return this.Gv===2?null:this.qV},
+gIa:function(){return this.Gv===2?null:this.o4},
+xY:function(){return this.gIa().call$0()},
+Rx:function(a,b){var z=P.Y8(a,b,null)
+this.au(z)
+return z},
+ml:function(a){return this.Rx(a,null)},
+co:function(a,b){var z=P.RP(a,b,null)
+this.au(z)
+return z},
+OA:function(a){return this.co(a,null)},
+wM:function(a){var z=P.X4(a,H.W8(this,"vs",0))
+this.au(z)
+return z},
+gDL:function(){return this.jk},
+gcG:function(){return this.jk},
+Am:function(a){this.Gv=4
+this.jk=a},
+E6:function(a,b){this.Gv=8
+this.jk=new P.Ca(a,b)},
+au:function(a){if(this.Gv>=4)this.Lj.wr(new P.da(this,a))
+else{a.sBQ(this.jk)
+this.jk=a}},
+L3:function(){var z,y,x
+z=this.jk
+this.jk=null
+for(y=null;z!=null;y=z,z=x){x=z.gBQ()
+z.sBQ(y)}return y},
+rX:function(a){var z,y
+z=J.x(a)
+if(typeof a==="object"&&a!==null&&!!z.$isb8){P.GZ(a,this)
+return}y=this.L3()
+this.Am(a)
+P.HZ(this,y)},
+K5:function(a,b){var z=this.L3()
+this.E6(a,b)
+P.HZ(this,z)},
+Lp:function(a){return this.K5(a,null)},
+gbY:function(){return new P.CQ(this,P.vs.prototype.K5,null,"K5")},
+OH:function(a){var z,y
+z=J.x(a)
+y=typeof a==="object"&&a!==null&&!!z.$isb8
+if(y);if(y)z=typeof a!=="object"||a===null||!z.$isvs||a.Gv<4
+else z=!1
+if(z){this.rX(a)
+return}if(this.Gv!==0)H.vh(new P.lj("Future already completed"))
+this.Gv=1
+this.Lj.wr(new P.rH(this,a))},
+CG:function(a,b){if(this.Gv!==0)H.vh(new P.lj("Future already completed"))
+this.Gv=1
+this.Lj.wr(new P.ZL(this,a,b))},
+L7:function(a,b){this.OH(a)},
+$isvs:true,
+$isb8:true,
+static:{"":"Gn,JE,OT,oN,NK",Dt:function(a){var z=new P.vs(0,$.X3,null,null,null,null,null,null)
+H.VM(z,[a])
+return z},Ab:function(a,b){var z=new P.vs(0,$.X3,null,null,null,null,null,null)
+H.VM(z,[b])
+z.L7(a,b)
+return z},Y8:function(a,b,c){var z=$.X3
+z=new P.vs(0,z,null,null,z.cR(a),null,P.VH(b,$.X3),null)
+H.VM(z,[c])
+return z},RP:function(a,b,c){var z,y
+z=$.X3
+y=P.VH(a,z)
+y=new P.vs(0,z,null,null,null,$.X3.cR(b),y,null)
+H.VM(y,[c])
+return y},X4:function(a,b){var z=$.X3
+z=new P.vs(0,z,null,null,null,null,null,z.Al(a))
+H.VM(z,[b])
+return z},GZ:function(a,b){var z
+b.swG(!0)
+z=J.x(a)
+if(typeof a==="object"&&a!==null&&!!z.$isvs)if(a.Gv>=4)P.HZ(a,b)
+else a.au(b)
+else a.Rx(new P.xw(b),new P.dm(b))},yE:function(a,b){var z
+do{z=b.gBQ()
+b.sBQ(null)
+P.HZ(a,b)
+if(z!=null){b=z
+continue}else break}while(!0)},HZ:function(a,b){var z,y,x,w,v,u,t,s,r
+z={}
+z.e=a
+for(;!0;){y={}
+if(!z.e.gcg())return
+x=z.e.gNm()
+if(x&&b==null){w=z.e.gcG()
+z.e.gLj().hk(J.w8(w),w.gI4())
+return}if(b==null)return
+if(b.gBQ()!=null){P.yE(z.e,b)
+return}if(x&&!z.e.gLj().fC(b.gLj())){w=z.e.gcG()
+z.e.gLj().hk(J.w8(w),w.gI4())
+return}v=$.X3
+u=b.gLj()
+if(v==null?u!=null:v!==u){b.gLj().Gr(new P.mi(z,b))
+return}y.b=null
+y.c=null
+y.d=!1
+b.gLj().Gr(new P.jb(z,y,x,b))
+if(y.d)return
+v=y.b===!0
+if(v){u=y.c
+t=J.x(u)
+t=typeof u==="object"&&u!==null&&!!t.$isb8
+u=t}else u=!1
+if(u){s=y.c
+y=J.x(s)
+if(typeof s==="object"&&s!==null&&!!y.$isvs&&s.Gv>=4){b.swG(!0)
+z.e=s
+continue}P.GZ(s,b)
+return}if(v){r=b.L3()
+b.Am(y.c)}else{r=b.L3()
+w=y.c
+b.E6(J.w8(w),w.gI4())}z.e=b
+b=r}}}},da:{"":"Tp;a,b",
+call$0:function(){P.HZ(this.a,this.b)},
+"+call:0:0":0,
+$isEH:true,
+$is_X0:true},xw:{"":"Tp;a",
+call$1:function(a){this.a.rX(a)},
+"+call:1:0":0,
+$isEH:true,
+$is_HB:true,
+$is_Dv:true},dm:{"":"Tp;b",
+call$2:function(a,b){this.b.K5(a,b)},
+"+call:2:0":0,
+"*call":[40],
+call$1:function(a){return this.call$2(a,null)},
+"+call:1:0":0,
+$isEH:true,
+$is_bh:true,
+$is_HB:true,
+$is_Dv:true},rH:{"":"Tp;a,b",
+call$0:function(){this.a.rX(this.b)},
+"+call:0:0":0,
+$isEH:true,
+$is_X0:true},ZL:{"":"Tp;a,b,c",
+call$0:function(){this.a.K5(this.b,this.c)},
+"+call:0:0":0,
+$isEH:true,
+$is_X0:true},mi:{"":"Tp;c,d",
+call$0:function(){P.HZ(this.c.e,this.d)},
+"+call:0:0":0,
+$isEH:true,
+$is_X0:true},jb:{"":"Tp;c,b,e,f",
+call$0:function(){var z,y,x,w,v,u,t,s,r,q,p,o
+z={}
+try{r=this.c
+if(!this.e){y=r.e.gDL()
+r=this.f
+q=this.b
+if(r.gO1()!=null){q.c=r.GP(y)
+q.b=!0}else{q.c=y
+q.b=!0}}else{x=r.e.gcG()
+r=this.f
+w=r.gyK()
+v=!0
+if(w!=null)v=w.call$1(J.w8(x))
+q=v===!0&&r.go7()!=null
+p=this.b
+if(q){u=r.go7()
+p.c=P.K2(u,J.w8(x),x.gI4())
+p.b=!0}else{p.c=x
+p.b=!1}}r=this.f
+if(r.gIa()!=null){z.a=r.xY()
+q=z.a
+p=J.x(q)
+if(typeof q==="object"&&q!==null&&!!p.$isb8){r.swG(!0)
+z.a.Rx(new P.wB(this.c,r),new P.Pu(z,r))
+this.b.d=!0}}}catch(o){z=H.Ru(o)
+t=z
+s=new H.XO(o,null)
+if(this.e){z=J.w8(this.c.e.gcG())
+r=t
+r=z==null?r==null:z===r
+z=r}else z=!1
+r=this.b
+if(z)r.c=this.c.e.gcG()
+else r.c=new P.Ca(t,s)
+this.b.b=!1}},
+"+call:0:0":0,
+$isEH:true,
+$is_X0:true},wB:{"":"Tp;c,g",
+call$1:function(a){P.HZ(this.c.e,this.g)},
+"+call:1:0":0,
+$isEH:true,
+$is_HB:true,
+$is_Dv:true},Pu:{"":"Tp;a,h",
+call$2:function(a,b){var z,y,x
+z=this.a
+y=z.a
+x=J.x(y)
+if(typeof y!=="object"||y===null||!x.$isvs){z.a=P.Dt(null)
+z.a.E6(a,b)}P.HZ(z.a,this.h)},
+"+call:2:0":0,
+"*call":[40],
+call$1:function(a){return this.call$2(a,null)},
+"+call:1:0":0,
+$isEH:true,
+$is_bh:true,
+$is_HB:true,
+$is_Dv:true},qh:{"":"a;",
+ev:function(a,b){var z=new P.nO(b,this)
+H.VM(z,[H.W8(this,"qh",0)])
+return z},
+ez:function(a,b){var z=new P.t3(b,this)
+H.VM(z,[H.W8(this,"qh",0),null])
+return z},
+zV:function(a,b){var z,y,x
+z={}
+y=P.Dt(J.O)
+x=P.p9("")
+z.a=null
+z.b=!0
+z.a=this.KR(new P.QC(z,this,b,y,x),!0,new P.Rv(y,x),new P.Yl(y))
+return y},
+tg:function(a,b){var z,y
+z={}
+y=P.Dt(J.kn)
+z.a=null
+z.a=this.KR(new P.YJ(z,this,b,y),!0,new P.DO(y),y.gbY())
+return y},
+aN:function(a,b){var z,y
+z={}
+y=P.Dt(null)
+z.a=null
+z.a=this.KR(new P.lz(z,this,b,y),!0,new P.M4(y),y.gbY())
+return y},
+Vr:function(a,b){var z,y
+z={}
+y=P.Dt(J.kn)
+z.a=null
+z.a=this.KR(new P.Jp(z,this,b,y),!0,new P.eN(y),y.gbY())
+return y},
+gB:function(a){var z,y
+z={}
+y=new P.vs(0,$.X3,null,null,null,null,null,null)
+y.$builtinTypeInfo=[J.im]
+z.a=0
+this.KR(new P.B5(z),!0,new P.PI(z,y),y.gbY())
+return y},
+"+length":0,
+gl0:function(a){var z,y
+z={}
+y=P.Dt(J.kn)
+z.a=null
+z.a=this.KR(new P.j4(z,y),!0,new P.i9(y),y.gbY())
+return y},
+"+isEmpty":0,
+br:function(a){var z,y
+z=[]
+H.VM(z,[H.W8(this,"qh",0)])
+y=P.Dt([J.Q,H.W8(this,"qh",0)])
+this.KR(new P.VV(this,z),!0,new P.Dy(z,y),y.gbY())
+return y},
+eR:function(a,b){return P.eF(this,b,null)},
+gFV:function(a){var z,y
+z={}
+y=P.Dt(H.W8(this,"qh",0))
+z.a=null
+z.a=this.KR(new P.lU(z,this,y),!0,new P.xp(y),y.gbY())
+return y},
+grZ:function(a){var z,y
+z={}
+y=P.Dt(H.W8(this,"qh",0))
+z.a=null
+z.b=!1
+this.KR(new P.UH(z,this),!0,new P.Z5(z,y),y.gbY())
+return y},
+Zv:function(a,b){var z,y,x
+z={}
+z.a=b
+y=z.a
+if(typeof y!=="number"||Math.floor(y)!==y||J.u6(y,0))throw H.b(new P.AT(z.a))
+x=P.Dt(H.W8(this,"qh",0))
+z.b=null
+z.b=this.KR(new P.ii(z,this,x),!0,new P.ib(z,x),x.gbY())
+return x},
+$isqh:true},QC:{"":"Tp;a,b,c,d,e",
+call$1:function(a){var z,y,x,w,v
+x=this.a
+if(!x.b)this.e.KF(this.c)
+x.b=!1
+try{this.e.KF(a)}catch(w){v=H.Ru(w)
+z=v
+y=new H.XO(w,null)
+P.NX(x.a,this.d,z,y)}},
+"+call:1:0":0,
+$isEH:true,
+$is_HB:true,
+$is_Dv:true},Yl:{"":"Tp;f",
+call$1:function(a){this.f.Lp(a)},
+"+call:1:0":0,
+$isEH:true,
+$is_HB:true,
+$is_Dv:true},Rv:{"":"Tp;g,h",
+call$0:function(){this.g.rX(this.h.vM)},
+"+call:0:0":0,
+$isEH:true,
+$is_X0:true},YJ:{"":"Tp;a,b,c,d",
+call$1:function(a){var z,y
+z=this.a
+y=this.d
+P.FE(new P.jv(this.c,a),new P.LB(z,y),P.TB(z.a,y))},
+"+call:1:0":0,
+$isEH:true,
+$is_HB:true,
+$is_Dv:true},jv:{"":"Tp;e,f",
+call$0:function(){return J.xC(this.f,this.e)},
+"+call:0:0":0,
+$isEH:true,
+$is_X0:true},LB:{"":"Tp;a,g",
+call$1:function(a){if(a===!0)P.Bb(this.a.a,this.g,!0)},
+"+call:1:0":0,
+$isEH:true,
+$is_HB:true,
+$is_Dv:true},DO:{"":"Tp;h",
+call$0:function(){this.h.rX(!1)},
+"+call:0:0":0,
+$isEH:true,
+$is_X0:true},lz:{"":"Tp;a,b,c,d",
+call$1:function(a){P.FE(new P.Rl(this.c,a),new P.Jb(),P.TB(this.a.a,this.d))},
+"+call:1:0":0,
+$isEH:true,
+$is_HB:true,
+$is_Dv:true},Rl:{"":"Tp;e,f",
+call$0:function(){return this.e.call$1(this.f)},
+"+call:0:0":0,
+$isEH:true,
+$is_X0:true},Jb:{"":"Tp;",
+call$1:function(a){},
+"+call:1:0":0,
+$isEH:true,
+$is_HB:true,
+$is_Dv:true},M4:{"":"Tp;g",
+call$0:function(){this.g.rX(null)},
+"+call:0:0":0,
+$isEH:true,
+$is_X0:true},Jp:{"":"Tp;a,b,c,d",
+call$1:function(a){var z,y
+z=this.a
+y=this.d
+P.FE(new P.h7(this.c,a),new P.pr(z,y),P.TB(z.a,y))},
+"+call:1:0":0,
+$isEH:true,
+$is_HB:true,
+$is_Dv:true},h7:{"":"Tp;e,f",
+call$0:function(){return this.e.call$1(this.f)},
+"+call:0:0":0,
+$isEH:true,
+$is_X0:true},pr:{"":"Tp;a,g",
+call$1:function(a){if(a===!0)P.Bb(this.a.a,this.g,!0)},
+"+call:1:0":0,
+$isEH:true,
+$is_HB:true,
+$is_Dv:true},eN:{"":"Tp;h",
+call$0:function(){this.h.rX(!1)},
+"+call:0:0":0,
+$isEH:true,
+$is_X0:true},B5:{"":"Tp;a",
+call$1:function(a){var z=this.a
+z.a=z.a+1},
+"+call:1:0":0,
+$isEH:true,
+$is_HB:true,
+$is_Dv:true},PI:{"":"Tp;a,b",
+call$0:function(){this.b.rX(this.a.a)},
+"+call:0:0":0,
+$isEH:true,
+$is_X0:true},j4:{"":"Tp;a,b",
+call$1:function(a){P.Bb(this.a.a,this.b,!1)},
+"+call:1:0":0,
+$isEH:true,
+$is_HB:true,
+$is_Dv:true},i9:{"":"Tp;c",
+call$0:function(){this.c.rX(!0)},
+"+call:0:0":0,
+$isEH:true,
+$is_X0:true},VV:{"":"Tp;a,b",
+call$1:function(a){this.b.push(a)},
+"+call:1:0":0,
+$isEH:true,
+$is_HB:true,
+$is_Dv:true},Dy:{"":"Tp;c,d",
+call$0:function(){this.d.rX(this.c)},
+"+call:0:0":0,
+$isEH:true,
+$is_X0:true},lU:{"":"Tp;a,b,c",
+call$1:function(a){P.Bb(this.a.a,this.c,a)},
+"+call:1:0":0,
+$isEH:true,
+$is_HB:true,
+$is_Dv:true},xp:{"":"Tp;d",
+call$0:function(){this.d.Lp(new P.lj("No elements"))},
+"+call:0:0":0,
+$isEH:true,
+$is_X0:true},UH:{"":"Tp;a,b",
+call$1:function(a){var z=this.a
+z.b=!0
+z.a=a},
+"+call:1:0":0,
+$isEH:true,
+$is_HB:true,
+$is_Dv:true},Z5:{"":"Tp;a,c",
+call$0:function(){var z=this.a
+if(z.b){this.c.rX(z.a)
+return}this.c.Lp(new P.lj("No elements"))},
+"+call:0:0":0,
+$isEH:true,
+$is_X0:true},ii:{"":"Tp;a,b,c",
+call$1:function(a){var z=this.a
+if(J.xC(z.a,0)){P.Bb(z.b,this.c,a)
+return}z.a=J.xH(z.a,1)},
+"+call:1:0":0,
+$isEH:true,
+$is_HB:true,
+$is_Dv:true},ib:{"":"Tp;a,d",
+call$0:function(){this.d.Lp(new P.bJ("value "+H.d(this.a.a)))},
+"+call:0:0":0,
+$isEH:true,
+$is_X0:true},MO:{"":"a;",$isMO:true},ms:{"":"a;",
+gh6:function(){if((this.Gv&8)===0)return this.iP
+return this.iP.gjy()},
+kW:function(){if((this.Gv&8)===0){if(this.iP==null)this.iP=new P.ny(null,null,0)
+return this.iP}var z=this.iP.gjy()
+return z},
+ghG:function(){if((this.Gv&8)!==0)return this.iP.gjy()
+return this.iP},
+BW:function(){if((this.Gv&4)!==0)return new P.lj("Cannot add event after closing")
+return new P.lj("Cannot add event while adding a stream")},
+SL:function(){if(this.Ip==null){this.Ip=P.Dt(null)
+if((this.Gv&2)!==0)this.Ip.rX(null)}return this.Ip},
+h:function(a,b){if(this.Gv>=4)throw H.b(this.BW())
+this.Rg(b)},
+cO:function(a){var z=this.Gv
+if((z&4)!==0)return this.Ip
+if(z>=4)throw H.b(this.BW())
+this.Gv=(z|4)>>>0
+this.SL()
+z=this.Gv
+if((z&1)!==0)this.SY()
+else if((z&3)===0){z=this.kW()
+z.h(z,C.Wj)}return this.Ip},
+Rg:function(a){var z,y
+z=this.Gv
+if((z&1)!==0)this.Iv(a)
+else if((z&3)===0){z=this.kW()
+y=new P.LV(a,null)
+H.VM(y,[H.W8(this,"ms",0)])
+z.h(z,y)}},
+V8:function(a,b){var z=this.Gv
+if((z&1)!==0)this.pb(a,b)
+else if((z&3)===0){z=this.kW()
+z.h(z,new P.DS(a,b,null))}},
+Qj:function(){var z=this.iP
+this.iP=z.gjy()
+this.Gv=(this.Gv&4294967287)>>>0
+z.tZ(z)},
+ET:function(a){var z,y,x,w,v
+if((this.Gv&3)!==0)throw H.b(new P.lj("Stream has already been listened to."))
+z=$.X3
+y=a?1:0
+x=new P.yU(this,null,null,null,z,y,null,null)
+H.VM(x,[null])
+w=this.gh6()
+this.Gv=(this.Gv|1)>>>0
+if((this.Gv&8)!==0){v=this.iP
+v.sjy(x)
+v.QE()}else this.iP=x
+x.WN(w)
+x.J7(new P.UO(this))
+return x},
+j0:function(a){var z,y
+if((this.Gv&8)!==0)this.iP.ed()
+this.iP=null
+this.Gv=(this.Gv&4294967286|2)>>>0
+z=new P.Bc(this)
+y=P.ot(this.gQC())
+if(y!=null)y=y.wM(z)
+else z.call$0()
+return y},
+mO:function(a){var z
+if((this.Gv&8)!==0){z=this.iP
+z.yy(z)}P.ot(this.gp4())},
+m4:function(a){if((this.Gv&8)!==0)this.iP.QE()
+P.ot(this.gZ9())}},UO:{"":"Tp;a",
+call$0:function(){P.ot(this.a.gnL())},
+"+call:0:0":0,
+$isEH:true,
+$is_X0:true},Bc:{"":"Tp;a",
+call$0:function(){var z=this.a.Ip
+if(z!=null&&z.Gv===0)z.OH(null)},
+"+call:0:0":0,
+$isEH:true,
+$is_X0:true},vp:{"":"a;",
+Iv:function(a){this.ghG().Rg(a)},
+pb:function(a,b){this.ghG().V8(a,b)},
+SY:function(){this.ghG().Qj()}},lk:{"":"a;",
+Iv:function(a){var z,y
+z=this.ghG()
+y=new P.LV(a,null)
+H.VM(y,[null])
+z.w6(y)},
+pb:function(a,b){this.ghG().w6(new P.DS(a,b,null))},
+SY:function(){this.ghG().w6(C.Wj)}},Gh:{"":"XB;nL<,p4<,Z9<,QC<,iP,Gv,Ip"},XB:{"":"ms+lk;",$asms:null},ly:{"":"cK;nL<,p4<,Z9<,QC<,iP,Gv,Ip"},cK:{"":"ms+vp;",$asms:null},O9:{"":"ez;Y8",
+w4:function(a){return this.Y8.ET(a)},
+giO:function(a){return(H.eQ(this.Y8)^892482866)>>>0},
+n:function(a,b){var z
+if(b==null)return!1
+if(this===b)return!0
+z=J.x(b)
+if(typeof b!=="object"||b===null||!z.$isO9)return!1
+return b.Y8===this.Y8},
+$isO9:true,
+$asez:null,
+$asqh:null},yU:{"":"KA;Y8<,dB,o7,Bd,Lj,Gv,lz,Ri",
+tA:function(){return this.gY8().j0(this)},
+gQC:function(){return new P.Ip(this,P.yU.prototype.tA,null,"tA")},
+uO:function(){this.gY8().mO(this)},
+gp4:function(){return new P.Ip(this,P.yU.prototype.uO,null,"uO")},
+LP:function(){this.gY8().m4(this)},
+gZ9:function(){return new P.Ip(this,P.yU.prototype.LP,null,"LP")},
+$asKA:null,
+$asMO:null},nP:{"":"a;"},KA:{"":"a;dB,o7<,Bd,Lj<,Gv,lz,Ri",
+WN:function(a){if(a==null)return
+this.Ri=a
+if(!a.gl0(a)){this.Gv=(this.Gv|64)>>>0
+this.Ri.t2(this)}},
+fe:function(a){this.dB=$.X3.cR(a)},
+fm:function(a,b){if(b==null)b=P.AY
+this.o7=P.VH(b,$.X3)},
+pE:function(a){if(a==null)a=P.No
+this.Bd=$.X3.Al(a)},
+nB:function(a,b){var z=this.Gv
+if((z&8)!==0)return
+this.Gv=(z+128|4)>>>0
+if(z<128&&this.Ri!=null)this.Ri.FK()
+if((z&4)===0&&(this.Gv&32)===0)this.J7(this.gp4())},
+yy:function(a){return this.nB(a,null)},
+QE:function(){var z=this.Gv
+if((z&8)!==0)return
+if(z>=128){this.Gv=z-128
+z=this.Gv
+if(z<128){if((z&64)!==0){z=this.Ri
+z=!z.gl0(z)}else z=!1
+if(z)this.Ri.t2(this)
+else{this.Gv=(this.Gv&4294967291)>>>0
+if((this.Gv&32)===0)this.J7(this.gZ9())}}}},
+ed:function(){this.Gv=(this.Gv&4294967279)>>>0
+if((this.Gv&8)!==0)return this.lz
+this.Ek()
+return this.lz},
+gzG:function(){if(this.Gv<128){var z=this.Ri
+z=z==null||z.gl0(z)}else z=!1
+return z},
+Ek:function(){this.Gv=(this.Gv|8)>>>0
+if((this.Gv&64)!==0)this.Ri.FK()
+if((this.Gv&32)===0)this.Ri=null
+this.lz=this.tA()},
+Rg:function(a){var z=this.Gv
+if((z&8)!==0)return
+if(z<32)this.Iv(a)
+else{z=new P.LV(a,null)
+H.VM(z,[null])
+this.w6(z)}},
+V8:function(a,b){var z=this.Gv
+if((z&8)!==0)return
+if(z<32)this.pb(a,b)
+else this.w6(new P.DS(a,b,null))},
+Qj:function(){var z=this.Gv
+if((z&8)!==0)return
+this.Gv=(z|2)>>>0
+if(this.Gv<32)this.SY()
+else this.w6(C.Wj)},
+uO:function(){},
+gp4:function(){return new P.Ip(this,P.KA.prototype.uO,null,"uO")},
+LP:function(){},
+gZ9:function(){return new P.Ip(this,P.KA.prototype.LP,null,"LP")},
+tA:function(){},
+gQC:function(){return new P.Ip(this,P.KA.prototype.tA,null,"tA")},
+w6:function(a){var z,y
+z=this.Ri
+if(z==null){z=new P.ny(null,null,0)
+this.Ri=z}z.h(z,a)
+y=this.Gv
+if((y&64)===0){this.Gv=(y|64)>>>0
+if(this.Gv<128)this.Ri.t2(this)}},
+Iv:function(a){var z=this.Gv
+this.Gv=(z|32)>>>0
+this.Lj.m1(this.dB,a)
+this.Gv=(this.Gv&4294967263)>>>0
+this.Kl((z&4)!==0)},
+pb:function(a,b){var z,y,x
+z=this.Gv
+y=new P.Vo(this,a,b)
+if((z&1)!==0){this.Gv=(z|16)>>>0
+this.Ek()
+z=this.lz
+x=J.x(z)
+if(typeof z==="object"&&z!==null&&!!x.$isb8)z.wM(y)
+else y.call$0()}else{y.call$0()
+this.Kl((z&4)!==0)}},
+SY:function(){var z,y,x
+z=new P.qB(this)
+this.Ek()
+this.Gv=(this.Gv|16)>>>0
+y=this.lz
+x=J.x(y)
+if(typeof y==="object"&&y!==null&&!!x.$isb8)y.wM(z)
+else z.call$0()},
+J7:function(a){var z=this.Gv
+this.Gv=(z|32)>>>0
+a.call$0()
+this.Gv=(this.Gv&4294967263)>>>0
+this.Kl((z&4)!==0)},
+Kl:function(a){var z,y
+if((this.Gv&64)!==0){z=this.Ri
+z=z.gl0(z)}else z=!1
+if(z){this.Gv=(this.Gv&4294967231)>>>0
+if((this.Gv&4)!==0&&this.gzG())this.Gv=(this.Gv&4294967291)>>>0}for(;!0;a=y){z=this.Gv
+if((z&8)!==0){this.Ri=null
+return}y=(z&4)!==0
+if(a===y)break
+this.Gv=(z^32)>>>0
+if(y)this.uO()
+else this.LP()
+this.Gv=(this.Gv&4294967263)>>>0}z=this.Gv
+if((z&64)!==0&&z<128)this.Ri.t2(this)},
+$isMO:true,
+static:{"":"ry,bG,Q9,QU,yJ,F2,yo,GC,L3",}},Vo:{"":"Tp;a,b,c",
+call$0:function(){var z,y,x,w,v
+z=this.a
+y=z.Gv
+if((y&8)!==0&&(y&16)===0)return
+z.Gv=(y|32)>>>0
+y=z.Lj
+if(!y.fC($.X3))$.X3.hk(this.b,this.c)
+else{x=z.o7
+w=J.x(x)
+v=this.b
+if(!!w.$is_bh)y.z8(x,v,this.c)
+else y.m1(x,v)}z.Gv=(z.Gv&4294967263)>>>0},
+"+call:0:0":0,
+$isEH:true,
+$is_X0:true},qB:{"":"Tp;a",
+call$0:function(){var z,y
+z=this.a
+y=z.Gv
+if((y&16)===0)return
+z.Gv=(y|42)>>>0
+z.Lj.bH(z.Bd)
+z.Gv=(z.Gv&4294967263)>>>0},
+"+call:0:0":0,
+$isEH:true,
+$is_X0:true},ez:{"":"qh;",
+KR:function(a,b,c,d){var z=this.w4(!0===b)
+z.fe(a)
+z.fm(z,d)
+z.pE(c)
+return z},
+zC:function(a,b,c){return this.KR(a,null,b,c)},
+yI:function(a){return this.KR(a,null,null,null)},
+w4:function(a){var z,y,x
+z=H.W8(this,"ez",0)
+y=$.X3
+x=a?1:0
+x=new P.KA(null,null,null,y,x,null,null)
+H.VM(x,[z])
+return x},
+fN:function(a){},
+gnL:function(){return new H.Pm(this,P.ez.prototype.fN,null,"fN")},
+$asqh:null},lx:{"":"a;LD@"},LV:{"":"lx;P>,LD",
+r6:function(a,b){return this.P.call$1(b)},
+pP:function(a){a.Iv(this.P)}},DS:{"":"lx;kc>,I4<,LD",
+pP:function(a){a.pb(this.kc,this.I4)}},dp:{"":"a;",
+pP:function(a){a.SY()},
+gLD:function(){return},
+sLD:function(a){throw H.b(new P.lj("No events after a done."))}},B3:{"":"a;",
+t2:function(a){var z=this.Gv
+if(z===1)return
+if(z>=1){this.Gv=1
+return}P.rb(new P.CR(this,a))
+this.Gv=1},
+FK:function(){if(this.Gv===1)this.Gv=3}},CR:{"":"Tp;a,b",
+call$0:function(){var z,y
+z=this.a
+y=z.Gv
+z.Gv=0
+if(y===3)return
+z.TO(this.b)},
+"+call:0:0":0,
+$isEH:true,
+$is_X0:true},ny:{"":"B3;zR,N6,Gv",
+gl0:function(a){return this.N6==null},
+"+isEmpty":0,
+h:function(a,b){var z=this.N6
+if(z==null){this.N6=b
+this.zR=b}else{z.sLD(b)
+this.N6=b}},
+TO:function(a){var z=this.zR
+this.zR=z.gLD()
+if(this.zR==null)this.N6=null
+z.pP(a)}},dR:{"":"Tp;a,b,c",
+call$0:function(){return this.a.K5(this.b,this.c)},
+"+call:0:0":0,
+$isEH:true,
+$is_X0:true},uR:{"":"Tp;a,b",
+call$2:function(a,b){return P.NX(this.a,this.b,a,b)},
+"+call:2:0":0,
+$isEH:true,
+$is_bh:true},QX:{"":"Tp;a,b",
+call$0:function(){return this.a.rX(this.b)},
+"+call:0:0":0,
+$isEH:true,
+$is_X0:true},YR:{"":"qh;",
+KR:function(a,b,c,d){var z=P.zK(this,!0===b,H.W8(this,"YR",0),H.W8(this,"YR",1))
+z.fe(a)
+z.fm(z,d)
+z.pE(c)
+return z},
+zC:function(a,b,c){return this.KR(a,null,b,c)},
+yI:function(a){return this.KR(a,null,null,null)},
+Ml:function(a,b){b.Rg(a)},
+$asqh:function(a,b){return[b]}},fB:{"":"KA;UY,hG,dB,o7,Bd,Lj,Gv,lz,Ri",
+Rg:function(a){if((this.Gv&2)!==0)return
+P.KA.prototype.Rg.call(this,a)},
+V8:function(a,b){if((this.Gv&2)!==0)return
+P.KA.prototype.V8.call(this,a,b)},
+uO:function(){var z=this.hG
+if(z==null)return
+z.yy(z)},
+gp4:function(){return new P.Ip(this,P.fB.prototype.uO,null,"uO")},
+LP:function(){var z=this.hG
+if(z==null)return
+z.QE()},
+gZ9:function(){return new P.Ip(this,P.fB.prototype.LP,null,"LP")},
+tA:function(){var z=this.hG
+if(z!=null){this.hG=null
+z.ed()}return},
+gQC:function(){return new P.Ip(this,P.fB.prototype.tA,null,"tA")},
+vx:function(a){this.UY.Ml(a,this)},
+gOa:function(){return new H.Pm(this,P.fB.prototype.vx,null,"vx")},
+xL:function(a,b){this.V8(a,b)},
+gRE:function(){return new P.bq(this,P.fB.prototype.xL,null,"xL")},
+fE:function(){this.Qj()},
+gH1:function(){return new P.Ip(this,P.fB.prototype.fE,null,"fE")},
+S8:function(a,b,c,d){var z,y
+z=this.gOa()
+y=this.gRE()
+this.hG=this.UY.Sb.zC(z,this.gH1(),y)},
+$asKA:function(a,b){return[b]},
+$asMO:function(a,b){return[b]},
+static:{zK:function(a,b,c,d){var z,y
+z=$.X3
+y=b?1:0
+y=new P.fB(a,null,null,null,null,z,y,null,null)
+H.VM(y,[c,d])
+y.S8(a,b,c,d)
+return y}}},nO:{"":"YR;qs,Sb",
+Dr:function(a){return this.qs.call$1(a)},
+Ml:function(a,b){var z,y,x,w,v
+z=null
+try{z=this.Dr(a)}catch(w){v=H.Ru(w)
+y=v
+x=new H.XO(w,null)
+b.V8(y,x)
+return}if(z===!0)b.Rg(a)},
+$asYR:function(a){return[a,a]},
+$asqh:null},t3:{"":"YR;TN,Sb",
+kn:function(a){return this.TN.call$1(a)},
+Ml:function(a,b){var z,y,x,w,v
+z=null
+try{z=this.kn(a)}catch(w){v=H.Ru(w)
+y=v
+x=new H.XO(w,null)
+b.V8(y,x)
+return}b.Rg(z)},
+$asYR:null,
+$asqh:function(a,b){return[b]}},dq:{"":"YR;Em,Sb",
+Ml:function(a,b){var z=this.Em
+if(z>0){this.Em=z-1
+return}b.Rg(a)},
+U6:function(a,b,c){if(b<0)throw H.b(new P.AT(b))},
+$asYR:function(a){return[a,a]},
+$asqh:null,
+static:{eF:function(a,b,c){var z=new P.dq(b,a)
+H.VM(z,[c])
+z.U6(a,b,c)
+return z}}},dX:{"":"a;"},aY:{"":"a;"},wJ:{"":"a;E2<,cP<,vo<,eo<,Ka<,Xp<,fb<,rb<,Zq<,rF,JS>,iq<",
+hk:function(a,b){return this.E2.call$2(a,b)},
+Gr:function(a){return this.cP.call$1(a)},
+Al:function(a){return this.Ka.call$1(a)},
+cR:function(a){return this.Xp.call$1(a)},
+O8:function(a){return this.fb.call$1(a)},
+wr:function(a){return this.rb.call$1(a)},
+RK:function(a,b){return this.rb.call$2(a,b)},
+kG:function(a,b){return this.Zq.call$2(a,b)},
+Ch:function(a,b){return this.JS.call$1(b)},
+iT:function(a){return this.iq.call$1$specification(a)},
+$iswJ:true},e4:{"":"a;"},JB:{"":"a;"},Id:{"":"a;nU",
+gLj:function(){return this.nU},
+x5:function(a,b,c){var z,y
+z=this.nU
+for(;y=J.RE(z),z.gtp().gE2()==null;)z=y.geT(z)
+return z.gtp().gE2().call$5(z,new P.Id(y.geT(z)),a,b,c)},
+Vn:function(a,b){var z,y
+z=this.nU
+for(;y=J.RE(z),z.gtp().gcP()==null;)z=y.geT(z)
+return z.gtp().gcP().call$4(z,new P.Id(y.geT(z)),a,b)},
+qG:function(a,b,c){var z,y
+z=this.nU
+for(;y=J.RE(z),z.gtp().gvo()==null;)z=y.geT(z)
+return z.gtp().gvo().call$5(z,new P.Id(y.geT(z)),a,b,c)},
+nA:function(a,b,c,d){var z,y
+z=this.nU
+for(;y=J.RE(z),z.gtp().geo()==null;)z=y.geT(z)
+return z.gtp().geo().call$6(z,new P.Id(y.geT(z)),a,b,c,d)},
+TE:function(a,b){var z,y
+z=this.nU
+for(;y=J.RE(z),z.gtp().gKa()==null;)z=y.geT(z)
+return z.gtp().gKa().call$4(z,new P.Id(y.geT(z)),a,b)},
+"+registerCallback:2:0":0,
+xO:function(a,b){var z,y
+z=this.nU
+for(;y=J.RE(z),z.gtp().gXp()==null;)z=y.geT(z)
+return z.gtp().gXp().call$4(z,new P.Id(y.geT(z)),a,b)},
+P6:function(a,b){var z,y
+z=this.nU
+for(;y=J.RE(z),z.gtp().gfb()==null;)z=y.geT(z)
+return z.gtp().gfb().call$4(z,new P.Id(y.geT(z)),a,b)},
+RK:function(a,b){var z,y
+z=this.nU
+for(;y=J.RE(z),z.gtp().grb()==null;)z=y.geT(z)
+y=y.geT(z)
+z.gtp().grb().call$4(z,new P.Id(y),a,b)},
+B7:function(a,b,c){var z,y
+z=this.nU
+for(;y=J.RE(z),z.gtp().gZq()==null;)z=y.geT(z)
+return z.gtp().gZq().call$5(z,new P.Id(y.geT(z)),a,b,c)},
+RB:function(a,b,c){var z,y,x
+z=this.nU
+for(;y=z.gtp(),x=J.RE(z),y.gJS(y)==null;)z=x.geT(z)
+y=z.gtp()
+y.gJS(y).call$4(z,new P.Id(x.geT(z)),b,c)},
+ld:function(a,b,c){var z,y
+z=this.nU
+for(;y=J.RE(z),z.gtp().giq()==null;)z=y.geT(z)
+y=y.geT(z)
+return z.gtp().giq().call$5(z,new P.Id(y),a,b,c)}},fZ:{"":"a;",
+fC:function(a){return this.gC5()===a.gC5()},
+bH:function(a){var z,y,x,w
+try{x=this.Gr(a)
+return x}catch(w){x=H.Ru(w)
+z=x
+y=new H.XO(w,null)
+return this.hk(z,y)}},
+m1:function(a,b){var z,y,x,w
+try{x=this.FI(a,b)
+return x}catch(w){x=H.Ru(w)
+z=x
+y=new H.XO(w,null)
+return this.hk(z,y)}},
+z8:function(a,b,c){var z,y,x,w
+try{x=this.mg(a,b,c)
+return x}catch(w){x=H.Ru(w)
+z=x
+y=new H.XO(w,null)
+return this.hk(z,y)}},
+xi:function(a,b){var z=this.Al(a)
+if(b)return new P.TF(this,z)
+else return new P.Xz(this,z)},
+oj:function(a,b){var z=this.cR(a)
+if(b)return new P.Cg(this,z)
+else return new P.Hs(this,z)}},TF:{"":"Tp;a,b",
+call$0:function(){return this.a.bH(this.b)},
+"+call:0:0":0,
+$isEH:true,
+$is_X0:true},Xz:{"":"Tp;c,d",
+call$0:function(){return this.c.Gr(this.d)},
+"+call:0:0":0,
+$isEH:true,
+$is_X0:true},Cg:{"":"Tp;a,b",
+call$1:function(a){return this.a.m1(this.b,a)},
+"+call:1:0":0,
+$isEH:true,
+$is_HB:true,
+$is_Dv:true},Hs:{"":"Tp;c,d",
+call$1:function(a){return this.c.FI(this.d,a)},
+"+call:1:0":0,
+$isEH:true,
+$is_HB:true,
+$is_Dv:true},uo:{"":"fZ;eT>,tp<,Se",
+gC5:function(){return this.eT.gC5()},
+t:function(a,b){var z,y
+z=this.Se
+y=z.t(z,b)
+if(y!=null||z.x4(b))return y
+z=this.eT
+if(z!=null)return J.UQ(z,b)
+return},
+"+[]:1:0":0,
+hk:function(a,b){return new P.Id(this).x5(this,a,b)},
+uI:function(a,b){return new P.Id(this).ld(this,a,b)},
+iT:function(a){return this.uI(a,null)},
+Gr:function(a){return new P.Id(this).Vn(this,a)},
+FI:function(a,b){return new P.Id(this).qG(this,a,b)},
+mg:function(a,b,c){return new P.Id(this).nA(this,a,b,c)},
+Al:function(a){return new P.Id(this).TE(this,a)},
+"+registerCallback:1:0":0,
+cR:function(a){return new P.Id(this).xO(this,a)},
+O8:function(a){return new P.Id(this).P6(this,a)},
+wr:function(a){new P.Id(this).RK(this,a)},
+kG:function(a,b){return new P.Id(this).B7(this,a,b)},
+Ch:function(a,b){var z=new P.Id(this)
+z.RB(z,this,b)}},pK:{"":"Tp;a,b",
+call$0:function(){P.IA(new P.eM(this.a,this.b))},
+"+call:0:0":0,
+$isEH:true,
+$is_X0:true},eM:{"":"Tp;c,d",
+call$0:function(){var z,y,x
+z=this.c
+P.JS("Uncaught Error: "+H.d(z))
+y=this.d
+if(y==null){x=J.x(z)
+x=typeof z==="object"&&z!==null&&!!x.$isGe}else x=!1
+if(x)y=z.gI4()
+if(y!=null)P.JS("Stack Trace: \n"+H.d(y)+"\n")
+throw H.b(z)},
+"+call:0:0":0,
+$isEH:true,
+$is_X0:true},Ue:{"":"Tp;a",
+call$2:function(a,b){var z
+if(a==null)throw H.b(P.u("ZoneValue key must not be null"))
+z=this.a
+z.u(z,a,b)},
+"+call:2:0":0,
+$isEH:true,
+$is_bh:true},W5:{"":"a;",
+gE2:function(){return P.xP},
+hk:function(a,b){return this.gE2().call$2(a,b)},
+gcP:function(){return P.AI},
+Gr:function(a){return this.gcP().call$1(a)},
+gvo:function(){return P.MM},
+geo:function(){return P.C9},
+gKa:function(){return P.Qk},
+"+registerCallback":0,
+Al:function(a){return this.gKa().call$1(a)},
+gXp:function(){return P.zi},
+cR:function(a){return this.gXp().call$1(a)},
+gfb:function(){return P.v3},
+O8:function(a){return this.gfb().call$1(a)},
+grb:function(){return P.G2},
+wr:function(a){return this.grb().call$1(a)},
+RK:function(a,b){return this.grb().call$2(a,b)},
+gZq:function(){return P.KF},
+kG:function(a,b){return this.gZq().call$2(a,b)},
+gJS:function(a){return P.ZB},
+Ch:function(a,b){return this.gJS(a).call$1(b)},
+giq:function(){return P.LS},
+iT:function(a){return this.giq().call$1$specification(a)}},R8:{"":"fZ;",
+geT:function(a){return},
+gtp:function(){return C.v8},
+gC5:function(){return this},
+fC:function(a){return a.gC5()===this},
+t:function(a,b){return},
+"+[]:1:0":0,
+hk:function(a,b){return P.L2(this,null,this,a,b)},
+uI:function(a,b){return P.qc(this,null,this,a,b)},
+iT:function(a){return this.uI(a,null)},
+Gr:function(a){return P.T8(this,null,this,a)},
+FI:function(a,b){return P.V7(this,null,this,a,b)},
+mg:function(a,b,c){return P.Qx(this,null,this,a,b,c)},
+Al:function(a){return a},
+"+registerCallback:1:0":0,
+cR:function(a){return a},
+O8:function(a){return a},
+wr:function(a){P.IA(a)},
+kG:function(a,b){return P.jL(a,b)},
+Ch:function(a,b){H.LJ(b)
+return}}}],["dart.collection","dart:collection",,P,{Ou:function(a,b){return J.xC(a,b)},T9:function(a){return J.v1(a)},Py:function(a,b,c,d,e){var z
+if(a==null){z=new P.k6(0,null,null,null,null)
+H.VM(z,[d,e])
+return z}b=P.py
+return P.MP(a,b,c,d,e)},yv:function(a){var z=new P.YO(0,null,null,null,null)
+H.VM(z,[a])
+return z},FO:function(a){var z,y
+y=$.xb()
+if(y.tg(y,a))return"(...)"
+y=$.xb()
+y.h(y,a)
+z=[]
+try{P.Vr(a,z)}finally{y=$.xb()
+y.Rz(y,a)}y=P.p9("(")
+y.We(z,", ")
+y.KF(")")
+return y.vM},Vr:function(a,b){var z,y,x,w,v,u,t,s,r,q
+z=a.gA(a)
+y=0
+x=0
+while(!0){if(!(y<80||x<3))break
+if(!z.G())return
+w=H.d(z.gl())
+b.push(w)
+y+=w.length+2;++x}if(!z.G()){if(x<=5)return
+if(0>=b.length)throw H.e(b,0)
+v=b.pop()
+if(0>=b.length)throw H.e(b,0)
+u=b.pop()}else{t=z.gl();++x
+if(!z.G()){if(x<=4){b.push(H.d(t))
+return}v=H.d(t)
+if(0>=b.length)throw H.e(b,0)
+u=b.pop()
+y+=v.length+2}else{s=z.gl();++x
+for(;z.G();t=s,s=r){r=z.gl();++x
+if(x>100){while(!0){if(!(y>75&&x>3))break
+if(0>=b.length)throw H.e(b,0)
+y-=b.pop().length+2;--x}b.push("...")
+return}}u=H.d(t)
+v=H.d(s)
+y+=v.length+u.length+4}}if(x>b.length+2){y+=5
+q="..."}else q=null
+while(!0){if(!(y>80&&b.length>3))break
+if(0>=b.length)throw H.e(b,0)
+y-=b.pop().length+2
+if(q==null){y+=5
+q="..."}}if(q!=null)b.push(q)
+b.push(u)
+b.push(v)},L5:function(a,b,c,d,e){var z
+if(b==null){if(a==null){z=new P.YB(0,null,null,null,null,null,0)
+H.VM(z,[d,e])
+return z}b=P.py}else{if(P.J2===b&&P.N3===a){z=new P.ey(0,null,null,null,null,null,0)
+H.VM(z,[d,e])
+return z}if(a==null)a=P.iv}return P.Ex(a,b,c,d,e)},Ls:function(a,b,c,d){var z=new P.b6(0,null,null,null,null,null,0)
+H.VM(z,[d])
+return z},vW:function(a){var z,y,x,w
+z={}
+for(x=0;x<$.tw().length;++x){w=$.tw()
+if(x>=w.length)throw H.e(w,x)
+if(w[x]===a)return"{...}"}y=P.p9("")
+try{$.tw().push(a)
+y.KF("{")
+z.a=!0
+J.kH(a,new P.W0(z,y))
+y.KF("}")}finally{z=$.tw()
+if(0>=z.length)throw H.e(z,0)
+z.pop()}return y.gvM()},k6:{"":"a;X5,vv,OX,OB,aw",
+gB:function(a){return this.X5},
+"+length":0,
+gl0:function(a){return this.X5===0},
+"+isEmpty":0,
+gor:function(a){return this.X5!==0},
+"+isNotEmpty":0,
+gvc:function(a){var z=new P.fG(this)
+H.VM(z,[H.W8(this,"k6",0)])
+return z},
+"+keys":0,
+gUQ:function(a){var z=new P.fG(this)
+H.VM(z,[H.W8(this,"k6",0)])
+return H.K1(z,new P.oi(this),H.W8(z,"mW",0),null)},
+"+values":0,
+x4:function(a){var z,y,x
+if(typeof a==="string"&&a!=="__proto__"){z=this.vv
+return z==null?!1:z[a]!=null}else if(typeof a==="number"&&(a&0x3ffffff)===a){y=this.OX
+return y==null?!1:y[a]!=null}else{x=this.OB
+if(x==null)return!1
+return this.aH(x[this.nm(a)],a)>=0}},
+"+containsKey:1:0":0,
+PF:function(a){var z=this.Ig()
+z.toString
+return H.Ck(z,new P.ce(this,a))},
+"+containsValue:1:0":0,
+t:function(a,b){var z,y,x,w,v,u,t
+if(typeof b==="string"&&b!=="__proto__"){z=this.vv
+if(z==null)y=null
+else{x=z[b]
+y=x===z?null:x}return y}else if(typeof b==="number"&&(b&0x3ffffff)===b){w=this.OX
+if(w==null)y=null
+else{x=w[b]
+y=x===w?null:x}return y}else{v=this.OB
+if(v==null)return
+u=v[this.nm(b)]
+t=this.aH(u,b)
+return t<0?null:u[t+1]}},
+"+[]:1:0":0,
+u:function(a,b,c){var z,y,x,w,v,u,t,s
+if(typeof b==="string"&&b!=="__proto__"){z=this.vv
+if(z==null){y=Object.create(null)
+if(y==null)y["<non-identifier-key>"]=y
+else y["<non-identifier-key>"]=y
+delete y["<non-identifier-key>"]
+this.vv=y
+z=y}if(z[b]==null){this.X5=this.X5+1
+this.aw=null}if(c==null)z[b]=z
+else z[b]=c}else if(typeof b==="number"&&(b&0x3ffffff)===b){x=this.OX
+if(x==null){y=Object.create(null)
+if(y==null)y["<non-identifier-key>"]=y
+else y["<non-identifier-key>"]=y
+delete y["<non-identifier-key>"]
+this.OX=y
+x=y}if(x[b]==null){this.X5=this.X5+1
+this.aw=null}if(c==null)x[b]=x
+else x[b]=c}else{w=this.OB
+if(w==null){y=Object.create(null)
+if(y==null)y["<non-identifier-key>"]=y
+else y["<non-identifier-key>"]=y
+delete y["<non-identifier-key>"]
+this.OB=y
+w=y}v=this.nm(b)
+u=w[v]
+if(u==null){t=[b,c]
+if(t==null)w[v]=w
+else w[v]=t
+this.X5=this.X5+1
+this.aw=null}else{s=this.aH(u,b)
+if(s>=0)u[s+1]=c
+else{u.push(b,c)
+this.X5=this.X5+1
+this.aw=null}}}},
+"+[]=:2:0":0,
+Rz:function(a,b){var z,y,x
+if(typeof b==="string"&&b!=="__proto__")return this.Nv(this.vv,b)
+else if(typeof b==="number"&&(b&0x3ffffff)===b)return this.Nv(this.OX,b)
+else{z=this.OB
+if(z==null)return
+y=z[this.nm(b)]
+x=this.aH(y,b)
+if(x<0)return
+this.X5=this.X5-1
+this.aw=null
+return y.splice(x,2)[1]}},
+aN:function(a,b){var z,y,x,w
+z=this.Ig()
+for(y=z.length,x=0;x<y;++x){w=z[x]
+b.call$2(w,this.t(this,w))
+if(z!==this.aw)throw H.b(P.a4(this))}},
+Ig:function(){var z,y,x,w,v,u,t,s,r,q,p,o
+z=this.aw
+if(z!=null)return z
+y=P.A(this.X5,null)
+x=this.vv
+if(x!=null){w=Object.getOwnPropertyNames(x)
+v=w.length
+for(u=0,t=0;t<v;++t){y[u]=w[t];++u}}else u=0
+s=this.OX
+if(s!=null){w=Object.getOwnPropertyNames(s)
+v=w.length
+for(t=0;t<v;++t){y[u]=+w[t];++u}}r=this.OB
+if(r!=null){w=Object.getOwnPropertyNames(r)
+v=w.length
+for(t=0;t<v;++t){q=r[w[t]]
+p=q.length
+for(o=0;o<p;o+=2){y[u]=q[o];++u}}}this.aw=y
+return y},
+Nv:function(a,b){var z
+if(a!=null&&a[b]!=null){z=P.vL(a,b)
+delete a[b]
+this.X5=this.X5-1
+this.aw=null
+return z}else return},
+nm:function(a){return J.v1(a)&0x3ffffff},
+aH:function(a,b){var z,y
+if(a==null)return-1
+z=a.length
+for(y=0;y<z;y+=2)if(J.xC(a[y],b))return y
+return-1},
+$isL8:true,
+static:{vL:function(a,b){var z=a[b]
+return z===a?null:z}}},oi:{"":"Tp;a",
+call$1:function(a){var z=this.a
+return z.t(z,a)},
+"+call:1:0":0,
+$isEH:true,
+$is_HB:true,
+$is_Dv:true},ce:{"":"Tp;a,b",
+call$1:function(a){var z=this.a
+return J.xC(z.t(z,a),this.b)},
+"+call:1:0":0,
+$isEH:true,
+$is_HB:true,
+$is_Dv:true},o2:{"":"k6;m6,Q6,bR,X5,vv,OX,OB,aw",
+C2:function(a,b){return this.m6.call$2(a,b)},
+H5:function(a){return this.Q6.call$1(a)},
+Ef:function(a){return this.bR.call$1(a)},
+t:function(a,b){if(this.Ef(b)!==!0)return
+return P.k6.prototype.t.call(this,this,b)},
+"+[]:1:0":0,
+x4:function(a){if(this.Ef(a)!==!0)return!1
+return P.k6.prototype.x4.call(this,a)},
+"+containsKey:1:0":0,
+Rz:function(a,b){if(this.Ef(b)!==!0)return
+return P.k6.prototype.Rz.call(this,this,b)},
+nm:function(a){return this.H5(a)&0x3ffffff},
+aH:function(a,b){var z,y
+if(a==null)return-1
+z=a.length
+for(y=0;y<z;y+=2)if(this.C2(a[y],b)===!0)return y
+return-1},
+bu:function(a){return P.vW(this)},
+$ask6:null,
+$asL8:null,
+static:{MP:function(a,b,c,d,e){var z=new P.jG(d)
+z=new P.o2(a,b,z,0,null,null,null,null)
+H.VM(z,[d,e])
+return z}}},jG:{"":"Tp;a",
+call$1:function(a){var z=H.Gq(a,this.a)
+return z},
+"+call:1:0":0,
+$isEH:true,
+$is_HB:true,
+$is_Dv:true},fG:{"":"mW;Fb",
+gB:function(a){return this.Fb.X5},
+"+length":0,
+gl0:function(a){return this.Fb.X5===0},
+"+isEmpty":0,
+gA:function(a){var z,y
+z=this.Fb
+y=z.Ig()
+y=new P.EQ(z,y,0,null)
+H.VM(y,[H.W8(this,"fG",0)])
+return y},
+tg:function(a,b){return this.Fb.x4(b)},
+aN:function(a,b){var z,y,x,w
+z=this.Fb
+y=z.Ig()
+for(x=y.length,w=0;w<x;++w){b.call$1(y[w])
+if(y!==z.aw)throw H.b(P.a4(z))}},
+$asmW:null,
+$ascX:null,
+$isqC:true},EQ:{"":"a;Fb,aw,zi,fD",
+gl:function(){return this.fD},
+"+current":0,
+G:function(){var z,y,x
+z=this.aw
+y=this.zi
+x=this.Fb
+if(z!==x.aw)throw H.b(P.a4(x))
+else if(y>=z.length){this.fD=null
+return!1}else{this.fD=z[y]
+this.zi=y+1
+return!0}}},YB:{"":"a;X5,vv,OX,OB,H9,lX,zN",
+gB:function(a){return this.X5},
+"+length":0,
+gl0:function(a){return this.X5===0},
+"+isEmpty":0,
+gor:function(a){return this.X5!==0},
+"+isNotEmpty":0,
+gvc:function(a){var z=new P.Cm(this)
+H.VM(z,[H.W8(this,"YB",0)])
+return z},
+"+keys":0,
+gUQ:function(a){var z=new P.Cm(this)
+H.VM(z,[H.W8(this,"YB",0)])
+return H.K1(z,new P.iX(this),H.W8(z,"mW",0),null)},
+"+values":0,
+x4:function(a){var z,y,x
+if(typeof a==="string"&&a!=="__proto__"){z=this.vv
+if(z==null)return!1
+return z[a]!=null}else if(typeof a==="number"&&(a&0x3ffffff)===a){y=this.OX
+if(y==null)return!1
+return y[a]!=null}else{x=this.OB
+if(x==null)return!1
+return this.aH(x[this.nm(a)],a)>=0}},
+"+containsKey:1:0":0,
+PF:function(a){var z=new P.Cm(this)
+H.VM(z,[H.W8(this,"YB",0)])
+return z.Vr(z,new P.ou(this,a))},
+"+containsValue:1:0":0,
+Ay:function(a,b){J.kH(b,new P.S9(this))},
+t:function(a,b){var z,y,x,w,v,u
+if(typeof b==="string"&&b!=="__proto__"){z=this.vv
+if(z==null)return
+y=z[b]
+return y==null?null:y.gS4()}else if(typeof b==="number"&&(b&0x3ffffff)===b){x=this.OX
+if(x==null)return
+y=x[b]
+return y==null?null:y.gS4()}else{w=this.OB
+if(w==null)return
+v=w[this.nm(b)]
+u=this.aH(v,b)
+if(u<0)return
+return v[u].gS4()}},
+"+[]:1:0":0,
+u:function(a,b,c){var z,y,x,w,v,u,t,s
+if(typeof b==="string"&&b!=="__proto__"){z=this.vv
+if(z==null){y=Object.create(null)
+y["<non-identifier-key>"]=y
+delete y["<non-identifier-key>"]
+this.vv=y
+z=y}x=z[b]
+if(x==null)z[b]=this.y5(b,c)
+else x.sS4(c)}else if(typeof b==="number"&&(b&0x3ffffff)===b){w=this.OX
+if(w==null){y=Object.create(null)
+y["<non-identifier-key>"]=y
+delete y["<non-identifier-key>"]
+this.OX=y
+w=y}x=w[b]
+if(x==null)w[b]=this.y5(b,c)
+else x.sS4(c)}else{v=this.OB
+if(v==null){y=Object.create(null)
+y["<non-identifier-key>"]=y
+delete y["<non-identifier-key>"]
+this.OB=y
+v=y}u=this.nm(b)
+t=v[u]
+if(t==null)v[u]=[this.y5(b,c)]
+else{s=this.aH(t,b)
+if(s>=0)t[s].sS4(c)
+else t.push(this.y5(b,c))}}},
+"+[]=:2:0":0,
+to:function(a,b){var z
+if(this.x4(a))return this.t(this,a)
+z=b.call$0()
+this.u(this,a,z)
+return z},
+Rz:function(a,b){var z,y,x,w
+if(typeof b==="string"&&b!=="__proto__")return this.Nv(this.vv,b)
+else if(typeof b==="number"&&(b&0x3ffffff)===b)return this.Nv(this.OX,b)
+else{z=this.OB
+if(z==null)return
+y=z[this.nm(b)]
+x=this.aH(y,b)
+if(x<0)return
+w=y.splice(x,1)[0]
+this.Vb(w)
+return w.gS4()}},
+V1:function(a){if(this.X5>0){this.lX=null
+this.H9=null
+this.OB=null
+this.OX=null
+this.vv=null
+this.X5=0
+this.zN=this.zN+1&67108863}},
+aN:function(a,b){var z,y
+z=this.H9
+y=this.zN
+for(;z!=null;){b.call$2(z.gkh(),z.gS4())
+if(y!==this.zN)throw H.b(P.a4(this))
+z=z.gDG()}},
+Nv:function(a,b){var z
+if(a==null)return
+z=a[b]
+if(z==null)return
+this.Vb(z)
+delete a[b]
+return z.gS4()},
+y5:function(a,b){var z,y
+z=new P.db(a,b,null,null)
+if(this.H9==null){this.lX=z
+this.H9=z}else{y=this.lX
+z.zQ=y
+y.sDG(z)
+this.lX=z}this.X5=this.X5+1
+this.zN=this.zN+1&67108863
+return z},
+Vb:function(a){var z,y
+z=a.gzQ()
+y=a.gDG()
+if(z==null)this.H9=y
+else z.sDG(y)
+if(y==null)this.lX=z
+else y.szQ(z)
+this.X5=this.X5-1
+this.zN=this.zN+1&67108863},
+nm:function(a){return J.v1(a)&0x3ffffff},
+aH:function(a,b){var z,y
+if(a==null)return-1
+z=a.length
+for(y=0;y<z;++y)if(J.xC(a[y].gkh(),b))return y
+return-1},
+bu:function(a){return P.vW(this)},
+$isFo:true,
+$isL8:true},iX:{"":"Tp;a",
+call$1:function(a){var z=this.a
+return z.t(z,a)},
+"+call:1:0":0,
+$isEH:true,
+$is_HB:true,
+$is_Dv:true},ou:{"":"Tp;a,b",
+call$1:function(a){var z=this.a
+return J.xC(z.t(z,a),this.b)},
+"+call:1:0":0,
+$isEH:true,
+$is_HB:true,
+$is_Dv:true},S9:{"":"Tp;a",
+call$2:function(a,b){var z=this.a
+z.u(z,a,b)},
+"+call:2:0":0,
+$isEH:true,
+$is_bh:true},ey:{"":"YB;X5,vv,OX,OB,H9,lX,zN",
+nm:function(a){return H.CU(a)&0x3ffffff},
+aH:function(a,b){var z,y,x
+if(a==null)return-1
+z=a.length
+for(y=0;y<z;++y){x=a[y].gkh()
+if(x==null?b==null:x===b)return y}return-1},
+$asYB:null,
+$asFo:null,
+$asL8:null},xd:{"":"YB;m6,Q6,bR,X5,vv,OX,OB,H9,lX,zN",
+C2:function(a,b){return this.m6.call$2(a,b)},
+H5:function(a){return this.Q6.call$1(a)},
+Ef:function(a){return this.bR.call$1(a)},
+t:function(a,b){if(this.Ef(b)!==!0)return
+return P.YB.prototype.t.call(this,this,b)},
+"+[]:1:0":0,
+x4:function(a){if(this.Ef(a)!==!0)return!1
+return P.YB.prototype.x4.call(this,a)},
+"+containsKey:1:0":0,
+Rz:function(a,b){if(this.Ef(b)!==!0)return
+return P.YB.prototype.Rz.call(this,this,b)},
+nm:function(a){return this.H5(a)&0x3ffffff},
+aH:function(a,b){var z,y
+if(a==null)return-1
+z=a.length
+for(y=0;y<z;++y)if(this.C2(a[y].gkh(),b)===!0)return y
+return-1},
+$asYB:null,
+$asFo:null,
+$asL8:null,
+static:{Ex:function(a,b,c,d,e){var z=new P.v6(d)
+z=new P.xd(a,b,z,0,null,null,null,null,null,0)
+H.VM(z,[d,e])
+return z}}},v6:{"":"Tp;a",
+call$1:function(a){var z=H.Gq(a,this.a)
+return z},
+"+call:1:0":0,
+$isEH:true,
+$is_HB:true,
+$is_Dv:true},db:{"":"a;kh<,S4@,DG@,zQ@"},Cm:{"":"mW;Fb",
+gB:function(a){return this.Fb.X5},
+"+length":0,
+gl0:function(a){return this.Fb.X5===0},
+"+isEmpty":0,
+gA:function(a){var z,y
+z=this.Fb
+y=z.zN
+y=new P.N6(z,y,null,null)
+H.VM(y,[H.W8(this,"Cm",0)])
+y.zq=y.Fb.H9
+return y},
+tg:function(a,b){return this.Fb.x4(b)},
+aN:function(a,b){var z,y,x
+z=this.Fb
+y=z.H9
+x=z.zN
+for(;y!=null;){b.call$1(y.gkh())
+if(x!==z.zN)throw H.b(P.a4(z))
+y=y.gDG()}},
+$asmW:null,
+$ascX:null,
+$isqC:true},N6:{"":"a;Fb,zN,zq,fD",
+gl:function(){return this.fD},
+"+current":0,
+G:function(){var z=this.Fb
+if(this.zN!==z.zN)throw H.b(P.a4(z))
+else{z=this.zq
+if(z==null){this.fD=null
+return!1}else{this.fD=z.gkh()
+this.zq=this.zq.gDG()
+return!0}}}},jg:{"":"u3;",
+gA:function(a){var z=this.Zl()
+z=new P.oz(this,z,0,null)
+H.VM(z,[H.W8(this,"jg",0)])
+return z},
+gB:function(a){return this.X5},
+"+length":0,
+gl0:function(a){return this.X5===0},
+"+isEmpty":0,
+gor:function(a){return this.X5!==0},
+"+isNotEmpty":0,
+tg:function(a,b){var z,y,x
+if(typeof b==="string"&&b!=="__proto__"){z=this.vv
+return z==null?!1:z[b]!=null}else if(typeof b==="number"&&(b&0x3ffffff)===b){y=this.OX
+return y==null?!1:y[b]!=null}else{x=this.OB
+if(x==null)return!1
+return this.aH(x[this.nm(b)],b)>=0}},
+Zt:function(a){var z,y,x,w
+if(!(typeof a==="string"&&a!=="__proto__"))z=typeof a==="number"&&(a&0x3ffffff)===a
+else z=!0
+if(z)return this.tg(this,a)?a:null
+y=this.OB
+if(y==null)return
+x=y[this.nm(a)]
+w=this.aH(x,a)
+if(w<0)return
+return J.UQ(x,w)},
+h:function(a,b){var z,y,x,w,v,u
+if(typeof b==="string"&&b!=="__proto__"){z=this.vv
+if(z==null){y=Object.create(null)
+y["<non-identifier-key>"]=y
+delete y["<non-identifier-key>"]
+this.vv=y
+z=y}return this.cA(z,b)}else if(typeof b==="number"&&(b&0x3ffffff)===b){x=this.OX
+if(x==null){y=Object.create(null)
+y["<non-identifier-key>"]=y
+delete y["<non-identifier-key>"]
+this.OX=y
+x=y}return this.cA(x,b)}else{w=this.OB
+if(w==null){y=Object.create(null)
+y["<non-identifier-key>"]=y
+delete y["<non-identifier-key>"]
+this.OB=y
+w=y}v=this.nm(b)
+u=w[v]
+if(u==null)w[v]=[b]
+else{if(this.aH(u,b)>=0)return!1
+u.push(b)}this.X5=this.X5+1
+this.DM=null
+return!0}},
+Rz:function(a,b){var z,y,x
+if(typeof b==="string"&&b!=="__proto__")return this.Nv(this.vv,b)
+else if(typeof b==="number"&&(b&0x3ffffff)===b)return this.Nv(this.OX,b)
+else{z=this.OB
+if(z==null)return!1
+y=z[this.nm(b)]
+x=this.aH(y,b)
+if(x<0)return!1
+this.X5=this.X5-1
+this.DM=null
+y.splice(x,1)
+return!0}},
+Zl:function(){var z,y,x,w,v,u,t,s,r,q,p,o
+z=this.DM
+if(z!=null)return z
+y=P.A(this.X5,null)
+x=this.vv
+if(x!=null){w=Object.getOwnPropertyNames(x)
+v=w.length
+for(u=0,t=0;t<v;++t){y[u]=w[t];++u}}else u=0
+s=this.OX
+if(s!=null){w=Object.getOwnPropertyNames(s)
+v=w.length
+for(t=0;t<v;++t){y[u]=+w[t];++u}}r=this.OB
+if(r!=null){w=Object.getOwnPropertyNames(r)
+v=w.length
+for(t=0;t<v;++t){q=r[w[t]]
+p=q.length
+for(o=0;o<p;++o){y[u]=q[o];++u}}}this.DM=y
+return y},
+cA:function(a,b){if(a[b]!=null)return!1
+a[b]=0
+this.X5=this.X5+1
+this.DM=null
+return!0},
+Nv:function(a,b){if(a!=null&&a[b]!=null){delete a[b]
+this.X5=this.X5-1
+this.DM=null
+return!0}else return!1},
+nm:function(a){return J.v1(a)&0x3ffffff},
+aH:function(a,b){var z,y
+if(a==null)return-1
+z=a.length
+for(y=0;y<z;++y)if(J.xC(a[y],b))return y
+return-1},
+$asu3:null,
+$ascX:null,
+$isqC:true,
+$iscX:true},YO:{"":"jg;X5,vv,OX,OB,DM",
+nm:function(a){return H.CU(a)&0x3ffffff},
+aH:function(a,b){var z,y,x
+if(a==null)return-1
+z=a.length
+for(y=0;y<z;++y){x=a[y]
+if(x==null?b==null:x===b)return y}return-1},
+$asjg:null,
+$ascX:null},oz:{"":"a;O2,DM,zi,fD",
+gl:function(){return this.fD},
+"+current":0,
+G:function(){var z,y,x
+z=this.DM
+y=this.zi
+x=this.O2
+if(z!==x.DM)throw H.b(P.a4(x))
+else if(y>=z.length){this.fD=null
+return!1}else{this.fD=z[y]
+this.zi=y+1
+return!0}}},b6:{"":"u3;X5,vv,OX,OB,H9,lX,zN",
+gA:function(a){var z=new P.zQ(this,this.zN,null,null)
+H.VM(z,[null])
+z.zq=z.O2.H9
+return z},
+gB:function(a){return this.X5},
+"+length":0,
+gl0:function(a){return this.X5===0},
+"+isEmpty":0,
+gor:function(a){return this.X5!==0},
+"+isNotEmpty":0,
+tg:function(a,b){var z,y,x
+if(typeof b==="string"&&b!=="__proto__"){z=this.vv
+if(z==null)return!1
+return z[b]!=null}else if(typeof b==="number"&&(b&0x3ffffff)===b){y=this.OX
+if(y==null)return!1
+return y[b]!=null}else{x=this.OB
+if(x==null)return!1
+return this.aH(x[this.nm(b)],b)>=0}},
+Zt:function(a){var z,y,x,w
+if(!(typeof a==="string"&&a!=="__proto__"))z=typeof a==="number"&&(a&0x3ffffff)===a
+else z=!0
+if(z)return this.tg(this,a)?a:null
+else{y=this.OB
+if(y==null)return
+x=y[this.nm(a)]
+w=this.aH(x,a)
+if(w<0)return
+return J.UQ(x,w).gGc()}},
+aN:function(a,b){var z,y
+z=this.H9
+y=this.zN
+for(;z!=null;){b.call$1(z.gGc())
+if(y!==this.zN)throw H.b(P.a4(this))
+z=z.gDG()}},
+grZ:function(a){var z=this.lX
+if(z==null)throw H.b(new P.lj("No elements"))
+return z.gGc()},
+h:function(a,b){var z,y,x,w,v,u
+if(typeof b==="string"&&b!=="__proto__"){z=this.vv
+if(z==null){y=Object.create(null)
+y["<non-identifier-key>"]=y
+delete y["<non-identifier-key>"]
+this.vv=y
+z=y}return this.cA(z,b)}else if(typeof b==="number"&&(b&0x3ffffff)===b){x=this.OX
+if(x==null){y=Object.create(null)
+y["<non-identifier-key>"]=y
+delete y["<non-identifier-key>"]
+this.OX=y
+x=y}return this.cA(x,b)}else{w=this.OB
+if(w==null){y=Object.create(null)
+y["<non-identifier-key>"]=y
+delete y["<non-identifier-key>"]
+this.OB=y
+w=y}v=this.nm(b)
+u=w[v]
+if(u==null)w[v]=[this.xf(b)]
+else{if(this.aH(u,b)>=0)return!1
+u.push(this.xf(b))}return!0}},
+Ay:function(a,b){var z
+for(z=new P.zQ(b,b.zN,null,null),H.VM(z,[null]),z.zq=z.O2.H9;z.G();)this.h(this,z.fD)},
+Rz:function(a,b){var z,y,x
+if(typeof b==="string"&&b!=="__proto__")return this.Nv(this.vv,b)
+else if(typeof b==="number"&&(b&0x3ffffff)===b)return this.Nv(this.OX,b)
+else{z=this.OB
+if(z==null)return!1
+y=z[this.nm(b)]
+x=this.aH(y,b)
+if(x<0)return!1
+this.Vb(y.splice(x,1)[0])
+return!0}},
+cA:function(a,b){if(a[b]!=null)return!1
+a[b]=this.xf(b)
+return!0},
+Nv:function(a,b){var z
+if(a==null)return!1
+z=a[b]
+if(z==null)return!1
+this.Vb(z)
+delete a[b]
+return!0},
+xf:function(a){var z,y
+z=new P.ef(a,null,null)
+if(this.H9==null){this.lX=z
+this.H9=z}else{y=this.lX
+z.zQ=y
+y.sDG(z)
+this.lX=z}this.X5=this.X5+1
+this.zN=this.zN+1&67108863
+return z},
+Vb:function(a){var z,y
+z=a.gzQ()
+y=a.gDG()
+if(z==null)this.H9=y
+else z.sDG(y)
+if(y==null)this.lX=z
+else y.szQ(z)
+this.X5=this.X5-1
+this.zN=this.zN+1&67108863},
+nm:function(a){return J.v1(a)&0x3ffffff},
+aH:function(a,b){var z,y
+if(a==null)return-1
+z=a.length
+for(y=0;y<z;++y)if(J.xC(a[y].gGc(),b))return y
+return-1},
+$asu3:null,
+$ascX:null,
+$isqC:true,
+$iscX:true},ef:{"":"a;Gc<,DG@,zQ@"},zQ:{"":"a;O2,zN,zq,fD",
+gl:function(){return this.fD},
+"+current":0,
+G:function(){var z=this.O2
+if(this.zN!==z.zN)throw H.b(P.a4(z))
+else{z=this.zq
+if(z==null){this.fD=null
+return!1}else{this.fD=z.gGc()
+this.zq=this.zq.gDG()
+return!0}}}},Yp:{"":"XC;G4",
+gB:function(a){return J.q8(this.G4)},
+"+length":0,
+t:function(a,b){return J.i4(this.G4,b)},
+"+[]:1:0":0,
+$asXC:null,
+$asWO:null,
+$ascX:null},u3:{"":"mW;",
+tt:function(a,b){var z,y,x,w,v
+if(b){z=P.A(null,H.W8(this,"u3",0))
+H.VM(z,[H.W8(this,"u3",0)])
+C.Nm.sB(z,this.gB(this))}else{z=P.A(this.gB(this),H.W8(this,"u3",0))
+H.VM(z,[H.W8(this,"u3",0)])}for(y=this.gA(this),x=0;y.G();x=v){w=y.gl()
+v=x+1
+if(x>=z.length)throw H.e(z,x)
+z[x]=w}return z},
+br:function(a){return this.tt(a,!0)},
+bu:function(a){return H.mx(this,"{","}")},
+$asmW:null,
+$ascX:null,
+$isqC:true,
+$iscX:true},mW:{"":"a;",
+ez:function(a,b){return H.K1(this,b,H.W8(this,"mW",0),null)},
+ev:function(a,b){var z=new H.U5(this,b)
+H.VM(z,[H.W8(this,"mW",0)])
+return z},
+tg:function(a,b){var z
+for(z=this.gA(this);z.G();)if(J.xC(z.gl(),b))return!0
+return!1},
+aN:function(a,b){var z
+for(z=this.gA(this);z.G();)b.call$1(z.gl())},
+zV:function(a,b){var z,y,x
+z=this.gA(this)
+if(!z.G())return""
+y=P.p9("")
+if(b==="")do{x=H.d(z.gl())
+y.vM=y.vM+x}while(z.G())
+else{y.KF(H.d(z.gl()))
+for(;z.G();){y.vM=y.vM+b
+x=H.d(z.gl())
+y.vM=y.vM+x}}return y.vM},
+Vr:function(a,b){var z
+for(z=this.gA(this);z.G();)if(b.call$1(z.gl())===!0)return!0
+return!1},
+tt:function(a,b){return P.F(this,b,H.W8(this,"mW",0))},
+br:function(a){return this.tt(a,!0)},
+gB:function(a){var z,y
+z=this.gA(this)
+for(y=0;z.G();)++y
+return y},
+"+length":0,
+gl0:function(a){return!this.gA(this).G()},
+"+isEmpty":0,
+gor:function(a){return this.gl0(this)!==!0},
+"+isNotEmpty":0,
+eR:function(a,b){return H.ke(this,b,H.W8(this,"mW",0))},
+gFV:function(a){var z=this.gA(this)
+if(!z.G())throw H.b(new P.lj("No elements"))
+return z.gl()},
+grZ:function(a){var z,y
+z=this.gA(this)
+if(!z.G())throw H.b(new P.lj("No elements"))
+do y=z.gl()
+while(z.G())
+return y},
+l8:function(a,b,c){var z,y
+for(z=this.gA(this);z.G();){y=z.gl()
+if(b.call$1(y)===!0)return y}throw H.b(new P.lj("No matching element"))},
+XG:function(a,b){return this.l8(a,b,null)},
+Zv:function(a,b){var z,y,x,w
+if(typeof b!=="number"||Math.floor(b)!==b||b<0)throw H.b(P.N(b))
+for(z=this.gA(this),y=b;z.G();){x=z.gl()
+w=J.x(y)
+if(w.n(y,0))return x
+y=w.W(y,1)}throw H.b(P.N(b))},
+bu:function(a){return P.FO(this)},
+$iscX:true,
+$ascX:null},ar:{"":"a+lD;",$isList:true,$asWO:null,$isqC:true,$iscX:true,$ascX:null},lD:{"":"a;",
+gA:function(a){var z=new H.a7(a,this.gB(a),0,null)
+H.VM(z,[H.W8(a,"lD",0)])
+return z},
+Zv:function(a,b){return this.t(a,b)},
+aN:function(a,b){var z,y
+z=this.gB(a)
+if(typeof z!=="number")throw H.s(z)
+y=0
+for(;y<z;++y){b.call$1(this.t(a,y))
+if(z!==this.gB(a))throw H.b(P.a4(a))}},
+gl0:function(a){return J.xC(this.gB(a),0)},
+"+isEmpty":0,
+gor:function(a){return!this.gl0(a)},
+"+isNotEmpty":0,
+grZ:function(a){if(J.xC(this.gB(a),0))throw H.b(new P.lj("No elements"))
+return this.t(a,J.xH(this.gB(a),1))},
+tg:function(a,b){var z,y
+z=this.gB(a)
+if(typeof z!=="number")throw H.s(z)
+y=0
+for(;y<z;++y){if(J.xC(this.t(a,y),b))return!0
+if(z!==this.gB(a))throw H.b(P.a4(a))}return!1},
+Vr:function(a,b){var z,y
+z=this.gB(a)
+if(typeof z!=="number")throw H.s(z)
+y=0
+for(;y<z;++y){if(b.call$1(this.t(a,y))===!0)return!0
+if(z!==this.gB(a))throw H.b(P.a4(a))}return!1},
+zV:function(a,b){var z,y,x,w,v,u
+z=this.gB(a)
+if(b.length!==0){y=J.x(z)
+if(y.n(z,0))return""
+x=H.d(this.t(a,0))
+if(!y.n(z,this.gB(a)))throw H.b(P.a4(a))
+w=P.p9(x)
+if(typeof z!=="number")throw H.s(z)
+v=1
+for(;v<z;++v){w.vM=w.vM+b
+u=this.t(a,v)
+u=typeof u==="string"?u:H.d(u)
+w.vM=w.vM+u
+if(z!==this.gB(a))throw H.b(P.a4(a))}return w.vM}else{w=P.p9("")
+if(typeof z!=="number")throw H.s(z)
+v=0
+for(;v<z;++v){u=this.t(a,v)
+u=typeof u==="string"?u:H.d(u)
+w.vM=w.vM+u
+if(z!==this.gB(a))throw H.b(P.a4(a))}return w.vM}},
+ev:function(a,b){var z=new H.U5(a,b)
+H.VM(z,[H.W8(a,"lD",0)])
+return z},
+ez:function(a,b){var z=new H.A8(a,b)
+H.VM(z,[null,null])
+return z},
+eR:function(a,b){return H.j5(a,b,null,null)},
+tt:function(a,b){var z,y,x
+if(b){z=P.A(null,H.W8(a,"lD",0))
+H.VM(z,[H.W8(a,"lD",0)])
+C.Nm.sB(z,this.gB(a))}else{z=P.A(this.gB(a),H.W8(a,"lD",0))
+H.VM(z,[H.W8(a,"lD",0)])}y=0
+while(!0){x=this.gB(a)
+if(typeof x!=="number")throw H.s(x)
+if(!(y<x))break
+x=this.t(a,y)
+if(y>=z.length)throw H.e(z,y)
+z[y]=x;++y}return z},
+br:function(a){return this.tt(a,!0)},
+h:function(a,b){var z=this.gB(a)
+this.sB(a,J.WB(z,1))
+this.u(a,z,b)},
+Rz:function(a,b){var z,y
+z=0
+while(!0){y=this.gB(a)
+if(typeof y!=="number")throw H.s(y)
+if(!(z<y))break
+if(J.xC(this.t(a,z),b)){this.YW(a,z,J.xH(this.gB(a),1),a,z+1)
+this.sB(a,J.xH(this.gB(a),1))
+return!0}++z}return!1},
+pZ:function(a,b,c){var z=J.Wx(b)
+if(z.C(b,0)||z.D(b,this.gB(a)))throw H.b(P.TE(b,0,this.gB(a)))
+z=J.Wx(c)
+if(z.C(c,b)||z.D(c,this.gB(a)))throw H.b(P.TE(c,b,this.gB(a)))},
+D6:function(a,b,c){var z,y,x,w
+c=this.gB(a)
+this.pZ(a,b,c)
+z=J.xH(c,b)
+y=P.A(null,H.W8(a,"lD",0))
+H.VM(y,[H.W8(a,"lD",0)])
+C.Nm.sB(y,z)
+if(typeof z!=="number")throw H.s(z)
+x=0
+for(;x<z;++x){w=this.t(a,b+x)
+if(x>=y.length)throw H.e(y,x)
+y[x]=w}return y},
+Jk:function(a,b){return this.D6(a,b,null)},
+Mu:function(a,b,c){this.pZ(a,b,c)
+return H.j5(a,b,c,null)},
+YW:function(a,b,c,d,e){var z,y,x,w
+if(b>=0){z=this.gB(a)
+if(typeof z!=="number")throw H.s(z)
+z=b>z}else z=!0
+if(z)H.vh(P.TE(b,0,this.gB(a)))
+z=J.Wx(c)
+if(z.C(c,b)||z.D(c,this.gB(a)))H.vh(P.TE(c,b,this.gB(a)))
+y=z.W(c,b)
+if(J.xC(y,0))return
+if(e<0)throw H.b(new P.AT(e))
+if(typeof y!=="number")throw H.s(y)
+z=J.U6(d)
+x=z.gB(d)
+if(typeof x!=="number")throw H.s(x)
+if(e+y>x)throw H.b(new P.lj("Not enough elements"))
+if(e<b)for(w=y-1;w>=0;--w)this.u(a,b+w,z.t(d,e+w))
+else for(w=0;w<y;++w)this.u(a,b+w,z.t(d,e+w))},
+XU:function(a,b,c){var z,y
+z=this.gB(a)
+if(typeof z!=="number")throw H.s(z)
+if(c>=z)return-1
+if(c<0)c=0
+y=c
+while(!0){z=this.gB(a)
+if(typeof z!=="number")throw H.s(z)
+if(!(y<z))break
+if(J.xC(this.t(a,y),b))return y;++y}return-1},
+u8:function(a,b){return this.XU(a,b,0)},
+Pk:function(a,b,c){var z,y
+c=J.xH(this.gB(a),1)
+for(z=c;y=J.Wx(z),y.F(z,0);z=y.W(z,1))if(J.xC(this.t(a,z),b))return z
+return-1},
+cn:function(a,b){return this.Pk(a,b,null)},
+bu:function(a){var z,y
+y=$.xb()
+if(y.tg(y,a))return"[...]"
+z=P.p9("")
+try{y=$.xb()
+y.h(y,a)
+z.KF("[")
+z.We(a,", ")
+z.KF("]")}finally{y=$.xb()
+y.Rz(y,a)}return z.gvM()},
+$isList:true,
+$asWO:null,
+$isqC:true,
+$iscX:true,
+$ascX:null},W0:{"":"Tp;a,b",
+call$2:function(a,b){var z=this.a
+if(!z.a)this.b.KF(", ")
+z.a=!1
+z=this.b
+z.KF(a)
+z.KF(": ")
+z.KF(b)},
+"+call:2:0":0,
+$isEH:true,
+$is_bh:true},Sw:{"":"mW;v5,av,HV,qT",
+gA:function(a){return P.MW(this,H.W8(this,"Sw",0))},
+aN:function(a,b){var z,y,x
+z=this.qT
+for(y=this.av;y!==this.HV;y=(y+1&this.v5.length-1)>>>0){x=this.v5
+if(y<0||y>=x.length)throw H.e(x,y)
+b.call$1(x[y])
+if(z!==this.qT)H.vh(P.a4(this))}},
+gl0:function(a){return this.av===this.HV},
+"+isEmpty":0,
+gB:function(a){return(this.HV-this.av&this.v5.length-1)>>>0},
+"+length":0,
+grZ:function(a){var z,y,x
+z=this.av
+y=this.HV
+if(z===y)throw H.b(new P.lj("No elements"))
+z=this.v5
+x=z.length
+y=(y-1&x-1)>>>0
+if(y<0||y>=x)throw H.e(z,y)
+return z[y]},
+Zv:function(a,b){var z,y,x
+z=J.Wx(b)
+if(z.C(b,0)||z.D(b,this.gB(this)))throw H.b(P.TE(b,0,this.gB(this)))
+z=this.v5
+y=this.av
+if(typeof b!=="number")throw H.s(b)
+x=z.length
+y=(y+b&x-1)>>>0
+if(y<0||y>=x)throw H.e(z,y)
+return z[y]},
+tt:function(a,b){var z
+if(b){z=P.A(null,H.W8(this,"Sw",0))
+H.VM(z,[H.W8(this,"Sw",0)])
+C.Nm.sB(z,this.gB(this))}else{z=P.A(this.gB(this),H.W8(this,"Sw",0))
+H.VM(z,[H.W8(this,"Sw",0)])}this.e4(z)
+return z},
+br:function(a){return this.tt(a,!0)},
+h:function(a,b){this.NZ(b)},
+Rz:function(a,b){var z,y
+for(z=this.av;z!==this.HV;z=(z+1&this.v5.length-1)>>>0){y=this.v5
+if(z<0||z>=y.length)throw H.e(y,z)
+if(J.xC(y[z],b)){this.bB(z)
+this.qT=this.qT+1
+return!0}}return!1},
+bu:function(a){return H.mx(this,"{","}")},
+Ux:function(){var z,y,x,w
+if(this.av===this.HV)throw H.b(P.w("No elements"))
+this.qT=this.qT+1
+z=this.v5
+y=this.av
+x=z.length
+if(y<0||y>=x)throw H.e(z,y)
+w=z[y]
+this.av=(y+1&x-1)>>>0
+return w},
+NZ:function(a){var z,y,x
+z=this.v5
+y=this.HV
+x=z.length
+if(y<0||y>=x)throw H.e(z,y)
+z[y]=a
+this.HV=(y+1&x-1)>>>0
+if(this.av===this.HV)this.VW()
+this.qT=this.qT+1},
+bB:function(a){var z,y,x,w,v,u,t,s
+z=this.v5
+y=z.length
+x=y-1
+w=this.av
+v=this.HV
+if((a-w&x)>>>0<(v-a&x)>>>0){for(u=a;u!==w;u=t){t=(u-1&x)>>>0
+if(t<0||t>=y)throw H.e(z,t)
+v=z[t]
+if(u<0||u>=y)throw H.e(z,u)
+z[u]=v}if(w<0||w>=y)throw H.e(z,w)
+z[w]=null
+this.av=(w+1&x)>>>0
+return(a+1&x)>>>0}else{this.HV=(v-1&x)>>>0
+for(z=this.HV,y=this.v5,w=y.length,u=a;u!==z;u=s){s=(u+1&x)>>>0
+if(s<0||s>=w)throw H.e(y,s)
+v=y[s]
+if(u<0||u>=w)throw H.e(y,u)
+y[u]=v}if(z<0||z>=w)throw H.e(y,z)
+y[z]=null
+return a}},
+VW:function(){var z,y,x,w
+z=P.A(this.v5.length*2,H.W8(this,"Sw",0))
+H.VM(z,[H.W8(this,"Sw",0)])
+y=this.v5
+x=this.av
+w=y.length-x
+H.qG(z,0,w,y,x)
+y=this.av
+x=this.v5
+H.qG(z,w,w+y,x,0)
+this.av=0
+this.HV=this.v5.length
+this.v5=z},
+e4:function(a){var z,y,x,w,v
+z=this.av
+y=this.HV
+x=this.v5
+if(z<=y){w=y-z
+H.qG(a,0,w,x,z)
+return w}else{v=x.length-z
+H.qG(a,0,v,x,z)
+z=this.HV
+y=this.v5
+H.qG(a,v,v+z,y,0)
+return this.HV+v}},
+Eo:function(a,b){var z=P.A(8,b)
+H.VM(z,[b])
+this.v5=z},
+$asmW:null,
+$ascX:null,
+$isqC:true,
+$iscX:true,
+static:{"":"TN",NZ:function(a,b){var z=new P.Sw(null,0,0,0)
+H.VM(z,[b])
+z.Eo(a,b)
+return z}}},o0:{"":"a;Lz,dP,qT,Dc,fD",
+gl:function(){return this.fD},
+"+current":0,
+G:function(){var z,y,x
+z=this.Lz
+if(this.qT!==z.qT)H.vh(P.a4(z))
+y=this.Dc
+if(y===this.dP){this.fD=null
+return!1}x=z.v5
+if(y<0||y>=x.length)throw H.e(x,y)
+this.fD=x[y]
+this.Dc=(this.Dc+1&z.v5.length-1)>>>0
+return!0},
+static:{MW:function(a,b){var z=new P.o0(a,a.HV,a.qT,a.av,null)
+H.VM(z,[b])
+return z}}},a1:{"":"a;G3>,Bb>,T8>",$isa1:true},jp:{"":"a1;P*,G3,Bb,T8",
+r6:function(a,b){return this.P.call$1(b)},
+$asa1:function(a,b){return[a]}},Xt:{"":"a;",
+vh:function(a){var z,y,x,w,v,u,t,s
+z=this.aY
+if(z==null)return-1
+y=this.iW
+for(x=y,w=x,v=null;!0;){v=this.nw(z.G3,a)
+u=J.Wx(v)
+if(u.D(v,0)){u=z.Bb
+if(u==null)break
+v=this.nw(u.G3,a)
+if(J.xZ(v,0)){t=z.Bb
+z.Bb=t.T8
+t.T8=z
+if(t.Bb==null){z=t
+break}z=t}x.Bb=z
+s=z.Bb
+x=z
+z=s}else{if(u.C(v,0)){u=z.T8
+if(u==null)break
+v=this.nw(u.G3,a)
+if(J.u6(v,0)){t=z.T8
+z.T8=t.Bb
+t.Bb=z
+if(t.T8==null){z=t
+break}z=t}w.T8=z
+s=z.T8}else break
+w=z
+z=s}}w.T8=z.Bb
+x.Bb=z.T8
+z.Bb=y.T8
+z.T8=y.Bb
+this.aY=z
+y.T8=null
+y.Bb=null
+this.bb=this.bb+1
+return v},
+bB:function(a){var z,y,x
+if(this.aY==null)return
+if(!J.xC(this.vh(a),0))return
+z=this.aY
+this.J0=this.J0-1
+y=this.aY
+x=y.Bb
+y=y.T8
+if(x==null)this.aY=y
+else{this.aY=x
+this.vh(a)
+this.aY.T8=y}this.qT=this.qT+1
+return z},
+K8:function(a,b){var z,y
+this.J0=this.J0+1
+this.qT=this.qT+1
+if(this.aY==null){this.aY=a
+return}z=J.u6(b,0)
+y=this.aY
+if(z){a.Bb=y
+a.T8=this.aY.T8
+this.aY.T8=null}else{a.T8=y
+a.Bb=this.aY.Bb
+this.aY.Bb=null}this.aY=a}},Ba:{"":"Xt;Cw,bR,aY,iW,J0,qT,bb",
+wS:function(a,b){return this.Cw.call$2(a,b)},
+Ef:function(a){return this.bR.call$1(a)},
+nw:function(a,b){return this.wS(a,b)},
+t:function(a,b){if(b==null)throw H.b(new P.AT(b))
+if(this.Ef(b)!==!0)return
+if(this.aY!=null)if(J.xC(this.vh(b),0))return this.aY.P
+return},
+"+[]:1:0":0,
+Rz:function(a,b){var z
+if(this.Ef(b)!==!0)return
+z=this.bB(b)
+if(z!=null)return z.P
+return},
+u:function(a,b,c){var z,y
+if(b==null)throw H.b(new P.AT(b))
+z=this.vh(b)
+if(J.xC(z,0)){this.aY.P=c
+return}y=new P.jp(c,b,null,null)
+y.$builtinTypeInfo=[null,null]
+this.K8(y,z)},
+"+[]=:2:0":0,
+gl0:function(a){return this.aY==null},
+"+isEmpty":0,
+gor:function(a){return this.aY!=null},
+"+isNotEmpty":0,
+aN:function(a,b){var z,y,x,w
+z=H.W8(this,"Ba",0)
+y=[]
+H.VM(y,[P.a1])
+x=new P.HW(this,y,this.qT,this.bb,null)
+H.VM(x,[z])
+x.Qf(this,[P.a1,z])
+for(;x.G();){w=x.gl()
+z=J.RE(w)
+b.call$2(z.gG3(w),z.gP(w))}},
+gB:function(a){return this.J0},
+"+length":0,
+x4:function(a){return this.Ef(a)===!0&&J.xC(this.vh(a),0)},
+"+containsKey:1:0":0,
+PF:function(a){return new P.LD(this,a,this.bb).call$1(this.aY)},
+"+containsValue:1:0":0,
+gvc:function(a){var z=new P.OG(this)
+H.VM(z,[H.W8(this,"Ba",0)])
+return z},
+"+keys":0,
+gUQ:function(a){var z=new P.ro(this)
+H.VM(z,[H.W8(this,"Ba",0),H.W8(this,"Ba",1)])
+return z},
+"+values":0,
+bu:function(a){return P.vW(this)},
+$isBa:true,
+$asXt:function(a,b){return[a]},
+$asL8:null,
+$isL8:true,
+static:{GV:function(a,b,c,d){var z,y,x
+z=P.n4
+y=new P.An(c)
+x=new P.a1(null,null,null)
+H.VM(x,[c])
+x=new P.Ba(z,y,null,x,0,0,0)
+H.VM(x,[c,d])
+return x}}},An:{"":"Tp;a",
+call$1:function(a){var z=H.Gq(a,this.a)
+return z},
+"+call:1:0":0,
+$isEH:true,
+$is_HB:true,
+$is_Dv:true},LD:{"":"Tp;a,b,c",
+call$1:function(a){var z,y,x,w
+for(z=this.c,y=this.a,x=this.b;a!=null;){w=J.RE(a)
+if(J.xC(w.gP(a),x))return!0
+if(z!==y.bb)throw H.b(P.a4(y))
+if(w.gT8(a)!=null&&this.call$1(w.gT8(a))===!0)return!0
+a=w.gBb(a)}return!1},
+"+call:1:0":0,
+$isEH:true,
+$is_HB:true,
+$is_Dv:true},YI:{"":"a;",
+gl:function(){var z=this.ya
+if(z==null)return
+return this.Wb(z)},
+"+current":0,
+WV:function(a){var z
+for(z=this.Ln;a!=null;){z.push(a)
+a=a.Bb}},
+zU:function(a){var z
+C.Nm.sB(this.Ln,0)
+z=this.Dn
+if(a==null)this.WV(z.aY)
+else{z.vh(a.G3)
+this.WV(z.aY.T8)}},
+G:function(){var z,y
+z=this.Dn
+if(this.qT!==z.qT)throw H.b(P.a4(z))
+y=this.Ln
+if(y.length===0){this.ya=null
+return!1}if(z.bb!==this.bb)this.zU(this.ya)
+if(0>=y.length)throw H.e(y,0)
+this.ya=y.pop()
+this.WV(this.ya.T8)
+return!0},
+Qf:function(a,b){this.WV(a.aY)}},OG:{"":"mW;Dn",
+gB:function(a){return this.Dn.J0},
+"+length":0,
+gl0:function(a){return this.Dn.J0===0},
+"+isEmpty":0,
+gA:function(a){var z,y,x
+z=this.Dn
+y=H.W8(this,"OG",0)
+x=[]
+H.VM(x,[P.a1])
+x=new P.DN(z,x,z.qT,z.bb,null)
+H.VM(x,[y])
+x.Qf(z,y)
+return x},
+$asmW:null,
+$ascX:null,
+$isqC:true},ro:{"":"mW;Fb",
+gB:function(a){return this.Fb.J0},
+"+length":0,
+gl0:function(a){return this.Fb.J0===0},
+"+isEmpty":0,
+gA:function(a){var z,y,x,w
+z=this.Fb
+y=H.W8(this,"ro",0)
+x=H.W8(this,"ro",1)
+w=[]
+H.VM(w,[P.a1])
+w=new P.ZM(z,w,z.qT,z.bb,null)
+H.VM(w,[y,x])
+w.Qf(z,x)
+return w},
+$asmW:function(a,b){return[b]},
+$ascX:function(a,b){return[b]},
+$isqC:true},DN:{"":"YI;Dn,Ln,qT,bb,ya",
+Wb:function(a){return a.G3},
+$asYI:null},ZM:{"":"YI;Dn,Ln,qT,bb,ya",
+Wb:function(a){return a.P},
+$asYI:function(a,b){return[b]}},HW:{"":"YI;Dn,Ln,qT,bb,ya",
+Wb:function(a){return a},
+$asYI:function(a){return[[P.a1,a]]}}}],["dart.convert","dart:convert",,P,{VQ:function(a,b){var z=new P.JC()
+return z.call$2(null,new P.f1(z).call$1(a))},BS:function(a,b){var z,y,x,w
+x=a
+if(typeof x!=="string")throw H.b(new P.AT(a))
+z=null
+try{z=JSON.parse(a)}catch(w){x=H.Ru(w)
+y=x
+throw H.b(P.cD(String(y)))}return P.VQ(z,b)},tp:function(a){return a.Lt()},JC:{"":"Tp;",
+call$2:function(a,b){return b},
+"+call:2:0":0,
+$isEH:true,
+$is_bh:true},f1:{"":"Tp;a",
+call$1:function(a){var z,y,x,w,v,u,t
+if(a==null||typeof a!="object")return a
+if(Object.getPrototypeOf(a)===Array.prototype){z=a
+for(y=this.a,x=0;x<z.length;++x)z[x]=y.call$2(x,this.call$1(z[x]))
+return z}w=Object.keys(a)
+v=H.B7([],P.L5(null,null,null,null,null))
+for(y=this.a,x=0;x<w.length;++x){u=w[x]
+v.u(v,u,y.call$2(u,this.call$1(a[u])))}t=a.__proto__
+if(typeof t!=="undefined"&&t!==Object.prototype)v.u(v,"__proto__",y.call$2("__proto__",this.call$1(t)))
+return v},
+"+call:1:0":0,
+$isEH:true,
+$is_HB:true,
+$is_Dv:true},Uk:{"":"a;"},wI:{"":"a;"},ob:{"":"Uk;",
+$asUk:function(){return[J.O,[J.Q,J.im]]}},Ud:{"":"Ge;Ct,FN",
+bu:function(a){if(this.FN!=null)return"Converting object to an encodable object failed."
+else return"Converting object did not return an encodable object."},
+static:{ox:function(a,b){return new P.Ud(a,b)}}},K8:{"":"Ud;Ct,FN",
+bu:function(a){return"Cyclic error in JSON stringify"},
+static:{hT:function(a){return new P.K8(a,null)}}},by:{"":"Uk;",
+pW:function(a,b){return P.BS(a,C.A3.N5)},
+kV:function(a){return this.pW(a,null)},
+PN:function(a,b){return P.Vg(a,C.Ap.ke)},
+KP:function(a){return this.PN(a,null)},
+$asUk:function(){return[P.a,J.O]}},dI:{"":"wI;ke",
+$aswI:function(){return[P.a,J.O]}},QM:{"":"wI;N5",
+$aswI:function(){return[J.O,P.a]}},Sh:{"":"a;WE,u4,JN",
+Tt:function(a){return this.WE.call$1(a)},
+WD:function(a){var z=this.JN
+if(z.tg(z,a))throw H.b(P.hT(a))
+z.h(z,a)},
+C7:function(a){var z,y,x,w,v
+if(!this.IS(a)){x=a
+w=this.JN
+if(w.tg(w,x))H.vh(P.hT(x))
+w.h(w,x)
+try{z=this.Tt(a)
+if(!this.IS(z)){x=P.ox(a,null)
+throw H.b(x)}w.Rz(w,a)}catch(v){x=H.Ru(v)
+y=x
+throw H.b(P.ox(a,y))}}},
+IS:function(a){var z,y,x,w
+z={}
+if(typeof a==="number"){this.u4.KF(C.CD.bu(a))
+return!0}else if(a===!0){this.u4.KF("true")
+return!0}else if(a===!1){this.u4.KF("false")
+return!0}else if(a==null){this.u4.KF("null")
+return!0}else if(typeof a==="string"){z=this.u4
+z.KF("\"")
+P.NY(z,a)
+z.KF("\"")
+return!0}else{y=J.x(a)
+if(typeof a==="object"&&a!==null&&(a.constructor===Array||!!y.$isList)){this.WD(a)
+z=this.u4
+z.KF("[")
+if(J.xZ(y.gB(a),0)){this.C7(y.t(a,0))
+x=1
+while(!0){w=y.gB(a)
+if(typeof w!=="number")throw H.s(w)
+if(!(x<w))break
+z.vM=z.vM+","
+this.C7(y.t(a,x));++x}}z.KF("]")
+z=this.JN
+z.Rz(z,a)
+return!0}else if(typeof a==="object"&&a!==null&&!!y.$isL8){this.WD(a)
+w=this.u4
+w.KF("{")
+z.a=!0
+y.aN(a,new P.tF(z,this))
+w.KF("}")
+w=this.JN
+w.Rz(w,a)
+return!0}else return!1}},
+static:{"":"P3,kD,Ta,Yz,qS,fg,SW,KQ,MU,mr,YM,Xk,QV",Vg:function(a,b){var z
+b=P.BC
+z=P.p9("")
+new P.Sh(b,z,P.yv(null)).C7(a)
+return z.vM},NY:function(a,b){var z,y,x,w,v,u,t
+z=J.U6(b)
+y=z.gB(b)
+x=P.A(null,J.im)
+H.VM(x,[J.im])
+if(typeof y!=="number")throw H.s(y)
+w=!1
+v=0
+for(;v<y;++v){u=z.j(b,v)
+if(u<32){x.push(92)
+switch(u){case 8:x.push(98)
+break
+case 9:x.push(116)
+break
+case 10:x.push(110)
+break
+case 12:x.push(102)
+break
+case 13:x.push(114)
+break
+default:x.push(117)
+t=C.jn.m(u,12)&15
+x.push(t<10?48+t:87+t)
+t=C.jn.m(u,8)&15
+x.push(t<10?48+t:87+t)
+t=C.jn.m(u,4)&15
+x.push(t<10?48+t:87+t)
+t=u&15
+x.push(t<10?48+t:87+t)
+break}w=!0}else if(u===34||u===92){x.push(92)
+x.push(u)
+w=!0}else x.push(u)}a.KF(w?P.HM(x):b)}}},tF:{"":"Tp;a,b",
+call$2:function(a,b){var z,y,x
+z=this.a
+y=this.b
+if(!z.a)y.u4.KF(",\"")
+else y.u4.KF("\"")
+y=this.b
+x=y.u4
+P.NY(x,a)
+x.KF("\":")
+y.C7(b)
+z.a=!1},
+"+call:2:0":0,
+$isEH:true,
+$is_bh:true},z0:{"":"ob;lH",
+goc:function(a){return"utf-8"},
+"+name":0,
+gZE:function(){return new P.Vx()}},Vx:{"":"wI;",
+WJ:function(a){var z,y,x
+z=a.length
+y=P.A(z*3,J.im)
+H.VM(y,[J.im])
+x=new P.Rw(0,0,y)
+if(x.fJ(a,0,z)!==z)x.Lb(C.xB.j(a,z-1),0)
+return C.Nm.D6(x.EN,0,x.An)},
+$aswI:function(){return[J.O,[J.Q,J.im]]}},Rw:{"":"a;vn,An,EN",
+Lb:function(a,b){var z,y,x,w,v
+z=this.EN
+y=this.An
+if((b&64512)===56320){x=(65536+((a&1023)<<10>>>0)|b&1023)>>>0
+this.An=y+1
+w=C.jn.m(x,18)
+v=z.length
+if(y<0||y>=v)throw H.e(z,y)
+z[y]=(240|w)>>>0
+w=this.An
+this.An=w+1
+y=C.jn.m(x,12)
+if(w<0||w>=v)throw H.e(z,w)
+z[w]=(128|y&63)>>>0
+y=this.An
+this.An=y+1
+w=C.jn.m(x,6)
+if(y<0||y>=v)throw H.e(z,y)
+z[y]=(128|w&63)>>>0
+w=this.An
+this.An=w+1
+if(w<0||w>=v)throw H.e(z,w)
+z[w]=(128|x&63)>>>0
+return!0}else{this.An=y+1
+w=C.jn.m(a,12)
+v=z.length
+if(y<0||y>=v)throw H.e(z,y)
+z[y]=(224|w)>>>0
+w=this.An
+this.An=w+1
+y=C.jn.m(a,6)
+if(w<0||w>=v)throw H.e(z,w)
+z[w]=(128|y&63)>>>0
+y=this.An
+this.An=y+1
+if(y<0||y>=v)throw H.e(z,y)
+z[y]=(128|a&63)>>>0
+return!1}},
+fJ:function(a,b,c){var z,y,x,w,v,u,t,s
+if(b!==c&&(C.xB.j(a,c-1)&64512)===55296)--c
+for(z=this.EN,y=z.length,x=a.length,w=b;w<c;++w){if(w<0)H.vh(new P.bJ("value "+w))
+if(w>=x)H.vh(new P.bJ("value "+w))
+v=a.charCodeAt(w)
+if(v<=127){u=this.An
+if(u>=y)break
+this.An=u+1
+if(u<0)throw H.e(z,u)
+z[u]=v}else if((v&64512)===55296){if(this.An+3>=y)break
+t=w+1
+if(t<0)H.vh(new P.bJ("value "+t))
+if(t>=x)H.vh(new P.bJ("value "+t))
+if(this.Lb(v,a.charCodeAt(t)))w=t}else if(v<=2047){u=this.An
+s=u+1
+if(s>=y)break
+this.An=s
+s=C.jn.m(v,6)
+if(u<0||u>=y)throw H.e(z,u)
+z[u]=(192|s)>>>0
+s=this.An
+this.An=s+1
+if(s<0||s>=y)throw H.e(z,s)
+z[s]=(128|v&63)>>>0}else{u=this.An
+if(u+2>=y)break
+this.An=u+1
+s=C.jn.m(v,12)
+if(u<0||u>=y)throw H.e(z,u)
+z[u]=(224|s)>>>0
+s=this.An
+this.An=s+1
+u=C.jn.m(v,6)
+if(s<0||s>=y)throw H.e(z,s)
+z[s]=(128|u&63)>>>0
+u=this.An
+this.An=u+1
+if(u<0||u>=y)throw H.e(z,u)
+z[u]=(128|v&63)>>>0}}return w},
+static:{"":"Ij",}},GY:{"":"wI;lH",
+WJ:function(a){var z,y
+z=P.p9("")
+y=new P.jZ(this.lH,z,!0,0,0,0)
+y.ME(a,0,a.length)
+y.fZ()
+return z.vM},
+$aswI:function(){return[[J.Q,J.im],J.O]}},jZ:{"":"a;lH,aS,rU,Hu,iU,VN",
+cO:function(a){this.fZ()},
+fZ:function(){if(this.iU>0){if(this.lH!==!0)throw H.b(P.cD("Unfinished UTF-8 octet sequence"))
+this.aS.KF(P.fc(65533))
+this.Hu=0
+this.iU=0
+this.VN=0}},
+ME:function(a,b,c){var z,y,x,w,v,u,t,s,r,q
+z=this.Hu
+y=this.iU
+x=this.VN
+this.Hu=0
+this.iU=0
+this.VN=0
+$loop$0:for(w=this.aS,v=this.lH!==!0,u=b;!0;u=q){$multibyte$2:{if(y>0){t=a.length
+do{if(u===c)break $loop$0
+if(u<0||u>=t)throw H.e(a,u)
+s=a[u]
+if((s&192)!==128){if(v)throw H.b(P.cD("Bad UTF-8 encoding 0x"+C.jn.WZ(s,16)))
+this.rU=!1
+r=P.O8(1,65533,J.im)
+r.$builtinTypeInfo=[J.im]
+t=H.eT(r)
+w.vM=w.vM+t
+y=0
+break $multibyte$2}else{z=(z<<6|s&63)>>>0;--y;++u}}while(y>0)
+t=x-1
+if(t<0||t>=4)throw H.e(C.Gb,t)
+if(z<=C.Gb[t]){if(v)throw H.b(P.cD("Overlong encoding of 0x"+C.jn.WZ(z,16)))
+z=65533
+y=0
+x=0}if(z>1114111){if(v)throw H.b(P.cD("Character outside valid Unicode range: 0x"+C.jn.WZ(z,16)))
+z=65533}if(!this.rU||z!==65279){r=P.O8(1,z,J.im)
+r.$builtinTypeInfo=[J.im]
+t=H.eT(r)
+w.vM=w.vM+t}this.rU=!1}}for(;u<c;u=q){q=u+1
+if(u<0||u>=a.length)throw H.e(a,u)
+s=a[u]
+if(s<0){if(v)throw H.b(P.cD("Negative UTF-8 code unit: -0x"+C.jn.WZ(-s,16)))
+r=P.O8(1,65533,J.im)
+r.$builtinTypeInfo=[J.im]
+t=H.eT(r)
+w.vM=w.vM+t}else if(s<=127){this.rU=!1
+r=P.O8(1,s,J.im)
+r.$builtinTypeInfo=[J.im]
+t=H.eT(r)
+w.vM=w.vM+t}else{if((s&224)===192){z=s&31
+y=1
+x=1
+continue $loop$0}if((s&240)===224){z=s&15
+y=2
+x=2
+continue $loop$0}if((s&248)===240&&s<245){z=s&7
+y=3
+x=3
+continue $loop$0}if(v)throw H.b(P.cD("Bad UTF-8 encoding 0x"+C.jn.WZ(s,16)))
+this.rU=!1
+r=P.O8(1,65533,J.im)
+r.$builtinTypeInfo=[J.im]
+t=H.eT(r)
+w.vM=w.vM+t
+z=65533
+y=0
+x=0}}break $loop$0}if(y>0){this.Hu=z
+this.iU=y
+this.VN=x}},
+static:{"":"a3",}}}],["dart.core","dart:core",,P,{Te:function(a){return},Wc:function(a,b){return J.oE(a,b)},hl:function(a){var z,y,x,w,v,u
+if(typeof a==="number"||typeof a==="boolean"||null==a)return J.AG(a)
+if(typeof a==="string"){z=new P.Rn("")
+z.vM="\""
+for(y=a.length,x=0;x<y;++x){w=C.xB.j(a,x)
+if(w<=31)if(w===10)z.vM=z.vM+"\\n"
+else if(w===13)z.vM=z.vM+"\\r"
+else if(w===9)z.vM=z.vM+"\\t"
+else{z.vM=z.vM+"\\x"
+if(w<16)z.vM=z.vM+"0"
+else{z.vM=z.vM+"1"
+w-=16}v=w<10?48+w:87+w
+u=P.O8(1,v,J.im)
+u.$builtinTypeInfo=[J.im]
+v=H.eT(u)
+z.vM=z.vM+v}else if(w===92)z.vM=z.vM+"\\\\"
+else if(w===34)z.vM=z.vM+"\\\""
+else{u=P.O8(1,w,J.im)
+u.$builtinTypeInfo=[J.im]
+v=H.eT(u)
+z.vM=z.vM+v}}z.vM=z.vM+"\""
+return z.vM}return"Instance of '"+H.lh(a)+"'"},FM:function(a){return new P.HG(a)},ad:function(a,b){return a==null?b==null:a===b},xv:function(a){return H.CU(a)},QA:function(a,b,c){return H.BU(a,c,b)},A:function(a,b){var z
+if(a==null)return new Array(0)
+if(typeof a!=="number"||Math.floor(a)!==a||a<0)throw H.b(P.u("Length must be a positive integer: "+H.d(a)+"."))
+z=new Array(a)
+z.fixed$length=!0
+return z},O8:function(a,b,c){var z,y,x
+if(a<0)throw H.b(P.u("Length must be a positive integer: "+a+"."))
+z=H.rD(a)
+if(a!==0&&b!=null)for(y=z.length,x=0;x<y;++x)z[x]=b
+return z},F:function(a,b,c){var z,y,x,w,v
+z=P.A(null,c)
+H.VM(z,[c])
+for(y=J.GP(a);y.G();)z.push(y.gl())
+if(b)return z
+x=z.length
+w=P.A(x,c)
+H.VM(w,[c])
+for(y=z.length,v=0;v<x;++v){if(v>=y)throw H.e(z,v)
+w[v]=z[v]}return w},JS:function(a){var z,y
+z=J.AG(a)
+y=$.oK
+if(y==null)H.LJ(z)
+else y.call$1(z)},HM:function(a){return H.eT(a)},fc:function(a){var z=P.O8(1,a,J.im)
+z.$builtinTypeInfo=[J.im]
+return H.eT(z)},hz:function(a,b){return 65536+((a&1023)<<10>>>0)+(b&1023)},h0:{"":"Tp;a",
+call$2:function(a,b){var z=this.a
+z.u(z,J.Z0(a),b)},
+"+call:2:0":0,
+$isEH:true,
+$is_bh:true},CL:{"":"Tp;a",
+call$2:function(a,b){var z=this.a
+if(z.b>0)z.a.KF(", ")
+z.a.KF(J.Z0(a))
+z.a.KF(": ")
+z.a.KF(P.hl(b))
+z.b=z.b+1},
+"+call:2:0":0,
+$isEH:true,
+$is_bh:true},uA:{"":"a;OF",
+bu:function(a){return"Deprecated feature. Will be removed "+this.OF}},a2:{"":"a;",
+bu:function(a){return this?"true":"false"},
+$isbool:true},fR:{"":"a;"},iP:{"":"a;rq<,aL",
+n:function(a,b){var z
+if(b==null)return!1
+z=J.x(b)
+if(typeof b!=="object"||b===null||!z.$isiP)return!1
+return this.rq===b.rq&&this.aL===b.aL},
+iM:function(a,b){return C.CD.iM(this.rq,b.grq())},
+giO:function(a){return this.rq},
+bu:function(a){var z,y,x,w,v,u,t,s
+z=new P.pl()
+y=new P.Hn().call$1(H.tJ(this))
+x=z.call$1(H.NS(this))
+w=z.call$1(H.jA(this))
+v=z.call$1(H.KL(this))
+u=z.call$1(H.ch(this))
+t=z.call$1(H.XJ(this))
+s=new P.Zl().call$1(H.o1(this))
+if(this.aL)return H.d(y)+"-"+H.d(x)+"-"+H.d(w)+" "+H.d(v)+":"+H.d(u)+":"+H.d(t)+"."+H.d(s)+"Z"
+else return H.d(y)+"-"+H.d(x)+"-"+H.d(w)+" "+H.d(v)+":"+H.d(u)+":"+H.d(t)+"."+H.d(s)},
+h:function(a,b){return P.Wu(this.rq+b.gVs(),this.aL)},
+EK:function(){H.U8(this)},
+RM:function(a,b){if(Math.abs(a)>8640000000000000)throw H.b(new P.AT(a))},
+$isiP:true,
+static:{"":"Oj,bI,df,yM,h2,OK,nm,DU,H9,Gio,k3,cR,E0,Ke,lT,pi,bm,o4,Kz,J7,TO,lme",Gl:function(a){var z,y,x,w,v,u,t,s,r,q,p,o,n
+z=new H.VR(H.v4("^([+-]?\\d?\\d\\d\\d\\d)-?(\\d\\d)-?(\\d\\d)(?:[ T](\\d\\d)(?::?(\\d\\d)(?::?(\\d\\d)(.\\d{1,6})?)?)?( ?[zZ]| ?\\+00(?::?00)?)?)?$",!1,!0,!1),null,null).ej(a)
+if(z!=null){y=new P.MF()
+x=z.oH
+if(1>=x.length)throw H.e(x,1)
+w=H.BU(x[1],null,null)
+if(2>=x.length)throw H.e(x,2)
+v=H.BU(x[2],null,null)
+if(3>=x.length)throw H.e(x,3)
+u=H.BU(x[3],null,null)
+if(4>=x.length)throw H.e(x,4)
+t=y.call$1(x[4])
+if(5>=x.length)throw H.e(x,5)
+s=y.call$1(x[5])
+if(6>=x.length)throw H.e(x,6)
+r=y.call$1(x[6])
+if(7>=x.length)throw H.e(x,7)
+q=J.LL(J.p0(new P.Rq().call$1(x[7]),1000))
+if(q===1000){p=!0
+q=999}else p=!1
+if(8>=x.length)throw H.e(x,8)
+o=x[8]!=null
+n=H.zW(w,v,u,t,s,r,q,o)
+return P.Wu(p?n+1:n,o)}else throw H.b(new P.AT(a))},Wu:function(a,b){var z=new P.iP(a,b)
+z.RM(a,b)
+return z},Xs:function(){var z=new P.iP(Date.now(),!1)
+z.EK()
+return z}}},MF:{"":"Tp;",
+call$1:function(a){if(a==null)return 0
+return H.BU(a,null,null)},
+"+call:1:0":0,
+$isEH:true,
+$is_HB:true,
+$is_Dv:true},Rq:{"":"Tp;",
+call$1:function(a){if(a==null)return 0
+return H.IH(a,null)},
+"+call:1:0":0,
+$isEH:true,
+$is_HB:true,
+$is_Dv:true},Hn:{"":"Tp;",
+call$1:function(a){var z,y,x
+z=J.Wx(a)
+y=z.Vy(a)
+x=z.C(a,0)?"-":""
+if(y>=1000)return H.d(a)
+if(y>=100)return x+"0"+H.d(y)
+if(y>=10)return x+"00"+H.d(y)
+return x+"000"+H.d(y)},
+"+call:1:0":0,
+$isEH:true,
+$is_HB:true,
+$is_Dv:true},Zl:{"":"Tp;",
+call$1:function(a){var z=J.Wx(a)
+if(z.F(a,100))return H.d(a)
+if(z.F(a,10))return"0"+H.d(a)
+return"00"+H.d(a)},
+"+call:1:0":0,
+$isEH:true,
+$is_HB:true,
+$is_Dv:true},pl:{"":"Tp;",
+call$1:function(a){if(J.J5(a,10))return H.d(a)
+return"0"+H.d(a)},
+"+call:1:0":0,
+$isEH:true,
+$is_HB:true,
+$is_Dv:true},a6:{"":"a;Fq<",
+g:function(a,b){return P.k5(0,0,this.Fq+b.gFq(),0,0,0)},
+W:function(a,b){return P.k5(0,0,this.Fq-b.gFq(),0,0,0)},
+U:function(a,b){if(typeof b!=="number")throw H.s(b)
+return P.k5(0,0,C.CD.yu(C.CD.UD(this.Fq*b)),0,0,0)},
+C:function(a,b){return this.Fq<b.gFq()},
+D:function(a,b){return this.Fq>b.gFq()},
+E:function(a,b){return this.Fq<=b.gFq()},
+F:function(a,b){return this.Fq>=b.gFq()},
+gVs:function(){return C.CD.Z(this.Fq,1000)},
+n:function(a,b){var z
+if(b==null)return!1
+z=J.x(b)
+if(typeof b!=="object"||b===null||!z.$isa6)return!1
+return this.Fq===b.Fq},
+giO:function(a){return this.Fq&0x1FFFFFFF},
+iM:function(a,b){return C.CD.iM(this.Fq,b.gFq())},
+bu:function(a){var z,y,x,w,v
+z=new P.DW()
+y=this.Fq
+if(y<0)return"-"+H.d(P.k5(0,0,-y,0,0,0))
+x=z.call$1(C.CD.JV(C.CD.Z(y,60000000),60))
+w=z.call$1(C.CD.JV(C.CD.Z(y,1000000),60))
+v=new P.P7().call$1(C.CD.JV(y,1000000))
+return H.d(C.CD.Z(y,3600000000))+":"+H.d(x)+":"+H.d(w)+"."+H.d(v)},
+$isa6:true,
+static:{"":"Bp,S4,dk,Lo,RD,b2,q9,Ie,Do,f4,vd,IJ,iI,Vk,fm,yn",k5:function(a,b,c,d,e,f){return new P.a6(a*86400000000+b*3600000000+e*60000000+f*1000000+d*1000+c)}}},P7:{"":"Tp;",
+call$1:function(a){var z=J.Wx(a)
+if(z.F(a,100000))return H.d(a)
+if(z.F(a,10000))return"0"+H.d(a)
+if(z.F(a,1000))return"00"+H.d(a)
+if(z.F(a,100))return"000"+H.d(a)
+if(z.D(a,10))return"0000"+H.d(a)
+return"00000"+H.d(a)},
+"+call:1:0":0,
+$isEH:true,
+$is_HB:true,
+$is_Dv:true},DW:{"":"Tp;",
+call$1:function(a){if(J.J5(a,10))return H.d(a)
+return"0"+H.d(a)},
+"+call:1:0":0,
+$isEH:true,
+$is_HB:true,
+$is_Dv:true},Ge:{"":"a;",
+gI4:function(){return new H.XO(this.$thrownJsError,null)},
+$isGe:true},LK:{"":"Ge;",
+bu:function(a){return"Throw of null."}},AT:{"":"Ge;G1>",
+bu:function(a){var z=this.G1
+if(z!=null)return"Illegal argument(s): "+H.d(z)
+return"Illegal argument(s)"},
+static:{u:function(a){return new P.AT(a)}}},bJ:{"":"AT;G1",
+bu:function(a){return"RangeError: "+H.d(this.G1)},
+static:{C3:function(a){return new P.bJ(a)},N:function(a){return new P.bJ("value "+H.d(a))},"+new RangeError$value:1:0":0,TE:function(a,b,c){return new P.bJ("value "+H.d(a)+" not in range "+H.d(b)+".."+H.d(c))}}},mp:{"":"Ge;uF,UP,mP,SA,vG",
+bu:function(a){var z,y,x,w,v,u
+z={}
+z.a=P.p9("")
+z.b=0
+y=this.mP
+if(y!=null){x=J.U6(y)
+while(!0){w=z.b
+v=x.gB(y)
+if(typeof v!=="number")throw H.s(v)
+if(!(w<v))break
+if(z.b>0){w=z.a
+w.vM=w.vM+", "}w=z.a
+u=P.hl(x.t(y,z.b))
+u=typeof u==="string"?u:H.d(u)
+w.vM=w.vM+u
+z.b=z.b+1}}y=this.SA
+if(y!=null)J.kH(y,new P.CL(z))
+return"NoSuchMethodError : method not found: '"+H.d(this.UP)+"'\nReceiver: "+H.d(P.hl(this.uF))+"\nArguments: ["+H.d(z.a)+"]"},
+$ismp:true,
+static:{lr:function(a,b,c,d,e){return new P.mp(a,b,c,d,e)}}},ub:{"":"Ge;G1>",
+bu:function(a){return"Unsupported operation: "+this.G1},
+$isub:true,
+static:{f:function(a){return new P.ub(a)}}},ds:{"":"Ge;G1>",
+bu:function(a){var z=this.G1
+return z!=null?"UnimplementedError: "+H.d(z):"UnimplementedError"},
+$isub:true,
+$isGe:true,
+static:{SY:function(a){return new P.ds(a)}}},lj:{"":"Ge;G1>",
+bu:function(a){return"Bad state: "+this.G1},
+static:{w:function(a){return new P.lj(a)}}},UV:{"":"Ge;YA",
+bu:function(a){var z=this.YA
+if(z==null)return"Concurrent modification during iteration."
+return"Concurrent modification during iteration: "+H.d(P.hl(z))+"."},
+static:{a4:function(a){return new P.UV(a)}}},VS:{"":"a;",
+bu:function(a){return"Stack Overflow"},
+gI4:function(){return},
+$isGe:true},t7:{"":"Ge;Wo",
+bu:function(a){return"Reading static variable '"+this.Wo+"' during its initialization"},
+static:{Gz:function(a){return new P.t7(a)}}},HG:{"":"a;G1>",
+bu:function(a){var z=this.G1
+if(z==null)return"Exception"
+return"Exception: "+H.d(z)}},aE:{"":"a;G1>",
+bu:function(a){return"FormatException: "+H.d(this.G1)},
+$isaE:true,
+static:{cD:function(a){return new P.aE(a)}}},kM:{"":"a;oc>",
+bu:function(a){return"Expando:"+this.oc},
+t:function(a,b){var z=H.of(b,"expando$values")
+return z==null?null:H.of(z,this.Qz())},
+"+[]:1:0":0,
+u:function(a,b,c){var z=H.of(b,"expando$values")
+if(z==null){z=new P.a()
+H.aw(b,"expando$values",z)}H.aw(z,this.Qz(),c)},
+"+[]=:2:0":0,
+Qz:function(){var z,y
+z=H.of(this,"expando$key")
+if(z==null){y=$.Ss
+$.Ss=y+1
+z="expando$key$"+y
+H.aw(this,"expando$key",z)}return z},
+static:{"":"bZ,rt,Ss",}},EH:{"":"a;",$isEH:true},cX:{"":"a;",$iscX:true,$ascX:null},eL:{"":"a;"},L8:{"":"a;",$isL8:true},c8:{"":"a;",
+bu:function(a){return"null"}},a:{"":";",
+n:function(a,b){return this===b},
+giO:function(a){return H.eQ(this)},
+bu:function(a){return H.a5(this)},
+T:function(a,b){throw H.b(P.lr(this,b.gWa(),b.gnd(),b.gVm(),null))},
+"+noSuchMethod:1:0":0,
+gbx:function(a){return new H.cu(H.dJ(this),null)},
+$isa:true},Od:{"":"a;",$isOd:true},mE:{"":"a;"},WU:{"":"a;Qk,SU,Oq,Wn",
+gl:function(){return this.Wn},
+"+current":0,
+G:function(){var z,y,x,w,v,u
+this.SU=this.Oq
+z=this.Qk
+y=J.U6(z)
+if(this.SU===y.gB(z)){this.Wn=null
+return!1}x=y.j(z,this.SU)
+w=this.SU+1
+if((x&64512)===55296){v=y.gB(z)
+if(typeof v!=="number")throw H.s(v)
+v=w<v}else v=!1
+if(v){u=y.j(z,w)
+if((u&64512)===56320){this.Oq=w+1
+this.Wn=P.hz(x,u)
+return!0}}this.Oq=w
+this.Wn=x
+return!0}},Rn:{"":"a;vM<",
+gB:function(a){return this.vM.length},
+"+length":0,
+gl0:function(a){return this.vM.length===0},
+"+isEmpty":0,
+gor:function(a){return this.vM.length!==0},
+"+isNotEmpty":0,
+KF:function(a){var z=typeof a==="string"?a:H.d(a)
+this.vM=this.vM+z},
+We:function(a,b){var z,y
+z=J.GP(a)
+if(!z.G())return
+if(b.length===0)do{y=z.gl()
+y=typeof y==="string"?y:H.d(y)
+this.vM=this.vM+y}while(z.G())
+else{this.KF(z.gl())
+for(;z.G();){this.vM=this.vM+b
+y=z.gl()
+y=typeof y==="string"?y:H.d(y)
+this.vM=this.vM+y}}},
+bu:function(a){return this.vM},
+PD:function(a){if(typeof a==="string")this.vM=a
+else this.KF(a)},
+static:{p9:function(a){var z=new P.Rn("")
+z.PD(a)
+return z}}},wv:{"":"a;",$iswv:true},uq:{"":"a;",$isuq:true},iD:{"":"a;NN,HC,r0,Fi,iV,tP,BJ,MS,yW",
+gJf:function(a){var z,y
+z=this.NN
+if(z!=null&&J.co(z,"[")){y=J.U6(z)
+return y.JT(z,1,J.xH(y.gB(z),1))}return z},
+gGL:function(a){var z,y
+if(J.xC(this.HC,0)){z=this.Fi
+y=J.x(z)
+if(y.n(z,"http"))return 80
+if(y.n(z,"https"))return 443}return this.HC},
+gIi:function(a){return this.r0},
+Ja:function(a,b){return this.tP.call$1(b)},
+ghY:function(){if(this.yW==null){var z=new P.dD(P.Ak(this.tP,C.dy))
+H.VM(z,[null,null])
+this.yW=z}return this.yW},
+x6:function(a,b){var z,y
+z=a==null
+if(z&&!0)return""
+z=!z
+if(z);if(z)y=P.Xc(a)
+else{z=C.jN.ez(b,new P.Kd())
+y=z.zV(z,"/")}if(!J.xC(this.gJf(this),"")||J.xC(this.Fi,"file")){z=J.U6(y)
+z=z.gor(y)&&!z.nC(y,"/")}else z=!1
+if(z)return"/"+H.d(y)
+return y},
+Ky:function(a,b){var z=J.x(a)
+if(z.n(a,""))return"/"+H.d(b)
+return z.JT(a,0,J.WB(z.cn(a,"/"),1))+H.d(b)},
+uo:function(a){var z=J.U6(a)
+if(J.xZ(z.gB(a),0)&&z.j(a,0)===58)return!0
+return z.u8(a,"/.")!==-1},
+SK:function(a){var z,y,x,w,v
+if(!this.uo(a))return a
+z=[]
+for(y=J.uH(a,"/"),x=new H.a7(y,y.length,0,null),H.VM(x,[H.W8(y,"Q",0)]),w=!1;x.G();){v=x.mD
+if(J.xC(v,"..")){y=z.length
+if(y!==0)if(y===1){if(0>=y)throw H.e(z,0)
+y=!J.xC(z[0],"")}else y=!0
+else y=!1
+if(y){if(0>=z.length)throw H.e(z,0)
+z.pop()}w=!0}else if("."===v)w=!0
+else{z.push(v)
+w=!1}}if(w)z.push("")
+return C.Nm.zV(z,"/")},
+mS:function(a){var z,y,x,w,v,u,t,s
+z=a.Fi
+if(!J.xC(z,"")){y=a.iV
+x=a.gJf(a)
+w=a.gGL(a)
+v=this.SK(a.r0)
+u=a.tP}else{if(!J.xC(a.gJf(a),"")){y=a.iV
+x=a.gJf(a)
+w=a.gGL(a)
+v=this.SK(a.r0)
+u=a.tP}else{if(J.xC(a.r0,"")){v=this.r0
+u=a.tP
+u=!J.xC(u,"")?u:this.tP}else{t=J.co(a.r0,"/")
+s=a.r0
+v=t?this.SK(s):this.SK(this.Ky(this.r0,s))
+u=a.tP}y=this.iV
+x=this.gJf(this)
+w=this.gGL(this)}z=this.Fi}return P.R6(a.BJ,x,v,null,w,u,null,z,y)},
+tb:function(a){var z=this.iV
+if(""!==z){a.KF(z)
+a.KF("@")}z=this.NN
+a.KF(z==null?"null":z)
+if(!J.xC(this.HC,0)){a.KF(":")
+a.KF(J.AG(this.HC))}},
+bu:function(a){var z,y
+z=P.p9("")
+y=this.Fi
+if(""!==y){z.KF(y)
+z.KF(":")}if(!J.xC(this.gJf(this),"")||J.xC(y,"file")){z.KF("//")
+this.tb(z)}z.KF(this.r0)
+y=this.tP
+if(""!==y){z.KF("?")
+z.KF(y)}y=this.BJ
+if(""!==y){z.KF("#")
+z.KF(y)}return z.vM},
+n:function(a,b){var z
+if(b==null)return!1
+z=J.RE(b)
+if(typeof b!=="object"||b===null||!z.$isiD)return!1
+return J.xC(this.Fi,b.Fi)&&J.xC(this.iV,b.iV)&&J.xC(this.gJf(this),z.gJf(b))&&J.xC(this.gGL(this),z.gGL(b))&&J.xC(this.r0,b.r0)&&J.xC(this.tP,b.tP)&&J.xC(this.BJ,b.BJ)},
+giO:function(a){var z=new P.XZ()
+return z.call$2(this.Fi,z.call$2(this.iV,z.call$2(this.gJf(this),z.call$2(this.gGL(this),z.call$2(this.r0,z.call$2(this.tP,z.call$2(this.BJ,1)))))))},
+n3:function(a,b,c,d,e,f,g,h,i){var z=J.x(h)
+if(z.n(h,"http")&&J.xC(e,80))this.HC=0
+else if(z.n(h,"https")&&J.xC(e,443))this.HC=0
+else this.HC=e
+this.r0=this.x6(c,d)},
+$isiD:true,
+static:{"":"Um,B4,Bx,iR,LM,mv,nR,jJ,d2,q7,ux,vI,SF,tC,IL,Q5,vl,yt,fC,O5,eq,qf,Tx,y3,Cn,R1,oe,vT,K7,nL,H5,zst,eK,bf,nc,nU,uj,SQ,SD",r6:function(a){var z,y,x,w,v,u,t,s
+z=a.oH
+if(1>=z.length)throw H.e(z,1)
+y=z[1]
+y=P.iy(y!=null?y:"")
+x=z.length
+if(2>=x)throw H.e(z,2)
+w=z[2]
+w=w!=null?w:""
+if(3>=x)throw H.e(z,3)
+v=z[3]
+if(4>=x)throw H.e(z,4)
+v=P.K6(v,z[4])
+if(5>=x)throw H.e(z,5)
+x=P.n7(z[5])
+u=z.length
+if(6>=u)throw H.e(z,6)
+t=z[6]
+t=t!=null?t:""
+if(7>=u)throw H.e(z,7)
+s=z[7]
+s=s!=null?s:""
+if(8>=u)throw H.e(z,8)
+z=z[8]
+z=z!=null?z:""
+u=P.iy(y)
+u=new P.iD(P.L7(v),null,null,u,w,P.LE(s,null),P.UJ(z),null,null)
+u.n3(z,v,t,null,x,s,null,y,w)
+return u},R6:function(a,b,c,d,e,f,g,h,i){var z=P.iy(h)
+z=new P.iD(P.L7(b),null,null,z,i,P.LE(f,g),P.UJ(a),null,null)
+z.n3(a,b,c,d,e,f,g,h,i)
+return z},L7:function(a){var z,y,x
+if(a==null||J.FN(a)===!0)return a
+z=J.rY(a)
+if(z.j(a,0)===91){if(z.j(a,J.xH(z.gB(a),1))!==93)throw H.b(P.cD("Missing end `]` to match `[` in host"))
+P.eg(z.JT(a,1,J.xH(z.gB(a),1)))
+return a}y=0
+while(!0){x=z.gB(a)
+if(typeof x!=="number")throw H.s(x)
+if(!(y<x))break
+if(z.j(a,y)===58){P.eg(a)
+return"["+H.d(a)+"]"}++y}return a},iy:function(a){var z,y,x,w,v,u,t,s
+z=new P.hb()
+y=new P.XX()
+if(a==null)return""
+x=J.U6(a)
+w=x.gB(a)
+if(typeof w!=="number")throw H.s(w)
+v=!0
+u=0
+for(;u<w;++u){t=x.j(a,u)
+if(u===0){if(!(t>=97&&t<=122))s=t>=65&&t<=90
+else s=!0
+s=!s}else s=!1
+if(s)throw H.b(new P.AT("Illegal scheme: "+H.d(a)))
+if(z.call$1(t)!==!0){if(y.call$1(t)===!0);else throw H.b(new P.AT("Illegal scheme: "+H.d(a)))
+v=!1}}return v?a:x.hc(a)},LE:function(a,b){var z,y,x
+z={}
+y=a==null
+if(y&&!0)return""
+y=!y
+if(y);if(y)return P.Xc(a)
+x=P.p9("")
+z.a=!0
+C.jN.aN(b,new P.yZ(z,x))
+return x.vM},UJ:function(a){if(a==null)return""
+return P.Xc(a)},Xc:function(a){var z,y,x,w,v,u,t,s,r,q,p,o,n,m
+z={}
+y=new P.Gs()
+x=new P.Tw()
+w=new P.wm(a,y,new P.pm())
+v=new P.FB(a)
+z.a=null
+u=J.U6(a)
+t=u.gB(a)
+z.b=0
+z.c=0
+s=new P.Lk(z,a)
+if(typeof t!=="number")throw H.s(t)
+for(;r=z.b,r<t;)if(u.j(a,r)===37){r=z.b
+if(t<r+2)throw H.b(new P.AT("Invalid percent-encoding in URI component: "+H.d(a)))
+q=u.j(a,r+1)
+p=u.j(a,z.b+2)
+o=v.call$1(z.b+1)
+if(y.call$1(q)===!0&&y.call$1(p)===!0&&x.call$1(o)!==!0)z.b=z.b+3
+else{s.call$0()
+r=x.call$1(o)
+n=z.a
+if(r===!0){n.toString
+m=P.O8(1,o,J.im)
+m.$builtinTypeInfo=[J.im]
+r=H.eT(m)
+n.vM=n.vM+r}else{n.toString
+n.vM=n.vM+"%"
+r=z.a
+n=w.call$1(z.b+1)
+r.toString
+m=P.O8(1,n,J.im)
+m.$builtinTypeInfo=[J.im]
+n=H.eT(m)
+r.vM=r.vM+n
+r=z.a
+n=w.call$1(z.b+2)
+r.toString
+m=P.O8(1,n,J.im)
+m.$builtinTypeInfo=[J.im]
+n=H.eT(m)
+r.vM=r.vM+n}z.b=z.b+3
+z.c=z.b}}else z.b=z.b+1
+if(z.a!=null&&z.c!==r)s.call$0()
+z=z.a
+if(z==null)return a
+return J.AG(z)},n7:function(a){if(a!=null&&!J.xC(a,""))return H.BU(a,null,null)
+else return 0},K6:function(a,b){if(a!=null)return a
+if(b!=null)return b
+return""},Ak:function(a,b){return H.n3(J.uH(a,"&"),H.B7([],P.L5(null,null,null,null,null)),new P.qz(b))},q5:function(a){var z,y
+z=new P.hQ()
+y=a.split(".")
+if(y.length!==4)z.call$1("IPv4 address should contain exactly 4 parts")
+z=new H.A8(y,new P.Nw(z))
+H.VM(z,[null,null])
+return z.br(z)},eg:function(a){var z,y,x,w,v,u,t,s,r,q,p,o,n
+z=new P.kZ()
+y=new P.JT(a,z)
+if(J.u6(J.q8(a),2))z.call$1("address is too short")
+x=[]
+w=0
+u=!1
+t=0
+while(!0){s=J.q8(a)
+if(typeof s!=="number")throw H.s(s)
+if(!(t<s))break
+if(J.Dz(a,t)===58){if(t===0){++t
+if(J.Dz(a,t)!==58)z.call$1("invalid start colon.")
+w=t}if(t===w){if(u)z.call$1("only one wildcard `::` is allowed")
+J.bi(x,-1)
+u=!0}else J.bi(x,y.call$2(w,t))
+w=t+1}++t}if(J.q8(x)===0)z.call$1("too few parts")
+r=J.xC(w,J.q8(a))
+q=J.xC(J.MQ(x),-1)
+if(r&&!q)z.call$1("expected a part after last `:`")
+if(!r)try{J.bi(x,y.call$2(w,J.q8(a)))}catch(p){H.Ru(p)
+try{v=P.q5(J.ZZ(a,w))
+s=J.Eh(J.UQ(v,0),8)
+o=J.UQ(v,1)
+if(typeof o!=="number")throw H.s(o)
+J.bi(x,(s|o)>>>0)
+o=J.Eh(J.UQ(v,2),8)
+s=J.UQ(v,3)
+if(typeof s!=="number")throw H.s(s)
+J.bi(x,(o|s)>>>0)}catch(p){H.Ru(p)
+z.call$1("invalid end of IPv6 address.")}}if(u){if(J.q8(x)>7)z.call$1("an address with a wildcard must have less than 7 parts")}else if(J.q8(x)!==8)z.call$1("an address without a wildcard must contain exactly 8 parts")
+s=new H.zs(x,new P.d9(x))
+s.$builtinTypeInfo=[null,null]
+n=H.Y9(s.$asmW,H.oX(s))
+o=n==null?null:n[0]
+return P.F(s,!0,o)},jW:function(a,b,c){var z,y,x,w,v,u,t,s,r
+z=new P.rI()
+y=P.p9("")
+x=J.U6(b)
+w=0
+while(!0){v=x.gB(b)
+if(typeof v!=="number")throw H.s(v)
+if(!(w<v))break
+u=x.j(b,w)
+if(u<128){v=C.jn.m(u,4)
+if(v<0||v>=8)throw H.e(a,v)
+v=(a[v]&C.jn.O(1,u&15))>>>0!==0}else v=!1
+if(v){t=x.t(b,w)
+t=typeof t==="string"?t:H.d(t)
+y.vM=y.vM+t}else if(c&&J.xC(x.t(b,w)," "))y.vM=y.vM+"+"
+else{if(u>=55296&&u<56320){++w
+s=J.xC(x.gB(b),w)?0:x.j(b,w)
+if(s>=56320&&s<57344)u=65536+(u-55296<<10>>>0)+(s-56320)
+else throw H.b(new P.AT("Malformed URI"))}r=P.O8(1,u,J.im)
+r.$builtinTypeInfo=[J.im]
+v=H.eT(r)
+v=C.Nm.gA(C.dy.gZE().WJ(v))
+for(;v.G();){t=z.call$1(v.mD)
+t=typeof t==="string"?t:H.d(t)
+y.vM=y.vM+t}}++w}return y.vM},oh:function(a,b){var z,y,x,w
+for(z=J.rY(a),y=0,x=0;x<2;++x){w=z.j(a,b+x)
+if(48<=w&&w<=57)y=y*16+w-48
+else{w=(w|32)>>>0
+if(97<=w&&w<=102)y=y*16+w-87
+else throw H.b(new P.AT("Invalid URL encoding"))}}return y},pE:function(a,b,c){var z,y,x,w,v,u,t,s
+z=P.p9("")
+y=P.A(null,J.im)
+H.VM(y,[J.im])
+x=J.U6(a)
+w=b.lH
+v=0
+while(!0){u=x.gB(a)
+if(typeof u!=="number")throw H.s(u)
+if(!(v<u))break
+t=x.j(a,v)
+if(t!==37){if(c&&t===43)z.vM=z.vM+" "
+else{s=P.O8(1,t,J.im)
+s.$builtinTypeInfo=[J.im]
+u=H.eT(s)
+z.vM=z.vM+u}++v}else{C.Nm.sB(y,0)
+for(;t===37;){++v
+u=J.xH(x.gB(a),2)
+if(typeof u!=="number")throw H.s(u)
+if(v>u)throw H.b(new P.AT("Truncated URI"))
+y.push(P.oh(a,v))
+v+=2
+if(v===x.gB(a))break
+t=x.j(a,v)}u=new P.GY(w).WJ(y)
+z.vM=z.vM+u}}return z.vM}}},hb:{"":"Tp;",
+call$1:function(a){var z,y
+z=J.Wx(a)
+if(z.C(a,128)){y=z.m(a,4)
+if(y<0||y>=8)throw H.e(C.HE,y)
+z=(C.HE[y]&C.jn.O(1,z.i(a,15)))>>>0!==0}else z=!1
+return z},
+"+call:1:0":0,
+$isEH:true,
+$is_HB:true,
+$is_Dv:true},XX:{"":"Tp;",
+call$1:function(a){var z,y
+z=J.Wx(a)
+if(z.C(a,128)){y=z.m(a,4)
+if(y<0||y>=8)throw H.e(C.mK,y)
+z=(C.mK[y]&C.jn.O(1,z.i(a,15)))>>>0!==0}else z=!1
+return z},
+"+call:1:0":0,
+$isEH:true,
+$is_HB:true,
+$is_Dv:true},Kd:{"":"Tp;",
+call$1:function(a){return P.jW(C.Wd,a,!1)},
+"+call:1:0":0,
+$isEH:true,
+$is_HB:true,
+$is_Dv:true},yZ:{"":"Tp;a,b",
+call$2:function(a,b){var z=this.a
+if(!z.a)this.b.KF("&")
+z.a=!1
+z=this.b
+z.KF(P.jW(C.kg,a,!0))
+if(b!=null&&J.FN(b)!==!0){z.KF("=")
+z.KF(P.jW(C.kg,b,!0))}},
+"+call:2:0":0,
+$isEH:true,
+$is_bh:true},Gs:{"":"Tp;",
+call$1:function(a){var z
+if(typeof a!=="number")throw H.s(a)
+if(!(48<=a&&a<=57))z=65<=a&&a<=70
+else z=!0
+return z},
+"+call:1:0":0,
+$isEH:true,
+$is_HB:true,
+$is_Dv:true},pm:{"":"Tp;",
+call$1:function(a){if(typeof a!=="number")throw H.s(a)
+return 97<=a&&a<=102},
+"+call:1:0":0,
+$isEH:true,
+$is_HB:true,
+$is_Dv:true},Tw:{"":"Tp;",
+call$1:function(a){var z,y
+z=J.Wx(a)
+if(z.C(a,128)){y=z.m(a,4)
+if(y<0||y>=8)throw H.e(C.kg,y)
+z=(C.kg[y]&C.jn.O(1,z.i(a,15)))>>>0!==0}else z=!1
+return z},
+"+call:1:0":0,
+$isEH:true,
+$is_HB:true,
+$is_Dv:true},wm:{"":"Tp;b,c,d",
+call$1:function(a){var z,y
+z=this.b
+y=J.Dz(z,a)
+if(this.d.call$1(y)===!0)return y-32
+else if(this.c.call$1(y)!==!0)throw H.b(new P.AT("Invalid URI component: "+H.d(z)))
+else return y},
+"+call:1:0":0,
+$isEH:true,
+$is_HB:true,
+$is_Dv:true},FB:{"":"Tp;e",
+call$1:function(a){var z,y,x,w,v,u
+for(z=this.e,y=J.Qc(a),x=J.rY(z),w=0,v=0;v<2;++v){u=x.j(z,y.g(a,v))
+if(48<=u&&u<=57)w=w*16+u-48
+else{u=(u|32)>>>0
+if(97<=u&&u<=102)w=w*16+u-97+10
+else throw H.b(new P.AT("Invalid percent-encoding in URI component: "+H.d(z)))}}return w},
+"+call:1:0":0,
+$isEH:true,
+$is_HB:true,
+$is_Dv:true},Lk:{"":"Tp;a,f",
+call$0:function(){var z,y,x,w,v
+z=this.a
+y=z.a
+x=z.c
+w=this.f
+v=z.b
+if(y==null)z.a=P.p9(J.bh(w,x,v))
+else y.KF(J.bh(w,x,v))},
+"+call:0:0":0,
+$isEH:true,
+$is_X0:true},XZ:{"":"Tp;",
+call$2:function(a,b){return J.mQ(J.WB(J.p0(b,31),J.v1(a)),1073741823)},
+"+call:2:0":0,
+$isEH:true,
+$is_bh:true},qz:{"":"Tp;a",
+call$2:function(a,b){var z,y,x,w
+z=J.U6(b)
+y=z.u8(b,"=")
+if(y===-1){if(!z.n(b,""))J.kW(a,P.pE(b,this.a,!0),"")}else if(y!==0){x=z.JT(b,0,y)
+w=z.yn(b,y+1)
+z=this.a
+J.kW(a,P.pE(x,z,!0),P.pE(w,z,!0))}return a},
+"+call:2:0":0,
+$isEH:true,
+$is_bh:true},hQ:{"":"Tp;",
+call$1:function(a){throw H.b(P.cD("Illegal IPv4 address, "+H.d(a)))},
+"+call:1:0":0,
+$isEH:true,
+$is_HB:true,
+$is_Dv:true},Nw:{"":"Tp;a",
+call$1:function(a){var z,y
+z=H.BU(a,null,null)
+y=J.Wx(z)
+if(y.C(z,0)||y.D(z,255))this.a.call$1("each part must be in the range of `0..255`")
+return z},
+"+call:1:0":0,
+$isEH:true,
+$is_HB:true,
+$is_Dv:true},kZ:{"":"Tp;",
+call$1:function(a){throw H.b(P.cD("Illegal IPv6 address, "+H.d(a)))},
+"+call:1:0":0,
+$isEH:true,
+$is_HB:true,
+$is_Dv:true},JT:{"":"Tp;a,b",
+call$2:function(a,b){var z,y
+if(J.xZ(J.xH(b,a),4))this.b.call$1("an IPv6 part can only contain a maximum of 4 hex digits")
+z=H.BU(J.bh(this.a,a,b),16,null)
+y=J.Wx(z)
+if(y.C(z,0)||y.D(z,65535))this.b.call$1("each part must be in the range of `0x0..0xFFFF`")
+return z},
+"+call:2:0":0,
+$isEH:true,
+$is_bh:true},d9:{"":"Tp;c",
+call$1:function(a){var z=J.x(a)
+if(z.n(a,-1))return P.O8((9-this.c.length)*2,0,null)
+else return[z.m(a,8)&255,z.i(a,255)]},
+"+call:1:0":0,
+$isEH:true,
+$is_HB:true,
+$is_Dv:true},rI:{"":"Tp;",
+call$1:function(a){var z,y
+z=J.Wx(a)
+y=z.m(a,4)
+if(y<0||y>=16)throw H.e("0123456789ABCDEF",y)
+y="%"+"0123456789ABCDEF"[y]
+z=z.i(a,15)
+if(z<0||z>=16)throw H.e("0123456789ABCDEF",z)
+return y+"0123456789ABCDEF"[z]},
+"+call:1:0":0,
+$isEH:true,
+$is_HB:true,
+$is_Dv:true},dD:{"":"a;iY",
+PF:function(a){return this.iY.PF(a)},
+"+containsValue:1:0":0,
+x4:function(a){return this.iY.x4(a)},
+"+containsKey:1:0":0,
+t:function(a,b){return J.UQ(this.iY,b)},
+"+[]:1:0":0,
+u:function(a,b,c){throw H.b(P.f("Cannot modify an unmodifiable map"))},
+"+[]=:2:0":0,
+Rz:function(a,b){throw H.b(P.f("Cannot modify an unmodifiable map"))},
+aN:function(a,b){return J.kH(this.iY,b)},
+gvc:function(a){return J.iY(this.iY)},
+"+keys":0,
+gUQ:function(a){return J.hI(this.iY)},
+"+values":0,
+gB:function(a){return J.q8(this.iY)},
+"+length":0,
+gl0:function(a){return J.FN(this.iY)},
+"+isEmpty":0,
+gor:function(a){return J.pO(this.iY)},
+"+isNotEmpty":0,
+$isL8:true}}],["dart.dom.html","dart:html",,W,{lq:function(){return window
+"12"},"+window":1,UE:function(a){if(P.F7()===!0)return"webkitTransitionEnd"
+else if(P.dg()===!0)return"oTransitionEnd"
+return"transitionend"},r3:function(a,b){return document.createElement(a)},It:function(a,b,c){return W.lt(a,null,null,b,null,null,null,c).ml(new W.Kx())},lt:function(a,b,c,d,e,f,g,h){var z,y,x,w
+z=W.fJ
+y=new P.Zf(P.Dt(z))
+H.VM(y,[z])
+x=new XMLHttpRequest()
+C.W3.xI(x,"GET",a,!0)
+z=C.fK.aM(x)
+w=new W.Ov(0,z.uv,z.Ph,W.aF(new W.bU(y,x)),z.Sg)
+H.VM(w,[H.W8(z,"RO",0)])
+w.Zz()
+w=C.MD.aM(x)
+z=y.gYJ()
+z=new W.Ov(0,w.uv,w.Ph,W.aF(z),w.Sg)
+H.VM(z,[H.W8(w,"RO",0)])
+z.Zz()
+x.send()
+return y.MM},ED:function(a){var z,y
+z=document.createElement("input",null)
+if(a!=null)try{J.Q3(z,a)}catch(y){H.Ru(y)}return z},H6:function(a,b,c,d,e,f,g,h,i,j,k,l,m,n,o){var z=document.createEvent("MouseEvent")
+J.e2(z,a,d,e,o,i,l,m,f,g,h,b,n,j,c,k)
+return z},uC:function(a){var z,y,x
+try{z=a
+y=J.x(z)
+return typeof z==="object"&&z!==null&&!!y.$iscS}catch(x){H.Ru(x)
+return!1}},uV:function(a){if(a==null)return
+return W.P1(a)},bt:function(a){var z,y
+if(a==null)return
+if("setInterval" in a){z=W.P1(a)
+y=J.x(z)
+if(typeof z==="object"&&z!==null&&!!y.$isD0)return z
+return}else return a},m7:function(a){return a},YT:function(a,b){return new W.vZ(a,b)},GO:function(a){return J.TD(a)},Yb:function(a){return J.W7(a)},Qp:function(a,b,c,d){return J.qd(a,b,c,d)},wi:function(a,b,c,d,e){var z,y,x,w,v,u,t,s,r,q
+z=J.Fb(d)
+if(z==null)throw H.b(new P.AT(d))
+y=z.prototype
+x=J.Dp(d,"created")
+if(x==null)throw H.b(new P.AT(H.d(d)+" has no constructor called 'created'"))
+J.ks(W.r3("article",null))
+w=z.$nativeSuperclassTag
+if(w==null)throw H.b(new P.AT(d))
+v=e==null
+if(v){if(!J.xC(w,"HTMLElement"))throw H.b(P.f("Class must provide extendsTag if base native class is not HTMLElement"))}else if(!(b.createElement(e) instanceof window[w]))throw H.b(P.f("extendsTag does not match base native class"))
+u=a[w]
+t={}
+t.createdCallback={value: ((function(invokeCallback) {
+ return function() {
+ return invokeCallback(this);
+ };
+ })(H.tR(W.YT(x,y),1)))}
+t.enteredViewCallback={value: ((function(invokeCallback) {
+ return function() {
+ return invokeCallback(this);
+ };
+ })(H.tR(W.V5,1)))}
+t.leftViewCallback={value: ((function(invokeCallback) {
+ return function() {
+ return invokeCallback(this);
+ };
+ })(H.tR(W.cn,1)))}
+t.attributeChangedCallback={value: ((function(invokeCallback) {
+ return function(arg1, arg2, arg3) {
+ return invokeCallback(this, arg1, arg2, arg3);
+ };
+ })(H.tR(W.A6,4)))}
+s=Object.create(u.prototype,t)
+r=H.Va(y)
+Object.defineProperty(s, init.dispatchPropertyName, {value: r, enumerable: false, writable: true, configurable: true})
+q={prototype: s}
+if(!J.xC(w,"HTMLElement"))if(!v)q.extends=e
+b.register(c,q)},aF:function(a){if(J.xC($.X3,C.NU))return a
+return $.X3.oj(a,!0)},qE:{"":"cv;","%":"HTMLAppletElement|HTMLBRElement|HTMLBaseFontElement|HTMLBodyElement|HTMLCanvasElement|HTMLContentElement|HTMLDListElement|HTMLDataListElement|HTMLDetailsElement|HTMLDialogElement|HTMLDirectoryElement|HTMLDivElement|HTMLFontElement|HTMLFrameElement|HTMLFrameSetElement|HTMLHRElement|HTMLHeadElement|HTMLHeadingElement|HTMLHtmlElement|HTMLMarqueeElement|HTMLMenuElement|HTMLModElement|HTMLOptGroupElement|HTMLParagraphElement|HTMLPreElement|HTMLQuoteElement|HTMLShadowElement|HTMLSpanElement|HTMLTableCaptionElement|HTMLTableCellElement|HTMLTableColElement|HTMLTableDataCellElement|HTMLTableElement|HTMLTableHeaderCellElement|HTMLTableRowElement|HTMLTableSectionElement|HTMLTitleElement|HTMLUListElement|HTMLUnknownElement;HTMLElement;Sa|GN|ir|Nr|uL|Vf|aC|tu|Be|Vc|i6|WZ|Fv|pv|I3|Vfx|qr|Dsd|Gk|tuj|Ds|Vct|pR|D13|hx|u7|WZq|St|pva|vj|cda|CX|Nh|ih|waa|F1|XP|NQ|V0|fI|V4|kK|V6|uw"},Yy:{"":"Gv;",$isList:true,
+$asWO:function(){return[W.M5]},
+$isqC:true,
+$iscX:true,
+$ascX:function(){return[W.M5]},
+"%":"EntryArray"},Ps:{"":"qE;cC:hash%,LU:href=,N:target=,r9:type%",
+bu:function(a){return a.toString()},
+"%":"HTMLAnchorElement"},fY:{"":"qE;cC:hash=,LU:href=,N:target=","%":"HTMLAreaElement"},nB:{"":"qE;LU:href=,N:target=","%":"HTMLBaseElement"},i3:{"":"ea;O3:url=","%":"BeforeLoadEvent"},Az:{"":"Gv;r9:type=",$isAz:true,"%":";Blob"},QW:{"":"qE;MB:form=,oc:name%,r9:type%,P:value%",
+r6:function(a,b){return this.value.call$1(b)},
+"%":"HTMLButtonElement"},OM:{"":"KV;Rn:data=,B:length=",$isGv:true,"%":"Comment;CharacterData"},QQ:{"":"ea;tT:code=","%":"CloseEvent"},y4:{"":"Mf;Rn:data=","%":"CompositionEvent"},oJ:{"":"BV;B:length=",
+T2:function(a,b){var z=a.getPropertyValue(b)
+return z!=null?z:""},
+hV:function(a,b,c,d){var z
+try{if(d==null)d=""
+a.setProperty(b,c,d)
+if(!!a.setAttribute)a.setAttribute(b,c)}catch(z){H.Ru(z)}},
+"%":"CSS2Properties|CSSStyleDeclaration|MSStyleCSSProperties"},DG:{"":"ea;",
+gey:function(a){var z=a._dartDetail
+if(z!=null)return z
+return P.o7(a.detail,!0)},
+$isDG:true,
+"%":"CustomEvent"},YN:{"":"KV;",
+JP:function(a){return a.createDocumentFragment()},
+Kb:function(a,b){return a.getElementById(b)},
+gEr:function(a){return C.mt.aM(a)},
+gVl:function(a){return C.T1.aM(a)},
+gLm:function(a){return C.io.aM(a)},
+Md:function(a,b){return W.vD(a.querySelectorAll(b),null)},
+Ja:function(a,b){return a.querySelector(b)},
+pr:function(a,b){return W.vD(a.querySelectorAll(b),null)},
+$isYN:true,
+"%":"Document|HTMLDocument|SVGDocument"},bA:{"":"KV;",
+Md:function(a,b){return W.vD(a.querySelectorAll(b),null)},
+Ja:function(a,b){return a.querySelector(b)},
+pr:function(a,b){return W.vD(a.querySelectorAll(b),null)},
+$isGv:true,
+"%":";DocumentFragment"},Wq:{"":"KV;",$isGv:true,"%":"DocumentType"},rv:{"":"Gv;G1:message=,oc:name=","%":";DOMError"},BK:{"":"Gv;G1:message=",
+goc:function(a){var z=a.name
+if(P.F7()===!0&&z==="SECURITY_ERR")return"SecurityError"
+if(P.F7()===!0&&z==="SYNTAX_ERR")return"SyntaxError"
+return z},
+"+name":0,
+bu:function(a){return a.toString()},
+"%":"DOMException"},cv:{"":"KV;xr:className%,jO:id%",
+gQg:function(a){return new W.E9(a)},
+Md:function(a,b){return W.vD(a.querySelectorAll(b),null)},
+Ja:function(a,b){return a.querySelector(b)},
+pr:function(a,b){return W.vD(a.querySelectorAll(b),null)},
+gDD:function(a){return new W.I4(a)},
+i4:function(a){},
+"+enteredView:0:0":0,
+Nz:function(a){},
+"+leftView:0:0":0,
+aC:function(a,b,c,d){},
+gjU:function(a){return a.localName},
+bu:function(a){return a.localName},
+WO:function(a,b){if(!!a.matches)return a.matches(b)
+else if(!!a.webkitMatchesSelector)return a.webkitMatchesSelector(b)
+else if(!!a.mozMatchesSelector)return a.mozMatchesSelector(b)
+else if(!!a.msMatchesSelector)return a.msMatchesSelector(b)
+else if(!!a.oMatchesSelector)return a.oMatchesSelector(b)
+else throw H.b(P.f("Not supported on this platform"))},
+bA:function(a,b){var z=a
+do{if(J.RF(z,b))return!0
+z=z.parentElement}while(z!=null)
+return!1},
+er:function(a){return(a.createShadowRoot||a.webkitCreateShadowRoot).call(a)},
+gKE:function(a){return a.shadowRoot||a.webkitShadowRoot},
+gI:function(a){return new W.DM(a,a)},
+gEr:function(a){return C.mt.f0(a)},
+gVl:function(a){return C.T1.f0(a)},
+gLm:function(a){return C.io.f0(a)},
+ZL:function(a){},
+$iscv:true,
+$isGv:true,
+"%":";Element"},Fs:{"":"qE;oc:name%,LA:src%,r9:type%","%":"HTMLEmbedElement"},SX:{"":"ea;kc:error=,G1:message=","%":"ErrorEvent"},ea:{"":"Gv;It:_selector},Xt:bubbles=,Ii:path=,r9:type=",
+gN:function(a){return W.bt(a.target)},
+$isea:true,
+"%":"AudioProcessingEvent|AutocompleteErrorEvent|BeforeUnloadEvent|CSSFontFaceLoadEvent|DeviceMotionEvent|DeviceOrientationEvent|HashChangeEvent|IDBVersionChangeEvent|MIDIConnectionEvent|MediaKeyNeededEvent|MediaStreamEvent|MediaStreamTrackEvent|MutationEvent|OfflineAudioCompletionEvent|OverflowEvent|PageTransitionEvent|PopStateEvent|RTCDTMFToneChangeEvent|RTCDataChannelEvent|RTCIceCandidateEvent|SecurityPolicyViolationEvent|SpeechInputEvent|SpeechRecognitionEvent|TrackEvent|WebGLContextEvent|WebKitAnimationEvent;Event"},D0:{"":"Gv;",
+gI:function(a){return new W.Jn(a)},
+On:function(a,b,c,d){return a.addEventListener(b,H.tR(c,1),d)},
+Y9:function(a,b,c,d){return a.removeEventListener(b,H.tR(c,1),d)},
+$isD0:true,
+"%":";EventTarget"},as:{"":"qE;MB:form=,oc:name%,r9:type=","%":"HTMLFieldSetElement"},T5:{"":"Az;oc:name=",$isT5:true,"%":"File"},Aa:{"":"rv;tT:code=","%":"FileError"},Yu:{"":"qE;B:length=,bP:method=,oc:name%,N:target=","%":"HTMLFormElement"},xn:{"":"ec;",
+gB:function(a){return a.length},
+"+length":0,
+t:function(a,b){var z=a.length
+if(b>>>0!==b||b>=z)throw H.b(P.TE(b,0,z))
+return a[b]},
+"+[]:1:0":0,
+u:function(a,b,c){throw H.b(P.f("Cannot assign element of immutable List."))},
+"+[]=:2:0":0,
+sB:function(a,b){throw H.b(P.f("Cannot resize immutable List."))},
+"+length=":0,
+grZ:function(a){var z=a.length
+if(z>0)return a[z-1]
+throw H.b(new P.lj("No elements"))},
+Zv:function(a,b){if(b>>>0!==b||b>=a.length)throw H.e(a,b)
+return a[b]},
+$asWO:function(){return[W.KV]},
+$ascX:function(){return[W.KV]},
+$isList:true,
+$isqC:true,
+$iscX:true,
+$isXj:true,
+"%":"HTMLCollection|HTMLFormControlsCollection|HTMLOptionsCollection"},fJ:{"":"Vi;iC:responseText=,ys:status=,po:statusText=",
+R3:function(a,b,c,d,e,f){return a.open(b,c,d,f,e)},
+xI:function(a,b,c,d){return a.open(b,c,d)},
+wR:function(a,b){return a.send(b)},
+$isfJ:true,
+"%":"XMLHttpRequest"},Vi:{"":"D0;","%":";XMLHttpRequestEventTarget"},tX:{"":"qE;oc:name%,LA:src%","%":"HTMLIFrameElement"},Sg:{"":"Gv;Rn:data=",$isSg:true,"%":"ImageData"},pA:{"":"qE;LA:src%",
+tZ:function(a){return this.complete.call$0()},
+oo:function(a,b){return this.complete.call$1(b)},
+"%":"HTMLImageElement"},Mi:{"":"qE;Tq:checked%,MB:form=,qC:list=,oc:name%,LA:src%,r9:type%,P:value%",
+RR:function(a,b){return this.accept.call$1(b)},
+r6:function(a,b){return this.value.call$1(b)},
+$isMi:true,
+$iscv:true,
+$isGv:true,
+$isKV:true,
+$isD0:true,
+"%":"HTMLInputElement"},Gt:{"":"Mf;mW:location=","%":"KeyboardEvent"},In:{"":"qE;MB:form=,oc:name%,r9:type=","%":"HTMLKeygenElement"},Gx:{"":"qE;P:value%",
+r6:function(a,b){return this.value.call$1(b)},
+"%":"HTMLLIElement"},eP:{"":"qE;MB:form=","%":"HTMLLabelElement"},AL:{"":"qE;MB:form=","%":"HTMLLegendElement"},Og:{"":"qE;LU:href=,r9:type%",$isOg:true,"%":"HTMLLinkElement"},cS:{"":"Gv;cC:hash%,LU:href=",
+bu:function(a){return a.toString()},
+$iscS:true,
+"%":"Location"},M6:{"":"qE;oc:name%","%":"HTMLMapElement"},El:{"":"qE;kc:error=,LA:src%",
+yy:function(a){return a.pause()},
+"%":"HTMLAudioElement|HTMLMediaElement|HTMLVideoElement"},zm:{"":"Gv;tT:code=","%":"MediaError"},SV:{"":"Gv;tT:code=","%":"MediaKeyError"},aB:{"":"ea;G1:message=","%":"MediaKeyEvent"},ku:{"":"ea;G1:message=","%":"MediaKeyMessageEvent"},cW:{"":"D0;jO:id=","%":"MediaStream"},cx:{"":"ea;",
+gRn:function(a){return P.o7(a.data,!0)},
+gFF:function(a){return W.bt(a.source)},
+"+source":0,
+$iscx:true,
+"%":"MessageEvent"},la:{"":"qE;jb:content=,oc:name%","%":"HTMLMetaElement"},Vn:{"":"qE;P:value%",
+r6:function(a,b){return this.value.call$1(b)},
+"%":"HTMLMeterElement"},Hw:{"":"ea;Rn:data=","%":"MIDIMessageEvent"},bn:{"":"Im;",
+LV:function(a,b,c){return a.send(b,c)},
+wR:function(a,b){return a.send(b)},
+"%":"MIDIOutput"},Im:{"":"D0;jO:id=,oc:name=,r9:type=","%":"MIDIInput;MIDIPort"},Aj:{"":"Mf;",
+nH:function(a,b,c,d,e,f,g,h,i,j,k,l,m,n,o,p){a.initMouseEvent(b,c,d,e,f,g,h,i,j,k,l,m,n,o,W.m7(p))
+return},
+$isAj:true,
+"%":"DragEvent|MSPointerEvent|MouseEvent|MouseScrollEvent|MouseWheelEvent|PointerEvent|WheelEvent"},oU:{"":"Gv;",$isGv:true,"%":"Navigator"},qT:{"":"Gv;G1:message=,oc:name=","%":"NavigatorUserMediaError"},KV:{"":"D0;q6:firstChild=,uD:nextSibling=,M0:ownerDocument=,eT:parentElement=,KV:parentNode=,a4:textContent}",
+gyT:function(a){return new W.e7(a)},
+wg:function(a){var z=a.parentNode
+if(z!=null)z.removeChild(a)},
+bu:function(a){var z=a.nodeValue
+return z==null?J.Gv.prototype.bu.call(this,a):z},
+jx:function(a,b){return a.appendChild(b)},
+Yv:function(a,b){return a.cloneNode(b)},
+tg:function(a,b){return a.contains(b)},
+mK:function(a,b,c){return a.insertBefore(b,c)},
+$isKV:true,
+"%":"Entity|Notation;Node"},BH:{"":"rl;",
+gB:function(a){return a.length},
+"+length":0,
+t:function(a,b){var z=a.length
+if(b>>>0!==b||b>=z)throw H.b(P.TE(b,0,z))
+return a[b]},
+"+[]:1:0":0,
+u:function(a,b,c){throw H.b(P.f("Cannot assign element of immutable List."))},
+"+[]=:2:0":0,
+sB:function(a,b){throw H.b(P.f("Cannot resize immutable List."))},
+"+length=":0,
+grZ:function(a){var z=a.length
+if(z>0)return a[z-1]
+throw H.b(new P.lj("No elements"))},
+Zv:function(a,b){if(b>>>0!==b||b>=a.length)throw H.e(a,b)
+return a[b]},
+$asWO:function(){return[W.KV]},
+$ascX:function(){return[W.KV]},
+$isList:true,
+$isqC:true,
+$iscX:true,
+$isXj:true,
+"%":"NodeList|RadioNodeList"},mh:{"":"qE;r9:type%","%":"HTMLOListElement"},G7:{"":"qE;Rn:data=,MB:form=,oc:name%,r9:type%","%":"HTMLObjectElement"},Ql:{"":"qE;MB:form=,vH:index=,P:value%",
+r6:function(a,b){return this.value.call$1(b)},
+$isQl:true,
+"%":"HTMLOptionElement"},Xp:{"":"qE;MB:form=,oc:name%,r9:type=,P:value%",
+r6:function(a,b){return this.value.call$1(b)},
+"%":"HTMLOutputElement"},HD:{"":"qE;oc:name%,P:value%",
+r6:function(a,b){return this.value.call$1(b)},
+"%":"HTMLParamElement"},p3:{"":"Gv;tT:code=,G1:message=","%":"PositionError"},qW:{"":"OM;N:target=","%":"ProcessingInstruction"},KR:{"":"qE;P:value%",
+r6:function(a,b){return this.value.call$1(b)},
+"%":"HTMLProgressElement"},ew:{"":"ea;",$isew:true,"%":"XMLHttpRequestProgressEvent;ProgressEvent"},bX:{"":"ew;O3:url=","%":"ResourceProgressEvent"},j2:{"":"qE;LA:src%,r9:type%",$isj2:true,"%":"HTMLScriptElement"},lp:{"":"qE;MB:form=,B:length%,oc:name%,ig:selectedIndex%,r9:type=,P:value%",
+r6:function(a,b){return this.value.call$1(b)},
+$islp:true,
+"%":"HTMLSelectElement"},I0:{"":"bA;pQ:applyAuthorStyles=",
+Yv:function(a,b){return a.cloneNode(b)},
+Kb:function(a,b){return a.getElementById(b)},
+$isI0:true,
+"%":"ShadowRoot"},QR:{"":"qE;LA:src%,r9:type%","%":"HTMLSourceElement"},zD:{"":"ea;kc:error=,G1:message=","%":"SpeechRecognitionError"},G0:{"":"ea;oc:name=","%":"SpeechSynthesisEvent"},wb:{"":"ea;G3:key=,zZ:newValue=,jL:oldValue=,O3:url=","%":"StorageEvent"},fq:{"":"qE;r9:type%","%":"HTMLStyleElement"},yY:{"":"qE;jb:content=",$isyY:true,"%":"HTMLTemplateElement"},kJ:{"":"OM;",$iskJ:true,"%":"CDATASection|Text"},AE:{"":"qE;MB:form=,oc:name%,r9:type=,P:value%",
+r6:function(a,b){return this.value.call$1(b)},
+$isAE:true,
+"%":"HTMLTextAreaElement"},xV:{"":"Mf;Rn:data=","%":"TextEvent"},RH:{"":"qE;fY:kind%,LA:src%","%":"HTMLTrackElement"},Lq:{"":"ea;",$isLq:true,"%":"TransitionEvent|WebKitTransitionEvent"},Mf:{"":"ea;","%":"FocusEvent|SVGZoomEvent|TouchEvent;UIEvent"},K5:{"":"D0;oc:name%,ys:status=",
+gmW:function(a){var z=a.location
+if(W.uC(z)===!0)return z
+if(null==a._location_wrapper)a._location_wrapper=new W.H2(z)
+return a._location_wrapper},
+oB:function(a,b){return a.requestAnimationFrame(H.tR(b,1))},
+pl:function(a){if(!!(a.requestAnimationFrame&&a.cancelAnimationFrame))return
+ (function($this) {
+ var vendors = ['ms', 'moz', 'webkit', 'o'];
+ for (var i = 0; i < vendors.length && !$this.requestAnimationFrame; ++i) {
+ $this.requestAnimationFrame = $this[vendors[i] + 'RequestAnimationFrame'];
+ $this.cancelAnimationFrame =
+ $this[vendors[i]+'CancelAnimationFrame'] ||
+ $this[vendors[i]+'CancelRequestAnimationFrame'];
+ }
+ if ($this.requestAnimationFrame && $this.cancelAnimationFrame) return;
+ $this.requestAnimationFrame = function(callback) {
+ return window.setTimeout(function() {
+ callback(Date.now());
+ }, 16 /* 16ms ~= 60fps */);
+ };
+ $this.cancelAnimationFrame = function(id) { clearTimeout(id); }
+ })(a)},
+geT:function(a){return W.uV(a.parent)},
+cO:function(a){return a.close()},
+xc:function(a,b,c,d){a.postMessage(P.bL(b),c)
+return},
+X6:function(a,b,c){return this.xc(a,b,c,null)},
+bu:function(a){return a.toString()},
+gEr:function(a){return C.mt.aM(a)},
+gVl:function(a){return C.T1.aM(a)},
+gLm:function(a){return C.io.aM(a)},
+$isK5:true,
+$isGv:true,
+$isD0:true,
+"%":"DOMWindow|Window"},UM:{"":"KV;oc:name=,P:value%",
+r6:function(a,b){return this.value.call$1(b)},
+"%":"Attr"},rh:{"":"ma;",
+gB:function(a){return a.length},
+"+length":0,
+t:function(a,b){var z=a.length
+if(b>>>0!==b||b>=z)throw H.b(P.TE(b,0,z))
+return a[b]},
+"+[]:1:0":0,
+u:function(a,b,c){throw H.b(P.f("Cannot assign element of immutable List."))},
+"+[]=:2:0":0,
+sB:function(a,b){throw H.b(P.f("Cannot resize immutable List."))},
+"+length=":0,
+grZ:function(a){var z=a.length
+if(z>0)return a[z-1]
+throw H.b(new P.lj("No elements"))},
+Zv:function(a,b){if(b>>>0!==b||b>=a.length)throw H.e(a,b)
+return a[b]},
+$asWO:function(){return[W.KV]},
+$ascX:function(){return[W.KV]},
+$isList:true,
+$isqC:true,
+$iscX:true,
+$isXj:true,
+"%":"MozNamedAttrMap|NamedNodeMap"},QZ:{"":"a;",
+Wt:function(a,b){return typeof console!="undefined"?console.error(b):null},
+"+error:1:0":0,
+gkc:function(a){return new P.C7(this,W.QZ.prototype.Wt,a,"Wt")},
+To:function(a){return typeof console!="undefined"?console.info(a):null},
+ZF:function(a,b){return typeof console!="undefined"?console.trace(b):null},
+"+trace:1:0":0,
+gtN:function(a){return new P.C7(this,W.QZ.prototype.ZF,a,"ZF")},
+static:{"":"wk",}},BV:{"":"Gv+E1;"},E1:{"":"a;",
+gjb:function(a){return this.T2(a,"content")},
+gBb:function(a){return this.T2(a,"left")},
+gT8:function(a){return this.T2(a,"right")},
+gLA:function(a){return this.T2(a,"src")},
+"+src":0,
+sLA:function(a,b){this.hV(a,"src",b,"")},
+"+src=":0},wz:{"":"ar;Sn,Sc",
+gB:function(a){return this.Sn.length},
+"+length":0,
+t:function(a,b){var z=this.Sn
+if(b>>>0!==b||b>=z.length)throw H.e(z,b)
+return z[b]},
+"+[]:1:0":0,
+u:function(a,b,c){throw H.b(P.f("Cannot modify list"))},
+"+[]=:2:0":0,
+sB:function(a,b){throw H.b(P.f("Cannot modify list"))},
+"+length=":0,
+grZ:function(a){return C.t5.grZ(this.Sn)},
+gDD:function(a){return W.or(this.Sc)},
+gEr:function(a){return C.mt.Uh(this)},
+gVl:function(a){return C.T1.Uh(this)},
+gLm:function(a){return C.io.Uh(this)},
+nJ:function(a,b){var z=C.t5.ev(this.Sn,new W.B1())
+this.Sc=P.F(z,!0,H.W8(z,"mW",0))},
+$asar:null,
+$asWO:null,
+$ascX:null,
+$isList:true,
+$isqC:true,
+$iscX:true,
+static:{vD:function(a,b){var z=new W.wz(a,null)
+H.VM(z,[b])
+z.nJ(a,b)
+return z}}},B1:{"":"Tp;",
+call$1:function(a){var z=J.x(a)
+return typeof a==="object"&&a!==null&&!!z.$iscv},
+"+call:1:0":0,
+$isEH:true,
+$is_HB:true,
+$is_Dv:true},M5:{"":"Gv;"},Jn:{"":"a;WK<",
+t:function(a,b){var z=new W.RO(this.gWK(),b,!1)
+z.$builtinTypeInfo=[null]
+return z},
+"+[]:1:0":0},DM:{"":"Jn;WK<,vW",
+t:function(a,b){var z,y
+z=$.Vp()
+y=J.rY(b)
+if(z.gvc(z).Fb.x4(y.hc(b))){if($.PN==null){if($.L4==null){z=window.navigator.userAgent
+z.toString
+z.length
+$.L4=H.m2(z,"Opera",0)}if($.L4!==!0){z=window.navigator.userAgent
+z.toString
+z.length
+z=H.m2(z,"WebKit",0)}else z=!1
+$.PN=z}if($.PN===!0){z=$.Vp()
+y=new W.eu(this.WK,z.t(z,y.hc(b)),!1)
+y.$builtinTypeInfo=[null]
+return y}}z=new W.eu(this.WK,b,!1)
+z.$builtinTypeInfo=[null]
+return z},
+"+[]:1:0":0,
+static:{"":"fD",}},zL:{"":"Gv+lD;",$isList:true,$asWO:null,$isqC:true,$iscX:true,$ascX:null},ec:{"":"zL+Gm;",$asWO:null,$ascX:null,$isList:true,$isqC:true,$iscX:true},Kx:{"":"Tp;",
+call$1:function(a){return J.EC(a)},
+"+call:1:0":0,
+$isEH:true,
+$is_HB:true,
+$is_Dv:true},iO:{"":"Tp;a",
+call$2:function(a,b){this.a.setRequestHeader(a,b)},
+"+call:2:0":0,
+$isEH:true,
+$is_bh:true},bU:{"":"Tp;b,c",
+call$1:function(a){var z,y,x
+z=this.c
+y=z.status
+if(typeof y!=="number")throw y.F()
+y=y>=200&&y<300||y===0||y===304
+x=this.b
+if(y){y=x.MM
+if(y.Gv!==0)H.vh(new P.lj("Future already completed"))
+y.OH(z)}else x.pm(a)},
+"+call:1:0":0,
+$isEH:true,
+$is_HB:true,
+$is_Dv:true},e7:{"":"ar;NL",
+grZ:function(a){var z=this.NL.lastChild
+if(z==null)throw H.b(new P.lj("No elements"))
+return z},
+h:function(a,b){this.NL.appendChild(b)},
+Rz:function(a,b){var z=J.x(b)
+if(typeof b!=="object"||b===null||!z.$isKV)return!1
+z=this.NL
+if(z!==b.parentNode)return!1
+z.removeChild(b)
+return!0},
+u:function(a,b,c){var z,y
+z=this.NL
+y=z.childNodes
+if(b>>>0!==b||b>=y.length)throw H.e(y,b)
+z.replaceChild(c,y[b])},
+"+[]=:2:0":0,
+gA:function(a){return C.t5.gA(this.NL.childNodes)},
+YW:function(a,b,c,d,e){throw H.b(P.f("Cannot setRange on Node list"))},
+gB:function(a){return this.NL.childNodes.length},
+"+length":0,
+sB:function(a,b){throw H.b(P.f("Cannot set length on immutable List."))},
+"+length=":0,
+t:function(a,b){var z=this.NL.childNodes
+if(b>>>0!==b||b>=z.length)throw H.e(z,b)
+return z[b]},
+"+[]:1:0":0,
+$asar:function(){return[W.KV]},
+$asWO:function(){return[W.KV]},
+$ascX:function(){return[W.KV]}},nj:{"":"Gv+lD;",$isList:true,$asWO:null,$isqC:true,$iscX:true,$ascX:null},rl:{"":"nj+Gm;",$asWO:null,$ascX:null,$isList:true,$isqC:true,$iscX:true},RAp:{"":"Gv+lD;",$isList:true,$asWO:null,$isqC:true,$iscX:true,$ascX:null},ma:{"":"RAp+Gm;",$asWO:null,$ascX:null,$isList:true,$isqC:true,$iscX:true},cf:{"":"a;",
+PF:function(a){var z,y
+for(z=this.gUQ(this),y=new H.a7(z,z.length,0,null),H.VM(y,[H.W8(z,"Q",0)]);y.G(););return!1},
+"+containsValue:1:0":0,
+to:function(a,b){if(this.x4(a)!==!0)this.u(this,a,b.call$0())
+return this.t(this,a)},
+aN:function(a,b){var z,y,x
+for(z=this.gvc(this),y=new H.a7(z,z.length,0,null),H.VM(y,[H.W8(z,"Q",0)]);y.G();){x=y.mD
+b.call$2(x,this.t(this,x))}},
+gvc:function(a){var z,y,x,w
+z=this.MW.attributes
+y=P.A(null,J.O)
+H.VM(y,[J.O])
+for(x=z.length,w=0;w<x;++w){if(w>=z.length)throw H.e(z,w)
+if(this.mb(z[w])){if(w>=z.length)throw H.e(z,w)
+y.push(J.DA(z[w]))}}return y},
+"+keys":0,
+gUQ:function(a){var z,y,x,w
+z=this.MW.attributes
+y=P.A(null,J.O)
+H.VM(y,[J.O])
+for(x=z.length,w=0;w<x;++w){if(w>=z.length)throw H.e(z,w)
+if(this.mb(z[w])){if(w>=z.length)throw H.e(z,w)
+y.push(J.Vm(z[w]))}}return y},
+"+values":0,
+gl0:function(a){return this.gB(this)===0},
+"+isEmpty":0,
+gor:function(a){return this.gB(this)!==0},
+"+isNotEmpty":0,
+$isL8:true,
+$asL8:function(){return[J.O,J.O]}},E9:{"":"cf;MW",
+x4:function(a){return this.MW.hasAttribute(a)},
+"+containsKey:1:0":0,
+t:function(a,b){return this.MW.getAttribute(b)},
+"+[]:1:0":0,
+u:function(a,b,c){this.MW.setAttribute(b,c)},
+"+[]=:2:0":0,
+Rz:function(a,b){var z,y
+z=this.MW
+y=z.getAttribute(b)
+z.removeAttribute(b)
+return y},
+gB:function(a){return this.gvc(this).length},
+"+length":0,
+mb:function(a){return a.namespaceURI==null}},nF:{"":"As;QX,Kd",
+lF:function(){var z,y
+z=P.Ls(null,null,null,J.O)
+y=this.Kd
+y.aN(y,new W.Si(z))
+return z},
+p5:function(a){var z,y,x
+z=C.Nm.zV(P.F(a,!0,null)," ")
+for(y=this.QX,x=new H.a7(y,y.length,0,null),H.VM(x,[H.W8(y,"Q",0)]);x.G();)J.Pw(x.mD,z)},
+OS:function(a){var z=this.Kd
+z.aN(z,new W.vf(a))},
+Rz:function(a,b){return this.xz(new W.Fc(b))},
+xz:function(a){var z=this.Kd
+return z.es(z,!1,new W.hD(a))},
+yJ:function(a){var z=new H.A8(P.F(this.QX,!0,null),new W.FK())
+H.VM(z,[null,null])
+this.Kd=z},
+static:{or:function(a){var z=new W.nF(a,null)
+z.yJ(a)
+return z}}},FK:{"":"Tp;",
+call$1:function(a){return new W.I4(a)},
+"+call:1:0":0,
+$isEH:true,
+$is_HB:true,
+$is_Dv:true},Si:{"":"Tp;a",
+call$1:function(a){var z=this.a
+return z.Ay(z,a.lF())},
+"+call:1:0":0,
+$isEH:true,
+$is_HB:true,
+$is_Dv:true},vf:{"":"Tp;a",
+call$1:function(a){return a.OS(this.a)},
+"+call:1:0":0,
+$isEH:true,
+$is_HB:true,
+$is_Dv:true},Fc:{"":"Tp;a",
+call$1:function(a){return J.V1(a,this.a)},
+"+call:1:0":0,
+$isEH:true,
+$is_HB:true,
+$is_Dv:true},hD:{"":"Tp;a",
+call$2:function(a,b){return this.a.call$1(b)===!0||a===!0},
+"+call:2:0":0,
+$isEH:true,
+$is_bh:true},I4:{"":"As;MW",
+lF:function(){var z,y,x,w
+z=P.Ls(null,null,null,J.O)
+for(y=J.uf(this.MW).split(" "),x=new H.a7(y,y.length,0,null),H.VM(x,[H.W8(y,"Q",0)]);x.G();){w=J.rr(x.mD)
+if(w.length!==0)z.h(z,w)}return z},
+p5:function(a){P.F(a,!0,null)
+J.Pw(this.MW,a.zV(a," "))}},e0:{"":"a;Ph",
+zc:function(a,b){var z=new W.RO(a,this.Ph,b)
+H.VM(z,[null])
+return z},
+aM:function(a){return this.zc(a,!1)},
+Qm:function(a,b){var z=new W.eu(a,this.Ph,b)
+H.VM(z,[null])
+return z},
+f0:function(a){return this.Qm(a,!1)},
+nq:function(a,b){var z=new W.pu(a,b,this.Ph)
+H.VM(z,[null])
+return z},
+Uh:function(a){return this.nq(a,!1)}},RO:{"":"qh;uv,Ph,Sg",
+KR:function(a,b,c,d){var z=new W.Ov(0,this.uv,this.Ph,W.aF(a),this.Sg)
+H.VM(z,[H.W8(this,"RO",0)])
+z.Zz()
+return z},
+zC:function(a,b,c){return this.KR(a,null,b,c)},
+yI:function(a){return this.KR(a,null,null,null)},
+$asqh:null},eu:{"":"RO;uv,Ph,Sg",
+WO:function(a,b){var z,y
+z=new P.nO(new W.ie(b),this)
+H.VM(z,[H.W8(this,"qh",0)])
+y=new P.t3(new W.Ea(b),z)
+H.VM(y,[H.W8(z,"qh",0),null])
+return y},
+$asRO:null,
+$asqh:null,
+$isqh:true},ie:{"":"Tp;a",
+call$1:function(a){return J.eI(J.l2(a),this.a)},
+"+call:1:0":0,
+$isEH:true,
+$is_HB:true,
+$is_Dv:true},Ea:{"":"Tp;b",
+call$1:function(a){J.og(a,this.b)
+return a},
+"+call:1:0":0,
+$isEH:true,
+$is_HB:true,
+$is_Dv:true},pu:{"":"qh;AF,Sg,Ph",
+WO:function(a,b){var z,y
+z=new P.nO(new W.i2(b),this)
+H.VM(z,[H.W8(this,"qh",0)])
+y=new P.t3(new W.b0(b),z)
+H.VM(y,[H.W8(z,"qh",0),null])
+return y},
+KR:function(a,b,c,d){var z,y,x,w,v
+z=W.Lu(null)
+for(y=this.AF,y=y.gA(y),x=this.Ph,w=this.Sg;y.G();){v=new W.RO(y.mD,x,w)
+v.$builtinTypeInfo=[null]
+z.h(z,v)}y=z.aV
+y.toString
+x=new P.Ik(y)
+H.VM(x,[H.W8(y,"WV",0)])
+return x.KR(a,b,c,d)},
+zC:function(a,b,c){return this.KR(a,null,b,c)},
+yI:function(a){return this.KR(a,null,null,null)},
+$asqh:null,
+$isqh:true},i2:{"":"Tp;a",
+call$1:function(a){return J.eI(J.l2(a),this.a)},
+"+call:1:0":0,
+$isEH:true,
+$is_HB:true,
+$is_Dv:true},b0:{"":"Tp;b",
+call$1:function(a){J.og(a,this.b)
+return a},
+"+call:1:0":0,
+$isEH:true,
+$is_HB:true,
+$is_Dv:true},Ov:{"":"MO;VP,uv,Ph,u7,Sg",
+ed:function(){if(this.uv==null)return
+this.Ns()
+this.uv=null
+this.u7=null},
+nB:function(a,b){if(this.uv==null)return
+this.VP=this.VP+1
+this.Ns()},
+yy:function(a){return this.nB(a,null)},
+QE:function(){if(this.uv==null||this.VP<=0)return
+this.VP=this.VP-1
+this.Zz()},
+Zz:function(){var z=this.u7
+if(z!=null&&this.VP<=0)J.qV(this.uv,this.Ph,z,this.Sg)},
+Ns:function(){var z=this.u7
+if(z!=null)J.GJ(this.uv,this.Ph,z,this.Sg)},
+$asMO:null},qO:{"":"a;aV,eM",
+h:function(a,b){var z,y
+z=this.eM
+if(z.x4(b))return
+y=this.aV
+z.u(z,b,b.zC(y.ght(y),new W.RX(this,b),y.gGj()))},
+Rz:function(a,b){var z,y
+z=this.eM
+y=z.Rz(z,b)
+if(y!=null)y.ed()},
+cO:function(a){var z,y,x
+for(z=this.eM,y=z.gUQ(z),x=y.Kw,x=x.gA(x),x=new H.MH(null,x,y.ew),H.VM(x,[H.W8(y,"i1",0),H.W8(y,"i1",1)]);x.G();)x.mD.ed()
+z.V1(z)
+z=this.aV
+z.cO(z)},
+gJK:function(a){return new H.YP(this,W.qO.prototype.cO,a,"cO")},
+KS:function(a){this.aV=P.bK(this.gJK(this),null,!0,a)},
+static:{Lu:function(a){var z=new W.qO(null,P.L5(null,null,null,[P.qh,a],[P.MO,a]))
+H.VM(z,[a])
+z.KS(a)
+return z}}},RX:{"":"Tp;a,b",
+call$0:function(){var z=this.a
+return z.Rz(z,this.b)},
+"+call:0:0":0,
+$isEH:true,
+$is_X0:true},kG:{"":"a;bG",
+cN:function(a){return this.bG.call$1(a)},
+zc:function(a,b){var z=new W.RO(a,this.cN(a),b)
+H.VM(z,[null])
+return z},
+aM:function(a){return this.zc(a,!1)},
+Qm:function(a,b){var z=new W.eu(a,this.cN(a),b)
+H.VM(z,[null])
+return z},
+f0:function(a){return this.Qm(a,!1)},
+nq:function(a,b){var z=new W.pu(a,b,this.cN(a))
+H.VM(z,[null])
+return z},
+Uh:function(a){return this.nq(a,!1)}},Gm:{"":"a;",
+gA:function(a){return W.yB(a,H.W8(a,"Gm",0))},
+h:function(a,b){throw H.b(P.f("Cannot add to immutable List."))},
+Rz:function(a,b){throw H.b(P.f("Cannot remove from immutable List."))},
+YW:function(a,b,c,d,e){throw H.b(P.f("Cannot setRange on immutable List."))},
+$isList:true,
+$asWO:null,
+$isqC:true,
+$iscX:true,
+$ascX:null},W9:{"":"a;nj,vN,Nq,QZ",
+G:function(){var z,y
+z=this.Nq+1
+y=this.vN
+if(z<y){this.QZ=J.UQ(this.nj,z)
+this.Nq=z
+return!0}this.QZ=null
+this.Nq=y
+return!1},
+gl:function(){return this.QZ},
+"+current":0,
+static:{yB:function(a,b){var z=new W.W9(a,J.q8(a),-1,null)
+H.VM(z,[b])
+return z}}},vZ:{"":"Tp;a,b",
+call$1:function(a){var z=H.Va(this.b)
+Object.defineProperty(a, init.dispatchPropertyName, {value: z, enumerable: false, writable: true, configurable: true})
+return this.a(a)},
+"+call:1:0":0,
+$isEH:true,
+$is_HB:true,
+$is_Dv:true},dW:{"":"a;Ui",
+gmW:function(a){return W.zX(this.Ui.location)},
+geT:function(a){return W.P1(this.Ui.parent)},
+cO:function(a){return this.Ui.close()},
+xc:function(a,b,c,d){this.Ui.postMessage(b,c)},
+X6:function(a,b,c){return this.xc(a,b,c,null)},
+$isD0:true,
+$isGv:true,
+static:{P1:function(a){if(a===window)return a
+else return new W.dW(a)}}},PA:{"":"a;mf",static:{zX:function(a){if(a===C.ol.gmW(window))return a
+else return new W.PA(a)}}},H2:{"":"a;WK",
+gcC:function(a){return this.WK.hash},
+"+hash":0,
+scC:function(a,b){this.WK.hash=b},
+"+hash=":0,
+gLU:function(a){return this.WK.href},
+bu:function(a){return this.WK.toString()},
+$iscS:true,
+$isGv:true}}],["dart.dom.indexed_db","dart:indexed_db",,P,{hF:{"":"Gv;",$ishF:true,"%":"IDBKeyRange"}}],["dart.dom.svg","dart:svg",,P,{HB:{"":"zp;N:target=,LU:href=",$isGv:true,"%":"SVGAElement"},ZJ:{"":"Eo;LU:href=",$isGv:true,"%":"SVGAltGlyphElement"},ui:{"":"MB;",$isGv:true,"%":"SVGAnimateColorElement|SVGAnimateElement|SVGAnimateMotionElement|SVGAnimateTransformElement|SVGAnimationElement|SVGSetElement"},D6:{"":"zp;",$isGv:true,"%":"SVGCircleElement"},DQ:{"":"zp;",$isGv:true,"%":"SVGClipPathElement"},Sm:{"":"zp;",$isGv:true,"%":"SVGDefsElement"},es:{"":"zp;",$isGv:true,"%":"SVGEllipseElement"},eG:{"":"MB;",$isGv:true,"%":"SVGFEBlendElement"},lv:{"":"MB;r9:type=,UQ:values=",$isGv:true,"%":"SVGFEColorMatrixElement"},pf:{"":"MB;",$isGv:true,"%":"SVGFEComponentTransferElement"},NV:{"":"MB;kp:operator=",$isGv:true,"%":"SVGFECompositeElement"},W1:{"":"MB;",$isGv:true,"%":"SVGFEConvolveMatrixElement"},zo:{"":"MB;",$isGv:true,"%":"SVGFEDiffuseLightingElement"},wf:{"":"MB;",$isGv:true,"%":"SVGFEDisplacementMapElement"},bb:{"":"MB;",$isGv:true,"%":"SVGFEFloodElement"},tk:{"":"MB;",$isGv:true,"%":"SVGFEGaussianBlurElement"},me:{"":"MB;LU:href=",$isGv:true,"%":"SVGFEImageElement"},qN:{"":"MB;",$isGv:true,"%":"SVGFEMergeElement"},d4:{"":"MB;kp:operator=",$isGv:true,"%":"SVGFEMorphologyElement"},MI:{"":"MB;",$isGv:true,"%":"SVGFEOffsetElement"},xX:{"":"MB;",$isGv:true,"%":"SVGFESpecularLightingElement"},um:{"":"MB;",$isGv:true,"%":"SVGFETileElement"},Fu:{"":"MB;r9:type=",$isGv:true,"%":"SVGFETurbulenceElement"},OE:{"":"MB;LU:href=",$isGv:true,"%":"SVGFilterElement"},l6:{"":"zp;",$isGv:true,"%":"SVGForeignObjectElement"},BA:{"":"zp;",$isGv:true,"%":"SVGGElement"},zp:{"":"MB;",$isGv:true,"%":";SVGGraphicsElement"},rE:{"":"zp;LU:href=",$isGv:true,"%":"SVGImageElement"},CC:{"":"zp;",$isGv:true,"%":"SVGLineElement"},uz:{"":"MB;",$isGv:true,"%":"SVGMarkerElement"},Yd:{"":"MB;",$isGv:true,"%":"SVGMaskElement"},AD:{"":"zp;",$isGv:true,"%":"SVGPathElement"},Gr:{"":"MB;LU:href=",$isGv:true,"%":"SVGPatternElement"},tc:{"":"zp;",$isGv:true,"%":"SVGPolygonElement"},GH:{"":"zp;",$isGv:true,"%":"SVGPolylineElement"},NJ:{"":"zp;",$isGv:true,"%":"SVGRectElement"},nd:{"":"MB;r9:type%,LU:href=",$isGv:true,"%":"SVGScriptElement"},EU:{"":"MB;r9:type%","%":"SVGStyleElement"},MB:{"":"cv;",
+gDD:function(a){if(a._cssClassSet==null)a._cssClassSet=new P.O7(a)
+return a._cssClassSet},
+"%":"SVGAltGlyphDefElement|SVGAltGlyphItemElement|SVGComponentTransferFunctionElement|SVGDescElement|SVGFEDistantLightElement|SVGFEFuncAElement|SVGFEFuncBElement|SVGFEFuncGElement|SVGFEFuncRElement|SVGFEMergeNodeElement|SVGFEPointLightElement|SVGFESpotLightElement|SVGFontElement|SVGFontFaceElement|SVGFontFaceFormatElement|SVGFontFaceNameElement|SVGFontFaceSrcElement|SVGFontFaceUriElement|SVGGlyphElement|SVGHKernElement|SVGMetadataElement|SVGMissingGlyphElement|SVGStopElement|SVGTitleElement|SVGVKernElement;SVGElement"},hy:{"":"zp;",
+Kb:function(a,b){return a.getElementById(b)},
+$ishy:true,
+$isGv:true,
+"%":"SVGSVGElement"},r8:{"":"zp;",$isGv:true,"%":"SVGSwitchElement"},aS:{"":"MB;",$isGv:true,"%":"SVGSymbolElement"},qF:{"":"zp;",$isGv:true,"%":";SVGTextContentElement"},Rk:{"":"qF;bP:method=,LU:href=",$isGv:true,"%":"SVGTextPathElement"},Eo:{"":"qF;","%":"SVGTSpanElement|SVGTextElement;SVGTextPositioningElement"},UD:{"":"zp;LU:href=",$isGv:true,"%":"SVGUseElement"},ZD:{"":"MB;",$isGv:true,"%":"SVGViewElement"},wD:{"":"MB;LU:href=",$isGv:true,"%":"SVGGradientElement|SVGLinearGradientElement|SVGRadialGradientElement"},mj:{"":"MB;",$isGv:true,"%":"SVGCursorElement"},cB:{"":"MB;",$isGv:true,"%":"SVGFEDropShadowElement"},nb:{"":"MB;",$isGv:true,"%":"SVGGlyphRefElement"},xt:{"":"MB;",$isGv:true,"%":"SVGMPathElement"},O7:{"":"As;CE",
+lF:function(){var z,y,x,w,v
+z=new W.E9(this.CE).MW.getAttribute("class")
+y=P.Ls(null,null,null,J.O)
+if(z==null)return y
+for(x=z.split(" "),w=new H.a7(x,x.length,0,null),H.VM(w,[H.W8(x,"Q",0)]);w.G();){v=J.rr(w.mD)
+if(v.length!==0)y.h(y,v)}return y},
+p5:function(a){new W.E9(this.CE).MW.setAttribute("class",a.zV(a," "))}}}],["dart.dom.web_sql","dart:web_sql",,P,{Cf:{"":"Gv;tT:code=,G1:message=","%":"SQLError"}}],["dart.isolate","dart:isolate",,P,{HI:{"":"a;",$isHI:true,$isqh:true,
+$asqh:function(){return[null]}}}],["dart.js","dart:js",,P,{z8:function(a,b){return function(_call, f, captureThis) {return function() {return _call(f, captureThis, this, Array.prototype.slice.apply(arguments));}}(P.uu.call$4, a, b)},R4:function(a,b,c,d){var z
+if(b===!0){z=[c]
+C.Nm.Ay(z,d)
+d=z}return P.wY(H.Ek(a,P.F(J.C0(d,P.Xl),!0,null),P.Te(null)))},Dm:function(a,b,c){var z
+if(Object.isExtensible(a))try{Object.defineProperty(a, b, { value: c})
+return!0}catch(z){H.Ru(z)}return!1},wY:function(a){var z
+if(a==null)return
+else{if(typeof a!=="string")if(typeof a!=="number")if(typeof a!=="boolean"){z=J.x(a)
+z=typeof a==="object"&&a!==null&&!!z.$isAz||typeof a==="object"&&a!==null&&!!z.$isea||typeof a==="object"&&a!==null&&!!z.$ishF||typeof a==="object"&&a!==null&&!!z.$isSg||typeof a==="object"&&a!==null&&!!z.$isKV||typeof a==="object"&&a!==null&&!!z.$isAS||typeof a==="object"&&a!==null&&!!z.$isK5}else z=!0
+else z=!0
+else z=!0
+if(z)return a
+else{z=J.x(a)
+if(typeof a==="object"&&a!==null&&!!z.$isiP)return H.U8(a)
+else if(typeof a==="object"&&a!==null&&!!z.$isE4)return a.eh
+else if(typeof a==="object"&&a!==null&&!!z.$isEH)return P.hE(a,"$dart_jsFunction",new P.DV())
+else return P.hE(a,"_$dart_jsObject",new P.Hp())}}},hE:function(a,b,c){var z=a[b]
+if(z==null){z=c.call$1(a)
+P.Dm(a,b,z)}return z},dU:function(a){var z
+if(a==null||typeof a=="string"||typeof a=="number"||typeof a=="boolean")return a
+else{if(a instanceof Object){z=J.x(a)
+z=typeof a==="object"&&a!==null&&!!z.$isAz||typeof a==="object"&&a!==null&&!!z.$isea||typeof a==="object"&&a!==null&&!!z.$ishF||typeof a==="object"&&a!==null&&!!z.$isSg||typeof a==="object"&&a!==null&&!!z.$isKV||typeof a==="object"&&a!==null&&!!z.$isAS||typeof a==="object"&&a!==null&&!!z.$isK5}else z=!1
+if(z)return a
+else if(a instanceof Date)return P.Wu(a.getMilliseconds(),!1)
+else if(a.constructor===DartObject)return a.o
+else return P.ND(a)}},ND:function(a){if(typeof a=="function")return P.iQ(a,"_$dart_dartClosure",new P.Nz())
+else if(a instanceof Array)return P.iQ(a,"_$dart_dartObject",new P.Jd())
+else return P.iQ(a,"_$dart_dartObject",new P.QS())},iQ:function(a,b,c){var z=a[b]
+if(z==null){z=c.call$1(a)
+P.Dm(a,b,z)}return z},E4:{"":"a;eh",
+t:function(a,b){if(typeof b!=="string"&&typeof b!=="number")throw H.b(new P.AT("property is not a String or num"))
+return P.dU(this.eh[b])},
+"+[]:1:0":0,
+u:function(a,b,c){if(typeof b!=="string"&&typeof b!=="number")throw H.b(new P.AT("property is not a String or num"))
+this.eh[b]=P.wY(c)},
+"+[]=:2:0":0,
+giO:function(a){return 0},
+n:function(a,b){var z
+if(b==null)return!1
+z=J.x(b)
+return typeof b==="object"&&b!==null&&!!z.$isE4&&this.eh===b.eh},
+Bm:function(a){return a in this.eh},
+bu:function(a){var z,y
+try{z=String(this.eh)
+return z}catch(y){H.Ru(y)
+return P.a.prototype.bu.call(this,this)}},
+V7:function(a,b){var z,y
+z=this.eh
+if(b==null)y=null
+else{b.toString
+y=new H.A8(b,P.En)
+H.VM(y,[null,null])
+y=P.F(y,!0,null)}return P.dU(z[a].apply(z,y))},
+$isE4:true,
+static:{Oe:function(a){if(typeof a==="number"||typeof a==="string"||typeof a==="boolean"||a==null)throw H.b(new P.AT("object cannot be a num, string, bool, or null"))
+return P.ND(P.wY(a))}}},r7:{"":"E4;eh"},Tz:{"":"Wk;eh",
+t:function(a,b){var z
+if(typeof b==="number"&&b===C.CD.yu(b)){if(typeof b==="number"&&Math.floor(b)===b)if(!(b<0)){z=P.E4.prototype.t.call(this,this,"length")
+if(typeof z!=="number")throw H.s(z)
+z=b>=z}else z=!0
+else z=!1
+if(z)H.vh(P.TE(b,0,P.E4.prototype.t.call(this,this,"length")))}return P.E4.prototype.t.call(this,this,b)},
+"+[]:1:0":0,
+u:function(a,b,c){var z
+if(typeof b==="number"&&b===C.CD.yu(b)){if(typeof b==="number"&&Math.floor(b)===b)if(!(b<0)){z=P.E4.prototype.t.call(this,this,"length")
+if(typeof z!=="number")throw H.s(z)
+z=b>=z}else z=!0
+else z=!1
+if(z)H.vh(P.TE(b,0,P.E4.prototype.t.call(this,this,"length")))}P.E4.prototype.u.call(this,this,b,c)},
+"+[]=:2:0":0,
+gB:function(a){return P.E4.prototype.t.call(this,this,"length")},
+"+length":0,
+sB:function(a,b){P.E4.prototype.u.call(this,this,"length",b)},
+"+length=":0,
+h:function(a,b){this.V7("push",[b])},
+YW:function(a,b,c,d,e){var z,y,x,w,v,u
+if(b>=0){z=P.E4.prototype.t.call(this,this,"length")
+if(typeof z!=="number")throw H.s(z)
+z=b>z}else z=!0
+if(z)H.vh(P.TE(b,0,P.E4.prototype.t.call(this,this,"length")))
+z=J.Wx(c)
+if(z.C(c,b)||z.D(c,P.E4.prototype.t.call(this,this,"length")))H.vh(P.TE(c,b,P.E4.prototype.t.call(this,this,"length")))
+y=z.W(c,b)
+if(J.xC(y,0))return
+if(e<0)throw H.b(new P.AT(e))
+x=[b,y]
+z=new H.nH(d,e,null)
+z.$builtinTypeInfo=[null]
+w=z.Bz
+v=J.Wx(w)
+if(v.C(w,0))H.vh(P.N(w))
+u=z.n1
+if(u!=null){if(J.u6(u,0))H.vh(P.N(u))
+if(v.D(w,u))H.vh(P.TE(w,0,u))}C.Nm.Ay(x,z.qZ(z,y))
+this.V7("splice",x)},
+$asWO:null,
+$ascX:null},Wk:{"":"E4+lD;",$isList:true,$asWO:null,$isqC:true,$iscX:true,$ascX:null},DV:{"":"Tp;",
+call$1:function(a){var z=P.z8(a,!1)
+P.Dm(z,"_$dart_dartClosure",a)
+return z},
+"+call:1:0":0,
+$isEH:true,
+$is_HB:true,
+$is_Dv:true},Hp:{"":"Tp;",
+call$1:function(a){return new DartObject(a)},
+"+call:1:0":0,
+$isEH:true,
+$is_HB:true,
+$is_Dv:true},Nz:{"":"Tp;",
+call$1:function(a){return new P.r7(a)},
+"+call:1:0":0,
+$isEH:true,
+$is_HB:true,
+$is_Dv:true},Jd:{"":"Tp;",
+call$1:function(a){var z=new P.Tz(a)
+H.VM(z,[null])
+return z},
+"+call:1:0":0,
+$isEH:true,
+$is_HB:true,
+$is_Dv:true},QS:{"":"Tp;",
+call$1:function(a){return new P.E4(a)},
+"+call:1:0":0,
+$isEH:true,
+$is_HB:true,
+$is_Dv:true}}],["dart.math","dart:math",,P,{J:function(a,b){if(typeof a!=="number")throw H.b(new P.AT(a))
+if(typeof b!=="number")throw H.b(new P.AT(b))
+if(a>b)return b
+if(a<b)return a
+if(typeof b==="number"){if(typeof a==="number")if(a===0)return(a+b)*a*b
+if(a===0&&C.ON.gzP(b)||C.ON.gG0(b))return b
+return a}return a},y:function(a,b){if(typeof a!=="number")throw H.b(new P.AT(a))
+if(typeof b!=="number")throw H.b(new P.AT(b))
+if(a>b)return a
+if(a<b)return b
+if(typeof b==="number"){if(typeof a==="number")if(a===0)return a+b
+if(C.CD.gG0(b))return b
+return a}if(b===0&&C.CD.gzP(a))return b
+return a}}],["dart.mirrors","dart:mirrors",,P,{re:function(a){var z,y
+z=J.x(a)
+if(typeof a!=="object"||a===null||!z.$isuq||z.n(a,C.HH))throw H.b(new P.AT(H.d(a)+" does not denote a class"))
+y=P.yq(a)
+z=J.x(y)
+if(typeof y!=="object"||y===null||!z.$isMs)throw H.b(new P.AT(H.d(a)+" does not denote a class"))
+return y.gJi()},yq:function(a){if(J.xC(a,C.HH)){$.At().toString
+return $.Cr()}return H.jO(a.gIE())},QF:{"":"a;",$isQF:true},NL:{"":"a;",$isNL:true,$isQF:true},vr:{"":"a;",$isvr:true,$isQF:true},D4:{"":"a;",$isD4:true,$isQF:true,$isNL:true},L9u:{"":"a;",$isL9u:true,$isNL:true,$isQF:true},Ms:{"":"a;",$isMs:true,$isQF:true,$isL9u:true,$isNL:true},Fw:{"":"L9u;",$isFw:true},RS:{"":"a;",$isRS:true,$isNL:true,$isQF:true},RY:{"":"a;",$isRY:true,$isNL:true,$isQF:true},Ys:{"":"a;",$isYs:true,$isRY:true,$isNL:true,$isQF:true},vg:{"":"a;c1,m2,nV,V3"}}],["dart.typed_data","dart:typed_data",,P,{I2:{"":"Gv;",$isI2:true,"%":"ArrayBuffer"},AS:{"":"Gv;",
+aq:function(a,b,c){var z=J.Wx(b)
+if(z.C(b,0)||z.F(b,c))throw H.b(P.TE(b,0,c))
+else throw H.b(P.u("Invalid list index "+H.d(b)))},
+iA:function(a,b,c){if(b>>>0!=b||J.J5(b,c))this.aq(a,b,c)},
+Im:function(a,b,c,d){this.iA(a,b,d+1)
+return d},
+$isAS:true,
+"%":"DataView;ArrayBufferView;xG|Vj|VW|RK|DH|ZK|Th|Vju|KB|RKu|xGn|TkQ|VWk|ZKG|DHb|w6W|Hna|z9g|G8|UZ"},oI:{"":"Vj;",
+gB:function(a){return C.i7(a)},
+"+length":0,
+t:function(a,b){var z=C.i7(a)
+if(b>>>0!=b||J.J5(b,z))this.aq(a,b,z)
+return a[b]},
+"+[]:1:0":0,
+u:function(a,b,c){var z=C.i7(a)
+if(b>>>0!=b||J.J5(b,z))this.aq(a,b,z)
+a[b]=c},
+"+[]=:2:0":0,
+D6:function(a,b,c){var z,y
+z=a.subarray(b,this.Im(a,b,c,C.i7(a)))
+z.$dartCachedLength=z.length
+y=new Float32Array(z)
+y.$dartCachedLength=y.length
+return y},
+Jk:function(a,b){return this.D6(a,b,null)},
+$asWO:function(){return[J.Pp]},
+$ascX:function(){return[J.Pp]},
+$isList:true,
+$isqC:true,
+$iscX:true,
+$isXj:true,
+"%":"Float32Array"},mJ:{"":"RK;",
+gB:function(a){return C.i7(a)},
+"+length":0,
+t:function(a,b){var z=C.i7(a)
+if(b>>>0!=b||J.J5(b,z))this.aq(a,b,z)
+return a[b]},
+"+[]:1:0":0,
+u:function(a,b,c){var z=C.i7(a)
+if(b>>>0!=b||J.J5(b,z))this.aq(a,b,z)
+a[b]=c},
+"+[]=:2:0":0,
+D6:function(a,b,c){var z,y
+z=a.subarray(b,this.Im(a,b,c,C.i7(a)))
+z.$dartCachedLength=z.length
+y=new Float64Array(z)
+y.$dartCachedLength=y.length
+return y},
+Jk:function(a,b){return this.D6(a,b,null)},
+$asWO:function(){return[J.Pp]},
+$ascX:function(){return[J.Pp]},
+$isList:true,
+$isqC:true,
+$iscX:true,
+$isXj:true,
+"%":"Float64Array"},rF:{"":"ZK;",
+gB:function(a){return C.i7(a)},
+"+length":0,
+t:function(a,b){var z=C.i7(a)
+if(b>>>0!=b||J.J5(b,z))this.aq(a,b,z)
+return a[b]},
+"+[]:1:0":0,
+u:function(a,b,c){var z=C.i7(a)
+if(b>>>0!=b||J.J5(b,z))this.aq(a,b,z)
+a[b]=c},
+"+[]=:2:0":0,
+D6:function(a,b,c){var z,y
+z=a.subarray(b,this.Im(a,b,c,C.i7(a)))
+z.$dartCachedLength=z.length
+y=new Int16Array(z)
+y.$dartCachedLength=y.length
+return y},
+Jk:function(a,b){return this.D6(a,b,null)},
+$asWO:function(){return[J.im]},
+$ascX:function(){return[J.im]},
+$isList:true,
+$isqC:true,
+$iscX:true,
+$isXj:true,
+"%":"Int16Array"},vi:{"":"Vju;",
+gB:function(a){return C.i7(a)},
+"+length":0,
+t:function(a,b){var z=C.i7(a)
+if(b>>>0!=b||J.J5(b,z))this.aq(a,b,z)
+return a[b]},
+"+[]:1:0":0,
+u:function(a,b,c){var z=C.i7(a)
+if(b>>>0!=b||J.J5(b,z))this.aq(a,b,z)
+a[b]=c},
+"+[]=:2:0":0,
+D6:function(a,b,c){var z,y
+z=a.subarray(b,this.Im(a,b,c,C.i7(a)))
+z.$dartCachedLength=z.length
+y=new Int32Array(z)
+y.$dartCachedLength=y.length
+return y},
+Jk:function(a,b){return this.D6(a,b,null)},
+$asWO:function(){return[J.im]},
+$ascX:function(){return[J.im]},
+$isList:true,
+$isqC:true,
+$iscX:true,
+$isXj:true,
+"%":"Int32Array"},ZX:{"":"RKu;",
+gB:function(a){return C.i7(a)},
+"+length":0,
+t:function(a,b){var z=C.i7(a)
+if(b>>>0!=b||J.J5(b,z))this.aq(a,b,z)
+return a[b]},
+"+[]:1:0":0,
+u:function(a,b,c){var z=C.i7(a)
+if(b>>>0!=b||J.J5(b,z))this.aq(a,b,z)
+a[b]=c},
+"+[]=:2:0":0,
+D6:function(a,b,c){var z,y
+z=a.subarray(b,this.Im(a,b,c,C.i7(a)))
+z.$dartCachedLength=z.length
+y=new Int8Array(z)
+y.$dartCachedLength=y.length
+return y},
+Jk:function(a,b){return this.D6(a,b,null)},
+$asWO:function(){return[J.im]},
+$ascX:function(){return[J.im]},
+$isList:true,
+$isqC:true,
+$iscX:true,
+$isXj:true,
+"%":"Int8Array"},ycx:{"":"TkQ;",
+gB:function(a){return C.i7(a)},
+"+length":0,
+t:function(a,b){var z=C.i7(a)
+if(b>>>0!=b||J.J5(b,z))this.aq(a,b,z)
+return a[b]},
+"+[]:1:0":0,
+u:function(a,b,c){var z=C.i7(a)
+if(b>>>0!=b||J.J5(b,z))this.aq(a,b,z)
+a[b]=c},
+"+[]=:2:0":0,
+D6:function(a,b,c){var z,y
+z=a.subarray(b,this.Im(a,b,c,C.i7(a)))
+z.$dartCachedLength=z.length
+y=new Uint16Array(z)
+y.$dartCachedLength=y.length
+return y},
+Jk:function(a,b){return this.D6(a,b,null)},
+$asWO:function(){return[J.im]},
+$ascX:function(){return[J.im]},
+$isList:true,
+$isqC:true,
+$iscX:true,
+$isXj:true,
+"%":"Uint16Array"},nE:{"":"ZKG;",
+gB:function(a){return C.i7(a)},
+"+length":0,
+t:function(a,b){var z=C.i7(a)
+if(b>>>0!=b||J.J5(b,z))this.aq(a,b,z)
+return a[b]},
+"+[]:1:0":0,
+u:function(a,b,c){var z=C.i7(a)
+if(b>>>0!=b||J.J5(b,z))this.aq(a,b,z)
+a[b]=c},
+"+[]=:2:0":0,
+D6:function(a,b,c){var z,y
+z=a.subarray(b,this.Im(a,b,c,C.i7(a)))
+z.$dartCachedLength=z.length
+y=new Uint32Array(z)
+y.$dartCachedLength=y.length
+return y},
+Jk:function(a,b){return this.D6(a,b,null)},
+$asWO:function(){return[J.im]},
+$ascX:function(){return[J.im]},
+$isList:true,
+$isqC:true,
+$iscX:true,
+$isXj:true,
+"%":"Uint32Array"},zt:{"":"w6W;",
+gB:function(a){return C.i7(a)},
+"+length":0,
+t:function(a,b){var z=C.i7(a)
+if(b>>>0!=b||J.J5(b,z))this.aq(a,b,z)
+return a[b]},
+"+[]:1:0":0,
+u:function(a,b,c){var z=C.i7(a)
+if(b>>>0!=b||J.J5(b,z))this.aq(a,b,z)
+a[b]=c},
+"+[]=:2:0":0,
+D6:function(a,b,c){var z,y
+z=a.subarray(b,this.Im(a,b,c,C.i7(a)))
+z.$dartCachedLength=z.length
+y=new Uint8ClampedArray(z)
+y.$dartCachedLength=y.length
+return y},
+Jk:function(a,b){return this.D6(a,b,null)},
+$asWO:function(){return[J.im]},
+$ascX:function(){return[J.im]},
+$isList:true,
+$isqC:true,
+$iscX:true,
+$isXj:true,
+"%":"CanvasPixelArray|Uint8ClampedArray"},F0:{"":"z9g;",
+gB:function(a){return C.i7(a)},
+"+length":0,
+t:function(a,b){var z=C.i7(a)
+if(b>>>0!=b||J.J5(b,z))this.aq(a,b,z)
+return a[b]},
+"+[]:1:0":0,
+u:function(a,b,c){var z=C.i7(a)
+if(b>>>0!=b||J.J5(b,z))this.aq(a,b,z)
+a[b]=c},
+"+[]=:2:0":0,
+D6:function(a,b,c){var z,y
+z=a.subarray(b,this.Im(a,b,c,C.i7(a)))
+z.$dartCachedLength=z.length
+y=new Uint8Array(z)
+y.$dartCachedLength=y.length
+return y},
+Jk:function(a,b){return this.D6(a,b,null)},
+$asWO:function(){return[J.im]},
+$ascX:function(){return[J.im]},
+$isList:true,
+$isqC:true,
+$iscX:true,
+$isXj:true,
+"%":";Uint8Array"},xG:{"":"AS+lD;",$isList:true,$asWO:null,$isqC:true,$iscX:true,$ascX:null},Vj:{"":"xG+SU;",$asWO:null,$ascX:null},VW:{"":"AS+lD;",$isList:true,$asWO:null,$isqC:true,$iscX:true,$ascX:null},RK:{"":"VW+SU;",$asWO:null,$ascX:null},DH:{"":"AS+lD;",$isList:true,$asWO:null,$isqC:true,$iscX:true,$ascX:null},ZK:{"":"DH+SU;",$asWO:null,$ascX:null},Th:{"":"AS+lD;",$isList:true,$asWO:null,$isqC:true,$iscX:true,$ascX:null},Vju:{"":"Th+SU;",$asWO:null,$ascX:null},KB:{"":"AS+lD;",$isList:true,$asWO:null,$isqC:true,$iscX:true,$ascX:null},RKu:{"":"KB+SU;",$asWO:null,$ascX:null},xGn:{"":"AS+lD;",$isList:true,$asWO:null,$isqC:true,$iscX:true,$ascX:null},TkQ:{"":"xGn+SU;",$asWO:null,$ascX:null},VWk:{"":"AS+lD;",$isList:true,$asWO:null,$isqC:true,$iscX:true,$ascX:null},ZKG:{"":"VWk+SU;",$asWO:null,$ascX:null},DHb:{"":"AS+lD;",$isList:true,$asWO:null,$isqC:true,$iscX:true,$ascX:null},w6W:{"":"DHb+SU;",$asWO:null,$ascX:null},Hna:{"":"AS+lD;",$isList:true,$asWO:null,$isqC:true,$iscX:true,$ascX:null},z9g:{"":"Hna+SU;",$asWO:null,$ascX:null},G8:{"":"AS;",$isList:true,
+$asWO:function(){return[J.im]},
+$isqC:true,
+$iscX:true,
+$ascX:function(){return[J.im]},
+$isXj:true,
+static:{"":"tn",}},UZ:{"":"AS;",$isList:true,
+$asWO:function(){return[J.im]},
+$isqC:true,
+$iscX:true,
+$ascX:function(){return[J.im]},
+$isXj:true,
+static:{"":"U9",}}}],["disassembly_entry_element","package:observatory/src/observatory_elements/disassembly_entry.dart",,E,{Fv:{"":["WZ;FT%-,VJ,Ai,tH-,VJ,Ai,VJ,Ai,ZI,uN,z3,TQ,Vk,Ye,mT,KM-",null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,function(){return[C.nJ]}],
+gNI:function(a){return a.FT
+"37,38,39"},
+"+instruction":1,
+sNI:function(a,b){a.FT=this.pD(a,C.eJ,a.FT,b)
+"40,31,37,38"},
+"+instruction=":1,
+"@":function(){return[C.Vy]},
+static:{AH:function(a){var z,y,x,w,v,u
+z=H.B7([],P.L5(null,null,null,null,null))
+z=R.Jk(z)
+y=$.Nd()
+x=P.Py(null,null,null,J.O,W.I0)
+w=J.O
+v=W.cv
+u=new V.br(P.Py(null,null,null,w,v),null,null)
+H.VM(u,[w,v])
+a.FT=z
+a.Ye=y
+a.mT=x
+a.KM=u
+C.Tl.ZL(a)
+C.Tl.FH(a)
+return a
+"13"},"+new DisassemblyEntryElement$created:0:0":1}},"+DisassemblyEntryElement": [83],WZ:{"":"uL+Pi;",$isd3:true}}],["error_view_element","package:observatory/src/observatory_elements/error_view.dart",,F,{I3:{"":["pv;Py%-,hO%-,VJ,Ai,tH-,VJ,Ai,VJ,Ai,ZI,uN,z3,TQ,Vk,Ye,mT,KM-",null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,function(){return[C.nJ]}],
+gkc:function(a){return a.Py
+"8,38,39"},
+"+error":1,
+skc:function(a,b){a.Py=this.pD(a,C.YU,a.Py,b)
+"40,31,8,38"},
+"+error=":1,
+gVB:function(a){return a.hO
+"40,38,39"},
+"+error_obj":1,
+sVB:function(a,b){a.hO=this.pD(a,C.Yn,a.hO,b)
+"40,31,40,38"},
+"+error_obj=":1,
+"@":function(){return[C.uW]},
+static:{TW:function(a){var z,y,x,w,v
+z=$.Nd()
+y=P.Py(null,null,null,J.O,W.I0)
+x=J.O
+w=W.cv
+v=new V.br(P.Py(null,null,null,x,w),null,null)
+H.VM(v,[x,w])
+a.Py=""
+a.Ye=z
+a.mT=y
+a.KM=v
+C.OD.ZL(a)
+C.OD.FH(a)
+return a
+"14"},"+new ErrorViewElement$created:0:0":1}},"+ErrorViewElement": [84],pv:{"":"uL+Pi;",$isd3:true}}],["field_ref_element","package:observatory/src/observatory_elements/field_ref.dart",,D,{qr:{"":["Vfx;Lf%-,VJ,Ai,tH-,VJ,Ai,VJ,Ai,ZI,uN,z3,TQ,Vk,Ye,mT,KM-",null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,function(){return[C.nJ]}],
+gt0:function(a){return a.Lf
+"37,38,39"},
+"+field":1,
+st0:function(a,b){a.Lf=this.pD(a,C.WQ,a.Lf,b)
+"40,31,37,38"},
+"+field=":1,
+"@":function(){return[C.ht]},
+static:{ip:function(a){var z,y,x,w,v
+z=$.Nd()
+y=P.Py(null,null,null,J.O,W.I0)
+x=J.O
+w=W.cv
+v=new V.br(P.Py(null,null,null,x,w),null,null)
+H.VM(v,[x,w])
+a.Ye=z
+a.mT=y
+a.KM=v
+C.WR.ZL(a)
+C.WR.FH(a)
+return a
+"15"},"+new FieldRefElement$created:0:0":1}},"+FieldRefElement": [85],Vfx:{"":"uL+Pi;",$isd3:true}}],["field_view_element","package:observatory/src/observatory_elements/field_view.dart",,A,{Gk:{"":["Dsd;vt%-,VJ,Ai,tH-,VJ,Ai,VJ,Ai,ZI,uN,z3,TQ,Vk,Ye,mT,KM-",null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,function(){return[C.nJ]}],
+gt0:function(a){return a.vt
+"37,38,39"},
+"+field":1,
+st0:function(a,b){a.vt=this.pD(a,C.WQ,a.vt,b)
+"40,31,37,38"},
+"+field=":1,
+"@":function(){return[C.Tq]},
+static:{cY:function(a){var z,y,x,w,v
+z=$.Nd()
+y=P.Py(null,null,null,J.O,W.I0)
+x=J.O
+w=W.cv
+v=new V.br(P.Py(null,null,null,x,w),null,null)
+H.VM(v,[x,w])
+a.Ye=z
+a.mT=y
+a.KM=v
+C.lS.ZL(a)
+C.lS.FH(a)
+return a
+"16"},"+new FieldViewElement$created:0:0":1}},"+FieldViewElement": [86],Dsd:{"":"uL+Pi;",$isd3:true}}],["function_view_element","package:observatory/src/observatory_elements/function_view.dart",,N,{Ds:{"":["tuj;ql%-,VJ,Ai,tH-,VJ,Ai,VJ,Ai,ZI,uN,z3,TQ,Vk,Ye,mT,KM-",null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,function(){return[C.nJ]}],
+gMj:function(a){return a.ql
+"37,38,39"},
+"+function":1,
+sMj:function(a,b){a.ql=this.pD(a,C.nf,a.ql,b)
+"40,31,37,38"},
+"+function=":1,
+"@":function(){return[C.Uc]},
+static:{p7:function(a){var z,y,x,w,v
+z=$.Nd()
+y=P.Py(null,null,null,J.O,W.I0)
+x=J.O
+w=W.cv
+v=new V.br(P.Py(null,null,null,x,w),null,null)
+H.VM(v,[x,w])
+a.Ye=z
+a.mT=y
+a.KM=v
+C.PJ.ZL(a)
+C.PJ.FH(a)
+return a
+"17"},"+new FunctionViewElement$created:0:0":1}},"+FunctionViewElement": [87],tuj:{"":"uL+Pi;",$isd3:true}}],["html_common","dart:html_common",,P,{jD:function(a){return P.Wu(a.getTime(),!0)},bL:function(a){var z,y
+z=[]
+y=new P.Tm(new P.aI([],z),new P.rG(z),new P.yh(z)).call$1(a)
+new P.wO().call$0()
+return y},o7:function(a,b){var z=[]
+return new P.xL(b,new P.CA([],z),new P.YL(z),new P.KC(z)).call$1(a)},dg:function(){if($.L4==null)$.L4=J.Vw(window.navigator.userAgent,"Opera",0)
+return $.L4},F7:function(){if($.PN==null)$.PN=P.dg()!==!0&&J.Vw(window.navigator.userAgent,"WebKit",0)
+return $.PN},aI:{"":"Tp;b,c",
+call$1:function(a){var z,y,x,w
+z=this.b
+y=z.length
+for(x=0;x<y;++x){w=z[x]
+if(w==null?a==null:w===a)return x}z.push(a)
+this.c.push(null)
+return y},
+"+call:1:0":0,
+$isEH:true,
+$is_HB:true,
+$is_Dv:true},rG:{"":"Tp;d",
+call$1:function(a){var z=this.d
+if(a>>>0!==a||a>=z.length)throw H.e(z,a)
+return z[a]},
+"+call:1:0":0,
+$isEH:true,
+$is_HB:true,
+$is_Dv:true},yh:{"":"Tp;e",
+call$2:function(a,b){var z=this.e
+if(a>>>0!==a||a>=z.length)throw H.e(z,a)
+z[a]=b},
+"+call:2:0":0,
+$isEH:true,
+$is_bh:true},wO:{"":"Tp;",
+call$0:function(){},
+"+call:0:0":0,
+$isEH:true,
+$is_X0:true},Tm:{"":"Tp;f,g,h",
+call$1:function(a){var z,y,x,w,v,u,t
+z={}
+if(a==null)return a
+if(typeof a==="boolean")return a
+if(typeof a==="number")return a
+if(typeof a==="string")return a
+y=J.x(a)
+if(typeof a==="object"&&a!==null&&!!y.$isiP)return new Date(a.rq)
+if(typeof a==="object"&&a!==null&&!!y.$iscT)throw H.b(P.SY("structured clone of RegExp"))
+if(typeof a==="object"&&a!==null&&!!y.$isT5)return a
+if(typeof a==="object"&&a!==null&&!!y.$isAz)return a
+if(typeof a==="object"&&a!==null&&!!y.$isSg)return a
+if(typeof a==="object"&&a!==null&&!!y.$isI2)return a
+if(typeof a==="object"&&a!==null&&!!y.$isAS)return a
+if(typeof a==="object"&&a!==null&&!!y.$isL8){x=this.f.call$1(a)
+z.a=this.g.call$1(x)
+w=z.a
+if(w!=null)return w
+z.a={}
+this.h.call$2(x,z.a)
+y.aN(a,new P.rz(z,this))
+return z.a}if(typeof a==="object"&&a!==null&&(a.constructor===Array||!!y.$isList)){v=y.gB(a)
+x=this.f.call$1(a)
+u=this.g.call$1(x)
+if(u!=null){if(!0===u){u=new Array(v)
+this.h.call$2(x,u)}return u}u=new Array(v)
+this.h.call$2(x,u)
+if(typeof v!=="number")throw H.s(v)
+t=0
+for(;t<v;++t){z=this.call$1(y.t(a,t))
+if(t>=u.length)throw H.e(u,t)
+u[t]=z}return u}throw H.b(P.SY("structured clone of other type"))},
+"+call:1:0":0,
+$isEH:true,
+$is_HB:true,
+$is_Dv:true},rz:{"":"Tp;a,i",
+call$2:function(a,b){this.a.a[a]=this.i.call$1(b)},
+"+call:2:0":0,
+$isEH:true,
+$is_bh:true},CA:{"":"Tp;a,b",
+call$1:function(a){var z,y,x,w
+z=this.a
+y=z.length
+for(x=0;x<y;++x){w=z[x]
+if(w==null?a==null:w===a)return x}z.push(a)
+this.b.push(null)
+return y},
+"+call:1:0":0,
+$isEH:true,
+$is_HB:true,
+$is_Dv:true},YL:{"":"Tp;c",
+call$1:function(a){var z=this.c
+if(a>>>0!==a||a>=z.length)throw H.e(z,a)
+return z[a]},
+"+call:1:0":0,
+$isEH:true,
+$is_HB:true,
+$is_Dv:true},KC:{"":"Tp;d",
+call$2:function(a,b){var z=this.d
+if(a>>>0!==a||a>=z.length)throw H.e(z,a)
+z[a]=b},
+"+call:2:0":0,
+$isEH:true,
+$is_bh:true},xL:{"":"Tp;e,f,g,h",
+call$1:function(a){var z,y,x,w,v,u,t
+if(a==null)return a
+if(typeof a==="boolean")return a
+if(typeof a==="number")return a
+if(typeof a==="string")return a
+if(a instanceof Date)return P.jD(a)
+if(a instanceof RegExp)throw H.b(P.SY("structured clone of RegExp"))
+if(Object.getPrototypeOf(a)===Object.prototype){z=this.f.call$1(a)
+y=this.g.call$1(z)
+if(y!=null)return y
+y=H.B7([],P.L5(null,null,null,null,null))
+this.h.call$2(z,y)
+for(x=Object.keys(a),w=new H.a7(x,x.length,0,null),H.VM(w,[H.W8(x,"Q",0)]);w.G();){v=w.mD
+y.u(y,v,this.call$1(a[v]))}return y}if(a instanceof Array){z=this.f.call$1(a)
+y=this.g.call$1(z)
+if(y!=null)return y
+x=J.U6(a)
+u=x.gB(a)
+y=this.e?new Array(u):a
+this.h.call$2(z,y)
+if(typeof u!=="number")throw H.s(u)
+w=J.w1(y)
+t=0
+for(;t<u;++t)w.u(y,t,this.call$1(x.t(a,t)))
+return y}return a},
+"+call:1:0":0,
+$isEH:true,
+$is_HB:true,
+$is_Dv:true},As:{"":"a;",
+bu:function(a){var z=this.lF()
+return z.zV(z," ")},
+gA:function(a){var z=this.lF()
+z=new P.zQ(z,z.zN,null,null)
+H.VM(z,[null])
+z.zq=z.O2.H9
+return z},
+aN:function(a,b){var z=this.lF()
+z.aN(z,b)},
+zV:function(a,b){var z=this.lF()
+return z.zV(z,b)},
+ez:function(a,b){var z=this.lF()
+return H.K1(z,b,H.W8(z,"mW",0),null)},
+ev:function(a,b){var z,y
+z=this.lF()
+y=new H.U5(z,b)
+H.VM(y,[H.W8(z,"mW",0)])
+return y},
+Vr:function(a,b){var z=this.lF()
+return z.Vr(z,b)},
+gl0:function(a){return this.lF().X5===0},
+"+isEmpty":0,
+gor:function(a){return this.lF().X5!==0},
+"+isNotEmpty":0,
+gB:function(a){return this.lF().X5},
+"+length":0,
+tg:function(a,b){var z=this.lF()
+return z.tg(z,b)},
+Zt:function(a){var z=this.lF()
+return z.tg(z,a)?a:null},
+h:function(a,b){return this.OS(new P.GE(b))},
+Rz:function(a,b){var z,y
+if(typeof b!=="string")return!1
+z=this.lF()
+y=z.Rz(z,b)
+this.p5(z)
+return y},
+grZ:function(a){var z=this.lF().lX
+if(z==null)H.vh(new P.lj("No elements"))
+return z.gGc()},
+tt:function(a,b){var z=this.lF()
+return z.tt(z,b)},
+br:function(a){return this.tt(a,!0)},
+eR:function(a,b){var z=this.lF()
+return H.ke(z,b,H.W8(z,"mW",0))},
+Zv:function(a,b){var z=this.lF()
+return z.Zv(z,b)},
+OS:function(a){var z,y
+z=this.lF()
+y=a.call$1(z)
+this.p5(z)
+return y},
+$isqC:true,
+$iscX:true,
+$ascX:function(){return[J.O]}},GE:{"":"Tp;a",
+call$1:function(a){return J.bi(a,this.a)},
+"+call:1:0":0,
+$isEH:true,
+$is_HB:true,
+$is_Dv:true}}],["instance_ref_element","package:observatory/src/observatory_elements/instance_ref.dart",,B,{pR:{"":["Vct;iK%-,VJ,Ai,tH-,VJ,Ai,VJ,Ai,ZI,uN,z3,TQ,Vk,Ye,mT,KM-",null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,function(){return[C.nJ]}],
+ghf:function(a){return a.iK
+"37,38,39"},
+"+instance":1,
+shf:function(a,b){a.iK=this.pD(a,C.fn,a.iK,b)
+"40,31,37,38"},
+"+instance=":1,
+"@":function(){return[C.ay]},
+static:{lu:function(a){var z,y,x,w,v
+z=$.Nd()
+y=P.Py(null,null,null,J.O,W.I0)
+x=J.O
+w=W.cv
+v=new V.br(P.Py(null,null,null,x,w),null,null)
+H.VM(v,[x,w])
+a.Ye=z
+a.mT=y
+a.KM=v
+C.cp.ZL(a)
+C.cp.FH(a)
+return a
+"18"},"+new InstanceRefElement$created:0:0":1}},"+InstanceRefElement": [88],Vct:{"":"uL+Pi;",$isd3:true}}],["instance_view_element","package:observatory/src/observatory_elements/instance_view.dart",,Z,{hx:{"":["D13;Xh%-,VJ,Ai,tH-,VJ,Ai,VJ,Ai,ZI,uN,z3,TQ,Vk,Ye,mT,KM-",null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,function(){return[C.nJ]}],
+ghf:function(a){return a.Xh
+"37,38,39"},
+"+instance":1,
+shf:function(a,b){a.Xh=this.pD(a,C.fn,a.Xh,b)
+"40,31,37,38"},
+"+instance=":1,
+"@":function(){return[C.ql]},
+static:{HC:function(a){var z,y,x,w,v
+z=$.Nd()
+y=P.Py(null,null,null,J.O,W.I0)
+x=J.O
+w=W.cv
+v=new V.br(P.Py(null,null,null,x,w),null,null)
+H.VM(v,[x,w])
+a.Ye=z
+a.mT=y
+a.KM=v
+C.yK.ZL(a)
+C.yK.FH(a)
+return a
+"19"},"+new InstanceViewElement$created:0:0":1}},"+InstanceViewElement": [89],D13:{"":"uL+Pi;",$isd3:true}}],["isolate_list_element","package:observatory/src/observatory_elements/isolate_list.dart",,L,{u7:{"":["uL;tH-,VJ,Ai,VJ,Ai,ZI,uN,z3,TQ,Vk,Ye,mT,KM-",null,null,null,null,null,null,null,null,null,null,null,null,function(){return[C.nJ]}],
+"@":function(){return[C.jF]},
+static:{Tt:function(a){var z,y,x,w,v
+z=$.Nd()
+y=P.Py(null,null,null,J.O,W.I0)
+x=J.O
+w=W.cv
+v=new V.br(P.Py(null,null,null,x,w),null,null)
+H.VM(v,[x,w])
+a.Ye=z
+a.mT=y
+a.KM=v
+C.Dh.ZL(a)
+C.Dh.FH(a)
+return a
+"20"},"+new IsolateListElement$created:0:0":1}},"+IsolateListElement": [27]}],["isolate_summary_element","package:observatory/src/observatory_elements/isolate_summary.dart",,D,{St:{"":["WZq;Pw%-,i0%-,VJ,Ai,tH-,VJ,Ai,VJ,Ai,ZI,uN,z3,TQ,Vk,Ye,mT,KM-",null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,function(){return[C.nJ]}],
+gF1:function(a){return a.Pw
+"30,38,39"},
+"+isolate":1,
+sF1:function(a,b){a.Pw=this.pD(a,C.Y2,a.Pw,b)
+"40,31,30,38"},
+"+isolate=":1,
+goc:function(a){return a.i0
+"8,38,39"},
+"+name":1,
+soc:function(a,b){a.i0=this.pD(a,C.YS,a.i0,b)
+"40,31,8,38"},
+"+name=":1,
+"@":function(){return[C.aM]},
+static:{N5:function(a){var z,y,x,w,v
+z=$.Nd()
+y=P.Py(null,null,null,J.O,W.I0)
+x=J.O
+w=W.cv
+v=new V.br(P.Py(null,null,null,x,w),null,null)
+H.VM(v,[x,w])
+a.i0=""
+a.Ye=z
+a.mT=y
+a.KM=v
+C.nM.ZL(a)
+C.nM.FH(a)
+return a
+"21"},"+new IsolateSummaryElement$created:0:0":1}},"+IsolateSummaryElement": [90],WZq:{"":"uL+Pi;",$isd3:true}}],["json_view_element","package:observatory/src/observatory_elements/json_view.dart",,Z,{vj:{"":["pva;eb%-,kf%-,VJ,Ai,tH-,VJ,Ai,VJ,Ai,ZI,uN,z3,TQ,Vk,Ye,mT,KM-",null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,function(){return[C.nJ]}],
+gTn:function(a){return a.eb
+"40,38,39"},
+"+json":1,
+sTn:function(a,b){a.eb=this.pD(a,C.Gd,a.eb,b)
+"40,31,40,38"},
+"+json=":1,
+i4:function(a){Z.uL.prototype.i4.call(this,a)
+a.kf=0
+"40"},
+"+enteredView:0:0":1,
+yC:function(a,b){this.pD(a,C.eR,"a","b")
+"40,91,40"},
+"+jsonChanged:1:0":1,
+gE8:function(a){return J.AG(a.eb)
+"8"},
+"+primitiveString":1,
+gmm:function(a){var z,y
+z=a.eb
+y=J.x(z)
+if(typeof z==="object"&&z!==null&&!!y.$isL8)return"Map"
+else if(typeof z==="object"&&z!==null&&(z.constructor===Array||!!y.$isList))return"List"
+return"Primitive"
+"8"},
+"+valueType":1,
+gFe:function(a){var z=a.kf
+a.kf=J.WB(z,1)
+return z
+"30"},
+"+counter":1,
+gqC:function(a){var z,y
+z=a.eb
+y=J.x(z)
+if(typeof z==="object"&&z!==null&&(z.constructor===Array||!!y.$isList))return z
+return[]
+"70"},
+"+list":1,
+gvc:function(a){var z,y
+z=a.eb
+y=J.RE(z)
+if(typeof z==="object"&&z!==null&&!!y.$isL8)return J.qA(y.gvc(z))
+return[]
+"70"},
+"+keys":1,
+r6:function(a,b){return J.UQ(a.eb,b)
+"40,78,8"},
+"+value:1:0":1,
+gP:function(a){return new P.C7(this,Z.vj.prototype.r6,a,"r6")},
+"@":function(){return[C.HN]},
+static:{un:function(a){var z,y,x,w,v
+z=$.Nd()
+y=P.Py(null,null,null,J.O,W.I0)
+x=J.O
+w=W.cv
+v=new V.br(P.Py(null,null,null,x,w),null,null)
+H.VM(v,[x,w])
+a.eb=null
+a.kf=0
+a.Ye=z
+a.mT=y
+a.KM=v
+C.GB.ZL(a)
+C.GB.FH(a)
+return a
+"22"},"+new JsonViewElement$created:0:0":1}},"+JsonViewElement": [92],pva:{"":"uL+Pi;",$isd3:true}}],["library_view_element","package:observatory/src/observatory_elements/library_view.dart",,M,{CX:{"":["cda;iI%-,VJ,Ai,tH-,VJ,Ai,VJ,Ai,ZI,uN,z3,TQ,Vk,Ye,mT,KM-",null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,function(){return[C.nJ]}],
+gtD:function(a){return a.iI
+"37,38,39"},
+"+library":1,
+stD:function(a,b){a.iI=this.pD(a,C.EV,a.iI,b)
+"40,31,37,38"},
+"+library=":1,
+"@":function(){return[C.Oy]},
+static:{SP:function(a){var z,y,x,w,v,u
+z=H.B7([],P.L5(null,null,null,null,null))
+z=R.Jk(z)
+y=$.Nd()
+x=P.Py(null,null,null,J.O,W.I0)
+w=J.O
+v=W.cv
+u=new V.br(P.Py(null,null,null,w,v),null,null)
+H.VM(u,[w,v])
+a.iI=z
+a.Ye=y
+a.mT=x
+a.KM=u
+C.MG.ZL(a)
+C.MG.FH(a)
+return a
+"23"},"+new LibraryViewElement$created:0:0":1}},"+LibraryViewElement": [93],cda:{"":"uL+Pi;",$isd3:true}}],["logging","package:logging/logging.dart",,N,{TJ:{"":"a;oc>,eT>,yz,Cj>,wd,Gs",
+gB8:function(){var z,y,x
+z=this.eT
+y=z==null||J.xC(J.DA(z),"")
+x=this.oc
+return y?x:z.gB8()+"."+x},
+gOR:function(){if($.RL){var z=this.eT
+if(z!=null)return z.gOR()}return $.Y4},
+mL:function(a){return a.P>=this.gOR().P},
+Y6:function(a,b,c,d){var z,y,x,w,v
+if(a.P>=this.gOR().P){z=this.gB8()
+y=P.Xs()
+x=$.xO
+$.xO=x+1
+w=new N.HV(a,b,z,y,x,c,d)
+if($.RL)for(v=this;v!=null;){z=J.RE(v)
+z.od(v,w)
+v=z.geT(v)}else J.EY(N.Jx(""),w)}},
+X2:function(a,b,c){return this.Y6(C.VZ,a,b,c)},
+x9:function(a){return this.X2(a,null,null)},
+yl:function(a,b,c){return this.Y6(C.R5,a,b,c)},
+J4:function(a){return this.yl(a,null,null)},
+ZG:function(a,b,c){return this.Y6(C.IF,a,b,c)},
+To:function(a){return this.ZG(a,null,null)},
+cI:function(a,b,c){return this.Y6(C.UP,a,b,c)},
+A3:function(a){return this.cI(a,null,null)},
+od:function(a,b){},
+QL:function(a,b,c){var z=this.eT
+if(z!=null){z=J.Tr(z)
+z.u(z,this.oc,this)}},
+$isTJ:true,
+static:{"":"Uj",Jx:function(a){return $.Iu().to(a,new N.dG(a))},hS:function(a){var z,y,x
+if(C.xB.nC(a,"."))throw H.b(new P.AT("name shouldn't start with a '.'"))
+z=C.xB.cn(a,".")
+if(z===-1){y=a!==""?N.Jx(""):null
+x=a}else{y=N.Jx(C.xB.JT(a,0,z))
+x=C.xB.yn(a,z+1)}return N.Ww(x,y,P.L5(null,null,null,J.O,N.TJ))},Ww:function(a,b,c){var z=new F.Oh(c)
+H.VM(z,[null,null])
+z=new N.TJ(a,b,null,c,z,null)
+z.QL(a,b,c)
+return z}}},dG:{"":"Tp;a",
+call$0:function(){return N.hS(this.a)},
+"+call:0:0":0,
+$isEH:true,
+$is_X0:true},Ng:{"":"a;oc>,P>",
+r6:function(a,b){return this.P.call$1(b)},
+n:function(a,b){var z
+if(b==null)return!1
+z=J.x(b)
+return typeof b==="object"&&b!==null&&!!z.$isNg&&this.P===b.P},
+C:function(a,b){var z=J.Vm(b)
+if(typeof z!=="number")throw H.s(z)
+return this.P<z},
+E:function(a,b){var z=J.Vm(b)
+if(typeof z!=="number")throw H.s(z)
+return this.P<=z},
+D:function(a,b){var z=J.Vm(b)
+if(typeof z!=="number")throw H.s(z)
+return this.P>z},
+F:function(a,b){var z=J.Vm(b)
+if(typeof z!=="number")throw H.s(z)
+return this.P>=z},
+iM:function(a,b){var z=J.Vm(b)
+if(typeof z!=="number")throw H.s(z)
+return this.P-z},
+giO:function(a){return this.P},
+bu:function(a){return this.oc},
+$isNg:true,
+static:{"":"bR,tm,EL,X8,IQ,Fn,Eb,AN,JY,bo",}},HV:{"":"a;OR<,G1>,iJ,Fl,O0,kc>,I4<",
+bu:function(a){return"["+this.OR.oc+"] "+this.iJ+": "+this.G1},
+static:{"":"xO",}}}],["message_viewer_element","package:observatory/src/observatory_elements/message_viewer.dart",,L,{Nh:{"":["uL;XB%-,tH-,VJ,Ai,VJ,Ai,ZI,uN,z3,TQ,Vk,Ye,mT,KM-",null,null,null,null,null,null,null,null,null,null,null,null,null,function(){return[C.nJ]}],
+gG1:function(a){return a.XB
+"37,39"},
+"+message":1,
+sG1:function(a,b){a.XB=b
+this.pD(a,C.KY,"",this.gQW(a))
+this.pD(a,C.wt,[],this.glc(a))
+"40,94,37,39"},
+"+message=":1,
+gQW:function(a){var z=a.XB
+if(z==null||J.UQ(z,"type")==null)return"Error"
+return J.UQ(a.XB,"type")
+"8"},
+"+messageType":1,
+glc:function(a){var z=a.XB
+if(z==null||J.UQ(z,"members")==null)return[]
+return J.UQ(a.XB,"members")
+"95"},
+"+members":1,
+"@":function(){return[C.c0]},
+static:{rJ:function(a){var z,y,x,w,v
+z=$.Nd()
+y=P.Py(null,null,null,J.O,W.I0)
+x=J.O
+w=W.cv
+v=new V.br(P.Py(null,null,null,x,w),null,null)
+H.VM(v,[x,w])
+a.Ye=z
+a.mT=y
+a.KM=v
+C.Wp.ZL(a)
+C.Wp.FH(a)
+return a
+"24"},"+new MessageViewerElement$created:0:0":1}},"+MessageViewerElement": [27]}],["metadata","../../../../../../../../../dart/dart-sdk/lib/html/html_common/metadata.dart",,B,{fA:{"":"a;Kr,Jt",static:{"":"Xd,en,yS,PZ,xa",}},tz:{"":"a;"},jR:{"":"a;oc>"},PO:{"":"a;"},c5:{"":"a;"}}],["navigation_bar_element","package:observatory/src/observatory_elements/navigation_bar.dart",,Q,{ih:{"":["uL;tH-,VJ,Ai,VJ,Ai,ZI,uN,z3,TQ,Vk,Ye,mT,KM-",null,null,null,null,null,null,null,null,null,null,null,null,function(){return[C.nJ]}],
+"@":function(){return[C.KG]},
+static:{BW:function(a){var z,y,x,w,v
+z=$.Nd()
+y=P.Py(null,null,null,J.O,W.I0)
+x=J.O
+w=W.cv
+v=new V.br(P.Py(null,null,null,x,w),null,null)
+H.VM(v,[x,w])
+a.Ye=z
+a.mT=y
+a.KM=v
+C.Xg.ZL(a)
+C.Xg.FH(a)
+return a
+"25"},"+new NavigationBarElement$created:0:0":1}},"+NavigationBarElement": [27]}],["observatory","package:observatory/observatory.dart",,L,{mL:{"":["Pi;Z6<-,lw<-,nI<-,VJ,Ai",function(){return[C.mI]},function(){return[C.mI]},function(){return[C.mI]},null,null],
+Ey:function(){var z,y,x
+z=this.Z6
+z.sJR(this)
+y=this.lw
+y.sJR(this)
+x=this.nI
+x.sJR(this)
+y.se0(x.gVY())
+z.kI()},
+AQ:function(a){return J.UQ(this.nI.gi2(),a)},
+hq:function(){this.Ey()},
+US:function(){this.Ey()},
+static:{WS:function(){var z,y,x
+z=P.L5(null,null,null,null,null)
+y=R.Jk([])
+y=new L.Rb(z,0,null,null,"http://127.0.0.1:8181",y,null,null)
+z=C.ph.aM(window)
+x=y.gT9()
+x=new W.Ov(0,z.uv,z.Ph,W.aF(x),z.Sg)
+H.VM(x,[H.W8(z,"RO",0)])
+x.Zz()
+x=P.L5(null,null,null,J.im,L.bv)
+z=R.Jk(x)
+z=new L.mL(new L.dZ(null,"",null,null,null),y,new L.pt(null,z,null,null),null,null)
+z.hq()
+return z},"+new ObservatoryApplication$devtools:0:0":0,AK:function(){var z,y
+z=R.Jk([])
+y=P.L5(null,null,null,J.im,L.bv)
+y=R.Jk(y)
+y=new L.mL(new L.dZ(null,"",null,null,null),new L.jI(null,null,"http://127.0.0.1:8181",z,null,null),new L.pt(null,y,null,null),null,null)
+y.US()
+return y}}},bv:{"":["Pi;nk,SS,XR<-,VJ,Ai",null,null,function(){return[C.mI]},null,null],
+gjO:function(a){return this.nk
+"30,38,43"},
+"+id":1,
+sjO:function(a,b){this.nk=F.Wi(this,C.EN,this.nk,b)
+"40,31,30,38"},
+"+id=":1,
+goc:function(a){return this.SS
+"8,38,43"},
+"+name":1,
+soc:function(a,b){this.SS=F.Wi(this,C.YS,this.SS,b)
+"40,31,8,38"},
+"+name=":1,
+bu:function(a){return H.d(this.nk)+" "+H.d(this.SS)},
+$isbv:true},pt:{"":["Pi;JR?,i2<-,VJ,Ai",null,function(){return[C.mI]},null,null],
+yi:function(){J.kH(this.JR.lw.gn2(),new L.dY(this))},
+gVY:function(){return new P.Ip(this,L.pt.prototype.yi,null,"yi")},
+AQ:function(a){var z,y,x,w
+z=this.i2
+y=J.U6(z)
+x=y.t(z,a)
+if(x==null){w=P.L5(null,null,null,J.O,L.Pf)
+w=R.Jk(w)
+x=new L.bv(a,"",w,null,null)
+y.u(z,a,x)}return x},
+LZ:function(a){var z=[]
+J.kH(this.i2,new L.vY(a,z))
+H.bQ(z,new L.dS(this))
+J.kH(a,new L.ZW(this))},
+static:{AC:function(a,b){return J.ja(b,new L.Zd(a))}}},Zd:{"":"Tp;a",
+call$1:function(a){return J.xC(J.UQ(a,"id"),this.a)},
+"+call:1:0":0,
+$isEH:true,
+$is_HB:true,
+$is_Dv:true},dY:{"":"Tp;a",
+call$1:function(a){var z=J.U6(a)
+if(J.xC(z.t(a,"type"),"IsolateList"))this.a.LZ(z.t(a,"members"))},
+"+call:1:0":0,
+$isEH:true,
+$is_HB:true,
+$is_Dv:true},vY:{"":"Tp;a,b",
+call$2:function(a,b){if(L.AC(a,this.a)!==!0)this.b.push(a)},
+"+call:2:0":0,
+$isEH:true,
+$is_bh:true},dS:{"":"Tp;c",
+call$1:function(a){J.V1(this.c.i2,a)},
+"+call:1:0":0,
+$isEH:true,
+$is_HB:true,
+$is_Dv:true},ZW:{"":"Tp;d",
+call$1:function(a){var z,y,x,w,v
+z=J.U6(a)
+y=z.t(a,"id")
+x=z.t(a,"name")
+z=this.d.i2
+w=J.U6(z)
+if(w.t(z,y)==null){v=P.L5(null,null,null,J.O,L.Pf)
+v=R.Jk(v)
+w.u(z,y,new L.bv(y,x,v,null,null))}else J.DF(w.t(z,y),x)},
+"+call:1:0":0,
+$isEH:true,
+$is_HB:true,
+$is_Dv:true},dZ:{"":"Pi;JR?,IT,Jj,VJ,Ai",
+gzd:function(){return this.IT
+"8,38,43"},
+"+currentHash":1,
+szd:function(a){this.IT=F.Wi(this,C.h1,this.IT,a)
+"40,31,8,38"},
+"+currentHash=":1,
+glD:function(){return this.Jj
+"96,38,43"},
+"+currentHashUri":1,
+slD:function(a){this.Jj=F.Wi(this,C.tv,this.Jj,a)
+"40,31,96,38"},
+"+currentHashUri=":1,
+kI:function(){var z,y
+z=C.PP.aM(window)
+y=new W.Ov(0,z.uv,z.Ph,W.aF(new L.Qe(this)),z.Sg)
+H.VM(y,[H.W8(z,"RO",0)])
+y.Zz()
+if(!this.S7())this.df()},
+vI:function(){var z,y,x,w,v
+z=$.oy()
+y=z.R4(z,this.IT)
+if(y==null)return
+z=y.oH
+x=z.input
+w=z.index
+v=z.index
+if(0>=z.length)throw H.e(z,0)
+z=J.q8(z[0])
+if(typeof z!=="number")throw H.s(z)
+return C.xB.JT(x,w,v+z)},
+gAT:function(){return J.xC(J.UQ(this.Jj.ghY().iY,"type"),"Script")},
+gDe:function(){return P.pE(J.UQ(this.Jj.ghY().iY,"name"),C.dy,!0)},
+R6:function(){var z,y
+z=this.vI()
+if(z==null)return 0
+y=z.split("/")
+if(2>=y.length)throw H.e(y,2)
+return H.BU(y[2],null,null)},
+S7:function(){var z=J.Co(C.ol.gmW(window))
+this.IT=F.Wi(this,C.h1,this.IT,z)
+if(J.xC(this.IT,"")||J.xC(this.IT,"#")){J.We(C.ol.gmW(window),"#/isolates/")
+return!0}return!1},
+df:function(){var z,y
+z=J.Co(C.ol.gmW(window))
+this.IT=F.Wi(this,C.h1,this.IT,z)
+y=J.ZZ(this.IT,1)
+z=P.r6($.cO().ej(y))
+this.Jj=F.Wi(this,C.tv,this.Jj,z)
+this.JR.lw.ox(y)},
+PI:function(a){var z=this.R6()
+if(J.xC(z,0))return"#/isolates/"
+return"#/isolates/"+H.d(z)+"/"+H.d(a)
+"8,97,8,43"},
+"+currentIsolateRelativeLink:1:0":1,
+Ao:function(a){var z=this.R6()
+if(J.xC(z,0))return"#/isolates/"
+return"#/isolates/"+H.d(z)+"/objects/"+H.d(a)
+"8,98,30,43"},
+"+currentIsolateObjectLink:1:0":1,
+dL:function(a){var z=this.R6()
+if(J.xC(z,0))return"#/isolates/"
+return"#/isolates/"+H.d(z)+"/classes/"+H.d(a)
+"8,99,30,43"},
+"+currentIsolateClassLink:1:0":1,
+WW:function(a,b){var z=this.R6()
+if(J.xC(z,0))return"#/isolates/"
+return this.yX(z,a,b)
+"8,98,30,7,8,43"},
+"+currentIsolateScriptLink:2:0":1,
+r4:function(a,b){return"#/isolates/"+H.d(a)+"/"+H.d(b)
+"8,100,30,97,8,43"},
+"+relativeLink:2:0":1,
+Dd:function(a,b){return"#/isolates/"+H.d(a)+"/objects/"+H.d(b)
+"8,100,30,98,30,43"},
+"+objectLink:2:0":1,
+bD:function(a,b){return"#/isolates/"+H.d(a)+"/classes/"+H.d(b)
+"8,100,30,99,30,43"},
+"+classLink:2:0":1,
+yX:function(a,b,c){var z=P.jW(C.kg,c,!0)
+return"#/isolates/"+H.d(a)+"/objects/"+H.d(b)+"?type=Script&name="+z
+"8,100,30,98,30,7,8,43"},
+"+scriptLink:3:0":1,
+static:{"":"kx,K3D,qY",}},Qe:{"":"Tp;a",
+call$1:function(a){var z=this.a
+if(z.S7())return
+z.df()},
+"+call:1:0":0,
+$isEH:true,
+$is_HB:true,
+$is_Dv:true},Nu:{"":"Pi;JR?,e0?",
+pG:function(){return this.e0.call$0()},
+gEI:function(){return this.oJ
+"8,38,43"},
+"+prefix":1,
+sEI:function(a){this.oJ=F.Wi(this,C.qb,this.oJ,a)
+"40,31,8,38"},
+"+prefix=":1,
+gn2:function(){return this.vm
+"95,38,43"},
+"+responses":1,
+sn2:function(a){this.vm=F.Wi(this,C.wH,this.vm,a)
+"40,31,95,38"},
+"+responses=":1,
+Qn:function(a){var z,y
+z=C.lM.kV(a)
+y=J.x(z)
+if(typeof z==="object"&&z!==null&&!!y.$isL8)this.dq([z])
+else this.dq(z)},
+dq:function(a){var z=R.Jk(a)
+this.vm=F.Wi(this,C.wH,this.vm,z)
+if(this.e0!=null)this.pG()},
+AI:function(a){var z,y
+z=J.RE(a)
+y=H.d(z.gys(a))+" "+z.gpo(a)
+if(z.gys(a)===0)y="No service found. Did you run with --enable-vm-service ?"
+this.dq([H.B7(["type","RequestError","error",y],P.L5(null,null,null,null,null))])},
+ox:function(a){var z
+if(this.JR.Z6.gAT()){z=this.JR.Z6.gDe()
+this.iG(z,a).ml(new L.pF(this,z))}else this.ym(this,a).ml(new L.Ha(this)).OA(new L.nu(this))},
+iG:function(a,b){var z,y,x
+z=this.JR.Z6.R6()
+y=this.JR.nI.AQ(z)
+x=J.UQ(y.gXR(),a)
+if(x!=null)return P.Ab(x,null)
+return this.ym(this,b).ml(new L.be(a,y)).OA(new L.Pg(this))}},pF:{"":"Tp;a,b",
+call$1:function(a){var z=this.a
+if(a!=null)z.dq([H.B7(["type","Script","source",a],P.L5(null,null,null,null,null))])
+else z.dq([H.B7(["type","RequestError","error","Source for "+this.b+" could not be loaded."],P.L5(null,null,null,null,null))])},
+"+call:1:0":0,
+$isEH:true,
+$is_HB:true,
+$is_Dv:true},Ha:{"":"Tp;c",
+call$1:function(a){this.c.Qn(a)},
+"+call:1:0":0,
+$isEH:true,
+$is_HB:true,
+$is_Dv:true},nu:{"":"Tp;d",
+call$1:function(a){var z,y
+z=J.RE(a)
+y=this.d
+if(typeof a==="object"&&a!==null&&!!z.$isaE)y.AI(a.G1)
+else y.AI(z.gN(a))},
+"+call:1:0":0,
+$isEH:true,
+$is_HB:true,
+$is_Dv:true},be:{"":"Tp;a,b",
+call$1:function(a){var z=L.Sp(C.lM.kV(a))
+J.kW(this.b.gXR(),this.a,z)
+return z},
+"+call:1:0":0,
+$isEH:true,
+$is_HB:true,
+$is_Dv:true},Pg:{"":"Tp;c",
+call$1:function(a){this.c.AI(J.l2(a))
+return},
+"+call:1:0":0,
+$isEH:true,
+$is_HB:true,
+$is_Dv:true},jI:{"":"Nu;JR,e0,oJ,vm,VJ,Ai",
+ym:function(a,b){return W.It(J.WB(this.oJ,b),null,null)}},Rb:{"":"Nu;Hr,Oy,JR,e0,oJ,vm,VJ,Ai",
+Vc:function(a){var z,y,x,w,v
+z=J.RE(a)
+y=J.UQ(z.gRn(a),"id")
+x=J.UQ(z.gRn(a),"name")
+w=J.UQ(z.gRn(a),"data")
+if(!J.xC(x,"observatoryData"))return
+P.JS("Got reply "+H.d(y)+" "+H.d(w))
+z=this.Hr
+v=z.t(z,y)
+if(v!=null){z.Rz(z,y)
+P.JS("Completing "+H.d(y))
+J.Xf(v,w)}else P.JS("Could not find completer for "+H.d(y))},
+gT9:function(){return new H.Pm(this,L.Rb.prototype.Vc,null,"Vc")},
+ym:function(a,b){var z,y,x,w
+z=""+this.Oy
+y=H.B7([],P.L5(null,null,null,null,null))
+y.u(y,"id",z)
+y.u(y,"method","observatoryQuery")
+y.u(y,"query",b)
+this.Oy=this.Oy+1
+x=null
+w=new P.Zf(P.Dt(x))
+H.VM(w,[x])
+x=this.Hr
+x.u(x,z,w)
+J.Ih(W.uV(window.parent),C.lM.KP(y),"*")
+return w.MM}},Zw:{"":["Pi;Rd,n7,LA>-,Vg,VJ,Ai",null,null,function(){return[C.mI]},null,null,null],
+geV:function(){return this.Vg
+"8,38,43"},
+"+paddedLine":1,
+seV:function(a){var z=this.Vg
+if(this.gUV(this)&&!J.xC(z,a)){z=new T.qI(this,C.X9,z,a)
+z.$builtinTypeInfo=[null]
+this.SZ(this,z)}this.Vg=a
+"40,31,8,38"},
+"+paddedLine=":1,
+QQ:function(a,b,c){var z,y,x,w,v
+z=""+this.Rd
+this.Vg=F.Wi(this,C.X9,this.Vg,z)
+for(y=J.q8(this.Vg),z=this.n7;x=J.Wx(y),x.C(y,z);y=x.g(y,1)){w=" "+H.d(this.Vg)
+v=this.Vg
+if(this.gUV(this)&&!J.xC(v,w)){v=new T.qI(this,C.X9,v,w)
+v.$builtinTypeInfo=[null]
+this.SZ(this,v)}this.Vg=w}},
+static:{il:function(a,b,c){var z=new L.Zw(a,b,c,null,null,null)
+z.QQ(a,b,c)
+return z}}},Pf:{"":"Pi;WF,uM,ZQ,VJ,Ai",
+gfY:function(a){return this.WF
+"8,38,43"},
+"+kind":1,
+sfY:function(a,b){this.WF=F.Wi(this,C.fy,this.WF,b)
+"40,31,8,38"},
+"+kind=":1,
+gO3:function(a){return this.uM
+"8,38,43"},
+"+url":1,
+sO3:function(a,b){this.uM=F.Wi(this,C.Fh,this.uM,b)
+"40,31,8,38"},
+"+url=":1,
+gXJ:function(){return this.ZQ
+"101,38,43"},
+"+lines":1,
+sXJ:function(a){this.ZQ=F.Wi(this,C.Cv,this.ZQ,a)
+"40,31,101,38"},
+"+lines=":1,
+Cn:function(a){var z,y,x,w,v
+z=J.uH(a,"\n")
+y=(""+(z.length+1)).length
+for(x=0;x<z.length;x=w){w=x+1
+v=L.il(w,y,z[x])
+J.bi(this.ZQ,v)}},
+bu:function(a){return"ScriptSource"},
+EQ:function(a){var z,y
+z=J.U6(a)
+y=z.t(a,"kind")
+this.WF=F.Wi(this,C.fy,this.WF,y)
+y=z.t(a,"name")
+this.uM=F.Wi(this,C.Fh,this.uM,y)
+this.Cn(z.t(a,"source"))},
+$isPf:true,
+static:{Sp:function(a){var z=R.Jk([])
+z=new L.Pf("","",z,null,null)
+z.EQ(a)
+return z}}}}],["observatory_application_element","package:observatory/src/observatory_elements/observatory_application.dart",,V,{F1:{"":["waa;k5%-,VJ,Ai,tH-,VJ,Ai,VJ,Ai,ZI,uN,z3,TQ,Vk,Ye,mT,KM-",null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,function(){return[C.nJ]}],
+gzj:function(a){return a.k5
+"44,38,39"},
+"+devtools":1,
+szj:function(a,b){a.k5=this.pD(a,C.Na,a.k5,b)
+"40,31,44,38"},
+"+devtools=":1,
+ZB:function(a){var z
+if(a.k5===!0){z=L.WS()
+a.tH=this.pD(a,C.wh,a.tH,z)}else{z=L.AK()
+a.tH=this.pD(a,C.wh,a.tH,z)}"40"},
+"@":function(){return[C.bd]},
+static:{fv:function(a){var z,y,x,w,v
+z=$.Nd()
+y=P.Py(null,null,null,J.O,W.I0)
+x=J.O
+w=W.cv
+v=new V.br(P.Py(null,null,null,x,w),null,null)
+H.VM(v,[x,w])
+a.k5=!1
+a.Ye=z
+a.mT=y
+a.KM=v
+C.k0.ZL(a)
+C.k0.FH(a)
+C.k0.ZB(a)
+return a
+"26"},"+new ObservatoryApplicationElement$created:0:0":1}},"+ObservatoryApplicationElement": [102],waa:{"":"uL+Pi;",$isd3:true}}],["observatory_element","package:observatory/src/observatory_elements/observatory_element.dart",,Z,{uL:{"":["Nr;tH%-,VJ,Ai,VJ,Ai,ZI,uN,z3,TQ,Vk,Ye,mT,KM-",null,null,null,null,null,null,null,null,null,null,null,null,function(){return[C.nJ]}],
+i4:function(a){A.dM.prototype.i4.call(this,a)
+"40"},
+"+enteredView:0:0":1,
+Nz:function(a){A.dM.prototype.Nz.call(this,a)
+"40"},
+"+leftView:0:0":1,
+gQG:function(a){return a.tH
+"103,38,39"},
+"+app":1,
+sQG:function(a,b){a.tH=this.pD(a,C.wh,a.tH,b)
+"40,31,103,38"},
+"+app=":1,
+gpQ:function(a){return!0
+"44"},
+"+applyAuthorStyles":1,
+"@":function(){return[C.J0]},
+static:{Hx:function(a){var z,y,x,w,v
+z=$.Nd()
+y=P.Py(null,null,null,J.O,W.I0)
+x=J.O
+w=W.cv
+v=new V.br(P.Py(null,null,null,x,w),null,null)
+H.VM(v,[x,w])
+a.Ye=z
+a.mT=y
+a.KM=v
+C.mk.ZL(a)
+C.mk.FH(a)
+return a
+"27"},"+new ObservatoryElement$created:0:0":1}},"+ObservatoryElement": [104],Nr:{"":"ir+Pi;",$isd3:true}}],["observe.src.change_notifier","package:observe/src/change_notifier.dart",,O,{Pi:{"":"a;",
+gqh:function(a){var z,y
+if(a.VJ==null){z=this.gqw(a)
+a.VJ=P.bK(this.gl1(a),z,!0,null)}z=a.VJ
+z.toString
+y=new P.Ik(z)
+H.VM(y,[H.W8(z,"WV",0)])
+return y},
+w3:function(a){},
+gqw:function(a){return new H.YP(this,O.Pi.prototype.w3,a,"w3")},
+ni:function(a){a.VJ=null},
+gl1:function(a){return new H.YP(this,O.Pi.prototype.ni,a,"ni")},
+BN:function(a){var z,y,x
+z=a.Ai
+a.Ai=null
+y=a.VJ
+if(y!=null){x=y.iE
+x=x==null?y!=null:x!==y}else x=!1
+if(x&&z!=null){x=new P.Yp(z)
+H.VM(x,[T.yj])
+if(y.Gv>=4)H.vh(y.q7())
+y.Iv(x)
+return!0}return!1},
+gDx:function(a){return new H.YP(this,O.Pi.prototype.BN,a,"BN")},
+gUV:function(a){var z,y
+z=a.VJ
+if(z!=null){y=z.iE
+z=y==null?z!=null:y!==z}else z=!1
+return z},
+pD:function(a,b,c,d){return F.Wi(a,b,c,d)},
+SZ:function(a,b){var z,y
+z=a.VJ
+if(z!=null){y=z.iE
+z=y==null?z!=null:y!==z}else z=!1
+if(!z)return
+if(a.Ai==null){a.Ai=[]
+P.rb(this.gDx(a))}a.Ai.push(b)},
+$isd3:true}}],["observe.src.change_record","package:observe/src/change_record.dart",,T,{yj:{"":"a;",$isyj:true},qI:{"":"yj;WA<,oc>,jL>,zZ>",
+bu:function(a){return"#<PropertyChangeRecord "+H.d(this.oc)+" from: "+H.d(this.jL)+" to: "+H.d(this.zZ)+">"},
+$isqI:true}}],["observe.src.compound_path_observer","package:observe/src/compound_path_observer.dart",,Y,{J3:{"":"Pi;b9,kK,Sv,rk,YX,B6,VJ,Ai",
+kb:function(a){return this.rk.call$1(a)},
+gB:function(a){return this.b9.length},
+"+length":0,
+gP:function(a){return this.Sv
+"40,38"},
+"+value":1,
+r6:function(a,b){return this.gP(a).call$1(b)},
+wE:function(a){var z,y,x,w
+if(this.YX)return
+this.YX=!0
+z=this.geu()
+for(y=this.b9,x=new H.a7(y,y.length,0,null),H.VM(x,[H.W8(y,"Q",0)]),y=this.kK;x.G();){w=J.Ib(x.mD).w4(!1)
+w.dB=$.X3.cR(z)
+w.o7=P.VH(P.AY,$.X3)
+w.Bd=$.X3.Al(P.No)
+y.push(w)}this.CV()},
+TF:function(a){if(this.B6)return
+this.B6=!0
+P.rb(this.gMc())},
+geu:function(){return new H.Pm(this,Y.J3.prototype.TF,null,"TF")},
+CV:function(){var z,y
+this.B6=!1
+z=this.b9
+if(z.length===0)return
+z=new H.A8(z,new Y.E5())
+H.VM(z,[null,null])
+y=z.br(z)
+if(this.rk!=null)y=this.kb(y)
+this.Sv=F.Wi(this,C.ls,this.Sv,y)},
+gMc:function(){return new P.Ip(this,Y.J3.prototype.CV,null,"CV")},
+cO:function(a){var z,y,x
+z=this.b9
+if(z.length===0)return
+if(this.YX)for(y=this.kK,x=new H.a7(y,y.length,0,null),H.VM(x,[H.W8(y,"Q",0)]);x.G();)x.mD.ed()
+C.Nm.sB(z,0)
+C.Nm.sB(this.kK,0)
+this.Sv=null},
+w3:function(a){return this.wE(this)},
+gqw:function(a){return new H.YP(this,Y.J3.prototype.w3,a,"w3")},
+ni:function(a){return this.cO(this)},
+gl1:function(a){return new H.YP(this,Y.J3.prototype.ni,a,"ni")},
+$isJ3:true},E5:{"":"Tp;",
+call$1:function(a){return J.Vm(a)},
+"+call:1:0":0,
+$isEH:true,
+$is_HB:true,
+$is_Dv:true}}],["observe.src.dirty_check","package:observe/src/dirty_check.dart",,O,{Y3:function(){var z,y,x,w,v,u,t,s,r
+if($.Td)return
+if($.tW==null)return
+$.Td=!0
+z=0
+y=null
+do{++z
+if(z===1000)y=[]
+x=$.tW
+w=[]
+w.$builtinTypeInfo=[F.d3]
+$.tW=w
+for(w=y!=null,v=!1,u=0;u<x.length;++u){t=x[u]
+s=t.R9
+s=s.iE!==s
+if(s){if(t.BN(t)){if(w)y.push([u,t])
+v=!0}$.tW.push(t)}}}while(z<1000&&v)
+if(w&&v){$.iU().A3("Possible loop in Observable.dirtyCheck, stopped checking.")
+for(y.toString,w=new H.a7(y,y.length,0,null),H.VM(w,[H.W8(y,"Q",0)]);w.G();){r=w.mD
+s=J.U6(r)
+$.iU().A3("In last iteration Observable changed at index "+H.d(s.t(r,0))+", object: "+H.d(s.t(r,1))+".")}}$.el=$.tW.length
+$.Td=!1},Ht:function(){var z={}
+z.a=!1
+z=new O.o5(z)
+return new P.wJ(null,null,null,null,new O.zI(z),new O.id(z),null,null,null,null,null,null)},o5:{"":"Tp;a",
+call$2:function(a,b){var z=this.a
+if(z.a)return
+z.a=!0
+a.RK(b,new O.b5(z))},
+"+call:2:0":0,
+$isEH:true,
+$is_bh:true},b5:{"":"Tp;a",
+call$0:function(){this.a.a=!1
+O.Y3()},
+"+call:0:0":0,
+$isEH:true,
+$is_X0:true},zI:{"":"Tp;b",
+call$4:function(a,b,c,d){if(d==null)return d
+return new O.Zb(this.b,b,c,d)},
+"+call:4:0":0,
+$isEH:true},Zb:{"":"Tp;c,d,e,f",
+call$0:function(){this.c.call$2(this.d,this.e)
+return this.f.call$0()},
+"+call:0:0":0,
+$isEH:true,
+$is_X0:true},id:{"":"Tp;g",
+call$4:function(a,b,c,d){if(d==null)return d
+return new O.iV(this.g,b,c,d)},
+"+call:4:0":0,
+$isEH:true},iV:{"":"Tp;h,i,j,k",
+call$1:function(a){this.h.call$2(this.i,this.j)
+return this.k.call$1(a)},
+"+call:1:0":0,
+$isEH:true,
+$is_HB:true,
+$is_Dv:true}}],["observe.src.list_diff","package:observe/src/list_diff.dart",,G,{f6:function(a,b,c,d,e,f){var z,y,x,w,v,u,t,s,r,q,p,o,n,m,l,k
+z=J.WB(J.xH(f,e),1)
+y=J.WB(J.xH(c,b),1)
+x=P.A(z,null)
+if(typeof z!=="number")throw H.s(z)
+w=x.length
+v=0
+for(;v<z;++v){u=P.A(y,null)
+if(v>=w)throw H.e(x,v)
+x[v]=u
+u=x[v]
+if(0>=u.length)throw H.e(u,0)
+u[0]=v}if(typeof y!=="number")throw H.s(y)
+t=0
+for(;t<y;++t){if(0>=w)throw H.e(x,0)
+u=x[0]
+if(t>=u.length)throw H.e(u,t)
+u[t]=t}for(u=J.U6(d),s=J.Qc(b),r=J.U6(a),v=1;v<z;++v)for(q=v-1,p=e+v-1,t=1;t<y;++t){o=J.xC(u.t(d,p),r.t(a,J.xH(s.g(b,t),1)))
+n=x[q]
+m=t-1
+if(o){if(v>=w)throw H.e(x,v)
+o=x[v]
+if(q>=w)throw H.e(x,q)
+if(m>=n.length)throw H.e(n,m)
+m=n[m]
+if(t>=o.length)throw H.e(o,t)
+o[t]=m}else{if(q>=w)throw H.e(x,q)
+if(t>=n.length)throw H.e(n,t)
+l=J.WB(n[t],1)
+if(v>=w)throw H.e(x,v)
+o=x[v]
+if(m>=o.length)throw H.e(o,m)
+k=J.WB(o[m],1)
+m=x[v]
+o=P.J(l,k)
+if(t>=m.length)throw H.e(m,t)
+m[t]=o}}return x},Mw:function(a){var z,y,x,w,v,u,t,s,r,q,p,o,n
+z=a.length
+y=z-1
+if(0>=z)throw H.e(a,0)
+x=a[0].length-1
+if(y<0)throw H.e(a,y)
+w=a[y]
+if(x<0||x>=w.length)throw H.e(w,x)
+v=w[x]
+u=[]
+while(!0){if(!(y>0||x>0))break
+c$0:{if(y===0){u.push(2);--x
+break c$0}if(x===0){u.push(3);--y
+break c$0}w=y-1
+if(w<0)throw H.e(a,w)
+t=a[w]
+s=x-1
+r=t.length
+if(s<0||s>=r)throw H.e(t,s)
+q=t[s]
+if(x<0||x>=r)throw H.e(t,x)
+p=t[x]
+if(y<0)throw H.e(a,y)
+t=a[y]
+if(s>=t.length)throw H.e(t,s)
+o=t[s]
+n=P.J(P.J(p,o),q)
+if(n===q){if(J.xC(q,v))u.push(0)
+else{u.push(1)
+v=q}x=s
+y=w}else if(n===p){u.push(3)
+v=p
+y=w}else{u.push(2)
+v=o
+x=s}}}z=new H.iK(u)
+H.VM(z,[null])
+return z.br(z)},rB:function(a,b,c){var z,y,x
+for(z=J.U6(a),y=J.U6(b),x=0;x<c;++x)if(!J.xC(z.t(a,x),y.t(b,x)))return x
+return c},xU:function(a,b,c){var z,y,x,w,v,u
+z=J.U6(a)
+y=z.gB(a)
+x=J.U6(b)
+w=x.gB(b)
+v=0
+while(!0){if(v<c){y=J.xH(y,1)
+u=z.t(a,y)
+w=J.xH(w,1)
+u=J.xC(u,x.t(b,w))}else u=!1
+if(!u)break;++v}return v},jj:function(a,b,c,d,e,f){var z,y,x,w,v,u,t,s,r,q,p,o,n,m
+z=J.Wx(c)
+y=J.Wx(f)
+x=P.J(z.W(c,b),y.W(f,e))
+w=J.x(b)
+v=w.n(b,0)&&e===0?G.rB(a,d,x):0
+u=z.n(c,J.q8(a))&&y.n(f,J.q8(d))?G.xU(a,d,x-v):0
+b=w.g(b,v)
+e+=v
+c=z.W(c,u)
+f=y.W(f,u)
+z=J.Wx(c)
+if(J.xC(z.W(c,b),0)&&J.xC(J.xH(f,e),0))return C.xD
+if(J.xC(b,c)){t=[]
+z=new P.Yp(t)
+z.$builtinTypeInfo=[null]
+s=new G.W4(a,z,t,b,0)
+if(typeof f!=="number")throw H.s(f)
+z=J.U6(d)
+for(;e<f;e=r){r=e+1
+s.Il.push(z.t(d,e))}return[s]}else if(e===f){z=z.W(c,b)
+t=[]
+y=new P.Yp(t)
+y.$builtinTypeInfo=[null]
+return[new G.W4(a,y,t,b,z)]}q=G.Mw(G.f6(a,b,c,d,e,f))
+p=[]
+p.$builtinTypeInfo=[G.W4]
+for(z=J.U6(d),o=e,n=b,s=null,m=0;m<q.length;++m)switch(q[m]){case 0:if(s!=null){p.push(s)
+s=null}n=J.WB(n,1);++o
+break
+case 1:if(s==null){t=[]
+y=new P.Yp(t)
+y.$builtinTypeInfo=[null]
+s=new G.W4(a,y,t,n,0)}s.dM=J.WB(s.dM,1)
+n=J.WB(n,1)
+s.Il.push(z.t(d,o));++o
+break
+case 2:if(s==null){t=[]
+y=new P.Yp(t)
+y.$builtinTypeInfo=[null]
+s=new G.W4(a,y,t,n,0)}s.dM=J.WB(s.dM,1)
+n=J.WB(n,1)
+break
+case 3:if(s==null){t=[]
+y=new P.Yp(t)
+y.$builtinTypeInfo=[null]
+s=new G.W4(a,y,t,n,0)}s.Il.push(z.t(d,o));++o
+break
+default:}if(s!=null)p.push(s)
+return p},m1:function(a,b){var z,y,x,w,v,u,t,s,r,q,p,o,n,m,l
+z=b.gWA()
+y=J.zj(b)
+x=b.gIl()
+x.toString
+w=H.Y9(x.$asQ,H.oX(x))
+v=w==null?null:w[0]
+v=P.F(x,!0,v)
+u=b.gNg()
+if(u==null)u=0
+x=new P.Yp(v)
+x.$builtinTypeInfo=[null]
+t=new G.W4(z,x,v,y,u)
+for(s=!1,r=0,q=0;z=a.length,q<z;++q){if(q<0)throw H.e(a,q)
+p=a[q]
+p.jr=J.WB(p.jr,r)
+if(s)continue
+z=t.jr
+y=J.WB(z,J.q8(t.Uj.G4))
+x=p.jr
+o=P.J(y,J.WB(x,p.dM))-P.y(z,x)
+if(o>=0){C.Nm.W4(a,q);--q
+z=J.xH(p.dM,J.q8(p.Uj.G4))
+if(typeof z!=="number")throw H.s(z)
+r-=z
+t.dM=J.WB(t.dM,J.xH(p.dM,o))
+n=J.xH(J.WB(J.q8(t.Uj.G4),J.q8(p.Uj.G4)),o)
+if(J.xC(t.dM,0)&&J.xC(n,0))s=!0
+else{m=p.Il
+if(J.u6(t.jr,p.jr)){z=t.Uj
+z=z.Mu(z,0,J.xH(p.jr,t.jr))
+m.toString
+if(typeof m!=="object"||m===null||!!m.fixed$length)H.vh(P.f("insertAll"))
+H.IC(m,0,z)}if(J.xZ(J.WB(t.jr,J.q8(t.Uj.G4)),J.WB(p.jr,p.dM))){z=t.Uj
+J.DB(m,z.Mu(z,J.xH(J.WB(p.jr,p.dM),t.jr),J.q8(t.Uj.G4)))}t.Il=m
+t.Uj=p.Uj
+if(J.u6(p.jr,t.jr))t.jr=p.jr
+s=!1}}else if(J.u6(t.jr,p.jr)){C.Nm.xe(a,q,t);++q
+l=J.xH(t.dM,J.q8(t.Uj.G4))
+p.jr=J.WB(p.jr,l)
+if(typeof l!=="number")throw H.s(l)
+r+=l
+s=!0}else s=!1}if(!s)a.push(t)},xl:function(a,b){var z,y
+z=[]
+H.VM(z,[G.W4])
+for(y=new H.a7(b,b.length,0,null),H.VM(y,[H.W8(b,"Q",0)]);y.G();)G.m1(z,y.mD)
+return z},u2:function(a,b){var z,y,x,w,v,u
+if(b.length===1)return b
+z=[]
+for(y=G.xl(a,b),x=new H.a7(y,y.length,0,null),H.VM(x,[H.W8(y,"Q",0)]),y=a.h3;x.G();){w=x.mD
+if(J.xC(w.gNg(),1)&&J.xC(J.q8(w.gRt().G4),1)){v=J.i4(w.gRt().G4,0)
+u=J.zj(w)
+if(u>>>0!==u||u>=y.length)throw H.e(y,u)
+if(!J.xC(v,y[u]))z.push(w)
+continue}v=J.RE(w)
+C.Nm.Ay(z,G.jj(a,v.gvH(w),J.WB(v.gvH(w),w.gNg()),w.gIl(),0,J.q8(w.gRt().G4)))}return z},W4:{"":"a;WA<,Uj,Il<,jr,dM",
+gvH:function(a){return this.jr},
+"+index":0,
+gRt:function(){return this.Uj},
+gNg:function(){return this.dM},
+ck:function(a){var z=this.jr
+if(typeof z!=="number")throw H.s(z)
+z=a<z
+if(z)return!1
+if(!J.xC(this.dM,J.q8(this.Uj.G4)))return!0
+z=J.WB(this.jr,this.dM)
+if(typeof z!=="number")throw H.s(z)
+return a<z},
+bu:function(a){return"#<ListChangeRecord index: "+H.d(this.jr)+", removed: "+H.d(this.Uj)+", addedCount: "+H.d(this.dM)+">"},
+$isW4:true,
+static:{XM:function(a,b,c,d){var z
+if(d==null)d=[]
+if(c==null)c=0
+z=new P.Yp(d)
+z.$builtinTypeInfo=[null]
+return new G.W4(a,z,d,b,c)}}}}],["observe.src.metadata","package:observe/src/metadata.dart",,K,{Fa:{"":"a;"},x9:{"":"a;"}}],["observe.src.observable","package:observe/src/observable.dart",,F,{Wi:function(a,b,c,d){var z,y
+z=J.RE(a)
+if(z.gUV(a)&&!J.xC(c,d)){y=new T.qI(a,b,c,d)
+H.VM(y,[null])
+z.SZ(a,y)}return d},d3:{"":"a;",$isd3:true},X6:{"":"Tp;a,b",
+call$2:function(a,b){var z,y,x,w
+z=this.b
+y=z.p6.rN(a).Ax
+if(!J.xC(b,y)){x=this.a
+if(x.a==null)x.a=[]
+x=x.a
+w=new T.qI(z,a,b,y)
+H.VM(w,[null])
+x.push(w)
+z=z.V2
+z.u(z,a,y)}},
+"+call:2:0":0,
+$isEH:true,
+$is_bh:true}}],["observe.src.observable_box","package:observe/src/observable_box.dart",,A,{xh:{"":"Pi;",
+gP:function(a){return this.L1
+"105,38"},
+"+value":1,
+r6:function(a,b){return this.gP(a).call$1(b)},
+sP:function(a,b){this.L1=F.Wi(this,C.ls,this.L1,b)
+"40,106,105,38"},
+"+value=":1,
+bu:function(a){return"#<"+H.d(new H.cu(H.dJ(this),null))+" value: "+H.d(this.L1)+">"}}}],["observe.src.observable_list","package:observe/src/observable_list.dart",,Q,{wn:{"":"uF;b3,xg,h3,VJ,Ai",
+gRT:function(){var z,y
+if(this.xg==null)this.xg=P.bK(new Q.cj(this),null,!0,null)
+z=this.xg
+z.toString
+y=new P.Ik(z)
+H.VM(y,[H.W8(z,"WV",0)])
+return y},
+gB:function(a){return this.h3.length
+"30,38"},
+"+length":1,
+sB:function(a,b){var z,y,x,w,v,u,t
+z=this.h3
+y=z.length
+if(y===b)return
+this.pD(this,C.Wn,y,b)
+x=this.xg
+if(x!=null){w=x.iE
+x=w==null?x!=null:w!==x}else x=!1
+if(x){x=J.Wx(b)
+if(x.C(b,y)){if(x.C(b,0)||x.D(b,z.length))H.vh(P.TE(b,0,z.length))
+if(typeof b!=="number")throw H.s(b)
+if(y<b||y>z.length)H.vh(P.TE(y,b,z.length))
+x=new H.nH(z,b,y)
+x.$builtinTypeInfo=[null]
+w=x.Bz
+v=J.Wx(w)
+if(v.C(w,0))H.vh(new P.bJ("value "+H.d(w)))
+u=x.n1
+if(u!=null){if(J.u6(u,0))H.vh(new P.bJ("value "+H.d(u)))
+if(v.D(w,u))H.vh(P.TE(w,0,u))}x=x.br(x)
+w=new P.Yp(x)
+w.$builtinTypeInfo=[null]
+this.iH(new G.W4(this,w,x,b,0))}else{x=x.W(b,y)
+t=[]
+w=new P.Yp(t)
+w.$builtinTypeInfo=[null]
+this.iH(new G.W4(this,w,t,y,x))}}C.Nm.sB(z,b)
+"40,31,30,38"},
+"+length=":1,
+t:function(a,b){var z=this.h3
+if(b>>>0!==b||b>=z.length)throw H.e(z,b)
+return z[b]
+"107,29,30,38"},
+"+[]:1:0":1,
+u:function(a,b,c){var z,y,x,w
+z=this.h3
+if(b>>>0!==b||b>=z.length)throw H.e(z,b)
+y=z[b]
+x=this.xg
+if(x!=null){w=x.iE
+x=w==null?x!=null:w!==x}else x=!1
+if(x){x=[y]
+w=new P.Yp(x)
+w.$builtinTypeInfo=[null]
+this.iH(new G.W4(this,w,x,b,1))}if(b>=z.length)throw H.e(z,b)
+z[b]=c
+"40,29,30,31,107,38"},
+"+[]=:2:0":1,
+h:function(a,b){var z,y,x,w
+z=this.h3
+y=z.length
+this.pD(this,C.Wn,y,y+1)
+x=this.xg
+if(x!=null){w=x.iE
+x=w==null?x!=null:w!==x}else x=!1
+if(x)this.iH(G.XM(this,y,1,null))
+C.Nm.h(z,b)},
+Ay:function(a,b){var z,y,x,w
+z=this.h3
+y=z.length
+C.Nm.Ay(z,b)
+this.pD(this,C.Wn,y,z.length)
+x=z.length-y
+z=this.xg
+if(z!=null){w=z.iE
+z=w==null?z!=null:w!==z}else z=!1
+if(z&&x>0)this.iH(G.XM(this,y,x,null))},
+Rz:function(a,b){var z,y
+for(z=this.h3,y=0;y<z.length;++y)if(J.xC(z[y],b)){this.UZ(this,y,y+1)
+return!0}return!1},
+UZ:function(a,b,c){var z,y,x,w,v,u,t
+z=b>=0
+if(b<0||b>this.h3.length)H.vh(P.TE(b,0,this.h3.length))
+y=c>=b
+if(c<b||c>this.h3.length)H.vh(P.TE(c,b,this.h3.length))
+x=c-b
+w=this.h3
+v=w.length
+this.pD(this,C.Wn,v,v-x)
+u=this.xg
+if(u!=null){t=u.iE
+u=t==null?u!=null:t!==u}else u=!1
+if(u&&x>0){if(b<0||b>w.length)H.vh(P.TE(b,0,w.length))
+if(c<b||c>w.length)H.vh(P.TE(c,b,w.length))
+z=new H.nH(w,b,c)
+z.$builtinTypeInfo=[null]
+y=z.Bz
+u=J.Wx(y)
+if(u.C(y,0))H.vh(new P.bJ("value "+H.d(y)))
+t=z.n1
+if(t!=null){if(J.u6(t,0))H.vh(new P.bJ("value "+H.d(t)))
+if(u.D(y,t))H.vh(P.TE(y,0,t))}z=z.br(z)
+y=new P.Yp(z)
+y.$builtinTypeInfo=[null]
+this.iH(new G.W4(this,y,z,b,0))}C.Nm.UZ(w,b,c)},
+iH:function(a){var z,y
+z=this.xg
+if(z!=null){y=z.iE
+z=y==null?z!=null:y!==z}else z=!1
+if(!z)return
+if(this.b3==null){this.b3=[]
+P.rb(this.gL6())}this.b3.push(a)},
+oC:function(){var z,y,x
+z=this.b3
+if(z==null)return!1
+y=G.u2(this,z)
+this.b3=null
+z=this.xg
+if(z!=null){x=z.iE
+x=x==null?z!=null:x!==z}else x=!1
+if(x){x=new P.Yp(y)
+H.VM(x,[G.W4])
+if(z.Gv>=4)H.vh(z.q7())
+z.Iv(x)
+return!0}return!1},
+gL6:function(){return new P.Ip(this,Q.wn.prototype.oC,null,"oC")},
+$iswn:true,
+$asWO:null,
+$ascX:null,
+static:{uX:function(a,b){var z=[]
+H.VM(z,[b])
+z=new Q.wn(null,null,z,null,null)
+H.VM(z,[b])
+return z}}},uF:{"":"ar+Pi;",$asar:null,$asWO:null,$ascX:null,$isd3:true},cj:{"":"Tp;a",
+call$0:function(){this.a.xg=null},
+"+call:0:0":0,
+$isEH:true,
+$is_X0:true}}],["observe.src.observable_map","package:observe/src/observable_map.dart",,V,{HA:{"":"yj;G3>,jL>,zZ>,JD,dr",
+bu:function(a){var z
+if(this.JD)z="insert"
+else z=this.dr?"remove":"set"
+return"#<MapChangeRecord "+z+" "+H.d(this.G3)+" from: "+H.d(this.jL)+" to: "+H.d(this.zZ)+">"},
+$isHA:true},br:{"":"Pi;Zp,VJ,Ai",
+gvc:function(a){var z=this.Zp
+return z.gvc(z)
+"108,38"},
+"+keys":1,
+gUQ:function(a){var z=this.Zp
+return z.gUQ(z)
+"109,38"},
+"+values":1,
+gB:function(a){var z=this.Zp
+return z.gB(z)
+"30,38"},
+"+length":1,
+gl0:function(a){var z=this.Zp
+return z.gB(z)===0
+"44,38"},
+"+isEmpty":1,
+gor:function(a){var z=this.Zp
+return z.gB(z)!==0
+"44,38"},
+"+isNotEmpty":1,
+PF:function(a){return this.Zp.PF(a)
+"44,31,0,38"},
+"+containsValue:1:0":1,
+x4:function(a){return this.Zp.x4(a)
+"44,78,0,38"},
+"+containsKey:1:0":1,
+t:function(a,b){var z=this.Zp
+return z.t(z,b)
+"110,78,0,38"},
+"+[]:1:0":1,
+u:function(a,b,c){var z,y,x,w,v
+z=this.Zp
+y=z.gB(z)
+x=z.t(z,b)
+z.u(z,b,c)
+w=this.VJ
+if(w!=null){v=w.iE
+w=v==null?w!=null:v!==w}else w=!1
+if(w)if(y!==z.gB(z)){z=z.gB(z)
+if(this.gUV(this)&&y!==z){z=new T.qI(this,C.Wn,y,z)
+z.$builtinTypeInfo=[null]
+this.SZ(this,z)}z=new V.HA(b,null,c,!0,!1)
+z.$builtinTypeInfo=[null,null]
+this.SZ(this,z)}else if(!J.xC(x,c)){z=new V.HA(b,x,c,!1,!1)
+z.$builtinTypeInfo=[null,null]
+this.SZ(this,z)}"40,78,111,31,110,38"},
+"+[]=:2:0":1,
+Ay:function(a,b){b.aN(b,new V.zT(this))},
+Rz:function(a,b){var z,y,x,w,v
+z=this.Zp
+y=z.gB(z)
+x=z.Rz(z,b)
+w=this.VJ
+if(w!=null){v=w.iE
+w=v==null?w!=null:v!==w}else w=!1
+if(w&&y!==z.gB(z)){w=new V.HA(b,x,null,!1,!0)
+H.VM(w,[null,null])
+this.SZ(this,w)
+F.Wi(this,C.Wn,y,z.gB(z))}return x},
+aN:function(a,b){var z=this.Zp
+return z.aN(z,b)},
+bu:function(a){return P.vW(this)},
+$asL8:null,
+$isL8:true,
+static:{WF:function(a,b,c){var z=V.Bq(a,b,c)
+z.Ay(z,a)
+return z},Bq:function(a,b,c){var z,y,x
+z=J.x(a)
+if(typeof a==="object"&&a!==null&&!!z.$isBa){z=b
+y=c
+x=new V.br(P.GV(null,null,z,y),null,null)
+H.VM(x,[z,y])}else if(typeof a==="object"&&a!==null&&!!z.$isFo){z=b
+y=c
+x=new V.br(P.L5(null,null,null,z,y),null,null)
+H.VM(x,[z,y])}else{z=b
+y=c
+x=new V.br(P.Py(null,null,null,z,y),null,null)
+H.VM(x,[z,y])}return x}}},zT:{"":"Tp;a",
+call$2:function(a,b){var z=this.a
+z.u(z,a,b)},
+"+call:2:0":0,
+$isEH:true,
+$is_bh:true}}],["observe.src.path_observer","package:observe/src/path_observer.dart",,L,{Wa:function(a,b){var z=J.x(a)
+if(typeof a==="object"&&a!==null&&!!z.$isqI)return J.xC(a.oc,b)
+if(typeof a==="object"&&a!==null&&!!z.$isHA){z=J.RE(b)
+if(typeof b==="object"&&b!==null&&!!z.$iswv)b=z.ghr(b)
+return J.xC(a.G3,b)}return!1},yf:function(a,b){var z,y,x,w,v,u,t
+if(a==null)return
+x=b
+if(typeof x==="number"&&Math.floor(x)===x){x=a
+w=J.x(x)
+if(typeof x==="object"&&x!==null&&(x.constructor===Array||!!w.$isList)&&J.J5(b,0)&&J.u6(b,J.q8(a)))return J.UQ(a,b)}else{x=b
+w=J.x(x)
+if(typeof x==="object"&&x!==null&&!!w.$iswv){z=H.vn(a)
+v=J.bB(z.gAx()).IE
+x=$.Sl()
+u=x.t(x,v)
+y=H.tT(H.YC(u==null?v:u),v)
+try{if(L.My(y,b)){x=b
+x=z.tu(x,1,J.Z0(x),[])
+return x.Ax}if(L.iN(y,C.fz)){x=J.UQ(a,J.Z0(b))
+return x}}catch(t){x=H.Ru(t)
+w=J.x(x)
+if(typeof x==="object"&&x!==null&&!!w.$ismp){if(!L.iN(y,C.OV))throw t}else throw t}}}if($.aT().mL(C.VZ))$.aT().x9("can't get "+H.d(b)+" in "+H.d(a))
+return},h6:function(a,b,c){var z,y,x,w,v
+if(a==null)return!1
+x=b
+if(typeof x==="number"&&Math.floor(x)===x){x=a
+w=J.x(x)
+if(typeof x==="object"&&x!==null&&(x.constructor===Array||!!w.$isList)&&J.J5(b,0)&&J.u6(b,J.q8(a))){J.kW(a,b,c)
+return!0}}else{x=b
+w=J.x(x)
+if(typeof x==="object"&&x!==null&&!!w.$iswv){z=H.vn(a)
+y=H.jO(J.bB(z.gAx()).IE)
+try{if(L.hg(y,b)){z.PU(b,c)
+return!0}if(L.iN(y,C.eC)){J.kW(a,J.Z0(b),c)
+return!0}}catch(v){x=H.Ru(v)
+w=J.x(x)
+if(typeof x==="object"&&x!==null&&!!w.$ismp){if(!L.iN(y,C.OV))throw v}else throw v}}}if($.aT().mL(C.VZ))$.aT().x9("can't set "+H.d(b)+" in "+H.d(a))
+return!1},My:function(a,b){var z
+for(;!J.xC(a,$.aA());){z=a.gYK()
+if(z.x4(b)===!0)return!0
+if(z.x4(C.OV)===!0)return!0
+a=L.pY(a)}return!1},hg:function(a,b){var z,y,x,w
+z=new H.GD(H.le(H.d(b.ghr(b))+"="))
+for(;!J.xC(a,$.aA());){y=a.gYK()
+x=J.UQ(y,b)
+w=J.x(x)
+if(typeof x==="object"&&x!==null&&!!w.$isRY)return!0
+if(y.x4(z)===!0)return!0
+if(y.x4(C.OV)===!0)return!0
+a=L.pY(a)}return!1},iN:function(a,b){var z,y
+for(;!J.xC(a,$.aA());){z=J.UQ(a.gYK(),b)
+y=J.x(z)
+if(typeof z==="object"&&z!==null&&!!y.$isRS&&z.guU())return!0
+a=L.pY(a)}return!1},pY:function(a){var z,y,x
+try{z=a.gAY()
+return z}catch(y){z=H.Ru(y)
+x=J.x(z)
+if(typeof z==="object"&&z!==null&&!!x.$isub)return $.aA()
+else throw y}},rd:function(a){a=J.JA(a,$.c3(),"")
+if(a==="")return!0
+if(0>=a.length)throw H.e(a,0)
+if(a[0]===".")return!1
+return $.tN().zD(a)},D7:{"":"Pi;Ii>,YB,BK,kN,cs,cT,VJ,Ai",
+E4:function(a){return this.cT.call$1(a)},
+gWA:function(){var z=this.kN
+if(0>=z.length)throw H.e(z,0)
+return z[0]},
+gP:function(a){var z,y
+if(!this.YB)return
+z=this.VJ
+if(z!=null){y=z.iE
+z=y==null?z!=null:y!==z}else z=!1
+if(!z)this.ov()
+return C.Nm.grZ(this.kN)
+"40,38"},
+"+value":1,
+r6:function(a,b){return this.gP(a).call$1(b)},
+sP:function(a,b){var z,y,x,w
+z=this.BK
+y=z.length
+if(y===0)return
+x=this.VJ
+if(x!=null){w=x.iE
+x=w==null?x!=null:w!==x}else x=!1
+if(!x)this.Zy(y-1)
+x=this.kN
+w=y-1
+if(w<0||w>=x.length)throw H.e(x,w)
+x=x[w]
+if(w>=z.length)throw H.e(z,w)
+if(L.h6(x,z[w],b)){z=this.kN
+if(y>=z.length)throw H.e(z,y)
+z[y]=b}"40,106,0,38"},
+"+value=":1,
+w3:function(a){O.Pi.prototype.w3.call(this,this)
+this.ov()
+this.XI()},
+gqw:function(a){return new H.YP(this,L.D7.prototype.w3,a,"w3")},
+ni:function(a){var z,y
+for(z=0;y=this.cs,z<y.length;++z){y=y[z]
+if(y!=null){y.ed()
+y=this.cs
+if(z>=y.length)throw H.e(y,z)
+y[z]=null}}O.Pi.prototype.ni.call(this,this)},
+gl1:function(a){return new H.YP(this,L.D7.prototype.ni,a,"ni")},
+Zy:function(a){var z,y,x,w,v,u
+if(a==null)a=this.BK.length
+z=this.BK
+y=z.length-1
+if(typeof a!=="number")throw H.s(a)
+x=this.cT!=null
+w=0
+for(;w<a;){v=this.kN
+if(w>=v.length)throw H.e(v,w)
+v=v[w]
+if(w>=z.length)throw H.e(z,w)
+u=L.yf(v,z[w])
+if(w===y&&x)u=this.E4(u)
+v=this.kN;++w
+if(w>=v.length)throw H.e(v,w)
+v[w]=u}},
+ov:function(){return this.Zy(null)},
+hd:function(a){var z,y,x,w,v,u,t,s,r
+for(z=this.BK,y=z.length-1,x=this.cT!=null,w=a,v=null,u=null;w<=y;w=s){t=this.kN
+s=w+1
+r=t.length
+if(s<0||s>=r)throw H.e(t,s)
+v=t[s]
+if(w<0||w>=r)throw H.e(t,w)
+t=t[w]
+if(w>=z.length)throw H.e(z,w)
+u=L.yf(t,z[w])
+if(w===y&&x)u=this.E4(u)
+if(v==null?u==null:v===u){this.Rl(a,w)
+return}t=this.kN
+if(s>=t.length)throw H.e(t,s)
+t[s]=u}this.ij(a)
+if(this.gUV(this)&&!J.xC(v,u)){z=new T.qI(this,C.ls,v,u)
+z.$builtinTypeInfo=[null]
+this.SZ(this,z)}},
+Rl:function(a,b){var z,y
+if(b==null)b=this.BK.length
+if(typeof b!=="number")throw H.s(b)
+z=a
+for(;z<b;++z){y=this.cs
+if(z<0||z>=y.length)throw H.e(y,z)
+y=y[z]
+if(y!=null)y.ed()
+this.Kh(z)}},
+XI:function(){return this.Rl(0,null)},
+ij:function(a){return this.Rl(a,null)},
+Kh:function(a){var z,y,x,w,v,u,t
+z=this.kN
+if(a<0||a>=z.length)throw H.e(z,a)
+y=z[a]
+z=this.BK
+if(a>=z.length)throw H.e(z,a)
+x=z[a]
+if(typeof x==="number"&&Math.floor(x)===x){z=J.x(y)
+if(typeof y==="object"&&y!==null&&!!z.$iswn){z=this.cs
+w=y.gRT().w4(!1)
+w.dB=$.X3.cR(new L.C4(this,a,x))
+v=P.AY
+w.o7=P.VH(v,$.X3)
+u=P.No
+w.Bd=$.X3.Al(u)
+if(a>=z.length)throw H.e(z,a)
+z[a]=w}}else{z=J.RE(y)
+if(typeof y==="object"&&y!==null&&!!z.$isd3){t=this.cs
+w=z.gqh(y).w4(!1)
+w.dB=$.X3.cR(new L.l9(this,a,x))
+v=P.AY
+w.o7=P.VH(v,$.X3)
+u=P.No
+w.Bd=$.X3.Al(u)
+if(a>=t.length)throw H.e(t,a)
+t[a]=w}}},
+d4:function(a,b,c){var z,y,x,w
+if(this.YB)for(z=J.rr(b).split("."),y=new H.a7(z,z.length,0,null),H.VM(y,[H.W8(z,"Q",0)]),z=this.BK;y.G();){x=y.mD
+if(J.xC(x,""))continue
+w=H.BU(x,10,new L.qL())
+z.push(w!=null?w:new H.GD(H.le(x)))}z=this.BK
+y=P.A(z.length+1,P.a)
+H.VM(y,[P.a])
+this.kN=y
+if(z.length===0&&c!=null)a=c.call$1(a)
+y=this.kN
+if(0>=y.length)throw H.e(y,0)
+y[0]=a
+z=P.A(z.length,P.MO)
+H.VM(z,[P.MO])
+this.cs=z},
+$isD7:true,
+static:{ao:function(a,b,c){var z,y
+z=L.rd(b)
+y=[]
+H.VM(y,[P.a])
+y=new L.D7(b,z,y,null,null,c,null,null)
+y.d4(a,b,c)
+return y}}},qL:{"":"Tp;",
+call$1:function(a){return},
+"+call:1:0":0,
+$isEH:true,
+$is_HB:true,
+$is_Dv:true},C4:{"":"Tp;a,b,c",
+call$1:function(a){var z,y
+for(z=J.GP(a),y=this.c;z.G();)if(z.gl().ck(y)){this.a.hd(this.b)
+return}},
+"+call:1:0":0,
+$isEH:true,
+$is_HB:true,
+$is_Dv:true},l9:{"":"Tp;d,e,f",
+call$1:function(a){var z,y
+for(z=J.GP(a),y=this.f;z.G();)if(L.Wa(z.gl(),y)){this.d.hd(this.e)
+return}},
+"+call:1:0":0,
+$isEH:true,
+$is_HB:true,
+$is_Dv:true},lP:{"":"Tp;",
+call$0:function(){return new H.VR(H.v4("^(?:(?:[$_a-zA-Z]+[$_a-zA-Z0-9]*|(?:[0-9]|[1-9]+[0-9]+)))(?:\\.(?:[$_a-zA-Z]+[$_a-zA-Z0-9]*|(?:[0-9]|[1-9]+[0-9]+)))*$",!1,!0,!1),null,null)},
+"+call:0:0":0,
+$isEH:true,
+$is_X0:true}}],["observe.src.to_observable","package:observe/src/to_observable.dart",,R,{Jk:function(a){var z,y,x
+z=J.x(a)
+if(typeof a==="object"&&a!==null&&!!z.$isd3)return a
+if(typeof a==="object"&&a!==null&&!!z.$isL8){y=V.Bq(a,null,null)
+z.aN(a,new R.km(y))
+return y}if(typeof a==="object"&&a!==null&&(a.constructor===Array||!!z.$iscX)){z=z.ez(a,R.np)
+x=Q.uX(null,null)
+x.Ay(x,z)
+return x}return a},km:{"":"Tp;a",
+call$2:function(a,b){var z=this.a
+z.u(z,R.Jk(a),R.Jk(b))},
+"+call:2:0":0,
+$isEH:true,
+$is_bh:true}}],["path","package:path/path.dart",,B,{ab:function(){var z,y
+z=$.At().gvU()
+y=P.r6($.cO().ej("dart:io"))
+z=z.nb
+if(z.t(z,y)!=null){z=$.At().gvU()
+y=P.r6($.cO().ej("dart:io"))
+z=z.nb
+return J.AF(H.Go(J.UQ(z.t(z,y).gYK(),C.A5),"$isMs").rN(C.Je).Ax)}else{z=$.At().gvU()
+y=P.r6($.cO().ej("dart:html"))
+z=z.nb
+if(z.t(z,y)!=null){z=$.At().gvU()
+y=P.r6($.cO().ej("dart:html"))
+z=z.nb
+return J.UW(J.UX(z.t(z,y).rN(C.QK).Ax))}else return"."}},"+current":0,YF:function(a,b){var z,y,x,w,v,u,t,s
+for(z=1;z<8;++z){if(b[z]==null||b[z-1]!=null)continue
+for(y=8;y>=1;y=x){x=y-1
+if(b[x]!=null)break}w=new P.Rn("")
+w.vM=""
+v=a+"("
+w.vM=w.vM+v
+v=new H.nH(b,0,y)
+v.$builtinTypeInfo=[null]
+u=v.Bz
+t=J.Wx(u)
+if(t.C(u,0))H.vh(new P.bJ("value "+H.d(u)))
+s=v.n1
+if(s!=null){if(J.u6(s,0))H.vh(new P.bJ("value "+H.d(s)))
+if(t.D(u,s))H.vh(P.TE(u,0,s))}v=new H.A8(v,new B.Qt())
+v.$builtinTypeInfo=[null,null]
+v=v.zV(v,", ")
+w.vM=w.vM+v
+v="): part "+(z-1)+" was null, but part "+z+" was not."
+w.vM=w.vM+v
+throw H.b(new P.AT(w.vM))}},Rh:function(){var z,y
+z=$.At().gvU()
+y=P.r6($.cO().ej("dart:io"))
+z=z.nb
+if(z.t(z,y)==null)return $.LT()
+z=$.At().gvU()
+y=P.r6($.cO().ej("dart:io"))
+z=z.nb
+if(J.xC(H.Go(J.UQ(z.t(z,y).gYK(),C.pk),"$isMs").rN(C.Ws).Ax,"windows"))return $.CE()
+return $.IX()},Qt:{"":"Tp;",
+call$1:function(a){return a==null?"null":"\""+H.d(a)+"\""},
+"+call:1:0":0,
+$isEH:true,
+$is_HB:true,
+$is_Dv:true},Dk:{"":"a;S,SF",
+tM:function(a){var z,y,x
+z=this.G7(a)
+z.IV()
+y=z.dY
+x=y.length
+if(x===0){y=z.SF
+return y==null?".":y}if(x===1){y=z.SF
+return y==null?".":y}C.Nm.mv(y)
+y=z.Yj
+if(0>=y.length)throw H.e(y,0)
+y.pop()
+z.IV()
+return z.bu(z)},
+C8:function(a,b,c,d,e,f,g,h,i){var z,y
+z=[b,c,d,e,f,g,h,i]
+B.YF("join",z)
+y=new H.U5(z,new B.A0())
+H.VM(y,[null])
+return this.IP(y)},
+zV:function(a,b){return this.C8(a,b,null,null,null,null,null,null,null)},
+IP:function(a){var z,y,x,w,v,u,t,s,r,q,p
+z=P.p9("")
+for(y=new H.U5(a,new B.rm()),H.VM(y,[H.W8(a,"mW",0)]),x=J.GP(y.Kw),x=new H.SO(x,y.ew),H.VM(x,[H.W8(y,"U5",0)]),y=this.S,w=x.RX,v=!1,u=!1;x.G();){t=w.gl()
+if(this.G7(t).aA&&u){s=this.G7(z.vM).SF
+r=s==null?"":s
+z.vM=""
+q=typeof r==="string"?r:H.d(r)
+z.vM=z.vM+q
+q=typeof t==="string"?t:H.d(t)
+z.vM=z.vM+q}else if(this.G7(t).SF!=null){u=!this.G7(t).aA
+z.vM=""
+q=typeof t==="string"?t:H.d(t)
+z.vM=z.vM+q}else{p=J.U6(t)
+if(J.xZ(p.gB(t),0)&&J.kE(p.t(t,0),y.gDF())===!0);else if(v===!0){p=y.gmI()
+z.vM=z.vM+p}q=typeof t==="string"?t:H.d(t)
+z.vM=z.vM+q}v=J.kE(t,y.gnK())}return z.vM},
+Fr:function(a,b){var z,y
+z=this.G7(b)
+y=new H.U5(z.dY,new B.eY())
+H.VM(y,[null])
+z.dY=P.F(y,!0,H.W8(y,"mW",0))
+y=z.SF
+if(y!=null)C.Nm.xe(z.dY,0,y)
+return z.dY},
+G7:function(a){var z,y,x,w,v,u,t,s,r,q,p
+z=this.S
+y=z.dz(a)
+x=z.uP(a)
+if(y!=null)a=J.ZZ(a,J.q8(y))
+w=[]
+v=[]
+u=z.gDF()
+t=u.R4(u,a)
+if(t!=null){u=t.oH
+if(0>=u.length)throw H.e(u,0)
+v.push(u[0])
+if(0>=u.length)throw H.e(u,0)
+a=J.ZZ(a,J.q8(u[0]))}else v.push("")
+u=z.gDF()
+if(typeof a!=="string")H.vh(new P.AT(a))
+u=new H.KW(u,a)
+u=new H.Pb(u.td,u.BZ,null)
+s=J.U6(a)
+r=0
+for(;u.G();){q=u.Jz.oH
+w.push(s.JT(a,r,q.index))
+if(0>=q.length)throw H.e(q,0)
+v.push(q[0])
+p=q.index
+if(0>=q.length)throw H.e(q,0)
+q=J.q8(q[0])
+if(typeof q!=="number")throw H.s(q)
+r=p+q}u=s.gB(a)
+if(typeof u!=="number")throw H.s(u)
+if(r<u){w.push(s.yn(a,r))
+v.push("")}return new B.q1(z,y,x!=null,w,v)},
+static:{mq:function(a,b){a=B.ab()
+b=$.vP()
+return new B.Dk(b,a)}}},A0:{"":"Tp;",
+call$1:function(a){return a!=null},
+"+call:1:0":0,
+$isEH:true,
+$is_HB:true,
+$is_Dv:true},rm:{"":"Tp;",
+call$1:function(a){return!J.xC(a,"")},
+"+call:1:0":0,
+$isEH:true,
+$is_HB:true,
+$is_Dv:true},eY:{"":"Tp;",
+call$1:function(a){return J.FN(a)!==!0},
+"+call:1:0":0,
+$isEH:true,
+$is_HB:true,
+$is_Dv:true},OO:{"":"a;TL<",
+dz:function(a){var z,y
+z=this.gEw()
+if(typeof a!=="string")H.vh(new P.AT(a))
+y=new H.KW(z,a)
+if(!y.gl0(y))return J.UQ(y.gFV(y),0)
+return this.uP(a)},
+uP:function(a){var z,y
+z=this.gTL()
+if(z==null)return
+z.toString
+if(typeof a!=="string")H.vh(new P.AT(a))
+y=new H.KW(z,a)
+if(!y.gA(y).G())return
+return J.UQ(y.gFV(y),0)},
+bu:function(a){return this.goc(this)},
+static:{"":"ak<",}},BE:{"":"OO;oc>,mI<,DF<,nK<,Ew<,TL"},Qb:{"":"OO;oc>,mI<,DF<,nK<,Ew<,TL"},xI:{"":"OO;oc>,mI<,DF<,nK<,Ew<,TL<,qW"},q1:{"":"a;S,SF,aA,dY,Yj",
+IV:function(){var z,y
+z=this.Yj
+while(!0){y=this.dY
+if(!(y.length!==0&&J.xC(C.Nm.grZ(y),"")))break
+C.Nm.mv(this.dY)
+if(0>=z.length)throw H.e(z,0)
+z.pop()}y=z.length
+if(y>0)z[y-1]=""},
+bu:function(a){var z,y,x,w,v
+z=P.p9("")
+y=this.SF
+if(y!=null)z.KF(y)
+for(y=this.Yj,x=0;x<this.dY.length;++x){if(x>=y.length)throw H.e(y,x)
+w=y[x]
+w=typeof w==="string"?w:H.d(w)
+z.vM=z.vM+w
+v=this.dY
+if(x>=v.length)throw H.e(v,x)
+w=v[x]
+w=typeof w==="string"?w:H.d(w)
+z.vM=z.vM+w}z.KF(C.Nm.grZ(y))
+return z.vM}},"":"O3<"}],["polymer","package:polymer/polymer.dart",,A,{JX:function(){var z,y
+z=document.createElement("style",null)
+z.textContent=".polymer-veiled { opacity: 0; } \n.polymer-unveil{ -webkit-transition: opacity 0.3s; transition: opacity 0.3s; }\n"
+y=document.querySelector("head")
+y.insertBefore(z,y.firstChild)
+A.B2()
+$.mC().MM.ml(new A.Zj())},B2:function(){var z,y,x,w
+for(z=$.IN(),y=new H.a7(z,1,0,null),H.VM(y,[H.W8(z,"Q",0)]);y.G();){x=y.mD
+for(z=W.vD(document.querySelectorAll(x),null),z=z.gA(z);z.G();){w=J.pP(z.mD)
+w.h(w,"polymer-veiled")}}},yV:function(a){var z,y
+z=$.xY()
+y=z.Rz(z,a)
+if(y!=null)for(z=J.GP(y);z.G();)J.Or(z.gl())},oF:function(a,b){var z,y,x,w,v,u
+if(J.xC(a,$.Tf()))return b
+b=A.oF(a.gAY(),b)
+for(z=J.GP(J.hI(a.gYK()));z.G();){y=z.gl()
+x=J.x(y)
+if(typeof y!=="object"||y===null||!x.$isRY||y.gV5()||y.gFo()||y.gkw())continue
+for(x=J.GP(y.gc9());x.G();){w=x.gl().gAx()
+v=J.x(w)
+if(typeof w==="object"&&w!==null&&!!v.$isyL){if(b==null)b=H.B7([],P.L5(null,null,null,null,null))
+b.u(b,y.gIf(),y)
+break}}}for(z=J.GP(J.hI(a.gYK()));z.G();){u=z.gl()
+x=J.x(u)
+if(typeof u!=="object"||u===null||!x.$isRS||!u.glT()||u.Fo||u.gkw())continue
+for(x=J.GP(u.gc9());x.G();){w=x.gl().gAx()
+v=J.x(w)
+if(typeof w==="object"&&w!==null&&!!v.$isyL){if(A.bc(a,u)){if(b==null)b=H.B7([],P.L5(null,null,null,null,null))
+b.u(b,u.gIf(),u)}break}}}return b},bc:function(a,b){var z,y
+z=H.le(H.d(J.Z0(b.gIf()))+"=")
+y=J.UQ(a.gYK(),new H.GD(z))
+z=J.x(y)
+return typeof y==="object"&&y!==null&&!!z.$isRS&&y.ghB()},hO:function(a,b,c){var z,y
+if($.LX()==null||a==null)return
+if($.LX().Bm("ShadowDOMPolyfill"))return
+z=J.UQ($.LX(),"Platform")
+if(z==null)return
+y=J.UQ(z,"ShadowCSS")
+if(y==null)return
+y.V7("shimStyling",[a,b,c])},Hl:function(a){var z
+if(a==null||$.LX()==null)return""
+z=J.UQ(P.Oe(a),"__resource")
+return z!=null?z:""},oY:function(a){var z=J.UQ($.pT(),a)
+return z!=null?z:a},Ad:function(a,b){var z,y
+if(b==null)b=C.hG
+z=$.Ej()
+z.u(z,a,b)
+z=$.p2()
+y=z.Rz(z,a)
+if(y!=null)J.Or(y)},zM:function(a){A.om(a,new A.Mq())},om:function(a,b){var z
+if(a==null)return
+b.call$1(a)
+for(z=a.firstChild;z!=null;z=z.nextSibling)A.om(z,b)},p1:function(a,b,c,d){var z
+if($.ZH().mL(C.R5))$.ZH().J4("["+H.d(c)+"]: bindProperties: ["+H.d(d)+"] to ["+J.Ro(a)+"].["+H.d(b)+"]")
+z=L.ao(c,d,null)
+if(z.gP(z)==null)z.sP(z,H.vn(a).rN(b).Ax)
+return A.vu(a,b,c,d)},lJ:function(a,b,c,d){if(!J.co(b,"on-"))return d.call$3(a,b,c)
+return new A.L6(a,b)},z9:function(a){var z,y
+for(;z=J.TZ(a),z!=null;a=z);y=$.od()
+return y.t(y,a)},HR:function(a,b,c){var z,y,x
+z=H.vn(a)
+y=J.UQ(H.jO(J.bB(z.Ax).IE).gtx(),b)
+if(y!=null){x=y.gJx()
+x=x.ev(x,new A.uJ())
+C.Nm.sB(c,x.gB(x))}return z.CI(b,c).Ax},ZI:function(a,b){var z,y
+if(a==null)return
+z=document.createElement("style",null)
+z.textContent=a.textContent
+y=new W.E9(a).MW.getAttribute("element")
+if(y!=null){z.toString
+new W.E9(z).MW.setAttribute("element",y)}b.appendChild(z)},pX:function(){var z=window
+C.ol.pl(z)
+C.ol.oB(z,W.aF(new A.hm()))},l3:function(a){var z=J.RE(a)
+return typeof a==="object"&&a!==null&&!!z.$isRY?z.gr9(a):H.Go(a,"$isRS").gdw()},al:function(a,b){var z,y
+z=A.l3(b)
+if(J.xC(z.gvd(),C.PU)||J.xC(z.gvd(),C.nN))if(a!=null){y=A.ER(a)
+if(y!=null)return P.re(y)
+return H.jO(J.bB(H.vn(a).Ax).IE)}return z},ER:function(a){var z
+if(a==null)return C.GX
+if(typeof a==="number"&&Math.floor(a)===a)return C.yw
+if(typeof a==="number")return C.O4
+if(typeof a==="boolean")return C.HL
+if(typeof a==="string")return C.Db
+z=J.x(a)
+if(typeof a==="object"&&a!==null&&!!z.$isiP)return C.Yc
+return},lN:function(a,b,c){if(a!=null)a.TP(a)
+else a=new A.S0(null,null)
+a.Ow=b
+a.VC=P.rT(c,a.gv6(a))
+return a},Ok:function(){if($.uP){var z=$.X3.iT(O.Ht())
+z.Gr(A.PB)
+return z}A.ei()
+return $.X3},ei:function(){var z=document
+W.wi(window,z,"polymer-element",C.Bm,null)
+A.Jv()
+A.JX()
+$.i5().ml(new A.Bl())},Jv:function(){var z,y,x,w,v,u,t
+for(w=$.nT(),w.toString,v=new H.a7(w,w.length,0,null),H.VM(v,[H.W8(w,"Q",0)]);v.G();){z=v.mD
+try{A.pw(z)}catch(u){w=H.Ru(u)
+y=w
+x=new H.XO(u,null)
+w=null
+t=new P.vs(0,$.X3,null,null,null,null,null,null)
+t.$builtinTypeInfo=[w]
+t=new P.Zf(t)
+t.$builtinTypeInfo=[w]
+w=y
+if(w==null)H.vh(new P.AT("Error must not be null"))
+t=t.MM
+if(t.Gv!==0)H.vh(new P.lj("Future already completed"))
+t.CG(w,x)}}},GA:function(a,b,c,d){var z,y,x,w,v,u
+if(c==null)c=P.Ls(null,null,null,W.YN)
+if(d==null){d=[]
+d.$builtinTypeInfo=[J.O]}if(a==null){z="warning: "+H.d(b)+" not found."
+y=$.oK
+if(y==null)H.LJ(z)
+else y.call$1(z)
+return d}if(c.tg(c,a))return d
+c.h(c,a)
+for(y=W.vD(a.querySelectorAll("script,link[rel=\"import\"]"),null),y=y.gA(y),x=!1;y.G();){w=y.mD
+v=J.RE(w)
+if(typeof w==="object"&&w!==null&&!!v.$isOg)A.GA(w.import,w.href,c,d)
+else if(typeof w==="object"&&w!==null&&!!v.$isj2&&w.type==="application/dart")if(!x){u=v.gLA(w)
+d.push(u===""?b:u)
+x=!0}else{z="warning: more than one Dart script tag in "+H.d(b)+". Dartium currently only allows a single Dart script tag per document."
+v=$.oK
+if(v==null)H.LJ(z)
+else v.call$1(z)}}return d},pw:function(a){var z,y,x,w,v,u,t,s,r,q,p,o,n
+z=$.RQ()
+z.toString
+y=z.mS(P.r6($.cO().ej(a)))
+z=$.UG().nb
+x=z.t(z,y)
+if(J.co(y.r0,$.rw())&&J.Eg(y.r0,".dart")){z="package:"+J.ZZ(y.r0,$.rw().length)
+w=P.r6($.cO().ej(z))
+z=$.UG().nb
+v=z.t(z,w)
+if(v!=null)x=v}if(x==null){$.M7().To(H.d(y)+" library not found")
+return}z=x.gmu().nb
+z=z.gUQ(z)
+u=z.Kw
+u=u.gA(u)
+t=H.Y9(z.$asi1,H.oX(z))
+s=t==null?null:t[0]
+t=H.Y9(z.$asi1,H.oX(z))
+r=t==null?null:t[1]
+z=new H.MH(null,u,z.ew)
+z.$builtinTypeInfo=[s,r]
+for(;z.G();)A.h5(x,z.mD)
+z=J.pP(x)
+z=z.gUQ(z)
+u=z.Kw
+u=u.gA(u)
+t=H.Y9(z.$asi1,H.oX(z))
+s=t==null?null:t[0]
+t=H.Y9(z.$asi1,H.oX(z))
+r=t==null?null:t[1]
+z=new H.MH(null,u,z.ew)
+z.$builtinTypeInfo=[s,r]
+for(;z.G();){q=z.mD
+for(u=J.GP(q.gc9());u.G();){p=u.gl().gAx()
+s=J.x(p)
+if(typeof p==="object"&&p!==null&&!!s.$isV3){s=p.ns
+o=M.Lh(q)
+if(o==null)o=C.hG
+r=$.Ej()
+r.u(r,s,o)
+r=$.p2()
+n=r.Rz(r,s)
+if(n!=null)J.Or(n)}}}},h5:function(a,b){var z,y,x
+for(z=J.GP(b.gc9());y=!1,z.G();)if(z.gl().gAx()===C.za){y=!0
+break}if(!y)return
+if(!b.gFo()){x="warning: methods marked with @initMethod should be static, "+H.d(b.gIf())+" is not."
+z=$.oK
+if(z==null)H.LJ(x)
+else z.call$1(x)
+return}z=b.gJx()
+z=z.ev(z,new A.pM())
+if(z.gA(z).G()){x="warning: methods marked with @initMethod should take no arguments, "+H.d(b.gIf())+" expects some."
+z=$.oK
+if(z==null)H.LJ(x)
+else z.call$1(x)
+return}a.CI(b.gIf(),C.xD)},Zj:{"":"Tp;",
+call$1:function(a){A.pX()},
+"+call:1:0":0,
+$isEH:true,
+$is_HB:true,
+$is_Dv:true},XP:{"":"qE;di,P0,ZD,S6,Dg=,Q0=,Hs=,n4=,pc,SV,EX=,mn",
+gr9:function(a){return a.di},
+gP1:function(a){return a.ZD},
+goc:function(a){return a.S6},
+"+name":0,
+gr3:function(a){var z,y,x
+z=a.querySelector("template")
+if(z!=null){y=J.x(z)
+x=J.nX(typeof z==="object"&&z!==null&&!!y.$ishs?z:M.Ky(z))
+y=x}else y=null
+return y},
+yx:function(a){var z
+if(this.y0(a,a.S6))return
+z=new W.E9(a).MW.getAttribute("extends")
+if(this.PM(a,z))return
+this.jT(a,a.S6,z)
+A.yV(a.S6)},
+y0:function(a,b){var z=$.Ej()
+if(z.t(z,b)!=null)return!1
+z=$.p2()
+z.u(z,b,a)
+if(new W.E9(a).MW.hasAttribute("noscript")===!0)A.Ad(b,null)
+return!0},
+PM:function(a,b){if(b!=null&&J.UU(b,"-")>=0)if(!$.cd().x4(b)){J.bi($.xY().to(b,new A.q6()),a)
+return!0}return!1},
+jT:function(a,b,c){var z
+this.Dh(a,b,c)
+z=$.cd()
+z.u(z,b,a)
+this.fj(a,b,c)
+this.Ba(a,b)},
+Dh:function(a,b,c){var z,y
+z=$.Ej()
+a.di=z.t(z,b)
+z=$.Ej()
+a.P0=z.t(z,c)
+if(a.P0!=null){z=$.cd()
+a.ZD=z.t(z,c)}y=P.re(a.di)
+this.YU(a,y,a.ZD)
+z=a.Dg
+if(z!=null)a.Q0=this.Pv(a,z)
+this.oq(a,y)},
+fj:function(a,b,c){var z,y
+this.uG(a)
+this.W3(a,a.EX)
+this.Mi(a)
+this.f6(a)
+this.yq(a)
+this.u5(a)
+A.hO(this.gr3(a),b,c)
+z=P.re(a.di)
+y=J.UQ(z.gtx(),C.Qi)
+if(y!=null&&y.gFo()&&y.guU())z.CI(C.Qi,[a])},
+Ba:function(a,b){var z,y,x,w
+for(z=a,y=null;z!=null;){x=J.RE(z)
+y=x.gQg(z).MW.getAttribute("extends")
+z=x.gP1(z)}x=document
+w=a.di
+W.wi(window,x,b,w,y)},
+YU:function(a,b,c){var z,y,x,w,v,u,t
+if(c!=null&&J.fP(c)!=null){z=J.fP(c)
+y=P.L5(null,null,null,null,null)
+y.Ay(y,z)
+a.Dg=y}a.Dg=A.oF(b,a.Dg)
+x=new W.E9(a).MW.getAttribute("attributes")
+if(x!=null){z=x.split(J.kE(x,",")?",":" ")
+y=new H.a7(z,z.length,0,null)
+H.VM(y,[H.W8(z,"Q",0)])
+for(;y.G();){w=J.rr(y.mD)
+if(w!==""){z=a.Dg
+z=z!=null&&z.x4(w)}else z=!1
+if(z)continue
+v=new H.GD(H.le(w))
+u=J.UQ(b.gYK(),v)
+z=J.x(u)
+if(typeof u==="object"&&u!==null&&!!z.$isRS){if(!u.glT()||!A.bc(b,u))u=null}else if(typeof u!=="object"||u===null||!z.$isRY)u=null
+if(u==null){window
+z=$.UT()
+t="property for attribute "+w+" of polymer-element name="+a.S6+" not found."
+z.toString
+if(typeof console!="undefined")console.warn(t)
+continue}if(a.Dg==null)a.Dg=H.B7([],P.L5(null,null,null,null,null))
+z=a.Dg
+z.u(z,v,u)}}},
+uG:function(a){var z,y
+a.n4=P.L5(null,null,null,J.O,P.a)
+z=a.ZD
+if(z!=null){y=a.n4
+y.Ay(y,J.GW(z))}z=new W.E9(a)
+z.aN(z,new A.CK(a))},
+W3:function(a,b){var z=new W.E9(a)
+z.aN(z,new A.BO(b))},
+Mi:function(a){var z,y
+a.pc=this.nP(a,"[rel=stylesheet]")
+for(z=a.pc,z.toString,y=new H.a7(z,z.length,0,null),H.VM(y,[H.W8(z,"Q",0)]);y.G();)J.vX(y.mD)},
+f6:function(a){var z,y
+a.SV=this.nP(a,"style[polymer-scope]")
+for(z=a.SV,z.toString,y=new H.a7(z,z.length,0,null),H.VM(y,[H.W8(z,"Q",0)]);y.G();)J.vX(y.mD)},
+yq:function(a){var z,y,x,w,v,u
+z=a.pc
+z.toString
+y=new H.U5(z,new A.ZG())
+H.VM(y,[null])
+x=this.gr3(a)
+if(x!=null){w=P.p9("")
+for(z=J.GP(y.Kw),z=new H.SO(z,y.ew),H.VM(z,[H.W8(y,"U5",0)]),v=z.RX;z.G();){u=A.Hl(v.gl())
+u=typeof u==="string"?u:H.d(u)
+w.vM=w.vM+u
+w.vM=w.vM+"\n"}if(w.vM.length>0){z=document.createElement("style",null)
+z.textContent=H.d(w)
+v=J.RE(x)
+v.mK(x,z,v.gq6(x))}}},
+Wz:function(a,b,c){var z,y,x
+z=W.vD(a.querySelectorAll(b),null)
+y=z.br(z)
+x=this.gr3(a)
+if(x!=null)C.Nm.Ay(y,J.US(x,b))
+return y},
+nP:function(a,b){return this.Wz(a,b,null)},
+u5:function(a){A.ZI(this.J3(a,this.kO(a,"global"),"global"),document.head)},
+kO:function(a,b){var z,y,x,w,v
+z=P.p9("")
+y=new A.Oc("[polymer-scope="+b+"]")
+for(x=a.pc,x.toString,x=new H.U5(x,y),H.VM(x,[null]),w=J.GP(x.Kw),w=new H.SO(w,x.ew),H.VM(w,[H.W8(x,"U5",0)]),x=w.RX;w.G();){v=A.Hl(x.gl())
+v=typeof v==="string"?v:H.d(v)
+z.vM=z.vM+v
+z.vM=z.vM+"\n\n"}for(x=a.SV,x.toString,y=new H.U5(x,y),H.VM(y,[null]),x=J.GP(y.Kw),x=new H.SO(x,y.ew),H.VM(x,[H.W8(y,"U5",0)]),y=x.RX;x.G();){w=y.gl().ghg()
+z.vM=z.vM+w
+z.vM=z.vM+"\n\n"}return z.vM},
+J3:function(a,b,c){var z
+if(b==="")return
+z=document.createElement("style",null)
+z.textContent=b
+z.toString
+new W.E9(z).MW.setAttribute("element",a.S6+"-"+c)
+return z},
+oq:function(a,b){var z,y,x,w
+for(z=J.GP(J.hI(b.gYK()));z.G();){y=z.gl()
+x=J.x(y)
+if(typeof y!=="object"||y===null||!x.$isRS||y.gFo()||!y.guU())continue
+w=J.Z0(y.gIf())
+x=J.rY(w)
+if(x.Tc(w,"Changed")&&!x.n(w,"attributeChanged")){if(a.Hs==null)a.Hs=P.L5(null,null,null,null,null)
+w=x.JT(w,0,J.xH(x.gB(w),7))
+x=a.Hs
+x.u(x,new H.GD(H.le(w)),y.gIf())}}},
+Pv:function(a,b){var z=P.L5(null,null,null,J.O,null)
+b.aN(b,new A.MX(z))
+return z},
+du:function(a){a.S6=new W.E9(a).MW.getAttribute("name")
+this.yx(a)},
+$isXP:true,
+static:{"":"wp",XL:function(a){a.EX=H.B7([],P.L5(null,null,null,null,null))
+C.xk.ZL(a)
+C.xk.du(a)
+return a},"+new PolymerDeclaration$created:0:0":0,wP:function(a){return!C.kr.x4(a)&&!J.co(a,"on-")}}},q6:{"":"Tp;",
+call$0:function(){return[]},
+"+call:0:0":0,
+$isEH:true,
+$is_X0:true},CK:{"":"Tp;a",
+call$2:function(a,b){var z
+if(A.wP(a)){z=this.a.n4
+z.u(z,a,b)}},
+"+call:2:0":0,
+$isEH:true,
+$is_bh:true},BO:{"":"Tp;a",
+call$2:function(a,b){var z,y,x,w,v
+z=J.rY(a)
+if(z.nC(a,"on-")){y=J.U6(b)
+x=y.u8(b,"{{")
+w=y.cn(b,"}}")
+if(x>=0&&J.J5(w,0)){v=this.a
+v.u(v,z.yn(a,3),C.xB.bS(y.JT(b,x+2,w)))}}},
+"+call:2:0":0,
+$isEH:true,
+$is_bh:true},ZG:{"":"Tp;",
+call$1:function(a){return J.Vs(a).MW.hasAttribute("polymer-scope")!==!0},
+"+call:1:0":0,
+$isEH:true,
+$is_HB:true,
+$is_Dv:true},Oc:{"":"Tp;a",
+call$1:function(a){return J.RF(a,this.a)},
+"+call:1:0":0,
+$isEH:true,
+$is_HB:true,
+$is_Dv:true},MX:{"":"Tp;a",
+call$2:function(a,b){var z=this.a
+z.u(z,J.Mz(J.Z0(a)),b)},
+"+call:2:0":0,
+$isEH:true,
+$is_bh:true},w12:{"":"Tp;",
+call$0:function(){var z=P.L5(null,null,null,J.O,J.O)
+C.FS.aN(C.FS,new A.fTP(z))
+return z},
+"+call:0:0":0,
+$isEH:true,
+$is_X0:true},fTP:{"":"Tp;a",
+call$2:function(a,b){var z=this.a
+z.u(z,b,a)},
+"+call:2:0":0,
+$isEH:true,
+$is_bh:true},yL:{"":"Fa;",$isyL:true},dM:{"":["a;KM=-",function(){return[C.nJ]}],
+gpQ:function(a){return!1},
+"+applyAuthorStyles":0,
+Pa:function(a){if(W.uV(this.gM0(a).defaultView)!=null||$.M0>0)this.Ec(a)},
+gTM:function(a){var z=this.gQg(a).MW.getAttribute("is")
+return z==null||z===""?this.gjU(a):z},
+Ec:function(a){var z,y
+z=this.gTM(a)
+y=$.cd()
+a.ZI=y.t(y,z)
+this.Xl(a)
+this.Z2(a)
+this.fk(a)
+this.Uc(a)
+$.M0=$.M0+1
+this.z2(a,a.ZI)
+$.M0=$.M0-1},
+i4:function(a){if(a.ZI==null)this.Ec(a)
+this.BT(a,!0)},
+"+enteredView:0:0":0,
+Nz:function(a){this.x3(a)},
+"+leftView:0:0":0,
+z2:function(a,b){if(b!=null){this.z2(a,J.lB(b))
+this.d0(a,b)}},
+d0:function(a,b){var z,y,x,w,v
+z=J.RE(b)
+y=z.Ja(b,"template")
+if(y!=null)if(J.Vs(a.ZI).MW.hasAttribute("lightdom")===!0){this.vs(a,y)
+x=null}else x=this.TH(a,y)
+else x=null
+w=J.x(x)
+if(typeof x!=="object"||x===null||!w.$isI0)return
+v=z.gQg(b).MW.getAttribute("name")
+if(v==null)return
+z=a.mT
+z.u(z,v,x)},
+vs:function(a,b){var z,y
+if(b==null)return
+z=J.x(b)
+z=typeof b==="object"&&b!==null&&!!z.$ishs?b:M.Ky(b)
+y=z.ZK(a,a.Ye)
+this.jx(a,y)
+this.lj(a,a)
+return y},
+TH:function(a,b){var z,y
+if(b==null)return
+this.gKE(a)
+z=this.er(a)
+y=$.od()
+y.u(y,z,a)
+z.applyAuthorStyles=this.gpQ(a)
+z.resetStyleInheritance=!1
+y=J.x(b)
+y=typeof b==="object"&&b!==null&&!!y.$ishs?b:M.Ky(b)
+z.appendChild(y.ZK(a,a.Ye))
+this.lj(a,z)
+return z},
+lj:function(a,b){var z,y,x,w
+for(z=J.US(b,"[id]"),z=z.gA(z),y=a.KM,x=J.w1(y);z.G();){w=z.mD
+x.u(y,J.F8(w),w)}},
+aC:function(a,b,c,d){var z=J.x(b)
+if(!z.n(b,"class")&&!z.n(b,"style"))this.D3(a,b,d)},
+Z2:function(a){var z=J.GW(a.ZI)
+z.aN(z,new A.WC(a))},
+fk:function(a){var z
+if(J.B8(a.ZI)==null)return
+z=this.gQg(a)
+z.aN(z,this.ghW(a))},
+D3:function(a,b,c){var z,y,x,w
+z=this.Nj(a,b)
+if(z==null)return
+if(c==null||J.kE(c,$.VC())===!0)return
+y=H.vn(a)
+x=y.rN(z.gIf()).Ax
+w=Z.Zh(c,x,A.al(x,z))
+if(w==null?x!=null:w!==x)y.PU(z.gIf(),w)},
+ghW:function(a){return new A.Y7(this,A.dM.prototype.D3,a,"D3")},
+Nj:function(a,b){var z=J.B8(a.ZI)
+if(z==null)return
+return z.t(z,b)},
+TW:function(a,b){if(b==null)return
+if(typeof b==="boolean")return b?"":null
+else if(typeof b==="string"||typeof b==="number"&&Math.floor(b)===b||typeof b==="number")return H.d(b)
+return},
+Id:function(a,b){var z,y,x
+z=H.vn(a).rN(b).Ax
+y=this.TW(a,z)
+if(y!=null)this.gQg(a).MW.setAttribute(J.Z0(b),y)
+else if(typeof z==="boolean"){x=this.gQg(a)
+x.Rz(x,J.Z0(b))}},
+Z1:function(a,b,c,d){var z,y
+if(a.ZI==null)this.Ec(a)
+z=this.Nj(a,b)
+if(z==null)return J.tb(M.Ky(a),b,c,d)
+else{J.MV(M.Ky(a),b)
+y=A.p1(a,z.gIf(),c,d)
+this.Id(a,z.gIf())
+J.kW(J.QE(M.Ky(a)),b,y)
+return y}},
+gCd:function(a){return J.QE(M.Ky(a))},
+Ih:function(a,b){return J.MV(M.Ky(a),b)},
+x3:function(a){if(a.z3===!0)return
+$.P5().J4("["+this.gjU(a)+"] asyncUnbindAll")
+a.TQ=A.lN(a.TQ,this.gJg(a),C.RT)},
+GB:function(a){var z
+if(a.z3===!0)return
+this.Td(a)
+J.AA(M.Ky(a))
+z=this.gKE(a)
+for(;z!=null;){A.zM(z)
+z=z.olderShadowRoot}a.z3=!0},
+gJg:function(a){return new H.YP(this,A.dM.prototype.GB,a,"GB")},
+BT:function(a,b){var z
+if(a.z3===!0){$.P5().A3("["+this.gjU(a)+"] already unbound, cannot cancel unbindAll")
+return}$.P5().J4("["+this.gjU(a)+"] cancelUnbindAll")
+z=a.TQ
+if(z!=null){z.TP(z)
+a.TQ=null}if(b===!0)return
+A.om(this.gKE(a),new A.TV())},
+oW:function(a){return this.BT(a,null)},
+Xl:function(a){var z,y,x,w,v,u,t
+z=a.ZI
+y=J.RE(z)
+x=y.gHs(z)
+w=y.gDg(z)
+z=x==null
+if(!z)for(x.toString,y=new P.Cm(x),H.VM(y,[H.W8(x,"YB",0)]),v=y.Fb,u=v.zN,u=new P.N6(v,u,null,null),H.VM(u,[H.W8(y,"Cm",0)]),u.zq=u.Fb.H9;u.G();){t=u.fD
+this.rJ(a,t,H.vn(a).tu(t,1,J.Z0(t),[]),null)}if(!z||w!=null)a.Vk=this.gqh(a).yI(this.gnu(a))},
+fd:function(a,b){var z,y,x,w,v,u
+z=a.ZI
+y=J.RE(z)
+x=y.gHs(z)
+w=y.gDg(z)
+v=P.L5(null,null,null,P.wv,A.k8)
+for(z=J.GP(b);z.G();){u=z.gl()
+y=J.x(u)
+if(typeof u!=="object"||u===null||!y.$isqI)continue
+J.Pz(v.to(u.oc,new A.Oa(u)),u.zZ)}v.aN(v,new A.n1(a,b,x,w))},
+gnu:function(a){return new P.C7(this,A.dM.prototype.fd,a,"fd")},
+rJ:function(a,b,c,d){var z,y,x,w,v,u,t
+z=J.Ir(a.ZI)
+if(z==null)return
+y=z.t(z,b)
+if(y==null)return
+x=J.x(d)
+if(typeof d==="object"&&d!==null&&!!x.$iswn){if($.yk().mL(C.R5))$.yk().J4("["+this.gjU(a)+"] observeArrayValue: unregister observer "+H.d(b))
+this.l5(a,H.d(J.Z0(b))+"__array")}x=J.x(c)
+if(typeof c==="object"&&c!==null&&!!x.$iswn){if($.yk().mL(C.R5))$.yk().J4("["+this.gjU(a)+"] observeArrayValue: register observer "+H.d(b))
+w=c.gRT().w4(!1)
+w.dB=$.X3.cR(new A.xf(a,d,y))
+v=P.AY
+w.o7=P.VH(v,$.X3)
+u=P.No
+w.Bd=$.X3.Al(u)
+x=H.d(J.Z0(b))+"__array"
+if(a.uN==null)a.uN=P.L5(null,null,null,J.O,P.MO)
+t=a.uN
+t.u(t,x,w)}},
+Td:function(a){var z=a.Vk
+if(z!=null){z.ed()
+a.Vk=null}this.C0(a)},
+l5:function(a,b){var z,y
+z=a.uN
+y=z.Rz(z,b)
+if(y==null)return!1
+y.ed()
+return!0},
+C0:function(a){var z,y
+z=a.uN
+if(z==null)return
+for(z=z.gUQ(z),y=z.Kw,y=y.gA(y),y=new H.MH(null,y,z.ew),H.VM(y,[H.W8(z,"i1",0),H.W8(z,"i1",1)]);y.G();)y.mD.ed()
+z=a.uN
+z.V1(z)
+a.uN=null},
+Uc:function(a){var z=J.fU(a.ZI)
+if(z.gl0(z))return
+if($.SS().mL(C.R5))$.SS().J4("["+this.gjU(a)+"] addHostListeners: "+H.d(z))
+this.UH(a,a,z.gvc(z),this.gay(a))},
+UH:function(a,b,c,d){var z,y,x,w,v,u
+for(z=c.Fb,y=z.zN,y=new P.N6(z,y,null,null),H.VM(y,[H.W8(c,"Cm",0)]),y.zq=y.Fb.H9,z=J.RE(b);y.G();){x=y.fD
+w=z.gI(b)
+w=w.t(w,x)
+v=H.Y9(w.$asRO,H.oX(w))
+u=v==null?null:v[0]
+w=new W.Ov(0,w.uv,w.Ph,W.aF(d),w.Sg)
+w.$builtinTypeInfo=[u]
+u=w.u7
+if(u!=null&&w.VP<=0)J.qV(w.uv,w.Ph,u,w.Sg)}},
+iw:function(a,b){var z,y,x,w
+z=J.RE(b)
+if(z.gXt(b)!==!0)return
+y=$.SS().mL(C.R5)
+if(y)$.SS().J4(">>> ["+this.gjU(a)+"]: hostEventListener("+H.d(z.gr9(b))+")")
+x=J.fU(a.ZI)
+w=x.t(x,A.oY(z.gr9(b)))
+if(w!=null){if(y)$.SS().J4("["+this.gjU(a)+"] found host handler name ["+H.d(w)+"]")
+this.ea(a,a,w,[b,typeof b==="object"&&b!==null&&!!z.$isDG?z.gey(b):null,a])}if(y)$.SS().J4("<<< ["+this.gjU(a)+"]: hostEventListener("+H.d(z.gr9(b))+")")},
+gay:function(a){return new P.C7(this,A.dM.prototype.iw,a,"iw")},
+ea:function(a,b,c,d){var z,y
+z=$.SS().mL(C.R5)
+if(z)$.SS().J4(">>> ["+this.gjU(a)+"]: dispatch "+H.d(c))
+y=J.x(c)
+if(typeof c==="object"&&c!==null&&!!y.$isEH)H.Ek(c,d,P.Te(null))
+else if(typeof c==="string")A.HR(b,new H.GD(H.le(c)),d)
+else $.SS().A3("invalid callback")
+if(z)$.SS().To("<<< ["+this.gjU(a)+"]: dispatch "+H.d(c))},
+$isdM:true,
+$ishs:true,
+$isd3:true,
+$iscv:true,
+$isGv:true,
+$isKV:true,
+$isD0:true},WC:{"":"Tp;a",
+call$2:function(a,b){J.Vs(this.a).to(a,new A.Xi(b))},
+"+call:2:0":0,
+$isEH:true,
+$is_bh:true},Xi:{"":"Tp;b",
+call$0:function(){return this.b},
+"+call:0:0":0,
+$isEH:true,
+$is_X0:true},TV:{"":"Tp;",
+call$1:function(a){var z=J.RE(a)
+if(typeof a==="object"&&a!==null&&!!z.$isdM)z.oW(a)},
+"+call:1:0":0,
+$isEH:true,
+$is_HB:true,
+$is_Dv:true},Mq:{"":"Tp;",
+call$1:function(a){var z=J.x(a)
+return J.AA(typeof a==="object"&&a!==null&&!!z.$ishs?a:M.Ky(a))},
+"+call:1:0":0,
+$isEH:true,
+$is_HB:true,
+$is_Dv:true},Oa:{"":"Tp;a",
+call$0:function(){return new A.k8(this.a.jL,null)},
+"+call:0:0":0,
+$isEH:true,
+$is_X0:true},n1:{"":"Tp;b,c,d,e",
+call$2:function(a,b){var z,y,x
+z=this.e
+if(z!=null&&z.x4(a))J.L9(this.b,a)
+z=this.d
+if(z==null)return
+y=z.t(z,a)
+if(y!=null){z=this.b
+x=J.RE(b)
+J.GS(z,a,x.gzZ(b),x.gjL(b))
+A.HR(z,y,[x.gjL(b),x.gzZ(b),this.c])}},
+"+call:2:0":0,
+$isEH:true,
+$is_bh:true},xf:{"":"Tp;a,b,c",
+call$1:function(a){A.HR(this.a,this.c,[this.b])},
+"+call:1:0":0,
+$isEH:true,
+$is_HB:true,
+$is_Dv:true},L6:{"":"Tp;a,b",
+call$2:function(a,b){var z,y,x,w
+if($.SS().mL(C.R5))$.SS().J4("event: ["+H.d(b)+"]."+H.d(this.b)+" => ["+H.d(a)+"]."+this.a+"())")
+z=J.ZZ(this.b,3)
+y=C.FS.t(C.FS,z)
+if(y!=null)z=y
+x=J.f5(b)
+x=x.t(x,z)
+w=new W.Ov(0,x.uv,x.Ph,W.aF(new A.Rs(this.a,a,b)),x.Sg)
+H.VM(w,[H.W8(x,"RO",0)])
+w.Zz()
+return w},
+"+call:2:0":0,
+$isEH:true,
+$is_bh:true},Rs:{"":"Tp;c,d,e",
+call$1:function(a){var z,y,x,w,v,u
+z=this.e
+y=A.z9(z)
+x=J.RE(y)
+if(typeof y!=="object"||y===null||!x.$isdM)return
+w=this.c
+if(0>=w.length)throw H.e(w,0)
+if(w[0]==="@"){v=this.d
+u=L.ao(v,C.xB.yn(w,1),null)
+w=u.gP(u)}else v=y
+u=J.RE(a)
+x.ea(y,v,w,[a,typeof a==="object"&&a!==null&&!!u.$isDG?u.gey(a):null,z])},
+"+call:1:0":0,
+$isEH:true,
+$is_HB:true,
+$is_Dv:true},uJ:{"":"Tp;",
+call$1:function(a){return!a.gQ2()},
+"+call:1:0":0,
+$isEH:true,
+$is_HB:true,
+$is_Dv:true},hm:{"":"Tp;",
+call$1:function(a){var z,y,x
+z=W.vD(document.querySelectorAll(".polymer-veiled"),null)
+for(y=z.gA(z);y.G();){x=J.pP(y.mD)
+x.h(x,"polymer-unveil")
+x.Rz(x,"polymer-veiled")}if(z.gor(z)){y=C.hi.aM(window)
+y.gFV(y).ml(new A.Ji(z))}},
+"+call:1:0":0,
+$isEH:true,
+$is_HB:true,
+$is_Dv:true},Ji:{"":"Tp;a",
+call$1:function(a){var z,y
+for(z=this.a,z=z.gA(z);z.G();){y=J.pP(z.mD)
+y.Rz(y,"polymer-unveil")}},
+"+call:1:0":0,
+$isEH:true,
+$is_HB:true,
+$is_Dv:true},Bf:{"":"TR;K3,Zu,Po,Ha,LO,ZY,xS,PB,eS,Ii",
+cO:function(a){if(this.LO==null)return
+this.Po.ed()
+X.TR.prototype.cO.call(this,this)},
+EC:function(a){this.Ha=a
+this.K3.PU(this.Zu,a)},
+zL:function(a){var z,y,x,w,v
+for(z=J.GP(a),y=this.Zu;z.G();){x=z.gl()
+w=J.x(x)
+if(typeof x==="object"&&x!==null&&!!w.$isqI&&J.xC(x.oc,y)){v=this.K3.tu(y,1,J.Z0(y),[]).Ax
+z=this.Ha
+if(z==null?v!=null:z!==v)J.ta(this.xS,v)
+return}}},
+gxH:function(){return new H.Pm(this,A.Bf.prototype.zL,null,"zL")},
+uY:function(a,b,c,d){this.Po=J.Ib(a).yI(this.gxH())},
+static:{vu:function(a,b,c,d){var z,y,x
+z=H.vn(a)
+y=J.Z0(b)
+x=d!=null?d:""
+x=new A.Bf(z,b,null,null,a,c,null,null,y,x)
+x.Og(a,y,c,d)
+x.uY(a,b,c,d)
+return x}}},ir:{"":["GN;VJ,Ai,ZI,uN,z3,TQ,Vk,Ye,mT,KM-",null,null,null,null,null,null,null,null,null,function(){return[C.nJ]}],
+FH:function(a){this.Pa(a)},
+static:{oa:function(a){var z,y,x,w,v
+z=$.Nd()
+y=P.Py(null,null,null,J.O,W.I0)
+x=J.O
+w=W.cv
+v=new V.br(P.Py(null,null,null,x,w),null,null)
+H.VM(v,[x,w])
+a.Ye=z
+a.mT=y
+a.KM=v
+C.Iv.ZL(a)
+C.Iv.FH(a)
+return a},"+new PolymerElement$created:0:0":0}},Sa:{"":["qE+dM;KM=-",function(){return[C.nJ]}],$isdM:true,$ishs:true,$isd3:true,$iscv:true,$isGv:true,$isKV:true,$isD0:true},GN:{"":"Sa+Pi;",$isd3:true},k8:{"":"a;jL>,zZ*",$isk8:true},HJ:{"":"e9;nF"},S0:{"":"a;Ow,VC",
+E5:function(){return this.Ow.call$0()},
+TP:function(a){var z=this.VC
+if(z!=null){z.ed()
+this.VC=null}},
+tZ:function(a){if(this.VC!=null){this.TP(this)
+this.E5()}},
+gv6:function(a){return new H.YP(this,A.S0.prototype.tZ,a,"tZ")}},V3:{"":"a;ns",$isV3:true},Bl:{"":"Tp;",
+call$1:function(a){var z=$.mC().MM
+if(z.Gv!==0)H.vh(new P.lj("Future already completed"))
+z.OH(null)
+return},
+"+call:1:0":0,
+$isEH:true,
+$is_HB:true,
+$is_Dv:true},pM:{"":"Tp;",
+call$1:function(a){return!a.gQ2()},
+"+call:1:0":0,
+$isEH:true,
+$is_HB:true,
+$is_Dv:true},Mh:{"":"a;"}}],["polymer.deserialize","package:polymer/deserialize.dart",,Z,{Zh:function(a,b,c){var z,y,x
+z=J.UQ($.WJ(),c.gvd())
+if(z!=null)return z.call$2(a,b)
+try{y=C.lM.kV(J.JA(a,"'","\""))
+return y}catch(x){H.Ru(x)
+return a}},Md:{"":"Tp;",
+call$0:function(){var z=P.L5(null,null,null,null,null)
+z.u(z,C.AZ,new Z.Lf())
+z.u(z,C.ok,new Z.fT())
+z.u(z,C.nz,new Z.pp())
+z.u(z,C.Ts,new Z.Nq())
+z.u(z,C.PC,new Z.nl())
+z.u(z,C.md,new Z.ej())
+return z},
+"+call:0:0":0,
+$isEH:true,
+$is_X0:true},Lf:{"":"Tp;",
+call$2:function(a,b){return a},
+"+call:2:0":0,
+$isEH:true,
+$is_bh:true},fT:{"":"Tp;",
+call$2:function(a,b){return a},
+"+call:2:0":0,
+$isEH:true,
+$is_bh:true},pp:{"":"Tp;",
+call$2:function(a,b){var z,y
+try{z=P.Gl(a)
+return z}catch(y){H.Ru(y)
+return b}},
+"+call:2:0":0,
+$isEH:true,
+$is_bh:true},Nq:{"":"Tp;",
+call$2:function(a,b){return!J.xC(a,"false")},
+"+call:2:0":0,
+$isEH:true,
+$is_bh:true},nl:{"":"Tp;",
+call$2:function(a,b){return H.BU(a,null,new Z.mf(b))},
+"+call:2:0":0,
+$isEH:true,
+$is_bh:true},mf:{"":"Tp;a",
+call$1:function(a){return this.a},
+"+call:1:0":0,
+$isEH:true,
+$is_HB:true,
+$is_Dv:true},ej:{"":"Tp;",
+call$2:function(a,b){return H.IH(a,new Z.HK(b))},
+"+call:2:0":0,
+$isEH:true,
+$is_bh:true},HK:{"":"Tp;b",
+call$1:function(a){return this.b},
+"+call:1:0":0,
+$isEH:true,
+$is_HB:true,
+$is_Dv:true}}],["polymer.src.reflected_type","package:polymer/src/reflected_type.dart",,M,{Lh:function(a){var z,y
+z=H.vn(a)
+y=$.av()
+y=z.tu(y,1,J.Z0(y),[])
+return $.Yr().CI(C.to,[y.Ax]).gAx()},w13:{"":"Tp;",
+call$0:function(){var z,y
+for(z=J.GP(J.iY(H.jO(J.bB(H.vn(P.re(C.dA)).Ax).IE).gZ3()));z.G();){y=z.gl()
+if(J.xC(J.Z0(y),"_mangledName"))return y}},
+"+call:0:0":0,
+$isEH:true,
+$is_X0:true}}],["polymer_expressions","package:polymer_expressions/polymer_expressions.dart",,T,{ul:function(a){var z=J.x(a)
+if(typeof a==="object"&&a!==null&&!!z.$isL8){z=J.vo(z.gvc(a),new T.o8(a))
+z=z.zV(z," ")}else z=typeof a==="object"&&a!==null&&(a.constructor===Array||!!z.$iscX)?z.zV(a," "):a
+return z},PX:function(a){var z=J.x(a)
+if(typeof a==="object"&&a!==null&&!!z.$isL8){z=J.C0(z.gvc(a),new T.GL(a))
+z=z.zV(z,";")}else z=typeof a==="object"&&a!==null&&(a.constructor===Array||!!z.$iscX)?z.zV(a,";"):a
+return z},o8:{"":"Tp;a",
+call$1:function(a){var z=this.a
+return J.xC(z.t(z,a),!0)},
+"+call:1:0":0,
+$isEH:true,
+$is_HB:true,
+$is_Dv:true},GL:{"":"Tp;a",
+call$1:function(a){var z=this.a
+return H.d(a)+": "+H.d(z.t(z,a))},
+"+call:1:0":0,
+$isEH:true,
+$is_HB:true,
+$is_Dv:true},e9:{"":"T4;",
+yt:function(a,b,c){var z,y
+if(a==null)return
+z=T.ww(a,null).oK()
+if(M.wR(c)){y=J.x(b)
+if(y.n(b,"bind")||y.n(b,"repeat")){y=J.x(z)
+y=typeof z==="object"&&z!==null&&!!y.$isEZ}else y=!1}else y=!1
+if(y)return
+return new T.Xy(this,b,z)},
+gca:function(){return new T.Dw(this,T.e9.prototype.yt,null,"yt")},
+A5:function(a){return new T.uK(this)}},Xy:{"":"Tp;a,b,c",
+call$2:function(a,b){var z=J.x(a)
+if(typeof a!=="object"||a===null||!z.$isz6)a=new K.z6(null,a,V.WF(this.a.nF,null,null),null)
+z=J.x(b)
+z=typeof b==="object"&&b!==null&&!!z.$iscv
+if(z&&J.xC(this.b,"class"))return T.FL(this.c,a,T.qP)
+if(z&&J.xC(this.b,"style"))return T.FL(this.c,a,T.Fx)
+return T.FL(this.c,a,null)},
+"+call:2:0":0,
+$isEH:true,
+$is_bh:true},uK:{"":"Tp;a",
+call$1:function(a){var z=J.x(a)
+return typeof a==="object"&&a!==null&&!!z.$isz6?a:new K.z6(null,a,V.WF(this.a.nF,null,null),null)},
+"+call:1:0":0,
+$isEH:true,
+$is_HB:true,
+$is_Dv:true},mY:{"":"Pi;qc,jf,Qi,uK,VJ,Ai",
+Qv:function(a){return this.Qi.call$1(a)},
+vr:function(a){var z,y
+z=this.uK
+y=J.x(a)
+if(typeof a==="object"&&a!==null&&!!y.$isfk){y=J.C0(a.bm,new T.mB(this,a))
+this.uK=y.tt(y,!1)}else this.uK=this.Qi==null?a:this.Qv(a)
+F.Wi(this,C.ls,z,this.uK)},
+gnc:function(){return new H.Pm(this,T.mY.prototype.vr,null,"vr")},
+gP:function(a){return this.uK
+"40,38"},
+"+value":1,
+r6:function(a,b){return this.gP(a).call$1(b)},
+sP:function(a,b){var z,y,x,w
+try{K.jX(this.jf,b,this.qc)}catch(y){x=H.Ru(y)
+w=J.x(x)
+if(typeof x==="object"&&x!==null&&!!w.$isB0){z=x
+$.IS().A3("Error evaluating expression '"+H.d(this.jf)+"': "+J.z2(z))}else throw y}"40,112,40,38"},
+"+value=":1,
+Va:function(a,b,c){var z,y,x,w,v
+y=this.jf
+x=y.gju().yI(this.gnc())
+x.fm(x,new T.fE(this))
+try{J.UK(y,new K.Ed(this.qc))
+y.gLl()
+this.vr(y.gLl())}catch(w){x=H.Ru(w)
+v=J.x(x)
+if(typeof x==="object"&&x!==null&&!!v.$isB0){z=x
+$.IS().A3("Error evaluating expression '"+H.d(y)+"': "+J.z2(z))}else throw w}},
+static:{FL:function(a,b,c){var z=new T.mY(b,a.RR(a,new K.G1(b,P.NZ(null,null))),c,null,null,null)
+z.Va(a,b,c)
+return z}}},fE:{"":"Tp;a",
+call$1:function(a){$.IS().A3("Error evaluating expression '"+H.d(this.a.jf)+"': "+H.d(J.z2(a)))},
+"+call:1:0":0,
+$isEH:true,
+$is_HB:true,
+$is_Dv:true},mB:{"":"Tp;a,b",
+call$1:function(a){var z=P.L5(null,null,null,null,null)
+z.u(z,this.b.kF,a)
+return new K.z6(this.a.qc,null,V.WF(z,null,null),null)},
+"+call:1:0":0,
+$isEH:true,
+$is_HB:true,
+$is_Dv:true}}],["polymer_expressions.async","package:polymer_expressions/async.dart",,B,{XF:{"":"xh;vq,L1,VJ,Ai",
+vb:function(a,b){this.vq.yI(new B.iH(b,this))},
+$asxh:function(a){return[null]},
+static:{z4:function(a,b){var z=new B.XF(a,null,null,null)
+H.VM(z,[b])
+z.vb(a,b)
+return z}}},iH:{"":"Tp;a,b",
+call$1:function(a){var z=this.b
+z.L1=F.Wi(z,C.ls,z.L1,a)},
+"+call:1:0":0,
+$isEH:true,
+$is_HB:true,
+$is_Dv:true}}],["polymer_expressions.eval","package:polymer_expressions/eval.dart",,K,{OH:function(a,b){var z=J.UK(a,new K.G1(b,P.NZ(null,null)))
+J.UK(z,new K.Ed(b))
+return z.gLv()},jX:function(a,b,c){var z,y,x,w,v,u,t,s,r,q,p
+z={}
+z.a=a
+y=new K.c4(z)
+x=[]
+H.VM(x,[U.hw])
+for(;w=z.a,v=J.RE(w),typeof w==="object"&&w!==null&&!!v.$isuk;){if(!J.xC(v.gkp(w),"|"))break
+x.push(v.gT8(w))
+z.a=v.gBb(w)}z=z.a
+w=J.x(z)
+if(typeof z==="object"&&z!==null&&!!w.$isw6){u=w.gP(z)
+t=C.OL
+s=!1}else if(typeof z==="object"&&z!==null&&!!w.$isRW){t=z.ghP()
+if(J.xC(w.gbP(z),"[]")){w=z.gre()
+if(0>=w.length)throw H.e(w,0)
+w=w[0]
+v=J.x(w)
+if(typeof w!=="object"||w===null||!v.$isno)y.call$0()
+z=z.gre()
+if(0>=z.length)throw H.e(z,0)
+u=J.Vm(z[0])
+s=!0}else{if(w.gbP(z)!=null){if(z.gre()!=null)y.call$0()
+u=w.gbP(z)}else{y.call$0()
+u=null}s=!1}}else{y.call$0()
+t=null
+u=null
+s=!1}for(z=new H.a7(x,x.length,0,null),H.VM(z,[H.W8(x,"Q",0)]);z.G();){r=z.mD
+q=J.UK(r,new K.G1(c,P.NZ(null,null)))
+J.UK(q,new K.Ed(c))
+q.gLv()
+throw H.b(K.yN("filter must implement Transformer: "+H.d(r)))}p=K.OH(t,c)
+if(p==null)throw H.b(K.yN("Can't assign to null: "+H.d(t)))
+if(s)J.kW(p,u,b)
+else H.vn(p).PU(new H.GD(H.le(u)),b)},ci:function(a){var z=J.x(a)
+if(typeof a==="object"&&a!==null&&!!z.$isqh)return B.z4(a,null)
+return a},Ku:function(a,b){var z=J.x(a)
+return K.ci(typeof a==="object"&&a!==null&&!!z.$iswL?a.lR.F2(a.ex,b,null).Ax:H.Ek(a,b,P.Te(null)))},"+call:2:0":0,wJY:{"":"Tp;",
+call$2:function(a,b){return J.WB(a,b)},
+"+call:2:0":0,
+$isEH:true,
+$is_bh:true},zOQ:{"":"Tp;",
+call$2:function(a,b){return J.xH(a,b)},
+"+call:2:0":0,
+$isEH:true,
+$is_bh:true},W6o:{"":"Tp;",
+call$2:function(a,b){return J.p0(a,b)},
+"+call:2:0":0,
+$isEH:true,
+$is_bh:true},MdQ:{"":"Tp;",
+call$2:function(a,b){return J.FW(a,b)},
+"+call:2:0":0,
+$isEH:true,
+$is_bh:true},YJG:{"":"Tp;",
+call$2:function(a,b){return J.xC(a,b)},
+"+call:2:0":0,
+$isEH:true,
+$is_bh:true},DOe:{"":"Tp;",
+call$2:function(a,b){return!J.xC(a,b)},
+"+call:2:0":0,
+$isEH:true,
+$is_bh:true},lPa:{"":"Tp;",
+call$2:function(a,b){return J.xZ(a,b)},
+"+call:2:0":0,
+$isEH:true,
+$is_bh:true},Ufa:{"":"Tp;",
+call$2:function(a,b){return J.J5(a,b)},
+"+call:2:0":0,
+$isEH:true,
+$is_bh:true},Raa:{"":"Tp;",
+call$2:function(a,b){return J.u6(a,b)},
+"+call:2:0":0,
+$isEH:true,
+$is_bh:true},w0:{"":"Tp;",
+call$2:function(a,b){return J.Hb(a,b)},
+"+call:2:0":0,
+$isEH:true,
+$is_bh:true},w4:{"":"Tp;",
+call$2:function(a,b){return a===!0||b===!0},
+"+call:2:0":0,
+$isEH:true,
+$is_bh:true},w5:{"":"Tp;",
+call$2:function(a,b){return a===!0&&b===!0},
+"+call:2:0":0,
+$isEH:true,
+$is_bh:true},w7:{"":"Tp;",
+call$2:function(a,b){var z=H.zN(b,"HB",null,null,null)
+if(z)return b.call$1(a)
+throw H.b(K.yN("Filters must be a one-argument function."))},
+"+call:2:0":0,
+$isEH:true,
+$is_bh:true},w9:{"":"Tp;",
+call$1:function(a){return a},
+"+call:1:0":0,
+$isEH:true,
+$is_HB:true,
+$is_Dv:true},w10:{"":"Tp;",
+call$1:function(a){return J.Z7(a)},
+"+call:1:0":0,
+$isEH:true,
+$is_HB:true,
+$is_Dv:true},w11:{"":"Tp;",
+call$1:function(a){return a!==!0},
+"+call:1:0":0,
+$isEH:true,
+$is_HB:true,
+$is_Dv:true},c4:{"":"Tp;a",
+call$0:function(){return H.vh(K.yN("Expression is not assignable: "+H.d(this.a.a)))},
+"+call:0:0":0,
+$isEH:true,
+$is_X0:true},z6:{"":"a;eT>,k8,bq,G9",
+gCH:function(){var z=this.G9
+if(z!=null)return z
+this.G9=H.vn(this.k8)
+return this.G9},
+t:function(a,b){var z,y,x,w,v,u
+if(J.xC(b,"this"))return this.k8
+else{z=this.bq.Zp
+if(z.x4(b))return K.ci(z.t(z,b))
+else if(this.k8!=null){y=new H.GD(H.le(b))
+x=J.bB(this.gCH().Ax).IE
+z=$.Sl()
+w=z.t(z,x)
+v=Z.xq(H.tT(H.YC(w==null?x:w),x),y)
+z=J.x(v)
+if(typeof v!=="object"||v===null||!z.$isRY)u=typeof v==="object"&&v!==null&&!!z.$isRS&&v.glT()
+else u=!0
+if(u)return K.ci(this.gCH().tu(y,1,y.hr,[]).Ax)
+else if(typeof v==="object"&&v!==null&&!!z.$isRS)return new K.wL(this.gCH(),y)}}z=this.eT
+if(z!=null)return K.ci(z.t(z,b))
+else throw H.b(K.yN("variable '"+H.d(b)+"' not found"))},
+"+[]:1:0":0,
+tI:function(a){var z
+if(J.xC(a,"this"))return
+else{z=this.bq
+if(z.Zp.x4(a))return z
+else{z=H.le(a)
+if(Z.xq(H.jO(J.bB(this.gCH().Ax).IE),new H.GD(z))!=null)return this.k8}}z=this.eT
+if(z!=null)return z.tI(a)},
+tg:function(a,b){var z
+if(this.bq.Zp.x4(b))return!0
+else{z=H.le(b)
+if(Z.xq(H.jO(J.bB(this.gCH().Ax).IE),new H.GD(z))!=null)return!0}z=this.eT
+if(z!=null)return z.tg(z,b)
+return!1},
+$isz6:true},Ay:{"":"a;bO?,Lv<",
+gju:function(){var z,y
+z=this.k6
+y=new P.Ik(z)
+H.VM(y,[H.W8(z,"WV",0)])
+return y},
+gLl:function(){return this.Lv},
+Qh:function(a){},
+DX:function(a){var z
+this.yc(this,a)
+z=this.bO
+if(z!=null)z.DX(a)},
+yc:function(a,b){var z,y,x
+z=this.tj
+if(z!=null){z.ed()
+this.tj=null}y=this.Lv
+this.Qh(b)
+z=this.Lv
+if(z==null?y!=null:z!==y){x=this.k6
+if(x.Gv>=4)H.vh(x.q7())
+x.Iv(z)}},
+bu:function(a){var z=this.KL
+return z.bu(z)},
+$ishw:true},Ed:{"":"a0;Jd",
+xn:function(a){a.yc(a,this.Jd)},
+ky:function(a){J.UK(a.gT8(a),this)
+a.yc(a,this.Jd)}},G1:{"":"fr;Jd,Le",
+W9:function(a){return new K.Wh(a,null,null,null,P.bK(null,null,!1,null))},
+LT:function(a){var z=a.wz
+return z.RR(z,this)},
+Y7:function(a){var z,y,x,w,v
+z=J.UK(a.ghP(),this)
+y=a.gre()
+if(y==null)x=null
+else{w=this.gnG()
+y.toString
+w=new H.A8(y,w)
+H.VM(w,[null,null])
+x=w.tt(w,!1)}v=new K.fa(z,x,a,null,null,null,P.bK(null,null,!1,null))
+z.sbO(v)
+if(x!=null){x.toString
+H.bQ(x,new K.Os(v))}return v},
+I6:function(a){return new K.x5(a,null,null,null,P.bK(null,null,!1,null))},
+o0:function(a){var z,y,x
+z=new H.A8(a.gPu(a),this.gnG())
+H.VM(z,[null,null])
+y=z.tt(z,!1)
+x=new K.ev(y,a,null,null,null,P.bK(null,null,!1,null))
+H.bQ(y,new K.Dl(x))
+return x},
+YV:function(a){var z,y,x
+z=J.UK(a.gG3(a),this)
+y=J.UK(a.gv4(),this)
+x=new K.jV(z,y,a,null,null,null,P.bK(null,null,!1,null))
+z.sbO(x)
+y.sbO(x)
+return x},
+qv:function(a){return new K.ek(a,null,null,null,P.bK(null,null,!1,null))},
+im:function(a){var z,y,x
+z=J.UK(a.gBb(a),this)
+y=J.UK(a.gT8(a),this)
+x=new K.ky(z,y,a,null,null,null,P.bK(null,null,!1,null))
+z.sbO(x)
+y.sbO(x)
+return x},
+Hx:function(a){var z,y
+z=J.UK(a.gwz(),this)
+y=new K.Jy(z,a,null,null,null,P.bK(null,null,!1,null))
+z.sbO(y)
+return y},
+ky:function(a){var z,y,x
+z=J.UK(a.gBb(a),this)
+y=J.UK(a.gT8(a),this)
+x=new K.VA(z,y,a,null,null,null,P.bK(null,null,!1,null))
+y.sbO(x)
+return x}},Os:{"":"Tp;a",
+call$1:function(a){var z=this.a
+a.sbO(z)
+return z},
+"+call:1:0":0,
+$isEH:true,
+$is_HB:true,
+$is_Dv:true},Dl:{"":"Tp;a",
+call$1:function(a){var z=this.a
+a.sbO(z)
+return z},
+"+call:1:0":0,
+$isEH:true,
+$is_HB:true,
+$is_Dv:true},Wh:{"":"Ay;KL,bO,tj,Lv,k6",
+Qh:function(a){this.Lv=a.k8},
+RR:function(a,b){return b.W9(this)},
+$asAy:function(){return[U.EZ]},
+$isEZ:true,
+$ishw:true},x5:{"":"Ay;KL,bO,tj,Lv,k6",
+gP:function(a){var z=this.KL
+return z.gP(z)},
+"+value":0,
+r6:function(a,b){return this.gP(a).call$1(b)},
+Qh:function(a){var z=this.KL
+this.Lv=z.gP(z)},
+RR:function(a,b){return b.I6(this)},
+$asAy:function(){return[U.no]},
+$asno:function(){return[null]},
+$isno:true,
+$ishw:true},ev:{"":"Ay;Pu>,KL,bO,tj,Lv,k6",
+Qh:function(a){this.Lv=H.n3(this.Pu,P.L5(null,null,null,null,null),new K.ID())},
+RR:function(a,b){return b.o0(this)},
+$asAy:function(){return[U.kB]},
+$iskB:true,
+$ishw:true},ID:{"":"Tp;",
+call$2:function(a,b){J.kW(a,J.WI(b).gLv(),b.gv4().gLv())
+return a},
+"+call:2:0":0,
+$isEH:true,
+$is_bh:true},jV:{"":"Ay;G3>,v4<,KL,bO,tj,Lv,k6",
+RR:function(a,b){return b.YV(this)},
+$asAy:function(){return[U.ae]},
+$isae:true,
+$ishw:true},ek:{"":"Ay;KL,bO,tj,Lv,k6",
+gP:function(a){var z=this.KL
+return z.gP(z)},
+"+value":0,
+r6:function(a,b){return this.gP(a).call$1(b)},
+Qh:function(a){var z,y,x
+z=this.KL
+this.Lv=a.t(a,z.gP(z))
+y=a.tI(z.gP(z))
+x=J.RE(y)
+if(typeof y==="object"&&y!==null&&!!x.$isd3){z=H.le(z.gP(z))
+this.tj=x.gqh(y).yI(new K.OC(this,a,new H.GD(z)))}},
+RR:function(a,b){return b.qv(this)},
+$asAy:function(){return[U.w6]},
+$isw6:true,
+$ishw:true},OC:{"":"Tp;a,b,c",
+call$1:function(a){if(J.ja(a,new K.Xm(this.c))===!0)this.a.DX(this.b)},
+"+call:1:0":0,
+$isEH:true,
+$is_HB:true,
+$is_Dv:true},Xm:{"":"Tp;d",
+call$1:function(a){var z=J.x(a)
+return typeof a==="object"&&a!==null&&!!z.$isqI&&J.xC(a.oc,this.d)},
+"+call:1:0":0,
+$isEH:true,
+$is_HB:true,
+$is_Dv:true},Jy:{"":"Ay;wz<,KL,bO,tj,Lv,k6",
+gkp:function(a){var z=this.KL
+return z.gkp(z)},
+Qh:function(a){var z,y,x
+z=$.YG()
+y=this.KL
+x=z.t(z,y.gkp(y))
+if(J.xC(y.gkp(y),"!")){z=this.wz.gLv()
+this.Lv=x.call$1(z==null?!1:z)}else{z=this.wz.gLv()
+this.Lv=z==null?null:x.call$1(z)}},
+RR:function(a,b){return b.Hx(this)},
+$asAy:function(){return[U.jK]},
+$isjK:true,
+$ishw:true},ky:{"":"Ay;Bb>,T8>,KL,bO,tj,Lv,k6",
+gkp:function(a){var z=this.KL
+return z.gkp(z)},
+Qh:function(a){var z,y,x
+z=$.bF()
+y=this.KL
+x=z.t(z,y.gkp(y))
+if(J.xC(y.gkp(y),"&&")||J.xC(y.gkp(y),"||")){z=this.Bb.gLv()
+if(z==null)z=!1
+y=this.T8.gLv()
+this.Lv=x.call$2(z,y==null?!1:y)}else if(J.xC(y.gkp(y),"==")||J.xC(y.gkp(y),"!="))this.Lv=x.call$2(this.Bb.gLv(),this.T8.gLv())
+else{z=this.Bb.gLv()
+if(z==null||this.T8.gLv()==null)this.Lv=null
+else this.Lv=x.call$2(z,this.T8.gLv())}},
+RR:function(a,b){return b.im(this)},
+$asAy:function(){return[U.uk]},
+$isuk:true,
+$ishw:true},fa:{"":"Ay;hP<,re<,KL,bO,tj,Lv,k6",
+glT:function(){return this.KL.glT()},
+gbP:function(a){var z=this.KL
+return z.gbP(z)},
+Qh:function(a){var z,y,x,w,v,u
+z=this.re
+if(z==null)y=[]
+else{z.toString
+z=new H.A8(z,new K.WW())
+H.VM(z,[null,null])
+y=z.tt(z,!1)}x=this.hP.gLv()
+if(x==null)this.Lv=null
+else{z=this.KL
+if(z.gbP(z)==null)if(z.glT())this.Lv=x
+else this.Lv=K.Ku(x,y)
+else if(J.xC(z.gbP(z),"[]")){if(0>=y.length)throw H.e(y,0)
+w=y[0]
+z=J.U6(x)
+this.Lv=z.t(x,w)
+if(typeof x==="object"&&x!==null&&!!z.$isd3)this.tj=z.gqh(x).yI(new K.vQ(this,a,w))}else{v=H.vn(x)
+u=new H.GD(H.le(z.gbP(z)))
+this.Lv=z.glT()?v.rN(u).Ax:v.F2(u,y,null).Ax
+z=J.RE(x)
+if(typeof x==="object"&&x!==null&&!!z.$isd3)this.tj=z.gqh(x).yI(new K.jh(this,a,u))}}},
+RR:function(a,b){return b.Y7(this)},
+$asAy:function(){return[U.RW]},
+$isRW:true,
+$ishw:true},WW:{"":"Tp;",
+call$1:function(a){return a.gLv()},
+"+call:1:0":0,
+$isEH:true,
+$is_HB:true,
+$is_Dv:true},vQ:{"":"Tp;a,b,c",
+call$1:function(a){if(J.ja(a,new K.a9(this.c))===!0)this.a.DX(this.b)},
+"+call:1:0":0,
+$isEH:true,
+$is_HB:true,
+$is_Dv:true},a9:{"":"Tp;d",
+call$1:function(a){var z=J.x(a)
+return typeof a==="object"&&a!==null&&!!z.$isHA&&J.xC(a.G3,this.d)},
+"+call:1:0":0,
+$isEH:true,
+$is_HB:true,
+$is_Dv:true},jh:{"":"Tp;e,f,g",
+call$1:function(a){if(J.ja(a,new K.e3(this.g))===!0)this.e.DX(this.f)},
+"+call:1:0":0,
+$isEH:true,
+$is_HB:true,
+$is_Dv:true},e3:{"":"Tp;h",
+call$1:function(a){var z=J.x(a)
+return typeof a==="object"&&a!==null&&!!z.$isqI&&J.xC(a.oc,this.h)},
+"+call:1:0":0,
+$isEH:true,
+$is_HB:true,
+$is_Dv:true},VA:{"":"Ay;Bb>,T8>,KL,bO,tj,Lv,k6",
+Qh:function(a){var z,y,x,w
+z=this.Bb
+y=this.T8.gLv()
+x=J.x(y)
+if((typeof y!=="object"||y===null||y.constructor!==Array&&!x.$iscX)&&y!=null)throw H.b(K.yN("right side of 'in' is not an iterator"))
+if(typeof y==="object"&&y!==null&&!!x.$iswn)this.tj=y.gRT().yI(new K.J1(this,a))
+x=J.Vm(z)
+w=y!=null?y:C.xD
+this.Lv=new K.fk(x,w)},
+RR:function(a,b){return b.ky(this)},
+$asAy:function(){return[U.K9]},
+$isK9:true,
+$ishw:true},J1:{"":"Tp;a,b",
+call$1:function(a){return this.a.DX(this.b)},
+"+call:1:0":0,
+$isEH:true,
+$is_HB:true,
+$is_Dv:true},fk:{"":"a;kF,bm",$isfk:true},wL:{"":"a;lR,ex",
+call$1:function(a){return this.lR.F2(this.ex,[a],null).Ax},
+"+call:1:0":0,
+$iswL:true,
+$isEH:true,
+$is_HB:true,
+$is_Dv:true},B0:{"":"a;G1>",
+bu:function(a){return"EvalException: "+this.G1},
+$isB0:true,
+static:{yN:function(a){return new K.B0(a)}}}}],["polymer_expressions.expression","package:polymer_expressions/expression.dart",,U,{ZP:function(a,b){var z,y,x
+z=J.x(a)
+if(z.n(a,b))return!0
+if(a==null||b==null)return!1
+if(!J.xC(z.gB(a),b.length))return!1
+y=0
+while(!0){x=z.gB(a)
+if(typeof x!=="number")throw H.s(x)
+if(!(y<x))break
+x=z.t(a,y)
+if(y>=b.length)throw H.e(b,y)
+if(!J.xC(x,b[y]))return!1;++y}return!0},au:function(a){a.toString
+return U.Up(H.n3(a,0,new U.xs()))},Zm:function(a,b){var z=J.WB(a,b)
+if(typeof z!=="number")throw H.s(z)
+a=536870911&z
+a=536870911&a+((524287&a)<<10>>>0)
+return(a^C.jn.m(a,6))>>>0},Up:function(a){if(typeof a!=="number")throw H.s(a)
+a=536870911&a+((67108863&a)<<3>>>0)
+a=(a^C.jn.m(a,11))>>>0
+return 536870911&a+((16383&a)<<15>>>0)},Fq:{"":"a;",
+F2:function(a,b,c){return new U.RW(a,b,c)},
+"+invoke:3:0":0,
+"*invoke":[40],
+CI:function(a,b){return this.F2(a,b,null)},
+"+invoke:2:0":0},hw:{"":"a;",$ishw:true},EZ:{"":"hw;",
+RR:function(a,b){return b.W9(this)},
+$isEZ:true},no:{"":"hw;P>",
+r6:function(a,b){return this.P.call$1(b)},
+RR:function(a,b){return b.I6(this)},
+bu:function(a){var z=this.P
+return typeof z==="string"?"\""+H.d(z)+"\"":H.d(z)},
+n:function(a,b){var z
+if(b==null)return!1
+z=H.RB(b,"$isno",[H.W8(this,"no",0)],"$asno")
+return z&&J.xC(J.Vm(b),this.P)},
+giO:function(a){return J.v1(this.P)},
+$isno:true},kB:{"":"hw;Pu>",
+RR:function(a,b){return b.o0(this)},
+bu:function(a){return"{"+H.d(this.Pu)+"}"},
+n:function(a,b){var z
+if(b==null)return!1
+z=J.RE(b)
+return typeof b==="object"&&b!==null&&!!z.$iskB&&U.ZP(z.gPu(b),this.Pu)},
+giO:function(a){return U.au(this.Pu)},
+$iskB:true},ae:{"":"hw;G3>,v4<",
+RR:function(a,b){return b.YV(this)},
+bu:function(a){return H.d(this.G3)+": "+H.d(this.v4)},
+n:function(a,b){var z
+if(b==null)return!1
+z=J.RE(b)
+return typeof b==="object"&&b!==null&&!!z.$isae&&J.xC(z.gG3(b),this.G3)&&J.xC(b.gv4(),this.v4)},
+giO:function(a){var z,y
+z=J.v1(this.G3.P)
+y=J.v1(this.v4)
+return U.Up(U.Zm(U.Zm(0,z),y))},
+$isae:true},Iq:{"":"hw;wz",
+RR:function(a,b){return b.LT(this)},
+bu:function(a){return"("+H.d(this.wz)+")"},
+n:function(a,b){var z
+if(b==null)return!1
+z=J.x(b)
+return typeof b==="object"&&b!==null&&!!z.$isIq&&J.xC(b.wz,this.wz)},
+giO:function(a){return J.v1(this.wz)},
+$isIq:true},w6:{"":"hw;P>",
+r6:function(a,b){return this.P.call$1(b)},
+RR:function(a,b){return b.qv(this)},
+bu:function(a){return this.P},
+n:function(a,b){var z
+if(b==null)return!1
+z=J.RE(b)
+return typeof b==="object"&&b!==null&&!!z.$isw6&&J.xC(z.gP(b),this.P)},
+giO:function(a){return J.v1(this.P)},
+$isw6:true},jK:{"":"hw;kp>,wz<",
+RR:function(a,b){return b.Hx(this)},
+bu:function(a){return H.d(this.kp)+" "+H.d(this.wz)},
+n:function(a,b){var z
+if(b==null)return!1
+z=J.RE(b)
+return typeof b==="object"&&b!==null&&!!z.$isjK&&J.xC(z.gkp(b),this.kp)&&J.xC(b.gwz(),this.wz)},
+giO:function(a){var z,y
+z=J.v1(this.kp)
+y=J.v1(this.wz)
+return U.Up(U.Zm(U.Zm(0,z),y))},
+$isjK:true},uk:{"":"hw;kp>,Bb>,T8>",
+RR:function(a,b){return b.im(this)},
+bu:function(a){return"("+H.d(this.Bb)+" "+H.d(this.kp)+" "+H.d(this.T8)+")"},
+n:function(a,b){var z
+if(b==null)return!1
+z=J.RE(b)
+return typeof b==="object"&&b!==null&&!!z.$isuk&&J.xC(z.gkp(b),this.kp)&&J.xC(z.gBb(b),this.Bb)&&J.xC(z.gT8(b),this.T8)},
+giO:function(a){var z,y,x
+z=J.v1(this.kp)
+y=J.v1(this.Bb)
+x=J.v1(this.T8)
+return U.Up(U.Zm(U.Zm(U.Zm(0,z),y),x))},
+$isuk:true},K9:{"":"hw;Bb>,T8>",
+RR:function(a,b){return b.ky(this)},
+bu:function(a){return"("+H.d(this.Bb)+" in "+H.d(this.T8)+")"},
+n:function(a,b){var z
+if(b==null)return!1
+z=J.RE(b)
+return typeof b==="object"&&b!==null&&!!z.$isK9&&J.xC(z.gBb(b),this.Bb)&&J.xC(z.gT8(b),this.T8)},
+giO:function(a){var z,y
+z=this.Bb
+z=z.giO(z)
+y=J.v1(this.T8)
+return U.Up(U.Zm(U.Zm(0,z),y))},
+$isK9:true},RW:{"":"hw;hP<,bP>,re<",
+RR:function(a,b){return b.Y7(this)},
+glT:function(){return this.re==null},
+bu:function(a){return H.d(this.hP)+"."+H.d(this.bP)+"("+H.d(this.re)+")"},
+n:function(a,b){var z
+if(b==null)return!1
+z=J.RE(b)
+return typeof b==="object"&&b!==null&&!!z.$isRW&&J.xC(b.ghP(),this.hP)&&J.xC(z.gbP(b),this.bP)&&U.ZP(b.gre(),this.re)},
+giO:function(a){var z,y,x
+z=J.v1(this.hP)
+y=J.v1(this.bP)
+x=U.au(this.re)
+return U.Up(U.Zm(U.Zm(U.Zm(0,z),y),x))},
+$isRW:true},xs:{"":"Tp;",
+call$2:function(a,b){return U.Zm(a,J.v1(b))},
+"+call:2:0":0,
+$isEH:true,
+$is_bh:true}}],["polymer_expressions.parser","package:polymer_expressions/parser.dart",,T,{FX:{"":"a;Sk,Ix,ku,fL,lQ",
+oK:function(){var z,y
+this.ku=this.Ix.zl()
+z=this.ku
+z.toString
+y=new H.a7(z,z.length,0,null)
+H.VM(y,[H.W8(z,"Q",0)])
+this.fL=y
+this.w5()
+return this.o9()},
+Gd:function(a,b){var z
+if(!(a!=null&&!J.xC(J.Iz(this.lQ),a)))z=b!=null&&!J.xC(J.Vm(this.lQ),b)
+else z=!0
+if(z)throw H.b(Y.RV("Expected "+b+": "+H.d(this.lQ)))
+this.lQ=this.fL.G()?this.fL.mD:null},
+w5:function(){return this.Gd(null,null)},
+o9:function(){if(this.lQ==null){this.Sk.toString
+return C.OL}var z=this.Dl()
+return z==null?null:this.BH(z,0)},
+BH:function(a,b){var z,y,x,w
+for(z=this.Sk;y=this.lQ,y!=null;)if(J.xC(J.Iz(y),9))if(J.xC(J.Vm(this.lQ),"(")){x=this.qk()
+z.toString
+a=new U.RW(a,null,x)}else if(J.xC(J.Vm(this.lQ),"[")){w=this.bK()
+x=w==null?[]:[w]
+z.toString
+a=new U.RW(a,"[]",x)}else break
+else if(J.xC(J.Iz(this.lQ),3)){this.w5()
+a=this.ct(a,this.Dl())}else if(J.xC(J.Iz(this.lQ),10)&&J.xC(J.Vm(this.lQ),"in"))a=this.xo(a)
+else if(J.xC(J.Iz(this.lQ),8)&&J.J5(this.lQ.gG8(),b))a=this.Tw(a)
+else break
+return a},
+ct:function(a,b){var z,y
+if(typeof b==="object"&&b!==null&&!!b.$isw6){z=b.gP(b)
+this.Sk.toString
+return new U.RW(a,z,null)}else{if(typeof b==="object"&&b!==null&&!!b.$isRW){z=b.ghP()
+y=J.x(z)
+y=typeof z==="object"&&z!==null&&!!y.$isw6
+z=y}else z=!1
+if(z){z=J.Vm(b.ghP())
+y=b.gre()
+this.Sk.toString
+return new U.RW(a,z,y)}else throw H.b(Y.RV("expected identifier: "+H.d(b)))}},
+Tw:function(a){var z,y,x
+z=this.lQ
+this.w5()
+y=this.Dl()
+while(!0){x=this.lQ
+if(x!=null)x=(J.xC(J.Iz(x),8)||J.xC(J.Iz(this.lQ),3)||J.xC(J.Iz(this.lQ),9))&&J.xZ(this.lQ.gG8(),z.gG8())
+else x=!1
+if(!x)break
+y=this.BH(y,this.lQ.gG8())}x=J.Vm(z)
+this.Sk.toString
+return new U.uk(x,a,y)},
+Dl:function(){var z,y,x,w
+if(J.xC(J.Iz(this.lQ),8)){z=J.Vm(this.lQ)
+y=J.x(z)
+if(y.n(z,"+")||y.n(z,"-")){this.w5()
+if(J.xC(J.Iz(this.lQ),6)){y=H.BU(H.d(z)+H.d(J.Vm(this.lQ)),null,null)
+this.Sk.toString
+z=new U.no(y)
+z.$builtinTypeInfo=[null]
+this.w5()
+return z}else{y=this.Sk
+if(J.xC(J.Iz(this.lQ),7)){x=H.IH(H.d(z)+H.d(J.Vm(this.lQ)),null)
+y.toString
+z=new U.no(x)
+z.$builtinTypeInfo=[null]
+this.w5()
+return z}else{w=this.BH(this.lb(),11)
+y.toString
+return new U.jK(z,w)}}}else if(y.n(z,"!")){this.w5()
+w=this.BH(this.lb(),11)
+this.Sk.toString
+return new U.jK(z,w)}}return this.lb()},
+lb:function(){var z,y
+switch(J.Iz(this.lQ)){case 10:z=J.Vm(this.lQ)
+y=J.x(z)
+if(y.n(z,"this")){this.w5()
+this.Sk.toString
+return new U.w6("this")}else if(y.n(z,"in"))return
+throw H.b(new P.AT("unrecognized keyword: "+H.d(z)))
+case 2:return this.Cy()
+case 1:return this.qF()
+case 6:return this.Ud()
+case 7:return this.tw()
+case 9:if(J.xC(J.Vm(this.lQ),"("))return this.Pj()
+else if(J.xC(J.Vm(this.lQ),"{"))return this.Wc()
+return
+default:return}},
+Wc:function(){var z,y,x,w
+z=[]
+y=this.Sk
+do{this.w5()
+if(J.xC(J.Iz(this.lQ),9)&&J.xC(J.Vm(this.lQ),"}"))break
+x=J.Vm(this.lQ)
+y.toString
+w=new U.no(x)
+w.$builtinTypeInfo=[null]
+this.w5()
+this.Gd(5,":")
+z.push(new U.ae(w,this.o9()))
+x=this.lQ}while(x!=null&&J.xC(J.Vm(x),","))
+this.Gd(9,"}")
+return new U.kB(z)},
+xo:function(a){var z,y
+z=J.x(a)
+if(typeof a!=="object"||a===null||!z.$isw6)throw H.b(Y.RV("in... statements must start with an identifier"))
+this.w5()
+y=this.o9()
+this.Sk.toString
+return new U.K9(a,y)},
+Cy:function(){var z,y,x
+if(J.xC(J.Vm(this.lQ),"true")){this.w5()
+this.Sk.toString
+z=new U.no(!0)
+H.VM(z,[null])
+return z}if(J.xC(J.Vm(this.lQ),"false")){this.w5()
+this.Sk.toString
+z=new U.no(!1)
+H.VM(z,[null])
+return z}if(J.xC(J.Vm(this.lQ),"null")){this.w5()
+this.Sk.toString
+z=new U.no(null)
+H.VM(z,[null])
+return z}y=this.nt()
+x=this.qk()
+if(x==null)return y
+else{this.Sk.toString
+return new U.RW(y,null,x)}},
+nt:function(){if(!J.xC(J.Iz(this.lQ),2))throw H.b(Y.RV("expected identifier: "+H.d(this.lQ)+".value"))
+var z=J.Vm(this.lQ)
+this.w5()
+this.Sk.toString
+return new U.w6(z)},
+qk:function(){var z,y
+z=this.lQ
+if(z!=null&&J.xC(J.Iz(z),9)&&J.xC(J.Vm(this.lQ),"(")){y=[]
+do{this.w5()
+if(J.xC(J.Iz(this.lQ),9)&&J.xC(J.Vm(this.lQ),")"))break
+y.push(this.o9())
+z=this.lQ}while(z!=null&&J.xC(J.Vm(z),","))
+this.Gd(9,")")
+return y}return},
+bK:function(){var z,y
+z=this.lQ
+if(z!=null&&J.xC(J.Iz(z),9)&&J.xC(J.Vm(this.lQ),"[")){this.w5()
+y=this.o9()
+this.Gd(9,"]")
+return y}return},
+Pj:function(){this.w5()
+var z=this.o9()
+this.Gd(9,")")
+this.Sk.toString
+return new U.Iq(z)},
+qF:function(){var z,y
+z=J.Vm(this.lQ)
+this.Sk.toString
+y=new U.no(z)
+H.VM(y,[null])
+this.w5()
+return y},
+pT:function(a){var z,y
+z=H.BU(H.d(a)+H.d(J.Vm(this.lQ)),null,null)
+this.Sk.toString
+y=new U.no(z)
+H.VM(y,[null])
+this.w5()
+return y},
+Ud:function(){return this.pT("")},
+yj:function(a){var z,y
+z=H.IH(H.d(a)+H.d(J.Vm(this.lQ)),null)
+this.Sk.toString
+y=new U.no(z)
+H.VM(y,[null])
+this.w5()
+return y},
+tw:function(){return this.yj("")},
+static:{ww:function(a,b){var z,y,x
+z=[]
+H.VM(z,[Y.Pn])
+y=P.p9("")
+x=new U.Fq()
+return new T.FX(x,new Y.hc(z,y,new P.WU(a,0,0,null),null),null,null,null)}}}}],["polymer_expressions.src.globals","package:polymer_expressions/src/globals.dart",,K,{Dc:function(a){var z=new K.Bt(a)
+H.VM(z,[null])
+return z},Ae:{"":"a;vH>-,P>-",
+r6:function(a,b){return this.P.call$1(b)},
+$isAe:true,
+"@":function(){return[C.nJ]},
+"<>":[3],
+static:{i0:function(a,b,c){var z=new K.Ae(a,b)
+H.VM(z,[c])
+return z
+"28,29,30,31,32"},"+new IndexedValue:2:0":1}},"+IndexedValue": [0],Bt:{"":"mW;YR",
+gA:function(a){var z=J.GP(this.YR)
+z=new K.vR(z,0,null)
+H.VM(z,[H.W8(this,"Bt",0)])
+return z},
+gB:function(a){return J.q8(this.YR)},
+"+length":0,
+gl0:function(a){return J.FN(this.YR)},
+"+isEmpty":0,
+grZ:function(a){var z,y,x
+z=this.YR
+y=J.U6(z)
+x=J.xH(y.gB(z),1)
+z=y.grZ(z)
+z=new K.Ae(x,z)
+H.VM(z,[H.W8(this,"Bt",0)])
+return z},
+Zv:function(a,b){var z=J.i4(this.YR,b)
+z=new K.Ae(b,z)
+H.VM(z,[H.W8(this,"Bt",0)])
+return z},
+$asmW:function(a){return[[K.Ae,a]]},
+$ascX:function(a){return[[K.Ae,a]]}},vR:{"":"eL;Ee,wX,CD",
+gl:function(){return this.CD},
+"+current":0,
+G:function(){var z,y
+z=this.Ee
+if(z.G()){y=this.wX
+this.wX=y+1
+z=new K.Ae(y,z.gl())
+H.VM(z,[null])
+this.CD=z
+return!0}this.CD=null
+return!1},
+$aseL:function(a){return[[K.Ae,a]]}}}],["polymer_expressions.src.mirrors","package:polymer_expressions/src/mirrors.dart",,Z,{xq:function(a,b){var z,y,x
+if(a.gYK().x4(b)===!0)return J.UQ(a.gYK(),b)
+z=a.gAY()
+if(z!=null&&!J.xC(z.gvd(),C.PU)){y=Z.xq(a.gAY(),b)
+if(y!=null)return y}for(x=J.GP(a.gkZ());x.G();){y=Z.xq(x.gl(),b)
+if(y!=null)return y}return}}],["polymer_expressions.tokenizer","package:polymer_expressions/tokenizer.dart",,Y,{TI:function(a){var z
+if(typeof a!=="number")throw H.s(a)
+if(!(97<=a&&a<=122))z=65<=a&&a<=90||a===95||a===36||a>127
+else z=!0
+return z},KH:function(a){var z
+if(typeof a!=="number")throw H.s(a)
+if(!(97<=a&&a<=122))if(!(65<=a&&a<=90))z=48<=a&&a<=57||a===95||a===36||a>127
+else z=!0
+else z=!0
+return z},aK:function(a){switch(a){case 102:return 12
+case 110:return 10
+case 114:return 13
+case 116:return 9
+case 118:return 11
+default:return a}},Pn:{"":"a;fY>,P>,G8<",
+r6:function(a,b){return this.P.call$1(b)},
+bu:function(a){return"("+this.fY+", '"+this.P+"')"},
+$isPn:true},hc:{"":"a;MV,wV,jI,x0",
+zl:function(){var z,y,x,w,v
+z=this.jI
+this.x0=z.G()?z.Wn:null
+for(y=this.MV;x=this.x0,x!=null;)if(x===32||x===9||x===160)this.x0=z.G()?z.Wn:null
+else if(x===34||x===39)this.DS()
+else if(Y.TI(x))this.y3()
+else{x=this.x0
+if(typeof x!=="number")throw H.s(x)
+if(48<=x&&x<=57)this.jj()
+else if(x===46){this.x0=z.G()?z.Wn:null
+x=this.x0
+if(typeof x!=="number")throw H.s(x)
+if(48<=x&&x<=57)this.e1()
+else y.push(new Y.Pn(3,".",11))}else if(x===44){this.x0=z.G()?z.Wn:null
+y.push(new Y.Pn(4,",",0))}else if(x===58){this.x0=z.G()?z.Wn:null
+y.push(new Y.Pn(5,":",0))}else if(C.Nm.tg(C.xu,x))this.yV()
+else if(C.Nm.tg(C.iq,this.x0)){w=P.O8(1,this.x0,J.im)
+w.$builtinTypeInfo=[J.im]
+v=H.eT(w)
+y.push(new Y.Pn(9,v,C.dj.t(C.dj,v)))
+this.x0=z.G()?z.Wn:null}else this.x0=z.G()?z.Wn:null}return y},
+DS:function(){var z,y,x,w,v
+z=this.x0
+y=this.jI
+this.x0=y.G()?y.Wn:null
+for(x=this.wV;w=this.x0,w==null?z!=null:w!==z;){if(w==null)throw H.b(Y.RV("unterminated string"))
+if(w===92){this.x0=y.G()?y.Wn:null
+w=this.x0
+if(w==null)throw H.b(Y.RV("unterminated string"))
+v=P.O8(1,Y.aK(w),J.im)
+v.$builtinTypeInfo=[J.im]
+w=H.eT(v)
+x.vM=x.vM+w}else{v=P.O8(1,w,J.im)
+v.$builtinTypeInfo=[J.im]
+w=H.eT(v)
+x.vM=x.vM+w}this.x0=y.G()?y.Wn:null}this.MV.push(new Y.Pn(1,x.vM,0))
+x.vM=""
+this.x0=y.G()?y.Wn:null},
+y3:function(){var z,y,x,w,v
+z=this.jI
+y=this.wV
+while(!0){x=this.x0
+if(!(x!=null&&Y.KH(x)))break
+w=P.O8(1,this.x0,J.im)
+w.$builtinTypeInfo=[J.im]
+x=H.eT(w)
+y.vM=y.vM+x
+this.x0=z.G()?z.Wn:null}v=y.vM
+z=this.MV
+if(C.Nm.tg(C.Qy,v))z.push(new Y.Pn(10,v,0))
+else z.push(new Y.Pn(2,v,0))
+y.vM=""},
+jj:function(){var z,y,x,w,v
+z=this.jI
+y=this.wV
+while(!0){x=this.x0
+if(x!=null){if(typeof x!=="number")throw H.s(x)
+w=48<=x&&x<=57}else w=!1
+if(!w)break
+v=P.O8(1,x,J.im)
+v.$builtinTypeInfo=[J.im]
+x=H.eT(v)
+y.vM=y.vM+x
+this.x0=z.G()?z.Wn:null}if(x===46){this.x0=z.G()?z.Wn:null
+z=this.x0
+if(typeof z!=="number")throw H.s(z)
+if(48<=z&&z<=57)this.e1()
+else this.MV.push(new Y.Pn(3,".",11))}else{this.MV.push(new Y.Pn(6,y.vM,0))
+y.vM=""}},
+e1:function(){var z,y,x,w,v
+z=this.wV
+z.KF(P.fc(46))
+y=this.jI
+while(!0){x=this.x0
+if(x!=null){if(typeof x!=="number")throw H.s(x)
+w=48<=x&&x<=57}else w=!1
+if(!w)break
+v=P.O8(1,x,J.im)
+v.$builtinTypeInfo=[J.im]
+x=H.eT(v)
+z.vM=z.vM+x
+this.x0=y.G()?y.Wn:null}this.MV.push(new Y.Pn(7,z.vM,0))
+z.vM=""},
+yV:function(){var z,y,x,w,v,u
+z=this.x0
+y=this.jI
+this.x0=y.G()?y.Wn:null
+if(C.Nm.tg(C.xu,this.x0)){x=this.x0
+w=H.eT([z,x])
+if(C.Nm.tg(C.u0,w)){this.x0=y.G()?y.Wn:null
+v=w}else{u=P.O8(1,z,J.im)
+u.$builtinTypeInfo=[J.im]
+v=H.eT(u)}}else{u=P.O8(1,z,J.im)
+u.$builtinTypeInfo=[J.im]
+v=H.eT(u)}this.MV.push(new Y.Pn(8,v,C.dj.t(C.dj,v)))}},hA:{"":"a;G1>",
+bu:function(a){return"ParseException: "+this.G1},
+static:{RV:function(a){return new Y.hA(a)}}}}],["polymer_expressions.visitor","package:polymer_expressions/visitor.dart",,S,{fr:{"":"a;",
+DV:function(a){return J.UK(a,this)},
+gnG:function(){return new H.Pm(this,S.fr.prototype.DV,null,"DV")}},a0:{"":"fr;",
+W9:function(a){return this.xn(a)},
+LT:function(a){a.RR(a,this)
+this.xn(a)},
+Y7:function(a){var z,y
+J.UK(a.ghP(),this)
+z=a.gre()
+if(z!=null)for(z.toString,y=new H.a7(z,z.length,0,null),H.VM(y,[H.W8(z,"Q",0)]);y.G();)J.UK(y.mD,this)
+this.xn(a)},
+I6:function(a){return this.xn(a)},
+o0:function(a){var z,y
+for(z=a.gPu(a),y=new H.a7(z,z.length,0,null),H.VM(y,[H.W8(z,"Q",0)]);y.G();)J.UK(y.mD,this)
+this.xn(a)},
+YV:function(a){J.UK(a.gG3(a),this)
+J.UK(a.gv4(),this)
+this.xn(a)},
+qv:function(a){return this.xn(a)},
+im:function(a){J.UK(a.gBb(a),this)
+J.UK(a.gT8(a),this)
+this.xn(a)},
+Hx:function(a){J.UK(a.gwz(),this)
+this.xn(a)},
+ky:function(a){J.UK(a.gBb(a),this)
+J.UK(a.gT8(a),this)
+this.xn(a)}}}],["response_viewer_element","package:observatory/src/observatory_elements/response_viewer.dart",,Q,{NQ:{"":["uL;tH-,VJ,Ai,VJ,Ai,ZI,uN,z3,TQ,Vk,Ye,mT,KM-",null,null,null,null,null,null,null,null,null,null,null,null,function(){return[C.nJ]}],
+"@":function(){return[C.Ig]},
+static:{Zo:function(a){var z,y,x,w,v
+z=$.Nd()
+y=P.Py(null,null,null,J.O,W.I0)
+x=J.O
+w=W.cv
+v=new V.br(P.Py(null,null,null,x,w),null,null)
+H.VM(v,[x,w])
+a.Ye=z
+a.mT=y
+a.KM=v
+C.Cc.ZL(a)
+C.Cc.FH(a)
+return a
+"33"},"+new ResponseViewerElement$created:0:0":1}},"+ResponseViewerElement": [27]}],["script_view_element","package:observatory/src/observatory_elements/script_view.dart",,U,{fI:{"":["V0;Uz%-,VJ,Ai,tH-,VJ,Ai,VJ,Ai,ZI,uN,z3,TQ,Vk,Ye,mT,KM-",null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,function(){return[C.nJ]}],
+gNl:function(a){return a.Uz
+"37,38,39"},
+"+script":1,
+sNl:function(a,b){a.Uz=this.pD(a,C.fX,a.Uz,b)
+"40,31,37,38"},
+"+script=":1,
+"@":function(){return[C.Er]},
+static:{Ry:function(a){var z,y,x,w,v
+z=$.Nd()
+y=P.Py(null,null,null,J.O,W.I0)
+x=J.O
+w=W.cv
+v=new V.br(P.Py(null,null,null,x,w),null,null)
+H.VM(v,[x,w])
+a.Ye=z
+a.mT=y
+a.KM=v
+C.cJ.ZL(a)
+C.cJ.FH(a)
+return a
+"34"},"+new ScriptViewElement$created:0:0":1}},"+ScriptViewElement": [113],V0:{"":"uL+Pi;",$isd3:true}}],["source_view_element","package:observatory/src/observatory_elements/source_view.dart",,X,{kK:{"":["V4;vX%-,VJ,Ai,tH-,VJ,Ai,VJ,Ai,ZI,uN,z3,TQ,Vk,Ye,mT,KM-",null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,function(){return[C.nJ]}],
+gFF:function(a){return a.vX
+"114,38,39"},
+"+source":1,
+sFF:function(a,b){a.vX=this.pD(a,C.hn,a.vX,b)
+"40,31,114,38"},
+"+source=":1,
+"@":function(){return[C.H8]},
+static:{HO:function(a){var z,y,x,w,v
+z=$.Nd()
+y=P.Py(null,null,null,J.O,W.I0)
+x=J.O
+w=W.cv
+v=new V.br(P.Py(null,null,null,x,w),null,null)
+H.VM(v,[x,w])
+a.Ye=z
+a.mT=y
+a.KM=v
+C.Ks.ZL(a)
+C.Ks.FH(a)
+return a
+"35"},"+new SourceViewElement$created:0:0":1}},"+SourceViewElement": [115],V4:{"":"uL+Pi;",$isd3:true}}],["stack_trace_element","package:observatory/src/observatory_elements/stack_trace.dart",,X,{uw:{"":["V6;V4%-,VJ,Ai,tH-,VJ,Ai,VJ,Ai,ZI,uN,z3,TQ,Vk,Ye,mT,KM-",null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,function(){return[C.nJ]}],
+gtN:function(a){return a.V4
+"37,38,39"},
+"+trace":1,
+stN:function(a,b){a.V4=this.pD(a,C.kw,a.V4,b)
+"40,31,37,38"},
+"+trace=":1,
+"@":function(){return[C.js]},
+static:{bV:function(a){var z,y,x,w,v,u
+z=H.B7([],P.L5(null,null,null,null,null))
+z=R.Jk(z)
+y=$.Nd()
+x=P.Py(null,null,null,J.O,W.I0)
+w=J.O
+v=W.cv
+u=new V.br(P.Py(null,null,null,w,v),null,null)
+H.VM(u,[w,v])
+a.V4=z
+a.Ye=y
+a.mT=x
+a.KM=u
+C.bg.ZL(a)
+C.bg.FH(a)
+return a
+"36"},"+new StackTraceElement$created:0:0":1}},"+StackTraceElement": [116],V6:{"":"uL+Pi;",$isd3:true}}],["template_binding","package:template_binding/template_binding.dart",,M,{IP:function(a){var z=J.RE(a)
+if(typeof a==="object"&&a!==null&&!!z.$isQl)return C.io.f0(a)
+switch(z.gr9(a)){case"checkbox":return $.FF().aM(a)
+case"radio":case"select-multiple":case"select-one":return z.gEr(a)
+default:return z.gLm(a)}},HP:function(a,b,c,d,e){var z,y,x,w
+if(b==null)return
+z=b.N2
+if(z!=null){M.Ky(a).wh(z)
+if(d!=null)M.Ky(a).sxT(d)}z=b.Cd
+if(z!=null)M.mV(z,a,c,e)
+z=b.wd
+if(z==null)return
+for(y=a.firstChild,x=0;y!=null;y=y.nextSibling,x=w){w=x+1
+if(x>=z.length)throw H.e(z,x)
+M.HP(y,z[x],c,d,e)}},bM:function(a){var z,y
+for(;z=J.RE(a),y=z.gKV(a),y!=null;a=y);if(typeof a==="object"&&a!==null&&!!z.$isYN||typeof a==="object"&&a!==null&&!!z.$isI0||typeof a==="object"&&a!==null&&!!z.$ishy)return a
+return},pN:function(a,b){var z,y
+z=J.x(a)
+if(typeof a==="object"&&a!==null&&!!z.$iscv)return M.F5(a,b)
+if(typeof a==="object"&&a!==null&&!!z.$iskJ){y=M.F4(a.textContent,"text",a,b)
+if(y!=null)return["text",y]}return},F5:function(a,b){var z,y
+z={}
+z.a=null
+z.b=!1
+z.c=!1
+y=new W.E9(a)
+y.aN(y,new M.NW(z,a,b,M.wR(a)))
+if(z.b&&!z.c){if(z.a==null)z.a=[]
+y=z.a
+y.push("bind")
+y.push(M.F4("{{}}","bind",a,b))}return z.a},mV:function(a,b,c,d){var z,y,x,w,v,u,t,s,r,q,p,o,n,m,l,k,j,i
+for(z=d!=null,y=J.x(b),y=typeof b==="object"&&b!==null&&!!y.$ishs,x=0;w=a.length,x<w;x+=2){v=a[x]
+u=x+1
+if(u>=w)throw H.e(a,u)
+t=a[u]
+u=t.gEJ()
+if(1>=u.length)throw H.e(u,1)
+s=u[1]
+if(t.gqz()){w=t.gEJ()
+if(2>=w.length)throw H.e(w,2)
+r=w[2]
+if(r!=null){q=r.call$2(c,b)
+if(q!=null){p=q
+s="value"}else p=c}else p=c
+if(!t.gaW()){p=L.ao(p,s,t.gcK())
+s="value"}}else{o=new Y.J3([],[],null,t.gcK(),!1,!1,null,null)
+for(w=o.b9,n=1;u=t.gEJ(),m=u.length,n<m;n+=3){l=u[n]
+k=n+1
+if(k>=m)throw H.e(u,k)
+r=u[k]
+q=r!=null?r.call$2(c,b):null
+if(q!=null){j=q
+l="value"}else j=c
+if(o.YX)H.vh(new P.lj("Cannot add more paths once started."))
+w.push(L.ao(j,l,null))}o.wE(o)
+p=o
+s="value"}i=J.tb(y?b:M.Ky(b),v,p,s)
+if(z)d.push(i)}},F4:function(a,b,c,d){var z,y,x,w,v,u,t,s,r
+z=J.U6(a)
+if(z.gl0(a)===!0)return
+y=z.gB(a)
+if(typeof y!=="number")throw H.s(y)
+x=d==null
+w=null
+v=0
+for(;v<y;){u=z.XU(a,"{{",v)
+t=u<0?-1:z.XU(a,"}}",u+2)
+if(t<0){if(w==null)return
+w.push(z.yn(a,v))
+break}if(w==null)w=[]
+w.push(z.JT(a,v,u))
+s=C.xB.bS(z.JT(a,u+2,t))
+w.push(s)
+if(x)r=null
+else{d.toString
+r=A.lJ(s,b,c,T.e9.prototype.gca.call(d))}w.push(r)
+v=t+2}if(v===y)w.push("")
+return M.hp(w)},cZ:function(a,b){var z,y,x
+z=a.firstChild
+if(z==null)return
+y=new M.yp(z,a.lastChild,b)
+x=y.KO
+for(;x!=null;){M.Ky(x).sCk(y)
+x=x.nextSibling}},Ky:function(a){var z,y,x
+z=$.cm()
+z.toString
+y=H.of(a,"expando$values")
+x=y==null?null:H.of(y,z.Qz())
+if(x!=null)return x
+z=J.RE(a)
+if(typeof a==="object"&&a!==null&&!!z.$isMi)x=new M.ee(a,null,null)
+else if(typeof a==="object"&&a!==null&&!!z.$islp)x=new M.ug(a,null,null)
+else if(typeof a==="object"&&a!==null&&!!z.$isAE)x=new M.VT(a,null,null)
+else if(typeof a==="object"&&a!==null&&!!z.$iscv){if(z.gjU(a)!=="template")z=z.gQg(a).MW.hasAttribute("template")===!0&&C.uE.x4(z.gjU(a))===!0
+else z=!0
+x=z?new M.DT(null,null,null,!1,null,null,null,null,a,null,null):new M.V2(a,null,null)}else x=typeof a==="object"&&a!==null&&!!z.$iskJ?new M.XT(a,null,null):new M.hs(a,null,null)
+z=$.cm()
+z.u(z,a,x)
+return x},wR:function(a){var z=J.RE(a)
+if(typeof a==="object"&&a!==null&&!!z.$iscv)if(z.gjU(a)!=="template")z=z.gQg(a).MW.hasAttribute("template")===!0&&C.uE.x4(z.gjU(a))===!0
+else z=!0
+else z=!1
+return z},V2:{"":"hs;N1,bn,Ck",
+Z1:function(a,b,c,d){var z,y,x
+J.MV(this.glN(),b)
+z=this.gN1()
+y=J.x(z)
+if(typeof z==="object"&&z!==null&&!!y.$isQl&&J.xC(b,"value")){z=H.Go(this.gN1(),"$isQl")
+z.toString
+z=new W.E9(z)
+z.Rz(z,b)
+z=this.gN1()
+y=d!=null?d:""
+x=new M.jY(null,z,c,null,null,"value",y)
+x.Og(z,"value",c,d)
+x.Ca=M.IP(z).yI(x.gqf())}else x=M.hN(this.gN1(),b,c,d)
+z=this.gCd(this)
+z.u(z,b,x)
+return x}},D8:{"":"TR;Y0,LO,ZY,xS,PB,eS,Ii",
+EC:function(a){var z,y
+if(this.Y0){z=null!=a&&!1!==a
+y=this.eS
+if(z)J.Vs(X.TR.prototype.gH.call(this)).MW.setAttribute(y,"")
+else{z=J.Vs(X.TR.prototype.gH.call(this))
+z.Rz(z,y)}}else{z=J.Vs(X.TR.prototype.gH.call(this))
+y=a==null?"":H.d(a)
+z.MW.setAttribute(this.eS,y)}},
+static:{hN:function(a,b,c,d){var z,y,x
+z=J.rY(b)
+y=z.Tc(b,"?")
+if(y){x=J.Vs(a)
+x.Rz(x,b)
+b=z.JT(b,0,J.xH(z.gB(b),1))}z=d!=null?d:""
+z=new M.D8(y,a,c,null,null,b,z)
+z.Og(a,b,c,d)
+return z}}},jY:{"":"NP;Ca,LO,ZY,xS,PB,eS,Ii",
+gH:function(){return M.NP.prototype.gH.call(this)},
+EC:function(a){var z,y,x,w,v,u
+z=J.Lp(M.NP.prototype.gH.call(this))
+y=J.RE(z)
+if(typeof z==="object"&&z!==null&&!!y.$islp){x=J.UQ(J.QE(M.Ky(z)),"value")
+w=J.x(x)
+if(typeof x==="object"&&x!==null&&!!w.$isSA){v=z.value
+u=x}else{v=null
+u=null}}else{v=null
+u=null}M.NP.prototype.EC.call(this,a)
+if(u!=null&&u.gLO()!=null&&!J.xC(y.gP(z),v))u.FC(null)}},ll:{"":"TR;",
+cO:function(a){if(this.LO==null)return
+this.Ca.ed()
+X.TR.prototype.cO.call(this,this)}},Uf:{"":"Tp;",
+call$0:function(){var z,y,x,w,v
+z=document.createElement("div",null).appendChild(W.ED(null))
+y=J.RE(z)
+y.sr9(z,"checkbox")
+x=[]
+w=y.gVl(z)
+v=new W.Ov(0,w.uv,w.Ph,W.aF(new M.ik(x)),w.Sg)
+H.VM(v,[H.W8(w,"RO",0)])
+v.Zz()
+y=y.gEr(z)
+v=new W.Ov(0,y.uv,y.Ph,W.aF(new M.LfS(x)),y.Sg)
+H.VM(v,[H.W8(y,"RO",0)])
+v.Zz()
+z.dispatchEvent(W.H6("click",!1,0,!0,!0,0,0,!1,0,!1,null,0,0,!1,window))
+return x.length===1?C.mt:C.Nm.gFV(x)},
+"+call:0:0":0,
+$isEH:true,
+$is_X0:true},ik:{"":"Tp;a",
+call$1:function(a){this.a.push(C.T1)},
+"+call:1:0":0,
+$isEH:true,
+$is_HB:true,
+$is_Dv:true},LfS:{"":"Tp;b",
+call$1:function(a){this.b.push(C.mt)},
+"+call:1:0":0,
+$isEH:true,
+$is_HB:true,
+$is_Dv:true},NP:{"":"ll;Ca,LO,ZY,xS,PB,eS,Ii",
+gH:function(){return X.TR.prototype.gH.call(this)},
+EC:function(a){var z=this.gH()
+J.ta(z,a==null?"":H.d(a))},
+FC:function(a){var z=J.Vm(this.gH())
+J.ta(this.xS,z)
+O.Y3()},
+gqf:function(){return new H.Pm(this,M.NP.prototype.FC,null,"FC")}},Vh:{"":"ll;Ca,LO,ZY,xS,PB,eS,Ii",
+EC:function(a){var z=X.TR.prototype.gH.call(this)
+J.rP(z,null!=a&&!1!==a)},
+FC:function(a){var z,y,x,w
+z=J.Hf(X.TR.prototype.gH.call(this))
+J.ta(this.xS,z)
+z=X.TR.prototype.gH.call(this)
+y=J.x(z)
+if(typeof z==="object"&&z!==null&&!!y.$isMi&&J.xC(J.Ja(X.TR.prototype.gH.call(this)),"radio"))for(z=J.GP(M.kv(X.TR.prototype.gH.call(this)));z.G();){x=z.gl()
+y=J.x(x)
+w=J.UQ(J.QE(typeof x==="object"&&x!==null&&!!y.$ishs?x:M.Ky(x)),"checked")
+if(w!=null)J.ta(w,!1)}O.Y3()},
+gqf:function(){return new H.Pm(this,M.Vh.prototype.FC,null,"FC")},
+static:{kv:function(a){var z,y,x,w
+z=J.RE(a)
+y=z.gMB(a)
+if(y!=null){y.toString
+z=new W.e7(y)
+return z.ev(z,new M.r0(a))}else{x=M.bM(a)
+if(x==null)return C.xD
+w=J.MK(x,"input[type=\"radio\"][name=\""+H.d(z.goc(a))+"\"]")
+return w.ev(w,new M.jz(a))}}}},r0:{"":"Tp;a",
+call$1:function(a){var z,y
+z=this.a
+y=J.x(a)
+if(!y.n(a,z))if(typeof a==="object"&&a!==null&&!!y.$isMi)if(a.type==="radio"){y=a.name
+z=J.DA(z)
+z=y==null?z==null:y===z}else z=!1
+else z=!1
+else z=!1
+return z},
+"+call:1:0":0,
+$isEH:true,
+$is_HB:true,
+$is_Dv:true},jz:{"":"Tp;b",
+call$1:function(a){var z=J.x(a)
+return!z.n(a,this.b)&&z.gMB(a)==null},
+"+call:1:0":0,
+$isEH:true,
+$is_HB:true,
+$is_Dv:true},SA:{"":"ll;Ca,LO,ZY,xS,PB,eS,Ii",
+EC:function(a){var z={}
+if(this.Gh(a)===!0)return
+z.a=4
+P.rb(new M.zV(z,this,a))},
+Gh:function(a){var z,y,x
+z=this.eS
+y=J.x(z)
+if(y.n(z,"selectedIndex")){x=M.oj(a)
+J.Mu(X.TR.prototype.gH.call(this),x)
+z=J.m4(X.TR.prototype.gH.call(this))
+return z==null?x==null:z===x}else if(y.n(z,"value")){z=X.TR.prototype.gH.call(this)
+J.ta(z,a==null?"":H.d(a))
+return J.xC(J.Vm(X.TR.prototype.gH.call(this)),a)}},
+FC:function(a){var z,y
+z=this.eS
+y=J.x(z)
+if(y.n(z,"selectedIndex")){z=J.m4(X.TR.prototype.gH.call(this))
+J.ta(this.xS,z)}else if(y.n(z,"value")){z=J.Vm(X.TR.prototype.gH.call(this))
+J.ta(this.xS,z)}},
+gqf:function(){return new H.Pm(this,M.SA.prototype.FC,null,"FC")},
+$isSA:true,
+static:{oj:function(a){if(typeof a==="string")return H.BU(a,null,new M.nv())
+return typeof a==="number"&&Math.floor(a)===a?a:0}}},zV:{"":"Tp;a,b,c",
+call$0:function(){var z,y
+if(this.b.Gh(this.c)!==!0){z=this.a
+y=z.a
+z.a=y-1
+y=y>0
+z=y}else z=!1
+if(z)P.rb(this)},
+"+call:0:0":0,
+$isEH:true,
+$is_X0:true},nv:{"":"Tp;",
+call$1:function(a){return 0},
+"+call:1:0":0,
+$isEH:true,
+$is_HB:true,
+$is_Dv:true},ee:{"":"V2;N1,bn,Ck",
+gN1:function(){return this.N1},
+Z1:function(a,b,c,d){var z,y,x,w
+z=J.x(b)
+if(!z.n(b,"value")&&!z.n(b,"checked"))return M.V2.prototype.Z1.call(this,this,b,c,d)
+y=this.gN1()
+x=J.x(y)
+J.MV(typeof y==="object"&&y!==null&&!!x.$ishs?this.gN1():this,b)
+w=J.Vs(this.N1)
+w.Rz(w,b)
+w=this.gCd(this)
+if(z.n(b,"value")){z=this.N1
+y=d!=null?d:""
+y=new M.NP(null,z,c,null,null,"value",y)
+y.Og(z,"value",c,d)
+y.Ca=M.IP(z).yI(y.gqf())
+z=y}else{z=this.N1
+y=d!=null?d:""
+y=new M.Vh(null,z,c,null,null,"checked",y)
+y.Og(z,"checked",c,d)
+y.Ca=M.IP(z).yI(y.gqf())
+z=y}w.u(w,b,z)
+return z}},XI:{"":"a;Cd>,wd,N2,oA",static:{lX:function(a,b){var z,y,x,w,v,u,t,s,r
+z=M.pN(a,b)
+y=J.x(a)
+if(typeof a==="object"&&a!==null&&!!y.$iscv)if(y.gjU(a)!=="template")x=y.gQg(a).MW.hasAttribute("template")===!0&&C.uE.x4(y.gjU(a))===!0
+else x=!0
+else x=!1
+if(x){w=a
+v=!0}else{v=!1
+w=null}for(u=y.gq6(a),t=null,s=0;u!=null;u=u.nextSibling,++s){r=M.lX(u,b)
+if(t==null)t=P.A(y.gyT(a).NL.childNodes.length,null)
+if(s>=t.length)throw H.e(t,s)
+t[s]=r
+if(r.oA)v=!0}return new M.XI(z,t,w,v)}}},hs:{"":"a;N1<,bn,Ck?",
+Z1:function(a,b,c,d){var z,y
+window
+z=$.UT()
+y="Unhandled binding to Node: "+H.d(this)+" "+H.d(b)+" "+H.d(c)+" "+H.d(d)
+z.toString
+if(typeof console!="undefined")console.error(y)},
+Ih:function(a,b){var z,y
+if(this.bn==null)return
+z=this.gCd(this)
+y=z.Rz(z,b)
+if(y!=null)J.wC(y)},
+GB:function(a){var z,y,x
+if(this.bn==null)return
+for(z=this.gCd(this),z=z.gUQ(z),z=P.F(z,!0,H.W8(z,"mW",0)),y=new H.a7(z,z.length,0,null),H.VM(y,[H.W8(z,"Q",0)]);y.G();){x=y.mD
+if(x!=null)J.wC(x)}this.bn=null},
+gCd:function(a){if(this.bn==null)this.bn=P.L5(null,null,null,J.O,X.TR)
+return this.bn},
+glN:function(){var z,y
+z=this.gN1()
+y=J.x(z)
+return typeof z==="object"&&z!==null&&!!y.$ishs?this.gN1():this},
+$ishs:true},yp:{"":"a;KO,lC,k8"},ug:{"":"V2;N1,bn,Ck",
+gN1:function(){return this.N1},
+Z1:function(a,b,c,d){var z,y,x,w
+if(J.xC(b,"selectedindex"))b="selectedIndex"
+z=J.x(b)
+if(!z.n(b,"selectedIndex")&&!z.n(b,"value"))return M.V2.prototype.Z1.call(this,this,b,c,d)
+z=this.gN1()
+y=J.x(z)
+J.MV(typeof z==="object"&&z!==null&&!!y.$ishs?this.gN1():this,b)
+x=J.Vs(this.N1)
+x.Rz(x,b)
+x=this.gCd(this)
+w=this.N1
+z=d!=null?d:""
+z=new M.SA(null,w,c,null,null,b,z)
+z.Og(w,b,c,d)
+z.Ca=M.IP(w).yI(z.gqf())
+x.u(x,b,z)
+return z}},DT:{"":"V2;lr,xT?,kr<,Ds,QO?,jH?,mj?,zx@,N1,bn,Ck",
+gN1:function(){return this.N1},
+glN:function(){var z,y
+z=this.N1
+y=J.x(z)
+return typeof z==="object"&&z!==null&&!!y.$isDT?this.N1:this},
+Z1:function(a,b,c,d){var z,y
+d=d!=null?d:""
+if(this.kr==null)this.kr=new M.TG(this,[],null,!1,!1,!1,!1,!1,null,null,null,null,null,null,null,null,!1,null,null)
+switch(b){case"bind":z=this.kr
+z.TU=!0
+z.d6=c
+z.XV=d
+this.jq()
+z=this.gCd(this)
+y=new M.N9(this,c,b,d)
+z.u(z,b,y)
+return y
+case"repeat":z=this.kr
+z.A7=!0
+z.JM=c
+z.yO=d
+this.jq()
+z=this.gCd(this)
+y=new M.N9(this,c,b,d)
+z.u(z,b,y)
+return y
+case"if":z=this.kr
+z.Q3=!0
+z.rV=c
+z.eD=d
+this.jq()
+z=this.gCd(this)
+y=new M.N9(this,c,b,d)
+z.u(z,b,y)
+return y
+default:return M.V2.prototype.Z1.call(this,this,b,c,d)}},
+Ih:function(a,b){var z
+switch(b){case"bind":z=this.kr
+if(z==null)return
+z.TU=!1
+z.d6=null
+z.XV=null
+this.jq()
+z=this.gCd(this)
+z.Rz(z,b)
+return
+case"repeat":z=this.kr
+if(z==null)return
+z.A7=!1
+z.JM=null
+z.yO=null
+this.jq()
+z=this.gCd(this)
+z.Rz(z,b)
+return
+case"if":z=this.kr
+if(z==null)return
+z.Q3=!1
+z.rV=null
+z.eD=null
+this.jq()
+z=this.gCd(this)
+z.Rz(z,b)
+return
+default:M.hs.prototype.Ih.call(this,this,b)
+return}},
+jq:function(){var z=this.kr
+if(!z.t9){z.t9=!0
+P.rb(this.kr.gjM())}},
+a5:function(a,b,c){var z,y,x,w,v
+z=this.gnv()
+y=J.x(z)
+z=typeof z==="object"&&z!==null&&!!y.$ishs?z:M.Ky(z)
+x=J.nX(z)
+w=z.gzx()
+if(w==null){w=M.lX(x,b)
+z.szx(w)}v=w.oA?M.Fz(x):J.zZ(x,!0)
+M.HP(v,w,a,b,c)
+M.cZ(v,a)
+return v},
+ZK:function(a,b){return this.a5(a,b,null)},
+gzH:function(){return this.xT},
+gnv:function(){var z,y,x,w,v
+this.Sy()
+z=J.Vs(this.N1).MW.getAttribute("ref")
+if(z!=null){y=M.bM(this.N1)
+x=y!=null?J.K3(y,z):null}else x=null
+if(x==null){x=this.QO
+if(x==null)return this.N1}w=J.x(x)
+v=(typeof x==="object"&&x!==null&&!!w.$ishs?x:M.Ky(x)).gnv()
+return v!=null?v:x},
+gjb:function(a){var z
+this.Sy()
+z=this.jH
+return z!=null?z:H.Go(this.N1,"$isyY").content},
+wh:function(a){var z,y,x,w,v,u
+if(this.mj===!0)return!1
+M.oR()
+this.mj=!0
+z=this.N1
+y=J.x(z)
+x=typeof z==="object"&&z!==null&&!!y.$isyY
+w=!x
+if(w){z=this.N1
+y=J.RE(z)
+z=y.gQg(z).MW.hasAttribute("template")===!0&&C.uE.x4(y.gjU(z))===!0}else z=!1
+if(z){if(a!=null)throw H.b(new P.AT("instanceRef should not be supplied for attribute templates."))
+v=M.eX(this.N1)
+z=J.x(v)
+v=typeof v==="object"&&v!==null&&!!z.$ishs?v:M.Ky(v)
+v.smj(!0)
+z=v.gN1()
+y=J.x(z)
+x=typeof z==="object"&&z!==null&&!!y.$isyY
+u=!0}else{v=this
+u=!1}if(!x)v.sjH(J.bs(M.nk(J.VN(v.gN1()))))
+if(a!=null)v.sQO(a)
+else if(w)M.KE(v,this.N1,u)
+else M.GM(J.nX(v))
+return!0},
+Sy:function(){return this.wh(null)},
+$isDT:true,
+static:{"":"mn,Sf,To",Fz:function(a){var z,y,x,w
+z=J.RE(a)
+y=z.Yv(a,!1)
+x=J.RE(y)
+if(typeof y==="object"&&y!==null&&!!x.$iscv)if(x.gjU(y)!=="template")x=x.gQg(y).MW.hasAttribute("template")===!0&&C.uE.x4(x.gjU(y))===!0
+else x=!0
+else x=!1
+if(x)return y
+for(w=z.gq6(a);w!=null;w=w.nextSibling)y.appendChild(M.Fz(w))
+return y},nk:function(a){var z,y,x
+if(W.uV(a.defaultView)==null)return a
+z=$.LQ()
+y=z.t(z,a)
+if(y==null){y=a.implementation.createHTMLDocument("")
+for(;z=y.lastChild,z!=null;){x=z.parentNode
+if(x!=null)x.removeChild(z)}z=$.LQ()
+z.u(z,a,y)}return y},eX:function(a){var z,y,x,w,v,u
+z=J.RE(a)
+y=z.gM0(a).createElement("template",null)
+z.gKV(a).insertBefore(y,a)
+for(x=z.gQg(a),x=x.gvc(x),x=P.F(x,!0,H.W8(x,"Q",0)),w=new H.a7(x,x.length,0,null),H.VM(w,[H.W8(x,"Q",0)]);w.G();){v=w.mD
+switch(v){case"template":x=z.gQg(a).MW
+x.getAttribute(v)
+x.removeAttribute(v)
+break
+case"repeat":case"bind":case"ref":y.toString
+x=z.gQg(a).MW
+u=x.getAttribute(v)
+x.removeAttribute(v)
+new W.E9(y).MW.setAttribute(v,u)
+break
+default:}}return y},KE:function(a,b,c){var z,y,x,w
+z=J.nX(a)
+if(c){J.BM(z,b)
+return}for(y=J.RE(b),x=J.RE(z);w=y.gq6(b),w!=null;)x.jx(z,w)},GM:function(a){var z,y
+z=new M.OB()
+y=J.MK(a,$.cz())
+if(M.wR(a))z.call$1(a)
+y.aN(y,z)},oR:function(){if($.To===!0)return
+$.To=!0
+var z=document.createElement("style",null)
+z.textContent=$.cz()+" { display: none; }"
+document.head.appendChild(z)}}},OB:{"":"Tp;",
+call$1:function(a){var z
+if(!M.Ky(a).wh(null)){z=J.x(a)
+M.GM(J.nX(typeof a==="object"&&a!==null&&!!z.$ishs?a:M.Ky(a)))}},
+"+call:1:0":0,
+$isEH:true,
+$is_HB:true,
+$is_Dv:true},Ra:{"":"Tp;",
+call$1:function(a){return H.d(a)+"[template]"},
+"+call:1:0":0,
+$isEH:true,
+$is_HB:true,
+$is_Dv:true},N9:{"":"a;ud,lr,eS,Ii>",
+gP:function(a){return J.Vm(this.gND())},
+"+value":0,
+r6:function(a,b){return this.gP(a).call$1(b)},
+sP:function(a,b){J.ta(this.gND(),b)},
+"+value=":0,
+gND:function(){var z,y
+z=this.lr
+y=J.x(z)
+if((typeof z==="object"&&z!==null&&!!y.$isD7||typeof z==="object"&&z!==null&&!!y.$isJ3)&&J.xC(this.Ii,"value"))return this.lr
+return L.ao(this.lr,this.Ii,null)},
+cO:function(a){var z=this.ud
+if(z==null)return
+z.Ih(z,this.eS)
+this.lr=null
+this.ud=null},
+$isTR:true},NW:{"":"Tp;a,b,c,d",
+call$2:function(a,b){var z,y
+for(;z=J.U6(a),J.xC(z.t(a,0),"_");)a=z.yn(a,1)
+if(this.d)if(z.n(a,"if")){this.a.b=!0
+if(J.xC(b,""))b="{{}}"}else if(z.n(a,"bind")||z.n(a,"repeat")){this.a.c=!0
+if(J.xC(b,""))b="{{}}"}y=M.F4(b,a,this.b,this.c)
+if(y!=null){z=this.a
+if(z.a==null)z.a=[]
+z=z.a
+z.push(a)
+z.push(y)}},
+"+call:2:0":0,
+$isEH:true,
+$is_bh:true},HS:{"":"a;EJ<,bX",
+gqz:function(){return this.EJ.length===4},
+gaW:function(){var z,y
+z=this.EJ
+y=z.length
+if(y===4){if(0>=y)throw H.e(z,0)
+if(J.xC(z[0],"")){if(3>=z.length)throw H.e(z,3)
+z=J.xC(z[3],"")}else z=!1}else z=!1
+return z},
+gcK:function(){return this.bX},
+JI:function(a){var z,y
+if(a==null)a=""
+z=this.EJ
+if(0>=z.length)throw H.e(z,0)
+y=H.d(z[0])+H.d(a)
+if(3>=z.length)throw H.e(z,3)
+return y+H.d(z[3])},
+gBg:function(){return new H.Pm(this,M.HS.prototype.JI,null,"JI")},
+DJ:function(a){var z,y,x,w,v,u,t
+z=this.EJ
+if(0>=z.length)throw H.e(z,0)
+y=P.p9(z[0])
+for(x=J.U6(a),w=1;w<z.length;w+=3){v=x.t(a,C.jn.Z(w-1,3))
+if(v!=null){u=typeof v==="string"?v:H.d(v)
+y.vM=y.vM+u}t=w+2
+if(t>=z.length)throw H.e(z,t)
+u=z[t]
+u=typeof u==="string"?u:H.d(u)
+y.vM=y.vM+u}return y.vM},
+gqD:function(){return new H.Pm(this,M.HS.prototype.DJ,null,"DJ")},
+Yn:function(a){this.bX=this.EJ.length===4?this.gBg():this.gqD()},
+static:{hp:function(a){var z=new M.HS(a,null)
+z.Yn(a)
+return z}}},TG:{"":"a;e9,YC,xG,pq,t9,A7,TU,Q3,JM,d6,rV,yO,XV,eD,FS,IY,U9,DO,Fy",
+Mv:function(a){return this.DO.call$1(a)},
+WS:function(){var z,y,x,w,v,u
+this.t9=!1
+z=this.FS
+if(z!=null){z.ed()
+this.FS=null}z=this.A7
+if(!z&&!this.TU){this.Az(null)
+return}y=z?this.JM:this.d6
+x=z?this.yO:this.XV
+if(!this.Q3)w=L.ao(y,x,z?null:new M.ts())
+else{w=new Y.J3([],[],null,new M.Kj(z),!1,!1,null,null)
+if(w.YX)H.vh(new P.lj("Cannot add more paths once started."))
+z=w.b9
+z.push(L.ao(y,x,null))
+v=this.rV
+u=this.eD
+if(w.YX)H.vh(new P.lj("Cannot add more paths once started."))
+z.push(L.ao(v,u,null))
+w.wE(w)}this.FS=w.gqh(w).yI(new M.VU(this))
+this.Az(w.gP(w))},
+gjM:function(){return new P.Ip(this,M.TG.prototype.WS,null,"WS")},
+Az:function(a){var z,y,x,w
+z=this.xG
+this.Gb()
+y=J.w1(a)
+if(typeof a==="object"&&a!==null&&(a.constructor===Array||!!y.$isList))this.xG=a
+else if(typeof a==="object"&&a!==null&&(a.constructor===Array||!!y.$iscX))this.xG=y.br(a)
+else this.xG=null
+if(this.xG!=null&&typeof a==="object"&&a!==null&&!!y.$iswn)this.IY=a.gRT().yI(this.gZX())
+y=z!=null?z:[]
+x=this.xG
+x=x!=null?x:[]
+w=G.jj(x,0,J.q8(x),y,0,J.q8(y))
+if(w.length!==0)this.El(w)},
+wx:function(a){var z,y,x,w
+z=J.x(a)
+if(z.n(a,-1))return this.e9.N1
+y=this.YC
+z=z.U(a,2)
+if(z>>>0!==z||z>=y.length)throw H.e(y,z)
+x=y[z]
+if(M.wR(x)){z=this.e9.N1
+z=x==null?z==null:x===z}else z=!0
+if(z)return x
+w=M.Ky(x).gkr()
+if(w==null)return x
+return w.wx(C.jn.Z(w.YC.length,2)-1)},
+lP:function(a,b,c,d){var z,y,x,w,v,u
+z=J.Wx(a)
+y=this.wx(z.W(a,1))
+x=b!=null
+if(x)w=b.lastChild
+else w=c!=null&&J.pO(c)?J.MQ(c):null
+if(w==null)w=y
+z=z.U(a,2)
+H.IC(this.YC,z,[w,d])
+v=J.TZ(this.e9.N1)
+u=J.tx(y)
+if(x)v.insertBefore(b,u)
+else if(c!=null)for(z=J.GP(c);z.G();)v.insertBefore(z.gl(),u)},
+MC:function(a){var z,y,x,w,v,u,t,s
+z=[]
+z.$builtinTypeInfo=[W.KV]
+y=J.Wx(a)
+x=this.wx(y.W(a,1))
+w=this.wx(a)
+v=this.YC
+u=J.WB(y.U(a,2),1)
+if(u>>>0!==u||u>=v.length)throw H.e(v,u)
+t=v[u]
+C.Nm.UZ(v,y.U(a,2),J.WB(y.U(a,2),2))
+J.TZ(this.e9.N1)
+for(y=J.RE(x);!J.xC(w,x);){s=y.guD(x)
+if(s==null?w==null:s===w)w=x
+v=s.parentNode
+if(v!=null)v.removeChild(s)
+z.push(s)}return new M.Ya(z,t)},
+El:function(a){var z,y,x,w,v,u,t,s,r,q,p,o,n,m,l,k
+if(this.pq)return
+z=this.e9
+y=z.N1
+x=z.N1
+w=J.x(x)
+v=(typeof x==="object"&&x!==null&&!!w.$isDT?z.N1:z).gzH()
+x=J.RE(y)
+if(x.gKV(y)==null||W.uV(x.gM0(y).defaultView)==null){this.cO(this)
+return}if(!this.U9){this.U9=!0
+if(v!=null){this.DO=v.A5(y)
+this.Fy=null}}u=P.Py(P.N3,null,null,P.a,M.Ya)
+for(x=J.w1(a),w=x.gA(a),t=0;w.G();){s=w.gl()
+for(r=s.gRt(),r=r.gA(r),q=J.RE(s);r.G();)u.u(u,r.mD,this.MC(J.WB(q.gvH(s),t)))
+r=s.gNg()
+if(typeof r!=="number")throw H.s(r)
+t-=r}for(x=x.gA(a);x.G();){s=x.gl()
+for(w=J.RE(s),p=w.gvH(s);r=J.Wx(p),r.C(p,J.WB(w.gvH(s),s.gNg()));p=r.g(p,1)){o=J.UQ(this.xG,p)
+n=u.Rz(u,o)
+if(n!=null&&J.pO(J.Y5(n))){q=J.RE(n)
+m=q.gkU(n)
+l=q.gyT(n)
+k=null}else{m=[]
+if(this.DO!=null)o=this.Mv(o)
+k=o!=null?z.a5(o,v,m):null
+l=null}this.lP(p,k,l,m)}}for(z=u.gUQ(u),x=z.Kw,x=x.gA(x),x=new H.MH(null,x,z.ew),H.VM(x,[H.W8(z,"i1",0),H.W8(z,"i1",1)]);x.G();)this.uS(J.AB(x.mD))},
+gZX:function(){return new H.Pm(this,M.TG.prototype.El,null,"El")},
+uS:function(a){var z
+for(z=J.GP(a);z.G();)J.wC(z.gl())},
+Gb:function(){var z=this.IY
+if(z==null)return
+z.ed()
+this.IY=null},
+cO:function(a){var z,y
+if(this.pq)return
+this.Gb()
+for(z=this.YC,y=1;y<z.length;y+=2)this.uS(z[y])
+C.Nm.sB(z,0)
+z=this.FS
+if(z!=null){z.ed()
+this.FS=null}this.e9.kr=null
+this.pq=!0}},ts:{"":"Tp;",
+call$1:function(a){return[a]},
+"+call:1:0":0,
+$isEH:true,
+$is_HB:true,
+$is_Dv:true},Kj:{"":"Tp;a",
+call$1:function(a){var z,y,x
+z=J.U6(a)
+y=z.t(a,0)
+x=z.t(a,1)
+if(!(null!=x&&!1!==x))return
+return this.a?y:[y]},
+"+call:1:0":0,
+$isEH:true,
+$is_HB:true,
+$is_Dv:true},VU:{"":"Tp;b",
+call$1:function(a){return this.b.Az(J.iZ(J.MQ(a)))},
+"+call:1:0":0,
+$isEH:true,
+$is_HB:true,
+$is_Dv:true},Ya:{"":"a;yT>,kU>",$isYa:true},XT:{"":"hs;N1,bn,Ck",
+Z1:function(a,b,c,d){var z,y,x
+if(!J.xC(b,"text"))return M.hs.prototype.Z1.call(this,this,b,c,d)
+this.Ih(this,b)
+z=this.gCd(this)
+y=this.N1
+x=d!=null?d:""
+x=new M.ic(y,c,null,null,"text",x)
+x.Og(y,"text",c,d)
+z.u(z,b,x)
+return x}},ic:{"":"TR;LO,ZY,xS,PB,eS,Ii",
+EC:function(a){var z=this.LO
+J.c9(z,a==null?"":H.d(a))}},VT:{"":"V2;N1,bn,Ck",
+gN1:function(){return this.N1},
+Z1:function(a,b,c,d){var z,y,x,w
+if(!J.xC(b,"value"))return M.V2.prototype.Z1.call(this,this,b,c,d)
+z=this.gN1()
+y=J.x(z)
+J.MV(typeof z==="object"&&z!==null&&!!y.$ishs?this.gN1():this,b)
+x=J.Vs(this.N1)
+x.Rz(x,b)
+x=this.gCd(this)
+w=this.N1
+z=d!=null?d:""
+z=new M.NP(null,w,c,null,null,"value",z)
+z.Og(w,"value",c,d)
+z.Ca=M.IP(w).yI(z.gqf())
+x.u(x,b,z)
+return z}}}],["template_binding.src.binding_delegate","package:template_binding/src/binding_delegate.dart",,O,{T4:{"":"a;"}}],["template_binding.src.node_binding","package:template_binding/src/node_binding.dart",,X,{TR:{"":"a;LO<,Ii>",
+gH:function(){return this.LO},
+gP:function(a){return J.Vm(this.xS)},
+"+value":0,
+r6:function(a,b){return this.gP(a).call$1(b)},
+sP:function(a,b){J.ta(this.xS,b)},
+"+value=":0,
+cO:function(a){var z
+if(this.LO==null)return
+z=this.PB
+if(z!=null)z.ed()
+this.PB=null
+this.xS=null
+this.LO=null
+this.ZY=null},
+Og:function(a,b,c,d){var z,y
+z=this.ZY
+y=J.x(z)
+z=(typeof z==="object"&&z!==null&&!!y.$isD7||typeof z==="object"&&z!==null&&!!y.$isJ3)&&J.xC(d,"value")
+y=this.ZY
+if(z)this.xS=y
+else this.xS=L.ao(y,this.Ii,null)
+this.PB=J.Ib(this.xS).yI(new X.VD(this))
+this.EC(J.Vm(this.xS))},
+$isTR:true},VD:{"":"Tp;a",
+call$1:function(a){var z=this.a
+return z.EC(J.Vm(z.xS))},
+"+call:1:0":0,
+$isEH:true,
+$is_HB:true,
+$is_Dv:true}}],["unmodifiable_collection","package:unmodifiable_collection/unmodifiable_collection.dart",,F,{Oh:{"":"a;Mw",
+gB:function(a){return this.Mw.X5},
+"+length":0,
+gl0:function(a){return this.Mw.X5===0},
+"+isEmpty":0,
+gor:function(a){return this.Mw.X5!==0},
+"+isNotEmpty":0,
+t:function(a,b){var z=this.Mw
+return z.t(z,b)},
+"+[]:1:0":0,
+x4:function(a){return this.Mw.x4(a)},
+"+containsKey:1:0":0,
+PF:function(a){return this.Mw.PF(a)},
+"+containsValue:1:0":0,
+aN:function(a,b){var z=this.Mw
+return z.aN(z,b)},
+gvc:function(a){var z,y
+z=this.Mw
+y=new P.Cm(z)
+H.VM(y,[H.W8(z,"YB",0)])
+return y},
+"+keys":0,
+gUQ:function(a){var z=this.Mw
+return z.gUQ(z)},
+"+values":0,
+u:function(a,b,c){return F.TM()},
+"+[]=:2:0":0,
+Rz:function(a,b){F.TM()},
+$isL8:true,
+static:{TM:function(){throw H.b(P.f("Cannot modify an unmodifiable Map"))}}}}],])
+I.$finishClasses($$,$,null)
+$$=null
+init.globalFunctions.NB=H.NB=new H.zy(H.Mg,"NB")
+init.globalFunctions.Rm=H.Rm=new H.Nb(H.vx,"Rm")
+init.globalFunctions.Eu=H.Eu=new H.Fy(H.Ju,"Eu")
+init.globalFunctions.eH=H.eH=new H.eU(H.ft,"eH")
+init.globalFunctions.Qv=H.Qv=new H.zy(H.pe,"Qv")
+init.globalFunctions.qg=E.qg=new H.Fy(E.E2,"qg")
+init.globalFunctions.Yf=H.Yf=new H.Nb(H.vn,"Yf")
+init.globalFunctions.qZ=P.qZ=new H.Fy(P.BG,"qZ")
+init.globalFunctions.Xw=P.Xw=new H.Nb(P.YE,"Xw")
+init.globalFunctions.AY=P.AY=new P.ADW(P.SZ,"AY")
+init.globalFunctions.No=P.No=new H.Fy(P.ax,"No")
+init.globalFunctions.xP=P.xP=new P.Ri(P.L2,"xP")
+init.globalFunctions.AI=P.AI=new P.kq(P.T8,"AI")
+init.globalFunctions.MM=P.MM=new P.Ri(P.V7,"MM")
+init.globalFunctions.C9=P.C9=new P.Ag(P.Qx,"C9")
+init.globalFunctions.Qk=P.Qk=new P.kq(P.Ee,"Qk")
+init.globalFunctions.zi=P.zi=new P.kq(P.cQ,"zi")
+init.globalFunctions.v3=P.v3=new P.kq(P.dL,"v3")
+init.globalFunctions.G2=P.G2=new P.kq(P.Tk,"G2")
+init.globalFunctions.KF=P.KF=new P.Ri(P.h8,"KF")
+init.globalFunctions.ZB=P.ZB=new P.kq(P.Jj,"ZB")
+init.globalFunctions.jt=P.jt=new H.Nb(P.CI,"jt")
+init.globalFunctions.LS=P.LS=new P.Ri(P.qc,"LS")
+init.globalFunctions.iv=P.iv=new H.zy(P.Ou,"iv")
+init.globalFunctions.py=P.py=new H.Nb(P.T9,"py")
+init.globalFunctions.BC=P.BC=new H.Nb(P.tp,"BC")
+init.globalFunctions.n4=P.n4=new H.zy(P.Wc,"n4")
+init.globalFunctions.N3=P.N3=new H.zy(P.ad,"N3")
+init.globalFunctions.J2=P.J2=new H.Nb(P.xv,"J2")
+init.globalFunctions.ya=P.ya=new P.PW(P.QA,"ya")
+init.globalFunctions.f0=W.f0=new H.Nb(W.UE,"f0")
+init.globalFunctions.V5=W.V5=new H.Nb(W.GO,"V5")
+init.globalFunctions.cn=W.cn=new H.Nb(W.Yb,"cn")
+init.globalFunctions.A6=W.A6=new P.kq(W.Qp,"A6")
+init.globalFunctions.uu=P.uu=new P.kq(P.R4,"uu")
+init.globalFunctions.En=P.En=new H.Nb(P.wY,"En")
+init.globalFunctions.Xl=P.Xl=new H.Nb(P.dU,"Xl")
+init.globalFunctions.np=R.np=new H.Nb(R.Jk,"np")
+init.globalFunctions.PB=A.PB=new H.Fy(A.ei,"PB")
+init.globalFunctions.qP=T.qP=new H.Nb(T.ul,"qP")
+init.globalFunctions.Fx=T.Fx=new H.Nb(T.PX,"Fx")
+init.globalFunctions.ZO=K.ZO=new H.Nb(K.Dc,"ZO")
+J.O.$isString=true
+J.O.$isfR=true
+J.O.$asfR=[J.O]
+J.O.$isa=true
+J.im.$isint=true
+J.im.$isfR=true
+J.im.$asfR=[J.P]
+J.im.$isfR=true
+J.im.$asfR=[J.P]
+J.im.$isfR=true
+J.im.$asfR=[J.P]
+J.im.$isa=true
+W.KV.$isKV=true
+W.KV.$isD0=true
+W.KV.$isa=true
+J.Pp.$isdouble=true
+J.Pp.$isfR=true
+J.Pp.$asfR=[J.P]
+J.Pp.$isfR=true
+J.Pp.$asfR=[J.P]
+J.Pp.$isa=true
+W.M5.$isa=true
+J.P.$isfR=true
+J.P.$asfR=[J.P]
+J.P.$isa=true
+P.a6.$isa6=true
+P.a6.$isfR=true
+P.a6.$asfR=[P.a6]
+P.a6.$isa=true
+P.Od.$isa=true
+J.Q.$isList=true
+J.Q.$iscX=true
+J.Q.$isa=true
+P.a.$isa=true
+N.Ng.$isfR=true
+N.Ng.$asfR=[N.Ng]
+N.Ng.$isa=true
+P.a1.$isa=true
+U.EZ.$ishw=true
+U.EZ.$isa=true
+U.RW.$ishw=true
+U.RW.$isa=true
+U.uk.$ishw=true
+U.uk.$isa=true
+U.K9.$ishw=true
+U.K9.$isa=true
+U.no.$ishw=true
+U.no.$isa=true
+U.jK.$ishw=true
+U.jK.$isa=true
+U.w6.$isw6=true
+U.w6.$ishw=true
+U.w6.$isa=true
+U.ae.$ishw=true
+U.ae.$isa=true
+U.kB.$ishw=true
+U.kB.$isa=true
+K.Ae.$isAe=true
+K.Ae.$isa=true
+J.kn.$isbool=true
+J.kn.$isa=true
+P.wv.$iswv=true
+P.wv.$isa=true
+W.Lq.$isea=true
+W.Lq.$isa=true
+A.XP.$isXP=true
+A.XP.$iscv=true
+A.XP.$isKV=true
+A.XP.$isD0=true
+A.XP.$isa=true
+P.vr.$isvr=true
+P.vr.$isQF=true
+P.vr.$isa=true
+P.D4.$isD4=true
+P.D4.$isQF=true
+P.D4.$isQF=true
+P.D4.$isa=true
+P.RS.$isQF=true
+P.RS.$isa=true
+H.Zk.$isQF=true
+H.Zk.$isQF=true
+H.Zk.$isQF=true
+H.Zk.$isa=true
+P.Ys.$isQF=true
+P.Ys.$isa=true
+P.Ms.$isMs=true
+P.Ms.$isQF=true
+P.Ms.$isQF=true
+P.Ms.$isa=true
+P.Fw.$isQF=true
+P.Fw.$isa=true
+P.L9u.$isQF=true
+P.L9u.$isa=true
+X.TR.$isa=true
+N.TJ.$isa=true
+T.yj.$isyj=true
+T.yj.$isa=true
+P.NL.$isQF=true
+P.NL.$isa=true
+P.RY.$isQF=true
+P.RY.$isa=true
+P.QF.$isQF=true
+P.QF.$isa=true
+P.MO.$isMO=true
+P.MO.$isa=true
+F.d3.$isa=true
+W.ea.$isea=true
+W.ea.$isa=true
+P.qh.$isqh=true
+P.qh.$isa=true
+W.Aj.$isea=true
+W.Aj.$isa=true
+G.W4.$isW4=true
+G.W4.$isa=true
+M.Ya.$isa=true
+Y.Pn.$isa=true
+U.hw.$ishw=true
+U.hw.$isa=true
+A.dM.$iscv=true
+A.dM.$isKV=true
+A.dM.$isD0=true
+A.dM.$isa=true
+A.k8.$isa=true
+P.uq.$isa=true
+P.iD.$isiD=true
+P.iD.$isa=true
+W.YN.$isKV=true
+W.YN.$isD0=true
+W.YN.$isa=true
+P.HI.$isqh=true
+P.HI.$asqh=[null]
+P.HI.$isa=true
+H.IY.$isa=true
+H.aX.$isa=true
+W.I0.$isKV=true
+W.I0.$isD0=true
+W.I0.$isa=true
+W.cv.$iscv=true
+W.cv.$isKV=true
+W.cv.$isD0=true
+W.cv.$isa=true
+L.bv.$isa=true
+W.fJ.$isD0=true
+W.fJ.$isa=true
+W.ew.$isea=true
+W.ew.$isa=true
+L.Pf.$isa=true
+W.cx.$isea=true
+W.cx.$isa=true
+P.mE.$ismE=true
+P.mE.$isa=true
+P.KA.$isKA=true
+P.KA.$isnP=true
+P.KA.$isMO=true
+P.KA.$isa=true
+P.JI.$isJI=true
+P.JI.$isKA=true
+P.JI.$isnP=true
+P.JI.$isMO=true
+P.JI.$isa=true
+H.Uz.$isUz=true
+H.Uz.$isD4=true
+H.Uz.$isQF=true
+H.Uz.$isQF=true
+H.Uz.$isQF=true
+H.Uz.$isQF=true
+H.Uz.$isQF=true
+H.Uz.$isa=true
+P.e4.$ise4=true
+P.e4.$isa=true
+P.JB.$isJB=true
+P.JB.$isa=true
+P.jp.$isjp=true
+P.jp.$isa=true
+P.aY.$isaY=true
+P.aY.$isa=true
+P.L8.$isL8=true
+P.L8.$isa=true
+P.EH.$isEH=true
+P.EH.$isa=true
+W.D0.$isD0=true
+W.D0.$isa=true
+P.dX.$isdX=true
+P.dX.$isa=true
+P.fR.$isfR=true
+P.fR.$isa=true
+P.cX.$iscX=true
+P.cX.$isa=true
+P.nP.$isnP=true
+P.nP.$isa=true
+P.b8.$isb8=true
+P.b8.$isa=true
+P.iP.$isiP=true
+P.iP.$isfR=true
+P.iP.$asfR=[null]
+P.iP.$isa=true
+P.lx.$islx=true
+P.lx.$isa=true
+J.Qc=function(a){if(typeof a=="number")return J.P.prototype
+if(typeof a=="string")return J.O.prototype
+if(a==null)return a
+if(!(a instanceof P.a))return J.is.prototype
+return a}
+J.RE=function(a){if(a==null)return a
+if(typeof a!="object")return a
+if(a instanceof P.a)return a
+return J.ks(a)}
+J.U6=function(a){if(typeof a=="string")return J.O.prototype
+if(a==null)return a
+if(a.constructor==Array)return J.Q.prototype
+if(typeof a!="object")return a
+if(a instanceof P.a)return a
+return J.ks(a)}
+J.Wx=function(a){if(typeof a=="number")return J.P.prototype
+if(a==null)return a
+if(!(a instanceof P.a))return J.is.prototype
+return a}
+J.rY=function(a){if(typeof a=="string")return J.O.prototype
+if(a==null)return a
+if(!(a instanceof P.a))return J.is.prototype
+return a}
+J.w1=function(a){if(a==null)return a
+if(a.constructor==Array)return J.Q.prototype
+if(typeof a!="object")return a
+if(a instanceof P.a)return a
+return J.ks(a)}
+J.x=function(a){if(typeof a=="number"){if(Math.floor(a)==a)return J.im.prototype
+return J.Pp.prototype}if(typeof a=="string")return J.O.prototype
+if(a==null)return J.PE.prototype
+if(typeof a=="boolean")return J.kn.prototype
+if(a.constructor==Array)return J.Q.prototype
+if(typeof a!="object")return a
+if(a instanceof P.a)return a
+return J.ks(a)}
+C.OL=new U.EZ()
+C.Gw=new H.SJ()
+C.E3=new J.Q()
+C.Fm=new J.kn()
+C.yX=new J.Pp()
+C.c1=new J.im()
+C.oD=new J.P()
+C.Kn=new J.O()
+C.lM=new P.by()
+C.mI=new K.Fa()
+C.Us=new A.yL()
+C.nJ=new K.x9()
+C.Wj=new P.dp()
+C.za=new A.Mh()
+C.NU=new P.R8()
+C.v8=new P.W5()
+C.kk=Z.aC.prototype
+C.YD=F.Be.prototype
+C.j8=R.i6.prototype
+C.Vy=new A.V3("disassembly-entry")
+C.J0=new A.V3("observatory-element")
+C.Er=new A.V3("script-view")
+C.ht=new A.V3("field-ref")
+C.aM=new A.V3("isolate-summary")
+C.Ig=new A.V3("response-viewer")
+C.Uc=new A.V3("function-view")
+C.xW=new A.V3("code-view")
+C.aQ=new A.V3("class-view")
+C.Oy=new A.V3("library-view")
+C.c0=new A.V3("message-viewer")
+C.js=new A.V3("stack-trace")
+C.jF=new A.V3("isolate-list")
+C.KG=new A.V3("navigation-bar")
+C.ay=new A.V3("instance-ref")
+C.Gu=new A.V3("collapsible-content")
+C.bd=new A.V3("observatory-application")
+C.uW=new A.V3("error-view")
+C.HN=new A.V3("json-view")
+C.H8=new A.V3("source-view")
+C.Tq=new A.V3("field-view")
+C.ql=new A.V3("instance-view")
+C.Tl=E.Fv.prototype
+C.RT=new P.a6(0)
+C.OD=F.I3.prototype
+C.mt=H.VM(new W.e0("change"),[W.ea])
+C.T1=H.VM(new W.e0("click"),[W.Aj])
+C.MD=H.VM(new W.e0("error"),[W.ew])
+C.PP=H.VM(new W.e0("hashchange"),[W.ea])
+C.io=H.VM(new W.e0("input"),[W.ea])
+C.fK=H.VM(new W.e0("load"),[W.ew])
+C.ph=H.VM(new W.e0("message"),[W.cx])
+C.WR=D.qr.prototype
+C.lS=A.Gk.prototype
+C.PJ=N.Ds.prototype
+C.W3=W.fJ.prototype
+C.cp=B.pR.prototype
+C.yK=Z.hx.prototype
+C.Dh=L.u7.prototype
+C.nM=D.St.prototype
+C.Nm=J.Q.prototype
+C.ON=J.Pp.prototype
+C.jn=J.im.prototype
+C.jN=J.PE.prototype
+C.CD=J.P.prototype
+C.xB=J.O.prototype
+C.Mc=function(hooks) {
+ if (typeof dartExperimentalFixupGetTag != "function") return hooks;
+ hooks.getTag = dartExperimentalFixupGetTag(hooks.getTag);
+}
+C.dE=function(hooks) {
+ var userAgent = typeof navigator == "object" ? navigator.userAgent : "";
+ if (userAgent.indexOf("Firefox") == -1) return hooks;
+ var getTag = hooks.getTag;
+ var quickMap = {
+ "BeforeUnloadEvent": "Event",
+ "DataTransfer": "Clipboard",
+ "GeoGeolocation": "Geolocation",
+ "WorkerMessageEvent": "MessageEvent",
+ "XMLDocument": "Document"};
+ function getTagFirefox(o) {
+ var tag = getTag(o);
+ return quickMap[tag] || tag;
+ }
+ hooks.getTag = getTagFirefox;
+}
+C.Mo=function getTagFallback(o) {
+ if (o == null) return "Null";
+ var constructor = o.constructor;
+ if (typeof constructor == "function") {
+ var name = constructor.builtin$cls;
+ if (typeof name == "string") return name;
+ name = constructor.name;
+ if (typeof name == "string"
+ && name !== ""
+ && name !== "Object"
+ && name !== "Function.prototype") {
+ return name;
+ }
+ }
+ var s = Object.prototype.toString.call(o);
+ return s.substring(8, s.length - 1);
+}
+C.dK=function(getTagFallback) {
+ return function(hooks) {
+ if (typeof navigator != "object") return hooks;
+ var userAgent = navigator.userAgent;
+ if (userAgent.indexOf("Chrome") >= 0 ||
+ userAgent.indexOf("DumpRenderTree") >= 0) {
+ return hooks;
+ }
+ hooks.getTag = getTagFallback;
+ };
+}
+C.XQ=function(hooks) { return hooks; }
+
+C.HX=function() {
+ function typeNameInChrome(obj) { return obj.constructor.name; }
+ function getUnknownTag(object, tag) {
+ if (/^HTML[A-Z].*Element$/.test(tag)) {
+ var name = Object.prototype.toString.call(object);
+ if (name == "[object Object]") return null;
+ return "HTMLElement";
+ }
+ }
+ function getUnknownTagGenericBrowser(object, tag) {
+ if (object instanceof HTMLElement) return "HTMLElement";
+ return getUnknownTag(object, tag);
+ }
+ function prototypeForTag(tag) {
+ if (typeof window == "undefined") return null;
+ if (typeof window[tag] == "undefined") return null;
+ var constructor = window[tag];
+ if (typeof constructor != "function") return null;
+ return constructor.prototype;
+ }
+ function discriminator(tag) { return null; }
+ var isBrowser = typeof navigator == "object";
+ return {
+ getTag: typeNameInChrome,
+ getUnknownTag: isBrowser ? getUnknownTagGenericBrowser : getUnknownTag,
+ prototypeForTag: prototypeForTag,
+ discriminator: discriminator };
+}
+C.i7= ((typeof version == "function" && typeof os == "object" && "system" in os)
+ || (typeof navigator == "object"
+ && navigator.userAgent.indexOf('Chrome') != -1))
+ ? function(x) { return x.$dartCachedLength || x.length; }
+ : function(x) { return x.length; };
+
+C.Px=function(hooks) {
+ var userAgent = typeof navigator == "object" ? navigator.userAgent : "";
+ if (userAgent.indexOf("Trident/") == -1) return hooks;
+ var getTag = hooks.getTag;
+ var quickMap = {
+ "BeforeUnloadEvent": "Event",
+ "DataTransfer": "Clipboard",
+ "HTMLDDElement": "HTMLElement",
+ "HTMLDTElement": "HTMLElement",
+ "HTMLPhraseElement": "HTMLElement",
+ "Position": "Geoposition"
+ };
+ function getTagIE(o) {
+ var tag = getTag(o);
+ var newTag = quickMap[tag];
+ if (newTag) return newTag;
+ if (tag == "Document") {
+ if (!!o.xmlVersion) return "!Document";
+ return "!HTMLDocument";
+ }
+ if (tag == "Object") {
+ if (window.DataView && (o instanceof window.DataView)) return "DataView";
+ }
+ return tag;
+ }
+ function prototypeForTagIE(tag) {
+ if (tag == "Document") return null;
+ var constructor = window[tag];
+ if (constructor == null) return null;
+ return constructor.prototype;
+ }
+ hooks.getTag = getTagIE;
+ hooks.prototypeForTag = prototypeForTagIE;
+}
+C.A3=new P.QM(null)
+C.Ap=new P.dI(null)
+C.GB=Z.vj.prototype
+C.VZ=new N.Ng("FINER",400)
+C.R5=new N.Ng("FINE",500)
+C.IF=new N.Ng("INFO",800)
+C.UP=new N.Ng("WARNING",900)
+C.MG=M.CX.prototype
+I.makeConstantList = function(list) {
+ list.immutable$list = true;
+ list.fixed$length = true;
+ return list;
+};
+C.Gb=H.VM(I.makeConstantList([127,2047,65535,1114111]),[J.im])
+C.HE=I.makeConstantList([0,0,26624,1023,0,0,65534,2047])
+C.mK=I.makeConstantList([0,0,26624,1023,65534,2047,65534,2047])
+C.xu=I.makeConstantList([43,45,42,47,33,38,60,61,62,63,94,124])
+C.u0=I.makeConstantList(["==","!=","<=",">=","||","&&"])
+C.Me=H.VM(I.makeConstantList([]),[P.Ms])
+C.dn=H.VM(I.makeConstantList([]),[P.Fw])
+C.hU=H.VM(I.makeConstantList([]),[P.L9u])
+C.xD=I.makeConstantList([])
+C.Qy=I.makeConstantList(["in","this"])
+C.kg=I.makeConstantList([0,0,24576,1023,65534,34815,65534,18431])
+C.Wd=I.makeConstantList([0,0,32722,12287,65535,34815,65534,18431])
+C.iq=I.makeConstantList([40,41,91,93,123,125])
+C.zJ=I.makeConstantList(["caption","col","colgroup","option","optgroup","tbody","td","tfoot","th","thead","tr"])
+C.uE=new H.LP(11,{caption:null,col:null,colgroup:null,option:null,optgroup:null,tbody:null,td:null,tfoot:null,th:null,thead:null,tr:null},C.zJ)
+C.uS=I.makeConstantList(["webkitanimationstart","webkitanimationend","webkittransitionend","domfocusout","domfocusin","animationend","animationiteration","animationstart","doubleclick","fullscreenchange","fullscreenerror","keyadded","keyerror","keymessage","needkey","speechchange"])
+C.FS=new H.LP(16,{webkitanimationstart:"webkitAnimationStart",webkitanimationend:"webkitAnimationEnd",webkittransitionend:"webkitTransitionEnd",domfocusout:"DOMFocusOut",domfocusin:"DOMFocusIn",animationend:"webkitAnimationEnd",animationiteration:"webkitAnimationIteration",animationstart:"webkitAnimationStart",doubleclick:"dblclick",fullscreenchange:"webkitfullscreenchange",fullscreenerror:"webkitfullscreenerror",keyadded:"webkitkeyadded",keyerror:"webkitkeyerror",keymessage:"webkitkeymessage",needkey:"webkitneedkey",speechchange:"webkitSpeechChange"},C.uS)
+C.p5=I.makeConstantList(["!",":",",",")","]","}","?","||","&&","|","^","&","!=","==",">=",">","<=","<","+","-","%","/","*","(","[",".","{"])
+C.dj=new H.LP(27,{"!":0,":":0,",":0,")":0,"]":0,"}":0,"?":1,"||":2,"&&":3,"|":4,"^":5,"&":6,"!=":7,"==":7,">=":8,">":8,"<=":8,"<":8,"+":9,"-":9,"%":10,"/":10,"*":10,"(":11,"[":11,".":11,"{":11},C.p5)
+C.pa=I.makeConstantList(["name","extends","constructor","noscript","attributes"])
+C.kr=new H.LP(5,{name:1,extends:1,constructor:1,noscript:1,attributes:1},C.pa)
+C.ME=I.makeConstantList(["enumerate"])
+C.va=new H.LP(1,{enumerate:K.ZO},C.ME)
+C.Wp=L.Nh.prototype
+C.Xg=Q.ih.prototype
+C.t5=W.BH.prototype
+C.k0=V.F1.prototype
+C.mk=Z.uL.prototype
+C.xk=A.XP.prototype
+C.Iv=A.ir.prototype
+C.Cc=Q.NQ.prototype
+C.cJ=U.fI.prototype
+C.Ks=X.kK.prototype
+C.bg=X.uw.prototype
+C.PU=new H.GD("dart.core.Object")
+C.nz=new H.GD("dart.core.DateTime")
+C.Ts=new H.GD("dart.core.bool")
+C.A5=new H.GD("Directory")
+C.pk=new H.GD("Platform")
+C.fz=new H.GD("[]")
+C.wh=new H.GD("app")
+C.Ka=new H.GD("call")
+C.XA=new H.GD("cls")
+C.b1=new H.GD("code")
+C.to=new H.GD("createRuntimeType")
+C.Je=new H.GD("current")
+C.h1=new H.GD("currentHash")
+C.tv=new H.GD("currentHashUri")
+C.Na=new H.GD("devtools")
+C.Jw=new H.GD("displayValue")
+C.nN=new H.GD("dynamic")
+C.YU=new H.GD("error")
+C.Yn=new H.GD("error_obj")
+C.WQ=new H.GD("field")
+C.nf=new H.GD("function")
+C.AZ=new H.GD("dart.core.String")
+C.Di=new H.GD("iconClass")
+C.EN=new H.GD("id")
+C.fn=new H.GD("instance")
+C.eJ=new H.GD("instruction")
+C.Y2=new H.GD("isolate")
+C.Gd=new H.GD("json")
+C.fy=new H.GD("kind")
+C.Wn=new H.GD("length")
+C.EV=new H.GD("library")
+C.Cv=new H.GD("lines")
+C.PC=new H.GD("dart.core.int")
+C.wt=new H.GD("members")
+C.KY=new H.GD("messageType")
+C.YS=new H.GD("name")
+C.OV=new H.GD("noSuchMethod")
+C.Ws=new H.GD("operatingSystem")
+C.X9=new H.GD("paddedLine")
+C.qb=new H.GD("prefix")
+C.Qi=new H.GD("registerCallback")
+C.wH=new H.GD("responses")
+C.ok=new H.GD("dart.core.Null")
+C.md=new H.GD("dart.core.double")
+C.fX=new H.GD("script")
+C.eC=new H.GD("[]=")
+C.hn=new H.GD("source")
+C.kw=new H.GD("trace")
+C.Fh=new H.GD("url")
+C.ls=new H.GD("value")
+C.eR=new H.GD("valueType")
+C.QK=new H.GD("window")
+C.vO=H.mm('br')
+C.wK=new H.Lm(C.vO,"K",0)
+C.SL=H.mm('Ae')
+C.WX=new H.Lm(C.SL,"V",0)
+C.QJ=H.mm('xh')
+C.wW=new H.Lm(C.QJ,"T",0)
+C.wa=new H.Lm(C.vO,"V",0)
+C.Ti=H.mm('wn')
+C.Mt=new H.Lm(C.Ti,"E",0)
+C.Ye=H.mm('hx')
+C.G6=H.mm('F1')
+C.NM=H.mm('Nh')
+C.nY=H.mm('a')
+C.Yc=H.mm('iP')
+C.LN=H.mm('Be')
+C.Qa=H.mm('u7')
+C.xS=H.mm('UZ')
+C.PT=H.mm('CX')
+C.Op=H.mm('G8')
+C.xF=H.mm('NQ')
+C.b4=H.mm('ih')
+C.Ob=H.mm('kK')
+C.hG=H.mm('ir')
+C.aj=H.mm('fI')
+C.dA=H.mm('Ms')
+C.mo=H.mm('Fv')
+C.O4=H.mm('double')
+C.xE=H.mm('aC')
+C.yw=H.mm('int')
+C.vuj=H.mm('uw')
+C.j6=H.mm('qr')
+C.C6=H.mm('vj')
+C.CT=H.mm('St')
+C.Q4=H.mm('uL')
+C.yQ=H.mm('EH')
+C.Db=H.mm('String')
+C.yg=H.mm('I3')
+C.XU=H.mm('i6')
+C.Bm=H.mm('XP')
+C.Wz=H.mm('pR')
+C.HL=H.mm('bool')
+C.HH=H.mm('dynamic')
+C.Gp=H.mm('cw')
+C.mnH=H.mm('Ds')
+C.CS=H.mm('vm')
+C.XK=H.mm('Gk')
+C.GX=H.mm('c8')
+C.vB=J.is.prototype
+C.dy=new P.z0(!1)
+C.ol=W.K5.prototype
+C.hi=H.VM(new W.kG(W.f0),[W.Lq])
+C.Qq=new P.wJ(null,null,null,null,null,null,null,null,null,null,null,null)
+$.lE=null
+$.b9=1
+$.te="$cachedFunction"
+$.eb="$cachedInvocation"
+$.NF=null
+$.TX=null
+$.x7=null
+$.nw=null
+$.vv=null
+$.Bv=null
+$.oK=null
+$.tY=null
+$.TH=!1
+$.X3=C.NU
+$.Ss=0
+$.L4=null
+$.PN=null
+$.RL=!1
+$.Y4=C.IF
+$.xO=0
+$.el=0
+$.tW=null
+$.Td=!1
+$.M0=0
+$.uP=!0
+$.To=null
+J.AA=function(a){return J.RE(a).GB(a)}
+J.AB=function(a){return J.RE(a).gkU(a)}
+J.AF=function(a){return J.RE(a).gIi(a)}
+J.AG=function(a){return J.x(a).bu(a)}
+J.B8=function(a){return J.RE(a).gQ0(a)}
+J.BM=function(a,b){return J.RE(a).jx(a,b)}
+J.C0=function(a,b){return J.w1(a).ez(a,b)}
+J.Co=function(a){return J.RE(a).gcC(a)}
+J.DA=function(a){return J.RE(a).goc(a)}
+J.DB=function(a,b){return J.w1(a).Ay(a,b)}
+J.DF=function(a,b){return J.RE(a).soc(a,b)}
+J.Dz=function(a,b){return J.rY(a).j(a,b)}
+J.EC=function(a){return J.RE(a).giC(a)}
+J.EY=function(a,b){return J.RE(a).od(a,b)}
+J.Eg=function(a,b){return J.rY(a).Tc(a,b)}
+J.Eh=function(a,b){return J.Wx(a).O(a,b)}
+J.F8=function(a){return J.RE(a).gjO(a)}
+J.FN=function(a){return J.U6(a).gl0(a)}
+J.FW=function(a,b){if(typeof a=="number"&&typeof b=="number")return a/b
+return J.Wx(a).V(a,b)}
+J.GJ=function(a,b,c,d){return J.RE(a).Y9(a,b,c,d)}
+J.GK=function(a){return J.RE(a).glc(a)}
+J.GP=function(a){return J.w1(a).gA(a)}
+J.GS=function(a,b,c,d){return J.RE(a).rJ(a,b,c,d)}
+J.GW=function(a){return J.RE(a).gn4(a)}
+J.H4=function(a,b){return J.RE(a).wR(a,b)}
+J.Hb=function(a,b){if(typeof a=="number"&&typeof b=="number")return a<=b
+return J.Wx(a).E(a,b)}
+J.Hf=function(a){return J.RE(a).gTq(a)}
+J.I8=function(a,b,c){return J.rY(a).wL(a,b,c)}
+J.Ib=function(a){return J.RE(a).gqh(a)}
+J.Ih=function(a,b,c){return J.RE(a).X6(a,b,c)}
+J.Ir=function(a){return J.RE(a).gHs(a)}
+J.Iz=function(a){return J.RE(a).gfY(a)}
+J.J5=function(a,b){if(typeof a=="number"&&typeof b=="number")return a>=b
+return J.Wx(a).F(a,b)}
+J.JA=function(a,b,c){return J.rY(a).h8(a,b,c)}
+J.Ja=function(a){return J.RE(a).gr9(a)}
+J.K3=function(a,b){return J.RE(a).Kb(a,b)}
+J.L9=function(a,b){return J.RE(a).Id(a,b)}
+J.LL=function(a){return J.Wx(a).HG(a)}
+J.Lp=function(a){return J.RE(a).geT(a)}
+J.MK=function(a,b){return J.RE(a).Md(a,b)}
+J.MQ=function(a){return J.w1(a).grZ(a)}
+J.MV=function(a,b){return J.RE(a).Ih(a,b)}
+J.Mu=function(a,b){return J.RE(a).sig(a,b)}
+J.Mz=function(a){return J.rY(a).hc(a)}
+J.Or=function(a){return J.RE(a).yx(a)}
+J.Pr=function(a,b){return J.w1(a).eR(a,b)}
+J.Pw=function(a,b){return J.RE(a).sxr(a,b)}
+J.Pz=function(a,b){return J.RE(a).szZ(a,b)}
+J.Q3=function(a,b){return J.RE(a).sr9(a,b)}
+J.QE=function(a){return J.RE(a).gCd(a)}
+J.RF=function(a,b){return J.RE(a).WO(a,b)}
+J.Ro=function(a){return J.RE(a).gjU(a)}
+J.TD=function(a){return J.RE(a).i4(a)}
+J.TZ=function(a){return J.RE(a).gKV(a)}
+J.Tr=function(a){return J.RE(a).gCj(a)}
+J.UK=function(a,b){return J.RE(a).RR(a,b)}
+J.UQ=function(a,b){if(a.constructor==Array||typeof a=="string"||H.wV(a,a[init.dispatchPropertyName]))if(b>>>0===b&&b<a.length)return a[b]
+return J.U6(a).t(a,b)}
+J.US=function(a,b){return J.RE(a).pr(a,b)}
+J.UU=function(a,b){return J.U6(a).u8(a,b)}
+J.UW=function(a){return J.RE(a).gLU(a)}
+J.UX=function(a){return J.RE(a).gmW(a)}
+J.V1=function(a,b){return J.w1(a).Rz(a,b)}
+J.VN=function(a){return J.RE(a).gM0(a)}
+J.Vm=function(a){return J.RE(a).gP(a)}
+J.Vs=function(a){return J.RE(a).gQg(a)}
+J.Vw=function(a,b,c){return J.U6(a).Is(a,b,c)}
+J.W7=function(a){return J.RE(a).Nz(a)}
+J.WB=function(a,b){if(typeof a=="number"&&typeof b=="number")return a+b
+return J.Qc(a).g(a,b)}
+J.WI=function(a){return J.RE(a).gG3(a)}
+J.We=function(a,b){return J.RE(a).scC(a,b)}
+J.Xf=function(a,b){return J.RE(a).oo(a,b)}
+J.Y5=function(a){return J.RE(a).gyT(a)}
+J.Z0=function(a){return J.RE(a).ghr(a)}
+J.Z7=function(a){if(typeof a=="number")return-a
+return J.Wx(a).J(a)}
+J.ZZ=function(a,b){return J.rY(a).yn(a,b)}
+J.bB=function(a){return J.x(a).gbx(a)}
+J.bh=function(a,b,c){return J.rY(a).JT(a,b,c)}
+J.bi=function(a,b){return J.w1(a).h(a,b)}
+J.bs=function(a){return J.RE(a).JP(a)}
+J.c9=function(a,b){return J.RE(a).sa4(a,b)}
+J.co=function(a,b){return J.rY(a).nC(a,b)}
+J.e2=function(a,b,c,d,e,f,g,h,i,j,k,l,m,n,o,p){return J.RE(a).nH(a,b,c,d,e,f,g,h,i,j,k,l,m,n,o,p)}
+J.eI=function(a,b){return J.RE(a).bA(a,b)}
+J.f5=function(a){return J.RE(a).gI(a)}
+J.fP=function(a){return J.RE(a).gDg(a)}
+J.fU=function(a){return J.RE(a).gEX(a)}
+J.hI=function(a){return J.RE(a).gUQ(a)}
+J.i4=function(a,b){return J.w1(a).Zv(a,b)}
+J.iY=function(a){return J.RE(a).gvc(a)}
+J.iZ=function(a){return J.RE(a).gzZ(a)}
+J.ja=function(a,b){return J.w1(a).Vr(a,b)}
+J.jf=function(a,b){return J.x(a).T(a,b)}
+J.kE=function(a,b){return J.U6(a).tg(a,b)}
+J.kH=function(a,b){return J.w1(a).aN(a,b)}
+J.kW=function(a,b,c){if((a.constructor==Array||H.wV(a,a[init.dispatchPropertyName]))&&!a.immutable$list&&b>>>0===b&&b<a.length)return a[b]=c
+return J.w1(a).u(a,b,c)}
+J.l2=function(a){return J.RE(a).gN(a)}
+J.lB=function(a){return J.RE(a).gP1(a)}
+J.m4=function(a){return J.RE(a).gig(a)}
+J.mQ=function(a,b){if(typeof a=="number"&&typeof b=="number")return(a&b)>>>0
+return J.Wx(a).i(a,b)}
+J.nX=function(a){return J.RE(a).gjb(a)}
+J.oE=function(a,b){return J.Qc(a).iM(a,b)}
+J.og=function(a,b){return J.RE(a).sIt(a,b)}
+J.p0=function(a,b){if(typeof a=="number"&&typeof b=="number")return a*b
+return J.Wx(a).U(a,b)}
+J.pO=function(a){return J.U6(a).gor(a)}
+J.pP=function(a){return J.RE(a).gDD(a)}
+J.q8=function(a){return J.U6(a).gB(a)}
+J.qA=function(a){return J.w1(a).br(a)}
+J.qV=function(a,b,c,d){return J.RE(a).On(a,b,c,d)}
+J.qd=function(a,b,c,d){return J.RE(a).aC(a,b,c,d)}
+J.rP=function(a,b){return J.RE(a).sTq(a,b)}
+J.rr=function(a){return J.rY(a).bS(a)}
+J.ta=function(a,b){return J.RE(a).sP(a,b)}
+J.tb=function(a,b,c,d){return J.RE(a).Z1(a,b,c,d)}
+J.tx=function(a){return J.RE(a).guD(a)}
+J.u6=function(a,b){if(typeof a=="number"&&typeof b=="number")return a<b
+return J.Wx(a).C(a,b)}
+J.uH=function(a,b){return J.rY(a).Fr(a,b)}
+J.uf=function(a){return J.RE(a).gxr(a)}
+J.v1=function(a){return J.x(a).giO(a)}
+J.vX=function(a){return J.w1(a).wg(a)}
+J.vo=function(a,b){return J.w1(a).ev(a,b)}
+J.w8=function(a){return J.RE(a).gkc(a)}
+J.wC=function(a){return J.RE(a).cO(a)}
+J.wg=function(a,b){return J.U6(a).sB(a,b)}
+J.wl=function(a,b){return J.RE(a).Ch(a,b)}
+J.xC=function(a,b){if(a==null)return b==null
+if(typeof a!="object")return b!=null&&a===b
+return J.x(a).n(a,b)}
+J.xH=function(a,b){if(typeof a=="number"&&typeof b=="number")return a-b
+return J.Wx(a).W(a,b)}
+J.xZ=function(a,b){if(typeof a=="number"&&typeof b=="number")return a>b
+return J.Wx(a).D(a,b)}
+J.z2=function(a){return J.RE(a).gG1(a)}
+J.zZ=function(a,b){return J.RE(a).Yv(a,b)}
+J.zj=function(a){return J.RE(a).gvH(a)}
+$.Dq=["Ay","BN","BT","Ba","C","C0","C8","Ch","D","D3","D6","Dh","E","Ec","F","FH","Fr","GB","HG","Hn","Id","Ih","Im","Is","J","J3","JP","JT","JV","Ja","Jk","Kb","LV","Md","Mi","Mu","Nj","Nz","O","On","PM","Pa","Pk","Pv","R3","R4","RB","RR","Rz","SZ","T","T2","TH","TP","TW","Tc","Td","U","UD","UH","UZ","Uc","V","V1","Vr","Vy","W","W3","W4","WO","WZ","Wt","Wz","X6","XG","XU","Xl","Y9","YU","YW","Ys","Yv","Z","Z1","Z2","ZB","ZF","ZL","ZP","Zv","aC","aN","aq","bA","bS","br","bu","cO","cn","d0","dR","dd","du","eR","ea","er","es","ev","ez","f6","fd","fj","fk","fm","g","gA","gB","gBb","gCd","gCj","gDD","gDg","gE8","gEX","gEr","gF1","gFF","gFJ","gFT","gFV","gFe","gG0","gG1","gG3","gGL","gHs","gI","gIi","gJS","gJf","gKE","gKM","gKV","gLA","gLU","gLf","gLm","gM0","gMB","gMj","gN","gNI","gNl","gO3","gP","gP1","gP2","gPp","gPu","gPw","gPy","gQ0","gQG","gQW","gQg","gRn","gRu","gT8","gTM","gTn","gTq","gUQ","gUV","gUz","gV4","gVA","gVB","gVl","gXB","gXf","gXh","gXt","gZw","gai","gbP","gbx","gcC","geT","geb","gey","gfY","ghO","ghf","ghr","gi0","giC","giI","giK","giO","gig","gjL","gjO","gjU","gjb","gk5","gkU","gkc","gkf","gkp","gl0","gl7","glc","gmW","gmm","gn4","goc","gor","gpQ","gpo","gq6","gqC","gqh","gql","gr3","gr9","grK","grZ","gt0","gtD","gtH","gtN","gtT","guD","gvH","gvX","gvc","gvt","gxj","gxr","gyT","gys","gzP","gzZ","gzj","h","h8","hV","hc","i","i4","iA","iM","iw","j","jT","jx","kO","l5","l8","lj","m","mK","mv","n","nB","nC","nH","nP","ni","oB","oW","od","oo","oq","pD","pZ","pl","pr","qZ","r6","rJ","rS","sB","sF1","sFF","sFJ","sFT","sG1","sIt","sLA","sLf","sMj","sNI","sNl","sO3","sP","sP2","sPw","sPy","sQG","sRu","sTn","sTq","sUz","sV4","sVA","sVB","sXB","sXf","sXh","sZw","sa4","sai","scC","seb","sfY","shO","shf","si0","siI","siK","sig","sjO","sk5","skc","skf","sl7","soc","sql","sr9","st0","stD","stH","stN","stT","svX","svt","sxj","sxr","szZ","szj","t","tZ","tg","tt","u","u5","u8","uG","vs","w3","wE","wL","wR","wg","x3","xI","xc","xe","y0","yC","yc","ym","yn","yq","yu","yx","yy","z2","zV"]
+$.Au=[C.Ye,Z.hx,{created:Z.HC},C.G6,V.F1,{created:V.fv},C.NM,L.Nh,{created:L.rJ},C.LN,F.Be,{created:F.Fe},C.Qa,L.u7,{created:L.Tt},C.xS,P.UZ,{},C.PT,M.CX,{created:M.SP},C.Op,P.G8,{},C.xF,Q.NQ,{created:Q.Zo},C.b4,Q.ih,{created:Q.BW},C.Ob,X.kK,{created:X.HO},C.hG,A.ir,{created:A.oa},C.aj,U.fI,{created:U.Ry},C.mo,E.Fv,{created:E.AH},C.xE,Z.aC,{created:Z.zg},C.vuj,X.uw,{created:X.bV},C.j6,D.qr,{created:D.ip},C.C6,Z.vj,{created:Z.un},C.CT,D.St,{created:D.N5},C.Q4,Z.uL,{created:Z.Hx},C.yg,F.I3,{created:F.TW},C.XU,R.i6,{created:R.IT},C.Bm,A.XP,{created:A.XL},C.Wz,B.pR,{created:B.lu},C.mnH,N.Ds,{created:N.p7},C.XK,A.Gk,{created:A.cY}]
+I.$lazy($,"globalThis","DX","jk",function(){return function() { return this; }()})
+I.$lazy($,"globalWindow","pG","Qm",function(){return $.jk().window})
+I.$lazy($,"globalWorker","zA","Nl",function(){return $.jk().Worker})
+I.$lazy($,"globalPostMessageDefined","Da","JU",function(){return $.jk().postMessage!==void 0})
+I.$lazy($,"thisScript","Kb","Cl",function(){return H.yl()})
+I.$lazy($,"workerIds","rS","p6",function(){var z=new P.kM(null)
+H.VM(z,[J.im])
+return z})
+I.$lazy($,"noSuchMethodPattern","lm","WD",function(){return H.cM(H.S7({ toString: function() { return "$receiver$"; } }))})
+I.$lazy($,"notClosurePattern","k1","OI",function(){return H.cM(H.S7({ $method$: null, toString: function() { return "$receiver$"; } }))})
+I.$lazy($,"nullCallPattern","Re","PH",function(){return H.cM(H.S7(null))})
+I.$lazy($,"nullLiteralCallPattern","fN","D1",function(){return H.cM(H.pb())})
+I.$lazy($,"undefinedCallPattern","qi","rx",function(){return H.cM(H.S7(void 0))})
+I.$lazy($,"undefinedLiteralCallPattern","rZ","Kr",function(){return H.cM(H.u9())})
+I.$lazy($,"nullPropertyPattern","BX","W6",function(){return H.cM(H.Mj(null))})
+I.$lazy($,"nullLiteralPropertyPattern","tt","Bi",function(){return H.cM(H.Qd())})
+I.$lazy($,"undefinedPropertyPattern","dt","eA",function(){return H.cM(H.Mj(void 0))})
+I.$lazy($,"undefinedLiteralPropertyPattern","A7","ko",function(){return H.cM(H.m0())})
+I.$lazy($,"customElementsReady","Am","i5",function(){return new B.zO().call$0()})
+I.$lazy($,"_toStringList","Ml","RM",function(){return P.A(null,null)})
+I.$lazy($,"validationPattern","zP","R0",function(){return new H.VR(H.v4("^(?:[a-zA-Z$][a-zA-Z$0-9_]*\\.)*(?:[a-zA-Z$][a-zA-Z$0-9_]*=?|-|unary-|\\[\\]=|~|==|\\[\\]|\\*|/|%|~/|\\+|<<|>>|>=|>|<=|<|&|\\^|\\|)$",!1,!0,!1),null,null)})
+I.$lazy($,"_dynamicType","QG","Cr",function(){return new H.EE(C.nN)})
+I.$lazy($,"librariesByName","Ct","vK",function(){return H.dF()})
+I.$lazy($,"currentJsMirrorSystem","GR","At",function(){return new H.Sn(null,new H.Lj($globalState.N0))})
+I.$lazy($,"mangledNames","tj","bx",function(){return H.hY(init.mangledNames,!1)})
+I.$lazy($,"reflectiveNames","DE","I6",function(){return H.YK($.bx())})
+I.$lazy($,"mangledGlobalNames","iC","Sl",function(){return H.hY(init.mangledGlobalNames,!0)})
+I.$lazy($,"_asyncCallbacks","r1","P8",function(){return P.NZ(null,{func:"X0",void:true})})
+I.$lazy($,"_toStringVisiting","xg","xb",function(){return P.yv(null)})
+I.$lazy($,"_toStringList","yu","tw",function(){return P.A(null,null)})
+I.$lazy($,"_splitRe","Um","cO",function(){return new H.VR(H.v4("^(?:([^:/?#]+):)?(?://(?:([^/?#]*)@)?(?:([\\w\\d\\-\\u0100-\\uffff.%]*)|\\[([A-Fa-f0-9:.]*)\\])(?::([0-9]+))?)?([^?#[]+)?(?:\\?([^#]*))?(?:#(.*))?$",!1,!0,!1),null,null)})
+I.$lazy($,"_safeConsole","wk","UT",function(){return new W.QZ()})
+I.$lazy($,"webkitEvents","fD","Vp",function(){return H.B7(["animationend","webkitAnimationEnd","animationiteration","webkitAnimationIteration","animationstart","webkitAnimationStart","fullscreenchange","webkitfullscreenchange","fullscreenerror","webkitfullscreenerror","keyadded","webkitkeyadded","keyerror","webkitkeyerror","keymessage","webkitkeymessage","needkey","webkitneedkey","pointerlockchange","webkitpointerlockchange","pointerlockerror","webkitpointerlockerror","resourcetimingbufferfull","webkitresourcetimingbufferfull","transitionend","webkitTransitionEnd","speechchange","webkitSpeechChange"],P.L5(null,null,null,null,null))})
+I.$lazy($,"context","eo","LX",function(){return P.ND(function() { return this; }())})
+I.$lazy($,"_loggers","Uj","Iu",function(){var z=H.B7([],P.L5(null,null,null,null,null))
+H.VM(z,[J.O,N.TJ])
+return z})
+I.$lazy($,"currentIsolateMatcher","qY","oy",function(){return new H.VR(H.v4("#/isolates/\\d+/",!1,!0,!1),null,null)})
+I.$lazy($,"_logger","G3","iU",function(){return N.Jx("Observable.dirtyCheck")})
+I.$lazy($,"objectType","XV","aA",function(){return P.re(C.nY)})
+I.$lazy($,"_pathRegExp","Jm","tN",function(){return new L.lP().call$0()})
+I.$lazy($,"_spacesRegExp","JV","c3",function(){return new H.VR(H.v4("\\s",!1,!0,!1),null,null)})
+I.$lazy($,"_logger","y7","aT",function(){return N.Jx("observe.PathObserver")})
+I.$lazy($,"_builder","RU","vw",function(){return B.mq(null,null)})
+I.$lazy($,"posix","yr","IX",function(){return new B.BE("posix","/",new H.VR(H.v4("/",!1,!0,!1),null,null),new H.VR(H.v4("[^/]$",!1,!0,!1),null,null),new H.VR(H.v4("^/",!1,!0,!1),null,null),null)})
+I.$lazy($,"windows","ho","CE",function(){return new B.Qb("windows","\\",new H.VR(H.v4("[/\\\\]",!1,!0,!1),null,null),new H.VR(H.v4("[^/\\\\]$",!1,!0,!1),null,null),new H.VR(H.v4("^(\\\\\\\\|[a-zA-Z]:[/\\\\])",!1,!0,!1),null,null),null)})
+I.$lazy($,"url","ak","LT",function(){return new B.xI("url","/",new H.VR(H.v4("/",!1,!0,!1),null,null),new H.VR(H.v4("(^[a-zA-Z][-+.a-zA-Z\\d]*://|[^/])$",!1,!0,!1),null,null),new H.VR(H.v4("[a-zA-Z][-+.a-zA-Z\\d]*://[^/]*",!1,!0,!1),null,null),new H.VR(H.v4("^/",!1,!0,!1),null,null),null)})
+I.$lazy($,"platform","qu","vP",function(){return B.Rh()})
+I.$lazy($,"_typesByName","Hi","Ej",function(){return P.L5(null,null,null,J.O,P.uq)})
+I.$lazy($,"_waitType","Mp","p2",function(){return P.L5(null,null,null,J.O,A.XP)})
+I.$lazy($,"_waitSuper","uv","xY",function(){return P.L5(null,null,null,J.O,[J.Q,A.XP])})
+I.$lazy($,"_declarations","EJ","cd",function(){return P.L5(null,null,null,J.O,A.XP)})
+I.$lazy($,"_objectType","Cy","Tf",function(){return P.re(C.nY)})
+I.$lazy($,"_reverseEventTranslations","fp","pT",function(){return new A.w12().call$0()})
+I.$lazy($,"bindPattern","ZA","VC",function(){return new H.VR(H.v4("\\{\\{([^{}]*)}}",!1,!0,!1),null,null)})
+I.$lazy($,"_polymerSyntax","Df","Nd",function(){var z=P.L5(null,null,null,J.O,P.a)
+z.Ay(z,C.va)
+return new A.HJ(z)})
+I.$lazy($,"_ready","tS","mC",function(){var z,y
+z=null
+y=new P.Zf(P.Dt(z))
+H.VM(y,[z])
+return y})
+I.$lazy($,"veiledElements","yi","IN",function(){return["body"]})
+I.$lazy($,"_observeLog","VY","yk",function(){return N.Jx("polymer.observe")})
+I.$lazy($,"_eventsLog","Fj","SS",function(){return N.Jx("polymer.events")})
+I.$lazy($,"_unbindLog","fV","P5",function(){return N.Jx("polymer.unbind")})
+I.$lazy($,"_bindLog","Q6","ZH",function(){return N.Jx("polymer.bind")})
+I.$lazy($,"_shadowHost","cU","od",function(){var z=new P.kM(null)
+H.VM(z,[A.dM])
+return z})
+I.$lazy($,"_librariesToLoad","x2","nT",function(){return A.GA(document,J.UW(C.ol.gmW(window)),null,null)})
+I.$lazy($,"_libs","D9","UG",function(){return $.At().gvU()})
+I.$lazy($,"_rootUri","aU","RQ",function(){return $.At().F1.gcZ().gFP()})
+I.$lazy($,"_packageRoot","Po","rw",function(){var z=J.UW(C.ol.gmW(window))
+z=P.r6($.cO().ej(z)).r0
+return H.d($.vw().tM(z))+"/packages/"})
+I.$lazy($,"_loaderLog","ha","M7",function(){return N.Jx("polymer.loader")})
+I.$lazy($,"_typeHandlers","FZ","WJ",function(){return new Z.Md().call$0()})
+I.$lazy($,"_jsHelper","zU","Yr",function(){var z,y
+z=$.At().gvU()
+y=P.r6($.cO().ej("dart:_js_helper"))
+z=z.nb
+return z.t(z,y)})
+I.$lazy($,"_mangledNameField","AU","av",function(){return new M.w13().call$0()})
+I.$lazy($,"_logger","Kp","IS",function(){return N.Jx("polymer_expressions")})
+I.$lazy($,"_BINARY_OPERATORS","tB","bF",function(){return H.B7(["+",new K.wJY(),"-",new K.zOQ(),"*",new K.W6o(),"/",new K.MdQ(),"==",new K.YJG(),"!=",new K.DOe(),">",new K.lPa(),">=",new K.Ufa(),"<",new K.Raa(),"<=",new K.w0(),"||",new K.w4(),"&&",new K.w5(),"|",new K.w7()],P.L5(null,null,null,null,null))})
+I.$lazy($,"_UNARY_OPERATORS","ju","YG",function(){return H.B7(["+",new K.w9(),"-",new K.w10(),"!",new K.w11()],P.L5(null,null,null,null,null))})
+I.$lazy($,"_checkboxEventType","S8","FF",function(){return new M.Uf().call$0()})
+I.$lazy($,"_contentsOwner","mn","LQ",function(){var z=new P.kM(null)
+H.VM(z,[null])
+return z})
+I.$lazy($,"_allTemplatesSelectors","Sf","cz",function(){var z=J.C0(C.uE.gvc(C.uE),new M.Ra())
+return"template, "+z.zV(z,", ")})
+I.$lazy($,"_expando","fF","cm",function(){var z=new P.kM("template_binding")
+H.VM(z,[null])
+return z})
+
+init.functionAliases={}
+init.metadata=[P.a,C.wK,C.wa,C.WX,C.Mt,C.wW,P.uq,"name",J.O,Z.aC,F.Be,R.i6,W.K5,E.Fv,F.I3,D.qr,A.Gk,N.Ds,B.pR,Z.hx,L.u7,D.St,Z.vj,M.CX,L.Nh,Q.ih,V.F1,Z.uL,[K.Ae,3],"index",J.im,"value",3,Q.NQ,U.fI,X.kK,X.uw,P.L8,C.nJ,C.Us,,Z.Vf,F.tu,C.mI,J.kn,"r","e",W.ea,"detail","target",W.KV,R.Vc,[P.L8,P.wv,P.RS],[J.Q,H.Zk],"methodOwner",P.NL,[J.Q,P.RY],"fieldOwner",[P.L8,P.wv,P.RY],[P.L8,P.wv,P.QF],[P.L8,P.wv,P.NL],P.vr,"fieldName",P.wv,"arg",H.Uz,[J.Q,P.vr],P.Ms,"memberName","positionalArguments",J.Q,"namedArguments",[P.L8,P.wv,null],[J.Q,P.Ms],"owner",[J.Q,P.Fw],[J.Q,P.L9u],H.Un,"key",P.QF,H.Tp,"tv","i",E.WZ,F.pv,D.Vfx,A.Dsd,N.tuj,B.Vct,Z.D13,D.WZq,"oldValue",Z.pva,M.cda,"m",[J.Q,P.L8],P.iD,"l","objectId","cid","isolateId",[J.Q,L.Zw],V.waa,L.mL,Z.Nr,5,"newValue",4,[P.cX,1],[P.cX,2],2,1,"v",U.V0,L.Pf,X.V4,X.V6,];$=null
+I = I.$finishIsolateConstructor(I)
+$=new I()
+function convertToFastObject(properties) {
+ function MyClass() {};
+ MyClass.prototype = properties;
+ new MyClass();
+ return properties;
+}
+A = convertToFastObject(A)
+B = convertToFastObject(B)
+C = convertToFastObject(C)
+D = convertToFastObject(D)
+E = convertToFastObject(E)
+F = convertToFastObject(F)
+G = convertToFastObject(G)
+H = convertToFastObject(H)
+J = convertToFastObject(J)
+K = convertToFastObject(K)
+L = convertToFastObject(L)
+M = convertToFastObject(M)
+N = convertToFastObject(N)
+O = convertToFastObject(O)
+P = convertToFastObject(P)
+Q = convertToFastObject(Q)
+R = convertToFastObject(R)
+S = convertToFastObject(S)
+T = convertToFastObject(T)
+U = convertToFastObject(U)
+V = convertToFastObject(V)
+W = convertToFastObject(W)
+X = convertToFastObject(X)
+Y = convertToFastObject(Y)
+Z = convertToFastObject(Z)
+!function(){var z=Object.prototype
+for(var y=0;;y++){var x="___dart_dispatch_record_ZxYxX_0_"
+if(y>0)x=rootProperty+"_"+y
+if(!(x in z))return init.dispatchPropertyName=x}}()
+;(function (callback) {
+ if (typeof document === "undefined") {
+ callback(null);
+ return;
+ }
+ if (document.currentScript) {
+ callback(document.currentScript);
+ return;
+ }
+
+ var scripts = document.scripts;
+ function onLoad(event) {
+ for (var i = 0; i < scripts.length; ++i) {
+ scripts[i].removeEventListener("load", onLoad, false);
+ }
+ callback(event.target);
+ }
+ for (var i = 0; i < scripts.length; ++i) {
+ scripts[i].addEventListener("load", onLoad, false);
+ }
+})(function(currentScript) {
+ init.currentScript = currentScript;
+
+ if (typeof dartMainRunner === "function") {
+ dartMainRunner(function() { H.SG(E.qg); });
+ } else {
+ H.SG(E.qg);
+ }
+})
+function init(){I.p={}
+function generateAccessor(a,b,c){var y=a.length
+var x=a.charCodeAt(y-1)
+var w=false
+if(x==45){y--
+x=a.charCodeAt(y-1)
+a=a.substring(0,y)
+w=true}x=x>=60&&x<=64?x-59:x>=123&&x<=126?x-117:x>=37&&x<=43?x-27:0
+if(x){var v=x&3
+var u=x>>2
+var t=a=a.substring(0,y-1)
+var s=a.indexOf(":")
+if(s>0){t=a.substring(0,s)
+a=a.substring(s+1)}if(v){var r=v&2?"r":""
+var q=v&1?"this":"r"
+var p="return "+q+"."+a
+var o=c+".prototype.g"+t+"="
+var n="function("+r+"){"+p+"}"
+if(w)b.push(o+"$reflectable("+n+");\n")
+else b.push(o+n+";\n")}if(u){var r=u&2?"r,v":"v"
+var q=u&1?"this":"r"
+var p=q+"."+a+"=v"
+var o=c+".prototype.s"+t+"="
+var n="function("+r+"){"+p+"}"
+if(w)b.push(o+"$reflectable("+n+");\n")
+else b.push(o+n+";\n")}}return a}I.p.$generateAccessor=generateAccessor
+function defineClass(a,b,c){var y=[]
+var x="function "+b+"("
+var w=""
+for(var v=0;v<c.length;v++){if(v!=0)x+=", "
+var u=generateAccessor(c[v],y,b)
+var t="parameter_"+u
+x+=t
+w+="this."+u+" = "+t+";\n"}x+=") {\n"+w+"}\n"
+x+=b+".builtin$cls=\""+a+"\";\n"
+x+="$desc=$collectedClasses."+b+";\n"
+x+="if($desc instanceof Array) $desc = $desc[1];\n"
+x+=b+".prototype = $desc;\n"
+if(typeof defineClass.name!="string"){x+=b+".name=\""+b+"\";\n"}x+=y.join("")
+return x}var z=function(){function tmp(){}var y=Object.prototype.hasOwnProperty
+return function(a,b){tmp.prototype=b.prototype
+var x=new tmp()
+var w=a.prototype
+for(var v in w)if(y.call(w,v))x[v]=w[v]
+x.constructor=a
+a.prototype=x
+return x}}()
+I.$finishClasses=function(a,b,c){var y={}
+if(!init.allClasses)init.allClasses={}
+var x=init.allClasses
+var w=Object.prototype.hasOwnProperty
+if(typeof dart_precompiled=="function"){var v=dart_precompiled(a)}else{var u="function $reflectable(fn){fn.$reflectable=1;return fn};\n"+"var $desc;\n"
+var t=[]}for(var s in a){if(w.call(a,s)){var r=a[s]
+if(r instanceof Array)r=r[1]
+var q=r[""],p,o=s,n=q
+if(typeof q=="object"&&q instanceof Array){q=n=q[0]}if(typeof q=="string"){var m=q.split("/")
+if(m.length==2){o=m[0]
+n=m[1]}}var l=n.split(";")
+n=l[1]==""?[]:l[1].split(",")
+p=l[0]
+if(p&&p.indexOf("+")>0){l=p.split("+")
+p=l[0]
+var k=a[l[1]]
+if(k instanceof Array)k=k[1]
+for(var j in k){if(w.call(k,j)&&!w.call(r,j))r[j]=k[j]}}if(typeof dart_precompiled!="function"){u+=defineClass(o,s,n)
+t.push(s)}if(p)y[s]=p}}if(typeof dart_precompiled!="function"){u+="return [\n "+t.join(",\n ")+"\n]"
+var v=new Function("$collectedClasses",u)(a)
+u=null}for(var i=0;i<v.length;i++){var h=v[i]
+var s=h.name
+var r=a[s]
+var g=b
+if(r instanceof Array){g=r[0]||b
+r=r[1]}h["@"]=r
+x[s]=h
+g[s]=h}v=null
+var f={}
+init.interceptorsByTag=Object.create(null)
+init.leafTags={}
+function finishClass(a8){var e=Object.prototype.hasOwnProperty
+if(e.call(f,a8))return
+f[a8]=true
+var d=y[a8]
+if(!d||typeof d!="string")return
+finishClass(d)
+var a0=x[a8]
+var a1=x[d]
+if(!a1)a1=c[d]
+var a2=z(a0,a1)
+if(e.call(a2,"%")){var a3=a2["%"].split(";")
+if(a3[0]){var a4=a3[0].split("|")
+for(var a5=0;a5<a4.length;a5++){init.interceptorsByTag[a4[a5]]=a0
+init.leafTags[a4[a5]]=true}}if(a3[1]){a4=a3[1].split("|")
+if(a3[2]){var a6=a3[2].split("|")
+for(var a5=0;a5<a6.length;a5++){var a7=x[a6[a5]]
+a7.$nativeSuperclassTag=a4[0]}}for(a5=0;a5<a4.length;a5++){init.interceptorsByTag[a4[a5]]=a0
+init.leafTags[a4[a5]]=false}}}}for(var s in y)finishClass(s)}
+I.$lazy=function(a,b,c,d,e){if(!init.lazies)init.lazies={}
+init.lazies[c]=d
+var y={}
+var x={}
+a[c]=y
+a[d]=function(){var w=$[c]
+try{if(w===y){$[c]=x
+try{w=$[c]=e()}finally{if(w===y){if($[c]===x){$[c]=null}}}}else{if(w===x)H.ag(b)}return w}finally{$[d]=function(){return this[c]}}}}
+I.$finishIsolateConstructor=function(a){var y=a.p
+function Isolate(){var x=Object.prototype.hasOwnProperty
+for(var w in y)if(x.call(y,w))this[w]=y[w]
+function ForceEfficientMap(){}ForceEfficientMap.prototype=this
+new ForceEfficientMap()}Isolate.prototype=a.prototype
+Isolate.prototype.constructor=Isolate
+Isolate.p=y
+Isolate.$finishClasses=a.$finishClasses
+Isolate.makeConstantList=a.makeConstantList
+return Isolate}}
+})()
+function dart_precompiled($collectedClasses){var $desc
+function qE(){}qE.builtin$cls="qE"
+if(!"name" in qE)qE.name="qE"
+$desc=$collectedClasses.qE
+if($desc instanceof Array)$desc=$desc[1]
+qE.prototype=$desc
+function Yy(){}Yy.builtin$cls="Yy"
+if(!"name" in Yy)Yy.name="Yy"
+$desc=$collectedClasses.Yy
+if($desc instanceof Array)$desc=$desc[1]
+Yy.prototype=$desc
+function Ps(){}Ps.builtin$cls="Ps"
+if(!"name" in Ps)Ps.name="Ps"
+$desc=$collectedClasses.Ps
+if($desc instanceof Array)$desc=$desc[1]
+Ps.prototype=$desc
+Ps.prototype.gcC=function(receiver){return receiver.hash}
+Ps.prototype.scC=function(receiver,v){return receiver.hash=v}
+Ps.prototype.gLU=function(receiver){return receiver.href}
+Ps.prototype.gN=function(receiver){return receiver.target}
+Ps.prototype.gr9=function(receiver){return receiver.type}
+Ps.prototype.sr9=function(receiver,v){return receiver.type=v}
+function rK(){}rK.builtin$cls="rK"
+if(!"name" in rK)rK.name="rK"
+$desc=$collectedClasses.rK
+if($desc instanceof Array)$desc=$desc[1]
+rK.prototype=$desc
+function fY(){}fY.builtin$cls="fY"
+if(!"name" in fY)fY.name="fY"
+$desc=$collectedClasses.fY
+if($desc instanceof Array)$desc=$desc[1]
+fY.prototype=$desc
+fY.prototype.gcC=function(receiver){return receiver.hash}
+fY.prototype.gLU=function(receiver){return receiver.href}
+fY.prototype.gN=function(receiver){return receiver.target}
+function Mr(){}Mr.builtin$cls="Mr"
+if(!"name" in Mr)Mr.name="Mr"
+$desc=$collectedClasses.Mr
+if($desc instanceof Array)$desc=$desc[1]
+Mr.prototype=$desc
+function zx(){}zx.builtin$cls="zx"
+if(!"name" in zx)zx.name="zx"
+$desc=$collectedClasses.zx
+if($desc instanceof Array)$desc=$desc[1]
+zx.prototype=$desc
+function ct(){}ct.builtin$cls="ct"
+if(!"name" in ct)ct.name="ct"
+$desc=$collectedClasses.ct
+if($desc instanceof Array)$desc=$desc[1]
+ct.prototype=$desc
+function nB(){}nB.builtin$cls="nB"
+if(!"name" in nB)nB.name="nB"
+$desc=$collectedClasses.nB
+if($desc instanceof Array)$desc=$desc[1]
+nB.prototype=$desc
+nB.prototype.gLU=function(receiver){return receiver.href}
+nB.prototype.gN=function(receiver){return receiver.target}
+function i3(){}i3.builtin$cls="i3"
+if(!"name" in i3)i3.name="i3"
+$desc=$collectedClasses.i3
+if($desc instanceof Array)$desc=$desc[1]
+i3.prototype=$desc
+i3.prototype.gO3=function(receiver){return receiver.url}
+function it(){}it.builtin$cls="it"
+if(!"name" in it)it.name="it"
+$desc=$collectedClasses.it
+if($desc instanceof Array)$desc=$desc[1]
+it.prototype=$desc
+function Az(){}Az.builtin$cls="Az"
+if(!"name" in Az)Az.name="Az"
+$desc=$collectedClasses.Az
+if($desc instanceof Array)$desc=$desc[1]
+Az.prototype=$desc
+Az.prototype.gr9=function(receiver){return receiver.type}
+function QP(){}QP.builtin$cls="QP"
+if(!"name" in QP)QP.name="QP"
+$desc=$collectedClasses.QP
+if($desc instanceof Array)$desc=$desc[1]
+QP.prototype=$desc
+function QW(){}QW.builtin$cls="QW"
+if(!"name" in QW)QW.name="QW"
+$desc=$collectedClasses.QW
+if($desc instanceof Array)$desc=$desc[1]
+QW.prototype=$desc
+QW.prototype.gMB=function(receiver){return receiver.form}
+QW.prototype.goc=function(receiver){return receiver.name}
+QW.prototype.soc=function(receiver,v){return receiver.name=v}
+QW.prototype.gr9=function(receiver){return receiver.type}
+QW.prototype.sr9=function(receiver,v){return receiver.type=v}
+QW.prototype.gP=function(receiver){return receiver.value}
+QW.prototype.sP=function(receiver,v){return receiver.value=v}
+function n6(){}n6.builtin$cls="n6"
+if(!"name" in n6)n6.name="n6"
+$desc=$collectedClasses.n6
+if($desc instanceof Array)$desc=$desc[1]
+n6.prototype=$desc
+function Ny(){}Ny.builtin$cls="Ny"
+if(!"name" in Ny)Ny.name="Ny"
+$desc=$collectedClasses.Ny
+if($desc instanceof Array)$desc=$desc[1]
+Ny.prototype=$desc
+function OM(){}OM.builtin$cls="OM"
+if(!"name" in OM)OM.name="OM"
+$desc=$collectedClasses.OM
+if($desc instanceof Array)$desc=$desc[1]
+OM.prototype=$desc
+OM.prototype.gRn=function(receiver){return receiver.data}
+OM.prototype.gB=function(receiver){return receiver.length}
+function QQ(){}QQ.builtin$cls="QQ"
+if(!"name" in QQ)QQ.name="QQ"
+$desc=$collectedClasses.QQ
+if($desc instanceof Array)$desc=$desc[1]
+QQ.prototype=$desc
+QQ.prototype.gtT=function(receiver){return receiver.code}
+function MA(){}MA.builtin$cls="MA"
+if(!"name" in MA)MA.name="MA"
+$desc=$collectedClasses.MA
+if($desc instanceof Array)$desc=$desc[1]
+MA.prototype=$desc
+function y4(){}y4.builtin$cls="y4"
+if(!"name" in y4)y4.name="y4"
+$desc=$collectedClasses.y4
+if($desc instanceof Array)$desc=$desc[1]
+y4.prototype=$desc
+y4.prototype.gRn=function(receiver){return receiver.data}
+function d7(){}d7.builtin$cls="d7"
+if(!"name" in d7)d7.name="d7"
+$desc=$collectedClasses.d7
+if($desc instanceof Array)$desc=$desc[1]
+d7.prototype=$desc
+function na(){}na.builtin$cls="na"
+if(!"name" in na)na.name="na"
+$desc=$collectedClasses.na
+if($desc instanceof Array)$desc=$desc[1]
+na.prototype=$desc
+function oJ(){}oJ.builtin$cls="oJ"
+if(!"name" in oJ)oJ.name="oJ"
+$desc=$collectedClasses.oJ
+if($desc instanceof Array)$desc=$desc[1]
+oJ.prototype=$desc
+oJ.prototype.gB=function(receiver){return receiver.length}
+function DG(){}DG.builtin$cls="DG"
+if(!"name" in DG)DG.name="DG"
+$desc=$collectedClasses.DG
+if($desc instanceof Array)$desc=$desc[1]
+DG.prototype=$desc
+function mN(){}mN.builtin$cls="mN"
+if(!"name" in mN)mN.name="mN"
+$desc=$collectedClasses.mN
+if($desc instanceof Array)$desc=$desc[1]
+mN.prototype=$desc
+function vH(){}vH.builtin$cls="vH"
+if(!"name" in vH)vH.name="vH"
+$desc=$collectedClasses.vH
+if($desc instanceof Array)$desc=$desc[1]
+vH.prototype=$desc
+function hh(){}hh.builtin$cls="hh"
+if(!"name" in hh)hh.name="hh"
+$desc=$collectedClasses.hh
+if($desc instanceof Array)$desc=$desc[1]
+hh.prototype=$desc
+function Em(){}Em.builtin$cls="Em"
+if(!"name" in Em)Em.name="Em"
+$desc=$collectedClasses.Em
+if($desc instanceof Array)$desc=$desc[1]
+Em.prototype=$desc
+function Sb(){}Sb.builtin$cls="Sb"
+if(!"name" in Sb)Sb.name="Sb"
+$desc=$collectedClasses.Sb
+if($desc instanceof Array)$desc=$desc[1]
+Sb.prototype=$desc
+function rV(){}rV.builtin$cls="rV"
+if(!"name" in rV)rV.name="rV"
+$desc=$collectedClasses.rV
+if($desc instanceof Array)$desc=$desc[1]
+rV.prototype=$desc
+function Wy(){}Wy.builtin$cls="Wy"
+if(!"name" in Wy)Wy.name="Wy"
+$desc=$collectedClasses.Wy
+if($desc instanceof Array)$desc=$desc[1]
+Wy.prototype=$desc
+function YN(){}YN.builtin$cls="YN"
+if(!"name" in YN)YN.name="YN"
+$desc=$collectedClasses.YN
+if($desc instanceof Array)$desc=$desc[1]
+YN.prototype=$desc
+function bA(){}bA.builtin$cls="bA"
+if(!"name" in bA)bA.name="bA"
+$desc=$collectedClasses.bA
+if($desc instanceof Array)$desc=$desc[1]
+bA.prototype=$desc
+function Wq(){}Wq.builtin$cls="Wq"
+if(!"name" in Wq)Wq.name="Wq"
+$desc=$collectedClasses.Wq
+if($desc instanceof Array)$desc=$desc[1]
+Wq.prototype=$desc
+function rv(){}rv.builtin$cls="rv"
+if(!"name" in rv)rv.name="rv"
+$desc=$collectedClasses.rv
+if($desc instanceof Array)$desc=$desc[1]
+rv.prototype=$desc
+rv.prototype.gG1=function(receiver){return receiver.message}
+rv.prototype.goc=function(receiver){return receiver.name}
+function BK(){}BK.builtin$cls="BK"
+if(!"name" in BK)BK.name="BK"
+$desc=$collectedClasses.BK
+if($desc instanceof Array)$desc=$desc[1]
+BK.prototype=$desc
+BK.prototype.gG1=function(receiver){return receiver.message}
+function wj(){}wj.builtin$cls="wj"
+if(!"name" in wj)wj.name="wj"
+$desc=$collectedClasses.wj
+if($desc instanceof Array)$desc=$desc[1]
+wj.prototype=$desc
+function cv(){}cv.builtin$cls="cv"
+if(!"name" in cv)cv.name="cv"
+$desc=$collectedClasses.cv
+if($desc instanceof Array)$desc=$desc[1]
+cv.prototype=$desc
+cv.prototype.gxr=function(receiver){return receiver.className}
+cv.prototype.sxr=function(receiver,v){return receiver.className=v}
+cv.prototype.gjO=function(receiver){return receiver.id}
+cv.prototype.sjO=function(receiver,v){return receiver.id=v}
+function Fs(){}Fs.builtin$cls="Fs"
+if(!"name" in Fs)Fs.name="Fs"
+$desc=$collectedClasses.Fs
+if($desc instanceof Array)$desc=$desc[1]
+Fs.prototype=$desc
+Fs.prototype.goc=function(receiver){return receiver.name}
+Fs.prototype.soc=function(receiver,v){return receiver.name=v}
+Fs.prototype.gLA=function(receiver){return receiver.src}
+Fs.prototype.sLA=function(receiver,v){return receiver.src=v}
+Fs.prototype.gr9=function(receiver){return receiver.type}
+Fs.prototype.sr9=function(receiver,v){return receiver.type=v}
+function SX(){}SX.builtin$cls="SX"
+if(!"name" in SX)SX.name="SX"
+$desc=$collectedClasses.SX
+if($desc instanceof Array)$desc=$desc[1]
+SX.prototype=$desc
+SX.prototype.gkc=function(receiver){return receiver.error}
+SX.prototype.gG1=function(receiver){return receiver.message}
+function ea(){}ea.builtin$cls="ea"
+if(!"name" in ea)ea.name="ea"
+$desc=$collectedClasses.ea
+if($desc instanceof Array)$desc=$desc[1]
+ea.prototype=$desc
+ea.prototype.sIt=function(receiver,v){return receiver._selector=v}
+ea.prototype.gXt=function(receiver){return receiver.bubbles}
+ea.prototype.gIi=function(receiver){return receiver.path}
+ea.prototype.gr9=function(receiver){return receiver.type}
+function D0(){}D0.builtin$cls="D0"
+if(!"name" in D0)D0.name="D0"
+$desc=$collectedClasses.D0
+if($desc instanceof Array)$desc=$desc[1]
+D0.prototype=$desc
+function as(){}as.builtin$cls="as"
+if(!"name" in as)as.name="as"
+$desc=$collectedClasses.as
+if($desc instanceof Array)$desc=$desc[1]
+as.prototype=$desc
+as.prototype.gMB=function(receiver){return receiver.form}
+as.prototype.goc=function(receiver){return receiver.name}
+as.prototype.soc=function(receiver,v){return receiver.name=v}
+as.prototype.gr9=function(receiver){return receiver.type}
+function T5(){}T5.builtin$cls="T5"
+if(!"name" in T5)T5.name="T5"
+$desc=$collectedClasses.T5
+if($desc instanceof Array)$desc=$desc[1]
+T5.prototype=$desc
+T5.prototype.goc=function(receiver){return receiver.name}
+function Aa(){}Aa.builtin$cls="Aa"
+if(!"name" in Aa)Aa.name="Aa"
+$desc=$collectedClasses.Aa
+if($desc instanceof Array)$desc=$desc[1]
+Aa.prototype=$desc
+Aa.prototype.gtT=function(receiver){return receiver.code}
+function u5(){}u5.builtin$cls="u5"
+if(!"name" in u5)u5.name="u5"
+$desc=$collectedClasses.u5
+if($desc instanceof Array)$desc=$desc[1]
+u5.prototype=$desc
+function Yu(){}Yu.builtin$cls="Yu"
+if(!"name" in Yu)Yu.name="Yu"
+$desc=$collectedClasses.Yu
+if($desc instanceof Array)$desc=$desc[1]
+Yu.prototype=$desc
+Yu.prototype.gB=function(receiver){return receiver.length}
+Yu.prototype.gbP=function(receiver){return receiver.method}
+Yu.prototype.goc=function(receiver){return receiver.name}
+Yu.prototype.soc=function(receiver,v){return receiver.name=v}
+Yu.prototype.gN=function(receiver){return receiver.target}
+function iG(){}iG.builtin$cls="iG"
+if(!"name" in iG)iG.name="iG"
+$desc=$collectedClasses.iG
+if($desc instanceof Array)$desc=$desc[1]
+iG.prototype=$desc
+function jP(){}jP.builtin$cls="jP"
+if(!"name" in jP)jP.name="jP"
+$desc=$collectedClasses.jP
+if($desc instanceof Array)$desc=$desc[1]
+jP.prototype=$desc
+function U2(){}U2.builtin$cls="U2"
+if(!"name" in U2)U2.name="U2"
+$desc=$collectedClasses.U2
+if($desc instanceof Array)$desc=$desc[1]
+U2.prototype=$desc
+function tA(){}tA.builtin$cls="tA"
+if(!"name" in tA)tA.name="tA"
+$desc=$collectedClasses.tA
+if($desc instanceof Array)$desc=$desc[1]
+tA.prototype=$desc
+function xn(){}xn.builtin$cls="xn"
+if(!"name" in xn)xn.name="xn"
+$desc=$collectedClasses.xn
+if($desc instanceof Array)$desc=$desc[1]
+xn.prototype=$desc
+function Vb(){}Vb.builtin$cls="Vb"
+if(!"name" in Vb)Vb.name="Vb"
+$desc=$collectedClasses.Vb
+if($desc instanceof Array)$desc=$desc[1]
+Vb.prototype=$desc
+function QH(){}QH.builtin$cls="QH"
+if(!"name" in QH)QH.name="QH"
+$desc=$collectedClasses.QH
+if($desc instanceof Array)$desc=$desc[1]
+QH.prototype=$desc
+function ST(){}ST.builtin$cls="ST"
+if(!"name" in ST)ST.name="ST"
+$desc=$collectedClasses.ST
+if($desc instanceof Array)$desc=$desc[1]
+ST.prototype=$desc
+function X2(){}X2.builtin$cls="X2"
+if(!"name" in X2)X2.name="X2"
+$desc=$collectedClasses.X2
+if($desc instanceof Array)$desc=$desc[1]
+X2.prototype=$desc
+function fJ(){}fJ.builtin$cls="fJ"
+if(!"name" in fJ)fJ.name="fJ"
+$desc=$collectedClasses.fJ
+if($desc instanceof Array)$desc=$desc[1]
+fJ.prototype=$desc
+fJ.prototype.giC=function(receiver){return receiver.responseText}
+fJ.prototype.gys=function(receiver){return receiver.status}
+fJ.prototype.gpo=function(receiver){return receiver.statusText}
+function Vi(){}Vi.builtin$cls="Vi"
+if(!"name" in Vi)Vi.name="Vi"
+$desc=$collectedClasses.Vi
+if($desc instanceof Array)$desc=$desc[1]
+Vi.prototype=$desc
+function tX(){}tX.builtin$cls="tX"
+if(!"name" in tX)tX.name="tX"
+$desc=$collectedClasses.tX
+if($desc instanceof Array)$desc=$desc[1]
+tX.prototype=$desc
+tX.prototype.goc=function(receiver){return receiver.name}
+tX.prototype.soc=function(receiver,v){return receiver.name=v}
+tX.prototype.gLA=function(receiver){return receiver.src}
+tX.prototype.sLA=function(receiver,v){return receiver.src=v}
+function Sg(){}Sg.builtin$cls="Sg"
+if(!"name" in Sg)Sg.name="Sg"
+$desc=$collectedClasses.Sg
+if($desc instanceof Array)$desc=$desc[1]
+Sg.prototype=$desc
+Sg.prototype.gRn=function(receiver){return receiver.data}
+function pA(){}pA.builtin$cls="pA"
+if(!"name" in pA)pA.name="pA"
+$desc=$collectedClasses.pA
+if($desc instanceof Array)$desc=$desc[1]
+pA.prototype=$desc
+pA.prototype.gLA=function(receiver){return receiver.src}
+pA.prototype.sLA=function(receiver,v){return receiver.src=v}
+function Mi(){}Mi.builtin$cls="Mi"
+if(!"name" in Mi)Mi.name="Mi"
+$desc=$collectedClasses.Mi
+if($desc instanceof Array)$desc=$desc[1]
+Mi.prototype=$desc
+Mi.prototype.gTq=function(receiver){return receiver.checked}
+Mi.prototype.sTq=function(receiver,v){return receiver.checked=v}
+Mi.prototype.gMB=function(receiver){return receiver.form}
+Mi.prototype.gqC=function(receiver){return receiver.list}
+Mi.prototype.goc=function(receiver){return receiver.name}
+Mi.prototype.soc=function(receiver,v){return receiver.name=v}
+Mi.prototype.gLA=function(receiver){return receiver.src}
+Mi.prototype.sLA=function(receiver,v){return receiver.src=v}
+Mi.prototype.gr9=function(receiver){return receiver.type}
+Mi.prototype.sr9=function(receiver,v){return receiver.type=v}
+Mi.prototype.gP=function(receiver){return receiver.value}
+Mi.prototype.sP=function(receiver,v){return receiver.value=v}
+function Gt(){}Gt.builtin$cls="Gt"
+if(!"name" in Gt)Gt.name="Gt"
+$desc=$collectedClasses.Gt
+if($desc instanceof Array)$desc=$desc[1]
+Gt.prototype=$desc
+Gt.prototype.gmW=function(receiver){return receiver.location}
+function In(){}In.builtin$cls="In"
+if(!"name" in In)In.name="In"
+$desc=$collectedClasses.In
+if($desc instanceof Array)$desc=$desc[1]
+In.prototype=$desc
+In.prototype.gMB=function(receiver){return receiver.form}
+In.prototype.goc=function(receiver){return receiver.name}
+In.prototype.soc=function(receiver,v){return receiver.name=v}
+In.prototype.gr9=function(receiver){return receiver.type}
+function Gx(){}Gx.builtin$cls="Gx"
+if(!"name" in Gx)Gx.name="Gx"
+$desc=$collectedClasses.Gx
+if($desc instanceof Array)$desc=$desc[1]
+Gx.prototype=$desc
+Gx.prototype.gP=function(receiver){return receiver.value}
+Gx.prototype.sP=function(receiver,v){return receiver.value=v}
+function eP(){}eP.builtin$cls="eP"
+if(!"name" in eP)eP.name="eP"
+$desc=$collectedClasses.eP
+if($desc instanceof Array)$desc=$desc[1]
+eP.prototype=$desc
+eP.prototype.gMB=function(receiver){return receiver.form}
+function AL(){}AL.builtin$cls="AL"
+if(!"name" in AL)AL.name="AL"
+$desc=$collectedClasses.AL
+if($desc instanceof Array)$desc=$desc[1]
+AL.prototype=$desc
+AL.prototype.gMB=function(receiver){return receiver.form}
+function Og(){}Og.builtin$cls="Og"
+if(!"name" in Og)Og.name="Og"
+$desc=$collectedClasses.Og
+if($desc instanceof Array)$desc=$desc[1]
+Og.prototype=$desc
+Og.prototype.gLU=function(receiver){return receiver.href}
+Og.prototype.gr9=function(receiver){return receiver.type}
+Og.prototype.sr9=function(receiver,v){return receiver.type=v}
+function cS(){}cS.builtin$cls="cS"
+if(!"name" in cS)cS.name="cS"
+$desc=$collectedClasses.cS
+if($desc instanceof Array)$desc=$desc[1]
+cS.prototype=$desc
+cS.prototype.gcC=function(receiver){return receiver.hash}
+cS.prototype.scC=function(receiver,v){return receiver.hash=v}
+cS.prototype.gLU=function(receiver){return receiver.href}
+function M6(){}M6.builtin$cls="M6"
+if(!"name" in M6)M6.name="M6"
+$desc=$collectedClasses.M6
+if($desc instanceof Array)$desc=$desc[1]
+M6.prototype=$desc
+M6.prototype.goc=function(receiver){return receiver.name}
+M6.prototype.soc=function(receiver,v){return receiver.name=v}
+function El(){}El.builtin$cls="El"
+if(!"name" in El)El.name="El"
+$desc=$collectedClasses.El
+if($desc instanceof Array)$desc=$desc[1]
+El.prototype=$desc
+El.prototype.gkc=function(receiver){return receiver.error}
+El.prototype.gLA=function(receiver){return receiver.src}
+El.prototype.sLA=function(receiver,v){return receiver.src=v}
+function zm(){}zm.builtin$cls="zm"
+if(!"name" in zm)zm.name="zm"
+$desc=$collectedClasses.zm
+if($desc instanceof Array)$desc=$desc[1]
+zm.prototype=$desc
+zm.prototype.gtT=function(receiver){return receiver.code}
+function SV(){}SV.builtin$cls="SV"
+if(!"name" in SV)SV.name="SV"
+$desc=$collectedClasses.SV
+if($desc instanceof Array)$desc=$desc[1]
+SV.prototype=$desc
+SV.prototype.gtT=function(receiver){return receiver.code}
+function aB(){}aB.builtin$cls="aB"
+if(!"name" in aB)aB.name="aB"
+$desc=$collectedClasses.aB
+if($desc instanceof Array)$desc=$desc[1]
+aB.prototype=$desc
+aB.prototype.gG1=function(receiver){return receiver.message}
+function ku(){}ku.builtin$cls="ku"
+if(!"name" in ku)ku.name="ku"
+$desc=$collectedClasses.ku
+if($desc instanceof Array)$desc=$desc[1]
+ku.prototype=$desc
+ku.prototype.gG1=function(receiver){return receiver.message}
+function KM(){}KM.builtin$cls="KM"
+if(!"name" in KM)KM.name="KM"
+$desc=$collectedClasses.KM
+if($desc instanceof Array)$desc=$desc[1]
+KM.prototype=$desc
+function cW(){}cW.builtin$cls="cW"
+if(!"name" in cW)cW.name="cW"
+$desc=$collectedClasses.cW
+if($desc instanceof Array)$desc=$desc[1]
+cW.prototype=$desc
+cW.prototype.gjO=function(receiver){return receiver.id}
+function DK(){}DK.builtin$cls="DK"
+if(!"name" in DK)DK.name="DK"
+$desc=$collectedClasses.DK
+if($desc instanceof Array)$desc=$desc[1]
+DK.prototype=$desc
+function qm(){}qm.builtin$cls="qm"
+if(!"name" in qm)qm.name="qm"
+$desc=$collectedClasses.qm
+if($desc instanceof Array)$desc=$desc[1]
+qm.prototype=$desc
+function ZY(){}ZY.builtin$cls="ZY"
+if(!"name" in ZY)ZY.name="ZY"
+$desc=$collectedClasses.ZY
+if($desc instanceof Array)$desc=$desc[1]
+ZY.prototype=$desc
+function cx(){}cx.builtin$cls="cx"
+if(!"name" in cx)cx.name="cx"
+$desc=$collectedClasses.cx
+if($desc instanceof Array)$desc=$desc[1]
+cx.prototype=$desc
+function la(){}la.builtin$cls="la"
+if(!"name" in la)la.name="la"
+$desc=$collectedClasses.la
+if($desc instanceof Array)$desc=$desc[1]
+la.prototype=$desc
+la.prototype.gjb=function(receiver){return receiver.content}
+la.prototype.goc=function(receiver){return receiver.name}
+la.prototype.soc=function(receiver,v){return receiver.name=v}
+function Vn(){}Vn.builtin$cls="Vn"
+if(!"name" in Vn)Vn.name="Vn"
+$desc=$collectedClasses.Vn
+if($desc instanceof Array)$desc=$desc[1]
+Vn.prototype=$desc
+Vn.prototype.gP=function(receiver){return receiver.value}
+Vn.prototype.sP=function(receiver,v){return receiver.value=v}
+function PG(){}PG.builtin$cls="PG"
+if(!"name" in PG)PG.name="PG"
+$desc=$collectedClasses.PG
+if($desc instanceof Array)$desc=$desc[1]
+PG.prototype=$desc
+function xe(){}xe.builtin$cls="xe"
+if(!"name" in xe)xe.name="xe"
+$desc=$collectedClasses.xe
+if($desc instanceof Array)$desc=$desc[1]
+xe.prototype=$desc
+function Hw(){}Hw.builtin$cls="Hw"
+if(!"name" in Hw)Hw.name="Hw"
+$desc=$collectedClasses.Hw
+if($desc instanceof Array)$desc=$desc[1]
+Hw.prototype=$desc
+Hw.prototype.gRn=function(receiver){return receiver.data}
+function bn(){}bn.builtin$cls="bn"
+if(!"name" in bn)bn.name="bn"
+$desc=$collectedClasses.bn
+if($desc instanceof Array)$desc=$desc[1]
+bn.prototype=$desc
+function Im(){}Im.builtin$cls="Im"
+if(!"name" in Im)Im.name="Im"
+$desc=$collectedClasses.Im
+if($desc instanceof Array)$desc=$desc[1]
+Im.prototype=$desc
+Im.prototype.gjO=function(receiver){return receiver.id}
+Im.prototype.goc=function(receiver){return receiver.name}
+Im.prototype.gr9=function(receiver){return receiver.type}
+function oB(){}oB.builtin$cls="oB"
+if(!"name" in oB)oB.name="oB"
+$desc=$collectedClasses.oB
+if($desc instanceof Array)$desc=$desc[1]
+oB.prototype=$desc
+function Aj(){}Aj.builtin$cls="Aj"
+if(!"name" in Aj)Aj.name="Aj"
+$desc=$collectedClasses.Aj
+if($desc instanceof Array)$desc=$desc[1]
+Aj.prototype=$desc
+function oU(){}oU.builtin$cls="oU"
+if(!"name" in oU)oU.name="oU"
+$desc=$collectedClasses.oU
+if($desc instanceof Array)$desc=$desc[1]
+oU.prototype=$desc
+function qT(){}qT.builtin$cls="qT"
+if(!"name" in qT)qT.name="qT"
+$desc=$collectedClasses.qT
+if($desc instanceof Array)$desc=$desc[1]
+qT.prototype=$desc
+qT.prototype.gG1=function(receiver){return receiver.message}
+qT.prototype.goc=function(receiver){return receiver.name}
+function KV(){}KV.builtin$cls="KV"
+if(!"name" in KV)KV.name="KV"
+$desc=$collectedClasses.KV
+if($desc instanceof Array)$desc=$desc[1]
+KV.prototype=$desc
+KV.prototype.gq6=function(receiver){return receiver.firstChild}
+KV.prototype.guD=function(receiver){return receiver.nextSibling}
+KV.prototype.gM0=function(receiver){return receiver.ownerDocument}
+KV.prototype.geT=function(receiver){return receiver.parentElement}
+KV.prototype.gKV=function(receiver){return receiver.parentNode}
+KV.prototype.sa4=function(receiver,v){return receiver.textContent=v}
+function BH(){}BH.builtin$cls="BH"
+if(!"name" in BH)BH.name="BH"
+$desc=$collectedClasses.BH
+if($desc instanceof Array)$desc=$desc[1]
+BH.prototype=$desc
+function mh(){}mh.builtin$cls="mh"
+if(!"name" in mh)mh.name="mh"
+$desc=$collectedClasses.mh
+if($desc instanceof Array)$desc=$desc[1]
+mh.prototype=$desc
+mh.prototype.gr9=function(receiver){return receiver.type}
+mh.prototype.sr9=function(receiver,v){return receiver.type=v}
+function G7(){}G7.builtin$cls="G7"
+if(!"name" in G7)G7.name="G7"
+$desc=$collectedClasses.G7
+if($desc instanceof Array)$desc=$desc[1]
+G7.prototype=$desc
+G7.prototype.gRn=function(receiver){return receiver.data}
+G7.prototype.gMB=function(receiver){return receiver.form}
+G7.prototype.goc=function(receiver){return receiver.name}
+G7.prototype.soc=function(receiver,v){return receiver.name=v}
+G7.prototype.gr9=function(receiver){return receiver.type}
+G7.prototype.sr9=function(receiver,v){return receiver.type=v}
+function wq(){}wq.builtin$cls="wq"
+if(!"name" in wq)wq.name="wq"
+$desc=$collectedClasses.wq
+if($desc instanceof Array)$desc=$desc[1]
+wq.prototype=$desc
+function Ql(){}Ql.builtin$cls="Ql"
+if(!"name" in Ql)Ql.name="Ql"
+$desc=$collectedClasses.Ql
+if($desc instanceof Array)$desc=$desc[1]
+Ql.prototype=$desc
+Ql.prototype.gMB=function(receiver){return receiver.form}
+Ql.prototype.gvH=function(receiver){return receiver.index}
+Ql.prototype.gP=function(receiver){return receiver.value}
+Ql.prototype.sP=function(receiver,v){return receiver.value=v}
+function Xp(){}Xp.builtin$cls="Xp"
+if(!"name" in Xp)Xp.name="Xp"
+$desc=$collectedClasses.Xp
+if($desc instanceof Array)$desc=$desc[1]
+Xp.prototype=$desc
+Xp.prototype.gMB=function(receiver){return receiver.form}
+Xp.prototype.goc=function(receiver){return receiver.name}
+Xp.prototype.soc=function(receiver,v){return receiver.name=v}
+Xp.prototype.gr9=function(receiver){return receiver.type}
+Xp.prototype.gP=function(receiver){return receiver.value}
+Xp.prototype.sP=function(receiver,v){return receiver.value=v}
+function bP(){}bP.builtin$cls="bP"
+if(!"name" in bP)bP.name="bP"
+$desc=$collectedClasses.bP
+if($desc instanceof Array)$desc=$desc[1]
+bP.prototype=$desc
+function mX(){}mX.builtin$cls="mX"
+if(!"name" in mX)mX.name="mX"
+$desc=$collectedClasses.mX
+if($desc instanceof Array)$desc=$desc[1]
+mX.prototype=$desc
+function SN(){}SN.builtin$cls="SN"
+if(!"name" in SN)SN.name="SN"
+$desc=$collectedClasses.SN
+if($desc instanceof Array)$desc=$desc[1]
+SN.prototype=$desc
+function HD(){}HD.builtin$cls="HD"
+if(!"name" in HD)HD.name="HD"
+$desc=$collectedClasses.HD
+if($desc instanceof Array)$desc=$desc[1]
+HD.prototype=$desc
+HD.prototype.goc=function(receiver){return receiver.name}
+HD.prototype.soc=function(receiver,v){return receiver.name=v}
+HD.prototype.gP=function(receiver){return receiver.value}
+HD.prototype.sP=function(receiver,v){return receiver.value=v}
+function ni(){}ni.builtin$cls="ni"
+if(!"name" in ni)ni.name="ni"
+$desc=$collectedClasses.ni
+if($desc instanceof Array)$desc=$desc[1]
+ni.prototype=$desc
+function p3(){}p3.builtin$cls="p3"
+if(!"name" in p3)p3.name="p3"
+$desc=$collectedClasses.p3
+if($desc instanceof Array)$desc=$desc[1]
+p3.prototype=$desc
+p3.prototype.gtT=function(receiver){return receiver.code}
+p3.prototype.gG1=function(receiver){return receiver.message}
+function qj(){}qj.builtin$cls="qj"
+if(!"name" in qj)qj.name="qj"
+$desc=$collectedClasses.qj
+if($desc instanceof Array)$desc=$desc[1]
+qj.prototype=$desc
+function qW(){}qW.builtin$cls="qW"
+if(!"name" in qW)qW.name="qW"
+$desc=$collectedClasses.qW
+if($desc instanceof Array)$desc=$desc[1]
+qW.prototype=$desc
+qW.prototype.gN=function(receiver){return receiver.target}
+function KR(){}KR.builtin$cls="KR"
+if(!"name" in KR)KR.name="KR"
+$desc=$collectedClasses.KR
+if($desc instanceof Array)$desc=$desc[1]
+KR.prototype=$desc
+KR.prototype.gP=function(receiver){return receiver.value}
+KR.prototype.sP=function(receiver,v){return receiver.value=v}
+function ew(){}ew.builtin$cls="ew"
+if(!"name" in ew)ew.name="ew"
+$desc=$collectedClasses.ew
+if($desc instanceof Array)$desc=$desc[1]
+ew.prototype=$desc
+function fs(){}fs.builtin$cls="fs"
+if(!"name" in fs)fs.name="fs"
+$desc=$collectedClasses.fs
+if($desc instanceof Array)$desc=$desc[1]
+fs.prototype=$desc
+function bX(){}bX.builtin$cls="bX"
+if(!"name" in bX)bX.name="bX"
+$desc=$collectedClasses.bX
+if($desc instanceof Array)$desc=$desc[1]
+bX.prototype=$desc
+bX.prototype.gO3=function(receiver){return receiver.url}
+function BL(){}BL.builtin$cls="BL"
+if(!"name" in BL)BL.name="BL"
+$desc=$collectedClasses.BL
+if($desc instanceof Array)$desc=$desc[1]
+BL.prototype=$desc
+function MC(){}MC.builtin$cls="MC"
+if(!"name" in MC)MC.name="MC"
+$desc=$collectedClasses.MC
+if($desc instanceof Array)$desc=$desc[1]
+MC.prototype=$desc
+function Mx(){}Mx.builtin$cls="Mx"
+if(!"name" in Mx)Mx.name="Mx"
+$desc=$collectedClasses.Mx
+if($desc instanceof Array)$desc=$desc[1]
+Mx.prototype=$desc
+function j2(){}j2.builtin$cls="j2"
+if(!"name" in j2)j2.name="j2"
+$desc=$collectedClasses.j2
+if($desc instanceof Array)$desc=$desc[1]
+j2.prototype=$desc
+j2.prototype.gLA=function(receiver){return receiver.src}
+j2.prototype.sLA=function(receiver,v){return receiver.src=v}
+j2.prototype.gr9=function(receiver){return receiver.type}
+j2.prototype.sr9=function(receiver,v){return receiver.type=v}
+function yz(){}yz.builtin$cls="yz"
+if(!"name" in yz)yz.name="yz"
+$desc=$collectedClasses.yz
+if($desc instanceof Array)$desc=$desc[1]
+yz.prototype=$desc
+function lp(){}lp.builtin$cls="lp"
+if(!"name" in lp)lp.name="lp"
+$desc=$collectedClasses.lp
+if($desc instanceof Array)$desc=$desc[1]
+lp.prototype=$desc
+lp.prototype.gMB=function(receiver){return receiver.form}
+lp.prototype.gB=function(receiver){return receiver.length}
+lp.prototype.sB=function(receiver,v){return receiver.length=v}
+lp.prototype.goc=function(receiver){return receiver.name}
+lp.prototype.soc=function(receiver,v){return receiver.name=v}
+lp.prototype.gig=function(receiver){return receiver.selectedIndex}
+lp.prototype.sig=function(receiver,v){return receiver.selectedIndex=v}
+lp.prototype.gr9=function(receiver){return receiver.type}
+lp.prototype.gP=function(receiver){return receiver.value}
+lp.prototype.sP=function(receiver,v){return receiver.value=v}
+function pD(){}pD.builtin$cls="pD"
+if(!"name" in pD)pD.name="pD"
+$desc=$collectedClasses.pD
+if($desc instanceof Array)$desc=$desc[1]
+pD.prototype=$desc
+function I0(){}I0.builtin$cls="I0"
+if(!"name" in I0)I0.name="I0"
+$desc=$collectedClasses.I0
+if($desc instanceof Array)$desc=$desc[1]
+I0.prototype=$desc
+I0.prototype.gpQ=function(receiver){return receiver.applyAuthorStyles}
+function QR(){}QR.builtin$cls="QR"
+if(!"name" in QR)QR.name="QR"
+$desc=$collectedClasses.QR
+if($desc instanceof Array)$desc=$desc[1]
+QR.prototype=$desc
+QR.prototype.gLA=function(receiver){return receiver.src}
+QR.prototype.sLA=function(receiver,v){return receiver.src=v}
+QR.prototype.gr9=function(receiver){return receiver.type}
+QR.prototype.sr9=function(receiver,v){return receiver.type=v}
+function Cp(){}Cp.builtin$cls="Cp"
+if(!"name" in Cp)Cp.name="Cp"
+$desc=$collectedClasses.Cp
+if($desc instanceof Array)$desc=$desc[1]
+Cp.prototype=$desc
+function ua(){}ua.builtin$cls="ua"
+if(!"name" in ua)ua.name="ua"
+$desc=$collectedClasses.ua
+if($desc instanceof Array)$desc=$desc[1]
+ua.prototype=$desc
+function zD(){}zD.builtin$cls="zD"
+if(!"name" in zD)zD.name="zD"
+$desc=$collectedClasses.zD
+if($desc instanceof Array)$desc=$desc[1]
+zD.prototype=$desc
+zD.prototype.gkc=function(receiver){return receiver.error}
+zD.prototype.gG1=function(receiver){return receiver.message}
+function Ul(){}Ul.builtin$cls="Ul"
+if(!"name" in Ul)Ul.name="Ul"
+$desc=$collectedClasses.Ul
+if($desc instanceof Array)$desc=$desc[1]
+Ul.prototype=$desc
+function G0(){}G0.builtin$cls="G0"
+if(!"name" in G0)G0.name="G0"
+$desc=$collectedClasses.G0
+if($desc instanceof Array)$desc=$desc[1]
+G0.prototype=$desc
+G0.prototype.goc=function(receiver){return receiver.name}
+function wb(){}wb.builtin$cls="wb"
+if(!"name" in wb)wb.name="wb"
+$desc=$collectedClasses.wb
+if($desc instanceof Array)$desc=$desc[1]
+wb.prototype=$desc
+wb.prototype.gG3=function(receiver){return receiver.key}
+wb.prototype.gzZ=function(receiver){return receiver.newValue}
+wb.prototype.gjL=function(receiver){return receiver.oldValue}
+wb.prototype.gO3=function(receiver){return receiver.url}
+function fq(){}fq.builtin$cls="fq"
+if(!"name" in fq)fq.name="fq"
+$desc=$collectedClasses.fq
+if($desc instanceof Array)$desc=$desc[1]
+fq.prototype=$desc
+fq.prototype.gr9=function(receiver){return receiver.type}
+fq.prototype.sr9=function(receiver,v){return receiver.type=v}
+function h4(){}h4.builtin$cls="h4"
+if(!"name" in h4)h4.name="h4"
+$desc=$collectedClasses.h4
+if($desc instanceof Array)$desc=$desc[1]
+h4.prototype=$desc
+function qk(){}qk.builtin$cls="qk"
+if(!"name" in qk)qk.name="qk"
+$desc=$collectedClasses.qk
+if($desc instanceof Array)$desc=$desc[1]
+qk.prototype=$desc
+function GI(){}GI.builtin$cls="GI"
+if(!"name" in GI)GI.name="GI"
+$desc=$collectedClasses.GI
+if($desc instanceof Array)$desc=$desc[1]
+GI.prototype=$desc
+function Tb(){}Tb.builtin$cls="Tb"
+if(!"name" in Tb)Tb.name="Tb"
+$desc=$collectedClasses.Tb
+if($desc instanceof Array)$desc=$desc[1]
+Tb.prototype=$desc
+function tV(){}tV.builtin$cls="tV"
+if(!"name" in tV)tV.name="tV"
+$desc=$collectedClasses.tV
+if($desc instanceof Array)$desc=$desc[1]
+tV.prototype=$desc
+function BT(){}BT.builtin$cls="BT"
+if(!"name" in BT)BT.name="BT"
+$desc=$collectedClasses.BT
+if($desc instanceof Array)$desc=$desc[1]
+BT.prototype=$desc
+function yY(){}yY.builtin$cls="yY"
+if(!"name" in yY)yY.name="yY"
+$desc=$collectedClasses.yY
+if($desc instanceof Array)$desc=$desc[1]
+yY.prototype=$desc
+yY.prototype.gjb=function(receiver){return receiver.content}
+function kJ(){}kJ.builtin$cls="kJ"
+if(!"name" in kJ)kJ.name="kJ"
+$desc=$collectedClasses.kJ
+if($desc instanceof Array)$desc=$desc[1]
+kJ.prototype=$desc
+function AE(){}AE.builtin$cls="AE"
+if(!"name" in AE)AE.name="AE"
+$desc=$collectedClasses.AE
+if($desc instanceof Array)$desc=$desc[1]
+AE.prototype=$desc
+AE.prototype.gMB=function(receiver){return receiver.form}
+AE.prototype.goc=function(receiver){return receiver.name}
+AE.prototype.soc=function(receiver,v){return receiver.name=v}
+AE.prototype.gr9=function(receiver){return receiver.type}
+AE.prototype.gP=function(receiver){return receiver.value}
+AE.prototype.sP=function(receiver,v){return receiver.value=v}
+function xV(){}xV.builtin$cls="xV"
+if(!"name" in xV)xV.name="xV"
+$desc=$collectedClasses.xV
+if($desc instanceof Array)$desc=$desc[1]
+xV.prototype=$desc
+xV.prototype.gRn=function(receiver){return receiver.data}
+function FH(){}FH.builtin$cls="FH"
+if(!"name" in FH)FH.name="FH"
+$desc=$collectedClasses.FH
+if($desc instanceof Array)$desc=$desc[1]
+FH.prototype=$desc
+function y6(){}y6.builtin$cls="y6"
+if(!"name" in y6)y6.name="y6"
+$desc=$collectedClasses.y6
+if($desc instanceof Array)$desc=$desc[1]
+y6.prototype=$desc
+function RH(){}RH.builtin$cls="RH"
+if(!"name" in RH)RH.name="RH"
+$desc=$collectedClasses.RH
+if($desc instanceof Array)$desc=$desc[1]
+RH.prototype=$desc
+RH.prototype.gfY=function(receiver){return receiver.kind}
+RH.prototype.sfY=function(receiver,v){return receiver.kind=v}
+RH.prototype.gLA=function(receiver){return receiver.src}
+RH.prototype.sLA=function(receiver,v){return receiver.src=v}
+function pU(){}pU.builtin$cls="pU"
+if(!"name" in pU)pU.name="pU"
+$desc=$collectedClasses.pU
+if($desc instanceof Array)$desc=$desc[1]
+pU.prototype=$desc
+function Lq(){}Lq.builtin$cls="Lq"
+if(!"name" in Lq)Lq.name="Lq"
+$desc=$collectedClasses.Lq
+if($desc instanceof Array)$desc=$desc[1]
+Lq.prototype=$desc
+function Mf(){}Mf.builtin$cls="Mf"
+if(!"name" in Mf)Mf.name="Mf"
+$desc=$collectedClasses.Mf
+if($desc instanceof Array)$desc=$desc[1]
+Mf.prototype=$desc
+function BR(){}BR.builtin$cls="BR"
+if(!"name" in BR)BR.name="BR"
+$desc=$collectedClasses.BR
+if($desc instanceof Array)$desc=$desc[1]
+BR.prototype=$desc
+function r4(){}r4.builtin$cls="r4"
+if(!"name" in r4)r4.name="r4"
+$desc=$collectedClasses.r4
+if($desc instanceof Array)$desc=$desc[1]
+r4.prototype=$desc
+function aG(){}aG.builtin$cls="aG"
+if(!"name" in aG)aG.name="aG"
+$desc=$collectedClasses.aG
+if($desc instanceof Array)$desc=$desc[1]
+aG.prototype=$desc
+function J6(){}J6.builtin$cls="J6"
+if(!"name" in J6)J6.name="J6"
+$desc=$collectedClasses.J6
+if($desc instanceof Array)$desc=$desc[1]
+J6.prototype=$desc
+function K5(){}K5.builtin$cls="K5"
+if(!"name" in K5)K5.name="K5"
+$desc=$collectedClasses.K5
+if($desc instanceof Array)$desc=$desc[1]
+K5.prototype=$desc
+K5.prototype.goc=function(receiver){return receiver.name}
+K5.prototype.soc=function(receiver,v){return receiver.name=v}
+K5.prototype.gys=function(receiver){return receiver.status}
+function UM(){}UM.builtin$cls="UM"
+if(!"name" in UM)UM.name="UM"
+$desc=$collectedClasses.UM
+if($desc instanceof Array)$desc=$desc[1]
+UM.prototype=$desc
+UM.prototype.goc=function(receiver){return receiver.name}
+UM.prototype.gP=function(receiver){return receiver.value}
+UM.prototype.sP=function(receiver,v){return receiver.value=v}
+function UL(){}UL.builtin$cls="UL"
+if(!"name" in UL)UL.name="UL"
+$desc=$collectedClasses.UL
+if($desc instanceof Array)$desc=$desc[1]
+UL.prototype=$desc
+function rq(){}rq.builtin$cls="rq"
+if(!"name" in rq)rq.name="rq"
+$desc=$collectedClasses.rq
+if($desc instanceof Array)$desc=$desc[1]
+rq.prototype=$desc
+function nK(){}nK.builtin$cls="nK"
+if(!"name" in nK)nK.name="nK"
+$desc=$collectedClasses.nK
+if($desc instanceof Array)$desc=$desc[1]
+nK.prototype=$desc
+function kc(){}kc.builtin$cls="kc"
+if(!"name" in kc)kc.name="kc"
+$desc=$collectedClasses.kc
+if($desc instanceof Array)$desc=$desc[1]
+kc.prototype=$desc
+function ij(){}ij.builtin$cls="ij"
+if(!"name" in ij)ij.name="ij"
+$desc=$collectedClasses.ij
+if($desc instanceof Array)$desc=$desc[1]
+ij.prototype=$desc
+function ty(){}ty.builtin$cls="ty"
+if(!"name" in ty)ty.name="ty"
+$desc=$collectedClasses.ty
+if($desc instanceof Array)$desc=$desc[1]
+ty.prototype=$desc
+function Nf(){}Nf.builtin$cls="Nf"
+if(!"name" in Nf)Nf.name="Nf"
+$desc=$collectedClasses.Nf
+if($desc instanceof Array)$desc=$desc[1]
+Nf.prototype=$desc
+function Nc(){}Nc.builtin$cls="Nc"
+if(!"name" in Nc)Nc.name="Nc"
+$desc=$collectedClasses.Nc
+if($desc instanceof Array)$desc=$desc[1]
+Nc.prototype=$desc
+function rj(){}rj.builtin$cls="rj"
+if(!"name" in rj)rj.name="rj"
+$desc=$collectedClasses.rj
+if($desc instanceof Array)$desc=$desc[1]
+rj.prototype=$desc
+function rh(){}rh.builtin$cls="rh"
+if(!"name" in rh)rh.name="rh"
+$desc=$collectedClasses.rh
+if($desc instanceof Array)$desc=$desc[1]
+rh.prototype=$desc
+function Zv(){}Zv.builtin$cls="Zv"
+if(!"name" in Zv)Zv.name="Zv"
+$desc=$collectedClasses.Zv
+if($desc instanceof Array)$desc=$desc[1]
+Zv.prototype=$desc
+function Q7(){}Q7.builtin$cls="Q7"
+if(!"name" in Q7)Q7.name="Q7"
+$desc=$collectedClasses.Q7
+if($desc instanceof Array)$desc=$desc[1]
+Q7.prototype=$desc
+function hF(){}hF.builtin$cls="hF"
+if(!"name" in hF)hF.name="hF"
+$desc=$collectedClasses.hF
+if($desc instanceof Array)$desc=$desc[1]
+hF.prototype=$desc
+function OF(){}OF.builtin$cls="OF"
+if(!"name" in OF)OF.name="OF"
+$desc=$collectedClasses.OF
+if($desc instanceof Array)$desc=$desc[1]
+OF.prototype=$desc
+function HB(){}HB.builtin$cls="HB"
+if(!"name" in HB)HB.name="HB"
+$desc=$collectedClasses.HB
+if($desc instanceof Array)$desc=$desc[1]
+HB.prototype=$desc
+HB.prototype.gN=function(receiver){return receiver.target}
+HB.prototype.gLU=function(receiver){return receiver.href}
+function ZJ(){}ZJ.builtin$cls="ZJ"
+if(!"name" in ZJ)ZJ.name="ZJ"
+$desc=$collectedClasses.ZJ
+if($desc instanceof Array)$desc=$desc[1]
+ZJ.prototype=$desc
+ZJ.prototype.gLU=function(receiver){return receiver.href}
+function mU(){}mU.builtin$cls="mU"
+if(!"name" in mU)mU.name="mU"
+$desc=$collectedClasses.mU
+if($desc instanceof Array)$desc=$desc[1]
+mU.prototype=$desc
+function eZ(){}eZ.builtin$cls="eZ"
+if(!"name" in eZ)eZ.name="eZ"
+$desc=$collectedClasses.eZ
+if($desc instanceof Array)$desc=$desc[1]
+eZ.prototype=$desc
+function Fl(){}Fl.builtin$cls="Fl"
+if(!"name" in Fl)Fl.name="Fl"
+$desc=$collectedClasses.Fl
+if($desc instanceof Array)$desc=$desc[1]
+Fl.prototype=$desc
+function y5(){}y5.builtin$cls="y5"
+if(!"name" in y5)y5.name="y5"
+$desc=$collectedClasses.y5
+if($desc instanceof Array)$desc=$desc[1]
+y5.prototype=$desc
+function nV(){}nV.builtin$cls="nV"
+if(!"name" in nV)nV.name="nV"
+$desc=$collectedClasses.nV
+if($desc instanceof Array)$desc=$desc[1]
+nV.prototype=$desc
+function Zc(){}Zc.builtin$cls="Zc"
+if(!"name" in Zc)Zc.name="Zc"
+$desc=$collectedClasses.Zc
+if($desc instanceof Array)$desc=$desc[1]
+Zc.prototype=$desc
+function ui(){}ui.builtin$cls="ui"
+if(!"name" in ui)ui.name="ui"
+$desc=$collectedClasses.ui
+if($desc instanceof Array)$desc=$desc[1]
+ui.prototype=$desc
+function D6(){}D6.builtin$cls="D6"
+if(!"name" in D6)D6.name="D6"
+$desc=$collectedClasses.D6
+if($desc instanceof Array)$desc=$desc[1]
+D6.prototype=$desc
+function DQ(){}DQ.builtin$cls="DQ"
+if(!"name" in DQ)DQ.name="DQ"
+$desc=$collectedClasses.DQ
+if($desc instanceof Array)$desc=$desc[1]
+DQ.prototype=$desc
+function Sm(){}Sm.builtin$cls="Sm"
+if(!"name" in Sm)Sm.name="Sm"
+$desc=$collectedClasses.Sm
+if($desc instanceof Array)$desc=$desc[1]
+Sm.prototype=$desc
+function dx(){}dx.builtin$cls="dx"
+if(!"name" in dx)dx.name="dx"
+$desc=$collectedClasses.dx
+if($desc instanceof Array)$desc=$desc[1]
+dx.prototype=$desc
+function es(){}es.builtin$cls="es"
+if(!"name" in es)es.name="es"
+$desc=$collectedClasses.es
+if($desc instanceof Array)$desc=$desc[1]
+es.prototype=$desc
+function eG(){}eG.builtin$cls="eG"
+if(!"name" in eG)eG.name="eG"
+$desc=$collectedClasses.eG
+if($desc instanceof Array)$desc=$desc[1]
+eG.prototype=$desc
+function lv(){}lv.builtin$cls="lv"
+if(!"name" in lv)lv.name="lv"
+$desc=$collectedClasses.lv
+if($desc instanceof Array)$desc=$desc[1]
+lv.prototype=$desc
+lv.prototype.gr9=function(receiver){return receiver.type}
+lv.prototype.gUQ=function(receiver){return receiver.values}
+function pf(){}pf.builtin$cls="pf"
+if(!"name" in pf)pf.name="pf"
+$desc=$collectedClasses.pf
+if($desc instanceof Array)$desc=$desc[1]
+pf.prototype=$desc
+function NV(){}NV.builtin$cls="NV"
+if(!"name" in NV)NV.name="NV"
+$desc=$collectedClasses.NV
+if($desc instanceof Array)$desc=$desc[1]
+NV.prototype=$desc
+NV.prototype.gkp=function(receiver){return receiver.operator}
+function W1(){}W1.builtin$cls="W1"
+if(!"name" in W1)W1.name="W1"
+$desc=$collectedClasses.W1
+if($desc instanceof Array)$desc=$desc[1]
+W1.prototype=$desc
+function zo(){}zo.builtin$cls="zo"
+if(!"name" in zo)zo.name="zo"
+$desc=$collectedClasses.zo
+if($desc instanceof Array)$desc=$desc[1]
+zo.prototype=$desc
+function wf(){}wf.builtin$cls="wf"
+if(!"name" in wf)wf.name="wf"
+$desc=$collectedClasses.wf
+if($desc instanceof Array)$desc=$desc[1]
+wf.prototype=$desc
+function TU(){}TU.builtin$cls="TU"
+if(!"name" in TU)TU.name="TU"
+$desc=$collectedClasses.TU
+if($desc instanceof Array)$desc=$desc[1]
+TU.prototype=$desc
+function bb(){}bb.builtin$cls="bb"
+if(!"name" in bb)bb.name="bb"
+$desc=$collectedClasses.bb
+if($desc instanceof Array)$desc=$desc[1]
+bb.prototype=$desc
+function VE(){}VE.builtin$cls="VE"
+if(!"name" in VE)VE.name="VE"
+$desc=$collectedClasses.VE
+if($desc instanceof Array)$desc=$desc[1]
+VE.prototype=$desc
+function lc(){}lc.builtin$cls="lc"
+if(!"name" in lc)lc.name="lc"
+$desc=$collectedClasses.lc
+if($desc instanceof Array)$desc=$desc[1]
+lc.prototype=$desc
+function Xu(){}Xu.builtin$cls="Xu"
+if(!"name" in Xu)Xu.name="Xu"
+$desc=$collectedClasses.Xu
+if($desc instanceof Array)$desc=$desc[1]
+Xu.prototype=$desc
+function qM(){}qM.builtin$cls="qM"
+if(!"name" in qM)qM.name="qM"
+$desc=$collectedClasses.qM
+if($desc instanceof Array)$desc=$desc[1]
+qM.prototype=$desc
+function tk(){}tk.builtin$cls="tk"
+if(!"name" in tk)tk.name="tk"
+$desc=$collectedClasses.tk
+if($desc instanceof Array)$desc=$desc[1]
+tk.prototype=$desc
+function me(){}me.builtin$cls="me"
+if(!"name" in me)me.name="me"
+$desc=$collectedClasses.me
+if($desc instanceof Array)$desc=$desc[1]
+me.prototype=$desc
+me.prototype.gLU=function(receiver){return receiver.href}
+function qN(){}qN.builtin$cls="qN"
+if(!"name" in qN)qN.name="qN"
+$desc=$collectedClasses.qN
+if($desc instanceof Array)$desc=$desc[1]
+qN.prototype=$desc
+function nh(){}nh.builtin$cls="nh"
+if(!"name" in nh)nh.name="nh"
+$desc=$collectedClasses.nh
+if($desc instanceof Array)$desc=$desc[1]
+nh.prototype=$desc
+function d4(){}d4.builtin$cls="d4"
+if(!"name" in d4)d4.name="d4"
+$desc=$collectedClasses.d4
+if($desc instanceof Array)$desc=$desc[1]
+d4.prototype=$desc
+d4.prototype.gkp=function(receiver){return receiver.operator}
+function MI(){}MI.builtin$cls="MI"
+if(!"name" in MI)MI.name="MI"
+$desc=$collectedClasses.MI
+if($desc instanceof Array)$desc=$desc[1]
+MI.prototype=$desc
+function ca(){}ca.builtin$cls="ca"
+if(!"name" in ca)ca.name="ca"
+$desc=$collectedClasses.ca
+if($desc instanceof Array)$desc=$desc[1]
+ca.prototype=$desc
+function xX(){}xX.builtin$cls="xX"
+if(!"name" in xX)xX.name="xX"
+$desc=$collectedClasses.xX
+if($desc instanceof Array)$desc=$desc[1]
+xX.prototype=$desc
+function eW(){}eW.builtin$cls="eW"
+if(!"name" in eW)eW.name="eW"
+$desc=$collectedClasses.eW
+if($desc instanceof Array)$desc=$desc[1]
+eW.prototype=$desc
+function um(){}um.builtin$cls="um"
+if(!"name" in um)um.name="um"
+$desc=$collectedClasses.um
+if($desc instanceof Array)$desc=$desc[1]
+um.prototype=$desc
+function Fu(){}Fu.builtin$cls="Fu"
+if(!"name" in Fu)Fu.name="Fu"
+$desc=$collectedClasses.Fu
+if($desc instanceof Array)$desc=$desc[1]
+Fu.prototype=$desc
+Fu.prototype.gr9=function(receiver){return receiver.type}
+function OE(){}OE.builtin$cls="OE"
+if(!"name" in OE)OE.name="OE"
+$desc=$collectedClasses.OE
+if($desc instanceof Array)$desc=$desc[1]
+OE.prototype=$desc
+OE.prototype.gLU=function(receiver){return receiver.href}
+function l6(){}l6.builtin$cls="l6"
+if(!"name" in l6)l6.name="l6"
+$desc=$collectedClasses.l6
+if($desc instanceof Array)$desc=$desc[1]
+l6.prototype=$desc
+function BA(){}BA.builtin$cls="BA"
+if(!"name" in BA)BA.name="BA"
+$desc=$collectedClasses.BA
+if($desc instanceof Array)$desc=$desc[1]
+BA.prototype=$desc
+function zp(){}zp.builtin$cls="zp"
+if(!"name" in zp)zp.name="zp"
+$desc=$collectedClasses.zp
+if($desc instanceof Array)$desc=$desc[1]
+zp.prototype=$desc
+function rE(){}rE.builtin$cls="rE"
+if(!"name" in rE)rE.name="rE"
+$desc=$collectedClasses.rE
+if($desc instanceof Array)$desc=$desc[1]
+rE.prototype=$desc
+rE.prototype.gLU=function(receiver){return receiver.href}
+function CC(){}CC.builtin$cls="CC"
+if(!"name" in CC)CC.name="CC"
+$desc=$collectedClasses.CC
+if($desc instanceof Array)$desc=$desc[1]
+CC.prototype=$desc
+function PQ(){}PQ.builtin$cls="PQ"
+if(!"name" in PQ)PQ.name="PQ"
+$desc=$collectedClasses.PQ
+if($desc instanceof Array)$desc=$desc[1]
+PQ.prototype=$desc
+function uz(){}uz.builtin$cls="uz"
+if(!"name" in uz)uz.name="uz"
+$desc=$collectedClasses.uz
+if($desc instanceof Array)$desc=$desc[1]
+uz.prototype=$desc
+function Yd(){}Yd.builtin$cls="Yd"
+if(!"name" in Yd)Yd.name="Yd"
+$desc=$collectedClasses.Yd
+if($desc instanceof Array)$desc=$desc[1]
+Yd.prototype=$desc
+function U0(){}U0.builtin$cls="U0"
+if(!"name" in U0)U0.name="U0"
+$desc=$collectedClasses.U0
+if($desc instanceof Array)$desc=$desc[1]
+U0.prototype=$desc
+function AD(){}AD.builtin$cls="AD"
+if(!"name" in AD)AD.name="AD"
+$desc=$collectedClasses.AD
+if($desc instanceof Array)$desc=$desc[1]
+AD.prototype=$desc
+function Gr(){}Gr.builtin$cls="Gr"
+if(!"name" in Gr)Gr.name="Gr"
+$desc=$collectedClasses.Gr
+if($desc instanceof Array)$desc=$desc[1]
+Gr.prototype=$desc
+Gr.prototype.gLU=function(receiver){return receiver.href}
+function tc(){}tc.builtin$cls="tc"
+if(!"name" in tc)tc.name="tc"
+$desc=$collectedClasses.tc
+if($desc instanceof Array)$desc=$desc[1]
+tc.prototype=$desc
+function GH(){}GH.builtin$cls="GH"
+if(!"name" in GH)GH.name="GH"
+$desc=$collectedClasses.GH
+if($desc instanceof Array)$desc=$desc[1]
+GH.prototype=$desc
+function lo(){}lo.builtin$cls="lo"
+if(!"name" in lo)lo.name="lo"
+$desc=$collectedClasses.lo
+if($desc instanceof Array)$desc=$desc[1]
+lo.prototype=$desc
+function NJ(){}NJ.builtin$cls="NJ"
+if(!"name" in NJ)NJ.name="NJ"
+$desc=$collectedClasses.NJ
+if($desc instanceof Array)$desc=$desc[1]
+NJ.prototype=$desc
+function nd(){}nd.builtin$cls="nd"
+if(!"name" in nd)nd.name="nd"
+$desc=$collectedClasses.nd
+if($desc instanceof Array)$desc=$desc[1]
+nd.prototype=$desc
+nd.prototype.gr9=function(receiver){return receiver.type}
+nd.prototype.sr9=function(receiver,v){return receiver.type=v}
+nd.prototype.gLU=function(receiver){return receiver.href}
+function vt(){}vt.builtin$cls="vt"
+if(!"name" in vt)vt.name="vt"
+$desc=$collectedClasses.vt
+if($desc instanceof Array)$desc=$desc[1]
+vt.prototype=$desc
+function rQ(){}rQ.builtin$cls="rQ"
+if(!"name" in rQ)rQ.name="rQ"
+$desc=$collectedClasses.rQ
+if($desc instanceof Array)$desc=$desc[1]
+rQ.prototype=$desc
+function EU(){}EU.builtin$cls="EU"
+if(!"name" in EU)EU.name="EU"
+$desc=$collectedClasses.EU
+if($desc instanceof Array)$desc=$desc[1]
+EU.prototype=$desc
+EU.prototype.gr9=function(receiver){return receiver.type}
+EU.prototype.sr9=function(receiver,v){return receiver.type=v}
+function LR(){}LR.builtin$cls="LR"
+if(!"name" in LR)LR.name="LR"
+$desc=$collectedClasses.LR
+if($desc instanceof Array)$desc=$desc[1]
+LR.prototype=$desc
+function MB(){}MB.builtin$cls="MB"
+if(!"name" in MB)MB.name="MB"
+$desc=$collectedClasses.MB
+if($desc instanceof Array)$desc=$desc[1]
+MB.prototype=$desc
+function hy(){}hy.builtin$cls="hy"
+if(!"name" in hy)hy.name="hy"
+$desc=$collectedClasses.hy
+if($desc instanceof Array)$desc=$desc[1]
+hy.prototype=$desc
+function r8(){}r8.builtin$cls="r8"
+if(!"name" in r8)r8.name="r8"
+$desc=$collectedClasses.r8
+if($desc instanceof Array)$desc=$desc[1]
+r8.prototype=$desc
+function aS(){}aS.builtin$cls="aS"
+if(!"name" in aS)aS.name="aS"
+$desc=$collectedClasses.aS
+if($desc instanceof Array)$desc=$desc[1]
+aS.prototype=$desc
+function CG(){}CG.builtin$cls="CG"
+if(!"name" in CG)CG.name="CG"
+$desc=$collectedClasses.CG
+if($desc instanceof Array)$desc=$desc[1]
+CG.prototype=$desc
+function qF(){}qF.builtin$cls="qF"
+if(!"name" in qF)qF.name="qF"
+$desc=$collectedClasses.qF
+if($desc instanceof Array)$desc=$desc[1]
+qF.prototype=$desc
+function MT(){}MT.builtin$cls="MT"
+if(!"name" in MT)MT.name="MT"
+$desc=$collectedClasses.MT
+if($desc instanceof Array)$desc=$desc[1]
+MT.prototype=$desc
+function Rk(){}Rk.builtin$cls="Rk"
+if(!"name" in Rk)Rk.name="Rk"
+$desc=$collectedClasses.Rk
+if($desc instanceof Array)$desc=$desc[1]
+Rk.prototype=$desc
+Rk.prototype.gbP=function(receiver){return receiver.method}
+Rk.prototype.gLU=function(receiver){return receiver.href}
+function Eo(){}Eo.builtin$cls="Eo"
+if(!"name" in Eo)Eo.name="Eo"
+$desc=$collectedClasses.Eo
+if($desc instanceof Array)$desc=$desc[1]
+Eo.prototype=$desc
+function Dn(){}Dn.builtin$cls="Dn"
+if(!"name" in Dn)Dn.name="Dn"
+$desc=$collectedClasses.Dn
+if($desc instanceof Array)$desc=$desc[1]
+Dn.prototype=$desc
+function UD(){}UD.builtin$cls="UD"
+if(!"name" in UD)UD.name="UD"
+$desc=$collectedClasses.UD
+if($desc instanceof Array)$desc=$desc[1]
+UD.prototype=$desc
+UD.prototype.gLU=function(receiver){return receiver.href}
+function ZD(){}ZD.builtin$cls="ZD"
+if(!"name" in ZD)ZD.name="ZD"
+$desc=$collectedClasses.ZD
+if($desc instanceof Array)$desc=$desc[1]
+ZD.prototype=$desc
+function NE(){}NE.builtin$cls="NE"
+if(!"name" in NE)NE.name="NE"
+$desc=$collectedClasses.NE
+if($desc instanceof Array)$desc=$desc[1]
+NE.prototype=$desc
+function wD(){}wD.builtin$cls="wD"
+if(!"name" in wD)wD.name="wD"
+$desc=$collectedClasses.wD
+if($desc instanceof Array)$desc=$desc[1]
+wD.prototype=$desc
+wD.prototype.gLU=function(receiver){return receiver.href}
+function BD(){}BD.builtin$cls="BD"
+if(!"name" in BD)BD.name="BD"
+$desc=$collectedClasses.BD
+if($desc instanceof Array)$desc=$desc[1]
+BD.prototype=$desc
+function vRT(){}vRT.builtin$cls="vRT"
+if(!"name" in vRT)vRT.name="vRT"
+$desc=$collectedClasses.vRT
+if($desc instanceof Array)$desc=$desc[1]
+vRT.prototype=$desc
+function Fi(){}Fi.builtin$cls="Fi"
+if(!"name" in Fi)Fi.name="Fi"
+$desc=$collectedClasses.Fi
+if($desc instanceof Array)$desc=$desc[1]
+Fi.prototype=$desc
+function Qr(){}Qr.builtin$cls="Qr"
+if(!"name" in Qr)Qr.name="Qr"
+$desc=$collectedClasses.Qr
+if($desc instanceof Array)$desc=$desc[1]
+Qr.prototype=$desc
+function mj(){}mj.builtin$cls="mj"
+if(!"name" in mj)mj.name="mj"
+$desc=$collectedClasses.mj
+if($desc instanceof Array)$desc=$desc[1]
+mj.prototype=$desc
+function cB(){}cB.builtin$cls="cB"
+if(!"name" in cB)cB.name="cB"
+$desc=$collectedClasses.cB
+if($desc instanceof Array)$desc=$desc[1]
+cB.prototype=$desc
+function uY(){}uY.builtin$cls="uY"
+if(!"name" in uY)uY.name="uY"
+$desc=$collectedClasses.uY
+if($desc instanceof Array)$desc=$desc[1]
+uY.prototype=$desc
+function yR(){}yR.builtin$cls="yR"
+if(!"name" in yR)yR.name="yR"
+$desc=$collectedClasses.yR
+if($desc instanceof Array)$desc=$desc[1]
+yR.prototype=$desc
+function AX(){}AX.builtin$cls="AX"
+if(!"name" in AX)AX.name="AX"
+$desc=$collectedClasses.AX
+if($desc instanceof Array)$desc=$desc[1]
+AX.prototype=$desc
+function xJ(){}xJ.builtin$cls="xJ"
+if(!"name" in xJ)xJ.name="xJ"
+$desc=$collectedClasses.xJ
+if($desc instanceof Array)$desc=$desc[1]
+xJ.prototype=$desc
+function l4(){}l4.builtin$cls="l4"
+if(!"name" in l4)l4.name="l4"
+$desc=$collectedClasses.l4
+if($desc instanceof Array)$desc=$desc[1]
+l4.prototype=$desc
+function Et(){}Et.builtin$cls="Et"
+if(!"name" in Et)Et.name="Et"
+$desc=$collectedClasses.Et
+if($desc instanceof Array)$desc=$desc[1]
+Et.prototype=$desc
+function NC(){}NC.builtin$cls="NC"
+if(!"name" in NC)NC.name="NC"
+$desc=$collectedClasses.NC
+if($desc instanceof Array)$desc=$desc[1]
+NC.prototype=$desc
+function nb(){}nb.builtin$cls="nb"
+if(!"name" in nb)nb.name="nb"
+$desc=$collectedClasses.nb
+if($desc instanceof Array)$desc=$desc[1]
+nb.prototype=$desc
+function By(){}By.builtin$cls="By"
+if(!"name" in By)By.name="By"
+$desc=$collectedClasses.By
+if($desc instanceof Array)$desc=$desc[1]
+By.prototype=$desc
+function xt(){}xt.builtin$cls="xt"
+if(!"name" in xt)xt.name="xt"
+$desc=$collectedClasses.xt
+if($desc instanceof Array)$desc=$desc[1]
+xt.prototype=$desc
+function tG(){}tG.builtin$cls="tG"
+if(!"name" in tG)tG.name="tG"
+$desc=$collectedClasses.tG
+if($desc instanceof Array)$desc=$desc[1]
+tG.prototype=$desc
+function P0(){}P0.builtin$cls="P0"
+if(!"name" in P0)P0.name="P0"
+$desc=$collectedClasses.P0
+if($desc instanceof Array)$desc=$desc[1]
+P0.prototype=$desc
+function Jq(){}Jq.builtin$cls="Jq"
+if(!"name" in Jq)Jq.name="Jq"
+$desc=$collectedClasses.Jq
+if($desc instanceof Array)$desc=$desc[1]
+Jq.prototype=$desc
+function Xr(){}Xr.builtin$cls="Xr"
+if(!"name" in Xr)Xr.name="Xr"
+$desc=$collectedClasses.Xr
+if($desc instanceof Array)$desc=$desc[1]
+Xr.prototype=$desc
+function qD(){}qD.builtin$cls="qD"
+if(!"name" in qD)qD.name="qD"
+$desc=$collectedClasses.qD
+if($desc instanceof Array)$desc=$desc[1]
+qD.prototype=$desc
+function Cf(){}Cf.builtin$cls="Cf"
+if(!"name" in Cf)Cf.name="Cf"
+$desc=$collectedClasses.Cf
+if($desc instanceof Array)$desc=$desc[1]
+Cf.prototype=$desc
+Cf.prototype.gtT=function(receiver){return receiver.code}
+Cf.prototype.gG1=function(receiver){return receiver.message}
+function I2(){}I2.builtin$cls="I2"
+if(!"name" in I2)I2.name="I2"
+$desc=$collectedClasses.I2
+if($desc instanceof Array)$desc=$desc[1]
+I2.prototype=$desc
+function AS(){}AS.builtin$cls="AS"
+if(!"name" in AS)AS.name="AS"
+$desc=$collectedClasses.AS
+if($desc instanceof Array)$desc=$desc[1]
+AS.prototype=$desc
+function Kq(){}Kq.builtin$cls="Kq"
+if(!"name" in Kq)Kq.name="Kq"
+$desc=$collectedClasses.Kq
+if($desc instanceof Array)$desc=$desc[1]
+Kq.prototype=$desc
+function oI(){}oI.builtin$cls="oI"
+if(!"name" in oI)oI.name="oI"
+$desc=$collectedClasses.oI
+if($desc instanceof Array)$desc=$desc[1]
+oI.prototype=$desc
+function mJ(){}mJ.builtin$cls="mJ"
+if(!"name" in mJ)mJ.name="mJ"
+$desc=$collectedClasses.mJ
+if($desc instanceof Array)$desc=$desc[1]
+mJ.prototype=$desc
+function rF(){}rF.builtin$cls="rF"
+if(!"name" in rF)rF.name="rF"
+$desc=$collectedClasses.rF
+if($desc instanceof Array)$desc=$desc[1]
+rF.prototype=$desc
+function vi(){}vi.builtin$cls="vi"
+if(!"name" in vi)vi.name="vi"
+$desc=$collectedClasses.vi
+if($desc instanceof Array)$desc=$desc[1]
+vi.prototype=$desc
+function ZX(){}ZX.builtin$cls="ZX"
+if(!"name" in ZX)ZX.name="ZX"
+$desc=$collectedClasses.ZX
+if($desc instanceof Array)$desc=$desc[1]
+ZX.prototype=$desc
+function ycx(){}ycx.builtin$cls="ycx"
+if(!"name" in ycx)ycx.name="ycx"
+$desc=$collectedClasses.ycx
+if($desc instanceof Array)$desc=$desc[1]
+ycx.prototype=$desc
+function nE(){}nE.builtin$cls="nE"
+if(!"name" in nE)nE.name="nE"
+$desc=$collectedClasses.nE
+if($desc instanceof Array)$desc=$desc[1]
+nE.prototype=$desc
+function zt(){}zt.builtin$cls="zt"
+if(!"name" in zt)zt.name="zt"
+$desc=$collectedClasses.zt
+if($desc instanceof Array)$desc=$desc[1]
+zt.prototype=$desc
+function F0(){}F0.builtin$cls="F0"
+if(!"name" in F0)F0.name="F0"
+$desc=$collectedClasses.F0
+if($desc instanceof Array)$desc=$desc[1]
+F0.prototype=$desc
+function Lt(tT){this.tT=tT}Lt.builtin$cls="Lt"
+if(!"name" in Lt)Lt.name="Lt"
+$desc=$collectedClasses.Lt
+if($desc instanceof Array)$desc=$desc[1]
+Lt.prototype=$desc
+Lt.prototype.gtT=function(receiver){return this.tT}
+function Gv(){}Gv.builtin$cls="Gv"
+if(!"name" in Gv)Gv.name="Gv"
+$desc=$collectedClasses.Gv
+if($desc instanceof Array)$desc=$desc[1]
+Gv.prototype=$desc
+function kn(){}kn.builtin$cls="bool"
+if(!"name" in kn)kn.name="kn"
+$desc=$collectedClasses.kn
+if($desc instanceof Array)$desc=$desc[1]
+kn.prototype=$desc
+function PE(){}PE.builtin$cls="PE"
+if(!"name" in PE)PE.name="PE"
+$desc=$collectedClasses.PE
+if($desc instanceof Array)$desc=$desc[1]
+PE.prototype=$desc
+function QI(){}QI.builtin$cls="QI"
+if(!"name" in QI)QI.name="QI"
+$desc=$collectedClasses.QI
+if($desc instanceof Array)$desc=$desc[1]
+QI.prototype=$desc
+function FP(){}FP.builtin$cls="FP"
+if(!"name" in FP)FP.name="FP"
+$desc=$collectedClasses.FP
+if($desc instanceof Array)$desc=$desc[1]
+FP.prototype=$desc
+function is(){}is.builtin$cls="is"
+if(!"name" in is)is.name="is"
+$desc=$collectedClasses.is
+if($desc instanceof Array)$desc=$desc[1]
+is.prototype=$desc
+function Q(){}Q.builtin$cls="List"
+if(!"name" in Q)Q.name="Q"
+$desc=$collectedClasses.Q
+if($desc instanceof Array)$desc=$desc[1]
+Q.prototype=$desc
+function jx(){}jx.builtin$cls="jx"
+if(!"name" in jx)jx.name="jx"
+$desc=$collectedClasses.jx
+if($desc instanceof Array)$desc=$desc[1]
+jx.prototype=$desc
+function ZC(){}ZC.builtin$cls="ZC"
+if(!"name" in ZC)ZC.name="ZC"
+$desc=$collectedClasses.ZC
+if($desc instanceof Array)$desc=$desc[1]
+ZC.prototype=$desc
+function Jt(){}Jt.builtin$cls="Jt"
+if(!"name" in Jt)Jt.name="Jt"
+$desc=$collectedClasses.Jt
+if($desc instanceof Array)$desc=$desc[1]
+Jt.prototype=$desc
+function P(){}P.builtin$cls="num"
+if(!"name" in P)P.name="P"
+$desc=$collectedClasses.P
+if($desc instanceof Array)$desc=$desc[1]
+P.prototype=$desc
+function im(){}im.builtin$cls="int"
+if(!"name" in im)im.name="im"
+$desc=$collectedClasses.im
+if($desc instanceof Array)$desc=$desc[1]
+im.prototype=$desc
+function Pp(){}Pp.builtin$cls="double"
+if(!"name" in Pp)Pp.name="Pp"
+$desc=$collectedClasses.Pp
+if($desc instanceof Array)$desc=$desc[1]
+Pp.prototype=$desc
+function O(){}O.builtin$cls="String"
+if(!"name" in O)O.name="O"
+$desc=$collectedClasses.O
+if($desc instanceof Array)$desc=$desc[1]
+O.prototype=$desc
+function PK(a){this.a=a}PK.builtin$cls="PK"
+if(!"name" in PK)PK.name="PK"
+$desc=$collectedClasses.PK
+if($desc instanceof Array)$desc=$desc[1]
+PK.prototype=$desc
+function JO(b){this.b=b}JO.builtin$cls="JO"
+if(!"name" in JO)JO.name="JO"
+$desc=$collectedClasses.JO
+if($desc instanceof Array)$desc=$desc[1]
+JO.prototype=$desc
+function O2(Hg,oL,hJ,N0,Nr,Xz,vu,EF,ji,i2,rj,XC,w2){this.Hg=Hg
+this.oL=oL
+this.hJ=hJ
+this.N0=N0
+this.Nr=Nr
+this.Xz=Xz
+this.vu=vu
+this.EF=EF
+this.ji=ji
+this.i2=i2
+this.rj=rj
+this.XC=XC
+this.w2=w2}O2.builtin$cls="O2"
+if(!"name" in O2)O2.name="O2"
+$desc=$collectedClasses.O2
+if($desc instanceof Array)$desc=$desc[1]
+O2.prototype=$desc
+O2.prototype.gi2=function(){return this.i2}
+O2.prototype.si2=function(v){return this.i2=v}
+function aX(jO,Gx,En){this.jO=jO
+this.Gx=Gx
+this.En=En}aX.builtin$cls="aX"
+if(!"name" in aX)aX.name="aX"
+$desc=$collectedClasses.aX
+if($desc instanceof Array)$desc=$desc[1]
+aX.prototype=$desc
+aX.prototype.gjO=function(receiver){return this.jO}
+aX.prototype.sjO=function(receiver,v){return this.jO=v}
+aX.prototype.gEn=function(){return this.En}
+function cC(Rk,bZ){this.Rk=Rk
+this.bZ=bZ}cC.builtin$cls="cC"
+if(!"name" in cC)cC.name="cC"
+$desc=$collectedClasses.cC
+if($desc instanceof Array)$desc=$desc[1]
+cC.prototype=$desc
+function RA(a){this.a=a}RA.builtin$cls="RA"
+if(!"name" in RA)RA.name="RA"
+$desc=$collectedClasses.RA
+if($desc instanceof Array)$desc=$desc[1]
+RA.prototype=$desc
+function IY(F1,i3,G1){this.F1=F1
+this.i3=i3
+this.G1=G1}IY.builtin$cls="IY"
+if(!"name" in IY)IY.name="IY"
+$desc=$collectedClasses.IY
+if($desc instanceof Array)$desc=$desc[1]
+IY.prototype=$desc
+IY.prototype.gF1=function(receiver){return this.F1}
+IY.prototype.sF1=function(receiver,v){return this.F1=v}
+IY.prototype.gG1=function(receiver){return this.G1}
+IY.prototype.sG1=function(receiver,v){return this.G1=v}
+function JH(){}JH.builtin$cls="JH"
+if(!"name" in JH)JH.name="JH"
+$desc=$collectedClasses.JH
+if($desc instanceof Array)$desc=$desc[1]
+JH.prototype=$desc
+function jl(a,b,c,d,e){this.a=a
+this.b=b
+this.c=c
+this.d=d
+this.e=e}jl.builtin$cls="jl"
+if(!"name" in jl)jl.name="jl"
+$desc=$collectedClasses.jl
+if($desc instanceof Array)$desc=$desc[1]
+jl.prototype=$desc
+function Iy(){}Iy.builtin$cls="Iy"
+if(!"name" in Iy)Iy.name="Iy"
+$desc=$collectedClasses.Iy
+if($desc instanceof Array)$desc=$desc[1]
+Iy.prototype=$desc
+function JM(JE,tv){this.JE=JE
+this.tv=tv}JM.builtin$cls="JM"
+if(!"name" in JM)JM.name="JM"
+$desc=$collectedClasses.JM
+if($desc instanceof Array)$desc=$desc[1]
+JM.prototype=$desc
+function Ua(b,c){this.b=b
+this.c=c}Ua.builtin$cls="Ua"
+if(!"name" in Ua)Ua.name="Ua"
+$desc=$collectedClasses.Ua
+if($desc instanceof Array)$desc=$desc[1]
+Ua.prototype=$desc
+function JG(a,d,e){this.a=a
+this.d=d
+this.e=e}JG.builtin$cls="JG"
+if(!"name" in JG)JG.name="JG"
+$desc=$collectedClasses.JG
+if($desc instanceof Array)$desc=$desc[1]
+JG.prototype=$desc
+function ns(Ws,bv,tv){this.Ws=Ws
+this.bv=bv
+this.tv=tv}ns.builtin$cls="ns"
+if(!"name" in ns)ns.name="ns"
+$desc=$collectedClasses.ns
+if($desc instanceof Array)$desc=$desc[1]
+ns.prototype=$desc
+function wd(a,b){this.a=a
+this.b=b}wd.builtin$cls="wd"
+if(!"name" in wd)wd.name="wd"
+$desc=$collectedClasses.wd
+if($desc instanceof Array)$desc=$desc[1]
+wd.prototype=$desc
+function TA(ng,da){this.ng=ng
+this.da=da}TA.builtin$cls="TA"
+if(!"name" in TA)TA.name="TA"
+$desc=$collectedClasses.TA
+if($desc instanceof Array)$desc=$desc[1]
+TA.prototype=$desc
+TA.prototype.gng=function(){return this.ng}
+TA.prototype.gda=function(){return this.da}
+function YP(wc,nn,lv,Pp){this.wc=wc
+this.nn=nn
+this.lv=lv
+this.Pp=Pp}YP.builtin$cls="YP"
+$desc=$collectedClasses.YP
+if($desc instanceof Array)$desc=$desc[1]
+YP.prototype=$desc
+function yc(a){this.a=a}yc.builtin$cls="yc"
+if(!"name" in yc)yc.name="yc"
+$desc=$collectedClasses.yc
+if($desc instanceof Array)$desc=$desc[1]
+yc.prototype=$desc
+function I9(Gx,mR){this.Gx=Gx
+this.mR=mR}I9.builtin$cls="I9"
+if(!"name" in I9)I9.name="I9"
+$desc=$collectedClasses.I9
+if($desc instanceof Array)$desc=$desc[1]
+I9.prototype=$desc
+function Bj(CN,mR){this.CN=CN
+this.mR=mR}Bj.builtin$cls="Bj"
+if(!"name" in Bj)Bj.name="Bj"
+$desc=$collectedClasses.Bj
+if($desc instanceof Array)$desc=$desc[1]
+Bj.prototype=$desc
+function NO(mR){this.mR=mR}NO.builtin$cls="NO"
+if(!"name" in NO)NO.name="NO"
+$desc=$collectedClasses.NO
+if($desc instanceof Array)$desc=$desc[1]
+NO.prototype=$desc
+function II(RZ){this.RZ=RZ}II.builtin$cls="II"
+if(!"name" in II)II.name="II"
+$desc=$collectedClasses.II
+if($desc instanceof Array)$desc=$desc[1]
+II.prototype=$desc
+function aJ(MD){this.MD=MD}aJ.builtin$cls="aJ"
+if(!"name" in aJ)aJ.name="aJ"
+$desc=$collectedClasses.aJ
+if($desc instanceof Array)$desc=$desc[1]
+aJ.prototype=$desc
+function X1(){}X1.builtin$cls="X1"
+if(!"name" in X1)X1.name="X1"
+$desc=$collectedClasses.X1
+if($desc instanceof Array)$desc=$desc[1]
+X1.prototype=$desc
+function HU(){}HU.builtin$cls="HU"
+if(!"name" in HU)HU.name="HU"
+$desc=$collectedClasses.HU
+if($desc instanceof Array)$desc=$desc[1]
+HU.prototype=$desc
+function Pm(wc,nn,lv,Pp){this.wc=wc
+this.nn=nn
+this.lv=lv
+this.Pp=Pp}Pm.builtin$cls="Pm"
+$desc=$collectedClasses.Pm
+if($desc instanceof Array)$desc=$desc[1]
+Pm.prototype=$desc
+function oo(){}oo.builtin$cls="oo"
+if(!"name" in oo)oo.name="oo"
+$desc=$collectedClasses.oo
+if($desc instanceof Array)$desc=$desc[1]
+oo.prototype=$desc
+function OW(a,b){this.a=a
+this.b=b}OW.builtin$cls="OW"
+if(!"name" in OW)OW.name="OW"
+$desc=$collectedClasses.OW
+if($desc instanceof Array)$desc=$desc[1]
+OW.prototype=$desc
+function Dd(){}Dd.builtin$cls="Dd"
+if(!"name" in Dd)Dd.name="Dd"
+$desc=$collectedClasses.Dd
+if($desc instanceof Array)$desc=$desc[1]
+Dd.prototype=$desc
+function AP(){}AP.builtin$cls="AP"
+if(!"name" in AP)AP.name="AP"
+$desc=$collectedClasses.AP
+if($desc instanceof Array)$desc=$desc[1]
+AP.prototype=$desc
+function yH(Kf,zu,p9){this.Kf=Kf
+this.zu=zu
+this.p9=p9}yH.builtin$cls="yH"
+if(!"name" in yH)yH.name="yH"
+$desc=$collectedClasses.yH
+if($desc instanceof Array)$desc=$desc[1]
+yH.prototype=$desc
+function FA(a,b){this.a=a
+this.b=b}FA.builtin$cls="FA"
+if(!"name" in FA)FA.name="FA"
+$desc=$collectedClasses.FA
+if($desc instanceof Array)$desc=$desc[1]
+FA.prototype=$desc
+function Av(c,d){this.c=c
+this.d=d}Av.builtin$cls="Av"
+if(!"name" in Av)Av.name="Av"
+$desc=$collectedClasses.Av
+if($desc instanceof Array)$desc=$desc[1]
+Av.prototype=$desc
+function oH(){}oH.builtin$cls="oH"
+if(!"name" in oH)oH.name="oH"
+$desc=$collectedClasses.oH
+if($desc instanceof Array)$desc=$desc[1]
+oH.prototype=$desc
+function LP(B,il,js){this.B=B
+this.il=il
+this.js=js}LP.builtin$cls="LP"
+if(!"name" in LP)LP.name="LP"
+$desc=$collectedClasses.LP
+if($desc instanceof Array)$desc=$desc[1]
+LP.prototype=$desc
+LP.prototype.gB=function(receiver){return this.B}
+function c2(a,b){this.a=a
+this.b=b}c2.builtin$cls="c2"
+if(!"name" in c2)c2.name="c2"
+$desc=$collectedClasses.c2
+if($desc instanceof Array)$desc=$desc[1]
+c2.prototype=$desc
+function WT(a,b){this.a=a
+this.b=b}WT.builtin$cls="WT"
+if(!"name" in WT)WT.name="WT"
+$desc=$collectedClasses.WT
+if($desc instanceof Array)$desc=$desc[1]
+WT.prototype=$desc
+function p8(a){this.a=a}p8.builtin$cls="p8"
+if(!"name" in p8)p8.name="p8"
+$desc=$collectedClasses.p8
+if($desc instanceof Array)$desc=$desc[1]
+p8.prototype=$desc
+function XR(Nt){this.Nt=Nt}XR.builtin$cls="XR"
+if(!"name" in XR)XR.name="XR"
+$desc=$collectedClasses.XR
+if($desc instanceof Array)$desc=$desc[1]
+XR.prototype=$desc
+function LI(t5,Qp,GF,FQ,md,mG){this.t5=t5
+this.Qp=Qp
+this.GF=GF
+this.FQ=FQ
+this.md=md
+this.mG=mG}LI.builtin$cls="LI"
+if(!"name" in LI)LI.name="LI"
+$desc=$collectedClasses.LI
+if($desc instanceof Array)$desc=$desc[1]
+LI.prototype=$desc
+function A2(mr,eK,Ot){this.mr=mr
+this.eK=eK
+this.Ot=Ot}A2.builtin$cls="A2"
+if(!"name" in A2)A2.name="A2"
+$desc=$collectedClasses.A2
+if($desc instanceof Array)$desc=$desc[1]
+A2.prototype=$desc
+function F3(e0){this.e0=e0}F3.builtin$cls="F3"
+if(!"name" in F3)F3.name="F3"
+$desc=$collectedClasses.F3
+if($desc instanceof Array)$desc=$desc[1]
+F3.prototype=$desc
+F3.prototype.se0=function(v){return this.e0=v}
+function u8(b){this.b=b}u8.builtin$cls="u8"
+if(!"name" in u8)u8.name="u8"
+$desc=$collectedClasses.u8
+if($desc instanceof Array)$desc=$desc[1]
+u8.prototype=$desc
+function Gi(c,d,e){this.c=c
+this.d=d
+this.e=e}Gi.builtin$cls="Gi"
+if(!"name" in Gi)Gi.name="Gi"
+$desc=$collectedClasses.Gi
+if($desc instanceof Array)$desc=$desc[1]
+Gi.prototype=$desc
+function t2(a,f,g){this.a=a
+this.f=f
+this.g=g}t2.builtin$cls="t2"
+if(!"name" in t2)t2.name="t2"
+$desc=$collectedClasses.t2
+if($desc instanceof Array)$desc=$desc[1]
+t2.prototype=$desc
+function Zr(i9,FQ,Vv,yB,Sp,lv){this.i9=i9
+this.FQ=FQ
+this.Vv=Vv
+this.yB=yB
+this.Sp=Sp
+this.lv=lv}Zr.builtin$cls="Zr"
+if(!"name" in Zr)Zr.name="Zr"
+$desc=$collectedClasses.Zr
+if($desc instanceof Array)$desc=$desc[1]
+Zr.prototype=$desc
+function ZQ(Zf,Sp){this.Zf=Zf
+this.Sp=Sp}ZQ.builtin$cls="ZQ"
+if(!"name" in ZQ)ZQ.name="ZQ"
+$desc=$collectedClasses.ZQ
+if($desc instanceof Array)$desc=$desc[1]
+ZQ.prototype=$desc
+function az(Zf,Sp,lv){this.Zf=Zf
+this.Sp=Sp
+this.lv=lv}az.builtin$cls="az"
+if(!"name" in az)az.name="az"
+$desc=$collectedClasses.az
+if($desc instanceof Array)$desc=$desc[1]
+az.prototype=$desc
+function vV(Zf){this.Zf=Zf}vV.builtin$cls="vV"
+if(!"name" in vV)vV.name="vV"
+$desc=$collectedClasses.vV
+if($desc instanceof Array)$desc=$desc[1]
+vV.prototype=$desc
+function Hk(a){this.a=a}Hk.builtin$cls="Hk"
+if(!"name" in Hk)Hk.name="Hk"
+$desc=$collectedClasses.Hk
+if($desc instanceof Array)$desc=$desc[1]
+Hk.prototype=$desc
+function XO(MP,bQ){this.MP=MP
+this.bQ=bQ}XO.builtin$cls="XO"
+if(!"name" in XO)XO.name="XO"
+$desc=$collectedClasses.XO
+if($desc instanceof Array)$desc=$desc[1]
+XO.prototype=$desc
+function dr(a){this.a=a}dr.builtin$cls="dr"
+if(!"name" in dr)dr.name="dr"
+$desc=$collectedClasses.dr
+if($desc instanceof Array)$desc=$desc[1]
+dr.prototype=$desc
+function TL(b,c){this.b=b
+this.c=c}TL.builtin$cls="TL"
+if(!"name" in TL)TL.name="TL"
+$desc=$collectedClasses.TL
+if($desc instanceof Array)$desc=$desc[1]
+TL.prototype=$desc
+function KX(d,e,f){this.d=d
+this.e=e
+this.f=f}KX.builtin$cls="KX"
+if(!"name" in KX)KX.name="KX"
+$desc=$collectedClasses.KX
+if($desc instanceof Array)$desc=$desc[1]
+KX.prototype=$desc
+function uZ(g,h,i,j){this.g=g
+this.h=h
+this.i=i
+this.j=j}uZ.builtin$cls="uZ"
+if(!"name" in uZ)uZ.name="uZ"
+$desc=$collectedClasses.uZ
+if($desc instanceof Array)$desc=$desc[1]
+uZ.prototype=$desc
+function OQ(k,l,m,n,o){this.k=k
+this.l=l
+this.m=m
+this.n=n
+this.o=o}OQ.builtin$cls="OQ"
+if(!"name" in OQ)OQ.name="OQ"
+$desc=$collectedClasses.OQ
+if($desc instanceof Array)$desc=$desc[1]
+OQ.prototype=$desc
+function Tp(){}Tp.builtin$cls="Tp"
+if(!"name" in Tp)Tp.name="Tp"
+$desc=$collectedClasses.Tp
+if($desc instanceof Array)$desc=$desc[1]
+Tp.prototype=$desc
+function v(wc,nn,lv,Pp){this.wc=wc
+this.nn=nn
+this.lv=lv
+this.Pp=Pp}v.builtin$cls="v"
+if(!"name" in v)v.name="v"
+$desc=$collectedClasses.v
+if($desc instanceof Array)$desc=$desc[1]
+v.prototype=$desc
+v.prototype.gwc=function(){return this.wc}
+v.prototype.gnn=function(){return this.nn}
+v.prototype.gPp=function(receiver){return this.Pp}
+function Z3(Jy){this.Jy=Jy}Z3.builtin$cls="Z3"
+if(!"name" in Z3)Z3.name="Z3"
+$desc=$collectedClasses.Z3
+if($desc instanceof Array)$desc=$desc[1]
+Z3.prototype=$desc
+function D2(Jy){this.Jy=Jy}D2.builtin$cls="D2"
+if(!"name" in D2)D2.name="D2"
+$desc=$collectedClasses.D2
+if($desc instanceof Array)$desc=$desc[1]
+D2.prototype=$desc
+function GT(oc){this.oc=oc}GT.builtin$cls="GT"
+if(!"name" in GT)GT.name="GT"
+$desc=$collectedClasses.GT
+if($desc instanceof Array)$desc=$desc[1]
+GT.prototype=$desc
+GT.prototype.goc=function(receiver){return this.oc}
+function Pe(G1){this.G1=G1}Pe.builtin$cls="Pe"
+if(!"name" in Pe)Pe.name="Pe"
+$desc=$collectedClasses.Pe
+if($desc instanceof Array)$desc=$desc[1]
+Pe.prototype=$desc
+Pe.prototype.gG1=function(receiver){return this.G1}
+function Eq(G1){this.G1=G1}Eq.builtin$cls="Eq"
+if(!"name" in Eq)Eq.name="Eq"
+$desc=$collectedClasses.Eq
+if($desc instanceof Array)$desc=$desc[1]
+Eq.prototype=$desc
+Eq.prototype.gG1=function(receiver){return this.G1}
+function cu(IE,rE){this.IE=IE
+this.rE=rE}cu.builtin$cls="cu"
+if(!"name" in cu)cu.name="cu"
+$desc=$collectedClasses.cu
+if($desc instanceof Array)$desc=$desc[1]
+cu.prototype=$desc
+cu.prototype.gIE=function(){return this.IE}
+function Lm(h7,oc,kU){this.h7=h7
+this.oc=oc
+this.kU=kU}Lm.builtin$cls="Lm"
+if(!"name" in Lm)Lm.name="Lm"
+$desc=$collectedClasses.Lm
+if($desc instanceof Array)$desc=$desc[1]
+Lm.prototype=$desc
+Lm.prototype.gh7=function(){return this.h7}
+Lm.prototype.goc=function(receiver){return this.oc}
+Lm.prototype.gkU=function(receiver){return this.kU}
+function dC(a){this.a=a}dC.builtin$cls="dC"
+if(!"name" in dC)dC.name="dC"
+$desc=$collectedClasses.dC
+if($desc instanceof Array)$desc=$desc[1]
+dC.prototype=$desc
+function wN(b){this.b=b}wN.builtin$cls="wN"
+if(!"name" in wN)wN.name="wN"
+$desc=$collectedClasses.wN
+if($desc instanceof Array)$desc=$desc[1]
+wN.prototype=$desc
+function VX(c){this.c=c}VX.builtin$cls="VX"
+if(!"name" in VX)VX.name="VX"
+$desc=$collectedClasses.VX
+if($desc instanceof Array)$desc=$desc[1]
+VX.prototype=$desc
+function VR(SQ,h2,fX){this.SQ=SQ
+this.h2=h2
+this.fX=fX}VR.builtin$cls="VR"
+if(!"name" in VR)VR.name="VR"
+$desc=$collectedClasses.VR
+if($desc instanceof Array)$desc=$desc[1]
+VR.prototype=$desc
+function EK(zO,oH){this.zO=zO
+this.oH=oH}EK.builtin$cls="EK"
+if(!"name" in EK)EK.name="EK"
+$desc=$collectedClasses.EK
+if($desc instanceof Array)$desc=$desc[1]
+EK.prototype=$desc
+function KW(td,BZ){this.td=td
+this.BZ=BZ}KW.builtin$cls="KW"
+if(!"name" in KW)KW.name="KW"
+$desc=$collectedClasses.KW
+if($desc instanceof Array)$desc=$desc[1]
+KW.prototype=$desc
+function Pb(EW,BZ,Jz){this.EW=EW
+this.BZ=BZ
+this.Jz=Jz}Pb.builtin$cls="Pb"
+if(!"name" in Pb)Pb.name="Pb"
+$desc=$collectedClasses.Pb
+if($desc instanceof Array)$desc=$desc[1]
+Pb.prototype=$desc
+function tQ(M,J9,zO){this.M=M
+this.J9=J9
+this.zO=zO}tQ.builtin$cls="tQ"
+if(!"name" in tQ)tQ.name="tQ"
+$desc=$collectedClasses.tQ
+if($desc instanceof Array)$desc=$desc[1]
+tQ.prototype=$desc
+function aC(FJ,VJ,Ai,tH,VJ,Ai,VJ,Ai,ZI,uN,z3,TQ,Vk,Ye,mT,KM){this.FJ=FJ
+this.VJ=VJ
+this.Ai=Ai
+this.tH=tH
+this.VJ=VJ
+this.Ai=Ai
+this.VJ=VJ
+this.Ai=Ai
+this.ZI=ZI
+this.uN=uN
+this.z3=z3
+this.TQ=TQ
+this.Vk=Vk
+this.Ye=Ye
+this.mT=mT
+this.KM=KM}aC.builtin$cls="aC"
+if(!"name" in aC)aC.name="aC"
+$desc=$collectedClasses.aC
+if($desc instanceof Array)$desc=$desc[1]
+aC.prototype=$desc
+aC.prototype.gFJ=function(receiver){return receiver.FJ}
+aC.prototype.gFJ.$reflectable=1
+aC.prototype.sFJ=function(receiver,v){return receiver.FJ=v}
+aC.prototype.sFJ.$reflectable=1
+function Vf(){}Vf.builtin$cls="Vf"
+if(!"name" in Vf)Vf.name="Vf"
+$desc=$collectedClasses.Vf
+if($desc instanceof Array)$desc=$desc[1]
+Vf.prototype=$desc
+function Be(Zw,VJ,Ai,tH,VJ,Ai,VJ,Ai,ZI,uN,z3,TQ,Vk,Ye,mT,KM){this.Zw=Zw
+this.VJ=VJ
+this.Ai=Ai
+this.tH=tH
+this.VJ=VJ
+this.Ai=Ai
+this.VJ=VJ
+this.Ai=Ai
+this.ZI=ZI
+this.uN=uN
+this.z3=z3
+this.TQ=TQ
+this.Vk=Vk
+this.Ye=Ye
+this.mT=mT
+this.KM=KM}Be.builtin$cls="Be"
+if(!"name" in Be)Be.name="Be"
+$desc=$collectedClasses.Be
+if($desc instanceof Array)$desc=$desc[1]
+Be.prototype=$desc
+Be.prototype.gZw=function(receiver){return receiver.Zw}
+Be.prototype.gZw.$reflectable=1
+Be.prototype.sZw=function(receiver,v){return receiver.Zw=v}
+Be.prototype.sZw.$reflectable=1
+function tu(){}tu.builtin$cls="tu"
+if(!"name" in tu)tu.name="tu"
+$desc=$collectedClasses.tu
+if($desc instanceof Array)$desc=$desc[1]
+tu.prototype=$desc
+function i6(Xf,VA,P2,VJ,Ai,tH,VJ,Ai,VJ,Ai,ZI,uN,z3,TQ,Vk,Ye,mT,KM){this.Xf=Xf
+this.VA=VA
+this.P2=P2
+this.VJ=VJ
+this.Ai=Ai
+this.tH=tH
+this.VJ=VJ
+this.Ai=Ai
+this.VJ=VJ
+this.Ai=Ai
+this.ZI=ZI
+this.uN=uN
+this.z3=z3
+this.TQ=TQ
+this.Vk=Vk
+this.Ye=Ye
+this.mT=mT
+this.KM=KM}i6.builtin$cls="i6"
+if(!"name" in i6)i6.name="i6"
+$desc=$collectedClasses.i6
+if($desc instanceof Array)$desc=$desc[1]
+i6.prototype=$desc
+i6.prototype.gXf=function(receiver){return receiver.Xf}
+i6.prototype.gXf.$reflectable=1
+i6.prototype.sXf=function(receiver,v){return receiver.Xf=v}
+i6.prototype.sXf.$reflectable=1
+i6.prototype.gVA=function(receiver){return receiver.VA}
+i6.prototype.gVA.$reflectable=1
+i6.prototype.sVA=function(receiver,v){return receiver.VA=v}
+i6.prototype.sVA.$reflectable=1
+i6.prototype.gP2=function(receiver){return receiver.P2}
+i6.prototype.gP2.$reflectable=1
+i6.prototype.sP2=function(receiver,v){return receiver.P2=v}
+i6.prototype.sP2.$reflectable=1
+function Vc(){}Vc.builtin$cls="Vc"
+if(!"name" in Vc)Vc.name="Vc"
+$desc=$collectedClasses.Vc
+if($desc instanceof Array)$desc=$desc[1]
+Vc.prototype=$desc
+function zO(){}zO.builtin$cls="zO"
+if(!"name" in zO)zO.name="zO"
+$desc=$collectedClasses.zO
+if($desc instanceof Array)$desc=$desc[1]
+zO.prototype=$desc
+function aL(){}aL.builtin$cls="aL"
+if(!"name" in aL)aL.name="aL"
+$desc=$collectedClasses.aL
+if($desc instanceof Array)$desc=$desc[1]
+aL.prototype=$desc
+function nH(Kw,Bz,n1){this.Kw=Kw
+this.Bz=Bz
+this.n1=n1}nH.builtin$cls="nH"
+if(!"name" in nH)nH.name="nH"
+$desc=$collectedClasses.nH
+if($desc instanceof Array)$desc=$desc[1]
+nH.prototype=$desc
+function a7(Kw,qn,j2,mD){this.Kw=Kw
+this.qn=qn
+this.j2=j2
+this.mD=mD}a7.builtin$cls="a7"
+if(!"name" in a7)a7.name="a7"
+$desc=$collectedClasses.a7
+if($desc instanceof Array)$desc=$desc[1]
+a7.prototype=$desc
+function i1(Kw,ew){this.Kw=Kw
+this.ew=ew}i1.builtin$cls="i1"
+if(!"name" in i1)i1.name="i1"
+$desc=$collectedClasses.i1
+if($desc instanceof Array)$desc=$desc[1]
+i1.prototype=$desc
+function xy(Kw,ew){this.Kw=Kw
+this.ew=ew}xy.builtin$cls="xy"
+if(!"name" in xy)xy.name="xy"
+$desc=$collectedClasses.xy
+if($desc instanceof Array)$desc=$desc[1]
+xy.prototype=$desc
+function MH(mD,RX,ew){this.mD=mD
+this.RX=RX
+this.ew=ew}MH.builtin$cls="MH"
+if(!"name" in MH)MH.name="MH"
+$desc=$collectedClasses.MH
+if($desc instanceof Array)$desc=$desc[1]
+MH.prototype=$desc
+function A8(qb,ew){this.qb=qb
+this.ew=ew}A8.builtin$cls="A8"
+if(!"name" in A8)A8.name="A8"
+$desc=$collectedClasses.A8
+if($desc instanceof Array)$desc=$desc[1]
+A8.prototype=$desc
+function U5(Kw,ew){this.Kw=Kw
+this.ew=ew}U5.builtin$cls="U5"
+if(!"name" in U5)U5.name="U5"
+$desc=$collectedClasses.U5
+if($desc instanceof Array)$desc=$desc[1]
+U5.prototype=$desc
+function SO(RX,ew){this.RX=RX
+this.ew=ew}SO.builtin$cls="SO"
+if(!"name" in SO)SO.name="SO"
+$desc=$collectedClasses.SO
+if($desc instanceof Array)$desc=$desc[1]
+SO.prototype=$desc
+function zs(Kw,ew){this.Kw=Kw
+this.ew=ew}zs.builtin$cls="zs"
+if(!"name" in zs)zs.name="zs"
+$desc=$collectedClasses.zs
+if($desc instanceof Array)$desc=$desc[1]
+zs.prototype=$desc
+function rR(RX,ew,IO,mD){this.RX=RX
+this.ew=ew
+this.IO=IO
+this.mD=mD}rR.builtin$cls="rR"
+if(!"name" in rR)rR.name="rR"
+$desc=$collectedClasses.rR
+if($desc instanceof Array)$desc=$desc[1]
+rR.prototype=$desc
+function AM(Kw,xZ){this.Kw=Kw
+this.xZ=xZ}AM.builtin$cls="AM"
+if(!"name" in AM)AM.name="AM"
+$desc=$collectedClasses.AM
+if($desc instanceof Array)$desc=$desc[1]
+AM.prototype=$desc
+function d5(Kw,xZ){this.Kw=Kw
+this.xZ=xZ}d5.builtin$cls="d5"
+if(!"name" in d5)d5.name="d5"
+$desc=$collectedClasses.d5
+if($desc instanceof Array)$desc=$desc[1]
+d5.prototype=$desc
+function U1(RX,xZ){this.RX=RX
+this.xZ=xZ}U1.builtin$cls="U1"
+if(!"name" in U1)U1.name="U1"
+$desc=$collectedClasses.U1
+if($desc instanceof Array)$desc=$desc[1]
+U1.prototype=$desc
+function SJ(){}SJ.builtin$cls="SJ"
+if(!"name" in SJ)SJ.name="SJ"
+$desc=$collectedClasses.SJ
+if($desc instanceof Array)$desc=$desc[1]
+SJ.prototype=$desc
+function SU(){}SU.builtin$cls="SU"
+if(!"name" in SU)SU.name="SU"
+$desc=$collectedClasses.SU
+if($desc instanceof Array)$desc=$desc[1]
+SU.prototype=$desc
+function Tv(){}Tv.builtin$cls="Tv"
+if(!"name" in Tv)Tv.name="Tv"
+$desc=$collectedClasses.Tv
+if($desc instanceof Array)$desc=$desc[1]
+Tv.prototype=$desc
+function XC(){}XC.builtin$cls="XC"
+if(!"name" in XC)XC.name="XC"
+$desc=$collectedClasses.XC
+if($desc instanceof Array)$desc=$desc[1]
+XC.prototype=$desc
+function iK(qb){this.qb=qb}iK.builtin$cls="iK"
+if(!"name" in iK)iK.name="iK"
+$desc=$collectedClasses.iK
+if($desc instanceof Array)$desc=$desc[1]
+iK.prototype=$desc
+function GD(hr){this.hr=hr}GD.builtin$cls="GD"
+if(!"name" in GD)GD.name="GD"
+$desc=$collectedClasses.GD
+if($desc instanceof Array)$desc=$desc[1]
+GD.prototype=$desc
+GD.prototype.ghr=function(receiver){return this.hr}
+function Sn(L5,F1){this.L5=L5
+this.F1=F1}Sn.builtin$cls="Sn"
+if(!"name" in Sn)Sn.name="Sn"
+$desc=$collectedClasses.Sn
+if($desc instanceof Array)$desc=$desc[1]
+Sn.prototype=$desc
+Sn.prototype.gF1=function(receiver){return this.F1}
+function nI(){}nI.builtin$cls="nI"
+if(!"name" in nI)nI.name="nI"
+$desc=$collectedClasses.nI
+if($desc instanceof Array)$desc=$desc[1]
+nI.prototype=$desc
+function jU(){}jU.builtin$cls="jU"
+if(!"name" in jU)jU.name="jU"
+$desc=$collectedClasses.jU
+if($desc instanceof Array)$desc=$desc[1]
+jU.prototype=$desc
+function Lj(MA){this.MA=MA}Lj.builtin$cls="Lj"
+if(!"name" in Lj)Lj.name="Lj"
+$desc=$collectedClasses.Lj
+if($desc instanceof Array)$desc=$desc[1]
+Lj.prototype=$desc
+function mb(){}mb.builtin$cls="mb"
+if(!"name" in mb)mb.name="mb"
+$desc=$collectedClasses.mb
+if($desc instanceof Array)$desc=$desc[1]
+mb.prototype=$desc
+function am(If){this.If=If}am.builtin$cls="am"
+if(!"name" in am)am.name="am"
+$desc=$collectedClasses.am
+if($desc instanceof Array)$desc=$desc[1]
+am.prototype=$desc
+am.prototype.gIf=function(){return this.If}
+function cw(h7,xW,LQ,If){this.h7=h7
+this.xW=xW
+this.LQ=LQ
+this.If=If}cw.builtin$cls="cw"
+if(!"name" in cw)cw.name="cw"
+$desc=$collectedClasses.cw
+if($desc instanceof Array)$desc=$desc[1]
+cw.prototype=$desc
+cw.prototype.gh7=function(){return this.h7}
+function EE(If){this.If=If}EE.builtin$cls="EE"
+if(!"name" in EE)EE.name="EE"
+$desc=$collectedClasses.EE
+if($desc instanceof Array)$desc=$desc[1]
+EE.prototype=$desc
+function Uz(FP,aP,wP,le,LB,rv,ae,SD,tB,P8,mX,T1,Ly,M2,uA,Db,Ok,If){this.FP=FP
+this.aP=aP
+this.wP=wP
+this.le=le
+this.LB=LB
+this.rv=rv
+this.ae=ae
+this.SD=SD
+this.tB=tB
+this.P8=P8
+this.mX=mX
+this.T1=T1
+this.Ly=Ly
+this.M2=M2
+this.uA=uA
+this.Db=Db
+this.Ok=Ok
+this.If=If}Uz.builtin$cls="Uz"
+if(!"name" in Uz)Uz.name="Uz"
+$desc=$collectedClasses.Uz
+if($desc instanceof Array)$desc=$desc[1]
+Uz.prototype=$desc
+Uz.prototype.gFP=function(){return this.FP}
+Uz.prototype.grv=function(){return this.rv}
+Uz.prototype.gae=function(){return this.ae}
+function uh(){}uh.builtin$cls="uh"
+if(!"name" in uh)uh.name="uh"
+$desc=$collectedClasses.uh
+if($desc instanceof Array)$desc=$desc[1]
+uh.prototype=$desc
+function Kv(a){this.a=a}Kv.builtin$cls="Kv"
+if(!"name" in Kv)Kv.name="Kv"
+$desc=$collectedClasses.Kv
+if($desc instanceof Array)$desc=$desc[1]
+Kv.prototype=$desc
+function oP(a){this.a=a}oP.builtin$cls="oP"
+if(!"name" in oP)oP.name="oP"
+$desc=$collectedClasses.oP
+if($desc instanceof Array)$desc=$desc[1]
+oP.prototype=$desc
+function YX(a){this.a=a}YX.builtin$cls="YX"
+if(!"name" in YX)YX.name="YX"
+$desc=$collectedClasses.YX
+if($desc instanceof Array)$desc=$desc[1]
+YX.prototype=$desc
+function BI(AY,XW,BB,If){this.AY=AY
+this.XW=XW
+this.BB=BB
+this.If=If}BI.builtin$cls="BI"
+if(!"name" in BI)BI.name="BI"
+$desc=$collectedClasses.BI
+if($desc instanceof Array)$desc=$desc[1]
+BI.prototype=$desc
+BI.prototype.gAY=function(){return this.AY}
+function y1(){}y1.builtin$cls="y1"
+if(!"name" in y1)y1.name="y1"
+$desc=$collectedClasses.y1
+if($desc instanceof Array)$desc=$desc[1]
+y1.prototype=$desc
+function M2(){}M2.builtin$cls="M2"
+if(!"name" in M2)M2.name="M2"
+$desc=$collectedClasses.M2
+if($desc instanceof Array)$desc=$desc[1]
+M2.prototype=$desc
+function iu(Ax){this.Ax=Ax}iu.builtin$cls="iu"
+if(!"name" in iu)iu.name="iu"
+$desc=$collectedClasses.iu
+if($desc instanceof Array)$desc=$desc[1]
+iu.prototype=$desc
+iu.prototype.gAx=function(){return this.Ax}
+function mg(){}mg.builtin$cls="mg"
+if(!"name" in mg)mg.name="mg"
+$desc=$collectedClasses.mg
+if($desc instanceof Array)$desc=$desc[1]
+mg.prototype=$desc
+function zE(a){this.a=a}zE.builtin$cls="zE"
+if(!"name" in zE)zE.name="zE"
+$desc=$collectedClasses.zE
+if($desc instanceof Array)$desc=$desc[1]
+zE.prototype=$desc
+function bl(NK,EZ,ut,Db,uA,b0,M2,T1,Ly,FU,jd,qN,qm,If){this.NK=NK
+this.EZ=EZ
+this.ut=ut
+this.Db=Db
+this.uA=uA
+this.b0=b0
+this.M2=M2
+this.T1=T1
+this.Ly=Ly
+this.FU=FU
+this.jd=jd
+this.qN=qN
+this.qm=qm
+this.If=If}bl.builtin$cls="bl"
+if(!"name" in bl)bl.name="bl"
+$desc=$collectedClasses.bl
+if($desc instanceof Array)$desc=$desc[1]
+bl.prototype=$desc
+function Ef(a){this.a=a}Ef.builtin$cls="Ef"
+if(!"name" in Ef)Ef.name="Ef"
+$desc=$collectedClasses.Ef
+if($desc instanceof Array)$desc=$desc[1]
+Ef.prototype=$desc
+function Oo(){}Oo.builtin$cls="Oo"
+if(!"name" in Oo)Oo.name="Oo"
+$desc=$collectedClasses.Oo
+if($desc instanceof Array)$desc=$desc[1]
+Oo.prototype=$desc
+function Tc(b){this.b=b}Tc.builtin$cls="Tc"
+if(!"name" in Tc)Tc.name="Tc"
+$desc=$collectedClasses.Tc
+if($desc instanceof Array)$desc=$desc[1]
+Tc.prototype=$desc
+function Ax(a){this.a=a}Ax.builtin$cls="Ax"
+if(!"name" in Ax)Ax.name="Ax"
+$desc=$collectedClasses.Ax
+if($desc instanceof Array)$desc=$desc[1]
+Ax.prototype=$desc
+function Wf(WL,Tx,H8,Ht,pz,le,qN,jd,tB,b0,FU,T1,Ly,M2,uA,Db,Ok,qm,UF,nz,If){this.WL=WL
+this.Tx=Tx
+this.H8=H8
+this.Ht=Ht
+this.pz=pz
+this.le=le
+this.qN=qN
+this.jd=jd
+this.tB=tB
+this.b0=b0
+this.FU=FU
+this.T1=T1
+this.Ly=Ly
+this.M2=M2
+this.uA=uA
+this.Db=Db
+this.Ok=Ok
+this.qm=qm
+this.UF=UF
+this.nz=nz
+this.If=If}Wf.builtin$cls="Wf"
+if(!"name" in Wf)Wf.name="Wf"
+$desc=$collectedClasses.Wf
+if($desc instanceof Array)$desc=$desc[1]
+Wf.prototype=$desc
+Wf.prototype.gWL=function(){return this.WL}
+Wf.prototype.gWL.$reflectable=1
+Wf.prototype.gTx=function(){return this.Tx}
+Wf.prototype.gTx.$reflectable=1
+Wf.prototype.gH8=function(){return this.H8}
+Wf.prototype.gH8.$reflectable=1
+Wf.prototype.gHt=function(){return this.Ht}
+Wf.prototype.gHt.$reflectable=1
+Wf.prototype.gpz=function(){return this.pz}
+Wf.prototype.gpz.$reflectable=1
+Wf.prototype.gle=function(){return this.le}
+Wf.prototype.gle.$reflectable=1
+Wf.prototype.sle=function(v){return this.le=v}
+Wf.prototype.sle.$reflectable=1
+Wf.prototype.gqN=function(){return this.qN}
+Wf.prototype.gqN.$reflectable=1
+Wf.prototype.sqN=function(v){return this.qN=v}
+Wf.prototype.sqN.$reflectable=1
+Wf.prototype.gjd=function(){return this.jd}
+Wf.prototype.gjd.$reflectable=1
+Wf.prototype.sjd=function(v){return this.jd=v}
+Wf.prototype.sjd.$reflectable=1
+Wf.prototype.gtB=function(){return this.tB}
+Wf.prototype.gtB.$reflectable=1
+Wf.prototype.stB=function(v){return this.tB=v}
+Wf.prototype.stB.$reflectable=1
+Wf.prototype.gb0=function(){return this.b0}
+Wf.prototype.gb0.$reflectable=1
+Wf.prototype.sb0=function(v){return this.b0=v}
+Wf.prototype.sb0.$reflectable=1
+Wf.prototype.gFU=function(){return this.FU}
+Wf.prototype.gFU.$reflectable=1
+Wf.prototype.sFU=function(v){return this.FU=v}
+Wf.prototype.sFU.$reflectable=1
+Wf.prototype.gT1=function(){return this.T1}
+Wf.prototype.gT1.$reflectable=1
+Wf.prototype.sT1=function(v){return this.T1=v}
+Wf.prototype.sT1.$reflectable=1
+Wf.prototype.gLy=function(){return this.Ly}
+Wf.prototype.gLy.$reflectable=1
+Wf.prototype.sLy=function(v){return this.Ly=v}
+Wf.prototype.sLy.$reflectable=1
+Wf.prototype.gM2=function(){return this.M2}
+Wf.prototype.gM2.$reflectable=1
+Wf.prototype.sM2=function(v){return this.M2=v}
+Wf.prototype.sM2.$reflectable=1
+Wf.prototype.guA=function(){return this.uA}
+Wf.prototype.guA.$reflectable=1
+Wf.prototype.suA=function(v){return this.uA=v}
+Wf.prototype.suA.$reflectable=1
+Wf.prototype.gDb=function(){return this.Db}
+Wf.prototype.gDb.$reflectable=1
+Wf.prototype.sDb=function(v){return this.Db=v}
+Wf.prototype.sDb.$reflectable=1
+Wf.prototype.gOk=function(){return this.Ok}
+Wf.prototype.gOk.$reflectable=1
+Wf.prototype.sOk=function(v){return this.Ok=v}
+Wf.prototype.sOk.$reflectable=1
+Wf.prototype.gqm=function(){return this.qm}
+Wf.prototype.gqm.$reflectable=1
+Wf.prototype.sqm=function(v){return this.qm=v}
+Wf.prototype.sqm.$reflectable=1
+Wf.prototype.gUF=function(){return this.UF}
+Wf.prototype.gUF.$reflectable=1
+Wf.prototype.sUF=function(v){return this.UF=v}
+Wf.prototype.sUF.$reflectable=1
+Wf.prototype.gnz=function(){return this.nz}
+Wf.prototype.gnz.$reflectable=1
+Wf.prototype.snz=function(v){return this.nz=v}
+Wf.prototype.snz.$reflectable=1
+function Un(){}Un.builtin$cls="Un"
+if(!"name" in Un)Un.name="Un"
+$desc=$collectedClasses.Un
+if($desc instanceof Array)$desc=$desc[1]
+Un.prototype=$desc
+function Ei(a){this.a=a}Ei.builtin$cls="Ei"
+if(!"name" in Ei)Ei.name="Ei"
+$desc=$collectedClasses.Ei
+if($desc instanceof Array)$desc=$desc[1]
+Ei.prototype=$desc
+function U7(b){this.b=b}U7.builtin$cls="U7"
+if(!"name" in U7)U7.name="U7"
+$desc=$collectedClasses.U7
+if($desc instanceof Array)$desc=$desc[1]
+U7.prototype=$desc
+function t0(a){this.a=a}t0.builtin$cls="t0"
+if(!"name" in t0)t0.name="t0"
+$desc=$collectedClasses.t0
+if($desc instanceof Array)$desc=$desc[1]
+t0.prototype=$desc
+function Ld(ao,V5,Fo,n6,nz,le,If){this.ao=ao
+this.V5=V5
+this.Fo=Fo
+this.n6=n6
+this.nz=nz
+this.le=le
+this.If=If}Ld.builtin$cls="Ld"
+if(!"name" in Ld)Ld.name="Ld"
+$desc=$collectedClasses.Ld
+if($desc instanceof Array)$desc=$desc[1]
+Ld.prototype=$desc
+Ld.prototype.gao=function(){return this.ao}
+Ld.prototype.gV5=function(){return this.V5}
+Ld.prototype.gFo=function(){return this.Fo}
+function Sz(Ax){this.Ax=Ax}Sz.builtin$cls="Sz"
+if(!"name" in Sz)Sz.name="Sz"
+$desc=$collectedClasses.Sz
+if($desc instanceof Array)$desc=$desc[1]
+Sz.prototype=$desc
+function Zk(dl,Yq,lT,hB,Fo,xV,qx,nz,le,G6,Cr,If){this.dl=dl
+this.Yq=Yq
+this.lT=lT
+this.hB=hB
+this.Fo=Fo
+this.xV=xV
+this.qx=qx
+this.nz=nz
+this.le=le
+this.G6=G6
+this.Cr=Cr
+this.If=If}Zk.builtin$cls="Zk"
+if(!"name" in Zk)Zk.name="Zk"
+$desc=$collectedClasses.Zk
+if($desc instanceof Array)$desc=$desc[1]
+Zk.prototype=$desc
+Zk.prototype.glT=function(){return this.lT}
+Zk.prototype.ghB=function(){return this.hB}
+Zk.prototype.gFo=function(){return this.Fo}
+Zk.prototype.gxV=function(){return this.xV}
+function fu(h7,Ad,If){this.h7=h7
+this.Ad=Ad
+this.If=If}fu.builtin$cls="fu"
+if(!"name" in fu)fu.name="fu"
+$desc=$collectedClasses.fu
+if($desc instanceof Array)$desc=$desc[1]
+fu.prototype=$desc
+fu.prototype.gh7=function(){return this.h7}
+function ng(WL,CM,If){this.WL=WL
+this.CM=CM
+this.If=If}ng.builtin$cls="ng"
+if(!"name" in ng)ng.name="ng"
+$desc=$collectedClasses.ng
+if($desc instanceof Array)$desc=$desc[1]
+ng.prototype=$desc
+ng.prototype.gWL=function(){return this.WL}
+function Ar(d9,o3,yA,zM,h7){this.d9=d9
+this.o3=o3
+this.yA=yA
+this.zM=zM
+this.h7=h7}Ar.builtin$cls="Ar"
+if(!"name" in Ar)Ar.name="Ar"
+$desc=$collectedClasses.Ar
+if($desc instanceof Array)$desc=$desc[1]
+Ar.prototype=$desc
+Ar.prototype.gh7=function(){return this.h7}
+function jB(a){this.a=a}jB.builtin$cls="jB"
+if(!"name" in jB)jB.name="jB"
+$desc=$collectedClasses.jB
+if($desc instanceof Array)$desc=$desc[1]
+jB.prototype=$desc
+function ye(){}ye.builtin$cls="ye"
+if(!"name" in ye)ye.name="ye"
+$desc=$collectedClasses.ye
+if($desc instanceof Array)$desc=$desc[1]
+ye.prototype=$desc
+function Gj(nb){this.nb=nb}Gj.builtin$cls="Gj"
+if(!"name" in Gj)Gj.name="Gj"
+$desc=$collectedClasses.Gj
+if($desc instanceof Array)$desc=$desc[1]
+Gj.prototype=$desc
+function Zz(hu){this.hu=hu}Zz.builtin$cls="Zz"
+if(!"name" in Zz)Zz.name="Zz"
+$desc=$collectedClasses.Zz
+if($desc instanceof Array)$desc=$desc[1]
+Zz.prototype=$desc
+function Xh(a){this.a=a}Xh.builtin$cls="Xh"
+if(!"name" in Xh)Xh.name="Xh"
+$desc=$collectedClasses.Xh
+if($desc instanceof Array)$desc=$desc[1]
+Xh.prototype=$desc
+function Ca(kc,I4){this.kc=kc
+this.I4=I4}Ca.builtin$cls="Ca"
+if(!"name" in Ca)Ca.name="Ca"
+$desc=$collectedClasses.Ca
+if($desc instanceof Array)$desc=$desc[1]
+Ca.prototype=$desc
+Ca.prototype.gkc=function(receiver){return this.kc}
+Ca.prototype.gI4=function(){return this.I4}
+function Ik(Y8){this.Y8=Y8}Ik.builtin$cls="Ik"
+if(!"name" in Ik)Ik.name="Ik"
+$desc=$collectedClasses.Ik
+if($desc instanceof Array)$desc=$desc[1]
+Ik.prototype=$desc
+function JI(Ae,iE,SJ,Y8,dB,o7,Bd,Lj,Gv,lz,Ri){this.Ae=Ae
+this.iE=iE
+this.SJ=SJ
+this.Y8=Y8
+this.dB=dB
+this.o7=o7
+this.Bd=Bd
+this.Lj=Lj
+this.Gv=Gv
+this.lz=lz
+this.Ri=Ri}JI.builtin$cls="JI"
+if(!"name" in JI)JI.name="JI"
+$desc=$collectedClasses.JI
+if($desc instanceof Array)$desc=$desc[1]
+JI.prototype=$desc
+JI.prototype.gAe=function(){return this.Ae}
+JI.prototype.sAe=function(v){return this.Ae=v}
+JI.prototype.giE=function(){return this.iE}
+JI.prototype.siE=function(v){return this.iE=v}
+JI.prototype.gSJ=function(){return this.SJ}
+JI.prototype.sSJ=function(v){return this.SJ=v}
+function Ip(wc,nn,lv,Pp){this.wc=wc
+this.nn=nn
+this.lv=lv
+this.Pp=Pp}Ip.builtin$cls="Ip"
+$desc=$collectedClasses.Ip
+if($desc instanceof Array)$desc=$desc[1]
+Ip.prototype=$desc
+function WV(nL,QC,iE,SJ){this.nL=nL
+this.QC=QC
+this.iE=iE
+this.SJ=SJ}WV.builtin$cls="WV"
+if(!"name" in WV)WV.name="WV"
+$desc=$collectedClasses.WV
+if($desc instanceof Array)$desc=$desc[1]
+WV.prototype=$desc
+WV.prototype.gnL=function(){return this.nL}
+WV.prototype.gQC=function(){return this.QC}
+WV.prototype.giE=function(){return this.iE}
+WV.prototype.siE=function(v){return this.iE=v}
+WV.prototype.gSJ=function(){return this.SJ}
+WV.prototype.sSJ=function(v){return this.SJ=v}
+function C7(wc,nn,lv,Pp){this.wc=wc
+this.nn=nn
+this.lv=lv
+this.Pp=Pp}C7.builtin$cls="C7"
+$desc=$collectedClasses.C7
+if($desc instanceof Array)$desc=$desc[1]
+C7.prototype=$desc
+function CQ(wc,nn,lv,Pp){this.wc=wc
+this.nn=nn
+this.lv=lv
+this.Pp=Pp}CQ.builtin$cls="CQ"
+$desc=$collectedClasses.CQ
+if($desc instanceof Array)$desc=$desc[1]
+CQ.prototype=$desc
+function dz(nL,QC,Gv,iE,SJ,AN,Ip){this.nL=nL
+this.QC=QC
+this.Gv=Gv
+this.iE=iE
+this.SJ=SJ
+this.AN=AN
+this.Ip=Ip}dz.builtin$cls="dz"
+if(!"name" in dz)dz.name="dz"
+$desc=$collectedClasses.dz
+if($desc instanceof Array)$desc=$desc[1]
+dz.prototype=$desc
+function tK(a,b){this.a=a
+this.b=b}tK.builtin$cls="tK"
+if(!"name" in tK)tK.name="tK"
+$desc=$collectedClasses.tK
+if($desc instanceof Array)$desc=$desc[1]
+tK.prototype=$desc
+function OR(a,b,c){this.a=a
+this.b=b
+this.c=c}OR.builtin$cls="OR"
+if(!"name" in OR)OR.name="OR"
+$desc=$collectedClasses.OR
+if($desc instanceof Array)$desc=$desc[1]
+OR.prototype=$desc
+function Bg(a){this.a=a}Bg.builtin$cls="Bg"
+if(!"name" in Bg)Bg.name="Bg"
+$desc=$collectedClasses.Bg
+if($desc instanceof Array)$desc=$desc[1]
+Bg.prototype=$desc
+function DL(nL,QC,Gv,iE,SJ,AN,Ip){this.nL=nL
+this.QC=QC
+this.Gv=Gv
+this.iE=iE
+this.SJ=SJ
+this.AN=AN
+this.Ip=Ip}DL.builtin$cls="DL"
+if(!"name" in DL)DL.name="DL"
+$desc=$collectedClasses.DL
+if($desc instanceof Array)$desc=$desc[1]
+DL.prototype=$desc
+function b8(){}b8.builtin$cls="b8"
+if(!"name" in b8)b8.name="b8"
+$desc=$collectedClasses.b8
+if($desc instanceof Array)$desc=$desc[1]
+b8.prototype=$desc
+function j7(a){this.a=a}j7.builtin$cls="j7"
+if(!"name" in j7)j7.name="j7"
+$desc=$collectedClasses.j7
+if($desc instanceof Array)$desc=$desc[1]
+j7.prototype=$desc
+function oV(a,b){this.a=a
+this.b=b}oV.builtin$cls="oV"
+if(!"name" in oV)oV.name="oV"
+$desc=$collectedClasses.oV
+if($desc instanceof Array)$desc=$desc[1]
+oV.prototype=$desc
+function TP(){}TP.builtin$cls="TP"
+if(!"name" in TP)TP.name="TP"
+$desc=$collectedClasses.TP
+if($desc instanceof Array)$desc=$desc[1]
+TP.prototype=$desc
+function Zf(MM){this.MM=MM}Zf.builtin$cls="Zf"
+if(!"name" in Zf)Zf.name="Zf"
+$desc=$collectedClasses.Zf
+if($desc instanceof Array)$desc=$desc[1]
+Zf.prototype=$desc
+function vs(Gv,Lj,jk,BQ,OY,As,qV,o4){this.Gv=Gv
+this.Lj=Lj
+this.jk=jk
+this.BQ=BQ
+this.OY=OY
+this.As=As
+this.qV=qV
+this.o4=o4}vs.builtin$cls="vs"
+if(!"name" in vs)vs.name="vs"
+$desc=$collectedClasses.vs
+if($desc instanceof Array)$desc=$desc[1]
+vs.prototype=$desc
+vs.prototype.gLj=function(){return this.Lj}
+vs.prototype.gBQ=function(){return this.BQ}
+vs.prototype.sBQ=function(v){return this.BQ=v}
+function da(a,b){this.a=a
+this.b=b}da.builtin$cls="da"
+if(!"name" in da)da.name="da"
+$desc=$collectedClasses.da
+if($desc instanceof Array)$desc=$desc[1]
+da.prototype=$desc
+function xw(a){this.a=a}xw.builtin$cls="xw"
+if(!"name" in xw)xw.name="xw"
+$desc=$collectedClasses.xw
+if($desc instanceof Array)$desc=$desc[1]
+xw.prototype=$desc
+function dm(b){this.b=b}dm.builtin$cls="dm"
+if(!"name" in dm)dm.name="dm"
+$desc=$collectedClasses.dm
+if($desc instanceof Array)$desc=$desc[1]
+dm.prototype=$desc
+function rH(a,b){this.a=a
+this.b=b}rH.builtin$cls="rH"
+if(!"name" in rH)rH.name="rH"
+$desc=$collectedClasses.rH
+if($desc instanceof Array)$desc=$desc[1]
+rH.prototype=$desc
+function ZL(a,b,c){this.a=a
+this.b=b
+this.c=c}ZL.builtin$cls="ZL"
+if(!"name" in ZL)ZL.name="ZL"
+$desc=$collectedClasses.ZL
+if($desc instanceof Array)$desc=$desc[1]
+ZL.prototype=$desc
+function mi(c,d){this.c=c
+this.d=d}mi.builtin$cls="mi"
+if(!"name" in mi)mi.name="mi"
+$desc=$collectedClasses.mi
+if($desc instanceof Array)$desc=$desc[1]
+mi.prototype=$desc
+function jb(c,b,e,f){this.c=c
+this.b=b
+this.e=e
+this.f=f}jb.builtin$cls="jb"
+if(!"name" in jb)jb.name="jb"
+$desc=$collectedClasses.jb
+if($desc instanceof Array)$desc=$desc[1]
+jb.prototype=$desc
+function wB(c,g){this.c=c
+this.g=g}wB.builtin$cls="wB"
+if(!"name" in wB)wB.name="wB"
+$desc=$collectedClasses.wB
+if($desc instanceof Array)$desc=$desc[1]
+wB.prototype=$desc
+function Pu(a,h){this.a=a
+this.h=h}Pu.builtin$cls="Pu"
+if(!"name" in Pu)Pu.name="Pu"
+$desc=$collectedClasses.Pu
+if($desc instanceof Array)$desc=$desc[1]
+Pu.prototype=$desc
+function qh(){}qh.builtin$cls="qh"
+if(!"name" in qh)qh.name="qh"
+$desc=$collectedClasses.qh
+if($desc instanceof Array)$desc=$desc[1]
+qh.prototype=$desc
+function QC(a,b,c,d,e){this.a=a
+this.b=b
+this.c=c
+this.d=d
+this.e=e}QC.builtin$cls="QC"
+if(!"name" in QC)QC.name="QC"
+$desc=$collectedClasses.QC
+if($desc instanceof Array)$desc=$desc[1]
+QC.prototype=$desc
+function Yl(f){this.f=f}Yl.builtin$cls="Yl"
+if(!"name" in Yl)Yl.name="Yl"
+$desc=$collectedClasses.Yl
+if($desc instanceof Array)$desc=$desc[1]
+Yl.prototype=$desc
+function Rv(g,h){this.g=g
+this.h=h}Rv.builtin$cls="Rv"
+if(!"name" in Rv)Rv.name="Rv"
+$desc=$collectedClasses.Rv
+if($desc instanceof Array)$desc=$desc[1]
+Rv.prototype=$desc
+function YJ(a,b,c,d){this.a=a
+this.b=b
+this.c=c
+this.d=d}YJ.builtin$cls="YJ"
+if(!"name" in YJ)YJ.name="YJ"
+$desc=$collectedClasses.YJ
+if($desc instanceof Array)$desc=$desc[1]
+YJ.prototype=$desc
+function jv(e,f){this.e=e
+this.f=f}jv.builtin$cls="jv"
+if(!"name" in jv)jv.name="jv"
+$desc=$collectedClasses.jv
+if($desc instanceof Array)$desc=$desc[1]
+jv.prototype=$desc
+function LB(a,g){this.a=a
+this.g=g}LB.builtin$cls="LB"
+if(!"name" in LB)LB.name="LB"
+$desc=$collectedClasses.LB
+if($desc instanceof Array)$desc=$desc[1]
+LB.prototype=$desc
+function DO(h){this.h=h}DO.builtin$cls="DO"
+if(!"name" in DO)DO.name="DO"
+$desc=$collectedClasses.DO
+if($desc instanceof Array)$desc=$desc[1]
+DO.prototype=$desc
+function lz(a,b,c,d){this.a=a
+this.b=b
+this.c=c
+this.d=d}lz.builtin$cls="lz"
+if(!"name" in lz)lz.name="lz"
+$desc=$collectedClasses.lz
+if($desc instanceof Array)$desc=$desc[1]
+lz.prototype=$desc
+function Rl(e,f){this.e=e
+this.f=f}Rl.builtin$cls="Rl"
+if(!"name" in Rl)Rl.name="Rl"
+$desc=$collectedClasses.Rl
+if($desc instanceof Array)$desc=$desc[1]
+Rl.prototype=$desc
+function Jb(){}Jb.builtin$cls="Jb"
+if(!"name" in Jb)Jb.name="Jb"
+$desc=$collectedClasses.Jb
+if($desc instanceof Array)$desc=$desc[1]
+Jb.prototype=$desc
+function M4(g){this.g=g}M4.builtin$cls="M4"
+if(!"name" in M4)M4.name="M4"
+$desc=$collectedClasses.M4
+if($desc instanceof Array)$desc=$desc[1]
+M4.prototype=$desc
+function Jp(a,b,c,d){this.a=a
+this.b=b
+this.c=c
+this.d=d}Jp.builtin$cls="Jp"
+if(!"name" in Jp)Jp.name="Jp"
+$desc=$collectedClasses.Jp
+if($desc instanceof Array)$desc=$desc[1]
+Jp.prototype=$desc
+function h7(e,f){this.e=e
+this.f=f}h7.builtin$cls="h7"
+if(!"name" in h7)h7.name="h7"
+$desc=$collectedClasses.h7
+if($desc instanceof Array)$desc=$desc[1]
+h7.prototype=$desc
+function pr(a,g){this.a=a
+this.g=g}pr.builtin$cls="pr"
+if(!"name" in pr)pr.name="pr"
+$desc=$collectedClasses.pr
+if($desc instanceof Array)$desc=$desc[1]
+pr.prototype=$desc
+function eN(h){this.h=h}eN.builtin$cls="eN"
+if(!"name" in eN)eN.name="eN"
+$desc=$collectedClasses.eN
+if($desc instanceof Array)$desc=$desc[1]
+eN.prototype=$desc
+function B5(a){this.a=a}B5.builtin$cls="B5"
+if(!"name" in B5)B5.name="B5"
+$desc=$collectedClasses.B5
+if($desc instanceof Array)$desc=$desc[1]
+B5.prototype=$desc
+function PI(a,b){this.a=a
+this.b=b}PI.builtin$cls="PI"
+if(!"name" in PI)PI.name="PI"
+$desc=$collectedClasses.PI
+if($desc instanceof Array)$desc=$desc[1]
+PI.prototype=$desc
+function j4(a,b){this.a=a
+this.b=b}j4.builtin$cls="j4"
+if(!"name" in j4)j4.name="j4"
+$desc=$collectedClasses.j4
+if($desc instanceof Array)$desc=$desc[1]
+j4.prototype=$desc
+function i9(c){this.c=c}i9.builtin$cls="i9"
+if(!"name" in i9)i9.name="i9"
+$desc=$collectedClasses.i9
+if($desc instanceof Array)$desc=$desc[1]
+i9.prototype=$desc
+function VV(a,b){this.a=a
+this.b=b}VV.builtin$cls="VV"
+if(!"name" in VV)VV.name="VV"
+$desc=$collectedClasses.VV
+if($desc instanceof Array)$desc=$desc[1]
+VV.prototype=$desc
+function Dy(c,d){this.c=c
+this.d=d}Dy.builtin$cls="Dy"
+if(!"name" in Dy)Dy.name="Dy"
+$desc=$collectedClasses.Dy
+if($desc instanceof Array)$desc=$desc[1]
+Dy.prototype=$desc
+function lU(a,b,c){this.a=a
+this.b=b
+this.c=c}lU.builtin$cls="lU"
+if(!"name" in lU)lU.name="lU"
+$desc=$collectedClasses.lU
+if($desc instanceof Array)$desc=$desc[1]
+lU.prototype=$desc
+function xp(d){this.d=d}xp.builtin$cls="xp"
+if(!"name" in xp)xp.name="xp"
+$desc=$collectedClasses.xp
+if($desc instanceof Array)$desc=$desc[1]
+xp.prototype=$desc
+function UH(a,b){this.a=a
+this.b=b}UH.builtin$cls="UH"
+if(!"name" in UH)UH.name="UH"
+$desc=$collectedClasses.UH
+if($desc instanceof Array)$desc=$desc[1]
+UH.prototype=$desc
+function Z5(a,c){this.a=a
+this.c=c}Z5.builtin$cls="Z5"
+if(!"name" in Z5)Z5.name="Z5"
+$desc=$collectedClasses.Z5
+if($desc instanceof Array)$desc=$desc[1]
+Z5.prototype=$desc
+function ii(a,b,c){this.a=a
+this.b=b
+this.c=c}ii.builtin$cls="ii"
+if(!"name" in ii)ii.name="ii"
+$desc=$collectedClasses.ii
+if($desc instanceof Array)$desc=$desc[1]
+ii.prototype=$desc
+function ib(a,d){this.a=a
+this.d=d}ib.builtin$cls="ib"
+if(!"name" in ib)ib.name="ib"
+$desc=$collectedClasses.ib
+if($desc instanceof Array)$desc=$desc[1]
+ib.prototype=$desc
+function MO(){}MO.builtin$cls="MO"
+if(!"name" in MO)MO.name="MO"
+$desc=$collectedClasses.MO
+if($desc instanceof Array)$desc=$desc[1]
+MO.prototype=$desc
+function ms(){}ms.builtin$cls="ms"
+if(!"name" in ms)ms.name="ms"
+$desc=$collectedClasses.ms
+if($desc instanceof Array)$desc=$desc[1]
+ms.prototype=$desc
+function UO(a){this.a=a}UO.builtin$cls="UO"
+if(!"name" in UO)UO.name="UO"
+$desc=$collectedClasses.UO
+if($desc instanceof Array)$desc=$desc[1]
+UO.prototype=$desc
+function Bc(a){this.a=a}Bc.builtin$cls="Bc"
+if(!"name" in Bc)Bc.name="Bc"
+$desc=$collectedClasses.Bc
+if($desc instanceof Array)$desc=$desc[1]
+Bc.prototype=$desc
+function vp(){}vp.builtin$cls="vp"
+if(!"name" in vp)vp.name="vp"
+$desc=$collectedClasses.vp
+if($desc instanceof Array)$desc=$desc[1]
+vp.prototype=$desc
+function lk(){}lk.builtin$cls="lk"
+if(!"name" in lk)lk.name="lk"
+$desc=$collectedClasses.lk
+if($desc instanceof Array)$desc=$desc[1]
+lk.prototype=$desc
+function Gh(nL,p4,Z9,QC,iP,Gv,Ip){this.nL=nL
+this.p4=p4
+this.Z9=Z9
+this.QC=QC
+this.iP=iP
+this.Gv=Gv
+this.Ip=Ip}Gh.builtin$cls="Gh"
+if(!"name" in Gh)Gh.name="Gh"
+$desc=$collectedClasses.Gh
+if($desc instanceof Array)$desc=$desc[1]
+Gh.prototype=$desc
+Gh.prototype.gnL=function(){return this.nL}
+Gh.prototype.gp4=function(){return this.p4}
+Gh.prototype.gZ9=function(){return this.Z9}
+Gh.prototype.gQC=function(){return this.QC}
+function XB(){}XB.builtin$cls="XB"
+if(!"name" in XB)XB.name="XB"
+$desc=$collectedClasses.XB
+if($desc instanceof Array)$desc=$desc[1]
+XB.prototype=$desc
+function ly(nL,p4,Z9,QC,iP,Gv,Ip){this.nL=nL
+this.p4=p4
+this.Z9=Z9
+this.QC=QC
+this.iP=iP
+this.Gv=Gv
+this.Ip=Ip}ly.builtin$cls="ly"
+if(!"name" in ly)ly.name="ly"
+$desc=$collectedClasses.ly
+if($desc instanceof Array)$desc=$desc[1]
+ly.prototype=$desc
+ly.prototype.gnL=function(){return this.nL}
+ly.prototype.gp4=function(){return this.p4}
+ly.prototype.gZ9=function(){return this.Z9}
+ly.prototype.gQC=function(){return this.QC}
+function cK(){}cK.builtin$cls="cK"
+if(!"name" in cK)cK.name="cK"
+$desc=$collectedClasses.cK
+if($desc instanceof Array)$desc=$desc[1]
+cK.prototype=$desc
+function O9(Y8){this.Y8=Y8}O9.builtin$cls="O9"
+if(!"name" in O9)O9.name="O9"
+$desc=$collectedClasses.O9
+if($desc instanceof Array)$desc=$desc[1]
+O9.prototype=$desc
+function yU(Y8,dB,o7,Bd,Lj,Gv,lz,Ri){this.Y8=Y8
+this.dB=dB
+this.o7=o7
+this.Bd=Bd
+this.Lj=Lj
+this.Gv=Gv
+this.lz=lz
+this.Ri=Ri}yU.builtin$cls="yU"
+if(!"name" in yU)yU.name="yU"
+$desc=$collectedClasses.yU
+if($desc instanceof Array)$desc=$desc[1]
+yU.prototype=$desc
+yU.prototype.gY8=function(){return this.Y8}
+function nP(){}nP.builtin$cls="nP"
+if(!"name" in nP)nP.name="nP"
+$desc=$collectedClasses.nP
+if($desc instanceof Array)$desc=$desc[1]
+nP.prototype=$desc
+function KA(dB,o7,Bd,Lj,Gv,lz,Ri){this.dB=dB
+this.o7=o7
+this.Bd=Bd
+this.Lj=Lj
+this.Gv=Gv
+this.lz=lz
+this.Ri=Ri}KA.builtin$cls="KA"
+if(!"name" in KA)KA.name="KA"
+$desc=$collectedClasses.KA
+if($desc instanceof Array)$desc=$desc[1]
+KA.prototype=$desc
+KA.prototype.go7=function(){return this.o7}
+KA.prototype.gLj=function(){return this.Lj}
+function Vo(a,b,c){this.a=a
+this.b=b
+this.c=c}Vo.builtin$cls="Vo"
+if(!"name" in Vo)Vo.name="Vo"
+$desc=$collectedClasses.Vo
+if($desc instanceof Array)$desc=$desc[1]
+Vo.prototype=$desc
+function qB(a){this.a=a}qB.builtin$cls="qB"
+if(!"name" in qB)qB.name="qB"
+$desc=$collectedClasses.qB
+if($desc instanceof Array)$desc=$desc[1]
+qB.prototype=$desc
+function ez(){}ez.builtin$cls="ez"
+if(!"name" in ez)ez.name="ez"
+$desc=$collectedClasses.ez
+if($desc instanceof Array)$desc=$desc[1]
+ez.prototype=$desc
+function lx(LD){this.LD=LD}lx.builtin$cls="lx"
+if(!"name" in lx)lx.name="lx"
+$desc=$collectedClasses.lx
+if($desc instanceof Array)$desc=$desc[1]
+lx.prototype=$desc
+lx.prototype.gLD=function(){return this.LD}
+lx.prototype.sLD=function(v){return this.LD=v}
+function LV(P,LD){this.P=P
+this.LD=LD}LV.builtin$cls="LV"
+if(!"name" in LV)LV.name="LV"
+$desc=$collectedClasses.LV
+if($desc instanceof Array)$desc=$desc[1]
+LV.prototype=$desc
+LV.prototype.gP=function(receiver){return this.P}
+function DS(kc,I4,LD){this.kc=kc
+this.I4=I4
+this.LD=LD}DS.builtin$cls="DS"
+if(!"name" in DS)DS.name="DS"
+$desc=$collectedClasses.DS
+if($desc instanceof Array)$desc=$desc[1]
+DS.prototype=$desc
+DS.prototype.gkc=function(receiver){return this.kc}
+DS.prototype.gI4=function(){return this.I4}
+function dp(){}dp.builtin$cls="dp"
+if(!"name" in dp)dp.name="dp"
+$desc=$collectedClasses.dp
+if($desc instanceof Array)$desc=$desc[1]
+dp.prototype=$desc
+function B3(){}B3.builtin$cls="B3"
+if(!"name" in B3)B3.name="B3"
+$desc=$collectedClasses.B3
+if($desc instanceof Array)$desc=$desc[1]
+B3.prototype=$desc
+function CR(a,b){this.a=a
+this.b=b}CR.builtin$cls="CR"
+if(!"name" in CR)CR.name="CR"
+$desc=$collectedClasses.CR
+if($desc instanceof Array)$desc=$desc[1]
+CR.prototype=$desc
+function ny(zR,N6,Gv){this.zR=zR
+this.N6=N6
+this.Gv=Gv}ny.builtin$cls="ny"
+if(!"name" in ny)ny.name="ny"
+$desc=$collectedClasses.ny
+if($desc instanceof Array)$desc=$desc[1]
+ny.prototype=$desc
+function dR(a,b,c){this.a=a
+this.b=b
+this.c=c}dR.builtin$cls="dR"
+if(!"name" in dR)dR.name="dR"
+$desc=$collectedClasses.dR
+if($desc instanceof Array)$desc=$desc[1]
+dR.prototype=$desc
+function uR(a,b){this.a=a
+this.b=b}uR.builtin$cls="uR"
+if(!"name" in uR)uR.name="uR"
+$desc=$collectedClasses.uR
+if($desc instanceof Array)$desc=$desc[1]
+uR.prototype=$desc
+function QX(a,b){this.a=a
+this.b=b}QX.builtin$cls="QX"
+if(!"name" in QX)QX.name="QX"
+$desc=$collectedClasses.QX
+if($desc instanceof Array)$desc=$desc[1]
+QX.prototype=$desc
+function YR(){}YR.builtin$cls="YR"
+if(!"name" in YR)YR.name="YR"
+$desc=$collectedClasses.YR
+if($desc instanceof Array)$desc=$desc[1]
+YR.prototype=$desc
+function fB(UY,hG,dB,o7,Bd,Lj,Gv,lz,Ri){this.UY=UY
+this.hG=hG
+this.dB=dB
+this.o7=o7
+this.Bd=Bd
+this.Lj=Lj
+this.Gv=Gv
+this.lz=lz
+this.Ri=Ri}fB.builtin$cls="fB"
+if(!"name" in fB)fB.name="fB"
+$desc=$collectedClasses.fB
+if($desc instanceof Array)$desc=$desc[1]
+fB.prototype=$desc
+function bq(wc,nn,lv,Pp){this.wc=wc
+this.nn=nn
+this.lv=lv
+this.Pp=Pp}bq.builtin$cls="bq"
+$desc=$collectedClasses.bq
+if($desc instanceof Array)$desc=$desc[1]
+bq.prototype=$desc
+function nO(qs,Sb){this.qs=qs
+this.Sb=Sb}nO.builtin$cls="nO"
+if(!"name" in nO)nO.name="nO"
+$desc=$collectedClasses.nO
+if($desc instanceof Array)$desc=$desc[1]
+nO.prototype=$desc
+function t3(TN,Sb){this.TN=TN
+this.Sb=Sb}t3.builtin$cls="t3"
+if(!"name" in t3)t3.name="t3"
+$desc=$collectedClasses.t3
+if($desc instanceof Array)$desc=$desc[1]
+t3.prototype=$desc
+function dq(Em,Sb){this.Em=Em
+this.Sb=Sb}dq.builtin$cls="dq"
+if(!"name" in dq)dq.name="dq"
+$desc=$collectedClasses.dq
+if($desc instanceof Array)$desc=$desc[1]
+dq.prototype=$desc
+function dX(){}dX.builtin$cls="dX"
+if(!"name" in dX)dX.name="dX"
+$desc=$collectedClasses.dX
+if($desc instanceof Array)$desc=$desc[1]
+dX.prototype=$desc
+function aY(){}aY.builtin$cls="aY"
+if(!"name" in aY)aY.name="aY"
+$desc=$collectedClasses.aY
+if($desc instanceof Array)$desc=$desc[1]
+aY.prototype=$desc
+function wJ(E2,cP,vo,eo,Ka,Xp,fb,rb,Zq,rF,JS,iq){this.E2=E2
+this.cP=cP
+this.vo=vo
+this.eo=eo
+this.Ka=Ka
+this.Xp=Xp
+this.fb=fb
+this.rb=rb
+this.Zq=Zq
+this.rF=rF
+this.JS=JS
+this.iq=iq}wJ.builtin$cls="wJ"
+if(!"name" in wJ)wJ.name="wJ"
+$desc=$collectedClasses.wJ
+if($desc instanceof Array)$desc=$desc[1]
+wJ.prototype=$desc
+wJ.prototype.gE2=function(){return this.E2}
+wJ.prototype.gcP=function(){return this.cP}
+wJ.prototype.gvo=function(){return this.vo}
+wJ.prototype.geo=function(){return this.eo}
+wJ.prototype.gKa=function(){return this.Ka}
+wJ.prototype.gXp=function(){return this.Xp}
+wJ.prototype.gfb=function(){return this.fb}
+wJ.prototype.grb=function(){return this.rb}
+wJ.prototype.gZq=function(){return this.Zq}
+wJ.prototype.gJS=function(receiver){return this.JS}
+wJ.prototype.giq=function(){return this.iq}
+function e4(){}e4.builtin$cls="e4"
+if(!"name" in e4)e4.name="e4"
+$desc=$collectedClasses.e4
+if($desc instanceof Array)$desc=$desc[1]
+e4.prototype=$desc
+function JB(){}JB.builtin$cls="JB"
+if(!"name" in JB)JB.name="JB"
+$desc=$collectedClasses.JB
+if($desc instanceof Array)$desc=$desc[1]
+JB.prototype=$desc
+function Id(nU){this.nU=nU}Id.builtin$cls="Id"
+if(!"name" in Id)Id.name="Id"
+$desc=$collectedClasses.Id
+if($desc instanceof Array)$desc=$desc[1]
+Id.prototype=$desc
+function fZ(){}fZ.builtin$cls="fZ"
+if(!"name" in fZ)fZ.name="fZ"
+$desc=$collectedClasses.fZ
+if($desc instanceof Array)$desc=$desc[1]
+fZ.prototype=$desc
+function TF(a,b){this.a=a
+this.b=b}TF.builtin$cls="TF"
+if(!"name" in TF)TF.name="TF"
+$desc=$collectedClasses.TF
+if($desc instanceof Array)$desc=$desc[1]
+TF.prototype=$desc
+function Xz(c,d){this.c=c
+this.d=d}Xz.builtin$cls="Xz"
+if(!"name" in Xz)Xz.name="Xz"
+$desc=$collectedClasses.Xz
+if($desc instanceof Array)$desc=$desc[1]
+Xz.prototype=$desc
+function Cg(a,b){this.a=a
+this.b=b}Cg.builtin$cls="Cg"
+if(!"name" in Cg)Cg.name="Cg"
+$desc=$collectedClasses.Cg
+if($desc instanceof Array)$desc=$desc[1]
+Cg.prototype=$desc
+function Hs(c,d){this.c=c
+this.d=d}Hs.builtin$cls="Hs"
+if(!"name" in Hs)Hs.name="Hs"
+$desc=$collectedClasses.Hs
+if($desc instanceof Array)$desc=$desc[1]
+Hs.prototype=$desc
+function uo(eT,tp,Se){this.eT=eT
+this.tp=tp
+this.Se=Se}uo.builtin$cls="uo"
+if(!"name" in uo)uo.name="uo"
+$desc=$collectedClasses.uo
+if($desc instanceof Array)$desc=$desc[1]
+uo.prototype=$desc
+uo.prototype.geT=function(receiver){return this.eT}
+uo.prototype.gtp=function(){return this.tp}
+function pK(a,b){this.a=a
+this.b=b}pK.builtin$cls="pK"
+if(!"name" in pK)pK.name="pK"
+$desc=$collectedClasses.pK
+if($desc instanceof Array)$desc=$desc[1]
+pK.prototype=$desc
+function eM(c,d){this.c=c
+this.d=d}eM.builtin$cls="eM"
+if(!"name" in eM)eM.name="eM"
+$desc=$collectedClasses.eM
+if($desc instanceof Array)$desc=$desc[1]
+eM.prototype=$desc
+function Ue(a){this.a=a}Ue.builtin$cls="Ue"
+if(!"name" in Ue)Ue.name="Ue"
+$desc=$collectedClasses.Ue
+if($desc instanceof Array)$desc=$desc[1]
+Ue.prototype=$desc
+function W5(){}W5.builtin$cls="W5"
+if(!"name" in W5)W5.name="W5"
+$desc=$collectedClasses.W5
+if($desc instanceof Array)$desc=$desc[1]
+W5.prototype=$desc
+function R8(){}R8.builtin$cls="R8"
+if(!"name" in R8)R8.name="R8"
+$desc=$collectedClasses.R8
+if($desc instanceof Array)$desc=$desc[1]
+R8.prototype=$desc
+function k6(X5,vv,OX,OB,aw){this.X5=X5
+this.vv=vv
+this.OX=OX
+this.OB=OB
+this.aw=aw}k6.builtin$cls="k6"
+if(!"name" in k6)k6.name="k6"
+$desc=$collectedClasses.k6
+if($desc instanceof Array)$desc=$desc[1]
+k6.prototype=$desc
+function oi(a){this.a=a}oi.builtin$cls="oi"
+if(!"name" in oi)oi.name="oi"
+$desc=$collectedClasses.oi
+if($desc instanceof Array)$desc=$desc[1]
+oi.prototype=$desc
+function ce(a,b){this.a=a
+this.b=b}ce.builtin$cls="ce"
+if(!"name" in ce)ce.name="ce"
+$desc=$collectedClasses.ce
+if($desc instanceof Array)$desc=$desc[1]
+ce.prototype=$desc
+function o2(m6,Q6,bR,X5,vv,OX,OB,aw){this.m6=m6
+this.Q6=Q6
+this.bR=bR
+this.X5=X5
+this.vv=vv
+this.OX=OX
+this.OB=OB
+this.aw=aw}o2.builtin$cls="o2"
+if(!"name" in o2)o2.name="o2"
+$desc=$collectedClasses.o2
+if($desc instanceof Array)$desc=$desc[1]
+o2.prototype=$desc
+function jG(a){this.a=a}jG.builtin$cls="jG"
+if(!"name" in jG)jG.name="jG"
+$desc=$collectedClasses.jG
+if($desc instanceof Array)$desc=$desc[1]
+jG.prototype=$desc
+function fG(Fb){this.Fb=Fb}fG.builtin$cls="fG"
+if(!"name" in fG)fG.name="fG"
+$desc=$collectedClasses.fG
+if($desc instanceof Array)$desc=$desc[1]
+fG.prototype=$desc
+function EQ(Fb,aw,zi,fD){this.Fb=Fb
+this.aw=aw
+this.zi=zi
+this.fD=fD}EQ.builtin$cls="EQ"
+if(!"name" in EQ)EQ.name="EQ"
+$desc=$collectedClasses.EQ
+if($desc instanceof Array)$desc=$desc[1]
+EQ.prototype=$desc
+function YB(X5,vv,OX,OB,H9,lX,zN){this.X5=X5
+this.vv=vv
+this.OX=OX
+this.OB=OB
+this.H9=H9
+this.lX=lX
+this.zN=zN}YB.builtin$cls="YB"
+if(!"name" in YB)YB.name="YB"
+$desc=$collectedClasses.YB
+if($desc instanceof Array)$desc=$desc[1]
+YB.prototype=$desc
+function iX(a){this.a=a}iX.builtin$cls="iX"
+if(!"name" in iX)iX.name="iX"
+$desc=$collectedClasses.iX
+if($desc instanceof Array)$desc=$desc[1]
+iX.prototype=$desc
+function ou(a,b){this.a=a
+this.b=b}ou.builtin$cls="ou"
+if(!"name" in ou)ou.name="ou"
+$desc=$collectedClasses.ou
+if($desc instanceof Array)$desc=$desc[1]
+ou.prototype=$desc
+function S9(a){this.a=a}S9.builtin$cls="S9"
+if(!"name" in S9)S9.name="S9"
+$desc=$collectedClasses.S9
+if($desc instanceof Array)$desc=$desc[1]
+S9.prototype=$desc
+function ey(X5,vv,OX,OB,H9,lX,zN){this.X5=X5
+this.vv=vv
+this.OX=OX
+this.OB=OB
+this.H9=H9
+this.lX=lX
+this.zN=zN}ey.builtin$cls="ey"
+if(!"name" in ey)ey.name="ey"
+$desc=$collectedClasses.ey
+if($desc instanceof Array)$desc=$desc[1]
+ey.prototype=$desc
+function xd(m6,Q6,bR,X5,vv,OX,OB,H9,lX,zN){this.m6=m6
+this.Q6=Q6
+this.bR=bR
+this.X5=X5
+this.vv=vv
+this.OX=OX
+this.OB=OB
+this.H9=H9
+this.lX=lX
+this.zN=zN}xd.builtin$cls="xd"
+if(!"name" in xd)xd.name="xd"
+$desc=$collectedClasses.xd
+if($desc instanceof Array)$desc=$desc[1]
+xd.prototype=$desc
+function v6(a){this.a=a}v6.builtin$cls="v6"
+if(!"name" in v6)v6.name="v6"
+$desc=$collectedClasses.v6
+if($desc instanceof Array)$desc=$desc[1]
+v6.prototype=$desc
+function db(kh,S4,DG,zQ){this.kh=kh
+this.S4=S4
+this.DG=DG
+this.zQ=zQ}db.builtin$cls="db"
+if(!"name" in db)db.name="db"
+$desc=$collectedClasses.db
+if($desc instanceof Array)$desc=$desc[1]
+db.prototype=$desc
+db.prototype.gkh=function(){return this.kh}
+db.prototype.gS4=function(){return this.S4}
+db.prototype.sS4=function(v){return this.S4=v}
+db.prototype.gDG=function(){return this.DG}
+db.prototype.sDG=function(v){return this.DG=v}
+db.prototype.gzQ=function(){return this.zQ}
+db.prototype.szQ=function(v){return this.zQ=v}
+function Cm(Fb){this.Fb=Fb}Cm.builtin$cls="Cm"
+if(!"name" in Cm)Cm.name="Cm"
+$desc=$collectedClasses.Cm
+if($desc instanceof Array)$desc=$desc[1]
+Cm.prototype=$desc
+function N6(Fb,zN,zq,fD){this.Fb=Fb
+this.zN=zN
+this.zq=zq
+this.fD=fD}N6.builtin$cls="N6"
+if(!"name" in N6)N6.name="N6"
+$desc=$collectedClasses.N6
+if($desc instanceof Array)$desc=$desc[1]
+N6.prototype=$desc
+function jg(){}jg.builtin$cls="jg"
+if(!"name" in jg)jg.name="jg"
+$desc=$collectedClasses.jg
+if($desc instanceof Array)$desc=$desc[1]
+jg.prototype=$desc
+function YO(X5,vv,OX,OB,DM){this.X5=X5
+this.vv=vv
+this.OX=OX
+this.OB=OB
+this.DM=DM}YO.builtin$cls="YO"
+if(!"name" in YO)YO.name="YO"
+$desc=$collectedClasses.YO
+if($desc instanceof Array)$desc=$desc[1]
+YO.prototype=$desc
+function oz(O2,DM,zi,fD){this.O2=O2
+this.DM=DM
+this.zi=zi
+this.fD=fD}oz.builtin$cls="oz"
+if(!"name" in oz)oz.name="oz"
+$desc=$collectedClasses.oz
+if($desc instanceof Array)$desc=$desc[1]
+oz.prototype=$desc
+function b6(X5,vv,OX,OB,H9,lX,zN){this.X5=X5
+this.vv=vv
+this.OX=OX
+this.OB=OB
+this.H9=H9
+this.lX=lX
+this.zN=zN}b6.builtin$cls="b6"
+if(!"name" in b6)b6.name="b6"
+$desc=$collectedClasses.b6
+if($desc instanceof Array)$desc=$desc[1]
+b6.prototype=$desc
+function ef(Gc,DG,zQ){this.Gc=Gc
+this.DG=DG
+this.zQ=zQ}ef.builtin$cls="ef"
+if(!"name" in ef)ef.name="ef"
+$desc=$collectedClasses.ef
+if($desc instanceof Array)$desc=$desc[1]
+ef.prototype=$desc
+ef.prototype.gGc=function(){return this.Gc}
+ef.prototype.gDG=function(){return this.DG}
+ef.prototype.sDG=function(v){return this.DG=v}
+ef.prototype.gzQ=function(){return this.zQ}
+ef.prototype.szQ=function(v){return this.zQ=v}
+function zQ(O2,zN,zq,fD){this.O2=O2
+this.zN=zN
+this.zq=zq
+this.fD=fD}zQ.builtin$cls="zQ"
+if(!"name" in zQ)zQ.name="zQ"
+$desc=$collectedClasses.zQ
+if($desc instanceof Array)$desc=$desc[1]
+zQ.prototype=$desc
+function Yp(G4){this.G4=G4}Yp.builtin$cls="Yp"
+if(!"name" in Yp)Yp.name="Yp"
+$desc=$collectedClasses.Yp
+if($desc instanceof Array)$desc=$desc[1]
+Yp.prototype=$desc
+function u3(){}u3.builtin$cls="u3"
+if(!"name" in u3)u3.name="u3"
+$desc=$collectedClasses.u3
+if($desc instanceof Array)$desc=$desc[1]
+u3.prototype=$desc
+function mW(){}mW.builtin$cls="mW"
+if(!"name" in mW)mW.name="mW"
+$desc=$collectedClasses.mW
+if($desc instanceof Array)$desc=$desc[1]
+mW.prototype=$desc
+function ar(){}ar.builtin$cls="ar"
+if(!"name" in ar)ar.name="ar"
+$desc=$collectedClasses.ar
+if($desc instanceof Array)$desc=$desc[1]
+ar.prototype=$desc
+function lD(){}lD.builtin$cls="lD"
+if(!"name" in lD)lD.name="lD"
+$desc=$collectedClasses.lD
+if($desc instanceof Array)$desc=$desc[1]
+lD.prototype=$desc
+function W0(a,b){this.a=a
+this.b=b}W0.builtin$cls="W0"
+if(!"name" in W0)W0.name="W0"
+$desc=$collectedClasses.W0
+if($desc instanceof Array)$desc=$desc[1]
+W0.prototype=$desc
+function Sw(v5,av,HV,qT){this.v5=v5
+this.av=av
+this.HV=HV
+this.qT=qT}Sw.builtin$cls="Sw"
+if(!"name" in Sw)Sw.name="Sw"
+$desc=$collectedClasses.Sw
+if($desc instanceof Array)$desc=$desc[1]
+Sw.prototype=$desc
+function o0(Lz,dP,qT,Dc,fD){this.Lz=Lz
+this.dP=dP
+this.qT=qT
+this.Dc=Dc
+this.fD=fD}o0.builtin$cls="o0"
+if(!"name" in o0)o0.name="o0"
+$desc=$collectedClasses.o0
+if($desc instanceof Array)$desc=$desc[1]
+o0.prototype=$desc
+function a1(G3,Bb,T8){this.G3=G3
+this.Bb=Bb
+this.T8=T8}a1.builtin$cls="a1"
+if(!"name" in a1)a1.name="a1"
+$desc=$collectedClasses.a1
+if($desc instanceof Array)$desc=$desc[1]
+a1.prototype=$desc
+a1.prototype.gG3=function(receiver){return this.G3}
+a1.prototype.gBb=function(receiver){return this.Bb}
+a1.prototype.gT8=function(receiver){return this.T8}
+function jp(P,G3,Bb,T8){this.P=P
+this.G3=G3
+this.Bb=Bb
+this.T8=T8}jp.builtin$cls="jp"
+if(!"name" in jp)jp.name="jp"
+$desc=$collectedClasses.jp
+if($desc instanceof Array)$desc=$desc[1]
+jp.prototype=$desc
+jp.prototype.gP=function(receiver){return this.P}
+jp.prototype.sP=function(receiver,v){return this.P=v}
+function Xt(){}Xt.builtin$cls="Xt"
+if(!"name" in Xt)Xt.name="Xt"
+$desc=$collectedClasses.Xt
+if($desc instanceof Array)$desc=$desc[1]
+Xt.prototype=$desc
+function Ba(Cw,bR,aY,iW,J0,qT,bb){this.Cw=Cw
+this.bR=bR
+this.aY=aY
+this.iW=iW
+this.J0=J0
+this.qT=qT
+this.bb=bb}Ba.builtin$cls="Ba"
+if(!"name" in Ba)Ba.name="Ba"
+$desc=$collectedClasses.Ba
+if($desc instanceof Array)$desc=$desc[1]
+Ba.prototype=$desc
+function An(a){this.a=a}An.builtin$cls="An"
+if(!"name" in An)An.name="An"
+$desc=$collectedClasses.An
+if($desc instanceof Array)$desc=$desc[1]
+An.prototype=$desc
+function LD(a,b,c){this.a=a
+this.b=b
+this.c=c}LD.builtin$cls="LD"
+if(!"name" in LD)LD.name="LD"
+$desc=$collectedClasses.LD
+if($desc instanceof Array)$desc=$desc[1]
+LD.prototype=$desc
+function YI(){}YI.builtin$cls="YI"
+if(!"name" in YI)YI.name="YI"
+$desc=$collectedClasses.YI
+if($desc instanceof Array)$desc=$desc[1]
+YI.prototype=$desc
+function OG(Dn){this.Dn=Dn}OG.builtin$cls="OG"
+if(!"name" in OG)OG.name="OG"
+$desc=$collectedClasses.OG
+if($desc instanceof Array)$desc=$desc[1]
+OG.prototype=$desc
+function ro(Fb){this.Fb=Fb}ro.builtin$cls="ro"
+if(!"name" in ro)ro.name="ro"
+$desc=$collectedClasses.ro
+if($desc instanceof Array)$desc=$desc[1]
+ro.prototype=$desc
+function DN(Dn,Ln,qT,bb,ya){this.Dn=Dn
+this.Ln=Ln
+this.qT=qT
+this.bb=bb
+this.ya=ya}DN.builtin$cls="DN"
+if(!"name" in DN)DN.name="DN"
+$desc=$collectedClasses.DN
+if($desc instanceof Array)$desc=$desc[1]
+DN.prototype=$desc
+function ZM(Dn,Ln,qT,bb,ya){this.Dn=Dn
+this.Ln=Ln
+this.qT=qT
+this.bb=bb
+this.ya=ya}ZM.builtin$cls="ZM"
+if(!"name" in ZM)ZM.name="ZM"
+$desc=$collectedClasses.ZM
+if($desc instanceof Array)$desc=$desc[1]
+ZM.prototype=$desc
+function HW(Dn,Ln,qT,bb,ya){this.Dn=Dn
+this.Ln=Ln
+this.qT=qT
+this.bb=bb
+this.ya=ya}HW.builtin$cls="HW"
+if(!"name" in HW)HW.name="HW"
+$desc=$collectedClasses.HW
+if($desc instanceof Array)$desc=$desc[1]
+HW.prototype=$desc
+function JC(){}JC.builtin$cls="JC"
+if(!"name" in JC)JC.name="JC"
+$desc=$collectedClasses.JC
+if($desc instanceof Array)$desc=$desc[1]
+JC.prototype=$desc
+function f1(a){this.a=a}f1.builtin$cls="f1"
+if(!"name" in f1)f1.name="f1"
+$desc=$collectedClasses.f1
+if($desc instanceof Array)$desc=$desc[1]
+f1.prototype=$desc
+function Uk(){}Uk.builtin$cls="Uk"
+if(!"name" in Uk)Uk.name="Uk"
+$desc=$collectedClasses.Uk
+if($desc instanceof Array)$desc=$desc[1]
+Uk.prototype=$desc
+function wI(){}wI.builtin$cls="wI"
+if(!"name" in wI)wI.name="wI"
+$desc=$collectedClasses.wI
+if($desc instanceof Array)$desc=$desc[1]
+wI.prototype=$desc
+function ob(){}ob.builtin$cls="ob"
+if(!"name" in ob)ob.name="ob"
+$desc=$collectedClasses.ob
+if($desc instanceof Array)$desc=$desc[1]
+ob.prototype=$desc
+function Ud(Ct,FN){this.Ct=Ct
+this.FN=FN}Ud.builtin$cls="Ud"
+if(!"name" in Ud)Ud.name="Ud"
+$desc=$collectedClasses.Ud
+if($desc instanceof Array)$desc=$desc[1]
+Ud.prototype=$desc
+function K8(Ct,FN){this.Ct=Ct
+this.FN=FN}K8.builtin$cls="K8"
+if(!"name" in K8)K8.name="K8"
+$desc=$collectedClasses.K8
+if($desc instanceof Array)$desc=$desc[1]
+K8.prototype=$desc
+function by(){}by.builtin$cls="by"
+if(!"name" in by)by.name="by"
+$desc=$collectedClasses.by
+if($desc instanceof Array)$desc=$desc[1]
+by.prototype=$desc
+function dI(ke){this.ke=ke}dI.builtin$cls="dI"
+if(!"name" in dI)dI.name="dI"
+$desc=$collectedClasses.dI
+if($desc instanceof Array)$desc=$desc[1]
+dI.prototype=$desc
+function QM(N5){this.N5=N5}QM.builtin$cls="QM"
+if(!"name" in QM)QM.name="QM"
+$desc=$collectedClasses.QM
+if($desc instanceof Array)$desc=$desc[1]
+QM.prototype=$desc
+function Sh(WE,u4,JN){this.WE=WE
+this.u4=u4
+this.JN=JN}Sh.builtin$cls="Sh"
+if(!"name" in Sh)Sh.name="Sh"
+$desc=$collectedClasses.Sh
+if($desc instanceof Array)$desc=$desc[1]
+Sh.prototype=$desc
+function tF(a,b){this.a=a
+this.b=b}tF.builtin$cls="tF"
+if(!"name" in tF)tF.name="tF"
+$desc=$collectedClasses.tF
+if($desc instanceof Array)$desc=$desc[1]
+tF.prototype=$desc
+function z0(lH){this.lH=lH}z0.builtin$cls="z0"
+if(!"name" in z0)z0.name="z0"
+$desc=$collectedClasses.z0
+if($desc instanceof Array)$desc=$desc[1]
+z0.prototype=$desc
+function Vx(){}Vx.builtin$cls="Vx"
+if(!"name" in Vx)Vx.name="Vx"
+$desc=$collectedClasses.Vx
+if($desc instanceof Array)$desc=$desc[1]
+Vx.prototype=$desc
+function Rw(vn,An,EN){this.vn=vn
+this.An=An
+this.EN=EN}Rw.builtin$cls="Rw"
+if(!"name" in Rw)Rw.name="Rw"
+$desc=$collectedClasses.Rw
+if($desc instanceof Array)$desc=$desc[1]
+Rw.prototype=$desc
+function GY(lH){this.lH=lH}GY.builtin$cls="GY"
+if(!"name" in GY)GY.name="GY"
+$desc=$collectedClasses.GY
+if($desc instanceof Array)$desc=$desc[1]
+GY.prototype=$desc
+function jZ(lH,aS,rU,Hu,iU,VN){this.lH=lH
+this.aS=aS
+this.rU=rU
+this.Hu=Hu
+this.iU=iU
+this.VN=VN}jZ.builtin$cls="jZ"
+if(!"name" in jZ)jZ.name="jZ"
+$desc=$collectedClasses.jZ
+if($desc instanceof Array)$desc=$desc[1]
+jZ.prototype=$desc
+function h0(a){this.a=a}h0.builtin$cls="h0"
+if(!"name" in h0)h0.name="h0"
+$desc=$collectedClasses.h0
+if($desc instanceof Array)$desc=$desc[1]
+h0.prototype=$desc
+function CL(a){this.a=a}CL.builtin$cls="CL"
+if(!"name" in CL)CL.name="CL"
+$desc=$collectedClasses.CL
+if($desc instanceof Array)$desc=$desc[1]
+CL.prototype=$desc
+function uA(OF){this.OF=OF}uA.builtin$cls="uA"
+if(!"name" in uA)uA.name="uA"
+$desc=$collectedClasses.uA
+if($desc instanceof Array)$desc=$desc[1]
+uA.prototype=$desc
+function a2(){}a2.builtin$cls="a2"
+if(!"name" in a2)a2.name="a2"
+$desc=$collectedClasses.a2
+if($desc instanceof Array)$desc=$desc[1]
+a2.prototype=$desc
+function fR(){}fR.builtin$cls="fR"
+if(!"name" in fR)fR.name="fR"
+$desc=$collectedClasses.fR
+if($desc instanceof Array)$desc=$desc[1]
+fR.prototype=$desc
+function iP(rq,aL){this.rq=rq
+this.aL=aL}iP.builtin$cls="iP"
+if(!"name" in iP)iP.name="iP"
+$desc=$collectedClasses.iP
+if($desc instanceof Array)$desc=$desc[1]
+iP.prototype=$desc
+iP.prototype.grq=function(){return this.rq}
+function MF(){}MF.builtin$cls="MF"
+if(!"name" in MF)MF.name="MF"
+$desc=$collectedClasses.MF
+if($desc instanceof Array)$desc=$desc[1]
+MF.prototype=$desc
+function Rq(){}Rq.builtin$cls="Rq"
+if(!"name" in Rq)Rq.name="Rq"
+$desc=$collectedClasses.Rq
+if($desc instanceof Array)$desc=$desc[1]
+Rq.prototype=$desc
+function Hn(){}Hn.builtin$cls="Hn"
+if(!"name" in Hn)Hn.name="Hn"
+$desc=$collectedClasses.Hn
+if($desc instanceof Array)$desc=$desc[1]
+Hn.prototype=$desc
+function Zl(){}Zl.builtin$cls="Zl"
+if(!"name" in Zl)Zl.name="Zl"
+$desc=$collectedClasses.Zl
+if($desc instanceof Array)$desc=$desc[1]
+Zl.prototype=$desc
+function pl(){}pl.builtin$cls="pl"
+if(!"name" in pl)pl.name="pl"
+$desc=$collectedClasses.pl
+if($desc instanceof Array)$desc=$desc[1]
+pl.prototype=$desc
+function a6(Fq){this.Fq=Fq}a6.builtin$cls="a6"
+if(!"name" in a6)a6.name="a6"
+$desc=$collectedClasses.a6
+if($desc instanceof Array)$desc=$desc[1]
+a6.prototype=$desc
+a6.prototype.gFq=function(){return this.Fq}
+function P7(){}P7.builtin$cls="P7"
+if(!"name" in P7)P7.name="P7"
+$desc=$collectedClasses.P7
+if($desc instanceof Array)$desc=$desc[1]
+P7.prototype=$desc
+function DW(){}DW.builtin$cls="DW"
+if(!"name" in DW)DW.name="DW"
+$desc=$collectedClasses.DW
+if($desc instanceof Array)$desc=$desc[1]
+DW.prototype=$desc
+function Ge(){}Ge.builtin$cls="Ge"
+if(!"name" in Ge)Ge.name="Ge"
+$desc=$collectedClasses.Ge
+if($desc instanceof Array)$desc=$desc[1]
+Ge.prototype=$desc
+function LK(){}LK.builtin$cls="LK"
+if(!"name" in LK)LK.name="LK"
+$desc=$collectedClasses.LK
+if($desc instanceof Array)$desc=$desc[1]
+LK.prototype=$desc
+function AT(G1){this.G1=G1}AT.builtin$cls="AT"
+if(!"name" in AT)AT.name="AT"
+$desc=$collectedClasses.AT
+if($desc instanceof Array)$desc=$desc[1]
+AT.prototype=$desc
+AT.prototype.gG1=function(receiver){return this.G1}
+function bJ(G1){this.G1=G1}bJ.builtin$cls="bJ"
+if(!"name" in bJ)bJ.name="bJ"
+$desc=$collectedClasses.bJ
+if($desc instanceof Array)$desc=$desc[1]
+bJ.prototype=$desc
+function mp(uF,UP,mP,SA,vG){this.uF=uF
+this.UP=UP
+this.mP=mP
+this.SA=SA
+this.vG=vG}mp.builtin$cls="mp"
+if(!"name" in mp)mp.name="mp"
+$desc=$collectedClasses.mp
+if($desc instanceof Array)$desc=$desc[1]
+mp.prototype=$desc
+function ub(G1){this.G1=G1}ub.builtin$cls="ub"
+if(!"name" in ub)ub.name="ub"
+$desc=$collectedClasses.ub
+if($desc instanceof Array)$desc=$desc[1]
+ub.prototype=$desc
+ub.prototype.gG1=function(receiver){return this.G1}
+function ds(G1){this.G1=G1}ds.builtin$cls="ds"
+if(!"name" in ds)ds.name="ds"
+$desc=$collectedClasses.ds
+if($desc instanceof Array)$desc=$desc[1]
+ds.prototype=$desc
+ds.prototype.gG1=function(receiver){return this.G1}
+function lj(G1){this.G1=G1}lj.builtin$cls="lj"
+if(!"name" in lj)lj.name="lj"
+$desc=$collectedClasses.lj
+if($desc instanceof Array)$desc=$desc[1]
+lj.prototype=$desc
+lj.prototype.gG1=function(receiver){return this.G1}
+function UV(YA){this.YA=YA}UV.builtin$cls="UV"
+if(!"name" in UV)UV.name="UV"
+$desc=$collectedClasses.UV
+if($desc instanceof Array)$desc=$desc[1]
+UV.prototype=$desc
+function VS(){}VS.builtin$cls="VS"
+if(!"name" in VS)VS.name="VS"
+$desc=$collectedClasses.VS
+if($desc instanceof Array)$desc=$desc[1]
+VS.prototype=$desc
+function t7(Wo){this.Wo=Wo}t7.builtin$cls="t7"
+if(!"name" in t7)t7.name="t7"
+$desc=$collectedClasses.t7
+if($desc instanceof Array)$desc=$desc[1]
+t7.prototype=$desc
+function HG(G1){this.G1=G1}HG.builtin$cls="HG"
+if(!"name" in HG)HG.name="HG"
+$desc=$collectedClasses.HG
+if($desc instanceof Array)$desc=$desc[1]
+HG.prototype=$desc
+HG.prototype.gG1=function(receiver){return this.G1}
+function aE(G1){this.G1=G1}aE.builtin$cls="aE"
+if(!"name" in aE)aE.name="aE"
+$desc=$collectedClasses.aE
+if($desc instanceof Array)$desc=$desc[1]
+aE.prototype=$desc
+aE.prototype.gG1=function(receiver){return this.G1}
+function kM(oc){this.oc=oc}kM.builtin$cls="kM"
+if(!"name" in kM)kM.name="kM"
+$desc=$collectedClasses.kM
+if($desc instanceof Array)$desc=$desc[1]
+kM.prototype=$desc
+kM.prototype.goc=function(receiver){return this.oc}
+function EH(){}EH.builtin$cls="EH"
+if(!"name" in EH)EH.name="EH"
+$desc=$collectedClasses.EH
+if($desc instanceof Array)$desc=$desc[1]
+EH.prototype=$desc
+function cX(){}cX.builtin$cls="cX"
+if(!"name" in cX)cX.name="cX"
+$desc=$collectedClasses.cX
+if($desc instanceof Array)$desc=$desc[1]
+cX.prototype=$desc
+function eL(){}eL.builtin$cls="eL"
+if(!"name" in eL)eL.name="eL"
+$desc=$collectedClasses.eL
+if($desc instanceof Array)$desc=$desc[1]
+eL.prototype=$desc
+function L8(){}L8.builtin$cls="L8"
+if(!"name" in L8)L8.name="L8"
+$desc=$collectedClasses.L8
+if($desc instanceof Array)$desc=$desc[1]
+L8.prototype=$desc
+function c8(){}c8.builtin$cls="c8"
+if(!"name" in c8)c8.name="c8"
+$desc=$collectedClasses.c8
+if($desc instanceof Array)$desc=$desc[1]
+c8.prototype=$desc
+function a(){}a.builtin$cls="a"
+if(!"name" in a)a.name="a"
+$desc=$collectedClasses.a
+if($desc instanceof Array)$desc=$desc[1]
+a.prototype=$desc
+function Od(){}Od.builtin$cls="Od"
+if(!"name" in Od)Od.name="Od"
+$desc=$collectedClasses.Od
+if($desc instanceof Array)$desc=$desc[1]
+Od.prototype=$desc
+function mE(){}mE.builtin$cls="mE"
+if(!"name" in mE)mE.name="mE"
+$desc=$collectedClasses.mE
+if($desc instanceof Array)$desc=$desc[1]
+mE.prototype=$desc
+function WU(Qk,SU,Oq,Wn){this.Qk=Qk
+this.SU=SU
+this.Oq=Oq
+this.Wn=Wn}WU.builtin$cls="WU"
+if(!"name" in WU)WU.name="WU"
+$desc=$collectedClasses.WU
+if($desc instanceof Array)$desc=$desc[1]
+WU.prototype=$desc
+function Rn(vM){this.vM=vM}Rn.builtin$cls="Rn"
+if(!"name" in Rn)Rn.name="Rn"
+$desc=$collectedClasses.Rn
+if($desc instanceof Array)$desc=$desc[1]
+Rn.prototype=$desc
+Rn.prototype.gvM=function(){return this.vM}
+function wv(){}wv.builtin$cls="wv"
+if(!"name" in wv)wv.name="wv"
+$desc=$collectedClasses.wv
+if($desc instanceof Array)$desc=$desc[1]
+wv.prototype=$desc
+function uq(){}uq.builtin$cls="uq"
+if(!"name" in uq)uq.name="uq"
+$desc=$collectedClasses.uq
+if($desc instanceof Array)$desc=$desc[1]
+uq.prototype=$desc
+function iD(NN,HC,r0,Fi,iV,tP,BJ,MS,yW){this.NN=NN
+this.HC=HC
+this.r0=r0
+this.Fi=Fi
+this.iV=iV
+this.tP=tP
+this.BJ=BJ
+this.MS=MS
+this.yW=yW}iD.builtin$cls="iD"
+if(!"name" in iD)iD.name="iD"
+$desc=$collectedClasses.iD
+if($desc instanceof Array)$desc=$desc[1]
+iD.prototype=$desc
+function hb(){}hb.builtin$cls="hb"
+if(!"name" in hb)hb.name="hb"
+$desc=$collectedClasses.hb
+if($desc instanceof Array)$desc=$desc[1]
+hb.prototype=$desc
+function XX(){}XX.builtin$cls="XX"
+if(!"name" in XX)XX.name="XX"
+$desc=$collectedClasses.XX
+if($desc instanceof Array)$desc=$desc[1]
+XX.prototype=$desc
+function Kd(){}Kd.builtin$cls="Kd"
+if(!"name" in Kd)Kd.name="Kd"
+$desc=$collectedClasses.Kd
+if($desc instanceof Array)$desc=$desc[1]
+Kd.prototype=$desc
+function yZ(a,b){this.a=a
+this.b=b}yZ.builtin$cls="yZ"
+if(!"name" in yZ)yZ.name="yZ"
+$desc=$collectedClasses.yZ
+if($desc instanceof Array)$desc=$desc[1]
+yZ.prototype=$desc
+function Gs(){}Gs.builtin$cls="Gs"
+if(!"name" in Gs)Gs.name="Gs"
+$desc=$collectedClasses.Gs
+if($desc instanceof Array)$desc=$desc[1]
+Gs.prototype=$desc
+function pm(){}pm.builtin$cls="pm"
+if(!"name" in pm)pm.name="pm"
+$desc=$collectedClasses.pm
+if($desc instanceof Array)$desc=$desc[1]
+pm.prototype=$desc
+function Tw(){}Tw.builtin$cls="Tw"
+if(!"name" in Tw)Tw.name="Tw"
+$desc=$collectedClasses.Tw
+if($desc instanceof Array)$desc=$desc[1]
+Tw.prototype=$desc
+function wm(b,c,d){this.b=b
+this.c=c
+this.d=d}wm.builtin$cls="wm"
+if(!"name" in wm)wm.name="wm"
+$desc=$collectedClasses.wm
+if($desc instanceof Array)$desc=$desc[1]
+wm.prototype=$desc
+function FB(e){this.e=e}FB.builtin$cls="FB"
+if(!"name" in FB)FB.name="FB"
+$desc=$collectedClasses.FB
+if($desc instanceof Array)$desc=$desc[1]
+FB.prototype=$desc
+function Lk(a,f){this.a=a
+this.f=f}Lk.builtin$cls="Lk"
+if(!"name" in Lk)Lk.name="Lk"
+$desc=$collectedClasses.Lk
+if($desc instanceof Array)$desc=$desc[1]
+Lk.prototype=$desc
+function XZ(){}XZ.builtin$cls="XZ"
+if(!"name" in XZ)XZ.name="XZ"
+$desc=$collectedClasses.XZ
+if($desc instanceof Array)$desc=$desc[1]
+XZ.prototype=$desc
+function qz(a){this.a=a}qz.builtin$cls="qz"
+if(!"name" in qz)qz.name="qz"
+$desc=$collectedClasses.qz
+if($desc instanceof Array)$desc=$desc[1]
+qz.prototype=$desc
+function hQ(){}hQ.builtin$cls="hQ"
+if(!"name" in hQ)hQ.name="hQ"
+$desc=$collectedClasses.hQ
+if($desc instanceof Array)$desc=$desc[1]
+hQ.prototype=$desc
+function Nw(a){this.a=a}Nw.builtin$cls="Nw"
+if(!"name" in Nw)Nw.name="Nw"
+$desc=$collectedClasses.Nw
+if($desc instanceof Array)$desc=$desc[1]
+Nw.prototype=$desc
+function kZ(){}kZ.builtin$cls="kZ"
+if(!"name" in kZ)kZ.name="kZ"
+$desc=$collectedClasses.kZ
+if($desc instanceof Array)$desc=$desc[1]
+kZ.prototype=$desc
+function JT(a,b){this.a=a
+this.b=b}JT.builtin$cls="JT"
+if(!"name" in JT)JT.name="JT"
+$desc=$collectedClasses.JT
+if($desc instanceof Array)$desc=$desc[1]
+JT.prototype=$desc
+function d9(c){this.c=c}d9.builtin$cls="d9"
+if(!"name" in d9)d9.name="d9"
+$desc=$collectedClasses.d9
+if($desc instanceof Array)$desc=$desc[1]
+d9.prototype=$desc
+function rI(){}rI.builtin$cls="rI"
+if(!"name" in rI)rI.name="rI"
+$desc=$collectedClasses.rI
+if($desc instanceof Array)$desc=$desc[1]
+rI.prototype=$desc
+function dD(iY){this.iY=iY}dD.builtin$cls="dD"
+if(!"name" in dD)dD.name="dD"
+$desc=$collectedClasses.dD
+if($desc instanceof Array)$desc=$desc[1]
+dD.prototype=$desc
+function QZ(){}QZ.builtin$cls="QZ"
+if(!"name" in QZ)QZ.name="QZ"
+$desc=$collectedClasses.QZ
+if($desc instanceof Array)$desc=$desc[1]
+QZ.prototype=$desc
+function BV(){}BV.builtin$cls="BV"
+if(!"name" in BV)BV.name="BV"
+$desc=$collectedClasses.BV
+if($desc instanceof Array)$desc=$desc[1]
+BV.prototype=$desc
+function E1(){}E1.builtin$cls="E1"
+if(!"name" in E1)E1.name="E1"
+$desc=$collectedClasses.E1
+if($desc instanceof Array)$desc=$desc[1]
+E1.prototype=$desc
+function wz(Sn,Sc){this.Sn=Sn
+this.Sc=Sc}wz.builtin$cls="wz"
+if(!"name" in wz)wz.name="wz"
+$desc=$collectedClasses.wz
+if($desc instanceof Array)$desc=$desc[1]
+wz.prototype=$desc
+function B1(){}B1.builtin$cls="B1"
+if(!"name" in B1)B1.name="B1"
+$desc=$collectedClasses.B1
+if($desc instanceof Array)$desc=$desc[1]
+B1.prototype=$desc
+function M5(){}M5.builtin$cls="M5"
+if(!"name" in M5)M5.name="M5"
+$desc=$collectedClasses.M5
+if($desc instanceof Array)$desc=$desc[1]
+M5.prototype=$desc
+function Jn(WK){this.WK=WK}Jn.builtin$cls="Jn"
+if(!"name" in Jn)Jn.name="Jn"
+$desc=$collectedClasses.Jn
+if($desc instanceof Array)$desc=$desc[1]
+Jn.prototype=$desc
+Jn.prototype.gWK=function(){return this.WK}
+function DM(WK,vW){this.WK=WK
+this.vW=vW}DM.builtin$cls="DM"
+if(!"name" in DM)DM.name="DM"
+$desc=$collectedClasses.DM
+if($desc instanceof Array)$desc=$desc[1]
+DM.prototype=$desc
+DM.prototype.gWK=function(){return this.WK}
+function zL(){}zL.builtin$cls="zL"
+if(!"name" in zL)zL.name="zL"
+$desc=$collectedClasses.zL
+if($desc instanceof Array)$desc=$desc[1]
+zL.prototype=$desc
+function ec(){}ec.builtin$cls="ec"
+if(!"name" in ec)ec.name="ec"
+$desc=$collectedClasses.ec
+if($desc instanceof Array)$desc=$desc[1]
+ec.prototype=$desc
+function Kx(){}Kx.builtin$cls="Kx"
+if(!"name" in Kx)Kx.name="Kx"
+$desc=$collectedClasses.Kx
+if($desc instanceof Array)$desc=$desc[1]
+Kx.prototype=$desc
+function iO(a){this.a=a}iO.builtin$cls="iO"
+if(!"name" in iO)iO.name="iO"
+$desc=$collectedClasses.iO
+if($desc instanceof Array)$desc=$desc[1]
+iO.prototype=$desc
+function bU(b,c){this.b=b
+this.c=c}bU.builtin$cls="bU"
+if(!"name" in bU)bU.name="bU"
+$desc=$collectedClasses.bU
+if($desc instanceof Array)$desc=$desc[1]
+bU.prototype=$desc
+function e7(NL){this.NL=NL}e7.builtin$cls="e7"
+if(!"name" in e7)e7.name="e7"
+$desc=$collectedClasses.e7
+if($desc instanceof Array)$desc=$desc[1]
+e7.prototype=$desc
+function nj(){}nj.builtin$cls="nj"
+if(!"name" in nj)nj.name="nj"
+$desc=$collectedClasses.nj
+if($desc instanceof Array)$desc=$desc[1]
+nj.prototype=$desc
+function rl(){}rl.builtin$cls="rl"
+if(!"name" in rl)rl.name="rl"
+$desc=$collectedClasses.rl
+if($desc instanceof Array)$desc=$desc[1]
+rl.prototype=$desc
+function RAp(){}RAp.builtin$cls="RAp"
+if(!"name" in RAp)RAp.name="RAp"
+$desc=$collectedClasses.RAp
+if($desc instanceof Array)$desc=$desc[1]
+RAp.prototype=$desc
+function ma(){}ma.builtin$cls="ma"
+if(!"name" in ma)ma.name="ma"
+$desc=$collectedClasses.ma
+if($desc instanceof Array)$desc=$desc[1]
+ma.prototype=$desc
+function cf(){}cf.builtin$cls="cf"
+if(!"name" in cf)cf.name="cf"
+$desc=$collectedClasses.cf
+if($desc instanceof Array)$desc=$desc[1]
+cf.prototype=$desc
+function E9(MW){this.MW=MW}E9.builtin$cls="E9"
+if(!"name" in E9)E9.name="E9"
+$desc=$collectedClasses.E9
+if($desc instanceof Array)$desc=$desc[1]
+E9.prototype=$desc
+function nF(QX,Kd){this.QX=QX
+this.Kd=Kd}nF.builtin$cls="nF"
+if(!"name" in nF)nF.name="nF"
+$desc=$collectedClasses.nF
+if($desc instanceof Array)$desc=$desc[1]
+nF.prototype=$desc
+function FK(){}FK.builtin$cls="FK"
+if(!"name" in FK)FK.name="FK"
+$desc=$collectedClasses.FK
+if($desc instanceof Array)$desc=$desc[1]
+FK.prototype=$desc
+function Si(a){this.a=a}Si.builtin$cls="Si"
+if(!"name" in Si)Si.name="Si"
+$desc=$collectedClasses.Si
+if($desc instanceof Array)$desc=$desc[1]
+Si.prototype=$desc
+function vf(a){this.a=a}vf.builtin$cls="vf"
+if(!"name" in vf)vf.name="vf"
+$desc=$collectedClasses.vf
+if($desc instanceof Array)$desc=$desc[1]
+vf.prototype=$desc
+function Fc(a){this.a=a}Fc.builtin$cls="Fc"
+if(!"name" in Fc)Fc.name="Fc"
+$desc=$collectedClasses.Fc
+if($desc instanceof Array)$desc=$desc[1]
+Fc.prototype=$desc
+function hD(a){this.a=a}hD.builtin$cls="hD"
+if(!"name" in hD)hD.name="hD"
+$desc=$collectedClasses.hD
+if($desc instanceof Array)$desc=$desc[1]
+hD.prototype=$desc
+function I4(MW){this.MW=MW}I4.builtin$cls="I4"
+if(!"name" in I4)I4.name="I4"
+$desc=$collectedClasses.I4
+if($desc instanceof Array)$desc=$desc[1]
+I4.prototype=$desc
+function e0(Ph){this.Ph=Ph}e0.builtin$cls="e0"
+if(!"name" in e0)e0.name="e0"
+$desc=$collectedClasses.e0
+if($desc instanceof Array)$desc=$desc[1]
+e0.prototype=$desc
+function RO(uv,Ph,Sg){this.uv=uv
+this.Ph=Ph
+this.Sg=Sg}RO.builtin$cls="RO"
+if(!"name" in RO)RO.name="RO"
+$desc=$collectedClasses.RO
+if($desc instanceof Array)$desc=$desc[1]
+RO.prototype=$desc
+function eu(uv,Ph,Sg){this.uv=uv
+this.Ph=Ph
+this.Sg=Sg}eu.builtin$cls="eu"
+if(!"name" in eu)eu.name="eu"
+$desc=$collectedClasses.eu
+if($desc instanceof Array)$desc=$desc[1]
+eu.prototype=$desc
+function ie(a){this.a=a}ie.builtin$cls="ie"
+if(!"name" in ie)ie.name="ie"
+$desc=$collectedClasses.ie
+if($desc instanceof Array)$desc=$desc[1]
+ie.prototype=$desc
+function Ea(b){this.b=b}Ea.builtin$cls="Ea"
+if(!"name" in Ea)Ea.name="Ea"
+$desc=$collectedClasses.Ea
+if($desc instanceof Array)$desc=$desc[1]
+Ea.prototype=$desc
+function pu(AF,Sg,Ph){this.AF=AF
+this.Sg=Sg
+this.Ph=Ph}pu.builtin$cls="pu"
+if(!"name" in pu)pu.name="pu"
+$desc=$collectedClasses.pu
+if($desc instanceof Array)$desc=$desc[1]
+pu.prototype=$desc
+function i2(a){this.a=a}i2.builtin$cls="i2"
+if(!"name" in i2)i2.name="i2"
+$desc=$collectedClasses.i2
+if($desc instanceof Array)$desc=$desc[1]
+i2.prototype=$desc
+function b0(b){this.b=b}b0.builtin$cls="b0"
+if(!"name" in b0)b0.name="b0"
+$desc=$collectedClasses.b0
+if($desc instanceof Array)$desc=$desc[1]
+b0.prototype=$desc
+function Ov(VP,uv,Ph,u7,Sg){this.VP=VP
+this.uv=uv
+this.Ph=Ph
+this.u7=u7
+this.Sg=Sg}Ov.builtin$cls="Ov"
+if(!"name" in Ov)Ov.name="Ov"
+$desc=$collectedClasses.Ov
+if($desc instanceof Array)$desc=$desc[1]
+Ov.prototype=$desc
+function qO(aV,eM){this.aV=aV
+this.eM=eM}qO.builtin$cls="qO"
+if(!"name" in qO)qO.name="qO"
+$desc=$collectedClasses.qO
+if($desc instanceof Array)$desc=$desc[1]
+qO.prototype=$desc
+function RX(a,b){this.a=a
+this.b=b}RX.builtin$cls="RX"
+if(!"name" in RX)RX.name="RX"
+$desc=$collectedClasses.RX
+if($desc instanceof Array)$desc=$desc[1]
+RX.prototype=$desc
+function kG(bG){this.bG=bG}kG.builtin$cls="kG"
+if(!"name" in kG)kG.name="kG"
+$desc=$collectedClasses.kG
+if($desc instanceof Array)$desc=$desc[1]
+kG.prototype=$desc
+function Gm(){}Gm.builtin$cls="Gm"
+if(!"name" in Gm)Gm.name="Gm"
+$desc=$collectedClasses.Gm
+if($desc instanceof Array)$desc=$desc[1]
+Gm.prototype=$desc
+function W9(nj,vN,Nq,QZ){this.nj=nj
+this.vN=vN
+this.Nq=Nq
+this.QZ=QZ}W9.builtin$cls="W9"
+if(!"name" in W9)W9.name="W9"
+$desc=$collectedClasses.W9
+if($desc instanceof Array)$desc=$desc[1]
+W9.prototype=$desc
+function vZ(a,b){this.a=a
+this.b=b}vZ.builtin$cls="vZ"
+if(!"name" in vZ)vZ.name="vZ"
+$desc=$collectedClasses.vZ
+if($desc instanceof Array)$desc=$desc[1]
+vZ.prototype=$desc
+function dW(Ui){this.Ui=Ui}dW.builtin$cls="dW"
+if(!"name" in dW)dW.name="dW"
+$desc=$collectedClasses.dW
+if($desc instanceof Array)$desc=$desc[1]
+dW.prototype=$desc
+function PA(mf){this.mf=mf}PA.builtin$cls="PA"
+if(!"name" in PA)PA.name="PA"
+$desc=$collectedClasses.PA
+if($desc instanceof Array)$desc=$desc[1]
+PA.prototype=$desc
+function H2(WK){this.WK=WK}H2.builtin$cls="H2"
+if(!"name" in H2)H2.name="H2"
+$desc=$collectedClasses.H2
+if($desc instanceof Array)$desc=$desc[1]
+H2.prototype=$desc
+function O7(CE){this.CE=CE}O7.builtin$cls="O7"
+if(!"name" in O7)O7.name="O7"
+$desc=$collectedClasses.O7
+if($desc instanceof Array)$desc=$desc[1]
+O7.prototype=$desc
+function HI(){}HI.builtin$cls="HI"
+if(!"name" in HI)HI.name="HI"
+$desc=$collectedClasses.HI
+if($desc instanceof Array)$desc=$desc[1]
+HI.prototype=$desc
+function E4(eh){this.eh=eh}E4.builtin$cls="E4"
+if(!"name" in E4)E4.name="E4"
+$desc=$collectedClasses.E4
+if($desc instanceof Array)$desc=$desc[1]
+E4.prototype=$desc
+function r7(eh){this.eh=eh}r7.builtin$cls="r7"
+if(!"name" in r7)r7.name="r7"
+$desc=$collectedClasses.r7
+if($desc instanceof Array)$desc=$desc[1]
+r7.prototype=$desc
+function Tz(eh){this.eh=eh}Tz.builtin$cls="Tz"
+if(!"name" in Tz)Tz.name="Tz"
+$desc=$collectedClasses.Tz
+if($desc instanceof Array)$desc=$desc[1]
+Tz.prototype=$desc
+function Wk(){}Wk.builtin$cls="Wk"
+if(!"name" in Wk)Wk.name="Wk"
+$desc=$collectedClasses.Wk
+if($desc instanceof Array)$desc=$desc[1]
+Wk.prototype=$desc
+function DV(){}DV.builtin$cls="DV"
+if(!"name" in DV)DV.name="DV"
+$desc=$collectedClasses.DV
+if($desc instanceof Array)$desc=$desc[1]
+DV.prototype=$desc
+function Hp(){}Hp.builtin$cls="Hp"
+if(!"name" in Hp)Hp.name="Hp"
+$desc=$collectedClasses.Hp
+if($desc instanceof Array)$desc=$desc[1]
+Hp.prototype=$desc
+function Nz(){}Nz.builtin$cls="Nz"
+if(!"name" in Nz)Nz.name="Nz"
+$desc=$collectedClasses.Nz
+if($desc instanceof Array)$desc=$desc[1]
+Nz.prototype=$desc
+function Jd(){}Jd.builtin$cls="Jd"
+if(!"name" in Jd)Jd.name="Jd"
+$desc=$collectedClasses.Jd
+if($desc instanceof Array)$desc=$desc[1]
+Jd.prototype=$desc
+function QS(){}QS.builtin$cls="QS"
+if(!"name" in QS)QS.name="QS"
+$desc=$collectedClasses.QS
+if($desc instanceof Array)$desc=$desc[1]
+QS.prototype=$desc
+function QF(){}QF.builtin$cls="QF"
+if(!"name" in QF)QF.name="QF"
+$desc=$collectedClasses.QF
+if($desc instanceof Array)$desc=$desc[1]
+QF.prototype=$desc
+function NL(){}NL.builtin$cls="NL"
+if(!"name" in NL)NL.name="NL"
+$desc=$collectedClasses.NL
+if($desc instanceof Array)$desc=$desc[1]
+NL.prototype=$desc
+function vr(){}vr.builtin$cls="vr"
+if(!"name" in vr)vr.name="vr"
+$desc=$collectedClasses.vr
+if($desc instanceof Array)$desc=$desc[1]
+vr.prototype=$desc
+function D4(){}D4.builtin$cls="D4"
+if(!"name" in D4)D4.name="D4"
+$desc=$collectedClasses.D4
+if($desc instanceof Array)$desc=$desc[1]
+D4.prototype=$desc
+function L9u(){}L9u.builtin$cls="L9u"
+if(!"name" in L9u)L9u.name="L9u"
+$desc=$collectedClasses.L9u
+if($desc instanceof Array)$desc=$desc[1]
+L9u.prototype=$desc
+function Ms(){}Ms.builtin$cls="Ms"
+if(!"name" in Ms)Ms.name="Ms"
+$desc=$collectedClasses.Ms
+if($desc instanceof Array)$desc=$desc[1]
+Ms.prototype=$desc
+function Fw(){}Fw.builtin$cls="Fw"
+if(!"name" in Fw)Fw.name="Fw"
+$desc=$collectedClasses.Fw
+if($desc instanceof Array)$desc=$desc[1]
+Fw.prototype=$desc
+function RS(){}RS.builtin$cls="RS"
+if(!"name" in RS)RS.name="RS"
+$desc=$collectedClasses.RS
+if($desc instanceof Array)$desc=$desc[1]
+RS.prototype=$desc
+function RY(){}RY.builtin$cls="RY"
+if(!"name" in RY)RY.name="RY"
+$desc=$collectedClasses.RY
+if($desc instanceof Array)$desc=$desc[1]
+RY.prototype=$desc
+function Ys(){}Ys.builtin$cls="Ys"
+if(!"name" in Ys)Ys.name="Ys"
+$desc=$collectedClasses.Ys
+if($desc instanceof Array)$desc=$desc[1]
+Ys.prototype=$desc
+function vg(c1,m2,nV,V3){this.c1=c1
+this.m2=m2
+this.nV=nV
+this.V3=V3}vg.builtin$cls="vg"
+if(!"name" in vg)vg.name="vg"
+$desc=$collectedClasses.vg
+if($desc instanceof Array)$desc=$desc[1]
+vg.prototype=$desc
+function xG(){}xG.builtin$cls="xG"
+if(!"name" in xG)xG.name="xG"
+$desc=$collectedClasses.xG
+if($desc instanceof Array)$desc=$desc[1]
+xG.prototype=$desc
+function Vj(){}Vj.builtin$cls="Vj"
+if(!"name" in Vj)Vj.name="Vj"
+$desc=$collectedClasses.Vj
+if($desc instanceof Array)$desc=$desc[1]
+Vj.prototype=$desc
+function VW(){}VW.builtin$cls="VW"
+if(!"name" in VW)VW.name="VW"
+$desc=$collectedClasses.VW
+if($desc instanceof Array)$desc=$desc[1]
+VW.prototype=$desc
+function RK(){}RK.builtin$cls="RK"
+if(!"name" in RK)RK.name="RK"
+$desc=$collectedClasses.RK
+if($desc instanceof Array)$desc=$desc[1]
+RK.prototype=$desc
+function DH(){}DH.builtin$cls="DH"
+if(!"name" in DH)DH.name="DH"
+$desc=$collectedClasses.DH
+if($desc instanceof Array)$desc=$desc[1]
+DH.prototype=$desc
+function ZK(){}ZK.builtin$cls="ZK"
+if(!"name" in ZK)ZK.name="ZK"
+$desc=$collectedClasses.ZK
+if($desc instanceof Array)$desc=$desc[1]
+ZK.prototype=$desc
+function Th(){}Th.builtin$cls="Th"
+if(!"name" in Th)Th.name="Th"
+$desc=$collectedClasses.Th
+if($desc instanceof Array)$desc=$desc[1]
+Th.prototype=$desc
+function Vju(){}Vju.builtin$cls="Vju"
+if(!"name" in Vju)Vju.name="Vju"
+$desc=$collectedClasses.Vju
+if($desc instanceof Array)$desc=$desc[1]
+Vju.prototype=$desc
+function KB(){}KB.builtin$cls="KB"
+if(!"name" in KB)KB.name="KB"
+$desc=$collectedClasses.KB
+if($desc instanceof Array)$desc=$desc[1]
+KB.prototype=$desc
+function RKu(){}RKu.builtin$cls="RKu"
+if(!"name" in RKu)RKu.name="RKu"
+$desc=$collectedClasses.RKu
+if($desc instanceof Array)$desc=$desc[1]
+RKu.prototype=$desc
+function xGn(){}xGn.builtin$cls="xGn"
+if(!"name" in xGn)xGn.name="xGn"
+$desc=$collectedClasses.xGn
+if($desc instanceof Array)$desc=$desc[1]
+xGn.prototype=$desc
+function TkQ(){}TkQ.builtin$cls="TkQ"
+if(!"name" in TkQ)TkQ.name="TkQ"
+$desc=$collectedClasses.TkQ
+if($desc instanceof Array)$desc=$desc[1]
+TkQ.prototype=$desc
+function VWk(){}VWk.builtin$cls="VWk"
+if(!"name" in VWk)VWk.name="VWk"
+$desc=$collectedClasses.VWk
+if($desc instanceof Array)$desc=$desc[1]
+VWk.prototype=$desc
+function ZKG(){}ZKG.builtin$cls="ZKG"
+if(!"name" in ZKG)ZKG.name="ZKG"
+$desc=$collectedClasses.ZKG
+if($desc instanceof Array)$desc=$desc[1]
+ZKG.prototype=$desc
+function DHb(){}DHb.builtin$cls="DHb"
+if(!"name" in DHb)DHb.name="DHb"
+$desc=$collectedClasses.DHb
+if($desc instanceof Array)$desc=$desc[1]
+DHb.prototype=$desc
+function w6W(){}w6W.builtin$cls="w6W"
+if(!"name" in w6W)w6W.name="w6W"
+$desc=$collectedClasses.w6W
+if($desc instanceof Array)$desc=$desc[1]
+w6W.prototype=$desc
+function Hna(){}Hna.builtin$cls="Hna"
+if(!"name" in Hna)Hna.name="Hna"
+$desc=$collectedClasses.Hna
+if($desc instanceof Array)$desc=$desc[1]
+Hna.prototype=$desc
+function z9g(){}z9g.builtin$cls="z9g"
+if(!"name" in z9g)z9g.name="z9g"
+$desc=$collectedClasses.z9g
+if($desc instanceof Array)$desc=$desc[1]
+z9g.prototype=$desc
+function G8(){}G8.builtin$cls="G8"
+if(!"name" in G8)G8.name="G8"
+$desc=$collectedClasses.G8
+if($desc instanceof Array)$desc=$desc[1]
+G8.prototype=$desc
+function UZ(){}UZ.builtin$cls="UZ"
+if(!"name" in UZ)UZ.name="UZ"
+$desc=$collectedClasses.UZ
+if($desc instanceof Array)$desc=$desc[1]
+UZ.prototype=$desc
+function Fv(FT,VJ,Ai,tH,VJ,Ai,VJ,Ai,ZI,uN,z3,TQ,Vk,Ye,mT,KM){this.FT=FT
+this.VJ=VJ
+this.Ai=Ai
+this.tH=tH
+this.VJ=VJ
+this.Ai=Ai
+this.VJ=VJ
+this.Ai=Ai
+this.ZI=ZI
+this.uN=uN
+this.z3=z3
+this.TQ=TQ
+this.Vk=Vk
+this.Ye=Ye
+this.mT=mT
+this.KM=KM}Fv.builtin$cls="Fv"
+if(!"name" in Fv)Fv.name="Fv"
+$desc=$collectedClasses.Fv
+if($desc instanceof Array)$desc=$desc[1]
+Fv.prototype=$desc
+Fv.prototype.gFT=function(receiver){return receiver.FT}
+Fv.prototype.gFT.$reflectable=1
+Fv.prototype.sFT=function(receiver,v){return receiver.FT=v}
+Fv.prototype.sFT.$reflectable=1
+function WZ(){}WZ.builtin$cls="WZ"
+if(!"name" in WZ)WZ.name="WZ"
+$desc=$collectedClasses.WZ
+if($desc instanceof Array)$desc=$desc[1]
+WZ.prototype=$desc
+function I3(Py,hO,VJ,Ai,tH,VJ,Ai,VJ,Ai,ZI,uN,z3,TQ,Vk,Ye,mT,KM){this.Py=Py
+this.hO=hO
+this.VJ=VJ
+this.Ai=Ai
+this.tH=tH
+this.VJ=VJ
+this.Ai=Ai
+this.VJ=VJ
+this.Ai=Ai
+this.ZI=ZI
+this.uN=uN
+this.z3=z3
+this.TQ=TQ
+this.Vk=Vk
+this.Ye=Ye
+this.mT=mT
+this.KM=KM}I3.builtin$cls="I3"
+if(!"name" in I3)I3.name="I3"
+$desc=$collectedClasses.I3
+if($desc instanceof Array)$desc=$desc[1]
+I3.prototype=$desc
+I3.prototype.gPy=function(receiver){return receiver.Py}
+I3.prototype.gPy.$reflectable=1
+I3.prototype.sPy=function(receiver,v){return receiver.Py=v}
+I3.prototype.sPy.$reflectable=1
+I3.prototype.ghO=function(receiver){return receiver.hO}
+I3.prototype.ghO.$reflectable=1
+I3.prototype.shO=function(receiver,v){return receiver.hO=v}
+I3.prototype.shO.$reflectable=1
+function pv(){}pv.builtin$cls="pv"
+if(!"name" in pv)pv.name="pv"
+$desc=$collectedClasses.pv
+if($desc instanceof Array)$desc=$desc[1]
+pv.prototype=$desc
+function qr(Lf,VJ,Ai,tH,VJ,Ai,VJ,Ai,ZI,uN,z3,TQ,Vk,Ye,mT,KM){this.Lf=Lf
+this.VJ=VJ
+this.Ai=Ai
+this.tH=tH
+this.VJ=VJ
+this.Ai=Ai
+this.VJ=VJ
+this.Ai=Ai
+this.ZI=ZI
+this.uN=uN
+this.z3=z3
+this.TQ=TQ
+this.Vk=Vk
+this.Ye=Ye
+this.mT=mT
+this.KM=KM}qr.builtin$cls="qr"
+if(!"name" in qr)qr.name="qr"
+$desc=$collectedClasses.qr
+if($desc instanceof Array)$desc=$desc[1]
+qr.prototype=$desc
+qr.prototype.gLf=function(receiver){return receiver.Lf}
+qr.prototype.gLf.$reflectable=1
+qr.prototype.sLf=function(receiver,v){return receiver.Lf=v}
+qr.prototype.sLf.$reflectable=1
+function Vfx(){}Vfx.builtin$cls="Vfx"
+if(!"name" in Vfx)Vfx.name="Vfx"
+$desc=$collectedClasses.Vfx
+if($desc instanceof Array)$desc=$desc[1]
+Vfx.prototype=$desc
+function Gk(vt,VJ,Ai,tH,VJ,Ai,VJ,Ai,ZI,uN,z3,TQ,Vk,Ye,mT,KM){this.vt=vt
+this.VJ=VJ
+this.Ai=Ai
+this.tH=tH
+this.VJ=VJ
+this.Ai=Ai
+this.VJ=VJ
+this.Ai=Ai
+this.ZI=ZI
+this.uN=uN
+this.z3=z3
+this.TQ=TQ
+this.Vk=Vk
+this.Ye=Ye
+this.mT=mT
+this.KM=KM}Gk.builtin$cls="Gk"
+if(!"name" in Gk)Gk.name="Gk"
+$desc=$collectedClasses.Gk
+if($desc instanceof Array)$desc=$desc[1]
+Gk.prototype=$desc
+Gk.prototype.gvt=function(receiver){return receiver.vt}
+Gk.prototype.gvt.$reflectable=1
+Gk.prototype.svt=function(receiver,v){return receiver.vt=v}
+Gk.prototype.svt.$reflectable=1
+function Dsd(){}Dsd.builtin$cls="Dsd"
+if(!"name" in Dsd)Dsd.name="Dsd"
+$desc=$collectedClasses.Dsd
+if($desc instanceof Array)$desc=$desc[1]
+Dsd.prototype=$desc
+function Ds(ql,VJ,Ai,tH,VJ,Ai,VJ,Ai,ZI,uN,z3,TQ,Vk,Ye,mT,KM){this.ql=ql
+this.VJ=VJ
+this.Ai=Ai
+this.tH=tH
+this.VJ=VJ
+this.Ai=Ai
+this.VJ=VJ
+this.Ai=Ai
+this.ZI=ZI
+this.uN=uN
+this.z3=z3
+this.TQ=TQ
+this.Vk=Vk
+this.Ye=Ye
+this.mT=mT
+this.KM=KM}Ds.builtin$cls="Ds"
+if(!"name" in Ds)Ds.name="Ds"
+$desc=$collectedClasses.Ds
+if($desc instanceof Array)$desc=$desc[1]
+Ds.prototype=$desc
+Ds.prototype.gql=function(receiver){return receiver.ql}
+Ds.prototype.gql.$reflectable=1
+Ds.prototype.sql=function(receiver,v){return receiver.ql=v}
+Ds.prototype.sql.$reflectable=1
+function tuj(){}tuj.builtin$cls="tuj"
+if(!"name" in tuj)tuj.name="tuj"
+$desc=$collectedClasses.tuj
+if($desc instanceof Array)$desc=$desc[1]
+tuj.prototype=$desc
+function aI(b,c){this.b=b
+this.c=c}aI.builtin$cls="aI"
+if(!"name" in aI)aI.name="aI"
+$desc=$collectedClasses.aI
+if($desc instanceof Array)$desc=$desc[1]
+aI.prototype=$desc
+function rG(d){this.d=d}rG.builtin$cls="rG"
+if(!"name" in rG)rG.name="rG"
+$desc=$collectedClasses.rG
+if($desc instanceof Array)$desc=$desc[1]
+rG.prototype=$desc
+function yh(e){this.e=e}yh.builtin$cls="yh"
+if(!"name" in yh)yh.name="yh"
+$desc=$collectedClasses.yh
+if($desc instanceof Array)$desc=$desc[1]
+yh.prototype=$desc
+function wO(){}wO.builtin$cls="wO"
+if(!"name" in wO)wO.name="wO"
+$desc=$collectedClasses.wO
+if($desc instanceof Array)$desc=$desc[1]
+wO.prototype=$desc
+function Tm(f,g,h){this.f=f
+this.g=g
+this.h=h}Tm.builtin$cls="Tm"
+if(!"name" in Tm)Tm.name="Tm"
+$desc=$collectedClasses.Tm
+if($desc instanceof Array)$desc=$desc[1]
+Tm.prototype=$desc
+function rz(a,i){this.a=a
+this.i=i}rz.builtin$cls="rz"
+if(!"name" in rz)rz.name="rz"
+$desc=$collectedClasses.rz
+if($desc instanceof Array)$desc=$desc[1]
+rz.prototype=$desc
+function CA(a,b){this.a=a
+this.b=b}CA.builtin$cls="CA"
+if(!"name" in CA)CA.name="CA"
+$desc=$collectedClasses.CA
+if($desc instanceof Array)$desc=$desc[1]
+CA.prototype=$desc
+function YL(c){this.c=c}YL.builtin$cls="YL"
+if(!"name" in YL)YL.name="YL"
+$desc=$collectedClasses.YL
+if($desc instanceof Array)$desc=$desc[1]
+YL.prototype=$desc
+function KC(d){this.d=d}KC.builtin$cls="KC"
+if(!"name" in KC)KC.name="KC"
+$desc=$collectedClasses.KC
+if($desc instanceof Array)$desc=$desc[1]
+KC.prototype=$desc
+function xL(e,f,g,h){this.e=e
+this.f=f
+this.g=g
+this.h=h}xL.builtin$cls="xL"
+if(!"name" in xL)xL.name="xL"
+$desc=$collectedClasses.xL
+if($desc instanceof Array)$desc=$desc[1]
+xL.prototype=$desc
+function As(){}As.builtin$cls="As"
+if(!"name" in As)As.name="As"
+$desc=$collectedClasses.As
+if($desc instanceof Array)$desc=$desc[1]
+As.prototype=$desc
+function GE(a){this.a=a}GE.builtin$cls="GE"
+if(!"name" in GE)GE.name="GE"
+$desc=$collectedClasses.GE
+if($desc instanceof Array)$desc=$desc[1]
+GE.prototype=$desc
+function pR(iK,VJ,Ai,tH,VJ,Ai,VJ,Ai,ZI,uN,z3,TQ,Vk,Ye,mT,KM){this.iK=iK
+this.VJ=VJ
+this.Ai=Ai
+this.tH=tH
+this.VJ=VJ
+this.Ai=Ai
+this.VJ=VJ
+this.Ai=Ai
+this.ZI=ZI
+this.uN=uN
+this.z3=z3
+this.TQ=TQ
+this.Vk=Vk
+this.Ye=Ye
+this.mT=mT
+this.KM=KM}pR.builtin$cls="pR"
+if(!"name" in pR)pR.name="pR"
+$desc=$collectedClasses.pR
+if($desc instanceof Array)$desc=$desc[1]
+pR.prototype=$desc
+pR.prototype.giK=function(receiver){return receiver.iK}
+pR.prototype.giK.$reflectable=1
+pR.prototype.siK=function(receiver,v){return receiver.iK=v}
+pR.prototype.siK.$reflectable=1
+function Vct(){}Vct.builtin$cls="Vct"
+if(!"name" in Vct)Vct.name="Vct"
+$desc=$collectedClasses.Vct
+if($desc instanceof Array)$desc=$desc[1]
+Vct.prototype=$desc
+function hx(Xh,VJ,Ai,tH,VJ,Ai,VJ,Ai,ZI,uN,z3,TQ,Vk,Ye,mT,KM){this.Xh=Xh
+this.VJ=VJ
+this.Ai=Ai
+this.tH=tH
+this.VJ=VJ
+this.Ai=Ai
+this.VJ=VJ
+this.Ai=Ai
+this.ZI=ZI
+this.uN=uN
+this.z3=z3
+this.TQ=TQ
+this.Vk=Vk
+this.Ye=Ye
+this.mT=mT
+this.KM=KM}hx.builtin$cls="hx"
+if(!"name" in hx)hx.name="hx"
+$desc=$collectedClasses.hx
+if($desc instanceof Array)$desc=$desc[1]
+hx.prototype=$desc
+hx.prototype.gXh=function(receiver){return receiver.Xh}
+hx.prototype.gXh.$reflectable=1
+hx.prototype.sXh=function(receiver,v){return receiver.Xh=v}
+hx.prototype.sXh.$reflectable=1
+function D13(){}D13.builtin$cls="D13"
+if(!"name" in D13)D13.name="D13"
+$desc=$collectedClasses.D13
+if($desc instanceof Array)$desc=$desc[1]
+D13.prototype=$desc
+function u7(tH,VJ,Ai,VJ,Ai,ZI,uN,z3,TQ,Vk,Ye,mT,KM){this.tH=tH
+this.VJ=VJ
+this.Ai=Ai
+this.VJ=VJ
+this.Ai=Ai
+this.ZI=ZI
+this.uN=uN
+this.z3=z3
+this.TQ=TQ
+this.Vk=Vk
+this.Ye=Ye
+this.mT=mT
+this.KM=KM}u7.builtin$cls="u7"
+if(!"name" in u7)u7.name="u7"
+$desc=$collectedClasses.u7
+if($desc instanceof Array)$desc=$desc[1]
+u7.prototype=$desc
+function St(Pw,i0,VJ,Ai,tH,VJ,Ai,VJ,Ai,ZI,uN,z3,TQ,Vk,Ye,mT,KM){this.Pw=Pw
+this.i0=i0
+this.VJ=VJ
+this.Ai=Ai
+this.tH=tH
+this.VJ=VJ
+this.Ai=Ai
+this.VJ=VJ
+this.Ai=Ai
+this.ZI=ZI
+this.uN=uN
+this.z3=z3
+this.TQ=TQ
+this.Vk=Vk
+this.Ye=Ye
+this.mT=mT
+this.KM=KM}St.builtin$cls="St"
+if(!"name" in St)St.name="St"
+$desc=$collectedClasses.St
+if($desc instanceof Array)$desc=$desc[1]
+St.prototype=$desc
+St.prototype.gPw=function(receiver){return receiver.Pw}
+St.prototype.gPw.$reflectable=1
+St.prototype.sPw=function(receiver,v){return receiver.Pw=v}
+St.prototype.sPw.$reflectable=1
+St.prototype.gi0=function(receiver){return receiver.i0}
+St.prototype.gi0.$reflectable=1
+St.prototype.si0=function(receiver,v){return receiver.i0=v}
+St.prototype.si0.$reflectable=1
+function WZq(){}WZq.builtin$cls="WZq"
+if(!"name" in WZq)WZq.name="WZq"
+$desc=$collectedClasses.WZq
+if($desc instanceof Array)$desc=$desc[1]
+WZq.prototype=$desc
+function vj(eb,kf,VJ,Ai,tH,VJ,Ai,VJ,Ai,ZI,uN,z3,TQ,Vk,Ye,mT,KM){this.eb=eb
+this.kf=kf
+this.VJ=VJ
+this.Ai=Ai
+this.tH=tH
+this.VJ=VJ
+this.Ai=Ai
+this.VJ=VJ
+this.Ai=Ai
+this.ZI=ZI
+this.uN=uN
+this.z3=z3
+this.TQ=TQ
+this.Vk=Vk
+this.Ye=Ye
+this.mT=mT
+this.KM=KM}vj.builtin$cls="vj"
+if(!"name" in vj)vj.name="vj"
+$desc=$collectedClasses.vj
+if($desc instanceof Array)$desc=$desc[1]
+vj.prototype=$desc
+vj.prototype.geb=function(receiver){return receiver.eb}
+vj.prototype.geb.$reflectable=1
+vj.prototype.seb=function(receiver,v){return receiver.eb=v}
+vj.prototype.seb.$reflectable=1
+vj.prototype.gkf=function(receiver){return receiver.kf}
+vj.prototype.gkf.$reflectable=1
+vj.prototype.skf=function(receiver,v){return receiver.kf=v}
+vj.prototype.skf.$reflectable=1
+function pva(){}pva.builtin$cls="pva"
+if(!"name" in pva)pva.name="pva"
+$desc=$collectedClasses.pva
+if($desc instanceof Array)$desc=$desc[1]
+pva.prototype=$desc
+function CX(iI,VJ,Ai,tH,VJ,Ai,VJ,Ai,ZI,uN,z3,TQ,Vk,Ye,mT,KM){this.iI=iI
+this.VJ=VJ
+this.Ai=Ai
+this.tH=tH
+this.VJ=VJ
+this.Ai=Ai
+this.VJ=VJ
+this.Ai=Ai
+this.ZI=ZI
+this.uN=uN
+this.z3=z3
+this.TQ=TQ
+this.Vk=Vk
+this.Ye=Ye
+this.mT=mT
+this.KM=KM}CX.builtin$cls="CX"
+if(!"name" in CX)CX.name="CX"
+$desc=$collectedClasses.CX
+if($desc instanceof Array)$desc=$desc[1]
+CX.prototype=$desc
+CX.prototype.giI=function(receiver){return receiver.iI}
+CX.prototype.giI.$reflectable=1
+CX.prototype.siI=function(receiver,v){return receiver.iI=v}
+CX.prototype.siI.$reflectable=1
+function cda(){}cda.builtin$cls="cda"
+if(!"name" in cda)cda.name="cda"
+$desc=$collectedClasses.cda
+if($desc instanceof Array)$desc=$desc[1]
+cda.prototype=$desc
+function TJ(oc,eT,yz,Cj,wd,Gs){this.oc=oc
+this.eT=eT
+this.yz=yz
+this.Cj=Cj
+this.wd=wd
+this.Gs=Gs}TJ.builtin$cls="TJ"
+if(!"name" in TJ)TJ.name="TJ"
+$desc=$collectedClasses.TJ
+if($desc instanceof Array)$desc=$desc[1]
+TJ.prototype=$desc
+TJ.prototype.goc=function(receiver){return this.oc}
+TJ.prototype.geT=function(receiver){return this.eT}
+TJ.prototype.gCj=function(receiver){return this.Cj}
+function dG(a){this.a=a}dG.builtin$cls="dG"
+if(!"name" in dG)dG.name="dG"
+$desc=$collectedClasses.dG
+if($desc instanceof Array)$desc=$desc[1]
+dG.prototype=$desc
+function Ng(oc,P){this.oc=oc
+this.P=P}Ng.builtin$cls="Ng"
+if(!"name" in Ng)Ng.name="Ng"
+$desc=$collectedClasses.Ng
+if($desc instanceof Array)$desc=$desc[1]
+Ng.prototype=$desc
+Ng.prototype.goc=function(receiver){return this.oc}
+Ng.prototype.gP=function(receiver){return this.P}
+function HV(OR,G1,iJ,Fl,O0,kc,I4){this.OR=OR
+this.G1=G1
+this.iJ=iJ
+this.Fl=Fl
+this.O0=O0
+this.kc=kc
+this.I4=I4}HV.builtin$cls="HV"
+if(!"name" in HV)HV.name="HV"
+$desc=$collectedClasses.HV
+if($desc instanceof Array)$desc=$desc[1]
+HV.prototype=$desc
+HV.prototype.gOR=function(){return this.OR}
+HV.prototype.gG1=function(receiver){return this.G1}
+HV.prototype.gkc=function(receiver){return this.kc}
+HV.prototype.gI4=function(){return this.I4}
+function Nh(XB,tH,VJ,Ai,VJ,Ai,ZI,uN,z3,TQ,Vk,Ye,mT,KM){this.XB=XB
+this.tH=tH
+this.VJ=VJ
+this.Ai=Ai
+this.VJ=VJ
+this.Ai=Ai
+this.ZI=ZI
+this.uN=uN
+this.z3=z3
+this.TQ=TQ
+this.Vk=Vk
+this.Ye=Ye
+this.mT=mT
+this.KM=KM}Nh.builtin$cls="Nh"
+if(!"name" in Nh)Nh.name="Nh"
+$desc=$collectedClasses.Nh
+if($desc instanceof Array)$desc=$desc[1]
+Nh.prototype=$desc
+Nh.prototype.gXB=function(receiver){return receiver.XB}
+Nh.prototype.gXB.$reflectable=1
+Nh.prototype.sXB=function(receiver,v){return receiver.XB=v}
+Nh.prototype.sXB.$reflectable=1
+function fA(Kr,Jt){this.Kr=Kr
+this.Jt=Jt}fA.builtin$cls="fA"
+if(!"name" in fA)fA.name="fA"
+$desc=$collectedClasses.fA
+if($desc instanceof Array)$desc=$desc[1]
+fA.prototype=$desc
+function tz(){}tz.builtin$cls="tz"
+if(!"name" in tz)tz.name="tz"
+$desc=$collectedClasses.tz
+if($desc instanceof Array)$desc=$desc[1]
+tz.prototype=$desc
+function jR(oc){this.oc=oc}jR.builtin$cls="jR"
+if(!"name" in jR)jR.name="jR"
+$desc=$collectedClasses.jR
+if($desc instanceof Array)$desc=$desc[1]
+jR.prototype=$desc
+jR.prototype.goc=function(receiver){return this.oc}
+function PO(){}PO.builtin$cls="PO"
+if(!"name" in PO)PO.name="PO"
+$desc=$collectedClasses.PO
+if($desc instanceof Array)$desc=$desc[1]
+PO.prototype=$desc
+function c5(){}c5.builtin$cls="c5"
+if(!"name" in c5)c5.name="c5"
+$desc=$collectedClasses.c5
+if($desc instanceof Array)$desc=$desc[1]
+c5.prototype=$desc
+function ih(tH,VJ,Ai,VJ,Ai,ZI,uN,z3,TQ,Vk,Ye,mT,KM){this.tH=tH
+this.VJ=VJ
+this.Ai=Ai
+this.VJ=VJ
+this.Ai=Ai
+this.ZI=ZI
+this.uN=uN
+this.z3=z3
+this.TQ=TQ
+this.Vk=Vk
+this.Ye=Ye
+this.mT=mT
+this.KM=KM}ih.builtin$cls="ih"
+if(!"name" in ih)ih.name="ih"
+$desc=$collectedClasses.ih
+if($desc instanceof Array)$desc=$desc[1]
+ih.prototype=$desc
+function mL(Z6,lw,nI,VJ,Ai){this.Z6=Z6
+this.lw=lw
+this.nI=nI
+this.VJ=VJ
+this.Ai=Ai}mL.builtin$cls="mL"
+if(!"name" in mL)mL.name="mL"
+$desc=$collectedClasses.mL
+if($desc instanceof Array)$desc=$desc[1]
+mL.prototype=$desc
+mL.prototype.gZ6=function(){return this.Z6}
+mL.prototype.gZ6.$reflectable=1
+mL.prototype.glw=function(){return this.lw}
+mL.prototype.glw.$reflectable=1
+mL.prototype.gnI=function(){return this.nI}
+mL.prototype.gnI.$reflectable=1
+function bv(nk,SS,XR,VJ,Ai){this.nk=nk
+this.SS=SS
+this.XR=XR
+this.VJ=VJ
+this.Ai=Ai}bv.builtin$cls="bv"
+if(!"name" in bv)bv.name="bv"
+$desc=$collectedClasses.bv
+if($desc instanceof Array)$desc=$desc[1]
+bv.prototype=$desc
+bv.prototype.gXR=function(){return this.XR}
+bv.prototype.gXR.$reflectable=1
+function pt(JR,i2,VJ,Ai){this.JR=JR
+this.i2=i2
+this.VJ=VJ
+this.Ai=Ai}pt.builtin$cls="pt"
+if(!"name" in pt)pt.name="pt"
+$desc=$collectedClasses.pt
+if($desc instanceof Array)$desc=$desc[1]
+pt.prototype=$desc
+pt.prototype.sJR=function(v){return this.JR=v}
+pt.prototype.gi2=function(){return this.i2}
+pt.prototype.gi2.$reflectable=1
+function Zd(a){this.a=a}Zd.builtin$cls="Zd"
+if(!"name" in Zd)Zd.name="Zd"
+$desc=$collectedClasses.Zd
+if($desc instanceof Array)$desc=$desc[1]
+Zd.prototype=$desc
+function dY(a){this.a=a}dY.builtin$cls="dY"
+if(!"name" in dY)dY.name="dY"
+$desc=$collectedClasses.dY
+if($desc instanceof Array)$desc=$desc[1]
+dY.prototype=$desc
+function vY(a,b){this.a=a
+this.b=b}vY.builtin$cls="vY"
+if(!"name" in vY)vY.name="vY"
+$desc=$collectedClasses.vY
+if($desc instanceof Array)$desc=$desc[1]
+vY.prototype=$desc
+function dS(c){this.c=c}dS.builtin$cls="dS"
+if(!"name" in dS)dS.name="dS"
+$desc=$collectedClasses.dS
+if($desc instanceof Array)$desc=$desc[1]
+dS.prototype=$desc
+function ZW(d){this.d=d}ZW.builtin$cls="ZW"
+if(!"name" in ZW)ZW.name="ZW"
+$desc=$collectedClasses.ZW
+if($desc instanceof Array)$desc=$desc[1]
+ZW.prototype=$desc
+function dZ(JR,IT,Jj,VJ,Ai){this.JR=JR
+this.IT=IT
+this.Jj=Jj
+this.VJ=VJ
+this.Ai=Ai}dZ.builtin$cls="dZ"
+if(!"name" in dZ)dZ.name="dZ"
+$desc=$collectedClasses.dZ
+if($desc instanceof Array)$desc=$desc[1]
+dZ.prototype=$desc
+dZ.prototype.sJR=function(v){return this.JR=v}
+function Qe(a){this.a=a}Qe.builtin$cls="Qe"
+if(!"name" in Qe)Qe.name="Qe"
+$desc=$collectedClasses.Qe
+if($desc instanceof Array)$desc=$desc[1]
+Qe.prototype=$desc
+function Nu(JR,e0){this.JR=JR
+this.e0=e0}Nu.builtin$cls="Nu"
+if(!"name" in Nu)Nu.name="Nu"
+$desc=$collectedClasses.Nu
+if($desc instanceof Array)$desc=$desc[1]
+Nu.prototype=$desc
+Nu.prototype.sJR=function(v){return this.JR=v}
+Nu.prototype.se0=function(v){return this.e0=v}
+function pF(a,b){this.a=a
+this.b=b}pF.builtin$cls="pF"
+if(!"name" in pF)pF.name="pF"
+$desc=$collectedClasses.pF
+if($desc instanceof Array)$desc=$desc[1]
+pF.prototype=$desc
+function Ha(c){this.c=c}Ha.builtin$cls="Ha"
+if(!"name" in Ha)Ha.name="Ha"
+$desc=$collectedClasses.Ha
+if($desc instanceof Array)$desc=$desc[1]
+Ha.prototype=$desc
+function nu(d){this.d=d}nu.builtin$cls="nu"
+if(!"name" in nu)nu.name="nu"
+$desc=$collectedClasses.nu
+if($desc instanceof Array)$desc=$desc[1]
+nu.prototype=$desc
+function be(a,b){this.a=a
+this.b=b}be.builtin$cls="be"
+if(!"name" in be)be.name="be"
+$desc=$collectedClasses.be
+if($desc instanceof Array)$desc=$desc[1]
+be.prototype=$desc
+function Pg(c){this.c=c}Pg.builtin$cls="Pg"
+if(!"name" in Pg)Pg.name="Pg"
+$desc=$collectedClasses.Pg
+if($desc instanceof Array)$desc=$desc[1]
+Pg.prototype=$desc
+function jI(JR,e0,oJ,vm,VJ,Ai){this.JR=JR
+this.e0=e0
+this.oJ=oJ
+this.vm=vm
+this.VJ=VJ
+this.Ai=Ai}jI.builtin$cls="jI"
+if(!"name" in jI)jI.name="jI"
+$desc=$collectedClasses.jI
+if($desc instanceof Array)$desc=$desc[1]
+jI.prototype=$desc
+function Rb(Hr,Oy,JR,e0,oJ,vm,VJ,Ai){this.Hr=Hr
+this.Oy=Oy
+this.JR=JR
+this.e0=e0
+this.oJ=oJ
+this.vm=vm
+this.VJ=VJ
+this.Ai=Ai}Rb.builtin$cls="Rb"
+if(!"name" in Rb)Rb.name="Rb"
+$desc=$collectedClasses.Rb
+if($desc instanceof Array)$desc=$desc[1]
+Rb.prototype=$desc
+function Zw(Rd,n7,LA,Vg,VJ,Ai){this.Rd=Rd
+this.n7=n7
+this.LA=LA
+this.Vg=Vg
+this.VJ=VJ
+this.Ai=Ai}Zw.builtin$cls="Zw"
+if(!"name" in Zw)Zw.name="Zw"
+$desc=$collectedClasses.Zw
+if($desc instanceof Array)$desc=$desc[1]
+Zw.prototype=$desc
+Zw.prototype.gLA=function(receiver){return this.LA}
+Zw.prototype.gLA.$reflectable=1
+function Pf(WF,uM,ZQ,VJ,Ai){this.WF=WF
+this.uM=uM
+this.ZQ=ZQ
+this.VJ=VJ
+this.Ai=Ai}Pf.builtin$cls="Pf"
+if(!"name" in Pf)Pf.name="Pf"
+$desc=$collectedClasses.Pf
+if($desc instanceof Array)$desc=$desc[1]
+Pf.prototype=$desc
+function F1(k5,VJ,Ai,tH,VJ,Ai,VJ,Ai,ZI,uN,z3,TQ,Vk,Ye,mT,KM){this.k5=k5
+this.VJ=VJ
+this.Ai=Ai
+this.tH=tH
+this.VJ=VJ
+this.Ai=Ai
+this.VJ=VJ
+this.Ai=Ai
+this.ZI=ZI
+this.uN=uN
+this.z3=z3
+this.TQ=TQ
+this.Vk=Vk
+this.Ye=Ye
+this.mT=mT
+this.KM=KM}F1.builtin$cls="F1"
+if(!"name" in F1)F1.name="F1"
+$desc=$collectedClasses.F1
+if($desc instanceof Array)$desc=$desc[1]
+F1.prototype=$desc
+F1.prototype.gk5=function(receiver){return receiver.k5}
+F1.prototype.gk5.$reflectable=1
+F1.prototype.sk5=function(receiver,v){return receiver.k5=v}
+F1.prototype.sk5.$reflectable=1
+function waa(){}waa.builtin$cls="waa"
+if(!"name" in waa)waa.name="waa"
+$desc=$collectedClasses.waa
+if($desc instanceof Array)$desc=$desc[1]
+waa.prototype=$desc
+function uL(tH,VJ,Ai,VJ,Ai,ZI,uN,z3,TQ,Vk,Ye,mT,KM){this.tH=tH
+this.VJ=VJ
+this.Ai=Ai
+this.VJ=VJ
+this.Ai=Ai
+this.ZI=ZI
+this.uN=uN
+this.z3=z3
+this.TQ=TQ
+this.Vk=Vk
+this.Ye=Ye
+this.mT=mT
+this.KM=KM}uL.builtin$cls="uL"
+if(!"name" in uL)uL.name="uL"
+$desc=$collectedClasses.uL
+if($desc instanceof Array)$desc=$desc[1]
+uL.prototype=$desc
+uL.prototype.gtH=function(receiver){return receiver.tH}
+uL.prototype.gtH.$reflectable=1
+uL.prototype.stH=function(receiver,v){return receiver.tH=v}
+uL.prototype.stH.$reflectable=1
+function Nr(){}Nr.builtin$cls="Nr"
+if(!"name" in Nr)Nr.name="Nr"
+$desc=$collectedClasses.Nr
+if($desc instanceof Array)$desc=$desc[1]
+Nr.prototype=$desc
+function Pi(){}Pi.builtin$cls="Pi"
+if(!"name" in Pi)Pi.name="Pi"
+$desc=$collectedClasses.Pi
+if($desc instanceof Array)$desc=$desc[1]
+Pi.prototype=$desc
+function yj(){}yj.builtin$cls="yj"
+if(!"name" in yj)yj.name="yj"
+$desc=$collectedClasses.yj
+if($desc instanceof Array)$desc=$desc[1]
+yj.prototype=$desc
+function qI(WA,oc,jL,zZ){this.WA=WA
+this.oc=oc
+this.jL=jL
+this.zZ=zZ}qI.builtin$cls="qI"
+if(!"name" in qI)qI.name="qI"
+$desc=$collectedClasses.qI
+if($desc instanceof Array)$desc=$desc[1]
+qI.prototype=$desc
+qI.prototype.gWA=function(){return this.WA}
+qI.prototype.goc=function(receiver){return this.oc}
+qI.prototype.gjL=function(receiver){return this.jL}
+qI.prototype.gzZ=function(receiver){return this.zZ}
+function J3(b9,kK,Sv,rk,YX,B6,VJ,Ai){this.b9=b9
+this.kK=kK
+this.Sv=Sv
+this.rk=rk
+this.YX=YX
+this.B6=B6
+this.VJ=VJ
+this.Ai=Ai}J3.builtin$cls="J3"
+if(!"name" in J3)J3.name="J3"
+$desc=$collectedClasses.J3
+if($desc instanceof Array)$desc=$desc[1]
+J3.prototype=$desc
+function E5(){}E5.builtin$cls="E5"
+if(!"name" in E5)E5.name="E5"
+$desc=$collectedClasses.E5
+if($desc instanceof Array)$desc=$desc[1]
+E5.prototype=$desc
+function o5(a){this.a=a}o5.builtin$cls="o5"
+if(!"name" in o5)o5.name="o5"
+$desc=$collectedClasses.o5
+if($desc instanceof Array)$desc=$desc[1]
+o5.prototype=$desc
+function b5(a){this.a=a}b5.builtin$cls="b5"
+if(!"name" in b5)b5.name="b5"
+$desc=$collectedClasses.b5
+if($desc instanceof Array)$desc=$desc[1]
+b5.prototype=$desc
+function zI(b){this.b=b}zI.builtin$cls="zI"
+if(!"name" in zI)zI.name="zI"
+$desc=$collectedClasses.zI
+if($desc instanceof Array)$desc=$desc[1]
+zI.prototype=$desc
+function Zb(c,d,e,f){this.c=c
+this.d=d
+this.e=e
+this.f=f}Zb.builtin$cls="Zb"
+if(!"name" in Zb)Zb.name="Zb"
+$desc=$collectedClasses.Zb
+if($desc instanceof Array)$desc=$desc[1]
+Zb.prototype=$desc
+function id(g){this.g=g}id.builtin$cls="id"
+if(!"name" in id)id.name="id"
+$desc=$collectedClasses.id
+if($desc instanceof Array)$desc=$desc[1]
+id.prototype=$desc
+function iV(h,i,j,k){this.h=h
+this.i=i
+this.j=j
+this.k=k}iV.builtin$cls="iV"
+if(!"name" in iV)iV.name="iV"
+$desc=$collectedClasses.iV
+if($desc instanceof Array)$desc=$desc[1]
+iV.prototype=$desc
+function W4(WA,Uj,Il,jr,dM){this.WA=WA
+this.Uj=Uj
+this.Il=Il
+this.jr=jr
+this.dM=dM}W4.builtin$cls="W4"
+if(!"name" in W4)W4.name="W4"
+$desc=$collectedClasses.W4
+if($desc instanceof Array)$desc=$desc[1]
+W4.prototype=$desc
+W4.prototype.gWA=function(){return this.WA}
+W4.prototype.gIl=function(){return this.Il}
+function Fa(){}Fa.builtin$cls="Fa"
+if(!"name" in Fa)Fa.name="Fa"
+$desc=$collectedClasses.Fa
+if($desc instanceof Array)$desc=$desc[1]
+Fa.prototype=$desc
+function x9(){}x9.builtin$cls="x9"
+if(!"name" in x9)x9.name="x9"
+$desc=$collectedClasses.x9
+if($desc instanceof Array)$desc=$desc[1]
+x9.prototype=$desc
+function d3(){}d3.builtin$cls="d3"
+if(!"name" in d3)d3.name="d3"
+$desc=$collectedClasses.d3
+if($desc instanceof Array)$desc=$desc[1]
+d3.prototype=$desc
+function X6(a,b){this.a=a
+this.b=b}X6.builtin$cls="X6"
+if(!"name" in X6)X6.name="X6"
+$desc=$collectedClasses.X6
+if($desc instanceof Array)$desc=$desc[1]
+X6.prototype=$desc
+function xh(){}xh.builtin$cls="xh"
+if(!"name" in xh)xh.name="xh"
+$desc=$collectedClasses.xh
+if($desc instanceof Array)$desc=$desc[1]
+xh.prototype=$desc
+function wn(b3,xg,h3,VJ,Ai){this.b3=b3
+this.xg=xg
+this.h3=h3
+this.VJ=VJ
+this.Ai=Ai}wn.builtin$cls="wn"
+if(!"name" in wn)wn.name="wn"
+$desc=$collectedClasses.wn
+if($desc instanceof Array)$desc=$desc[1]
+wn.prototype=$desc
+function uF(){}uF.builtin$cls="uF"
+if(!"name" in uF)uF.name="uF"
+$desc=$collectedClasses.uF
+if($desc instanceof Array)$desc=$desc[1]
+uF.prototype=$desc
+function cj(a){this.a=a}cj.builtin$cls="cj"
+if(!"name" in cj)cj.name="cj"
+$desc=$collectedClasses.cj
+if($desc instanceof Array)$desc=$desc[1]
+cj.prototype=$desc
+function HA(G3,jL,zZ,JD,dr){this.G3=G3
+this.jL=jL
+this.zZ=zZ
+this.JD=JD
+this.dr=dr}HA.builtin$cls="HA"
+if(!"name" in HA)HA.name="HA"
+$desc=$collectedClasses.HA
+if($desc instanceof Array)$desc=$desc[1]
+HA.prototype=$desc
+HA.prototype.gG3=function(receiver){return this.G3}
+HA.prototype.gjL=function(receiver){return this.jL}
+HA.prototype.gzZ=function(receiver){return this.zZ}
+function br(Zp,VJ,Ai){this.Zp=Zp
+this.VJ=VJ
+this.Ai=Ai}br.builtin$cls="br"
+if(!"name" in br)br.name="br"
+$desc=$collectedClasses.br
+if($desc instanceof Array)$desc=$desc[1]
+br.prototype=$desc
+function zT(a){this.a=a}zT.builtin$cls="zT"
+if(!"name" in zT)zT.name="zT"
+$desc=$collectedClasses.zT
+if($desc instanceof Array)$desc=$desc[1]
+zT.prototype=$desc
+function D7(Ii,YB,BK,kN,cs,cT,VJ,Ai){this.Ii=Ii
+this.YB=YB
+this.BK=BK
+this.kN=kN
+this.cs=cs
+this.cT=cT
+this.VJ=VJ
+this.Ai=Ai}D7.builtin$cls="D7"
+if(!"name" in D7)D7.name="D7"
+$desc=$collectedClasses.D7
+if($desc instanceof Array)$desc=$desc[1]
+D7.prototype=$desc
+D7.prototype.gIi=function(receiver){return this.Ii}
+function qL(){}qL.builtin$cls="qL"
+if(!"name" in qL)qL.name="qL"
+$desc=$collectedClasses.qL
+if($desc instanceof Array)$desc=$desc[1]
+qL.prototype=$desc
+function C4(a,b,c){this.a=a
+this.b=b
+this.c=c}C4.builtin$cls="C4"
+if(!"name" in C4)C4.name="C4"
+$desc=$collectedClasses.C4
+if($desc instanceof Array)$desc=$desc[1]
+C4.prototype=$desc
+function l9(d,e,f){this.d=d
+this.e=e
+this.f=f}l9.builtin$cls="l9"
+if(!"name" in l9)l9.name="l9"
+$desc=$collectedClasses.l9
+if($desc instanceof Array)$desc=$desc[1]
+l9.prototype=$desc
+function lP(){}lP.builtin$cls="lP"
+if(!"name" in lP)lP.name="lP"
+$desc=$collectedClasses.lP
+if($desc instanceof Array)$desc=$desc[1]
+lP.prototype=$desc
+function km(a){this.a=a}km.builtin$cls="km"
+if(!"name" in km)km.name="km"
+$desc=$collectedClasses.km
+if($desc instanceof Array)$desc=$desc[1]
+km.prototype=$desc
+function Qt(){}Qt.builtin$cls="Qt"
+if(!"name" in Qt)Qt.name="Qt"
+$desc=$collectedClasses.Qt
+if($desc instanceof Array)$desc=$desc[1]
+Qt.prototype=$desc
+function Dk(S,SF){this.S=S
+this.SF=SF}Dk.builtin$cls="Dk"
+if(!"name" in Dk)Dk.name="Dk"
+$desc=$collectedClasses.Dk
+if($desc instanceof Array)$desc=$desc[1]
+Dk.prototype=$desc
+function A0(){}A0.builtin$cls="A0"
+if(!"name" in A0)A0.name="A0"
+$desc=$collectedClasses.A0
+if($desc instanceof Array)$desc=$desc[1]
+A0.prototype=$desc
+function rm(){}rm.builtin$cls="rm"
+if(!"name" in rm)rm.name="rm"
+$desc=$collectedClasses.rm
+if($desc instanceof Array)$desc=$desc[1]
+rm.prototype=$desc
+function eY(){}eY.builtin$cls="eY"
+if(!"name" in eY)eY.name="eY"
+$desc=$collectedClasses.eY
+if($desc instanceof Array)$desc=$desc[1]
+eY.prototype=$desc
+function OO(TL){this.TL=TL}OO.builtin$cls="OO"
+if(!"name" in OO)OO.name="OO"
+$desc=$collectedClasses.OO
+if($desc instanceof Array)$desc=$desc[1]
+OO.prototype=$desc
+OO.prototype.gTL=function(){return this.TL}
+function BE(oc,mI,DF,nK,Ew,TL){this.oc=oc
+this.mI=mI
+this.DF=DF
+this.nK=nK
+this.Ew=Ew
+this.TL=TL}BE.builtin$cls="BE"
+if(!"name" in BE)BE.name="BE"
+$desc=$collectedClasses.BE
+if($desc instanceof Array)$desc=$desc[1]
+BE.prototype=$desc
+BE.prototype.goc=function(receiver){return this.oc}
+BE.prototype.gmI=function(){return this.mI}
+BE.prototype.gDF=function(){return this.DF}
+BE.prototype.gnK=function(){return this.nK}
+BE.prototype.gEw=function(){return this.Ew}
+function Qb(oc,mI,DF,nK,Ew,TL){this.oc=oc
+this.mI=mI
+this.DF=DF
+this.nK=nK
+this.Ew=Ew
+this.TL=TL}Qb.builtin$cls="Qb"
+if(!"name" in Qb)Qb.name="Qb"
+$desc=$collectedClasses.Qb
+if($desc instanceof Array)$desc=$desc[1]
+Qb.prototype=$desc
+Qb.prototype.goc=function(receiver){return this.oc}
+Qb.prototype.gmI=function(){return this.mI}
+Qb.prototype.gDF=function(){return this.DF}
+Qb.prototype.gnK=function(){return this.nK}
+Qb.prototype.gEw=function(){return this.Ew}
+function xI(oc,mI,DF,nK,Ew,TL,qW){this.oc=oc
+this.mI=mI
+this.DF=DF
+this.nK=nK
+this.Ew=Ew
+this.TL=TL
+this.qW=qW}xI.builtin$cls="xI"
+if(!"name" in xI)xI.name="xI"
+$desc=$collectedClasses.xI
+if($desc instanceof Array)$desc=$desc[1]
+xI.prototype=$desc
+xI.prototype.goc=function(receiver){return this.oc}
+xI.prototype.gmI=function(){return this.mI}
+xI.prototype.gDF=function(){return this.DF}
+xI.prototype.gnK=function(){return this.nK}
+xI.prototype.gEw=function(){return this.Ew}
+xI.prototype.gTL=function(){return this.TL}
+function q1(S,SF,aA,dY,Yj){this.S=S
+this.SF=SF
+this.aA=aA
+this.dY=dY
+this.Yj=Yj}q1.builtin$cls="q1"
+if(!"name" in q1)q1.name="q1"
+$desc=$collectedClasses.q1
+if($desc instanceof Array)$desc=$desc[1]
+q1.prototype=$desc
+function Zj(){}Zj.builtin$cls="Zj"
+if(!"name" in Zj)Zj.name="Zj"
+$desc=$collectedClasses.Zj
+if($desc instanceof Array)$desc=$desc[1]
+Zj.prototype=$desc
+function XP(di,P0,ZD,S6,Dg,Q0,Hs,n4,pc,SV,EX,mn){this.di=di
+this.P0=P0
+this.ZD=ZD
+this.S6=S6
+this.Dg=Dg
+this.Q0=Q0
+this.Hs=Hs
+this.n4=n4
+this.pc=pc
+this.SV=SV
+this.EX=EX
+this.mn=mn}XP.builtin$cls="XP"
+if(!"name" in XP)XP.name="XP"
+$desc=$collectedClasses.XP
+if($desc instanceof Array)$desc=$desc[1]
+XP.prototype=$desc
+XP.prototype.gDg=function(receiver){return receiver.Dg}
+XP.prototype.gQ0=function(receiver){return receiver.Q0}
+XP.prototype.gHs=function(receiver){return receiver.Hs}
+XP.prototype.gn4=function(receiver){return receiver.n4}
+XP.prototype.gEX=function(receiver){return receiver.EX}
+function q6(){}q6.builtin$cls="q6"
+if(!"name" in q6)q6.name="q6"
+$desc=$collectedClasses.q6
+if($desc instanceof Array)$desc=$desc[1]
+q6.prototype=$desc
+function CK(a){this.a=a}CK.builtin$cls="CK"
+if(!"name" in CK)CK.name="CK"
+$desc=$collectedClasses.CK
+if($desc instanceof Array)$desc=$desc[1]
+CK.prototype=$desc
+function BO(a){this.a=a}BO.builtin$cls="BO"
+if(!"name" in BO)BO.name="BO"
+$desc=$collectedClasses.BO
+if($desc instanceof Array)$desc=$desc[1]
+BO.prototype=$desc
+function ZG(){}ZG.builtin$cls="ZG"
+if(!"name" in ZG)ZG.name="ZG"
+$desc=$collectedClasses.ZG
+if($desc instanceof Array)$desc=$desc[1]
+ZG.prototype=$desc
+function Oc(a){this.a=a}Oc.builtin$cls="Oc"
+if(!"name" in Oc)Oc.name="Oc"
+$desc=$collectedClasses.Oc
+if($desc instanceof Array)$desc=$desc[1]
+Oc.prototype=$desc
+function MX(a){this.a=a}MX.builtin$cls="MX"
+if(!"name" in MX)MX.name="MX"
+$desc=$collectedClasses.MX
+if($desc instanceof Array)$desc=$desc[1]
+MX.prototype=$desc
+function w12(){}w12.builtin$cls="w12"
+if(!"name" in w12)w12.name="w12"
+$desc=$collectedClasses.w12
+if($desc instanceof Array)$desc=$desc[1]
+w12.prototype=$desc
+function fTP(a){this.a=a}fTP.builtin$cls="fTP"
+if(!"name" in fTP)fTP.name="fTP"
+$desc=$collectedClasses.fTP
+if($desc instanceof Array)$desc=$desc[1]
+fTP.prototype=$desc
+function yL(){}yL.builtin$cls="yL"
+if(!"name" in yL)yL.name="yL"
+$desc=$collectedClasses.yL
+if($desc instanceof Array)$desc=$desc[1]
+yL.prototype=$desc
+function dM(KM){this.KM=KM}dM.builtin$cls="dM"
+if(!"name" in dM)dM.name="dM"
+$desc=$collectedClasses.dM
+if($desc instanceof Array)$desc=$desc[1]
+dM.prototype=$desc
+dM.prototype.gKM=function(receiver){return receiver.KM}
+dM.prototype.gKM.$reflectable=1
+function Y7(wc,nn,lv,Pp){this.wc=wc
+this.nn=nn
+this.lv=lv
+this.Pp=Pp}Y7.builtin$cls="Y7"
+$desc=$collectedClasses.Y7
+if($desc instanceof Array)$desc=$desc[1]
+Y7.prototype=$desc
+function WC(a){this.a=a}WC.builtin$cls="WC"
+if(!"name" in WC)WC.name="WC"
+$desc=$collectedClasses.WC
+if($desc instanceof Array)$desc=$desc[1]
+WC.prototype=$desc
+function Xi(b){this.b=b}Xi.builtin$cls="Xi"
+if(!"name" in Xi)Xi.name="Xi"
+$desc=$collectedClasses.Xi
+if($desc instanceof Array)$desc=$desc[1]
+Xi.prototype=$desc
+function TV(){}TV.builtin$cls="TV"
+if(!"name" in TV)TV.name="TV"
+$desc=$collectedClasses.TV
+if($desc instanceof Array)$desc=$desc[1]
+TV.prototype=$desc
+function Mq(){}Mq.builtin$cls="Mq"
+if(!"name" in Mq)Mq.name="Mq"
+$desc=$collectedClasses.Mq
+if($desc instanceof Array)$desc=$desc[1]
+Mq.prototype=$desc
+function Oa(a){this.a=a}Oa.builtin$cls="Oa"
+if(!"name" in Oa)Oa.name="Oa"
+$desc=$collectedClasses.Oa
+if($desc instanceof Array)$desc=$desc[1]
+Oa.prototype=$desc
+function n1(b,c,d,e){this.b=b
+this.c=c
+this.d=d
+this.e=e}n1.builtin$cls="n1"
+if(!"name" in n1)n1.name="n1"
+$desc=$collectedClasses.n1
+if($desc instanceof Array)$desc=$desc[1]
+n1.prototype=$desc
+function xf(a,b,c){this.a=a
+this.b=b
+this.c=c}xf.builtin$cls="xf"
+if(!"name" in xf)xf.name="xf"
+$desc=$collectedClasses.xf
+if($desc instanceof Array)$desc=$desc[1]
+xf.prototype=$desc
+function L6(a,b){this.a=a
+this.b=b}L6.builtin$cls="L6"
+if(!"name" in L6)L6.name="L6"
+$desc=$collectedClasses.L6
+if($desc instanceof Array)$desc=$desc[1]
+L6.prototype=$desc
+function Rs(c,d,e){this.c=c
+this.d=d
+this.e=e}Rs.builtin$cls="Rs"
+if(!"name" in Rs)Rs.name="Rs"
+$desc=$collectedClasses.Rs
+if($desc instanceof Array)$desc=$desc[1]
+Rs.prototype=$desc
+function uJ(){}uJ.builtin$cls="uJ"
+if(!"name" in uJ)uJ.name="uJ"
+$desc=$collectedClasses.uJ
+if($desc instanceof Array)$desc=$desc[1]
+uJ.prototype=$desc
+function hm(){}hm.builtin$cls="hm"
+if(!"name" in hm)hm.name="hm"
+$desc=$collectedClasses.hm
+if($desc instanceof Array)$desc=$desc[1]
+hm.prototype=$desc
+function Ji(a){this.a=a}Ji.builtin$cls="Ji"
+if(!"name" in Ji)Ji.name="Ji"
+$desc=$collectedClasses.Ji
+if($desc instanceof Array)$desc=$desc[1]
+Ji.prototype=$desc
+function Bf(K3,Zu,Po,Ha,LO,ZY,xS,PB,eS,Ii){this.K3=K3
+this.Zu=Zu
+this.Po=Po
+this.Ha=Ha
+this.LO=LO
+this.ZY=ZY
+this.xS=xS
+this.PB=PB
+this.eS=eS
+this.Ii=Ii}Bf.builtin$cls="Bf"
+if(!"name" in Bf)Bf.name="Bf"
+$desc=$collectedClasses.Bf
+if($desc instanceof Array)$desc=$desc[1]
+Bf.prototype=$desc
+function ir(VJ,Ai,ZI,uN,z3,TQ,Vk,Ye,mT,KM){this.VJ=VJ
+this.Ai=Ai
+this.ZI=ZI
+this.uN=uN
+this.z3=z3
+this.TQ=TQ
+this.Vk=Vk
+this.Ye=Ye
+this.mT=mT
+this.KM=KM}ir.builtin$cls="ir"
+if(!"name" in ir)ir.name="ir"
+$desc=$collectedClasses.ir
+if($desc instanceof Array)$desc=$desc[1]
+ir.prototype=$desc
+function Sa(KM){this.KM=KM}Sa.builtin$cls="Sa"
+if(!"name" in Sa)Sa.name="Sa"
+$desc=$collectedClasses.Sa
+if($desc instanceof Array)$desc=$desc[1]
+Sa.prototype=$desc
+dM.prototype.gKM=function(receiver){return receiver.KM}
+dM.prototype.gKM.$reflectable=1
+function GN(){}GN.builtin$cls="GN"
+if(!"name" in GN)GN.name="GN"
+$desc=$collectedClasses.GN
+if($desc instanceof Array)$desc=$desc[1]
+GN.prototype=$desc
+function k8(jL,zZ){this.jL=jL
+this.zZ=zZ}k8.builtin$cls="k8"
+if(!"name" in k8)k8.name="k8"
+$desc=$collectedClasses.k8
+if($desc instanceof Array)$desc=$desc[1]
+k8.prototype=$desc
+k8.prototype.gjL=function(receiver){return this.jL}
+k8.prototype.gzZ=function(receiver){return this.zZ}
+k8.prototype.szZ=function(receiver,v){return this.zZ=v}
+function HJ(nF){this.nF=nF}HJ.builtin$cls="HJ"
+if(!"name" in HJ)HJ.name="HJ"
+$desc=$collectedClasses.HJ
+if($desc instanceof Array)$desc=$desc[1]
+HJ.prototype=$desc
+function S0(Ow,VC){this.Ow=Ow
+this.VC=VC}S0.builtin$cls="S0"
+if(!"name" in S0)S0.name="S0"
+$desc=$collectedClasses.S0
+if($desc instanceof Array)$desc=$desc[1]
+S0.prototype=$desc
+function V3(ns){this.ns=ns}V3.builtin$cls="V3"
+if(!"name" in V3)V3.name="V3"
+$desc=$collectedClasses.V3
+if($desc instanceof Array)$desc=$desc[1]
+V3.prototype=$desc
+function Bl(){}Bl.builtin$cls="Bl"
+if(!"name" in Bl)Bl.name="Bl"
+$desc=$collectedClasses.Bl
+if($desc instanceof Array)$desc=$desc[1]
+Bl.prototype=$desc
+function pM(){}pM.builtin$cls="pM"
+if(!"name" in pM)pM.name="pM"
+$desc=$collectedClasses.pM
+if($desc instanceof Array)$desc=$desc[1]
+pM.prototype=$desc
+function Mh(){}Mh.builtin$cls="Mh"
+if(!"name" in Mh)Mh.name="Mh"
+$desc=$collectedClasses.Mh
+if($desc instanceof Array)$desc=$desc[1]
+Mh.prototype=$desc
+function Md(){}Md.builtin$cls="Md"
+if(!"name" in Md)Md.name="Md"
+$desc=$collectedClasses.Md
+if($desc instanceof Array)$desc=$desc[1]
+Md.prototype=$desc
+function Lf(){}Lf.builtin$cls="Lf"
+if(!"name" in Lf)Lf.name="Lf"
+$desc=$collectedClasses.Lf
+if($desc instanceof Array)$desc=$desc[1]
+Lf.prototype=$desc
+function fT(){}fT.builtin$cls="fT"
+if(!"name" in fT)fT.name="fT"
+$desc=$collectedClasses.fT
+if($desc instanceof Array)$desc=$desc[1]
+fT.prototype=$desc
+function pp(){}pp.builtin$cls="pp"
+if(!"name" in pp)pp.name="pp"
+$desc=$collectedClasses.pp
+if($desc instanceof Array)$desc=$desc[1]
+pp.prototype=$desc
+function Nq(){}Nq.builtin$cls="Nq"
+if(!"name" in Nq)Nq.name="Nq"
+$desc=$collectedClasses.Nq
+if($desc instanceof Array)$desc=$desc[1]
+Nq.prototype=$desc
+function nl(){}nl.builtin$cls="nl"
+if(!"name" in nl)nl.name="nl"
+$desc=$collectedClasses.nl
+if($desc instanceof Array)$desc=$desc[1]
+nl.prototype=$desc
+function mf(a){this.a=a}mf.builtin$cls="mf"
+if(!"name" in mf)mf.name="mf"
+$desc=$collectedClasses.mf
+if($desc instanceof Array)$desc=$desc[1]
+mf.prototype=$desc
+function ej(){}ej.builtin$cls="ej"
+if(!"name" in ej)ej.name="ej"
+$desc=$collectedClasses.ej
+if($desc instanceof Array)$desc=$desc[1]
+ej.prototype=$desc
+function HK(b){this.b=b}HK.builtin$cls="HK"
+if(!"name" in HK)HK.name="HK"
+$desc=$collectedClasses.HK
+if($desc instanceof Array)$desc=$desc[1]
+HK.prototype=$desc
+function w13(){}w13.builtin$cls="w13"
+if(!"name" in w13)w13.name="w13"
+$desc=$collectedClasses.w13
+if($desc instanceof Array)$desc=$desc[1]
+w13.prototype=$desc
+function o8(a){this.a=a}o8.builtin$cls="o8"
+if(!"name" in o8)o8.name="o8"
+$desc=$collectedClasses.o8
+if($desc instanceof Array)$desc=$desc[1]
+o8.prototype=$desc
+function GL(a){this.a=a}GL.builtin$cls="GL"
+if(!"name" in GL)GL.name="GL"
+$desc=$collectedClasses.GL
+if($desc instanceof Array)$desc=$desc[1]
+GL.prototype=$desc
+function e9(){}e9.builtin$cls="e9"
+if(!"name" in e9)e9.name="e9"
+$desc=$collectedClasses.e9
+if($desc instanceof Array)$desc=$desc[1]
+e9.prototype=$desc
+function Dw(wc,nn,lv,Pp){this.wc=wc
+this.nn=nn
+this.lv=lv
+this.Pp=Pp}Dw.builtin$cls="Dw"
+$desc=$collectedClasses.Dw
+if($desc instanceof Array)$desc=$desc[1]
+Dw.prototype=$desc
+function Xy(a,b,c){this.a=a
+this.b=b
+this.c=c}Xy.builtin$cls="Xy"
+if(!"name" in Xy)Xy.name="Xy"
+$desc=$collectedClasses.Xy
+if($desc instanceof Array)$desc=$desc[1]
+Xy.prototype=$desc
+function uK(a){this.a=a}uK.builtin$cls="uK"
+if(!"name" in uK)uK.name="uK"
+$desc=$collectedClasses.uK
+if($desc instanceof Array)$desc=$desc[1]
+uK.prototype=$desc
+function mY(qc,jf,Qi,uK,VJ,Ai){this.qc=qc
+this.jf=jf
+this.Qi=Qi
+this.uK=uK
+this.VJ=VJ
+this.Ai=Ai}mY.builtin$cls="mY"
+if(!"name" in mY)mY.name="mY"
+$desc=$collectedClasses.mY
+if($desc instanceof Array)$desc=$desc[1]
+mY.prototype=$desc
+function fE(a){this.a=a}fE.builtin$cls="fE"
+if(!"name" in fE)fE.name="fE"
+$desc=$collectedClasses.fE
+if($desc instanceof Array)$desc=$desc[1]
+fE.prototype=$desc
+function mB(a,b){this.a=a
+this.b=b}mB.builtin$cls="mB"
+if(!"name" in mB)mB.name="mB"
+$desc=$collectedClasses.mB
+if($desc instanceof Array)$desc=$desc[1]
+mB.prototype=$desc
+function XF(vq,L1,VJ,Ai){this.vq=vq
+this.L1=L1
+this.VJ=VJ
+this.Ai=Ai}XF.builtin$cls="XF"
+if(!"name" in XF)XF.name="XF"
+$desc=$collectedClasses.XF
+if($desc instanceof Array)$desc=$desc[1]
+XF.prototype=$desc
+function iH(a,b){this.a=a
+this.b=b}iH.builtin$cls="iH"
+if(!"name" in iH)iH.name="iH"
+$desc=$collectedClasses.iH
+if($desc instanceof Array)$desc=$desc[1]
+iH.prototype=$desc
+function wJY(){}wJY.builtin$cls="wJY"
+if(!"name" in wJY)wJY.name="wJY"
+$desc=$collectedClasses.wJY
+if($desc instanceof Array)$desc=$desc[1]
+wJY.prototype=$desc
+function zOQ(){}zOQ.builtin$cls="zOQ"
+if(!"name" in zOQ)zOQ.name="zOQ"
+$desc=$collectedClasses.zOQ
+if($desc instanceof Array)$desc=$desc[1]
+zOQ.prototype=$desc
+function W6o(){}W6o.builtin$cls="W6o"
+if(!"name" in W6o)W6o.name="W6o"
+$desc=$collectedClasses.W6o
+if($desc instanceof Array)$desc=$desc[1]
+W6o.prototype=$desc
+function MdQ(){}MdQ.builtin$cls="MdQ"
+if(!"name" in MdQ)MdQ.name="MdQ"
+$desc=$collectedClasses.MdQ
+if($desc instanceof Array)$desc=$desc[1]
+MdQ.prototype=$desc
+function YJG(){}YJG.builtin$cls="YJG"
+if(!"name" in YJG)YJG.name="YJG"
+$desc=$collectedClasses.YJG
+if($desc instanceof Array)$desc=$desc[1]
+YJG.prototype=$desc
+function DOe(){}DOe.builtin$cls="DOe"
+if(!"name" in DOe)DOe.name="DOe"
+$desc=$collectedClasses.DOe
+if($desc instanceof Array)$desc=$desc[1]
+DOe.prototype=$desc
+function lPa(){}lPa.builtin$cls="lPa"
+if(!"name" in lPa)lPa.name="lPa"
+$desc=$collectedClasses.lPa
+if($desc instanceof Array)$desc=$desc[1]
+lPa.prototype=$desc
+function Ufa(){}Ufa.builtin$cls="Ufa"
+if(!"name" in Ufa)Ufa.name="Ufa"
+$desc=$collectedClasses.Ufa
+if($desc instanceof Array)$desc=$desc[1]
+Ufa.prototype=$desc
+function Raa(){}Raa.builtin$cls="Raa"
+if(!"name" in Raa)Raa.name="Raa"
+$desc=$collectedClasses.Raa
+if($desc instanceof Array)$desc=$desc[1]
+Raa.prototype=$desc
+function w0(){}w0.builtin$cls="w0"
+if(!"name" in w0)w0.name="w0"
+$desc=$collectedClasses.w0
+if($desc instanceof Array)$desc=$desc[1]
+w0.prototype=$desc
+function w4(){}w4.builtin$cls="w4"
+if(!"name" in w4)w4.name="w4"
+$desc=$collectedClasses.w4
+if($desc instanceof Array)$desc=$desc[1]
+w4.prototype=$desc
+function w5(){}w5.builtin$cls="w5"
+if(!"name" in w5)w5.name="w5"
+$desc=$collectedClasses.w5
+if($desc instanceof Array)$desc=$desc[1]
+w5.prototype=$desc
+function w7(){}w7.builtin$cls="w7"
+if(!"name" in w7)w7.name="w7"
+$desc=$collectedClasses.w7
+if($desc instanceof Array)$desc=$desc[1]
+w7.prototype=$desc
+function w9(){}w9.builtin$cls="w9"
+if(!"name" in w9)w9.name="w9"
+$desc=$collectedClasses.w9
+if($desc instanceof Array)$desc=$desc[1]
+w9.prototype=$desc
+function w10(){}w10.builtin$cls="w10"
+if(!"name" in w10)w10.name="w10"
+$desc=$collectedClasses.w10
+if($desc instanceof Array)$desc=$desc[1]
+w10.prototype=$desc
+function w11(){}w11.builtin$cls="w11"
+if(!"name" in w11)w11.name="w11"
+$desc=$collectedClasses.w11
+if($desc instanceof Array)$desc=$desc[1]
+w11.prototype=$desc
+function c4(a){this.a=a}c4.builtin$cls="c4"
+if(!"name" in c4)c4.name="c4"
+$desc=$collectedClasses.c4
+if($desc instanceof Array)$desc=$desc[1]
+c4.prototype=$desc
+function z6(eT,k8,bq,G9){this.eT=eT
+this.k8=k8
+this.bq=bq
+this.G9=G9}z6.builtin$cls="z6"
+if(!"name" in z6)z6.name="z6"
+$desc=$collectedClasses.z6
+if($desc instanceof Array)$desc=$desc[1]
+z6.prototype=$desc
+z6.prototype.geT=function(receiver){return this.eT}
+function Ay(bO,Lv){this.bO=bO
+this.Lv=Lv}Ay.builtin$cls="Ay"
+if(!"name" in Ay)Ay.name="Ay"
+$desc=$collectedClasses.Ay
+if($desc instanceof Array)$desc=$desc[1]
+Ay.prototype=$desc
+Ay.prototype.sbO=function(v){return this.bO=v}
+Ay.prototype.gLv=function(){return this.Lv}
+function Ed(Jd){this.Jd=Jd}Ed.builtin$cls="Ed"
+if(!"name" in Ed)Ed.name="Ed"
+$desc=$collectedClasses.Ed
+if($desc instanceof Array)$desc=$desc[1]
+Ed.prototype=$desc
+function G1(Jd,Le){this.Jd=Jd
+this.Le=Le}G1.builtin$cls="G1"
+if(!"name" in G1)G1.name="G1"
+$desc=$collectedClasses.G1
+if($desc instanceof Array)$desc=$desc[1]
+G1.prototype=$desc
+function Os(a){this.a=a}Os.builtin$cls="Os"
+if(!"name" in Os)Os.name="Os"
+$desc=$collectedClasses.Os
+if($desc instanceof Array)$desc=$desc[1]
+Os.prototype=$desc
+function Dl(a){this.a=a}Dl.builtin$cls="Dl"
+if(!"name" in Dl)Dl.name="Dl"
+$desc=$collectedClasses.Dl
+if($desc instanceof Array)$desc=$desc[1]
+Dl.prototype=$desc
+function Wh(KL,bO,tj,Lv,k6){this.KL=KL
+this.bO=bO
+this.tj=tj
+this.Lv=Lv
+this.k6=k6}Wh.builtin$cls="Wh"
+if(!"name" in Wh)Wh.name="Wh"
+$desc=$collectedClasses.Wh
+if($desc instanceof Array)$desc=$desc[1]
+Wh.prototype=$desc
+function x5(KL,bO,tj,Lv,k6){this.KL=KL
+this.bO=bO
+this.tj=tj
+this.Lv=Lv
+this.k6=k6}x5.builtin$cls="x5"
+if(!"name" in x5)x5.name="x5"
+$desc=$collectedClasses.x5
+if($desc instanceof Array)$desc=$desc[1]
+x5.prototype=$desc
+function ev(Pu,KL,bO,tj,Lv,k6){this.Pu=Pu
+this.KL=KL
+this.bO=bO
+this.tj=tj
+this.Lv=Lv
+this.k6=k6}ev.builtin$cls="ev"
+if(!"name" in ev)ev.name="ev"
+$desc=$collectedClasses.ev
+if($desc instanceof Array)$desc=$desc[1]
+ev.prototype=$desc
+ev.prototype.gPu=function(receiver){return this.Pu}
+function ID(){}ID.builtin$cls="ID"
+if(!"name" in ID)ID.name="ID"
+$desc=$collectedClasses.ID
+if($desc instanceof Array)$desc=$desc[1]
+ID.prototype=$desc
+function jV(G3,v4,KL,bO,tj,Lv,k6){this.G3=G3
+this.v4=v4
+this.KL=KL
+this.bO=bO
+this.tj=tj
+this.Lv=Lv
+this.k6=k6}jV.builtin$cls="jV"
+if(!"name" in jV)jV.name="jV"
+$desc=$collectedClasses.jV
+if($desc instanceof Array)$desc=$desc[1]
+jV.prototype=$desc
+jV.prototype.gG3=function(receiver){return this.G3}
+jV.prototype.gv4=function(){return this.v4}
+function ek(KL,bO,tj,Lv,k6){this.KL=KL
+this.bO=bO
+this.tj=tj
+this.Lv=Lv
+this.k6=k6}ek.builtin$cls="ek"
+if(!"name" in ek)ek.name="ek"
+$desc=$collectedClasses.ek
+if($desc instanceof Array)$desc=$desc[1]
+ek.prototype=$desc
+function OC(a,b,c){this.a=a
+this.b=b
+this.c=c}OC.builtin$cls="OC"
+if(!"name" in OC)OC.name="OC"
+$desc=$collectedClasses.OC
+if($desc instanceof Array)$desc=$desc[1]
+OC.prototype=$desc
+function Xm(d){this.d=d}Xm.builtin$cls="Xm"
+if(!"name" in Xm)Xm.name="Xm"
+$desc=$collectedClasses.Xm
+if($desc instanceof Array)$desc=$desc[1]
+Xm.prototype=$desc
+function Jy(wz,KL,bO,tj,Lv,k6){this.wz=wz
+this.KL=KL
+this.bO=bO
+this.tj=tj
+this.Lv=Lv
+this.k6=k6}Jy.builtin$cls="Jy"
+if(!"name" in Jy)Jy.name="Jy"
+$desc=$collectedClasses.Jy
+if($desc instanceof Array)$desc=$desc[1]
+Jy.prototype=$desc
+Jy.prototype.gwz=function(){return this.wz}
+function ky(Bb,T8,KL,bO,tj,Lv,k6){this.Bb=Bb
+this.T8=T8
+this.KL=KL
+this.bO=bO
+this.tj=tj
+this.Lv=Lv
+this.k6=k6}ky.builtin$cls="ky"
+if(!"name" in ky)ky.name="ky"
+$desc=$collectedClasses.ky
+if($desc instanceof Array)$desc=$desc[1]
+ky.prototype=$desc
+ky.prototype.gBb=function(receiver){return this.Bb}
+ky.prototype.gT8=function(receiver){return this.T8}
+function fa(hP,re,KL,bO,tj,Lv,k6){this.hP=hP
+this.re=re
+this.KL=KL
+this.bO=bO
+this.tj=tj
+this.Lv=Lv
+this.k6=k6}fa.builtin$cls="fa"
+if(!"name" in fa)fa.name="fa"
+$desc=$collectedClasses.fa
+if($desc instanceof Array)$desc=$desc[1]
+fa.prototype=$desc
+fa.prototype.ghP=function(){return this.hP}
+fa.prototype.gre=function(){return this.re}
+function WW(){}WW.builtin$cls="WW"
+if(!"name" in WW)WW.name="WW"
+$desc=$collectedClasses.WW
+if($desc instanceof Array)$desc=$desc[1]
+WW.prototype=$desc
+function vQ(a,b,c){this.a=a
+this.b=b
+this.c=c}vQ.builtin$cls="vQ"
+if(!"name" in vQ)vQ.name="vQ"
+$desc=$collectedClasses.vQ
+if($desc instanceof Array)$desc=$desc[1]
+vQ.prototype=$desc
+function a9(d){this.d=d}a9.builtin$cls="a9"
+if(!"name" in a9)a9.name="a9"
+$desc=$collectedClasses.a9
+if($desc instanceof Array)$desc=$desc[1]
+a9.prototype=$desc
+function jh(e,f,g){this.e=e
+this.f=f
+this.g=g}jh.builtin$cls="jh"
+if(!"name" in jh)jh.name="jh"
+$desc=$collectedClasses.jh
+if($desc instanceof Array)$desc=$desc[1]
+jh.prototype=$desc
+function e3(h){this.h=h}e3.builtin$cls="e3"
+if(!"name" in e3)e3.name="e3"
+$desc=$collectedClasses.e3
+if($desc instanceof Array)$desc=$desc[1]
+e3.prototype=$desc
+function VA(Bb,T8,KL,bO,tj,Lv,k6){this.Bb=Bb
+this.T8=T8
+this.KL=KL
+this.bO=bO
+this.tj=tj
+this.Lv=Lv
+this.k6=k6}VA.builtin$cls="VA"
+if(!"name" in VA)VA.name="VA"
+$desc=$collectedClasses.VA
+if($desc instanceof Array)$desc=$desc[1]
+VA.prototype=$desc
+VA.prototype.gBb=function(receiver){return this.Bb}
+VA.prototype.gT8=function(receiver){return this.T8}
+function J1(a,b){this.a=a
+this.b=b}J1.builtin$cls="J1"
+if(!"name" in J1)J1.name="J1"
+$desc=$collectedClasses.J1
+if($desc instanceof Array)$desc=$desc[1]
+J1.prototype=$desc
+function fk(kF,bm){this.kF=kF
+this.bm=bm}fk.builtin$cls="fk"
+if(!"name" in fk)fk.name="fk"
+$desc=$collectedClasses.fk
+if($desc instanceof Array)$desc=$desc[1]
+fk.prototype=$desc
+function wL(lR,ex){this.lR=lR
+this.ex=ex}wL.builtin$cls="wL"
+if(!"name" in wL)wL.name="wL"
+$desc=$collectedClasses.wL
+if($desc instanceof Array)$desc=$desc[1]
+wL.prototype=$desc
+function B0(G1){this.G1=G1}B0.builtin$cls="B0"
+if(!"name" in B0)B0.name="B0"
+$desc=$collectedClasses.B0
+if($desc instanceof Array)$desc=$desc[1]
+B0.prototype=$desc
+B0.prototype.gG1=function(receiver){return this.G1}
+function Fq(){}Fq.builtin$cls="Fq"
+if(!"name" in Fq)Fq.name="Fq"
+$desc=$collectedClasses.Fq
+if($desc instanceof Array)$desc=$desc[1]
+Fq.prototype=$desc
+function hw(){}hw.builtin$cls="hw"
+if(!"name" in hw)hw.name="hw"
+$desc=$collectedClasses.hw
+if($desc instanceof Array)$desc=$desc[1]
+hw.prototype=$desc
+function EZ(){}EZ.builtin$cls="EZ"
+if(!"name" in EZ)EZ.name="EZ"
+$desc=$collectedClasses.EZ
+if($desc instanceof Array)$desc=$desc[1]
+EZ.prototype=$desc
+function no(P){this.P=P}no.builtin$cls="no"
+if(!"name" in no)no.name="no"
+$desc=$collectedClasses.no
+if($desc instanceof Array)$desc=$desc[1]
+no.prototype=$desc
+no.prototype.gP=function(receiver){return this.P}
+function kB(Pu){this.Pu=Pu}kB.builtin$cls="kB"
+if(!"name" in kB)kB.name="kB"
+$desc=$collectedClasses.kB
+if($desc instanceof Array)$desc=$desc[1]
+kB.prototype=$desc
+kB.prototype.gPu=function(receiver){return this.Pu}
+function ae(G3,v4){this.G3=G3
+this.v4=v4}ae.builtin$cls="ae"
+if(!"name" in ae)ae.name="ae"
+$desc=$collectedClasses.ae
+if($desc instanceof Array)$desc=$desc[1]
+ae.prototype=$desc
+ae.prototype.gG3=function(receiver){return this.G3}
+ae.prototype.gv4=function(){return this.v4}
+function Iq(wz){this.wz=wz}Iq.builtin$cls="Iq"
+if(!"name" in Iq)Iq.name="Iq"
+$desc=$collectedClasses.Iq
+if($desc instanceof Array)$desc=$desc[1]
+Iq.prototype=$desc
+function w6(P){this.P=P}w6.builtin$cls="w6"
+if(!"name" in w6)w6.name="w6"
+$desc=$collectedClasses.w6
+if($desc instanceof Array)$desc=$desc[1]
+w6.prototype=$desc
+w6.prototype.gP=function(receiver){return this.P}
+function jK(kp,wz){this.kp=kp
+this.wz=wz}jK.builtin$cls="jK"
+if(!"name" in jK)jK.name="jK"
+$desc=$collectedClasses.jK
+if($desc instanceof Array)$desc=$desc[1]
+jK.prototype=$desc
+jK.prototype.gkp=function(receiver){return this.kp}
+jK.prototype.gwz=function(){return this.wz}
+function uk(kp,Bb,T8){this.kp=kp
+this.Bb=Bb
+this.T8=T8}uk.builtin$cls="uk"
+if(!"name" in uk)uk.name="uk"
+$desc=$collectedClasses.uk
+if($desc instanceof Array)$desc=$desc[1]
+uk.prototype=$desc
+uk.prototype.gkp=function(receiver){return this.kp}
+uk.prototype.gBb=function(receiver){return this.Bb}
+uk.prototype.gT8=function(receiver){return this.T8}
+function K9(Bb,T8){this.Bb=Bb
+this.T8=T8}K9.builtin$cls="K9"
+if(!"name" in K9)K9.name="K9"
+$desc=$collectedClasses.K9
+if($desc instanceof Array)$desc=$desc[1]
+K9.prototype=$desc
+K9.prototype.gBb=function(receiver){return this.Bb}
+K9.prototype.gT8=function(receiver){return this.T8}
+function RW(hP,bP,re){this.hP=hP
+this.bP=bP
+this.re=re}RW.builtin$cls="RW"
+if(!"name" in RW)RW.name="RW"
+$desc=$collectedClasses.RW
+if($desc instanceof Array)$desc=$desc[1]
+RW.prototype=$desc
+RW.prototype.ghP=function(){return this.hP}
+RW.prototype.gbP=function(receiver){return this.bP}
+RW.prototype.gre=function(){return this.re}
+function xs(){}xs.builtin$cls="xs"
+if(!"name" in xs)xs.name="xs"
+$desc=$collectedClasses.xs
+if($desc instanceof Array)$desc=$desc[1]
+xs.prototype=$desc
+function FX(Sk,Ix,ku,fL,lQ){this.Sk=Sk
+this.Ix=Ix
+this.ku=ku
+this.fL=fL
+this.lQ=lQ}FX.builtin$cls="FX"
+if(!"name" in FX)FX.name="FX"
+$desc=$collectedClasses.FX
+if($desc instanceof Array)$desc=$desc[1]
+FX.prototype=$desc
+function Ae(vH,P){this.vH=vH
+this.P=P}Ae.builtin$cls="Ae"
+if(!"name" in Ae)Ae.name="Ae"
+$desc=$collectedClasses.Ae
+if($desc instanceof Array)$desc=$desc[1]
+Ae.prototype=$desc
+Ae.prototype.gvH=function(receiver){return this.vH}
+Ae.prototype.gvH.$reflectable=1
+Ae.prototype.gP=function(receiver){return this.P}
+Ae.prototype.gP.$reflectable=1
+function Bt(YR){this.YR=YR}Bt.builtin$cls="Bt"
+if(!"name" in Bt)Bt.name="Bt"
+$desc=$collectedClasses.Bt
+if($desc instanceof Array)$desc=$desc[1]
+Bt.prototype=$desc
+function vR(Ee,wX,CD){this.Ee=Ee
+this.wX=wX
+this.CD=CD}vR.builtin$cls="vR"
+if(!"name" in vR)vR.name="vR"
+$desc=$collectedClasses.vR
+if($desc instanceof Array)$desc=$desc[1]
+vR.prototype=$desc
+function Pn(fY,P,G8){this.fY=fY
+this.P=P
+this.G8=G8}Pn.builtin$cls="Pn"
+if(!"name" in Pn)Pn.name="Pn"
+$desc=$collectedClasses.Pn
+if($desc instanceof Array)$desc=$desc[1]
+Pn.prototype=$desc
+Pn.prototype.gfY=function(receiver){return this.fY}
+Pn.prototype.gP=function(receiver){return this.P}
+Pn.prototype.gG8=function(){return this.G8}
+function hc(MV,wV,jI,x0){this.MV=MV
+this.wV=wV
+this.jI=jI
+this.x0=x0}hc.builtin$cls="hc"
+if(!"name" in hc)hc.name="hc"
+$desc=$collectedClasses.hc
+if($desc instanceof Array)$desc=$desc[1]
+hc.prototype=$desc
+function hA(G1){this.G1=G1}hA.builtin$cls="hA"
+if(!"name" in hA)hA.name="hA"
+$desc=$collectedClasses.hA
+if($desc instanceof Array)$desc=$desc[1]
+hA.prototype=$desc
+hA.prototype.gG1=function(receiver){return this.G1}
+function fr(){}fr.builtin$cls="fr"
+if(!"name" in fr)fr.name="fr"
+$desc=$collectedClasses.fr
+if($desc instanceof Array)$desc=$desc[1]
+fr.prototype=$desc
+function a0(){}a0.builtin$cls="a0"
+if(!"name" in a0)a0.name="a0"
+$desc=$collectedClasses.a0
+if($desc instanceof Array)$desc=$desc[1]
+a0.prototype=$desc
+function NQ(tH,VJ,Ai,VJ,Ai,ZI,uN,z3,TQ,Vk,Ye,mT,KM){this.tH=tH
+this.VJ=VJ
+this.Ai=Ai
+this.VJ=VJ
+this.Ai=Ai
+this.ZI=ZI
+this.uN=uN
+this.z3=z3
+this.TQ=TQ
+this.Vk=Vk
+this.Ye=Ye
+this.mT=mT
+this.KM=KM}NQ.builtin$cls="NQ"
+if(!"name" in NQ)NQ.name="NQ"
+$desc=$collectedClasses.NQ
+if($desc instanceof Array)$desc=$desc[1]
+NQ.prototype=$desc
+function fI(Uz,VJ,Ai,tH,VJ,Ai,VJ,Ai,ZI,uN,z3,TQ,Vk,Ye,mT,KM){this.Uz=Uz
+this.VJ=VJ
+this.Ai=Ai
+this.tH=tH
+this.VJ=VJ
+this.Ai=Ai
+this.VJ=VJ
+this.Ai=Ai
+this.ZI=ZI
+this.uN=uN
+this.z3=z3
+this.TQ=TQ
+this.Vk=Vk
+this.Ye=Ye
+this.mT=mT
+this.KM=KM}fI.builtin$cls="fI"
+if(!"name" in fI)fI.name="fI"
+$desc=$collectedClasses.fI
+if($desc instanceof Array)$desc=$desc[1]
+fI.prototype=$desc
+fI.prototype.gUz=function(receiver){return receiver.Uz}
+fI.prototype.gUz.$reflectable=1
+fI.prototype.sUz=function(receiver,v){return receiver.Uz=v}
+fI.prototype.sUz.$reflectable=1
+function V0(){}V0.builtin$cls="V0"
+if(!"name" in V0)V0.name="V0"
+$desc=$collectedClasses.V0
+if($desc instanceof Array)$desc=$desc[1]
+V0.prototype=$desc
+function kK(vX,VJ,Ai,tH,VJ,Ai,VJ,Ai,ZI,uN,z3,TQ,Vk,Ye,mT,KM){this.vX=vX
+this.VJ=VJ
+this.Ai=Ai
+this.tH=tH
+this.VJ=VJ
+this.Ai=Ai
+this.VJ=VJ
+this.Ai=Ai
+this.ZI=ZI
+this.uN=uN
+this.z3=z3
+this.TQ=TQ
+this.Vk=Vk
+this.Ye=Ye
+this.mT=mT
+this.KM=KM}kK.builtin$cls="kK"
+if(!"name" in kK)kK.name="kK"
+$desc=$collectedClasses.kK
+if($desc instanceof Array)$desc=$desc[1]
+kK.prototype=$desc
+kK.prototype.gvX=function(receiver){return receiver.vX}
+kK.prototype.gvX.$reflectable=1
+kK.prototype.svX=function(receiver,v){return receiver.vX=v}
+kK.prototype.svX.$reflectable=1
+function V4(){}V4.builtin$cls="V4"
+if(!"name" in V4)V4.name="V4"
+$desc=$collectedClasses.V4
+if($desc instanceof Array)$desc=$desc[1]
+V4.prototype=$desc
+function uw(V4,VJ,Ai,tH,VJ,Ai,VJ,Ai,ZI,uN,z3,TQ,Vk,Ye,mT,KM){this.V4=V4
+this.VJ=VJ
+this.Ai=Ai
+this.tH=tH
+this.VJ=VJ
+this.Ai=Ai
+this.VJ=VJ
+this.Ai=Ai
+this.ZI=ZI
+this.uN=uN
+this.z3=z3
+this.TQ=TQ
+this.Vk=Vk
+this.Ye=Ye
+this.mT=mT
+this.KM=KM}uw.builtin$cls="uw"
+if(!"name" in uw)uw.name="uw"
+$desc=$collectedClasses.uw
+if($desc instanceof Array)$desc=$desc[1]
+uw.prototype=$desc
+uw.prototype.gV4=function(receiver){return receiver.V4}
+uw.prototype.gV4.$reflectable=1
+uw.prototype.sV4=function(receiver,v){return receiver.V4=v}
+uw.prototype.sV4.$reflectable=1
+function V6(){}V6.builtin$cls="V6"
+if(!"name" in V6)V6.name="V6"
+$desc=$collectedClasses.V6
+if($desc instanceof Array)$desc=$desc[1]
+V6.prototype=$desc
+function V2(N1,bn,Ck){this.N1=N1
+this.bn=bn
+this.Ck=Ck}V2.builtin$cls="V2"
+if(!"name" in V2)V2.name="V2"
+$desc=$collectedClasses.V2
+if($desc instanceof Array)$desc=$desc[1]
+V2.prototype=$desc
+function D8(Y0,LO,ZY,xS,PB,eS,Ii){this.Y0=Y0
+this.LO=LO
+this.ZY=ZY
+this.xS=xS
+this.PB=PB
+this.eS=eS
+this.Ii=Ii}D8.builtin$cls="D8"
+if(!"name" in D8)D8.name="D8"
+$desc=$collectedClasses.D8
+if($desc instanceof Array)$desc=$desc[1]
+D8.prototype=$desc
+function jY(Ca,LO,ZY,xS,PB,eS,Ii){this.Ca=Ca
+this.LO=LO
+this.ZY=ZY
+this.xS=xS
+this.PB=PB
+this.eS=eS
+this.Ii=Ii}jY.builtin$cls="jY"
+if(!"name" in jY)jY.name="jY"
+$desc=$collectedClasses.jY
+if($desc instanceof Array)$desc=$desc[1]
+jY.prototype=$desc
+function ll(){}ll.builtin$cls="ll"
+if(!"name" in ll)ll.name="ll"
+$desc=$collectedClasses.ll
+if($desc instanceof Array)$desc=$desc[1]
+ll.prototype=$desc
+function Uf(){}Uf.builtin$cls="Uf"
+if(!"name" in Uf)Uf.name="Uf"
+$desc=$collectedClasses.Uf
+if($desc instanceof Array)$desc=$desc[1]
+Uf.prototype=$desc
+function ik(a){this.a=a}ik.builtin$cls="ik"
+if(!"name" in ik)ik.name="ik"
+$desc=$collectedClasses.ik
+if($desc instanceof Array)$desc=$desc[1]
+ik.prototype=$desc
+function LfS(b){this.b=b}LfS.builtin$cls="LfS"
+if(!"name" in LfS)LfS.name="LfS"
+$desc=$collectedClasses.LfS
+if($desc instanceof Array)$desc=$desc[1]
+LfS.prototype=$desc
+function NP(Ca,LO,ZY,xS,PB,eS,Ii){this.Ca=Ca
+this.LO=LO
+this.ZY=ZY
+this.xS=xS
+this.PB=PB
+this.eS=eS
+this.Ii=Ii}NP.builtin$cls="NP"
+if(!"name" in NP)NP.name="NP"
+$desc=$collectedClasses.NP
+if($desc instanceof Array)$desc=$desc[1]
+NP.prototype=$desc
+function Vh(Ca,LO,ZY,xS,PB,eS,Ii){this.Ca=Ca
+this.LO=LO
+this.ZY=ZY
+this.xS=xS
+this.PB=PB
+this.eS=eS
+this.Ii=Ii}Vh.builtin$cls="Vh"
+if(!"name" in Vh)Vh.name="Vh"
+$desc=$collectedClasses.Vh
+if($desc instanceof Array)$desc=$desc[1]
+Vh.prototype=$desc
+function r0(a){this.a=a}r0.builtin$cls="r0"
+if(!"name" in r0)r0.name="r0"
+$desc=$collectedClasses.r0
+if($desc instanceof Array)$desc=$desc[1]
+r0.prototype=$desc
+function jz(b){this.b=b}jz.builtin$cls="jz"
+if(!"name" in jz)jz.name="jz"
+$desc=$collectedClasses.jz
+if($desc instanceof Array)$desc=$desc[1]
+jz.prototype=$desc
+function SA(Ca,LO,ZY,xS,PB,eS,Ii){this.Ca=Ca
+this.LO=LO
+this.ZY=ZY
+this.xS=xS
+this.PB=PB
+this.eS=eS
+this.Ii=Ii}SA.builtin$cls="SA"
+if(!"name" in SA)SA.name="SA"
+$desc=$collectedClasses.SA
+if($desc instanceof Array)$desc=$desc[1]
+SA.prototype=$desc
+function zV(a,b,c){this.a=a
+this.b=b
+this.c=c}zV.builtin$cls="zV"
+if(!"name" in zV)zV.name="zV"
+$desc=$collectedClasses.zV
+if($desc instanceof Array)$desc=$desc[1]
+zV.prototype=$desc
+function nv(){}nv.builtin$cls="nv"
+if(!"name" in nv)nv.name="nv"
+$desc=$collectedClasses.nv
+if($desc instanceof Array)$desc=$desc[1]
+nv.prototype=$desc
+function ee(N1,bn,Ck){this.N1=N1
+this.bn=bn
+this.Ck=Ck}ee.builtin$cls="ee"
+if(!"name" in ee)ee.name="ee"
+$desc=$collectedClasses.ee
+if($desc instanceof Array)$desc=$desc[1]
+ee.prototype=$desc
+function XI(Cd,wd,N2,oA){this.Cd=Cd
+this.wd=wd
+this.N2=N2
+this.oA=oA}XI.builtin$cls="XI"
+if(!"name" in XI)XI.name="XI"
+$desc=$collectedClasses.XI
+if($desc instanceof Array)$desc=$desc[1]
+XI.prototype=$desc
+XI.prototype.gCd=function(receiver){return this.Cd}
+function hs(N1,bn,Ck){this.N1=N1
+this.bn=bn
+this.Ck=Ck}hs.builtin$cls="hs"
+if(!"name" in hs)hs.name="hs"
+$desc=$collectedClasses.hs
+if($desc instanceof Array)$desc=$desc[1]
+hs.prototype=$desc
+hs.prototype.gN1=function(){return this.N1}
+hs.prototype.sCk=function(v){return this.Ck=v}
+function yp(KO,lC,k8){this.KO=KO
+this.lC=lC
+this.k8=k8}yp.builtin$cls="yp"
+if(!"name" in yp)yp.name="yp"
+$desc=$collectedClasses.yp
+if($desc instanceof Array)$desc=$desc[1]
+yp.prototype=$desc
+function ug(N1,bn,Ck){this.N1=N1
+this.bn=bn
+this.Ck=Ck}ug.builtin$cls="ug"
+if(!"name" in ug)ug.name="ug"
+$desc=$collectedClasses.ug
+if($desc instanceof Array)$desc=$desc[1]
+ug.prototype=$desc
+function DT(lr,xT,kr,Ds,QO,jH,mj,zx,N1,bn,Ck){this.lr=lr
+this.xT=xT
+this.kr=kr
+this.Ds=Ds
+this.QO=QO
+this.jH=jH
+this.mj=mj
+this.zx=zx
+this.N1=N1
+this.bn=bn
+this.Ck=Ck}DT.builtin$cls="DT"
+if(!"name" in DT)DT.name="DT"
+$desc=$collectedClasses.DT
+if($desc instanceof Array)$desc=$desc[1]
+DT.prototype=$desc
+DT.prototype.sxT=function(v){return this.xT=v}
+DT.prototype.gkr=function(){return this.kr}
+DT.prototype.sQO=function(v){return this.QO=v}
+DT.prototype.sjH=function(v){return this.jH=v}
+DT.prototype.smj=function(v){return this.mj=v}
+DT.prototype.gzx=function(){return this.zx}
+DT.prototype.szx=function(v){return this.zx=v}
+function OB(){}OB.builtin$cls="OB"
+if(!"name" in OB)OB.name="OB"
+$desc=$collectedClasses.OB
+if($desc instanceof Array)$desc=$desc[1]
+OB.prototype=$desc
+function Ra(){}Ra.builtin$cls="Ra"
+if(!"name" in Ra)Ra.name="Ra"
+$desc=$collectedClasses.Ra
+if($desc instanceof Array)$desc=$desc[1]
+Ra.prototype=$desc
+function N9(ud,lr,eS,Ii){this.ud=ud
+this.lr=lr
+this.eS=eS
+this.Ii=Ii}N9.builtin$cls="N9"
+if(!"name" in N9)N9.name="N9"
+$desc=$collectedClasses.N9
+if($desc instanceof Array)$desc=$desc[1]
+N9.prototype=$desc
+N9.prototype.gIi=function(receiver){return this.Ii}
+function NW(a,b,c,d){this.a=a
+this.b=b
+this.c=c
+this.d=d}NW.builtin$cls="NW"
+if(!"name" in NW)NW.name="NW"
+$desc=$collectedClasses.NW
+if($desc instanceof Array)$desc=$desc[1]
+NW.prototype=$desc
+function HS(EJ,bX){this.EJ=EJ
+this.bX=bX}HS.builtin$cls="HS"
+if(!"name" in HS)HS.name="HS"
+$desc=$collectedClasses.HS
+if($desc instanceof Array)$desc=$desc[1]
+HS.prototype=$desc
+HS.prototype.gEJ=function(){return this.EJ}
+function TG(e9,YC,xG,pq,t9,A7,TU,Q3,JM,d6,rV,yO,XV,eD,FS,IY,U9,DO,Fy){this.e9=e9
+this.YC=YC
+this.xG=xG
+this.pq=pq
+this.t9=t9
+this.A7=A7
+this.TU=TU
+this.Q3=Q3
+this.JM=JM
+this.d6=d6
+this.rV=rV
+this.yO=yO
+this.XV=XV
+this.eD=eD
+this.FS=FS
+this.IY=IY
+this.U9=U9
+this.DO=DO
+this.Fy=Fy}TG.builtin$cls="TG"
+if(!"name" in TG)TG.name="TG"
+$desc=$collectedClasses.TG
+if($desc instanceof Array)$desc=$desc[1]
+TG.prototype=$desc
+function ts(){}ts.builtin$cls="ts"
+if(!"name" in ts)ts.name="ts"
+$desc=$collectedClasses.ts
+if($desc instanceof Array)$desc=$desc[1]
+ts.prototype=$desc
+function Kj(a){this.a=a}Kj.builtin$cls="Kj"
+if(!"name" in Kj)Kj.name="Kj"
+$desc=$collectedClasses.Kj
+if($desc instanceof Array)$desc=$desc[1]
+Kj.prototype=$desc
+function VU(b){this.b=b}VU.builtin$cls="VU"
+if(!"name" in VU)VU.name="VU"
+$desc=$collectedClasses.VU
+if($desc instanceof Array)$desc=$desc[1]
+VU.prototype=$desc
+function Ya(yT,kU){this.yT=yT
+this.kU=kU}Ya.builtin$cls="Ya"
+if(!"name" in Ya)Ya.name="Ya"
+$desc=$collectedClasses.Ya
+if($desc instanceof Array)$desc=$desc[1]
+Ya.prototype=$desc
+Ya.prototype.gyT=function(receiver){return this.yT}
+Ya.prototype.gkU=function(receiver){return this.kU}
+function XT(N1,bn,Ck){this.N1=N1
+this.bn=bn
+this.Ck=Ck}XT.builtin$cls="XT"
+if(!"name" in XT)XT.name="XT"
+$desc=$collectedClasses.XT
+if($desc instanceof Array)$desc=$desc[1]
+XT.prototype=$desc
+function ic(LO,ZY,xS,PB,eS,Ii){this.LO=LO
+this.ZY=ZY
+this.xS=xS
+this.PB=PB
+this.eS=eS
+this.Ii=Ii}ic.builtin$cls="ic"
+if(!"name" in ic)ic.name="ic"
+$desc=$collectedClasses.ic
+if($desc instanceof Array)$desc=$desc[1]
+ic.prototype=$desc
+function VT(N1,bn,Ck){this.N1=N1
+this.bn=bn
+this.Ck=Ck}VT.builtin$cls="VT"
+if(!"name" in VT)VT.name="VT"
+$desc=$collectedClasses.VT
+if($desc instanceof Array)$desc=$desc[1]
+VT.prototype=$desc
+function T4(){}T4.builtin$cls="T4"
+if(!"name" in T4)T4.name="T4"
+$desc=$collectedClasses.T4
+if($desc instanceof Array)$desc=$desc[1]
+T4.prototype=$desc
+function TR(LO,Ii){this.LO=LO
+this.Ii=Ii}TR.builtin$cls="TR"
+if(!"name" in TR)TR.name="TR"
+$desc=$collectedClasses.TR
+if($desc instanceof Array)$desc=$desc[1]
+TR.prototype=$desc
+TR.prototype.gLO=function(){return this.LO}
+TR.prototype.gIi=function(receiver){return this.Ii}
+function VD(a){this.a=a}VD.builtin$cls="VD"
+if(!"name" in VD)VD.name="VD"
+$desc=$collectedClasses.VD
+if($desc instanceof Array)$desc=$desc[1]
+VD.prototype=$desc
+function Oh(Mw){this.Mw=Mw}Oh.builtin$cls="Oh"
+if(!"name" in Oh)Oh.name="Oh"
+$desc=$collectedClasses.Oh
+if($desc instanceof Array)$desc=$desc[1]
+Oh.prototype=$desc
+function zy(call$2,$name){this.call$2=call$2
+this.$name=$name}zy.builtin$cls="zy"
+$desc=$collectedClasses.zy
+if($desc instanceof Array)$desc=$desc[1]
+zy.prototype=$desc
+function Nb(call$1,$name){this.call$1=call$1
+this.$name=$name}Nb.builtin$cls="Nb"
+$desc=$collectedClasses.Nb
+if($desc instanceof Array)$desc=$desc[1]
+Nb.prototype=$desc
+function Fy(call$0,$name){this.call$0=call$0
+this.$name=$name}Fy.builtin$cls="Fy"
+$desc=$collectedClasses.Fy
+if($desc instanceof Array)$desc=$desc[1]
+Fy.prototype=$desc
+function eU(call$7,$name){this.call$7=call$7
+this.$name=$name}eU.builtin$cls="eU"
+$desc=$collectedClasses.eU
+if($desc instanceof Array)$desc=$desc[1]
+eU.prototype=$desc
+function ADW(call$2,$name){this.call$2=call$2
+this.$name=$name}ADW.builtin$cls="ADW"
+$desc=$collectedClasses.ADW
+if($desc instanceof Array)$desc=$desc[1]
+ADW.prototype=$desc
+function Ri(call$5,$name){this.call$5=call$5
+this.$name=$name}Ri.builtin$cls="Ri"
+$desc=$collectedClasses.Ri
+if($desc instanceof Array)$desc=$desc[1]
+Ri.prototype=$desc
+function kq(call$4,$name){this.call$4=call$4
+this.$name=$name}kq.builtin$cls="kq"
+$desc=$collectedClasses.kq
+if($desc instanceof Array)$desc=$desc[1]
+kq.prototype=$desc
+function Ag(call$6,$name){this.call$6=call$6
+this.$name=$name}Ag.builtin$cls="Ag"
+$desc=$collectedClasses.Ag
+if($desc instanceof Array)$desc=$desc[1]
+Ag.prototype=$desc
+function PW(call$3$onError$radix,$name){this.call$3$onError$radix=call$3$onError$radix
+this.$name=$name}PW.builtin$cls="PW"
+$desc=$collectedClasses.PW
+if($desc instanceof Array)$desc=$desc[1]
+PW.prototype=$desc
+return[qE,Yy,Ps,rK,fY,Mr,zx,ct,nB,i3,it,Az,QP,QW,n6,Ny,OM,QQ,MA,y4,d7,na,oJ,DG,mN,vH,hh,Em,Sb,rV,Wy,YN,bA,Wq,rv,BK,wj,cv,Fs,SX,ea,D0,as,T5,Aa,u5,Yu,iG,jP,U2,tA,xn,Vb,QH,ST,X2,fJ,Vi,tX,Sg,pA,Mi,Gt,In,Gx,eP,AL,Og,cS,M6,El,zm,SV,aB,ku,KM,cW,DK,qm,ZY,cx,la,Vn,PG,xe,Hw,bn,Im,oB,Aj,oU,qT,KV,BH,mh,G7,wq,Ql,Xp,bP,mX,SN,HD,ni,p3,qj,qW,KR,ew,fs,bX,BL,MC,Mx,j2,yz,lp,pD,I0,QR,Cp,ua,zD,Ul,G0,wb,fq,h4,qk,GI,Tb,tV,BT,yY,kJ,AE,xV,FH,y6,RH,pU,Lq,Mf,BR,r4,aG,J6,K5,UM,UL,rq,nK,kc,ij,ty,Nf,Nc,rj,rh,Zv,Q7,hF,OF,HB,ZJ,mU,eZ,Fl,y5,nV,Zc,ui,D6,DQ,Sm,dx,es,eG,lv,pf,NV,W1,zo,wf,TU,bb,VE,lc,Xu,qM,tk,me,qN,nh,d4,MI,ca,xX,eW,um,Fu,OE,l6,BA,zp,rE,CC,PQ,uz,Yd,U0,AD,Gr,tc,GH,lo,NJ,nd,vt,rQ,EU,LR,MB,hy,r8,aS,CG,qF,MT,Rk,Eo,Dn,UD,ZD,NE,wD,BD,vRT,Fi,Qr,mj,cB,uY,yR,AX,xJ,l4,Et,NC,nb,By,xt,tG,P0,Jq,Xr,qD,Cf,I2,AS,Kq,oI,mJ,rF,vi,ZX,ycx,nE,zt,F0,Lt,Gv,kn,PE,QI,FP,is,Q,jx,ZC,Jt,P,im,Pp,O,PK,JO,O2,aX,cC,RA,IY,JH,jl,Iy,JM,Ua,JG,ns,wd,TA,YP,yc,I9,Bj,NO,II,aJ,X1,HU,Pm,oo,OW,Dd,AP,yH,FA,Av,oH,LP,c2,WT,p8,XR,LI,A2,F3,u8,Gi,t2,Zr,ZQ,az,vV,Hk,XO,dr,TL,KX,uZ,OQ,Tp,v,Z3,D2,GT,Pe,Eq,cu,Lm,dC,wN,VX,VR,EK,KW,Pb,tQ,aC,Vf,Be,tu,i6,Vc,zO,aL,nH,a7,i1,xy,MH,A8,U5,SO,zs,rR,AM,d5,U1,SJ,SU,Tv,XC,iK,GD,Sn,nI,jU,Lj,mb,am,cw,EE,Uz,uh,Kv,oP,YX,BI,y1,M2,iu,mg,zE,bl,Ef,Oo,Tc,Ax,Wf,Un,Ei,U7,t0,Ld,Sz,Zk,fu,ng,Ar,jB,ye,Gj,Zz,Xh,Ca,Ik,JI,Ip,WV,C7,CQ,dz,tK,OR,Bg,DL,b8,j7,oV,TP,Zf,vs,da,xw,dm,rH,ZL,mi,jb,wB,Pu,qh,QC,Yl,Rv,YJ,jv,LB,DO,lz,Rl,Jb,M4,Jp,h7,pr,eN,B5,PI,j4,i9,VV,Dy,lU,xp,UH,Z5,ii,ib,MO,ms,UO,Bc,vp,lk,Gh,XB,ly,cK,O9,yU,nP,KA,Vo,qB,ez,lx,LV,DS,dp,B3,CR,ny,dR,uR,QX,YR,fB,bq,nO,t3,dq,dX,aY,wJ,e4,JB,Id,fZ,TF,Xz,Cg,Hs,uo,pK,eM,Ue,W5,R8,k6,oi,ce,o2,jG,fG,EQ,YB,iX,ou,S9,ey,xd,v6,db,Cm,N6,jg,YO,oz,b6,ef,zQ,Yp,u3,mW,ar,lD,W0,Sw,o0,a1,jp,Xt,Ba,An,LD,YI,OG,ro,DN,ZM,HW,JC,f1,Uk,wI,ob,Ud,K8,by,dI,QM,Sh,tF,z0,Vx,Rw,GY,jZ,h0,CL,uA,a2,fR,iP,MF,Rq,Hn,Zl,pl,a6,P7,DW,Ge,LK,AT,bJ,mp,ub,ds,lj,UV,VS,t7,HG,aE,kM,EH,cX,eL,L8,c8,a,Od,mE,WU,Rn,wv,uq,iD,hb,XX,Kd,yZ,Gs,pm,Tw,wm,FB,Lk,XZ,qz,hQ,Nw,kZ,JT,d9,rI,dD,QZ,BV,E1,wz,B1,M5,Jn,DM,zL,ec,Kx,iO,bU,e7,nj,rl,RAp,ma,cf,E9,nF,FK,Si,vf,Fc,hD,I4,e0,RO,eu,ie,Ea,pu,i2,b0,Ov,qO,RX,kG,Gm,W9,vZ,dW,PA,H2,O7,HI,E4,r7,Tz,Wk,DV,Hp,Nz,Jd,QS,QF,NL,vr,D4,L9u,Ms,Fw,RS,RY,Ys,vg,xG,Vj,VW,RK,DH,ZK,Th,Vju,KB,RKu,xGn,TkQ,VWk,ZKG,DHb,w6W,Hna,z9g,G8,UZ,Fv,WZ,I3,pv,qr,Vfx,Gk,Dsd,Ds,tuj,aI,rG,yh,wO,Tm,rz,CA,YL,KC,xL,As,GE,pR,Vct,hx,D13,u7,St,WZq,vj,pva,CX,cda,TJ,dG,Ng,HV,Nh,fA,tz,jR,PO,c5,ih,mL,bv,pt,Zd,dY,vY,dS,ZW,dZ,Qe,Nu,pF,Ha,nu,be,Pg,jI,Rb,Zw,Pf,F1,waa,uL,Nr,Pi,yj,qI,J3,E5,o5,b5,zI,Zb,id,iV,W4,Fa,x9,d3,X6,xh,wn,uF,cj,HA,br,zT,D7,qL,C4,l9,lP,km,Qt,Dk,A0,rm,eY,OO,BE,Qb,xI,q1,Zj,XP,q6,CK,BO,ZG,Oc,MX,w12,fTP,yL,dM,Y7,WC,Xi,TV,Mq,Oa,n1,xf,L6,Rs,uJ,hm,Ji,Bf,ir,Sa,GN,k8,HJ,S0,V3,Bl,pM,Mh,Md,Lf,fT,pp,Nq,nl,mf,ej,HK,w13,o8,GL,e9,Dw,Xy,uK,mY,fE,mB,XF,iH,wJY,zOQ,W6o,MdQ,YJG,DOe,lPa,Ufa,Raa,w0,w4,w5,w7,w9,w10,w11,c4,z6,Ay,Ed,G1,Os,Dl,Wh,x5,ev,ID,jV,ek,OC,Xm,Jy,ky,fa,WW,vQ,a9,jh,e3,VA,J1,fk,wL,B0,Fq,hw,EZ,no,kB,ae,Iq,w6,jK,uk,K9,RW,xs,FX,Ae,Bt,vR,Pn,hc,hA,fr,a0,NQ,fI,V0,kK,V4,uw,V6,V2,D8,jY,ll,Uf,ik,LfS,NP,Vh,r0,jz,SA,zV,nv,ee,XI,hs,yp,ug,DT,OB,Ra,N9,NW,HS,TG,ts,Kj,VU,Ya,XT,ic,VT,T4,TR,VD,Oh,zy,Nb,Fy,eU,ADW,Ri,kq,Ag,PW]}// Generated by dart2js, the Dart to JavaScript compiler version: 1.0.0.3_r30188.
+(function($){var A={}
+delete A.x
+var B={}
+delete B.x
+var C={}
+delete C.x
+var D={}
+delete D.x
+var E={}
+delete E.x
+var F={}
+delete F.x
+var G={}
+delete G.x
+var H={}
+delete H.x
+var J={}
+delete J.x
+var K={}
+delete K.x
+var L={}
+delete L.x
+var M={}
+delete M.x
+var N={}
+delete N.x
+var O={}
+delete O.x
+var P={}
+delete P.x
+var Q={}
+delete Q.x
+var R={}
+delete R.x
+var S={}
+delete S.x
+var T={}
+delete T.x
+var U={}
+delete U.x
+var V={}
+delete V.x
+var W={}
+delete W.x
+var X={}
+delete X.x
+var Y={}
+delete Y.x
+var Z={}
+delete Z.x
+function I(){}
+init()
+$=I.p
+var $$={}
+$$.YP=[H,{"":"v;wc,nn,lv,Pp",
+call$0:function(){return this.nn.call(this.wc,this.lv)},
+$is_X0:true}]
+$$.Pm=[H,{"":"v;wc,nn,lv,Pp",
+call$1:function(a){return this.nn.call(this.wc,a)},
+$is_HB:true,
+$is_Dv:true}]
+$$.Ip=[P,{"":"v;wc,nn,lv,Pp",
+call$0:function(){return this.nn.call(this.wc)},
+$is_X0:true}]
+$$.C7=[P,{"":"v;wc,nn,lv,Pp",
+call$1:function(a){return this.nn.call(this.wc,this.lv,a)},
+$is_HB:true,
+$is_Dv:true}]
+$$.CQ=[P,{"":"v;wc,nn,lv,Pp",
+call$2:function(a,b){return this.nn.call(this.wc,a,b)},
+call$1:function(a){return this.call$2(a,null)},
+"+call:1:0":0,
+$is_bh:true,
+$is_HB:true,
+$is_Dv:true}]
+$$.bq=[P,{"":"v;wc,nn,lv,Pp",
+call$2:function(a,b){return this.nn.call(this.wc,a,b)},
+$is_bh:true}]
+$$.Y7=[A,{"":"v;wc,nn,lv,Pp",
+call$2:function(a,b){return this.nn.call(this.wc,this.lv,a,b)},
+$is_bh:true}]
+$$.Dw=[T,{"":"v;wc,nn,lv,Pp",
+call$3:function(a,b,c){return this.nn.call(this.wc,a,b,c)}}]
+$$.zy=[H,{"":"Tp;call$2,$name",$is_bh:true}]
+$$.Nb=[H,{"":"Tp;call$1,$name",$is_HB:true,$is_Dv:true}]
+$$.Fy=[H,{"":"Tp;call$0,$name",$is_X0:true}]
+$$.eU=[H,{"":"Tp;call$7,$name"}]
+$$.ADW=[P,{"":"Tp;call$2,$name",
+call$1:function(a){return this.call$2(a,null)},
+"+call:1:0":0,
+$is_bh:true,
+$is_HB:true,
+$is_Dv:true}]
+$$.Ri=[P,{"":"Tp;call$5,$name"}]
+$$.kq=[P,{"":"Tp;call$4,$name"}]
+$$.Ag=[P,{"":"Tp;call$6,$name"}]
+$$.PW=[P,{"":"Tp;call$3$onError$radix,$name",
+call$1:function(a){return this.call$3$onError$radix(a,null,null)},
+"+call:1:0":0,
+call$2$onError:function(a,b){return this.call$3$onError$radix(a,b,null)},
+"+call:2:0:onError":0,
+call$catchAll:function(){return{onError:null,radix:null}},
+$is_HB:true,
+$is_Dv:true}]
+;init.mangledNames={gB:"length",gDb:"_cachedDeclarations",gEI:"prefix",gF1:"isolate",gFF:"source",gFJ:"__$cls",gFT:"__$instruction",gFU:"_cachedMethodsMap",gG1:"message",gH8:"_fieldsDescriptor",gHt:"_fieldsMetadata",gKM:"$",gLA:"src",gLf:"__$field",gLy:"_cachedSetters",gM2:"_cachedVariables",gMj:"function",gNI:"instruction",gNl:"script",gO3:"url",gOk:"_cachedMetadata",gP:"value",gP2:"_collapsed",gPw:"__$isolate",gPy:"__$error",gQG:"app",gRu:"cls",gT1:"_cachedGetters",gTn:"json",gTx:"_jsConstructorOrInterceptor",gUF:"_cachedTypeVariables",gUz:"__$script",gV4:"__$trace",gVA:"__$displayValue",gVB:"error_obj",gWL:"_mangledName",gXB:"_message",gXJ:"lines",gXR:"scripts",gXf:"__$iconClass",gXh:"__$instance",gZ6:"locationManager",gZw:"__$code",ga:"a",gai:"displayValue",gb:"b",gb0:"_cachedConstructors",gcC:"hash",geV:"paddedLine",geb:"__$json",gfY:"kind",ghO:"__$error_obj",ghf:"instance",gi0:"__$name",gi2:"isolates",giI:"__$library",giK:"__$instance",gjO:"id",gjd:"_cachedMethods",gk5:"__$devtools",gkc:"error",gkf:"_count",gl7:"iconClass",glD:"currentHashUri",gle:"_metadata",glw:"requestManager",gn2:"responses",gnI:"isolateManager",gnz:"_owner",goc:"name",gpz:"_jsConstructorCache",gqN:"_superclass",gql:"__$function",gqm:"_cachedSuperinterfaces",gt0:"field",gtB:"_cachedFields",gtD:"library",gtH:"__$app",gtN:"trace",gtT:"code",guA:"_cachedMembers",gvH:"index",gvX:"__$source",gvt:"__$field",gxj:"collapsed",gzd:"currentHash",gzj:"devtools"};init.mangledGlobalNames={DI:"_closeIconClass",Vl:"_openIconClass"};(function (reflectionData) {
+ function map(x){x={x:x};delete x.x;return x}
+ if (!init.libraries) init.libraries = [];
+ if (!init.mangledNames) init.mangledNames = map();
+ if (!init.mangledGlobalNames) init.mangledGlobalNames = map();
+ if (!init.statics) init.statics = map();
+ if (!init.typeInformation) init.typeInformation = map();
+ if (!init.globalFunctions) init.globalFunctions = map();
+ var libraries = init.libraries;
+ var mangledNames = init.mangledNames;
+ var mangledGlobalNames = init.mangledGlobalNames;
+ var hasOwnProperty = Object.prototype.hasOwnProperty;
+ var length = reflectionData.length;
+ for (var i = 0; i < length; i++) {
+ var data = reflectionData[i];
+ var name = data[0];
+ var uri = data[1];
+ var metadata = data[2];
+ var globalObject = data[3];
+ var descriptor = data[4];
+ var isRoot = !!data[5];
+ var fields = descriptor && descriptor[""];
+ var classes = [];
+ var functions = [];
+ function processStatics(descriptor) {
+ for (var property in descriptor) {
+ if (!hasOwnProperty.call(descriptor, property)) continue;
+ if (property === "") continue;
+ var element = descriptor[property];
+ var firstChar = property.substring(0, 1);
+ var previousProperty;
+ if (firstChar === "+") {
+ mangledGlobalNames[previousProperty] = property.substring(1);
+ if (descriptor[property] == 1) descriptor[previousProperty].$reflectable = 1;
+ if (element && element.length) init.typeInformation[previousProperty] = element;
+ } else if (firstChar === "@") {
+ property = property.substring(1);
+ $[property]["@"] = element;
+ } else if (firstChar === "*") {
+ globalObject[previousProperty].$defaultValues = element;
+ var optionalMethods = descriptor.$methodsWithOptionalArguments;
+ if (!optionalMethods) {
+ descriptor.$methodsWithOptionalArguments = optionalMethods = {}
+ }
+ optionalMethods[property] = previousProperty;
+ } else if (typeof element === "function") {
+ globalObject[previousProperty = property] = element;
+ functions.push(property);
+ init.globalFunctions[property] = element;
+ } else {
+ previousProperty = property;
+ var newDesc = {};
+ var previousProp;
+ for (var prop in element) {
+ if (!hasOwnProperty.call(element, prop)) continue;
+ firstChar = prop.substring(0, 1);
+ if (prop === "static") {
+ processStatics(init.statics[property] = element[prop]);
+ } else if (firstChar === "+") {
+ mangledNames[previousProp] = prop.substring(1);
+ if (element[prop] == 1) element[previousProp].$reflectable = 1;
+ } else if (firstChar === "@" && prop !== "@") {
+ newDesc[prop.substring(1)]["@"] = element[prop];
+ } else if (firstChar === "*") {
+ newDesc[previousProp].$defaultValues = element[prop];
+ var optionalMethods = newDesc.$methodsWithOptionalArguments;
+ if (!optionalMethods) {
+ newDesc.$methodsWithOptionalArguments = optionalMethods={}
+ }
+ optionalMethods[prop] = previousProp;
+ } else {
+ newDesc[previousProp = prop] = element[prop];
+ }
+ }
+ $$[property] = [globalObject, newDesc];
+ classes.push(property);
+ }
+ }
+ }
+ processStatics(descriptor);
+ libraries.push([name, uri, classes, functions, metadata, fields, isRoot,
+ globalObject]);
+ }
+})([["_foreign_helper","dart:_foreign_helper",,H,{Lt:{"":"a;tT>"}}],["_interceptors","dart:_interceptors",,J,{x:function(a){return void 0},Qu:function(a,b,c,d){return{i: a, p: b, e: c, x: d}},ks:function(a){var z,y,x,w
+z=a[init.dispatchPropertyName]
+if(z==null)if($.Bv==null){H.XD()
+z=a[init.dispatchPropertyName]}if(z!=null){y=z.p
+if(!1===y)return z.i
+if(!0===y)return a
+x=Object.getPrototypeOf(a)
+if(y===x)return z.i
+if(z.e===x)throw H.b(P.SY("Return interceptor for "+H.d(y(a,z))))}w=H.w3(a)
+if(w==null)return C.vB
+return w},e1:function(a){var z,y,x,w
+z=$.Au
+if(z==null)return
+y=z
+for(z=y.length,x=J.x(a),w=0;w+1<z;w+=3){if(w>=z)throw H.e(y,w)
+if(x.n(a,y[w]))return w}return},Fb:function(a){var z,y
+z=J.e1(a)
+if(z==null)return
+y=$.Au
+if(typeof z!=="number")throw z.g()
+return J.UQ(y,z+1)},Dp:function(a,b){var z,y
+z=J.e1(a)
+if(z==null)return
+y=$.Au
+if(typeof z!=="number")throw z.g()
+return J.UQ(y,z+2)[b]},Gv:{"":"a;",
+n:function(a,b){return a===b},
+giO:function(a){return H.eQ(a)},
+bu:function(a){return H.a5(a)},
+T:function(a,b){throw H.b(P.lr(a,b.gWa(),b.gnd(),b.gVm(),null))},
+"+noSuchMethod:1:0":0,
+gbx:function(a){return new H.cu(H.dJ(a),null)},
+$isGv:true,
+"%":"DOMImplementation|SVGAnimatedEnumeration|SVGAnimatedNumberList|SVGAnimatedString"},kn:{"":"bool/Gv;",
+bu:function(a){return String(a)},
+giO:function(a){return a?519018:218159},
+gbx:function(a){return C.HL},
+$isbool:true},PE:{"":"Gv;",
+n:function(a,b){return null==b},
+bu:function(a){return"null"},
+giO:function(a){return 0},
+gbx:function(a){return C.GX}},QI:{"":"Gv;",
+giO:function(a){return 0},
+gbx:function(a){return C.CS}},FP:{"":"QI;"},is:{"":"QI;"},Q:{"":"List/Gv;",
+h:function(a,b){if(!!a.fixed$length)H.vh(P.f("add"))
+a.push(b)},
+W4:function(a,b){if(b<0||b>=a.length)throw H.b(new P.bJ("value "+b))
+if(!!a.fixed$length)H.vh(P.f("removeAt"))
+return a.splice(b,1)[0]},
+xe:function(a,b,c){if(b<0||b>a.length)throw H.b(new P.bJ("value "+b))
+if(!!a.fixed$length)H.vh(P.f("insert"))
+a.splice(b,0,c)},
+mv:function(a){if(!!a.fixed$length)H.vh(P.f("removeLast"))
+if(a.length===0)throw H.b(new P.bJ("value -1"))
+return a.pop()},
+Rz:function(a,b){var z
+if(!!a.fixed$length)H.vh(P.f("remove"))
+for(z=0;z<a.length;++z)if(J.xC(a[z],b)){a.splice(z,1)
+return!0}return!1},
+ev:function(a,b){var z=new H.U5(a,b)
+H.VM(z,[null])
+return z},
+Ay:function(a,b){var z
+for(z=J.GP(b);z.G();)this.h(a,z.gl())},
+aN:function(a,b){return H.bQ(a,b)},
+ez:function(a,b){var z=new H.A8(a,b)
+H.VM(z,[null,null])
+return z},
+zV:function(a,b){var z,y,x,w
+z=a.length
+y=P.A(z,null)
+for(x=0;x<a.length;++x){w=H.d(a[x])
+if(x>=z)throw H.e(y,x)
+y[x]=w}return y.join(b)},
+eR:function(a,b){return H.j5(a,b,null,null)},
+Zv:function(a,b){if(b>>>0!==b||b>=a.length)throw H.e(a,b)
+return a[b]},
+D6:function(a,b,c){if(typeof b!=="number"||Math.floor(b)!==b)throw H.b(new P.AT(b))
+if(b<0||b>a.length)throw H.b(P.TE(b,0,a.length))
+if(c==null)c=a.length
+else{if(typeof c!=="number"||Math.floor(c)!==c)throw H.b(new P.AT(c))
+if(c<b||c>a.length)throw H.b(P.TE(c,b,a.length))}if(b===c)return[]
+return a.slice(b,c)},
+Jk:function(a,b){return this.D6(a,b,null)},
+Mu:function(a,b,c){H.S6(a,b,c)
+return H.j5(a,b,c,null)},
+gFV:function(a){if(a.length>0)return a[0]
+throw H.b(new P.lj("No elements"))},
+grZ:function(a){var z=a.length
+if(z>0)return a[z-1]
+throw H.b(new P.lj("No elements"))},
+UZ:function(a,b,c){var z,y
+if(!!a.fixed$length)H.vh(P.f("removeRange"))
+z=a.length
+y=J.Wx(b)
+if(y.C(b,0)||y.D(b,z))throw H.b(P.TE(b,0,z))
+y=J.Wx(c)
+if(y.C(c,b)||y.D(c,z))throw H.b(P.TE(c,b,z))
+if(typeof c!=="number")throw H.s(c)
+H.Zi(a,c,a,b,z-c)
+if(typeof b!=="number")throw H.s(b)
+this.sB(a,z-(c-b))},
+Vr:function(a,b){return H.Ck(a,b)},
+XU:function(a,b,c){return H.Ub(a,b,c,a.length)},
+u8:function(a,b){return this.XU(a,b,0)},
+Pk:function(a,b,c){return H.Wv(a,b,c)},
+cn:function(a,b){return this.Pk(a,b,null)},
+tg:function(a,b){var z
+for(z=0;z<a.length;++z)if(J.xC(a[z],b))return!0
+return!1},
+gl0:function(a){return a.length===0},
+"+isEmpty":0,
+gor:function(a){return a.length!==0},
+"+isNotEmpty":0,
+bu:function(a){return H.mx(a,"[","]")},
+tt:function(a,b){return P.F(a,b,H.W8(a,"Q",0))},
+br:function(a){return this.tt(a,!0)},
+gA:function(a){var z=new H.a7(a,a.length,0,null)
+H.VM(z,[H.W8(a,"Q",0)])
+return z},
+giO:function(a){return H.eQ(a)},
+gB:function(a){return a.length},
+"+length":0,
+sB:function(a,b){if(typeof b!=="number"||Math.floor(b)!==b)throw H.b(new P.AT(b))
+if(b<0)throw H.b(P.N(b))
+if(!!a.fixed$length)H.vh(P.f("set length"))
+a.length=b},
+"+length=":0,
+t:function(a,b){if(typeof b!=="number"||Math.floor(b)!==b)throw H.b(P.u(b))
+if(b>=a.length||b<0)throw H.b(P.N(b))
+return a[b]},
+"+[]:1:0":0,
+u:function(a,b,c){if(!!a.immutable$list)H.vh(P.f("indexed set"))
+if(typeof b!=="number"||Math.floor(b)!==b)throw H.b(new P.AT(b))
+if(b>=a.length||b<0)throw H.b(P.N(b))
+a[b]=c},
+"+[]=:2:0":0,
+$isList:true,
+$asWO:null,
+$ascX:null,
+$isList:true,
+$isqC:true,
+$iscX:true},jx:{"":"Q;",$isjx:true,
+$asQ:function(){return[null]},
+$asWO:function(){return[null]},
+$ascX:function(){return[null]}},ZC:{"":"jx;"},Jt:{"":"jx;",$isJt:true},P:{"":"num/Gv;",
+iM:function(a,b){var z
+if(typeof b!=="number")throw H.b(new P.AT(b))
+if(a<b)return-1
+else if(a>b)return 1
+else if(a===b){if(a===0){z=this.gzP(b)
+if(this.gzP(a)===z)return 0
+if(this.gzP(a))return-1
+return 1}return 0}else if(isNaN(a)){if(this.gG0(b))return 0
+return 1}else return-1},
+gzP:function(a){return a===0?1/a<0:a<0},
+gG0:function(a){return isNaN(a)},
+JV:function(a,b){return a%b},
+Vy:function(a){return Math.abs(a)},
+yu:function(a){var z
+if(a>=-2147483648&&a<=2147483647)return a|0
+if(isFinite(a)){z=a<0?Math.ceil(a):Math.floor(a)
+return z+0}throw H.b(P.f(''+a))},
+HG:function(a){return this.yu(this.UD(a))},
+UD:function(a){if(a<0)return-Math.round(-a)
+else return Math.round(a)},
+WZ:function(a,b){if(b<2||b>36)throw H.b(P.C3(b))
+return a.toString(b)},
+bu:function(a){if(a===0&&1/a<0)return"-0.0"
+else return""+a},
+giO:function(a){return a&0x1FFFFFFF},
+J:function(a){return-a},
+g:function(a,b){if(typeof b!=="number")throw H.b(new P.AT(b))
+return a+b},
+W:function(a,b){if(typeof b!=="number")throw H.b(P.u(b))
+return a-b},
+V:function(a,b){if(typeof b!=="number")throw H.b(new P.AT(b))
+return a/b},
+U:function(a,b){if(typeof b!=="number")throw H.b(new P.AT(b))
+return a*b},
+Z:function(a,b){if((a|0)===a&&(b|0)===b&&0!==b&&-1!==b)return a/b|0
+else return this.ZP(a,b)},
+ZP:function(a,b){return this.yu(a/b)},
+O:function(a,b){if(b<0)throw H.b(new P.AT(b))
+if(b>31)return 0
+return a<<b>>>0},
+m:function(a,b){if(b<0)throw H.b(P.u(b))
+if(a>0){if(b>31)return 0
+return a>>>b}if(b>31)b=31
+return a>>b>>>0},
+i:function(a,b){if(typeof b!=="number")throw H.b(new P.AT(b))
+return(a&b)>>>0},
+C:function(a,b){if(typeof b!=="number")throw H.b(P.u(b))
+return a<b},
+D:function(a,b){if(typeof b!=="number")throw H.b(P.u(b))
+return a>b},
+E:function(a,b){if(typeof b!=="number")throw H.b(new P.AT(b))
+return a<=b},
+F:function(a,b){if(typeof b!=="number")throw H.b(P.u(b))
+return a>=b},
+$isnum:true,
+static:{"":"l8,nr",}},im:{"":"int/P;",
+gbx:function(a){return C.yw},
+$isdouble:true,
+$isnum:true,
+$isint:true},Pp:{"":"double/P;",
+gbx:function(a){return C.O4},
+$isdouble:true,
+$isnum:true},O:{"":"String/Gv;",
+j:function(a,b){if(typeof b!=="number"||Math.floor(b)!==b)throw H.b(P.u(b))
+if(b<0)throw H.b(P.N(b))
+if(b>=a.length)throw H.b(P.N(b))
+return a.charCodeAt(b)},
+dd:function(a,b){return H.ZT(a,b)},
+wL:function(a,b,c){var z,y,x,w
+if(c<0||c>b.length)throw H.b(P.TE(c,0,b.length))
+z=a.length
+y=b.length
+if(c+z>y)return
+for(x=0;x<z;++x){w=c+x
+if(typeof w!=="number"||Math.floor(w)!==w)H.vh(new P.AT(w))
+if(w<0)H.vh(P.N(w))
+if(w>=y)H.vh(P.N(w))
+w=b.charCodeAt(w)
+if(x>=z)H.vh(P.N(x))
+if(w!==a.charCodeAt(x))return}return new H.tQ(c,b,a)},
+g:function(a,b){if(typeof b!=="string")throw H.b(new P.AT(b))
+return a+b},
+Tc:function(a,b){var z,y
+z=b.length
+y=a.length
+if(z>y)return!1
+return b===this.yn(a,y-z)},
+h8:function(a,b,c){return H.ys(a,b,c)},
+Fr:function(a,b){return a.split(b)},
+Ys:function(a,b,c){var z
+if(c<0||c>a.length)throw H.b(P.TE(c,0,a.length))
+if(typeof b==="string"){z=c+b.length
+if(z>a.length)return!1
+return b===a.substring(c,z)}return J.I8(b,a,c)!=null},
+nC:function(a,b){return this.Ys(a,b,0)},
+JT:function(a,b,c){var z
+if(typeof b!=="number"||Math.floor(b)!==b)H.vh(P.u(b))
+if(c==null)c=a.length
+if(typeof c!=="number"||Math.floor(c)!==c)H.vh(P.u(c))
+z=J.Wx(b)
+if(z.C(b,0))throw H.b(P.N(b))
+if(z.D(b,c))throw H.b(P.N(b))
+if(J.xZ(c,a.length))throw H.b(P.N(c))
+return a.substring(b,c)},
+yn:function(a,b){return this.JT(a,b,null)},
+hc:function(a){return a.toLowerCase()},
+bS:function(a){var z,y,x,w,v
+for(z=a.length,y=0;y<z;){if(y>=z)H.vh(P.N(y))
+x=a.charCodeAt(y)
+if(x===32||x===13||J.Ga(x))++y
+else break}if(y===z)return""
+for(w=z;!0;w=v){v=w-1
+if(v<0)H.vh(P.N(v))
+if(v>=z)H.vh(P.N(v))
+x=a.charCodeAt(v)
+if(x===32||x===13||J.Ga(x));else break}if(y===0&&w===z)return a
+return a.substring(y,w)},
+XU:function(a,b,c){if(typeof c!=="number"||Math.floor(c)!==c)throw H.b(new P.AT(c))
+if(c<0||c>a.length)throw H.b(P.TE(c,0,a.length))
+return a.indexOf(b,c)},
+u8:function(a,b){return this.XU(a,b,0)},
+Pk:function(a,b,c){var z,y,x
+c=a.length
+if(typeof b==="string"){z=b.length
+if(typeof c!=="number")throw c.g()
+y=a.length
+if(c+z>y)c=y-z
+return a.lastIndexOf(b,c)}z=J.rY(b)
+x=c
+while(!0){if(typeof x!=="number")throw x.F()
+if(!(x>=0))break
+if(z.wL(b,a,x)!=null)return x;--x}return-1},
+cn:function(a,b){return this.Pk(a,b,null)},
+Is:function(a,b,c){if(b==null)H.vh(new P.AT(null))
+if(c<0||c>a.length)throw H.b(P.TE(c,0,a.length))
+return H.m2(a,b,c)},
+tg:function(a,b){return this.Is(a,b,0)},
+gl0:function(a){return a.length===0},
+"+isEmpty":0,
+gor:function(a){return a.length!==0},
+"+isNotEmpty":0,
+iM:function(a,b){var z
+if(typeof b!=="string")throw H.b(new P.AT(b))
+if(a===b)z=0
+else z=a<b?-1:1
+return z},
+bu:function(a){return a},
+giO:function(a){var z,y,x
+for(z=a.length,y=0,x=0;x<z;++x){y=536870911&y+a.charCodeAt(x)
+y=536870911&y+((524287&y)<<10>>>0)
+y^=y>>6}y=536870911&y+((67108863&y)<<3>>>0)
+y^=y>>11
+return 536870911&y+((16383&y)<<15>>>0)},
+gbx:function(a){return C.Db},
+gB:function(a){return a.length},
+"+length":0,
+t:function(a,b){if(typeof b!=="number"||Math.floor(b)!==b)throw H.b(P.u(b))
+if(b>=a.length||b<0)throw H.b(P.N(b))
+return a[b]},
+"+[]:1:0":0,
+$isString:true,
+static:{Ga:function(a){if(a<256)switch(a){case 9:case 10:case 11:case 12:case 13:case 32:case 133:case 160:return!0
+default:return!1}switch(a){case 5760:case 6158:case 8192:case 8193:case 8194:case 8195:case 8196:case 8197:case 8198:case 8199:case 8200:case 8201:case 8202:case 8232:case 8233:case 8239:case 8287:case 12288:case 65279:return!0
+default:return!1}}}}}],["_isolate_helper","dart:_isolate_helper",,H,{zd:function(a,b){var z=a.vV(b)
+$globalState.Xz.bL()
+return z},SG:function(a){var z
+$globalState=H.SK(a)
+if($globalState.EF===!0)return
+z=H.CO()
+$globalState.Nr=z
+$globalState.N0=z
+if(!!a.$is_Dv)z.vV(new H.PK(a))
+else if(!!a.$is_bh)z.vV(new H.JO(a))
+else z.vV(a)
+$globalState.Xz.bL()},yl:function(){var z=init.currentScript
+if(z!=null)return String(z.src)
+if(typeof version=="function"&&typeof os=="object"&&"system" in os)return H.ZV()
+if(typeof version=="function"&&typeof system=="function")return thisFilename()
+return},ZV:function(){var z,y
+z=new Error().stack
+if(z==null){z=(function() {try { throw new Error() } catch(e) { return e.stack }})()
+if(z==null)throw H.b(P.f("No stack trace"))}y=z.match(new RegExp("^ *at [^(]*\\((.*):[0-9]*:[0-9]*\\)$","m"))
+if(y!=null)return y[1]
+y=z.match(new RegExp("^[^@]*@(.*):[0-9]*$","m"))
+if(y!=null)return y[1]
+throw H.b(P.f("Cannot extract URI from \""+z+"\""))},Mg:function(a,b){var z,y,x,w,v,u,t,s,r,q
+z=H.Hh(b.data)
+y=J.U6(z)
+switch(y.t(z,"command")){case"start":$globalState.oL=y.t(z,"id")
+x=y.t(z,"functionName")
+w=x==null?$globalState.w2:init.globalFunctions[x]
+v=y.t(z,"args")
+u=H.Hh(y.t(z,"msg"))
+t=y.t(z,"isSpawnUri")
+s=H.Hh(y.t(z,"replyTo"))
+r=H.CO()
+$globalState.Xz.Rk.NZ(new H.IY(r,new H.jl(w,v,u,t,s),"worker-start"))
+$globalState.N0=r
+$globalState.Xz.bL()
+break
+case"spawn-worker":H.oT(y.t(z,"functionName"),y.t(z,"uri"),y.t(z,"args"),y.t(z,"msg"),y.t(z,"isSpawnUri"),y.t(z,"replyPort"))
+break
+case"message":if(y.t(z,"port")!=null)J.H4(y.t(z,"port"),y.t(z,"msg"))
+$globalState.Xz.bL()
+break
+case"close":y=$globalState.XC
+q=$.p6()
+y.Rz(y,q.t(q,a))
+a.terminate()
+$globalState.Xz.bL()
+break
+case"log":H.ZF(y.t(z,"msg"))
+break
+case"print":if($globalState.EF===!0){y=$globalState.rj
+q=H.Gy(H.B7(["command","print","msg",z],P.L5(null,null,null,null,null)))
+y.toString
+self.postMessage(q)}else P.JS(y.t(z,"msg"))
+break
+case"error":throw H.b(y.t(z,"msg"))
+default:}},ZF:function(a){var z,y,x,w
+if($globalState.EF===!0){y=$globalState.rj
+x=H.Gy(H.B7(["command","log","msg",a],P.L5(null,null,null,null,null)))
+y.toString
+self.postMessage(x)}else try{$.jk().console.log(a)}catch(w){H.Ru(w)
+z=new H.XO(w,null)
+throw H.b(P.FM(z))}},Kc:function(a,b,c,d,e){var z
+H.nC($globalState.N0.jO)
+$.lE=H.Ty()
+z=$.lE
+z.toString
+J.H4(e,["spawned",new H.JM(z,$globalState.N0.jO)])
+if(d!==!0)a.call$1(c)
+else{z=J.x(a)
+if(!!z.$is_bh)a.call$2(b,c)
+else if(!!z.$is_Dv)a.call$1(b)
+else a.call$0()}},oT:function(a,b,c,d,e,f){var z,y,x
+if(b==null)b=$.Cl()
+z=new Worker(b)
+z.onmessage=function(e) { H.NB.call$2(z, e); }
+y=$globalState
+x=y.hJ
+y.hJ=x+1
+y=$.p6()
+y.u(y,z,x)
+y=$globalState.XC
+y.u(y,x,z)
+z.postMessage(H.Gy(H.B7(["command","start","id",x,"replyTo",H.Gy(f),"args",c,"msg",H.Gy(d),"isSpawnUri",e,"functionName",a],P.L5(null,null,null,null,null))))},ff:function(a,b){var z=H.kU()
+z.YQ(a)
+P.pH(z.Gx).ml(new H.yc(b))},Gy:function(a){var z
+if($globalState.ji===!0){z=new H.Bj(0,new H.X1())
+z.mR=new H.aJ(null)
+return z.YQ(a)}else{z=new H.NO(new H.X1())
+z.mR=new H.aJ(null)
+return z.YQ(a)}},Hh:function(a){if($globalState.ji===!0)return new H.II(null).QS(a)
+else return a},vM:function(a){return a==null||typeof a==="string"||typeof a==="number"||typeof a==="boolean"},kV:function(a){return a==null||typeof a==="string"||typeof a==="number"||typeof a==="boolean"},PK:{"":"Tp;a",
+call$0:function(){this.a.call$1([])},
+"+call:0:0":0,
+$isEH:true,
+$is_X0:true},JO:{"":"Tp;b",
+call$0:function(){this.b.call$2([],null)},
+"+call:0:0":0,
+$isEH:true,
+$is_X0:true},O2:{"":"a;Hg,oL,hJ,N0,Nr,Xz,vu,EF,ji,i2@,rj,XC,w2",
+Jh:function(){var z,y
+z=$.Qm()==null
+y=$.Nl()
+this.EF=z&&$.JU()===!0
+if(this.EF!==!0)y=y!=null&&$.Cl()!=null
+else y=!0
+this.ji=y
+this.vu=z&&this.EF!==!0},
+hn:function(){var z=function (e) { H.NB.call$2(this.rj, e); }
+$.jk().onmessage=z
+$.jk().dartPrint = function (object) {}},
+i6:function(a){this.Jh()
+this.Xz=new H.cC(P.NZ(null,H.IY),0)
+this.i2=P.L5(null,null,null,J.im,H.aX)
+this.XC=P.L5(null,null,null,J.im,null)
+if(this.EF===!0){this.rj=new H.JH()
+this.hn()}},
+static:{SK:function(a){var z=new H.O2(0,0,1,null,null,null,null,null,null,null,null,null,a)
+z.i6(a)
+return z}}},aX:{"":"a;jO*,Gx,En<",
+vV:function(a){var z,y
+z=$globalState.N0
+$globalState.N0=this
+$=this.En
+y=null
+try{y=a.call$0()}finally{$globalState.N0=z
+if(z!=null)$=z.gEn()}return y},
+Zt:function(a){var z=this.Gx
+return z.t(z,a)},
+jT:function(a,b,c){var z
+if(this.Gx.x4(b))throw H.b(P.FM("Registry: ports must be registered only once."))
+z=this.Gx
+z.u(z,b,c)
+z=$globalState.i2
+z.u(z,this.jO,this)},
+IJ:function(a){var z=this.Gx
+z.Rz(z,a)
+if(this.Gx.X5===0){z=$globalState.i2
+z.Rz(z,this.jO)}},
+iZ:function(){var z,y
+z=$globalState
+y=z.Hg
+z.Hg=y+1
+this.jO=y
+this.Gx=P.L5(null,null,null,J.im,P.HI)
+this.En=new I()},
+$isaX:true,
+static:{CO:function(){var z=new H.aX(null,null,null)
+z.iZ()
+return z}}},cC:{"":"a;Rk,bZ",
+Jc:function(){var z=this.Rk
+if(z.av===z.HV)return
+return z.Ux()},
+LM:function(){if($globalState.Nr!=null&&$globalState.i2.x4($globalState.Nr.jO)&&$globalState.vu===!0&&$globalState.Nr.Gx.X5===0)throw H.b(P.FM("Program exited with open ReceivePorts."))},
+xB:function(){var z,y,x
+z=this.Jc()
+if(z==null){this.LM()
+y=$globalState
+if(y.EF===!0&&y.i2.X5===0&&y.Xz.bZ===0){y=y.rj
+x=H.Gy(H.B7(["command","close"],P.L5(null,null,null,null,null)))
+y.toString
+self.postMessage(x)}return!1}z.VU()
+return!0},
+Wu:function(){if($.Qm()!=null)new H.RA(this).call$0()
+else for(;this.xB(););},
+bL:function(){var z,y,x,w,v
+if($globalState.EF!==!0)this.Wu()
+else try{this.Wu()}catch(x){w=H.Ru(x)
+z=w
+y=new H.XO(x,null)
+w=$globalState.rj
+v=H.Gy(H.B7(["command","error","msg",H.d(z)+"\n"+H.d(y)],P.L5(null,null,null,null,null)))
+w.toString
+self.postMessage(v)}}},RA:{"":"Tp;a",
+call$0:function(){if(!this.a.xB())return
+P.rT(C.RT,this)},
+"+call:0:0":0,
+$isEH:true,
+$is_X0:true},IY:{"":"a;F1*,i3,G1*",
+VU:function(){this.F1.vV(this.i3)},
+$isIY:true},JH:{"":"a;"},jl:{"":"Tp;a,b,c,d,e",
+call$0:function(){H.Kc(this.a,this.b,this.c,this.d,this.e)},
+"+call:0:0":0,
+$isEH:true,
+$is_X0:true},Iy:{"":"a;",$isbC:true},JM:{"":"Iy;JE,tv",
+wR:function(a,b){H.ff(b,new H.Ua(this,b))},
+n:function(a,b){var z
+if(b==null)return!1
+z=J.x(b)
+return typeof b==="object"&&b!==null&&!!z.$isJM&&J.xC(this.JE,b.JE)},
+giO:function(a){return this.JE.gng()},
+$isJM:true,
+$isbC:true},Ua:{"":"Tp;b,c",
+call$0:function(){var z,y,x,w,v,u,t
+z={}
+y=$globalState.i2
+x=this.b
+w=x.tv
+v=y.t(y,w)
+if(v==null)return
+if((x.JE.gda().Gv&4)!==0)return
+u=$globalState.N0!=null&&$globalState.N0.jO!==w
+t=this.c
+z.a=t
+if(u)z.a=H.Gy(z.a)
+y=$globalState.Xz
+w="receive "+H.d(t)
+y.Rk.NZ(new H.IY(v,new H.JG(z,x,u),w))},
+"+call:0:0":0,
+$isEH:true,
+$is_X0:true},JG:{"":"Tp;a,d,e",
+call$0:function(){var z,y
+z=this.d.JE
+if((z.gda().Gv&4)===0){if(this.e){y=this.a
+y.a=H.Hh(y.a)}z=z.gda()
+y=this.a.a
+if(z.Gv>=4)H.vh(z.BW())
+z.Rg(y)}},
+"+call:0:0":0,
+$isEH:true,
+$is_X0:true},ns:{"":"Iy;Ws,bv,tv",
+wR:function(a,b){H.ff(b,new H.wd(this,b))},
+n:function(a,b){var z
+if(b==null)return!1
+z=J.x(b)
+return typeof b==="object"&&b!==null&&!!z.$isns&&J.xC(this.Ws,b.Ws)&&J.xC(this.tv,b.tv)&&J.xC(this.bv,b.bv)},
+giO:function(a){var z,y,x
+z=J.Eh(this.Ws,16)
+y=J.Eh(this.tv,8)
+x=this.bv
+if(typeof x!=="number")throw H.s(x)
+return(z^y^x)>>>0},
+$isns:true,
+$isbC:true},wd:{"":"Tp;a,b",
+call$0:function(){var z,y,x,w
+z=this.a
+y=H.Gy(H.B7(["command","message","port",z,"msg",this.b],P.L5(null,null,null,null,null)))
+if($globalState.EF===!0){$globalState.rj.toString
+self.postMessage(y)}else{x=$globalState.XC
+w=x.t(x,z.Ws)
+if(w!=null)w.postMessage(y)}},
+"+call:0:0":0,
+$isEH:true,
+$is_X0:true},TA:{"":"qh;ng<,da<",
+KR:function(a,b,c,d){var z=this.da
+z.toString
+z=new P.O9(z)
+H.VM(z,[null])
+return z.KR(a,b,c,d)},
+zC:function(a,b,c){return this.KR(a,null,b,c)},
+yI:function(a){return this.KR(a,null,null,null)},
+cO:function(a){var z=this.da
+if((z.Gv&4)!==0)return
+z.cO(z)
+$globalState.N0.IJ(this.ng)},
+gJK:function(a){return new H.YP(this,H.TA.prototype.cO,a,"cO")},
+Oe:function(){this.da=P.Ve(this.gJK(this),null,null,null,!0,null)
+var z=$globalState.N0
+z.jT(z,this.ng,this)},
+$asqh:function(){return[null]},
+$isHI:true,
+$isqh:true,
+static:{"":"b9",Ty:function(){var z=$.b9
+$.b9=z+1
+z=new H.TA(z,null)
+z.Oe()
+return z}}},yc:{"":"Tp;a",
+call$1:function(a){return this.a.call$0()},
+"+call:1:0":0,
+$isEH:true,
+$is_HB:true,
+$is_Dv:true},I9:{"":"HU;Gx,mR",
+Pq:function(a){},
+wb:function(a){var z=this.mR
+if(z.t(z,a)!=null)return
+z=this.mR
+z.u(z,a,!0)
+J.kH(a,this.gRQ())},
+OI:function(a){var z=this.mR
+if(z.t(z,a)!=null)return
+z=this.mR
+z.u(z,a,!0)
+J.kH(a.gUQ(a),this.gRQ())},
+DE:function(a){},
+IW:function(){this.mR=new H.aJ(null)},
+static:{kU:function(){var z=new H.I9([],new H.X1())
+z.IW()
+return z}}},Bj:{"":"Dd;CN,mR",
+DE:function(a){if(!!a.$isJM)return["sendport",$globalState.oL,a.tv,a.JE.gng()]
+if(!!a.$isns)return["sendport",a.Ws,a.tv,a.bv]
+throw H.b("Illegal underlying port "+H.d(a))}},NO:{"":"oo;mR",
+DE:function(a){if(!!a.$isJM)return new H.JM(a.JE,a.tv)
+if(!!a.$isns)return new H.ns(a.Ws,a.bv,a.tv)
+throw H.b("Illegal underlying port "+H.d(a))}},II:{"":"AP;RZ",
+Vf:function(a){var z,y,x,w,v,u
+z=J.U6(a)
+y=z.t(a,1)
+x=z.t(a,2)
+w=z.t(a,3)
+if(J.xC(y,$globalState.oL)){z=$globalState.i2
+v=z.t(z,x)
+if(v==null)return
+u=v.Zt(w)
+if(u==null)return
+return new H.JM(u,x)}else return new H.ns(y,w,x)}},aJ:{"":"a;MD",
+t:function(a,b){return b.__MessageTraverser__attached_info__},
+"+[]:1:0":0,
+u:function(a,b,c){this.MD.push(b)
+b.__MessageTraverser__attached_info__=c},
+"+[]=:2:0":0,
+Hn:function(a){this.MD=P.A(null,null)},
+F4:function(){var z,y,x
+for(z=this.MD.length,y=0;y<z;++y){x=this.MD
+if(y>=x.length)throw H.e(x,y)
+x[y].__MessageTraverser__attached_info__=null}this.MD=null}},X1:{"":"a;",
+t:function(a,b){return},
+"+[]:1:0":0,
+u:function(a,b,c){},
+"+[]=:2:0":0,
+Hn:function(a){},
+F4:function(){}},HU:{"":"a;",
+YQ:function(a){var z,y
+if(H.vM(a))return this.Pq(a)
+y=this.mR
+y.Hn(y)
+z=null
+try{z=this.I8(a)}finally{this.mR.F4()}return z},
+I8:function(a){var z
+if(a==null||typeof a==="string"||typeof a==="number"||typeof a==="boolean")return this.Pq(a)
+z=J.x(a)
+if(typeof a==="object"&&a!==null&&(a.constructor===Array||!!z.$isList))return this.wb(a)
+if(typeof a==="object"&&a!==null&&!!z.$isL8)return this.OI(a)
+if(typeof a==="object"&&a!==null&&!!z.$isbC)return this.DE(a)
+return this.YZ(a)},
+gRQ:function(){return new H.Pm(this,H.HU.prototype.I8,null,"I8")},
+YZ:function(a){throw H.b("Message serialization: Illegal value "+H.d(a)+" passed")}},oo:{"":"HU;",
+Pq:function(a){return a},
+wb:function(a){var z,y,x,w,v,u
+z=this.mR
+y=z.t(z,a)
+if(y!=null)return y
+z=J.U6(a)
+x=z.gB(a)
+y=P.A(x,null)
+w=this.mR
+w.u(w,a,y)
+if(typeof x!=="number")throw H.s(x)
+w=y.length
+v=0
+for(;v<x;++v){u=this.I8(z.t(a,v))
+if(v>=w)throw H.e(y,v)
+y[v]=u}return y},
+OI:function(a){var z,y
+z={}
+y=this.mR
+z.a=y.t(y,a)
+y=z.a
+if(y!=null)return y
+z.a=P.L5(null,null,null,null,null)
+y=this.mR
+y.u(y,a,z.a)
+a.aN(a,new H.OW(z,this))
+return z.a}},OW:{"":"Tp;a,b",
+call$2:function(a,b){var z=this.b
+J.kW(this.a.a,z.I8(a),z.I8(b))},
+"+call:2:0":0,
+$isEH:true,
+$is_bh:true},Dd:{"":"HU;",
+Pq:function(a){return a},
+wb:function(a){var z,y,x
+z=this.mR
+y=z.t(z,a)
+if(y!=null)return["ref",y]
+x=this.CN
+this.CN=x+1
+z=this.mR
+z.u(z,a,x)
+return["list",x,this.mE(a)]},
+OI:function(a){var z,y,x
+z=this.mR
+y=z.t(z,a)
+if(y!=null)return["ref",y]
+x=this.CN
+this.CN=x+1
+z=this.mR
+z.u(z,a,x)
+return["map",x,this.mE(J.qA(a.gvc(a))),this.mE(J.qA(a.gUQ(a)))]},
+mE:function(a){var z,y,x,w,v,u
+z=J.U6(a)
+y=z.gB(a)
+x=P.A(y,null)
+if(typeof y!=="number")throw H.s(y)
+w=x.length
+v=0
+for(;v<y;++v){u=this.I8(z.t(a,v))
+if(v>=w)throw H.e(x,v)
+x[v]=u}return x}},AP:{"":"a;",
+QS:function(a){if(H.kV(a))return a
+this.RZ=P.Py(null,null,null,null,null)
+return this.XE(a)},
+XE:function(a){var z,y
+if(a==null||typeof a==="string"||typeof a==="number"||typeof a==="boolean")return a
+z=J.U6(a)
+switch(z.t(a,0)){case"ref":y=z.t(a,1)
+z=this.RZ
+return z.t(z,y)
+case"list":return this.Dj(a)
+case"map":return this.GD(a)
+case"sendport":return this.Vf(a)
+default:return this.PR(a)}},
+Dj:function(a){var z,y,x,w,v
+z=J.U6(a)
+y=z.t(a,1)
+x=z.t(a,2)
+z=this.RZ
+z.u(z,y,x)
+z=J.U6(x)
+w=z.gB(x)
+if(typeof w!=="number")throw H.s(w)
+v=0
+for(;v<w;++v)z.u(x,v,this.XE(z.t(x,v)))
+return x},
+GD:function(a){var z,y,x,w,v,u,t,s
+z=P.L5(null,null,null,null,null)
+y=J.U6(a)
+x=y.t(a,1)
+w=this.RZ
+w.u(w,x,z)
+v=y.t(a,2)
+u=y.t(a,3)
+y=J.U6(v)
+t=y.gB(v)
+if(typeof t!=="number")throw H.s(t)
+w=J.U6(u)
+s=0
+for(;s<t;++s)z.u(z,this.XE(y.t(v,s)),this.XE(w.t(u,s)))
+return z},
+PR:function(a){throw H.b("Unexpected serialized object")}},yH:{"":"a;Kf,zu,p9",
+ed:function(){if($.jk().setTimeout!=null){if(this.zu)throw H.b(P.f("Timer in event loop cannot be canceled."))
+if(this.p9==null)return
+var z=$globalState.Xz
+z.bZ=z.bZ-1
+if(this.Kf)$.jk().clearTimeout(this.p9)
+else $.jk().clearInterval(this.p9)
+this.p9=null}else throw H.b(P.f("Canceling a timer."))},
+Qa:function(a,b){var z,y
+if(a===0)z=$.jk().setTimeout==null||$globalState.EF===!0
+else z=!1
+if(z){this.p9=1
+z=$globalState.Xz
+y=$globalState.N0
+z.Rk.NZ(new H.IY(y,new H.FA(this,b),"timer"))
+this.zu=!0}else if($.jk().setTimeout!=null){z=$globalState.Xz
+z.bZ=z.bZ+1
+this.p9=$.jk().setTimeout(H.tR(new H.Av(this,b),0),a)}else throw H.b(P.f("Timer greater than 0."))},
+static:{cy:function(a,b){var z=new H.yH(!0,!1,null)
+z.Qa(a,b)
+return z}}},FA:{"":"Tp;a,b",
+call$0:function(){this.a.p9=null
+this.b.call$0()},
+"+call:0:0":0,
+$isEH:true,
+$is_X0:true},Av:{"":"Tp;c,d",
+call$0:function(){this.c.p9=null
+var z=$globalState.Xz
+z.bZ=z.bZ-1
+this.d.call$0()},
+"+call:0:0":0,
+$isEH:true,
+$is_X0:true}}],["_js_helper","dart:_js_helper",,H,{wV:function(a,b){var z,y
+if(b!=null){z=b.x
+if(z!=null)return z}y=J.x(a)
+return typeof a==="object"&&a!==null&&!!y.$isXj},d:function(a){var z
+if(typeof a==="string")return a
+if(typeof a==="number"){if(a!==0)return""+a}else if(!0===a)return"true"
+else if(!1===a)return"false"
+else if(a==null)return"null"
+z=J.AG(a)
+if(typeof z!=="string")throw H.b(P.u(a))
+return z},Hz:function(a){throw H.b(P.f("Can't use '"+H.d(a)+"' in reflection because it is not included in a @MirrorsUsed annotation."))},nC:function(a){$.te=$.te+("_"+H.d(a))
+$.eb=$.eb+("_"+H.d(a))},eQ:function(a){var z=a.$identityHash
+if(z==null){z=Math.random()*0x3fffffff|0
+a.$identityHash=z}return z},vx:function(a){throw H.b(P.cD(a))},BU:function(a,b,c){var z,y,x,w,v,u
+if(c==null)c=H.Rm
+if(typeof a!=="string")H.vh(new P.AT(a))
+z=/^\s*[+-]?((0x[a-f0-9]+)|(\d+)|([a-z0-9]+))\s*$/i.exec(a)
+if(b==null){if(z!=null){y=z.length
+if(2>=y)throw H.e(z,2)
+if(z[2]!=null)return parseInt(a,16)
+if(3>=y)throw H.e(z,3)
+if(z[3]!=null)return parseInt(a,10)
+return c.call$1(a)}b=10}else{if(typeof b!=="number"||Math.floor(b)!==b)throw H.b(new P.AT("Radix is not an integer"))
+if(b<2||b>36)throw H.b(P.C3("Radix "+H.d(b)+" not in range 2..36"))
+if(z!=null){if(b===10){if(3>=z.length)throw H.e(z,3)
+y=z[3]!=null}else y=!1
+if(y)return parseInt(a,10)
+if(!(b<10)){if(3>=z.length)throw H.e(z,3)
+y=z[3]==null}else y=!0
+if(y){x=b<=10?48+b-1:97+b-10-1
+if(1>=z.length)throw H.e(z,1)
+w=z[1]
+y=J.U6(w)
+v=0
+while(!0){u=y.gB(w)
+if(typeof u!=="number")throw H.s(u)
+if(!(v<u))break
+y.j(w,0)
+if(y.j(w,v)>x)return c.call$1(a);++v}}}}if(z==null)return c.call$1(a)
+return parseInt(a,b)},IH:function(a,b){var z,y
+if(typeof a!=="string")H.vh(new P.AT(a))
+if(b==null)b=H.Rm
+if(!/^\s*[+-]?(?:Infinity|NaN|(?:\.\d+|\d+(?:\.\d*)?)(?:[eE][+-]?\d+)?)\s*$/.test(a))return b.call$1(a)
+z=parseFloat(a)
+if(isNaN(z)){y=J.rr(a)
+if(y==="NaN"||y==="+NaN"||y==="-NaN")return z
+return b.call$1(a)}return z},lh:function(a){var z,y,x
+z=C.Mo(J.x(a))
+if(z==="Object"){y=String(a.constructor).match(/^\s*function\s*(\S*)\s*\(/)[1]
+if(typeof y==="string")z=y}x=J.rY(z)
+if(x.j(z,0)===36)z=x.yn(z,1)
+x=H.oX(a)
+return H.d(z)+H.ia(x,0,null)},a5:function(a){return"Instance of '"+H.lh(a)+"'"},rD:function(a){var z=new Array(a)
+z.fixed$length=!0
+return z},VK:function(a){var z,y,x,w,v,u
+z=a.length
+for(y=z<=500,x="",w=0;w<z;w+=500){if(y)v=a
+else{u=w+500
+u=u<z?u:z
+v=a.slice(w,u)}x+=String.fromCharCode.apply(null,v)}return x},Cq:function(a){var z,y,x,w,v
+z=[]
+z.$builtinTypeInfo=[J.im]
+y=H.Y9(a.$asQ,H.oX(a))
+x=y==null?null:y[0]
+w=new H.a7(a,a.length,0,null)
+w.$builtinTypeInfo=[x]
+for(;w.G();){v=w.mD
+if(typeof v!=="number"||Math.floor(v)!==v)throw H.b(P.u(v))
+if(v<=65535)z.push(v)
+else if(v<=1114111){z.push(55296+(C.jn.m(v-65536,10)&1023))
+z.push(56320+(v&1023))}else throw H.b(P.u(v))}return H.VK(z)},eT:function(a){var z,y
+for(z=new H.a7(a,a.length,0,null),H.VM(z,[H.W8(a,"Q",0)]);z.G();){y=z.mD
+if(typeof y!=="number"||Math.floor(y)!==y)throw H.b(P.u(y))
+if(y<0)throw H.b(P.u(y))
+if(y>65535)return H.Cq(a)}return H.VK(a)},zW:function(a,b,c,d,e,f,g,h){var z,y,x
+if(typeof a!=="number"||Math.floor(a)!==a)H.vh(new P.AT(a))
+if(typeof b!=="number"||Math.floor(b)!==b)H.vh(new P.AT(b))
+if(typeof c!=="number"||Math.floor(c)!==c)H.vh(new P.AT(c))
+if(typeof d!=="number"||Math.floor(d)!==d)H.vh(new P.AT(d))
+if(typeof e!=="number"||Math.floor(e)!==e)H.vh(new P.AT(e))
+if(typeof f!=="number"||Math.floor(f)!==f)H.vh(new P.AT(f))
+z=J.xH(b,1)
+y=h?Date.UTC(a,z,c,d,e,f,g):new Date(a,z,c,d,e,f,g).valueOf()
+if(isNaN(y)||y<-8640000000000000||y>8640000000000000)throw H.b(new P.AT(null))
+x=J.Wx(a)
+if(x.E(a,0)||x.C(a,100))return H.uM(y,a,h)
+return y},uM:function(a,b,c){var z=new Date(a)
+if(c)z.setUTCFullYear(b)
+else z.setFullYear(b)
+return z.valueOf()},U8:function(a){if(a.date===void 0)a.date=new Date(a.rq)
+return a.date},tJ:function(a){return a.aL?H.U8(a).getUTCFullYear()+0:H.U8(a).getFullYear()+0},NS:function(a){return a.aL?H.U8(a).getUTCMonth()+1:H.U8(a).getMonth()+1},jA:function(a){return a.aL?H.U8(a).getUTCDate()+0:H.U8(a).getDate()+0},KL:function(a){return a.aL?H.U8(a).getUTCHours()+0:H.U8(a).getHours()+0},ch:function(a){return a.aL?H.U8(a).getUTCMinutes()+0:H.U8(a).getMinutes()+0},XJ:function(a){return a.aL?H.U8(a).getUTCSeconds()+0:H.U8(a).getSeconds()+0},o1:function(a){return a.aL?H.U8(a).getUTCMilliseconds()+0:H.U8(a).getMilliseconds()+0},of:function(a,b){if(a==null||typeof a==="boolean"||typeof a==="number"||typeof a==="string")throw H.b(new P.AT(a))
+return a[b]},aw:function(a,b,c){if(a==null||typeof a==="boolean"||typeof a==="number"||typeof a==="string")throw H.b(new P.AT(a))
+a[b]=c},Ek:function(a,b,c){var z,y,x,w,v,u,t,s,r,q
+z={}
+z.a=0
+y=P.p9("")
+x=[]
+z.a=z.a+b.length
+C.Nm.Ay(x,b)
+if("call$catchAll" in a){w=a.call$catchAll()
+if(c!=null&&!c.gl0(c))c.aN(c,new H.u8(w))
+v=Object.getOwnPropertyNames(w)
+u=z.a
+t=J.U6(v)
+s=t.gB(v)
+if(typeof s!=="number")throw H.s(s)
+z.a=u+s
+t.aN(v,new H.Gi(y,x,w))}else if(c!=null&&!c.gl0(c))c.aN(c,new H.t2(z,y,x))
+r="call$"+H.d(z.a)+H.d(y)
+q=a[r]
+if(q==null){if(c==null)z=[]
+else{z=c.gvc(c)
+z=P.F(z,!0,H.W8(z,"mW",0))}return J.jf(a,new H.LI(C.Ka,r,0,x,z,null))}return q.apply(a,x)},pL:function(a){if(a=="String")return C.Kn
+if(a=="int")return C.c1
+if(a=="double")return C.yX
+if(a=="num")return C.oD
+if(a=="bool")return C.Fm
+if(a=="List")return C.E3
+return init.allClasses[a]},Pq:function(){var z={x:0}
+delete z.x
+return z},s:function(a){throw H.b(P.u(a))},e:function(a,b){if(a==null)J.q8(a)
+if(typeof b!=="number"||Math.floor(b)!==b)H.s(b)
+throw H.b(P.N(b))},b:function(a){var z
+if(a==null)a=new P.LK()
+z=new Error()
+z.dartException=a
+if("defineProperty" in Object){Object.defineProperty(z, "message", { get: H.Eu.call$0 })
+z.name=""}else z.toString=H.Eu.call$0
+return z},Ju:function(){return J.AG(this.dartException)},vh:function(a){throw H.b(a)},m9:function(a){a.immutable$list=!0
+a.fixed$length=!0
+return a},Ru:function(a){var z,y,x,w,v,u,t,s,r,q,p,o,n,m
+z=new H.Hk(a)
+if(a==null)return
+if(typeof a!=="object")return a
+if("dartException" in a)return z.call$1(a.dartException)
+else if(!("message" in a))return a
+y=a.message
+if("number" in a&&typeof a.number=="number"){x=a.number
+w=x&65535
+if((C.jn.m(x,16)&8191)===10)switch(w){case 438:return z.call$1(H.T3(H.d(y)+" (Error "+w+")",null))
+case 445:case 5007:v=H.d(y)+" (Error "+w+")"
+return z.call$1(new H.ZQ(v,null))
+default:}}if(a instanceof TypeError){v=$.WD()
+u=$.OI()
+t=$.PH()
+s=$.D1()
+r=$.rx()
+q=$.Kr()
+p=$.W6()
+$.Bi()
+o=$.eA()
+n=$.ko()
+m=v.qS(y)
+if(m!=null)return z.call$1(H.T3(y,m))
+else{m=u.qS(y)
+if(m!=null){m.method="call"
+return z.call$1(H.T3(y,m))}else{m=t.qS(y)
+if(m==null){m=s.qS(y)
+if(m==null){m=r.qS(y)
+if(m==null){m=q.qS(y)
+if(m==null){m=p.qS(y)
+if(m==null){m=s.qS(y)
+if(m==null){m=o.qS(y)
+if(m==null){m=n.qS(y)
+v=m!=null}else v=!0}else v=!0}else v=!0}else v=!0}else v=!0}else v=!0}else v=!0
+if(v){v=m==null?null:m.method
+return z.call$1(new H.ZQ(y,v))}}}v=typeof y==="string"?y:""
+return z.call$1(new H.vV(v))}if(a instanceof RangeError){if(typeof y==="string"&&y.indexOf("call stack")!==-1)return new P.VS()
+return z.call$1(new P.AT(null))}if(typeof InternalError=="function"&&a instanceof InternalError)if(typeof y==="string"&&y==="too much recursion")return new P.VS()
+return a},CU:function(a){if(a==null||typeof a!='object')return J.v1(a)
+else return H.eQ(a)},B7:function(a,b){var z,y,x,w
+z=a.length
+for(y=0;y<z;y=w){x=y+1
+w=x+1
+b.u(b,a[y],a[x])}return b},ft:function(a,b,c,d,e,f,g){var z=J.x(c)
+if(z.n(c,0))return H.zd(b,new H.dr(a))
+else if(z.n(c,1))return H.zd(b,new H.TL(a,d))
+else if(z.n(c,2))return H.zd(b,new H.KX(a,d,e))
+else if(z.n(c,3))return H.zd(b,new H.uZ(a,d,e,f))
+else if(z.n(c,4))return H.zd(b,new H.OQ(a,d,e,f,g))
+else throw H.b(P.FM("Unsupported number of arguments for wrapped closure"))},tR:function(a,b){var z
+if(a==null)return
+z=a.$identity
+if(!!z)return z
+z=(function(closure, arity, context, invoke) { return function(a1, a2, a3, a4) { return invoke(closure, context, arity, a1, a2, a3, a4); };})(a,b,$globalState.N0,H.eH.call$7)
+a.$identity=z
+return z},SE:function(a,b){var z=J.U6(b)
+throw H.b(H.aq(H.lh(a),z.JT(b,3,z.gB(b))))},Go:function(a,b){var z
+if(a!=null)z=typeof a==="object"&&J.x(a)[b]
+else z=!0
+if(z)return a
+H.SE(a,b)},ag:function(a){throw H.b(P.Gz("Cyclic initialization for static "+H.d(a)))},mm:function(a){return new H.cu(a,null)
+"6,7,8"},"+createRuntimeType:1:0":1,VM:function(a,b){if(a!=null)a.$builtinTypeInfo=b
+return a},oX:function(a){if(a==null)return
+return a.$builtinTypeInfo},IM:function(a,b){return H.Y9(a["$as"+H.d(b)],H.oX(a))},W8:function(a,b,c){var z=H.IM(a,b)
+return z==null?null:z[c]},mS:function(a,b){return a[0].builtin$cls+H.ia(a,1,b)},Ko:function(a,b){if(a==null)return"dynamic"
+else if(typeof a==="object"&&a!==null&&a.constructor===Array)return H.mS(a,b)
+else if(typeof a=="function")return a.builtin$cls
+else if(typeof a==="number"&&Math.floor(a)===a)if(b==null)return C.jn.bu(a)
+else return b.call$1(a)
+else return},ia:function(a,b,c){var z,y,x,w,v,u
+if(a==null)return""
+z=P.p9("")
+for(y=b,x=!0,w=!0;y<a.length;++y){if(x)x=!1
+else z.vM=z.vM+", "
+v=a[y]
+if(v!=null)w=!1
+u=H.Ko(v,c)
+u=typeof u==="string"?u:H.d(u)
+z.vM=z.vM+u}return w?"":"<"+H.d(z)+">"},dJ:function(a){var z=typeof a==="object"&&a!==null&&a.constructor===Array?"List":J.x(a).constructor.builtin$cls
+return z+H.ia(a.$builtinTypeInfo,0,null)},Y9:function(a,b){if(typeof a==="object"&&a!==null&&a.constructor===Array)b=a
+else if(typeof a=="function"){a=H.ml(a,null,b)
+if(typeof a==="object"&&a!==null&&a.constructor===Array)b=a
+else if(typeof a=="function")b=H.ml(a,null,b)}return b},RB:function(a,b,c,d){var z,y
+if(a==null)return!1
+z=H.oX(a)
+y=J.x(a)
+if(y[b]==null)return!1
+return H.hv(H.Y9(y[d],z),c)},hv:function(a,b){var z,y
+if(a==null||b==null)return!0
+z=a.length
+for(y=0;y<z;++y)if(!H.t1(a[y],b[y]))return!1
+return!0},zN:function(a,b,c,d,e){var z,y,x,w,v
+if(a==null)return!0
+z=J.x(a)
+if("$is_"+H.d(b) in z)return!0
+y=$
+if(c!=null)y=init.allClasses[c]
+x=y["$signature_"+H.d(b)]
+if(x==null)return!1
+w=z.$signature
+if(w==null)return!1
+v=H.ml(w,z,null)
+if(typeof x=="function")if(e!=null)x=H.ml(x,null,e)
+else x=d!=null?H.ml(x,null,H.IM(d,c)):H.ml(x,null,null)
+return H.Ly(v,x)},IG:function(a,b,c){return H.ml(a,b,H.IM(b,c))},jH:function(a){return a==null||a.builtin$cls==="a"||a.builtin$cls==="c8"},Gq:function(a,b){var z,y
+if(a==null)return H.jH(b)
+if(b==null)return!0
+z=H.oX(a)
+a=J.x(a)
+if(z!=null){y=z.slice()
+y.splice(0,0,a)}else y=a
+return H.t1(y,b)},t1:function(a,b){var z,y,x,w,v,u
+if(a===b)return!0
+if(a==null||b==null)return!0
+if("func" in b){if(!("func" in a)){if("$is_"+H.d(b.func) in a)return!0
+z=a.$signature
+if(z==null)return!1
+a=z.apply(a,null)}return H.Ly(a,b)}if(b.builtin$cls==="EH"&&"func" in a)return!0
+y=typeof a==="object"&&a!==null&&a.constructor===Array
+x=y?a[0]:a
+w=typeof b==="object"&&b!==null&&b.constructor===Array
+v=w?b[0]:b
+if(!("$is"+H.d(H.Ko(v,null)) in x))return!1
+u=v!==x?x["$as"+H.d(H.Ko(v,null))]:null
+if(!y&&u==null||!w)return!0
+y=y?a.slice(1):null
+w=w?b.slice(1):null
+return H.hv(H.Y9(u,y),w)},pe:function(a,b){return H.t1(a,b)||H.t1(b,a)},Hc:function(a,b,c){var z,y,x,w,v
+if(b==null&&a==null)return!0
+if(b==null)return c
+if(a==null)return!1
+z=a.length
+y=b.length
+if(c){if(z<y)return!1}else if(z!==y)return!1
+for(x=0;x<y;++x){w=a[x]
+v=b[x]
+if(!(H.t1(w,v)||H.t1(v,w)))return!1}return!0},Vt:function(a,b){if(b==null)return!0
+if(a==null)return!1
+return function (t, s, isAssignable) {
+ for (var $name in t) {
+ if (!s.hasOwnProperty($name)) {
+ return false;
+ }
+ var tType = t[$name];
+ var sType = s[$name];
+ if (!isAssignable.call$2(sType, tType)) {
+ return false;
+ }
+ }
+ return true;
+ }(b, a, H.Qv)
+ },Ly:function(a,b){var z,y,x,w,v,u,t,s,r,q,p,o,n,m,l
+if(!("func" in a))return!1
+if("void" in a){if(!("void" in b)&&"ret" in b)return!1}else if(!("void" in b)){z=a.ret
+y=b.ret
+if(!(H.t1(z,y)||H.t1(y,z)))return!1}x=a.args
+w=b.args
+v=a.opt
+u=b.opt
+t=x!=null?x.length:0
+s=w!=null?w.length:0
+r=v!=null?v.length:0
+q=u!=null?u.length:0
+if(t>s)return!1
+if(t+r<s+q)return!1
+if(t===s){if(!H.Hc(x,w,!1))return!1
+if(!H.Hc(v,u,!0))return!1}else{for(p=0;p<t;++p){o=x[p]
+n=w[p]
+if(!(H.t1(o,n)||H.t1(n,o)))return!1}for(m=p,l=0;m<s;++l,++m){o=v[l]
+n=w[m]
+if(!(H.t1(o,n)||H.t1(n,o)))return!1}for(l=0;m<q;++l,++m){o=u[l]
+n=u[m]
+if(!(H.t1(o,n)||H.t1(n,o)))return!1}}return H.Vt(a.named,b.named)},ml:function(a,b,c){return a.apply(b,c)},uc:function(a){var z=$.NF
+return"Instance of "+(z==null?"<Unknown>":z.call$1(a))},bw:function(a){return H.eQ(a)},iw:function(a,b,c){Object.defineProperty(a, b, {value: c, enumerable: false, writable: true, configurable: true})},w3:function(a){var z,y,x,w,v,u
+z=$.NF.call$1(a)
+y=$.nw[z]
+if(y!=null){Object.defineProperty(a, init.dispatchPropertyName, {value: y, enumerable: false, writable: true, configurable: true})
+return y.i}x=$.vv[z]
+if(x!=null)return x
+w=init.interceptorsByTag[z]
+if(w==null){z=$.TX.call$2(a,z)
+if(z!=null){y=$.nw[z]
+if(y!=null){Object.defineProperty(a, init.dispatchPropertyName, {value: y, enumerable: false, writable: true, configurable: true})
+return y.i}x=$.vv[z]
+if(x!=null)return x
+w=init.interceptorsByTag[z]}}if(w==null)return
+x=w.prototype
+v=z[0]
+if(v==="!"){y=H.Va(x)
+$.nw[z]=y
+Object.defineProperty(a, init.dispatchPropertyName, {value: y, enumerable: false, writable: true, configurable: true})
+return y.i}if(v==="~"){$.vv[z]=x
+return x}if(v==="-"){u=H.Va(x)
+Object.defineProperty(Object.getPrototypeOf(a), init.dispatchPropertyName, {value: u, enumerable: false, writable: true, configurable: true})
+return u.i}if(v==="+")return H.Lc(a,x)
+if(v==="*")throw H.b(P.SY(z))
+if(init.leafTags[z]===true){u=H.Va(x)
+Object.defineProperty(Object.getPrototypeOf(a), init.dispatchPropertyName, {value: u, enumerable: false, writable: true, configurable: true})
+return u.i}else return H.Lc(a,x)},Lc:function(a,b){var z,y
+z=Object.getPrototypeOf(a)
+y=J.Qu(b,z,null,null)
+Object.defineProperty(z, init.dispatchPropertyName, {value: y, enumerable: false, writable: true, configurable: true})
+return b},Va:function(a){return J.Qu(a,!1,null,!!a.$isXj)},VF:function(a,b,c){var z=b.prototype
+if(init.leafTags[a]===true)return J.Qu(z,!1,null,!!z.$isXj)
+else return J.Qu(z,c,null,null)},XD:function(){if(!0===$.Bv)return
+$.Bv=!0
+H.Z1()},Z1:function(){var z,y,x,w,v,u,t
+$.nw=Object.create(null)
+$.vv=Object.create(null)
+H.kO()
+z=init.interceptorsByTag
+y=Object.getOwnPropertyNames(z)
+if(typeof window!="undefined"){window
+for(x=0;x<y.length;++x){w=y[x]
+v=$.x7.call$1(w)
+if(v!=null){u=H.VF(w,z[w],v)
+if(u!=null)Object.defineProperty(v, init.dispatchPropertyName, {value: u, enumerable: false, writable: true, configurable: true})}}}for(x=0;x<y.length;++x){w=y[x]
+if(/^[A-Za-z_]/.test(w)){t=z[w]
+z["!"+w]=t
+z["~"+w]=t
+z["-"+w]=t
+z["+"+w]=t
+z["*"+w]=t}}},kO:function(){var z,y,x,w,v,u,t
+z=C.HX()
+z=H.ud(C.Mc,H.ud(C.XQ,H.ud(C.XQ,H.ud(C.Px,H.ud(C.dE,H.ud(C.dK(C.Mo),z))))))
+if(typeof dartNativeDispatchHooksTransformer!="undefined"){y=dartNativeDispatchHooksTransformer
+if(typeof y=="function")y=[y]
+if(y.constructor==Array)for(x=0;x<y.length;++x){w=y[x]
+if(typeof w=="function")z=w(z)||z}}v=z.getTag
+u=z.getUnknownTag
+t=z.prototypeForTag
+$.NF=new H.dC(v)
+$.TX=new H.wN(u)
+$.x7=new H.VX(t)},ud:function(a,b){return a(b)||b},f7:function(a){var z=a.goX()
+z.lastIndex=0
+return z},ZT:function(a,b){var z,y,x,w,v,u
+z=P.A(null,P.Od)
+H.VM(z,[P.Od])
+y=b.length
+x=a.length
+for(w=0;!0;){v=C.xB.XU(b,a,w)
+if(v===-1)break
+z.push(new H.tQ(v,b,a))
+u=v+x
+if(u===y)break
+else w=v===u?w+1:u}return z},m2:function(a,b,c){var z,y
+if(typeof b==="string")return C.xB.XU(a,b,c)!==-1
+else{z=J.rY(b)
+if(typeof b==="object"&&b!==null&&!!z.$isVR){z=C.xB.yn(a,c)
+y=b.SQ
+return y.test(z)}else return J.pO(z.dd(b,C.xB.yn(a,c)))}},ys:function(a,b,c){var z,y,x,w
+if(typeof b==="string")if(b==="")if(a==="")return c
+else{z=P.p9("")
+y=a.length
+z.KF(c)
+for(x=0;x<y;++x){w=a[x]
+z.vM=z.vM+w
+z.vM=z.vM+c}return z.vM}else return a.replace(new RegExp(b.replace(new RegExp("[[\\]{}()*+?.\\\\^$|]",'g'),"\\$&"),'g'),c.replace("$","$$$$"))
+else{w=J.x(b)
+if(typeof b==="object"&&b!==null&&!!w.$isVR)return a.replace(H.f7(b),c.replace("$","$$$$"))
+else{if(b==null)H.vh(new P.AT(null))
+throw H.b("String.replaceAll(Pattern) UNIMPLEMENTED")}}},oH:{"":"a;",
+gl0:function(a){return J.xC(this.gB(this),0)},
+"+isEmpty":0,
+gor:function(a){return!J.xC(this.gB(this),0)},
+"+isNotEmpty":0,
+bu:function(a){return P.vW(this)},
+q3:function(){throw H.b(P.f("Cannot modify unmodifiable Map"))},
+u:function(a,b,c){return this.q3()},
+"+[]=:2:0":0,
+Rz:function(a,b){return this.q3()},
+$isL8:true},LP:{"":"oH;B>,il,js",
+PF:function(a){var z=this.gUQ(this)
+return z.Vr(z,new H.c2(this,a))},
+"+containsValue:1:0":0,
+x4:function(a){if(typeof a!=="string")return!1
+if(a==="__proto__")return!1
+return this.il.hasOwnProperty(a)},
+"+containsKey:1:0":0,
+t:function(a,b){if(typeof b!=="string")return
+if(!this.x4(b))return
+return this.il[b]},
+"+[]:1:0":0,
+aN:function(a,b){J.kH(this.js,new H.WT(this,b))},
+gvc:function(a){var z=new H.XR(this)
+H.VM(z,[H.W8(this,"LP",0)])
+return z},
+"+keys":0,
+gUQ:function(a){return J.C0(this.js,new H.p8(this))},
+"+values":0,
+$asoH:null,
+$asL8:null,
+$isqC:true},c2:{"":"Tp;a,b",
+call$1:function(a){return J.xC(a,this.b)},
+"+call:1:0":0,
+$isEH:true,
+$is_HB:true,
+$is_Dv:true},WT:{"":"Tp;a,b",
+call$1:function(a){var z=this.a
+return this.b.call$2(a,z.t(z,a))},
+"+call:1:0":0,
+$isEH:true,
+$is_HB:true,
+$is_Dv:true},p8:{"":"Tp;a",
+call$1:function(a){var z=this.a
+return z.t(z,a)},
+"+call:1:0":0,
+$isEH:true,
+$is_HB:true,
+$is_Dv:true},XR:{"":"mW;Nt",
+gA:function(a){return J.GP(this.Nt.js)},
+$asmW:null,
+$ascX:null},LI:{"":"a;t5,Qp,GF,FQ,md,mG",
+gWa:function(){var z,y,x
+z=this.t5
+y=J.x(z)
+if(typeof z==="object"&&z!==null&&!!y.$iswv)return z
+y=$.bx()
+x=y.t(y,z)
+if(x!=null){y=J.uH(x,":")
+if(0>=y.length)throw H.e(y,0)
+z=y[0]}this.t5=new H.GD(z)
+return this.t5},
+glT:function(){return this.GF===1},
+ghB:function(){return this.GF===2},
+gnd:function(){var z,y,x,w
+if(this.GF===1)return C.xD
+z=this.FQ
+y=z.length-this.md.length
+if(y===0)return C.xD
+x=[]
+for(w=0;w<y;++w){if(w>=z.length)throw H.e(z,w)
+x.push(z[w])}return H.m9(x)},
+gVm:function(){var z,y,x,w,v,u,t,s
+if(this.GF!==0){z=H.B7([],P.L5(null,null,null,null,null))
+H.VM(z,[P.wv,null])
+return z}z=this.md
+y=z.length
+x=this.FQ
+w=x.length-y
+if(y===0){z=H.B7([],P.L5(null,null,null,null,null))
+H.VM(z,[P.wv,null])
+return z}v=P.L5(null,null,null,P.wv,null)
+for(u=0;u<y;++u){if(u>=z.length)throw H.e(z,u)
+t=z[u]
+s=w+u
+if(s<0||s>=x.length)throw H.e(x,s)
+v.u(v,new H.GD(t),x[s])}return v},
+Yd:function(a){var z,y,x,w,v,u
+z=J.x(a)
+y=this.Qp
+x=$.Dq.indexOf(y)!==-1
+if(x){w=a===z?null:z
+v=z
+z=w}else{v=a
+z=null}u=v[y]
+if(typeof u==="function"){if(!("$reflectable" in u))H.Hz(J.Z0(this.gWa()))
+return new H.A2(u,x,z)}else return new H.F3(z)},
+static:{"":"W2,Le,De",}},A2:{"":"a;mr,eK,Ot",
+gpf:function(){return!1},
+Bj:function(a,b){var z,y
+if(!this.eK){if(typeof b!=="object"||b===null||b.constructor!==Array)b=P.F(b,!0,null)
+z=a}else{y=[a]
+C.Nm.Ay(y,b)
+z=this.Ot
+z=z!=null?z:a
+b=y}return this.mr.apply(z,b)}},F3:{"":"a;e0?",
+gpf:function(){return!0},
+Bj:function(a,b){var z=this.e0
+return J.jf(z==null?a:z,b)}},u8:{"":"Tp;b",
+call$2:function(a,b){this.b[a]=b},
+"+call:2:0":0,
+$isEH:true,
+$is_bh:true},Gi:{"":"Tp;c,d,e",
+call$1:function(a){this.c.KF("$"+H.d(a))
+this.d.push(this.e[a])},
+"+call:1:0":0,
+$isEH:true,
+$is_HB:true,
+$is_Dv:true},t2:{"":"Tp;a,f,g",
+call$2:function(a,b){var z
+this.f.KF("$"+H.d(a))
+this.g.push(b)
+z=this.a
+z.a=z.a+1},
+"+call:2:0":0,
+$isEH:true,
+$is_bh:true},Zr:{"":"a;i9,FQ,Vv,yB,Sp,lv",
+qS:function(a){var z,y,x
+z=new RegExp(this.i9).exec(a)
+if(z==null)return
+y={}
+x=this.FQ
+if(x!==-1)y.arguments=z[x+1]
+x=this.Vv
+if(x!==-1)y.argumentsExpr=z[x+1]
+x=this.yB
+if(x!==-1)y.expr=z[x+1]
+x=this.Sp
+if(x!==-1)y.method=z[x+1]
+x=this.lv
+if(x!==-1)y.receiver=z[x+1]
+return y},
+static:{"":"lm,k1,Re,fN,qi,rZ,BX,tt,dt,A7",cM:function(a){var z,y,x,w,v,u
+a=a.replace(String({}), '$receiver$').replace(new RegExp("[[\\]{}()*+?.\\\\^$|]",'g'),'\\$&')
+z=a.match(/\\\$[a-zA-Z]+\\\$/g)
+if(z==null)z=[]
+y=z.indexOf("\\$arguments\\$")
+x=z.indexOf("\\$argumentsExpr\\$")
+w=z.indexOf("\\$expr\\$")
+v=z.indexOf("\\$method\\$")
+u=z.indexOf("\\$receiver\\$")
+return new H.Zr(a.replace('\\$arguments\\$','((?:x|[^x])*)').replace('\\$argumentsExpr\\$','((?:x|[^x])*)').replace('\\$expr\\$','((?:x|[^x])*)').replace('\\$method\\$','((?:x|[^x])*)').replace('\\$receiver\\$','((?:x|[^x])*)'),y,x,w,v,u)},S7:function(a){return function($expr$) {
+ var $argumentsExpr$ = '$arguments$'
+ try {
+ $expr$.$method$($argumentsExpr$);
+ } catch (e) {
+ return e.message;
+ }
+}(a)},pb:function(){return function() {
+ var $argumentsExpr$ = '$arguments$'
+ try {
+ null.$method$($argumentsExpr$);
+ } catch (e) {
+ return e.message;
+ }
+}()},u9:function(){return function() {
+ var $argumentsExpr$ = '$arguments$'
+ try {
+ (void 0).$method$($argumentsExpr$);
+ } catch (e) {
+ return e.message;
+ }
+}()},Mj:function(a){return function($expr$) {
+ try {
+ $expr$.$method$;
+ } catch (e) {
+ return e.message;
+ }
+}(a)},Qd:function(){return function() {
+ try {
+ null.$method$;
+ } catch (e) {
+ return e.message;
+ }
+}()},m0:function(){return function() {
+ try {
+ (void 0).$method$;
+ } catch (e) {
+ return e.message;
+ }
+}()}}},ZQ:{"":"Ge;Zf,Sp",
+bu:function(a){var z=this.Sp
+if(z==null)return"NullError: "+H.d(this.Zf)
+return"NullError: Cannot call \""+H.d(z)+"\" on null"},
+$ismp:true,
+$isGe:true},az:{"":"Ge;Zf,Sp,lv",
+bu:function(a){var z,y
+z=this.Sp
+if(z==null)return"NoSuchMethodError: "+H.d(this.Zf)
+y=this.lv
+if(y==null)return"NoSuchMethodError: Cannot call \""+z+"\" ("+H.d(this.Zf)+")"
+return"NoSuchMethodError: Cannot call \""+z+"\" on \""+y+"\" ("+H.d(this.Zf)+")"},
+$ismp:true,
+$isGe:true,
+static:{T3:function(a,b){var z,y
+z=b==null
+y=z?null:b.method
+z=z?null:b.receiver
+return new H.az(a,y,z)}}},vV:{"":"Ge;Zf",
+bu:function(a){var z=this.Zf
+return C.xB.gl0(z)?"Error":"Error: "+z}},Hk:{"":"Tp;a",
+call$1:function(a){var z=J.x(a)
+if(typeof a==="object"&&a!==null&&!!z.$isGe)if(a.$thrownJsError==null)a.$thrownJsError=this.a
+return a},
+"+call:1:0":0,
+$isEH:true,
+$is_HB:true,
+$is_Dv:true},XO:{"":"a;MP,bQ",
+bu:function(a){var z,y
+z=this.bQ
+if(z!=null)return z
+z=this.MP
+y=typeof z==="object"?z.stack:null
+z=y==null?"":y
+this.bQ=z
+return z}},dr:{"":"Tp;a",
+call$0:function(){return this.a.call$0()},
+"+call:0:0":0,
+$isEH:true,
+$is_X0:true},TL:{"":"Tp;b,c",
+call$0:function(){return this.b.call$1(this.c)},
+"+call:0:0":0,
+$isEH:true,
+$is_X0:true},KX:{"":"Tp;d,e,f",
+call$0:function(){return this.d.call$2(this.e,this.f)},
+"+call:0:0":0,
+$isEH:true,
+$is_X0:true},uZ:{"":"Tp;g,h,i,j",
+call$0:function(){return this.g.call$3(this.h,this.i,this.j)},
+"+call:0:0":0,
+$isEH:true,
+$is_X0:true},OQ:{"":"Tp;k,l,m,n,o",
+call$0:function(){return this.k.call$4(this.l,this.m,this.n,this.o)},
+"+call:0:0":0,
+$isEH:true,
+$is_X0:true},Tp:{"":"a;",
+bu:function(a){return"Closure"},
+$isTp:true,
+$isEH:true},v:{"":"Tp;wc<,nn<,lv,Pp>",
+n:function(a,b){var z
+if(b==null)return!1
+if(this===b)return!0
+z=J.x(b)
+if(typeof b!=="object"||b===null||!z.$isv)return!1
+return this.wc===b.wc&&this.nn===b.nn&&this.lv===b.lv},
+giO:function(a){var z,y
+z=this.lv
+if(z==null)y=H.eQ(this.wc)
+else y=typeof z!=="object"?J.v1(z):H.eQ(z)
+return(y^H.eQ(this.nn))>>>0},
+$isv:true},Z3:{"":"a;Jy"},D2:{"":"a;Jy"},GT:{"":"a;oc>"},Pe:{"":"Ge;G1>",
+bu:function(a){return this.G1},
+$isGe:true,
+static:{aq:function(a,b){return new H.Pe("CastError: Casting value of type "+a+" to incompatible type "+H.d(b))}}},Eq:{"":"Ge;G1>",
+bu:function(a){return"RuntimeError: "+this.G1},
+static:{Pa:function(a){return new H.Eq(a)}}},cu:{"":"a;IE<,rE",
+bu:function(a){var z,y,x
+z=this.rE
+if(z!=null)return z
+y=this.IE
+x=H.Jg(y)
+y=x==null?y:x
+this.rE=y
+return y},
+giO:function(a){return J.v1(this.IE)},
+n:function(a,b){var z
+if(b==null)return!1
+z=J.x(b)
+return typeof b==="object"&&b!==null&&!!z.$iscu&&J.xC(this.IE,b.IE)},
+$iscu:true,
+$isuq:true},Lm:{"":"a;h7<,oc>,kU>"},dC:{"":"Tp;a",
+call$1:function(a){return this.a(a)},
+"+call:1:0":0,
+$isEH:true,
+$is_HB:true,
+$is_Dv:true},wN:{"":"Tp;b",
+call$2:function(a,b){return this.b(a,b)},
+"+call:2:0":0,
+$isEH:true,
+$is_bh:true},VX:{"":"Tp;c",
+call$1:function(a){return this.c(a)},
+"+call:1:0":0,
+$isEH:true,
+$is_HB:true,
+$is_Dv:true},VR:{"":"a;SQ,h2,fX",
+goX:function(){var z=this.h2
+if(z!=null)return z
+z=this.SQ
+z=H.v4(z.source,z.multiline,!z.ignoreCase,!0)
+this.h2=z
+return z},
+gXP:function(){var z=this.fX
+if(z!=null)return z
+z=this.SQ
+z=H.v4(z.source+"|()",z.multiline,!z.ignoreCase,!0)
+this.fX=z
+return z},
+ej:function(a){var z
+if(typeof a!=="string")H.vh(new P.AT(a))
+z=this.SQ.exec(a)
+if(z==null)return
+return H.yx(this,z)},
+zD:function(a){if(typeof a!=="string")H.vh(new P.AT(a))
+return this.SQ.test(a)},
+dd:function(a,b){if(typeof b!=="string")H.vh(new P.AT(b))
+return new H.KW(this,b)},
+oG:function(a,b){var z,y
+z=this.goX()
+z.lastIndex=b
+y=z.exec(a)
+if(y==null)return
+return H.yx(this,y)},
+Nd:function(a,b){var z,y,x,w
+z=this.gXP()
+z.lastIndex=b
+y=z.exec(a)
+if(y==null)return
+x=y.length
+w=x-1
+if(w<0)throw H.e(y,w)
+if(y[w]!=null)return
+J.wg(y,w)
+return H.yx(this,y)},
+wL:function(a,b,c){var z
+if(c>=0){z=J.q8(b)
+if(typeof z!=="number")throw H.s(z)
+z=c>z}else z=!0
+if(z)throw H.b(P.TE(c,0,J.q8(b)))
+return this.Nd(b,c)},
+R4:function(a,b){return this.wL(a,b,0)},
+$isVR:true,
+$iscT:true,
+static:{v4:function(a,b,c,d){var z,y,x,w,v
+z=b?"m":""
+y=c?"":"i"
+x=d?"g":""
+w=(function() {try {return new RegExp(a, z + y + x);} catch (e) {return e;}})()
+if(w instanceof RegExp)return w
+v=String(w)
+throw H.b(P.cD("Illegal RegExp pattern: "+a+", "+v))}}},EK:{"":"a;zO,oH",
+t:function(a,b){var z=this.oH
+if(b>>>0!==b||b>=z.length)throw H.e(z,b)
+return z[b]},
+"+[]:1:0":0,
+kx:function(a,b){},
+$isOd:true,
+static:{yx:function(a,b){var z=new H.EK(a,b)
+z.kx(a,b)
+return z}}},KW:{"":"mW;td,BZ",
+gA:function(a){return new H.Pb(this.td,this.BZ,null)},
+$asmW:function(){return[P.Od]},
+$ascX:function(){return[P.Od]}},Pb:{"":"a;EW,BZ,Jz",
+gl:function(){return this.Jz},
+"+current":0,
+G:function(){var z,y,x
+if(this.BZ==null)return!1
+z=this.Jz
+if(z!=null){z=z.oH
+y=z.index
+if(0>=z.length)throw H.e(z,0)
+z=J.q8(z[0])
+if(typeof z!=="number")throw H.s(z)
+x=y+z
+if(this.Jz.oH.index===x)++x}else x=0
+this.Jz=this.EW.oG(this.BZ,x)
+if(this.Jz==null){this.BZ=null
+return!1}return!0}},tQ:{"":"a;M,J9,zO",
+t:function(a,b){if(!J.xC(b,0))H.vh(P.N(b))
+return this.zO},
+"+[]:1:0":0,
+$isOd:true}}],["app_bootstrap","index_devtools.html_bootstrap.dart",,E,{E2:function(){$.x2=["package:observatory/src/observatory_elements/observatory_element.dart","package:observatory/src/observatory_elements/error_view.dart","package:observatory/src/observatory_elements/field_ref.dart","package:observatory/src/observatory_elements/instance_ref.dart","package:observatory/src/observatory_elements/class_view.dart","package:observatory/src/observatory_elements/disassembly_entry.dart","package:observatory/src/observatory_elements/code_view.dart","package:observatory/src/observatory_elements/collapsible_content.dart","package:observatory/src/observatory_elements/field_view.dart","package:observatory/src/observatory_elements/function_view.dart","package:observatory/src/observatory_elements/isolate_summary.dart","package:observatory/src/observatory_elements/isolate_list.dart","package:observatory/src/observatory_elements/instance_view.dart","package:observatory/src/observatory_elements/json_view.dart","package:observatory/src/observatory_elements/library_view.dart","package:observatory/src/observatory_elements/source_view.dart","package:observatory/src/observatory_elements/script_view.dart","package:observatory/src/observatory_elements/stack_trace.dart","package:observatory/src/observatory_elements/message_viewer.dart","package:observatory/src/observatory_elements/navigation_bar.dart","package:observatory/src/observatory_elements/response_viewer.dart","package:observatory/src/observatory_elements/observatory_application.dart","index_devtools.html.0.dart"]
+$.uP=!1
+A.Ok()}},1],["class_view_element","package:observatory/src/observatory_elements/class_view.dart",,Z,{aC:{"":["Vf;FJ%-,VJ,Ai,tH-,VJ,Ai,VJ,Ai,ZI,uN,z3,TQ,Vk,Ye,mT,KM-",null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,function(){return[C.nJ]}],
+gRu:function(a){return a.FJ
+"37,38,39"},
+"+cls":1,
+sRu:function(a,b){a.FJ=this.pD(a,C.XA,a.FJ,b)
+"40,31,37,38"},
+"+cls=":1,
+"@":function(){return[C.aQ]},
+static:{zg:function(a){var z,y,x,w,v
+z=$.Nd()
+y=P.Py(null,null,null,J.O,W.I0)
+x=J.O
+w=W.cv
+v=new V.br(P.Py(null,null,null,x,w),null,null)
+H.VM(v,[x,w])
+a.Ye=z
+a.mT=y
+a.KM=v
+C.kk.ZL(a)
+C.kk.FH(a)
+return a
+"9"},"+new ClassViewElement$created:0:0":1}},"+ClassViewElement": [41],Vf:{"":"uL+Pi;",$isd3:true}}],["code_view_element","package:observatory/src/observatory_elements/code_view.dart",,F,{Be:{"":["tu;Zw%-,VJ,Ai,tH-,VJ,Ai,VJ,Ai,ZI,uN,z3,TQ,Vk,Ye,mT,KM-",null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,function(){return[C.nJ]}],
+gtT:function(a){return a.Zw
+"37,38,39"},
+"+code":1,
+stT:function(a,b){a.Zw=this.pD(a,C.b1,a.Zw,b)
+"40,31,37,38"},
+"+code=":1,
+grK:function(a){var z=a.Zw
+if(z!=null&&J.UQ(z,"is_optimized")!=null)return"panel panel-success"
+return"panel panel-warning"
+"8"},
+"+cssPanelClass":1,
+"@":function(){return[C.xW]},
+static:{Fe:function(a){var z,y,x,w,v,u
+z=H.B7([],P.L5(null,null,null,null,null))
+z=R.Jk(z)
+y=$.Nd()
+x=P.Py(null,null,null,J.O,W.I0)
+w=J.O
+v=W.cv
+u=new V.br(P.Py(null,null,null,w,v),null,null)
+H.VM(u,[w,v])
+a.Zw=z
+a.Ye=y
+a.mT=x
+a.KM=u
+C.YD.ZL(a)
+C.YD.FH(a)
+return a
+"10"},"+new CodeViewElement$created:0:0":1}},"+CodeViewElement": [42],tu:{"":"uL+Pi;",$isd3:true}}],["collapsible_content_element","package:observatory/src/observatory_elements/collapsible_content.dart",,R,{i6:{"":["Vc;Xf%-,VA%-,P2%-,VJ,Ai,tH-,VJ,Ai,VJ,Ai,ZI,uN,z3,TQ,Vk,Ye,mT,KM-",null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,function(){return[C.nJ]}],
+gl7:function(a){return a.Xf
+"8,38,43"},
+"+iconClass":1,
+sl7:function(a,b){a.Xf=this.pD(a,C.Di,a.Xf,b)
+"40,31,8,38"},
+"+iconClass=":1,
+gai:function(a){return a.VA
+"8,38,43"},
+"+displayValue":1,
+sai:function(a,b){a.VA=this.pD(a,C.Jw,a.VA,b)
+"40,31,8,38"},
+"+displayValue=":1,
+gxj:function(a){return a.P2
+"44"},
+"+collapsed":1,
+sxj:function(a,b){a.P2=b
+this.dR(a)
+"40,45,44"},
+"+collapsed=":1,
+i4:function(a){Z.uL.prototype.i4.call(this,a)
+this.dR(a)
+"40"},
+"+enteredView:0:0":1,
+rS:function(a,b,c,d){a.P2=a.P2!==!0
+this.dR(a)
+this.dR(a)
+"40,46,47,48,40,49,50"},
+"+toggleDisplay:3:0":1,
+dR:function(a){var z,y
+z=a.P2
+y=a.Xf
+if(z===!0){a.Xf=this.pD(a,C.Di,y,"glyphicon glyphicon-chevron-down")
+a.VA=this.pD(a,C.Jw,a.VA,"none")}else{a.Xf=this.pD(a,C.Di,y,"glyphicon glyphicon-chevron-up")
+a.VA=this.pD(a,C.Jw,a.VA,"block")}"40"},
+"+_refresh:0:0":1,
+"@":function(){return[C.Gu]},
+static:{"":"Vl<-,DI<-",IT:function(a){var z,y,x,w,v
+z=$.Nd()
+y=P.Py(null,null,null,J.O,W.I0)
+x=J.O
+w=W.cv
+v=new V.br(P.Py(null,null,null,x,w),null,null)
+H.VM(v,[x,w])
+a.Xf="glyphicon glyphicon-chevron-down"
+a.VA="none"
+a.P2=!0
+a.Ye=z
+a.mT=y
+a.KM=v
+C.j8.ZL(a)
+C.j8.FH(a)
+return a
+"11"},"+new CollapsibleContentElement$created:0:0":1}},"+CollapsibleContentElement": [51],Vc:{"":"uL+Pi;",$isd3:true}}],["custom_element.polyfill","package:custom_element/polyfill.dart",,B,{G9:function(){if($.LX()==null)return!0
+var z=J.UQ($.LX(),"CustomElements")
+if(z==null)return"register" in document
+return J.xC(J.UQ(z,"ready"),!0)},zO:{"":"Tp;",
+call$0:function(){if(B.G9())return P.Ab(null,null)
+var z=new W.RO(new W.Jn(document).WK,"WebComponentsReady",!1)
+H.VM(z,[null])
+return z.gFV(z)},
+"+call:0:0":0,
+$isEH:true,
+$is_X0:true}}],["dart._collection.dev","dart:_collection-dev",,H,{Zi:function(a,b,c,d,e){var z,y,x,w,v
+z=J.Wx(b)
+if(z.C(b,d))for(y=J.xH(z.g(b,e),1),x=J.xH(J.WB(d,e),1),z=J.U6(a);w=J.Wx(y),w.F(y,b);y=w.W(y,1),x=J.xH(x,1))C.Nm.u(c,x,z.t(a,y))
+else for(w=J.U6(a),x=d,y=b;v=J.Wx(y),v.C(y,z.g(b,e));y=v.g(y,1),x=J.WB(x,1))C.Nm.u(c,x,w.t(a,y))},Ub:function(a,b,c,d){var z
+if(c>=a.length)return-1
+if(c<0)c=0
+for(z=c;z<d;++z){if(z>>>0!==z||z>=a.length)throw H.e(a,z)
+if(J.xC(a[z],b))return z}return-1},hH:function(a,b,c){var z,y
+if(typeof c!=="number")throw c.C()
+if(c<0)return-1
+z=a.length
+if(c>=z)c=z-1
+for(y=c;y>=0;--y){if(y>=a.length)throw H.e(a,y)
+if(J.xC(a[y],b))return y}return-1},bQ:function(a,b){var z
+for(z=new H.a7(a,a.length,0,null),H.VM(z,[H.W8(a,"Q",0)]);z.G();)b.call$1(z.mD)},Ck:function(a,b){var z
+for(z=new H.a7(a,a.length,0,null),H.VM(z,[H.W8(a,"Q",0)]);z.G();)if(b.call$1(z.mD)===!0)return!0
+return!1},n3:function(a,b,c){var z
+for(z=new H.a7(a,a.length,0,null),H.VM(z,[H.W8(a,"Q",0)]);z.G();)b=c.call$2(b,z.mD)
+return b},mx:function(a,b,c){var z,y,x
+for(y=0;y<$.RM().length;++y){x=$.RM()
+if(y>=x.length)throw H.e(x,y)
+if(x[y]===a)return H.d(b)+"..."+H.d(c)}z=P.p9("")
+try{$.RM().push(a)
+z.KF(b)
+z.We(a,", ")
+z.KF(c)}finally{x=$.RM()
+if(0>=x.length)throw H.e(x,0)
+x.pop()}return z.gvM()},Wv:function(a,b,c){return H.hH(a,b,a.length-1)},S6:function(a,b,c){var z=J.Wx(b)
+if(z.C(b,0)||z.D(b,a.length))throw H.b(P.TE(b,0,a.length))
+z=J.Wx(c)
+if(z.C(c,b)||z.D(c,a.length))throw H.b(P.TE(c,b,a.length))},qG:function(a,b,c,d,e){var z,y
+H.S6(a,b,c)
+if(typeof b!=="number")throw H.s(b)
+z=c-b
+if(z===0)return
+y=J.Wx(e)
+if(y.C(e,0))throw H.b(new P.AT(e))
+if(J.xZ(y.g(e,z),J.q8(d)))throw H.b(P.w("Not enough elements"))
+H.Zi(d,e,a,b,z)},IC:function(a,b,c){var z,y,x,w,v,u
+z=J.Wx(b)
+if(z.C(b,0)||z.D(b,a.length))throw H.b(P.TE(b,0,a.length))
+y=J.U6(c)
+x=y.gB(c)
+w=a.length
+if(typeof x!=="number")throw H.s(x)
+C.Nm.sB(a,w+x)
+z=z.g(b,x)
+w=a.length
+if(!!a.immutable$list)H.vh(P.f("set range"))
+H.qG(a,z,w,a,b)
+for(z=y.gA(c);z.G();b=u){v=z.mD
+u=J.WB(b,1)
+C.Nm.u(a,b,v)}},LJ:function(a){if(typeof dartPrint=="function"){dartPrint(a)
+return}if(typeof console=="object"&&typeof console.log=="function"){console.log(a)
+return}if(typeof window=="object")return
+if(typeof print=="function"){print(a)
+return}throw "Unable to print message: " + String(a)},aL:{"":"mW;",
+gA:function(a){var z=new H.a7(this,this.gB(this),0,null)
+H.VM(z,[H.W8(this,"aL",0)])
+return z},
+aN:function(a,b){var z,y
+z=this.gB(this)
+if(typeof z!=="number")throw H.s(z)
+y=0
+for(;y<z;++y){b.call$1(this.Zv(this,y))
+if(z!==this.gB(this))throw H.b(P.a4(this))}},
+gl0:function(a){return J.xC(this.gB(this),0)},
+"+isEmpty":0,
+grZ:function(a){if(J.xC(this.gB(this),0))throw H.b(new P.lj("No elements"))
+return this.Zv(this,J.xH(this.gB(this),1))},
+tg:function(a,b){var z,y
+z=this.gB(this)
+if(typeof z!=="number")throw H.s(z)
+y=0
+for(;y<z;++y){if(J.xC(this.Zv(this,y),b))return!0
+if(z!==this.gB(this))throw H.b(P.a4(this))}return!1},
+Vr:function(a,b){var z,y
+z=this.gB(this)
+if(typeof z!=="number")throw H.s(z)
+y=0
+for(;y<z;++y){if(b.call$1(this.Zv(this,y))===!0)return!0
+if(z!==this.gB(this))throw H.b(P.a4(this))}return!1},
+zV:function(a,b){var z,y,x,w,v,u
+z=this.gB(this)
+if(b.length!==0){y=J.x(z)
+if(y.n(z,0))return""
+x=H.d(this.Zv(this,0))
+if(!y.n(z,this.gB(this)))throw H.b(P.a4(this))
+w=P.p9(x)
+if(typeof z!=="number")throw H.s(z)
+v=1
+for(;v<z;++v){w.vM=w.vM+b
+u=this.Zv(this,v)
+u=typeof u==="string"?u:H.d(u)
+w.vM=w.vM+u
+if(z!==this.gB(this))throw H.b(P.a4(this))}return w.vM}else{w=P.p9("")
+if(typeof z!=="number")throw H.s(z)
+v=0
+for(;v<z;++v){u=this.Zv(this,v)
+u=typeof u==="string"?u:H.d(u)
+w.vM=w.vM+u
+if(z!==this.gB(this))throw H.b(P.a4(this))}return w.vM}},
+ev:function(a,b){return P.mW.prototype.ev.call(this,this,b)},
+ez:function(a,b){var z=new H.A8(this,b)
+H.VM(z,[null,null])
+return z},
+es:function(a,b,c){var z,y,x
+z=this.gB(this)
+if(typeof z!=="number")throw H.s(z)
+y=b
+x=0
+for(;x<z;++x){y=c.call$2(y,this.Zv(this,x))
+if(z!==this.gB(this))throw H.b(P.a4(this))}return y},
+eR:function(a,b){return H.j5(this,b,null,null)},
+tt:function(a,b){var z,y,x
+if(b){z=P.A(null,H.W8(this,"aL",0))
+H.VM(z,[H.W8(this,"aL",0)])
+C.Nm.sB(z,this.gB(this))}else{z=P.A(this.gB(this),H.W8(this,"aL",0))
+H.VM(z,[H.W8(this,"aL",0)])}y=0
+while(!0){x=this.gB(this)
+if(typeof x!=="number")throw H.s(x)
+if(!(y<x))break
+x=this.Zv(this,y)
+if(y>=z.length)throw H.e(z,y)
+z[y]=x;++y}return z},
+br:function(a){return this.tt(a,!0)},
+$asmW:null,
+$ascX:null,
+$isqC:true},nH:{"":"aL;Kw,Bz,n1",
+gX1:function(){var z,y
+z=J.q8(this.Kw)
+y=this.n1
+if(y==null||J.xZ(y,z))return z
+return y},
+gtO:function(){var z,y
+z=J.q8(this.Kw)
+y=this.Bz
+if(J.xZ(y,z))return z
+return y},
+gB:function(a){var z,y,x
+z=J.q8(this.Kw)
+y=this.Bz
+if(J.J5(y,z))return 0
+x=this.n1
+if(x==null||J.J5(x,z))return J.xH(z,y)
+return J.xH(x,y)},
+"+length":0,
+Zv:function(a,b){var z=J.WB(this.gtO(),b)
+if(J.u6(b,0)||J.J5(z,this.gX1()))throw H.b(P.TE(b,0,this.gB(this)))
+return J.i4(this.Kw,z)},
+eR:function(a,b){if(b<0)throw H.b(new P.bJ("value "+b))
+return H.j5(this.Kw,J.WB(this.Bz,b),this.n1,null)},
+qZ:function(a,b){var z,y,x
+if(J.u6(b,0))throw H.b(P.N(b))
+z=this.n1
+y=this.Bz
+if(z==null)return H.j5(this.Kw,y,J.WB(y,b),null)
+else{x=J.WB(y,b)
+if(J.u6(z,x))return this
+return H.j5(this.Kw,y,x,null)}},
+Hd:function(a,b,c,d){var z,y,x
+z=this.Bz
+y=J.Wx(z)
+if(y.C(z,0))throw H.b(P.N(z))
+x=this.n1
+if(x!=null){if(J.u6(x,0))throw H.b(P.N(x))
+if(y.D(z,x))throw H.b(P.TE(z,0,x))}},
+$asaL:null,
+$ascX:null,
+static:{j5:function(a,b,c,d){var z=new H.nH(a,b,c)
+H.VM(z,[d])
+z.Hd(a,b,c,d)
+return z}}},a7:{"":"a;Kw,qn,j2,mD",
+gl:function(){return this.mD},
+"+current":0,
+G:function(){var z,y,x,w
+z=this.Kw
+y=J.U6(z)
+x=y.gB(z)
+if(!J.xC(this.qn,x))throw H.b(P.a4(z))
+w=this.j2
+if(typeof x!=="number")throw H.s(x)
+if(w>=x){this.mD=null
+return!1}this.mD=y.Zv(z,w)
+this.j2=this.j2+1
+return!0}},i1:{"":"mW;Kw,ew",
+ei:function(a){return this.ew.call$1(a)},
+gA:function(a){var z=this.Kw
+z=z.gA(z)
+z=new H.MH(null,z,this.ew)
+H.VM(z,[H.W8(this,"i1",0),H.W8(this,"i1",1)])
+return z},
+gB:function(a){var z=this.Kw
+return z.gB(z)},
+"+length":0,
+gl0:function(a){var z=this.Kw
+return z.gl0(z)},
+"+isEmpty":0,
+grZ:function(a){var z=this.Kw
+return this.ei(z.grZ(z))},
+Zv:function(a,b){var z=this.Kw
+return this.ei(z.Zv(z,b))},
+$asmW:function(a,b){return[b]},
+$ascX:function(a,b){return[b]},
+static:{K1:function(a,b,c,d){var z
+if(!!a.$isqC){z=new H.xy(a,b)
+H.VM(z,[c,d])
+return z}z=new H.i1(a,b)
+H.VM(z,[c,d])
+return z}}},xy:{"":"i1;Kw,ew",$asi1:null,
+$ascX:function(a,b){return[b]},
+$isqC:true},MH:{"":"eL;mD,RX,ew",
+ei:function(a){return this.ew.call$1(a)},
+G:function(){var z=this.RX
+if(z.G()){this.mD=this.ei(z.gl())
+return!0}this.mD=null
+return!1},
+gl:function(){return this.mD},
+"+current":0,
+$aseL:function(a,b){return[b]}},A8:{"":"aL;qb,ew",
+ei:function(a){return this.ew.call$1(a)},
+gB:function(a){return J.q8(this.qb)},
+"+length":0,
+Zv:function(a,b){return this.ei(J.i4(this.qb,b))},
+$asaL:function(a,b){return[b]},
+$ascX:function(a,b){return[b]},
+$isqC:true},U5:{"":"mW;Kw,ew",
+gA:function(a){var z=J.GP(this.Kw)
+z=new H.SO(z,this.ew)
+H.VM(z,[H.W8(this,"U5",0)])
+return z},
+$asmW:null,
+$ascX:null},SO:{"":"eL;RX,ew",
+ei:function(a){return this.ew.call$1(a)},
+G:function(){for(var z=this.RX;z.G();)if(this.ei(z.gl())===!0)return!0
+return!1},
+gl:function(){return this.RX.gl()},
+"+current":0,
+$aseL:null},zs:{"":"mW;Kw,ew",
+gA:function(a){var z=J.GP(this.Kw)
+z=new H.rR(z,this.ew,C.Gw,null)
+H.VM(z,[H.W8(this,"zs",0),H.W8(this,"zs",1)])
+return z},
+$asmW:function(a,b){return[b]},
+$ascX:function(a,b){return[b]}},rR:{"":"a;RX,ew,IO,mD",
+ei:function(a){return this.ew.call$1(a)},
+gl:function(){return this.mD},
+"+current":0,
+G:function(){if(this.IO==null)return!1
+for(var z=this.RX;!this.IO.G();){this.mD=null
+if(z.G()){this.IO=null
+this.IO=J.GP(this.ei(z.gl()))}else return!1}this.mD=this.IO.gl()
+return!0}},AM:{"":"mW;Kw,xZ",
+eR:function(a,b){if(b<0)throw H.b(new P.bJ("value "+b))
+return H.ke(this.Kw,this.xZ+b,H.W8(this,"AM",0))},
+gA:function(a){var z=this.Kw
+z=z.gA(z)
+z=new H.U1(z,this.xZ)
+H.VM(z,[H.W8(this,"AM",0)])
+return z},
+q1:function(a,b,c){if(this.xZ<0)throw H.b(P.C3(this.xZ))},
+$asmW:null,
+$ascX:null,
+static:{ke:function(a,b,c){var z,y
+if(!!a.$isqC){z=c
+y=new H.d5(a,b)
+H.VM(y,[z])
+y.q1(a,b,z)
+return y}return H.bk(a,b,c)},bk:function(a,b,c){var z=new H.AM(a,b)
+H.VM(z,[c])
+z.q1(a,b,c)
+return z}}},d5:{"":"AM;Kw,xZ",
+gB:function(a){var z,y
+z=this.Kw
+y=J.xH(z.gB(z),this.xZ)
+if(J.J5(y,0))return y
+return 0},
+"+length":0,
+$asAM:null,
+$ascX:null,
+$isqC:true},U1:{"":"eL;RX,xZ",
+G:function(){var z,y
+for(z=this.RX,y=0;y<this.xZ;++y)z.G()
+this.xZ=0
+return z.G()},
+gl:function(){return this.RX.gl()},
+"+current":0,
+$aseL:null},SJ:{"":"a;",
+G:function(){return!1},
+gl:function(){return},
+"+current":0},SU:{"":"a;",
+sB:function(a,b){throw H.b(P.f("Cannot change the length of a fixed-length list"))},
+"+length=":0,
+h:function(a,b){throw H.b(P.f("Cannot add to a fixed-length list"))},
+Rz:function(a,b){throw H.b(P.f("Cannot remove from a fixed-length list"))}},Tv:{"":"a;",
+u:function(a,b,c){throw H.b(P.f("Cannot modify an unmodifiable list"))},
+"+[]=:2:0":0,
+sB:function(a,b){throw H.b(P.f("Cannot change the length of an unmodifiable list"))},
+"+length=":0,
+h:function(a,b){throw H.b(P.f("Cannot add to an unmodifiable list"))},
+Rz:function(a,b){throw H.b(P.f("Cannot remove from an unmodifiable list"))},
+YW:function(a,b,c,d,e){throw H.b(P.f("Cannot modify an unmodifiable list"))},
+$isList:true,
+$asWO:null,
+$isqC:true,
+$iscX:true,
+$ascX:null},XC:{"":"ar+Tv;",$asar:null,$asWO:null,$ascX:null,$isList:true,$isqC:true,$iscX:true},iK:{"":"aL;qb",
+gB:function(a){return J.q8(this.qb)},
+"+length":0,
+Zv:function(a,b){var z,y
+z=this.qb
+y=J.U6(z)
+return y.Zv(z,J.xH(J.xH(y.gB(z),1),b))},
+$asaL:null,
+$ascX:null},GD:{"":"a;hr>",
+n:function(a,b){var z
+if(b==null)return!1
+z=J.x(b)
+return typeof b==="object"&&b!==null&&!!z.$isGD&&J.xC(this.hr,b.hr)},
+giO:function(a){return 536870911&664597*J.v1(this.hr)},
+bu:function(a){return"Symbol(\""+H.d(this.hr)+"\")"},
+$isGD:true,
+$iswv:true,
+static:{"":"zP",le:function(a){var z=J.U6(a)
+if(z.gl0(a)===!0)return a
+if(z.nC(a,"_"))throw H.b(new P.AT("\""+H.d(a)+"\" is a private identifier"))
+z=$.R0().SQ
+if(typeof a!=="string")H.vh(new P.AT(a))
+if(!z.test(a))throw H.b(new P.AT("\""+H.d(a)+"\" is not an identifier or an empty String"))
+return a}}}}],["dart._js_mirrors","dart:_js_mirrors",,H,{YC:function(a){if(a==null)return
+return new H.GD(a)},X7:function(a){return H.YC(H.d(J.Z0(a))+"=")},vn:function(a){var z=J.x(a)
+if(typeof a==="object"&&a!==null&&!!z.$isTp)return new H.Sz(a)
+else return new H.iu(a)},jO:function(a){var z,y
+z=$.Sl()
+y=z.t(z,a)
+return H.tT(H.YC(y==null?a:y),a)},tT:function(a,b){var z,y,x,w,v,u,t,s,r,q,p
+if($.tY==null)$.tY=H.Pq()
+z=$.tY[b]
+if(z!=null)return z
+y=J.U6(b)
+x=y.u8(b,"<")
+if(x!==-1){w=H.jO(y.JT(b,0,x))
+z=new H.bl(w,y.JT(b,x+1,J.xH(y.gB(b),1)),null,null,null,null,null,null,null,null,null,null,null,w.gIf())
+$.tY[b]=z
+return z}v=H.pL(b)
+if(v==null){u=init.functionAliases[b]
+if(u!=null){z=new H.ng(b,null,a)
+z.CM=new H.Ar(init.metadata[u],null,null,null,z)
+$.tY[b]=z
+return z}throw H.b(P.f("Cannot find class for: "+H.d(a.hr)))}y=J.x(v)
+t=typeof v==="object"&&v!==null&&!!y.$isGv?v.constructor:v
+s=t["@"]
+if(s==null){r=null
+q=null}else{r=s[""]
+y=J.U6(r)
+if(typeof r==="object"&&r!==null&&(r.constructor===Array||!!y.$isList)){w=y.Mu(r,1,y.gB(r))
+q=w.br(w)
+r=y.t(r,0)}else q=null
+if(typeof r!=="string")r=""}y=J.uH(r,";")
+if(0>=y.length)throw H.e(y,0)
+p=J.uH(y[0],"+")
+if(p.length>1){y=$.Sl()
+y=y.t(y,b)==null}else y=!1
+z=y?H.MJ(p,b):new H.Wf(b,v,r,q,H.Pq(),null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,a)
+$.tY[b]=z
+return z},Vv:function(a){var z,y,x
+z=P.L5(null,null,null,null,null)
+for(y=J.GP(a);y.G();){x=y.gl()
+if(!x.gxV()&&!x.glT()&&!x.ghB())z.u(z,x.gIf(),x)}return z},Fk:function(a){var z,y,x
+z=P.L5(null,null,null,null,null)
+for(y=J.GP(a);y.G();){x=y.gl()
+if(x.gxV())z.u(z,x.gIf(),x)}return z},vE:function(a,b){var z,y,x,w,v,u
+z=P.L5(null,null,null,null,null)
+z.Ay(z,b)
+for(y=J.GP(a);y.G();){x=y.gl()
+if(x.ghB()){w=J.Z0(x.gIf())
+v=J.U6(w)
+v=z.t(z,H.YC(v.JT(w,0,J.xH(v.gB(w),1))))
+u=J.x(v)
+if(typeof v==="object"&&v!==null&&!!u.$isRY)continue}if(x.gxV())continue
+z.to(x.gIf(),new H.YX(x))}return z},MJ:function(a,b){var z,y,x,w,v,u,t
+z=[]
+for(y=new H.a7(a,a.length,0,null),H.VM(y,[H.W8(a,"Q",0)]);y.G();){x=y.mD
+w=$.Sl()
+v=w.t(w,x)
+z.push(H.tT(H.YC(v==null?x:v),x))}u=new H.a7(z,z.length,0,null)
+H.VM(u,[H.W8(z,"Q",0)])
+u.G()
+t=u.mD
+for(;u.G();)t=new H.BI(t,u.mD,null,H.YC(b))
+return t},w2:function(a,b){var z,y,x
+z=J.U6(a)
+y=0
+while(!0){x=z.gB(a)
+if(typeof x!=="number")throw H.s(x)
+if(!(y<x))break
+if(J.xC(z.t(a,y).gIf(),H.YC(b)))return y;++y}throw H.b(new P.AT("Type variable not present in list."))},Jf:function(a,b){var z,y,x,w,v,u
+z={}
+z.a=null
+for(y=a;y!=null;){x=J.x(y)
+if(typeof y==="object"&&y!==null&&!!x.$isMs){z.a=y
+break}y=y.gh7()}if(b==null)return $.Cr()
+else{x=z.a
+if(x==null)w=H.Ko(b,null)
+else if(x.gHA())if(typeof b==="number"&&Math.floor(b)===b){v=init.metadata[b]
+u=x.gNy()
+return J.UQ(u,H.w2(u,J.DA(v)))}else w=H.Ko(b,null)
+else w=H.Ko(b,new H.jB(z))}if(w!=null)return H.jO(new H.cu(w,null).IE)
+return P.re(C.yQ)},fb:function(a,b){if(a==null)return b
+return H.YC(H.d(J.Z0(a.gvd()))+"."+H.d(J.Z0(b)))},pj:function(a){var z,y,x,w
+z=a["@"]
+if(z!=null)return z()
+if(typeof a!=="function")return C.xD
+y=Function.prototype.toString.call(a)
+x=C.xB.cn(y,new H.VR(H.v4("\"[0-9,]*\";?[ \n\r]*}",!1,!0,!1),null,null))
+if(x===-1)return C.xD;++x
+w=new H.A8(C.xB.JT(y,x,C.xB.XU(y,"\"",x)).split(","),P.ya)
+H.VM(w,[null,null])
+w=new H.A8(w,new H.ye())
+H.VM(w,[null,null])
+return w.br(w)},jw:function(a,b,c,d){var z,y,x,w,v,u,t,s,r
+z=J.U6(b)
+if(typeof b==="object"&&b!==null&&(b.constructor===Array||!!z.$isList)){y=H.Mk(z.t(b,0),",")
+x=z.Jk(b,1)}else{y=typeof b==="string"?H.Mk(b,","):[]
+x=null}for(z=new H.a7(y,y.length,0,null),H.VM(z,[H.W8(y,"Q",0)]),w=x!=null,v=0;z.G();){u=z.mD
+if(w){t=v+1
+if(v>=x.length)throw H.e(x,v)
+s=x[v]
+v=t}else s=null
+r=H.pS(u,s,a,c)
+if(r!=null)d.push(r)}},Mk:function(a,b){var z=J.U6(a)
+if(z.gl0(a)===!0){z=[]
+H.VM(z,[J.O])
+return z}return z.Fr(a,b)},BF:function(a){switch(a){case"==":case"[]":case"*":case"/":case"%":case"~/":case"+":case"<<":case">>":case">=":case">":case"<=":case"<":case"&":case"^":case"|":case"-":case"unary-":case"[]=":case"~":return!0
+default:return!1}},Y6:function(a){var z,y
+z=J.x(a)
+if(z.n(a,"")||z.n(a,"$methodsWithOptionalArguments"))return!0
+y=z.t(a,0)
+z=J.x(y)
+return z.n(y,"*")||z.n(y,"+")},Sn:{"":"a;L5,F1>",
+gvU:function(){var z,y,x,w
+z=this.L5
+if(z!=null)return z
+y=P.L5(null,null,null,null,null)
+for(z=$.vK(),z=z.gUQ(z),x=z.Kw,x=x.gA(x),x=new H.MH(null,x,z.ew),H.VM(x,[H.W8(z,"i1",0),H.W8(z,"i1",1)]);x.G();)for(z=J.GP(x.mD);z.G();){w=z.gl()
+y.u(y,w.gFP(),w)}z=new H.Gj(y)
+H.VM(z,[P.iD,P.D4])
+this.L5=z
+return z},
+static:{"":"QG,RC,Ct",dF:function(){var z,y,x,w,v,u,t,s,r,q,p,o,n,m,l
+z=P.L5(null,null,null,J.O,[J.Q,P.D4])
+y=init.libraries
+if(y==null)return z
+for(y.toString,x=new H.a7(y,y.length,0,null),H.VM(x,[H.W8(y,"Q",0)]);x.G();){w=x.mD
+v=J.U6(w)
+u=v.t(w,0)
+t=v.t(w,1)
+s=P.r6($.cO().ej(t))
+r=v.t(w,2)
+q=v.t(w,3)
+p=v.t(w,4)
+o=v.t(w,5)
+n=v.t(w,6)
+m=v.t(w,7)
+l=p==null?C.xD:p()
+J.bi(z.to(u,new H.nI()),new H.Uz(s,r,q,l,o,n,m,null,null,null,null,null,null,null,null,null,null,H.YC(u)))}return z}}},nI:{"":"Tp;",
+call$0:function(){var z=[]
+H.VM(z,[P.D4])
+return z},
+"+call:0:0":0,
+$isEH:true,
+$is_X0:true},jU:{"":"a;",
+bu:function(a){return this.gOO()},
+IB:function(a){throw H.b(P.SY(null))},
+Hy:function(a,b){throw H.b(P.SY(null))},
+$isQF:true},Lj:{"":"jU;MA",
+gOO:function(){return"Isolate"},
+gcZ:function(){var z=$.At().gvU().nb
+z=z.gUQ(z)
+return z.XG(z,new H.mb())},
+$isQF:true},mb:{"":"Tp;",
+call$1:function(a){return a.grv()},
+"+call:1:0":0,
+$isEH:true,
+$is_HB:true,
+$is_Dv:true},am:{"":"jU;If<",
+gvd:function(){return H.fb(this.gh7(),this.gIf())},
+gkw:function(){return J.co(J.Z0(this.gIf()),"_")},
+bu:function(a){return this.gOO()+" on '"+H.d(J.Z0(this.gIf()))+"'"},
+gEO:function(){throw H.b(H.Pa("Should not call _methods"))},
+qj:function(a,b){throw H.b(H.Pa("Should not call _invoke"))},
+gmW:function(a){return H.vh(P.SY(null))},
+$isNL:true,
+$isQF:true},cw:{"":"EE;h7<,xW,LQ,If",
+n:function(a,b){var z
+if(b==null)return!1
+z=J.x(b)
+return typeof b==="object"&&b!==null&&!!z.$iscw&&J.xC(this.If,b.If)&&J.xC(this.h7,b.h7)},
+giO:function(a){return(1073741823&J.v1(C.Gp.IE)^17*J.v1(this.If)^19*J.v1(this.h7))>>>0},
+gOO:function(){return"TypeVariableMirror"},
+$iscw:true,
+$isFw:true,
+$isL9u:true,
+$isNL:true,
+$isQF:true},EE:{"":"am;If",
+gOO:function(){return"TypeMirror"},
+gh7:function(){return},
+gc9:function(){return H.vh(P.SY(null))},
+gNy:function(){return C.dn},
+gw8:function(){return C.hU},
+gHA:function(){return!0},
+gJi:function(){return this},
+$isL9u:true,
+$isNL:true,
+$isQF:true},Uz:{"":"uh;FP<,aP,wP,le,LB,rv<,ae<,SD,tB,P8,mX,T1,Ly,M2,uA,Db,Ok,If",
+gOO:function(){return"LibraryMirror"},
+gvd:function(){return this.If},
+gEO:function(){return this.gm8()},
+gDD:function(a){var z,y,x,w,v,u
+z=this.P8
+if(z!=null)return z
+y=P.L5(null,null,null,null,null)
+for(z=J.GP(this.aP);z.G();){x=z.gl()
+w=$.Sl()
+v=w.t(w,x)
+u=H.tT(H.YC(v==null?x:v),x)
+w=J.x(u)
+if(typeof u==="object"&&u!==null&&!!w.$isWf){y.u(y,u.If,u)
+u.nz=this}}z=new H.Gj(y)
+H.VM(z,[P.wv,P.Ms])
+this.P8=z
+return z},
+PU:function(a,b){var z,y,x,w
+z=a.ghr(a)
+if(z.Tc(z,"="))throw H.b(new P.AT(""))
+y=this.gmu()
+x=H.YC(H.d(z)+"=")
+y=y.nb
+w=y.t(y,x)
+if(w==null){y=this.gZ3().nb
+w=y.t(y,a)}if(w==null)throw H.b(P.lr(this,H.X7(a),[b],null,null))
+w.Hy(this,b)
+return H.vn(b)},
+"+setField:2:0":0,
+rN:function(a){var z,y
+z=this.glc(this).nb
+y=z.t(z,a)
+if(y==null)throw H.b(P.lr(this,a,[],null,null))
+return H.vn(y.IB(this))},
+"+getField:1:0":0,
+F2:function(a,b,c){var z,y
+z=this.glc(this).nb
+y=z.t(z,a)
+if(y==null)throw H.b(P.lr(this,a,b,c,null))
+z=J.x(y)
+if(typeof y==="object"&&y!==null&&!!z.$isZk)if(!("$reflectable" in y.dl))H.Hz(J.Z0(a))
+return H.vn(y.qj(b,c))},
+"+invoke:3:0":0,
+"*invoke":[40],
+CI:function(a,b){return this.F2(a,b,null)},
+"+invoke:2:0":0,
+Z0:function(a){return $[a]},
+H7:function(a,b){$[a]=b},
+gm8:function(){var z,y,x,w,v,u,t,s,r,q,p
+z=this.SD
+if(z!=null)return z
+y=P.A(null,H.Zk)
+H.VM(y,[H.Zk])
+z=this.wP
+x=J.U6(z)
+w=this.ae
+v=0
+while(!0){u=x.gB(z)
+if(typeof u!=="number")throw H.s(u)
+if(!(v<u))break
+c$0:{t=x.t(z,v)
+s=w[t]
+u=$.Sl()
+r=u.t(u,t)
+if(r==null)break c$0
+u=J.rY(r)
+q=u.nC(r,"new ")
+if(q){u=u.yn(r,4)
+r=H.ys(u,"$",".")}p=H.Sd(r,s,!q,q)
+y.push(p)
+p.nz=this}++v}this.SD=y
+return y},
+gKn:function(){var z,y
+z=this.tB
+if(z!=null)return z
+y=[]
+H.VM(y,[P.RY])
+H.jw(this,this.LB,!0,y)
+this.tB=y
+return y},
+gmu:function(){var z,y,x,w
+z=this.mX
+if(z!=null)return z
+y=P.L5(null,null,null,null,null)
+for(z=this.gm8(),z.toString,x=new H.a7(z,z.length,0,null),H.VM(x,[H.W8(z,"Q",0)]);x.G();){w=x.mD
+if(!w.gxV())y.u(y,w.gIf(),w)}z=new H.Gj(y)
+H.VM(z,[P.wv,P.RS])
+this.mX=z
+return z},
+gII:function(){var z=this.T1
+if(z!=null)return z
+z=new H.Gj(P.L5(null,null,null,null,null))
+H.VM(z,[P.wv,P.RS])
+this.T1=z
+return z},
+gF8:function(){var z=this.Ly
+if(z!=null)return z
+z=new H.Gj(P.L5(null,null,null,null,null))
+H.VM(z,[P.wv,P.RS])
+this.Ly=z
+return z},
+gZ3:function(){var z,y,x,w
+z=this.M2
+if(z!=null)return z
+y=P.L5(null,null,null,null,null)
+for(z=this.gKn(),z.toString,x=new H.a7(z,z.length,0,null),H.VM(x,[H.W8(z,"Q",0)]);x.G();){w=x.mD
+y.u(y,w.gIf(),w)}z=new H.Gj(y)
+H.VM(z,[P.wv,P.RY])
+this.M2=z
+return z},
+glc:function(a){var z,y,x
+z=this.uA
+if(z!=null)return z
+z=this.gDD(this)
+y=P.L5(null,null,null,null,null)
+y.Ay(y,z)
+z=new H.Kv(y)
+x=this.gmu().nb
+x.aN(x,z)
+x=this.gII().nb
+x.aN(x,z)
+x=this.gF8().nb
+x.aN(x,z)
+x=this.gZ3().nb
+x.aN(x,z)
+z=new H.Gj(y)
+H.VM(z,[P.wv,P.QF])
+this.uA=z
+return z},
+"+members":0,
+gYK:function(){var z,y
+z=this.Db
+if(z!=null)return z
+y=P.L5(null,null,null,P.wv,P.NL)
+z=this.glc(this).nb
+z.aN(z,new H.oP(y))
+z=new H.Gj(y)
+H.VM(z,[P.wv,P.NL])
+this.Db=z
+return z},
+"+declarations":0,
+gc9:function(){var z=this.Ok
+if(z!=null)return z
+z=new P.Yp(J.C0(this.le,H.Yf))
+H.VM(z,[P.vr])
+this.Ok=z
+return z},
+gh7:function(){return},
+$isD4:true,
+$isQF:true,
+$isNL:true},uh:{"":"am+M2;",$isQF:true},Kv:{"":"Tp;a",
+call$2:function(a,b){var z=this.a
+z.u(z,a,b)},
+"+call:2:0":0,
+$isEH:true,
+$is_bh:true},oP:{"":"Tp;a",
+call$2:function(a,b){var z=this.a
+z.u(z,a,b)},
+"+call:2:0":0,
+$isEH:true,
+$is_bh:true},YX:{"":"Tp;a",
+call$0:function(){return this.a},
+"+call:0:0":0,
+$isEH:true,
+$is_X0:true},BI:{"":"y1;AY<,XW,BB,If",
+gOO:function(){return"ClassMirror"},
+gIf:function(){var z,y
+z=this.BB
+if(z!=null)return z
+y=J.Z0(this.AY.gvd())
+z=this.XW
+z=J.kE(y," with ")===!0?H.YC(H.d(y)+", "+H.d(J.Z0(z.gvd()))):H.YC(H.d(y)+" with "+H.d(J.Z0(z.gvd())))
+this.BB=z
+return z},
+gvd:function(){return this.gIf()},
+glc:function(a){return J.GK(this.XW)},
+"+members":0,
+gtx:function(){return this.XW.gtx()},
+gZ3:function(){return this.XW.gZ3()},
+gYK:function(){return this.XW.gYK()},
+"+declarations":0,
+F2:function(a,b,c){throw H.b(P.lr(this,a,b,c,null))},
+"+invoke:3:0":0,
+"*invoke":[40],
+CI:function(a,b){return this.F2(a,b,null)},
+"+invoke:2:0":0,
+rN:function(a){throw H.b(P.lr(this,a,null,null,null))},
+"+getField:1:0":0,
+PU:function(a,b){throw H.b(P.lr(this,H.X7(a),[b],null,null))},
+"+setField:2:0":0,
+gkZ:function(){return[this.XW]},
+gHA:function(){return!0},
+gJi:function(){return this},
+gNy:function(){throw H.b(P.SY(null))},
+gw8:function(){return C.hU},
+$isMs:true,
+$isQF:true,
+$isL9u:true,
+$isNL:true},y1:{"":"EE+M2;",$isQF:true},M2:{"":"a;",$isQF:true},iu:{"":"M2;Ax<",
+gr9:function(a){return H.jO(J.bB(this.Ax).IE)},
+F2:function(a,b,c){var z,y
+z=J.Z0(a)
+y=z+":"+b.length+":0"
+return this.tu(a,0,y,b)},
+"+invoke:3:0":0,
+"*invoke":[40],
+CI:function(a,b){return this.F2(a,b,null)},
+"+invoke:2:0":0,
+tu:function(a,b,c,d){var z,y,x,w,v,u,t,s
+z=$.eb
+y=this.Ax
+x=y.constructor[z]
+if(x==null){x=H.Pq()
+y.constructor[z]=x}w=x[c]
+if(w==null){v=$.I6()
+u=v.t(v,c)
+if(b===0){v=H.j5(J.uH(c,":"),3,null,null)
+t=v.br(v)}else t=C.xD
+s=new H.LI(a,u,b,d,t,null)
+w=s.Yd(y)
+x[c]=w}else s=null
+if(w.gpf()){if(s==null){v=$.I6()
+s=new H.LI(a,v.t(v,c),b,d,[],null)}return H.vn(w.Bj(y,s))}else return H.vn(w.Bj(y,d))},
+PU:function(a,b){var z=H.d(J.Z0(a))+"="
+this.tu(H.YC(z),2,z,[b])
+return H.vn(b)},
+"+setField:2:0":0,
+rN:function(a){return this.tu(a,1,J.Z0(a),[])},
+"+getField:1:0":0,
+n:function(a,b){var z,y
+if(b==null)return!1
+z=J.x(b)
+if(typeof b==="object"&&b!==null&&!!z.$isiu){z=this.Ax
+y=b.Ax
+y=z==null?y==null:z===y
+z=y}else z=!1
+return z},
+giO:function(a){return(H.CU(this.Ax)^909522486)>>>0},
+bu:function(a){return"InstanceMirror on "+H.d(P.hl(this.Ax))},
+$isiu:true,
+$isvr:true,
+$isQF:true},mg:{"":"Tp;",
+call$1:function(a){return init.metadata[a]},
+"+call:1:0":0,
+$isEH:true,
+$is_HB:true,
+$is_Dv:true},zE:{"":"Tp;a",
+call$2:function(a,b){var z,y
+z=J.Z0(a)
+y=this.a
+if(y.x4(z))y.u(y,z,b)
+else throw H.b(H.WE("Invoking noSuchMethod with named arguments not implemented"))},
+"+call:2:0":0,
+$isEH:true,
+$is_bh:true},bl:{"":"am;NK,EZ,ut,Db,uA,b0,M2,T1,Ly,FU,jd,qN,qm,If",
+gOO:function(){return"ClassMirror"},
+gWL:function(){return H.d(this.NK.gWL())+"<"+this.EZ+">"},
+"+_mangledName":0,
+gNy:function(){return this.NK.gNy()},
+gw8:function(){var z,y,x,w,v,u,t,s
+z=this.ut
+if(z!=null)return z
+y=P.A(null,null)
+z=new H.Ef(y)
+x=this.EZ
+if(C.xB.u8(x,"<")===-1)H.bQ(x.split(","),new H.Tc(z))
+else{for(w=x.length,v=0,u="",t=0;t<w;++t){s=x[t]
+if(s===" ")continue
+else if(s==="<"){u+=s;++v}else if(s===">"){u+=s;--v}else if(s===",")if(v>0)u+=s
+else{z.call$1(u)
+u=""}else u+=s}z.call$1(u)}z=new P.Yp(y)
+H.VM(z,[null])
+this.ut=z
+return z},
+gEO:function(){var z=this.jd
+if(z!=null)return z
+z=this.NK.ly(this)
+this.jd=z
+return z},
+gtx:function(){var z=this.FU
+if(z!=null)return z
+z=new H.Gj(H.Vv(this.gEO()))
+H.VM(z,[P.wv,P.RS])
+this.FU=z
+return z},
+gDI:function(){var z=this.b0
+if(z!=null)return z
+z=new H.Gj(H.Fk(this.gEO()))
+H.VM(z,[P.wv,P.RS])
+this.b0=z
+return z},
+gZ3:function(){var z,y,x,w
+z=this.M2
+if(z!=null)return z
+y=P.L5(null,null,null,null,null)
+for(z=this.NK.ws(this),x=new H.a7(z,z.length,0,null),H.VM(x,[H.W8(z,"Q",0)]);x.G();){w=x.mD
+y.u(y,w.gIf(),w)}z=new H.Gj(y)
+H.VM(z,[P.wv,P.RY])
+this.M2=z
+return z},
+glc:function(a){var z=this.uA
+if(z!=null)return z
+z=new H.Gj(H.vE(this.gEO(),this.gZ3()))
+H.VM(z,[P.wv,P.NL])
+this.uA=z
+return z},
+"+members":0,
+gYK:function(){var z,y
+z=this.Db
+if(z!=null)return z
+y=P.L5(null,null,null,P.wv,P.NL)
+y.Ay(y,this.glc(this))
+y.Ay(y,this.gDI())
+J.kH(this.NK.gNy(),new H.Ax(y))
+z=new H.Gj(y)
+H.VM(z,[P.wv,P.NL])
+this.Db=z
+return z},
+"+declarations":0,
+PU:function(a,b){return this.NK.PU(a,b)},
+"+setField:2:0":0,
+rN:function(a){return this.NK.rN(a)},
+"+getField:1:0":0,
+gh7:function(){return this.NK.gh7()},
+gc9:function(){return this.NK.gc9()},
+gAY:function(){var z=this.qN
+if(z!=null)return z
+z=H.Jf(this,init.metadata[J.UQ(init.typeInformation[this.NK.gWL()],0)])
+this.qN=z
+return z},
+F2:function(a,b,c){return this.NK.F2(a,b,c)},
+"+invoke:3:0":0,
+"*invoke":[40],
+CI:function(a,b){return this.F2(a,b,null)},
+"+invoke:2:0":0,
+gHA:function(){return!1},
+gJi:function(){return this.NK},
+gkZ:function(){var z=this.qm
+if(z!=null)return z
+z=this.NK.MR(this)
+this.qm=z
+return z},
+gmW:function(a){return J.UX(this.NK)},
+gvd:function(){return this.NK.gvd()},
+gIf:function(){return this.NK.gIf()},
+$isMs:true,
+$isQF:true,
+$isL9u:true,
+$isNL:true},Ef:{"":"Tp;a",
+call$1:function(a){var z,y,x
+z=H.BU(a,null,new H.Oo())
+y=this.a
+if(J.xC(z,-1))y.push(H.jO(J.rr(a)))
+else{x=init.metadata[z]
+y.push(new H.cw(P.re(x.gh7()),x,null,H.YC(J.DA(x))))}},
+"+call:1:0":0,
+$isEH:true,
+$is_HB:true,
+$is_Dv:true},Oo:{"":"Tp;",
+call$1:function(a){return-1},
+"+call:1:0":0,
+$isEH:true,
+$is_HB:true,
+$is_Dv:true},Tc:{"":"Tp;b",
+call$1:function(a){return this.b.call$1(a)},
+"+call:1:0":0,
+$isEH:true,
+$is_HB:true,
+$is_Dv:true},Ax:{"":"Tp;a",
+call$1:function(a){var z=this.a
+z.u(z,a.gIf(),a)
+return a},
+"+call:1:0":0,
+$isEH:true,
+$is_HB:true,
+$is_Dv:true},Wf:{"":"Un;WL<-,Tx<-,H8<-,Ht<-,pz<-,le@-,qN@-,jd@-,tB@-,b0@-,FU@-,T1@-,Ly@-,M2@-,uA@-,Db@-,Ok@-,qm@-,UF@-,nz@-,If",
+gOO:function(){return"ClassMirror"
+"8"},
+"+_prettyName":1,
+gaB:function(){var z,y
+z=this.Tx
+y=J.x(z)
+if(typeof z==="object"&&z!==null&&!!y.$isGv)return z.constructor
+else return z
+"40"},
+"+_jsConstructor":1,
+gDI:function(){var z=this.b0
+if(z!=null)return z
+z=new H.Gj(H.Fk(this.gEO()))
+H.VM(z,[P.wv,P.RS])
+this.b0=z
+return z
+"52"},
+"+constructors":1,
+ly:function(a){var z,y,x,w,v,u,t,s,r,q,p,o,n,m,l,k
+z=this.gaB().prototype
+y=(function(victim, hasOwnProperty) {
+ var result = [];
+ for (var key in victim) {
+ if (hasOwnProperty.call(victim, key)) result.push(key);
+ }
+ return result;
+})(z, Object.prototype.hasOwnProperty)
+x=[]
+H.VM(x,[H.Zk])
+for(w=J.GP(y);w.G();){v=w.gl()
+if(H.Y6(v))continue
+u=$.bx()
+t=u.t(u,v)
+if(t==null)continue
+s=H.Sd(t,z[v],!1,!1)
+x.push(s)
+s.nz=a}y=(function(victim, hasOwnProperty) {
+ var result = [];
+ for (var key in victim) {
+ if (hasOwnProperty.call(victim, key)) result.push(key);
+ }
+ return result;
+})(init.statics[this.WL], Object.prototype.hasOwnProperty)
+w=J.U6(y)
+r=w.gB(y)
+if(typeof r!=="number")throw H.s(r)
+q=0
+for(;q<r;++q){p=w.t(y,q)
+if(H.Y6(p))continue
+o=this.gh7().gae()[p]
+n=q+1
+if(n<r){m=w.t(y,n)
+u=J.rY(m)
+if(u.nC(m,"+")){m=u.yn(m,1)
+l=C.xB.nC(m,"new ")
+if(l){u=C.xB.yn(m,4)
+m=H.ys(u,"$",".")}q=n}else l=!1
+k=m}else{k=p
+l=!1}s=H.Sd(k,o,!l,l)
+x.push(s)
+s.nz=a}return x
+"53,54,55"},
+"+_getMethodsWithOwner:1:0":1,
+gEO:function(){var z=this.jd
+if(z!=null)return z
+z=this.ly(this)
+this.jd=z
+return z
+"53"},
+"+_methods":1,
+ws:function(a){var z,y,x,w
+z=[]
+H.VM(z,[P.RY])
+y=J.uH(this.H8,";")
+if(1>=y.length)throw H.e(y,1)
+x=y[1]
+y=this.Ht
+if(y!=null){x=[x]
+C.Nm.Ay(x,y)}H.jw(a,x,!1,z)
+w=init.statics[this.WL]
+if(w!=null)H.jw(a,w[""],!0,z)
+return z
+"56,57,55"},
+"+_getFieldsWithOwner:1:0":1,
+gKn:function(){var z=this.tB
+if(z!=null)return z
+z=this.ws(this)
+this.tB=z
+return z
+"56"},
+"+_fields":1,
+gtx:function(){var z=this.FU
+if(z!=null)return z
+z=new H.Gj(H.Vv(this.gEO()))
+H.VM(z,[P.wv,P.RS])
+this.FU=z
+return z
+"52"},
+"+methods":1,
+gZ3:function(){var z,y,x
+z=this.M2
+if(z!=null)return z
+y=P.L5(null,null,null,null,null)
+for(z=J.GP(this.gKn());z.G();){x=z.gl()
+y.u(y,x.gIf(),x)}z=new H.Gj(y)
+H.VM(z,[P.wv,P.RY])
+this.M2=z
+return z
+"58"},
+"+variables":1,
+glc:function(a){var z=this.uA
+if(z!=null)return z
+z=new H.Gj(H.vE(this.gEO(),this.gZ3()))
+H.VM(z,[P.wv,P.QF])
+this.uA=z
+return z
+"59"},
+"+members":1,
+gYK:function(){var z,y
+z=this.Db
+if(z!=null)return z
+y=P.L5(null,null,null,P.wv,P.NL)
+z=new H.Ei(y)
+J.kH(this.glc(this),z)
+J.kH(this.gDI(),z)
+J.kH(this.gNy(),new H.U7(y))
+z=new H.Gj(y)
+H.VM(z,[P.wv,P.NL])
+this.Db=z
+return z
+"60"},
+"+declarations":1,
+PU:function(a,b){var z,y
+z=J.UQ(this.gZ3(),a)
+if(z!=null&&z.gFo()&&!z.gV5()){y=z.gao()
+if(!(y in $))throw H.b(H.Pa("Cannot find \""+y+"\" in current isolate."))
+$[y]=b
+return H.vn(b)}throw H.b(P.lr(this,H.X7(a),[b],null,null))
+"61,62,63,64,0"},
+"+setField:2:0":1,
+rN:function(a){var z,y
+z=J.UQ(this.gZ3(),a)
+if(z!=null&&z.gFo()){y=z.gao()
+if(!(y in $))throw H.b(H.Pa("Cannot find \""+y+"\" in current isolate."))
+if(y in init.lazies)return H.vn($[init.lazies[y]]())
+else return H.vn($[y])}throw H.b(P.lr(this,a,null,null,null))
+"61,62,63"},
+"+getField:1:0":1,
+gh7:function(){var z,y,x,w,v,u,t
+if(this.nz==null){z=this.Tx
+y=J.x(z)
+if(typeof z==="object"&&z!==null&&!!y.$isGv){x=C.nY.IE
+z=$.Sl()
+w=z.t(z,x)
+this.nz=H.tT(H.YC(w==null?x:w),x).gh7()}else{z=$.vK()
+z=z.gUQ(z)
+y=z.Kw
+y=y.gA(y)
+v=H.Y9(z.$asi1,H.oX(z))
+u=v==null?null:v[0]
+v=H.Y9(z.$asi1,H.oX(z))
+t=v==null?null:v[1]
+z=new H.MH(null,y,z.ew)
+z.$builtinTypeInfo=[u,t]
+for(;z.G();)for(y=J.GP(z.mD);y.G();)J.pP(y.gl())}if(this.nz==null)throw H.b(new P.lj("Class \""+H.d(J.Z0(this.If))+"\" has no owner"))}return this.nz
+"65"},
+"+owner":1,
+gc9:function(){var z=this.Ok
+if(z!=null)return z
+if(this.le==null)this.le=H.pj(this.gaB().prototype)
+z=new P.Yp(J.C0(this.le,H.Yf))
+H.VM(z,[P.vr])
+this.Ok=z
+return z
+"66"},
+"+metadata":1,
+gAY:function(){var z,y,x,w,v,u
+if(this.qN==null){z=init.typeInformation[this.WL]
+if(z!=null)this.qN=H.Jf(this,init.metadata[J.UQ(z,0)])
+else{y=this.H8
+x=J.uH(y,";")
+if(0>=x.length)throw H.e(x,0)
+w=x[0]
+x=J.rY(w)
+v=x.Fr(w,"+")
+u=v.length
+if(u>1){if(u!==2)throw H.b(H.Pa("Strange mixin: "+H.d(y)))
+this.qN=H.jO(v[0])}else this.qN=x.n(w,"")?this:H.jO(w)}}return J.xC(this.qN,this)?null:this.qN
+"67"},
+"+superclass":1,
+F2:function(a,b,c){var z
+if(c!=null&&J.FN(c)!==!0)throw H.b(P.f("Named arguments are not implemented."))
+z=J.UQ(this.gtx(),a)
+if(z==null||!z.gFo())throw H.b(P.lr(this,a,b,c,null))
+if(!z.yR())H.Hz(J.Z0(a))
+return H.vn(z.qj(b,c))
+"61,68,63,69,70,71,72"},
+"+invoke:3:0":1,
+"*invoke":[40],
+CI:function(a,b){return this.F2(a,b,null)},
+"+invoke:2:0":1,
+gHA:function(){return!0
+"44"},
+"+isOriginalDeclaration":1,
+gJi:function(){return this
+"67"},
+"+originalDeclaration":1,
+MR:function(a){var z,y,x
+z=init.typeInformation[this.WL]
+if(z!=null){y=new H.A8(J.Pr(z,1),new H.t0(a))
+H.VM(y,[null,null])
+x=y.br(y)}else x=C.Me
+y=new P.Yp(x)
+H.VM(y,[P.Ms])
+return y
+"73,74,55"},
+"+_getSuperinterfacesWithOwner:1:0":1,
+gkZ:function(){var z=this.qm
+if(z!=null)return z
+z=this.MR(this)
+this.qm=z
+return z
+"73"},
+"+superinterfaces":1,
+gNy:function(){var z,y,x,w,v
+z=this.UF
+if(z!=null)return z
+y=P.A(null,null)
+x=this.gaB().prototype["<>"]
+if(x==null)return y
+for(w=0;w<x.length;++w){v=init.metadata[x[w]]
+y.push(new H.cw(this,v,null,H.YC(J.DA(v))))}z=new P.Yp(y)
+H.VM(z,[null])
+this.UF=z
+return z
+"75"},
+"+typeVariables":1,
+gw8:function(){return C.hU
+"76"},
+"+typeArguments":1,
+$isWf:true,
+$isMs:true,
+$isQF:true,
+$isL9u:true,
+$isNL:true},"+JsClassMirror": [77, 67],Un:{"":"EE+M2;",$isQF:true},Ei:{"":"Tp;a-",
+call$2:function(a,b){J.kW(this.a,a,b)
+"40,78,63,31,79"},
+"+call:2:0":1,
+$isEH:true,
+$is_bh:true},"+JsClassMirror_declarations_addToResult": [80],U7:{"":"Tp;b-",
+call$1:function(a){J.kW(this.b,a.gIf(),a)
+return a
+"40,81,40"},
+"+call:1:0":1,
+$isEH:true,
+$is_HB:true,
+$is_Dv:true},"+JsClassMirror_declarations_closure": [80],t0:{"":"Tp;a-",
+call$1:function(a){return H.Jf(this.a,init.metadata[a])
+"67,82,30"},
+"+call:1:0":1,
+$isEH:true,
+$is_HB:true,
+$is_Dv:true},"+JsClassMirror__getSuperinterfacesWithOwner_lookupType": [80],Ld:{"":"am;ao<,V5<,Fo<,n6,nz,le,If",
+gOO:function(){return"VariableMirror"},
+"+_prettyName":0,
+gr9:function(a){return $.Cr()},
+gh7:function(){return this.nz},
+"+owner":0,
+gc9:function(){if(this.le==null){var z=this.n6
+this.le=z==null?C.xD:z()}z=J.C0(this.le,H.Yf)
+return z.br(z)},
+"+metadata":0,
+IB:function(a){return a.Z0(this.ao)},
+Hy:function(a,b){if(this.V5)throw H.b(P.lr(this,H.X7(this.If),[b],null,null))
+a.H7(this.ao,b)},
+$isRY:true,
+$isNL:true,
+$isQF:true,
+static:{"":"Z8",pS:function(a,b,c,d){var z,y,x,w,v,u,t,s,r,q
+z=J.U6(a)
+y=z.gB(a)
+x=J.Wx(y)
+if(H.GQ(z.j(a,x.W(y,1)))===45){y=x.W(y,1)
+x=J.Wx(y)
+w=H.GQ(z.j(a,x.W(y,1)))}else return
+if(w===0)return
+v=C.jn.m(w,2)===0
+u=z.JT(a,0,x.W(y,1))
+t=z.u8(a,":")
+if(t>0){s=C.xB.JT(u,0,t)
+u=z.yn(a,t+1)}else s=u
+if(d){z=$.Sl()
+r=z.t(z,s)}else{z=$.bx()
+r=z.t(z,"g"+s)}if(r==null)r=s
+if(v){q=H.YC(H.d(r)+"=")
+for(z=J.GP(c.gEO());v=!0,z.G();)if(J.xC(z.gl().gIf(),q)){v=!1
+break}}return new H.Ld(u,v,d,b,c,null,H.YC(r))},GQ:function(a){if(a===45)return a
+if(a>=60&&a<=64)return a-59
+if(a>=123&&a<=126)return a-117
+if(a>=37&&a<=43)return a-27
+return 0}}},Sz:{"":"iu;Ax",
+gMj:function(a){var z,y,x,w,v,u,t,s,r
+z=$.te
+y=this.Ax
+x=y.constructor[z]
+if(x!=null)return x
+w=function(reflectee) {
+ for (var property in reflectee) {
+ if ("call$" == property.substring(0, 5)) return property;
+ }
+ return null;
+}
+(y)
+if(w==null)throw H.b(H.Pa("Cannot find callName on \""+H.d(y)+"\""))
+v=w.split("$")
+if(1>=v.length)throw H.e(v,1)
+u=H.BU(v[1],null,null)
+v=J.RE(y)
+if(typeof y==="object"&&y!==null&&!!v.$isv){t=y.gnn()
+y.gwc()
+s=$.bx()
+r=s.t(s,v.gPp(y))
+if(r==null)H.Hz(r)
+x=H.Sd(r,t,!1,!1)}else x=new H.Zk(y[w],u,!1,!1,!0,!1,!1,null,null,null,null,H.YC(w))
+y.constructor[z]=x
+return x},
+"+function":0,
+bu:function(a){return"ClosureMirror on '"+H.d(P.hl(this.Ax))+"'"},
+gFF:function(a){return H.vh(P.SY(null))},
+"+source":0,
+$isvr:true,
+$isQF:true},Zk:{"":"am;dl,Yq,lT<,hB<,Fo<,xV<,qx,nz,le,G6,Cr,If",
+gOO:function(){return"MethodMirror"},
+"+_prettyName":0,
+gJx:function(){var z=this.Cr
+if(z!=null)return z
+this.gc9()
+return this.Cr},
+yR:function(){return"$reflectable" in this.dl},
+gh7:function(){return this.nz},
+"+owner":0,
+gdw:function(){this.gc9()
+return H.Jf(this.nz,this.G6)},
+gc9:function(){var z,y,x,w,v,u,t,s,r,q,p
+if(this.le==null){z=H.pj(this.dl)
+y=this.Yq
+x=P.A(y,null)
+w=J.U6(z)
+if(w.gl0(z)!==!0){this.G6=w.t(z,0)
+y=J.p0(y,2)
+if(typeof y!=="number")throw H.s(y)
+v=1+y
+for(y=x.length,u=0,t=1;t<v;t+=2,u=q){s=w.t(z,t)
+r=w.t(z,t+1)
+q=u+1
+p=H.YC(s)
+if(u>=y)throw H.e(x,u)
+x[u]=new H.fu(this,r,p)}z=w.Jk(z,v)}else{if(typeof y!=="number")throw H.s(y)
+w=x.length
+t=0
+for(;t<y;++t){p=H.YC("argument"+t)
+if(t>=w)throw H.e(x,t)
+x[t]=new H.fu(this,null,p)}}y=new P.Yp(x)
+H.VM(y,[P.Ys])
+this.Cr=y
+y=new P.Yp(J.C0(z,H.Yf))
+H.VM(y,[null])
+this.le=y}return this.le},
+"+metadata":0,
+qj:function(a,b){if(b!=null&&J.FN(b)!==!0)throw H.b(P.f("Named arguments are not implemented."))
+if(!this.Fo&&!this.xV)throw H.b(H.Pa("Cannot invoke instance method without receiver."))
+if(!J.xC(this.Yq,J.q8(a))||this.dl==null)throw H.b(P.lr(this.nz,this.If,a,b,null))
+return this.dl.apply($,P.F(a,!0,null))},
+IB:function(a){if(this.lT)return this.qj([],null)
+else throw H.b(P.SY("getField on "+H.d(a)))},
+Hy:function(a,b){if(this.hB)return this.qj([b],null)
+else throw H.b(P.lr(this,H.X7(this.If),[],null,null))},
+guU:function(){return!this.lT&&!this.hB&&!this.xV},
+$isZk:true,
+$isRS:true,
+$isNL:true,
+$isQF:true,
+static:{Sd:function(a,b,c,d){var z,y,x,w,v,u,t
+z=J.uH(a,":")
+if(0>=z.length)throw H.e(z,0)
+a=z[0]
+y=H.BF(a)
+x=!y&&J.Eg(a,"=")
+w=z.length
+if(w===1){if(x){v=1
+u=!1}else{v=0
+u=!0}t=0}else{if(1>=w)throw H.e(z,1)
+v=H.BU(z[1],null,null)
+if(2>=z.length)throw H.e(z,2)
+t=H.BU(z[2],null,null)
+u=!1}w=H.YC(a)
+return new H.Zk(b,J.WB(v,t),u,x,c,d,y,null,null,null,null,w)}}},fu:{"":"am;h7<,Ad,If",
+gOO:function(){return"ParameterMirror"},
+"+_prettyName":0,
+gr9:function(a){return H.Jf(this.h7,this.Ad)},
+gFo:function(){return!1},
+gV5:function(){return!1},
+gQ2:function(){return!1},
+gc9:function(){return H.vh(P.SY(null))},
+"+metadata":0,
+$isYs:true,
+$isRY:true,
+$isNL:true,
+$isQF:true},ng:{"":"am;WL<,CM,If",
+gP:function(a){return this.CM},
+"+value":0,
+r6:function(a,b){return this.gP(a).call$1(b)},
+gOO:function(){return"TypedefMirror"},
+"+_prettyName":0,
+$isL9u:true,
+$isNL:true,
+$isQF:true},Ar:{"":"a;d9,o3,yA,zM,h7<",
+gHA:function(){return!0},
+"+isOriginalDeclaration":0,
+gJx:function(){var z,y,x,w,v,u,t
+z=this.zM
+if(z!=null)return z
+y=[]
+z=this.d9
+if("args" in z)for(x=z.args,w=new H.a7(x,x.length,0,null),H.VM(w,[H.W8(x,"Q",0)]),v=0;w.G();v=u){u=v+1
+y.push(new H.fu(this,w.mD,H.YC("argument"+v)))}else v=0
+if("opt" in z)for(x=z.opt,w=new H.a7(x,x.length,0,null),H.VM(w,[H.W8(x,"Q",0)]);w.G();v=u){u=v+1
+y.push(new H.fu(this,w.mD,H.YC("argument"+v)))}if("named" in z)for(x=J.GP((function(victim, hasOwnProperty) {
+ var result = [];
+ for (var key in victim) {
+ if (hasOwnProperty.call(victim, key)) result.push(key);
+ }
+ return result;
+})(z.named, Object.prototype.hasOwnProperty));x.G();){t=x.gl()
+y.push(new H.fu(this,z.named[t],H.YC(t)))}z=new P.Yp(y)
+H.VM(z,[P.Ys])
+this.zM=z
+return z},
+bu:function(a){var z,y,x,w,v,u,t
+z=this.o3
+if(z!=null)return z
+z=this.d9
+if("args" in z)for(y=z.args,x=new H.a7(y,y.length,0,null),H.VM(x,[H.W8(y,"Q",0)]),w="FunctionTypeMirror on '(",v="";x.G();v=", "){u=x.mD
+w=C.xB.g(w+v,H.Ko(u,null))}else{w="FunctionTypeMirror on '("
+v=""}if("opt" in z){w+=v+"["
+for(y=z.opt,x=new H.a7(y,y.length,0,null),H.VM(x,[H.W8(y,"Q",0)]),v="";x.G();v=", "){u=x.mD
+w=C.xB.g(w+v,H.Ko(u,null))}w+="]"}if("named" in z){w+=v+"{"
+for(y=J.GP((function(victim, hasOwnProperty) {
+ var result = [];
+ for (var key in victim) {
+ if (hasOwnProperty.call(victim, key)) result.push(key);
+ }
+ return result;
+})(z.named, Object.prototype.hasOwnProperty)),v="";y.G();v=", "){t=y.gl()
+w=C.xB.g(w+v+(H.d(t)+": "),H.Ko(z.named[t],null))}w+="}"}w+=") -> "
+if(!!z.void)w+="void"
+else w="ret" in z?C.xB.g(w,H.Ko(z.ret,null)):w+"dynamic"
+z=w+"'"
+this.o3=z
+return z},
+$isMs:true,
+$isQF:true,
+$isL9u:true,
+$isNL:true},jB:{"":"Tp;a",
+call$1:function(a){var z,y,x
+z=init.metadata[a]
+y=this.a
+x=H.w2(y.a.gNy(),J.DA(z))
+return J.UQ(y.a.gw8(),x).gWL()},
+"+call:1:0":0,
+$isEH:true,
+$is_HB:true,
+$is_Dv:true},ye:{"":"Tp;",
+call$1:function(a){return init.metadata[a]},
+"+call:1:0":0,
+$isEH:true,
+$is_HB:true,
+$is_Dv:true},Gj:{"":"a;nb",
+gB:function(a){return this.nb.X5},
+"+length":0,
+gl0:function(a){return this.nb.X5===0},
+"+isEmpty":0,
+gor:function(a){return this.nb.X5!==0},
+"+isNotEmpty":0,
+t:function(a,b){var z=this.nb
+return z.t(z,b)},
+"+[]:1:0":0,
+x4:function(a){return this.nb.x4(a)},
+"+containsKey:1:0":0,
+PF:function(a){return this.nb.PF(a)},
+"+containsValue:1:0":0,
+aN:function(a,b){var z=this.nb
+return z.aN(z,b)},
+gvc:function(a){var z,y
+z=this.nb
+y=new P.Cm(z)
+H.VM(y,[H.W8(z,"YB",0)])
+return y},
+"+keys":0,
+gUQ:function(a){var z=this.nb
+return z.gUQ(z)},
+"+values":0,
+u:function(a,b,c){return H.kT()},
+"+[]=:2:0":0,
+Rz:function(a,b){H.kT()},
+$isL8:true,
+static:{kT:function(){throw H.b(P.f("Cannot modify an unmodifiable Map"))}}},Zz:{"":"Ge;hu",
+bu:function(a){return"Unsupported operation: "+this.hu},
+$ismp:true,
+$isGe:true,
+static:{WE:function(a){return new H.Zz(a)}}},"":"uN<"}],["dart._js_names","dart:_js_names",,H,{hY:function(a,b){var z,y,x,w,v,u,t
+z=(function(victim, hasOwnProperty) {
+ var result = [];
+ for (var key in victim) {
+ if (hasOwnProperty.call(victim, key)) result.push(key);
+ }
+ return result;
+})(a, Object.prototype.hasOwnProperty)
+y=H.B7([],P.L5(null,null,null,null,null))
+H.VM(y,[J.O,J.O])
+for(x=J.GP(z),w=!b;x.G();){v=x.gl()
+u=a[v]
+y.u(y,v,u)
+if(w){t=J.rY(v)
+if(t.nC(v,"g"))y.u(y,"s"+t.yn(v,1),u+"=")}}return y},YK:function(a){var z=H.B7([],P.L5(null,null,null,null,null))
+H.VM(z,[J.O,J.O])
+a.aN(a,new H.Xh(z))
+return z},Jg:function(a){return init.mangledGlobalNames[a]},Xh:{"":"Tp;a",
+call$2:function(a,b){var z=this.a
+z.u(z,b,a)},
+"+call:2:0":0,
+$isEH:true,
+$is_bh:true}}],["dart.async","dart:async",,P,{K2:function(a,b,c){var z=J.x(a)
+if(!!z.$is_bh)return a.call$2(b,c)
+else return a.call$1(b)},VH:function(a,b){var z=J.x(a)
+if(!!z.$is_bh)return b.O8(a)
+else return b.cR(a)},pH:function(a){var z,y,x,w,v,u,t,s,r
+z={}
+z.a=null
+z.b=null
+y=new P.j7(z)
+z.c=0
+for(x=new H.a7(a,a.length,0,null),H.VM(x,[H.W8(a,"Q",0)]);x.G();){w=x.mD
+v=z.c
+z.c=v+1
+u=w.OA(y)
+t=$.X3
+s=new P.vs(0,t,null,null,t.cR(new P.oV(z,v)),null,P.VH(null,$.X3),null)
+s.$builtinTypeInfo=[null]
+u.au(s)}y=z.c
+if(y===0)return P.Ab(C.xD,null)
+z.b=P.A(y,null)
+y=J.Q
+r=new P.Zf(P.Dt(y))
+H.VM(r,[y])
+z.a=r
+return z.a.MM},BG:function(){var z,y,x,w
+for(;y=$.P8(),y.av!==y.HV;){z=$.P8().Ux()
+try{z.call$0()}catch(x){H.Ru(x)
+w=C.RT.gVs()
+H.cy(w<0?0:w,P.qZ)
+throw x}}$.TH=!1},IA:function(a){$.P8().NZ(a)
+if(!$.TH){P.jL(C.RT,P.qZ)
+$.TH=!0}},rb:function(a){var z
+if(J.xC($.X3,C.NU)){$.X3.wr(a)
+return}z=$.X3
+z.wr(z.xi(a,!0))},Ve:function(a,b,c,d,e,f){var z
+if(e){z=new P.ly(b,c,d,a,null,0,null)
+H.VM(z,[f])}else{z=new P.Gh(b,c,d,a,null,0,null)
+H.VM(z,[f])}return z},bK:function(a,b,c,d){var z
+if(c){z=new P.dz(b,a,0,null,null,null,null)
+H.VM(z,[d])
+z.SJ=z
+z.iE=z}else{z=new P.DL(b,a,0,null,null,null,null)
+H.VM(z,[d])
+z.SJ=z
+z.iE=z}return z},ot:function(a){var z,y,x,w,v,u
+if(a==null)return
+try{z=a.call$0()
+w=z
+v=J.x(w)
+if(typeof w==="object"&&w!==null&&!!v.$isb8)return z
+return}catch(u){w=H.Ru(u)
+y=w
+x=new H.XO(u,null)
+$.X3.hk(y,x)}},YE:function(a){},SZ:function(a,b){$.X3.hk(a,b)},ax:function(){},FE:function(a,b,c){var z,y,x,w
+try{b.call$1(a.call$0())}catch(x){w=H.Ru(x)
+z=w
+y=new H.XO(x,null)
+c.call$2(z,y)}},NX:function(a,b,c,d){var z,y
+z=a.ed()
+y=J.x(z)
+if(typeof z==="object"&&z!==null&&!!y.$isb8)z.wM(new P.dR(b,c,d))
+else b.K5(c,d)},TB:function(a,b){return new P.uR(a,b)},Bb:function(a,b,c){var z,y
+z=a.ed()
+y=J.x(z)
+if(typeof z==="object"&&z!==null&&!!y.$isb8)z.wM(new P.QX(b,c))
+else b.rX(c)},rT:function(a,b){var z
+if(J.xC($.X3,C.NU))return $.X3.kG(a,b)
+z=$.X3
+return z.kG(a,z.xi(b,!0))},jL:function(a,b){var z=a.gVs()
+return H.cy(z<0?0:z,b)},L2:function(a,b,c,d,e){a.Gr(new P.pK(d,e))},T8:function(a,b,c,d){var z,y
+if(J.xC($.X3,c))return d.call$0()
+z=$.X3
+try{$.X3=c
+y=d.call$0()
+return y}finally{$.X3=z}},V7:function(a,b,c,d,e){var z,y
+if(J.xC($.X3,c))return d.call$1(e)
+z=$.X3
+try{$.X3=c
+y=d.call$1(e)
+return y}finally{$.X3=z}},Qx:function(a,b,c,d,e,f){var z,y
+if(J.xC($.X3,c))return d.call$2(e,f)
+z=$.X3
+try{$.X3=c
+y=d.call$2(e,f)
+return y}finally{$.X3=z}},Ee:function(a,b,c,d){return d},cQ:function(a,b,c,d){return d},dL:function(a,b,c,d){return d},Tk:function(a,b,c,d){P.IA(d)},h8:function(a,b,c,d,e){return P.jL(d,e)},Jj:function(a,b,c,d){H.LJ(d)},CI:function(a){J.wl($.X3,a)},qc:function(a,b,c,d,e){var z,y
+$.oK=P.jt
+if(d==null)d=C.Qq
+else{z=J.x(d)
+if(typeof d!=="object"||d===null||!z.$iswJ)throw H.b(P.u("ZoneSpecifications must be instantiated with the provided constructor."))}y=P.Py(null,null,null,null,null)
+if(e!=null)J.kH(e,new P.Ue(y))
+return new P.uo(c,d,y)},Ca:{"":"a;kc>,I4<",$isGe:true},Ik:{"":"O9;Y8",$asO9:null,$asqh:null},JI:{"":"yU;Ae@,iE@,SJ@,Y8,dB,o7,Bd,Lj,Gv,lz,Ri",
+gY8:function(){return this.Y8},
+uR:function(a){var z=this.Ae
+if(typeof z!=="number")throw z.i()
+return(z&1)===a},
+Ac:function(){var z=this.Ae
+if(typeof z!=="number")throw z.w()
+this.Ae=(z^1)>>>0},
+gP4:function(){var z=this.Ae
+if(typeof z!=="number")throw z.i()
+return(z&2)!==0},
+dK:function(){var z=this.Ae
+if(typeof z!=="number")throw z.k()
+this.Ae=(z|4)>>>0},
+gHj:function(){var z=this.Ae
+if(typeof z!=="number")throw z.i()
+return(z&4)!==0},
+uO:function(){},
+gp4:function(){return new P.Ip(this,P.JI.prototype.uO,null,"uO")},
+LP:function(){},
+gZ9:function(){return new P.Ip(this,P.JI.prototype.LP,null,"LP")},
+$asyU:null,
+$asMO:null,
+static:{"":"kb,CM,fw",}},WV:{"":"a;nL<,QC<,iE@,SJ@",
+gP4:function(){return(this.Gv&2)!==0},
+SL:function(){var z=this.Ip
+if(z!=null)return z
+z=P.Dt(null)
+this.Ip=z
+return z},
+au:function(a){a.SJ=this.SJ
+a.iE=this
+this.SJ.siE(a)
+this.SJ=a
+a.Ae=this.Gv&1},
+p1:function(a){var z,y
+z=a.gSJ()
+y=a.giE()
+z.siE(y)
+y.sSJ(z)
+a.sSJ(a)
+a.siE(a)},
+ET:function(a){var z,y,x,w
+if((this.Gv&4)!==0)throw H.b(new P.lj("Subscribing to closed stream"))
+z=H.W8(this,"WV",0)
+y=$.X3
+x=a?1:0
+w=new P.JI(null,null,null,this,null,null,null,y,x,null,null)
+H.VM(w,[z])
+w.SJ=w
+w.iE=w
+this.au(w)
+z=this.iE
+y=this.SJ
+if(z==null?y==null:z===y)P.ot(this.nL)
+return w},
+j0:function(a){if(a.giE()===a)return
+if(a.gP4())a.dK()
+else{this.p1(a)
+if((this.Gv&2)===0&&this.iE===this)this.Of()}},
+mO:function(a){},
+m4:function(a){},
+q7:function(){if((this.Gv&4)!==0)return new P.lj("Cannot add new events after calling close")
+return new P.lj("Cannot add new events while doing an addStream")},
+h:function(a,b){if(this.Gv>=4)throw H.b(this.q7())
+this.Iv(b)},
+ght:function(a){return new P.C7(this,P.WV.prototype.h,a,"h")},
+zw:function(a,b){if(this.Gv>=4)throw H.b(this.q7())
+this.pb(a,b)},
+gGj:function(){return new P.CQ(this,P.WV.prototype.zw,null,"zw")},
+cO:function(a){var z,y
+z=this.Gv
+if((z&4)!==0)return this.Ip
+if(z>=4)throw H.b(this.q7())
+this.Gv=(z|4)>>>0
+y=this.SL()
+this.SY()
+return y},
+Rg:function(a){this.Iv(a)},
+V8:function(a,b){this.pb(a,b)},
+Qj:function(){var z=this.AN
+this.AN=null
+this.Gv=(this.Gv&4294967287)>>>0
+C.jN.tZ(z)},
+nE:function(a){var z,y,x,w
+z=this.Gv
+if((z&2)!==0)throw H.b(new P.lj("Cannot fire new event. Controller is already firing an event"))
+if(this.iE===this)return
+y=z&1
+this.Gv=(z^3)>>>0
+x=this.iE
+for(;x!==this;)if(x.uR(y)){z=x.gAe()
+if(typeof z!=="number")throw z.k()
+x.sAe((z|2)>>>0)
+a.call$1(x)
+x.Ac()
+w=x.giE()
+if(x.gHj())this.p1(x)
+z=x.gAe()
+if(typeof z!=="number")throw z.i()
+x.sAe((z&4294967293)>>>0)
+x=w}else x=x.giE()
+this.Gv=(this.Gv&4294967293)>>>0
+if(this.iE===this)this.Of()},
+Of:function(){if((this.Gv&4)!==0&&this.Ip.Gv===0)this.Ip.OH(null)
+P.ot(this.QC)}},dz:{"":"WV;nL,QC,Gv,iE,SJ,AN,Ip",
+Iv:function(a){if(this.iE===this)return
+this.nE(new P.tK(this,a))},
+pb:function(a,b){if(this.iE===this)return
+this.nE(new P.OR(this,a,b))},
+SY:function(){if(this.iE!==this)this.nE(new P.Bg(this))
+else this.Ip.OH(null)},
+$asWV:null},tK:{"":"Tp;a,b",
+call$1:function(a){a.Rg(this.b)},
+"+call:1:0":0,
+$isEH:true,
+$is_HB:true,
+$is_Dv:true},OR:{"":"Tp;a,b,c",
+call$1:function(a){a.V8(this.b,this.c)},
+"+call:1:0":0,
+$isEH:true,
+$is_HB:true,
+$is_Dv:true},Bg:{"":"Tp;a",
+call$1:function(a){a.Qj()},
+"+call:1:0":0,
+$isEH:true,
+$is_HB:true,
+$is_Dv:true},DL:{"":"WV;nL,QC,Gv,iE,SJ,AN,Ip",
+Iv:function(a){var z,y
+for(z=this.iE;z!==this;z=z.giE()){y=new P.LV(a,null)
+y.$builtinTypeInfo=[null]
+z.w6(y)}},
+pb:function(a,b){var z
+for(z=this.iE;z!==this;z=z.giE())z.w6(new P.DS(a,b,null))},
+SY:function(){var z=this.iE
+if(z!==this)for(;z!==this;z=z.giE())z.w6(C.Wj)
+else this.Ip.OH(null)},
+$asWV:null},b8:{"":"a;",$isb8:true},j7:{"":"Tp;a",
+call$1:function(a){var z=this.a
+if(z.b!=null){z.b=null
+z.a.pm(a)}return},
+"+call:1:0":0,
+$isEH:true,
+$is_HB:true,
+$is_Dv:true},oV:{"":"Tp;a,b",
+call$1:function(a){var z,y,x
+z=this.a
+y=z.b
+if(y==null)return
+x=this.b
+if(x<0||x>=y.length)throw H.e(y,x)
+y[x]=a
+z.c=z.c-1
+if(z.c===0){y=z.a
+z=z.b
+y=y.MM
+if(y.Gv!==0)H.vh(new P.lj("Future already completed"))
+y.OH(z)}},
+"+call:1:0":0,
+$isEH:true,
+$is_HB:true,
+$is_Dv:true},TP:{"":"a;"},Zf:{"":"TP;MM",
+oo:function(a,b){var z=this.MM
+if(z.Gv!==0)throw H.b(new P.lj("Future already completed"))
+z.OH(b)},
+tZ:function(a){return this.oo(a,null)},
+w0:function(a,b){var z
+if(a==null)throw H.b(new P.AT("Error must not be null"))
+z=this.MM
+if(z.Gv!==0)throw H.b(new P.lj("Future already completed"))
+z.CG(a,b)},
+pm:function(a){return this.w0(a,null)},
+gYJ:function(){return new P.CQ(this,P.Zf.prototype.w0,null,"w0")},
+$asTP:null},vs:{"":"a;Gv,Lj<,jk,BQ@,OY,As,qV,o4",
+gcg:function(){return this.Gv>=4},
+gNm:function(){return this.Gv===8},
+swG:function(a){if(a)this.Gv=2
+else this.Gv=0},
+gO1:function(){return this.Gv===2?null:this.OY},
+GP:function(a){return this.gO1().call$1(a)},
+gyK:function(){return this.Gv===2?null:this.As},
+go7:function(){return this.Gv===2?null:this.qV},
+gIa:function(){return this.Gv===2?null:this.o4},
+xY:function(){return this.gIa().call$0()},
+Rx:function(a,b){var z=P.Y8(a,b,null)
+this.au(z)
+return z},
+ml:function(a){return this.Rx(a,null)},
+co:function(a,b){var z=P.RP(a,b,null)
+this.au(z)
+return z},
+OA:function(a){return this.co(a,null)},
+wM:function(a){var z=P.X4(a,H.W8(this,"vs",0))
+this.au(z)
+return z},
+gDL:function(){return this.jk},
+gcG:function(){return this.jk},
+Am:function(a){this.Gv=4
+this.jk=a},
+E6:function(a,b){this.Gv=8
+this.jk=new P.Ca(a,b)},
+au:function(a){if(this.Gv>=4)this.Lj.wr(new P.da(this,a))
+else{a.sBQ(this.jk)
+this.jk=a}},
+L3:function(){var z,y,x
+z=this.jk
+this.jk=null
+for(y=null;z!=null;y=z,z=x){x=z.gBQ()
+z.sBQ(y)}return y},
+rX:function(a){var z,y
+z=J.x(a)
+if(typeof a==="object"&&a!==null&&!!z.$isb8){P.GZ(a,this)
+return}y=this.L3()
+this.Am(a)
+P.HZ(this,y)},
+K5:function(a,b){var z=this.L3()
+this.E6(a,b)
+P.HZ(this,z)},
+Lp:function(a){return this.K5(a,null)},
+gbY:function(){return new P.CQ(this,P.vs.prototype.K5,null,"K5")},
+OH:function(a){var z,y
+z=J.x(a)
+y=typeof a==="object"&&a!==null&&!!z.$isb8
+if(y);if(y)z=typeof a!=="object"||a===null||!z.$isvs||a.Gv<4
+else z=!1
+if(z){this.rX(a)
+return}if(this.Gv!==0)H.vh(new P.lj("Future already completed"))
+this.Gv=1
+this.Lj.wr(new P.rH(this,a))},
+CG:function(a,b){if(this.Gv!==0)H.vh(new P.lj("Future already completed"))
+this.Gv=1
+this.Lj.wr(new P.ZL(this,a,b))},
+L7:function(a,b){this.OH(a)},
+$isvs:true,
+$isb8:true,
+static:{"":"Gn,JE,OT,oN,NK",Dt:function(a){var z=new P.vs(0,$.X3,null,null,null,null,null,null)
+H.VM(z,[a])
+return z},Ab:function(a,b){var z=new P.vs(0,$.X3,null,null,null,null,null,null)
+H.VM(z,[b])
+z.L7(a,b)
+return z},Y8:function(a,b,c){var z=$.X3
+z=new P.vs(0,z,null,null,z.cR(a),null,P.VH(b,$.X3),null)
+H.VM(z,[c])
+return z},RP:function(a,b,c){var z,y
+z=$.X3
+y=P.VH(a,z)
+y=new P.vs(0,z,null,null,null,$.X3.cR(b),y,null)
+H.VM(y,[c])
+return y},X4:function(a,b){var z=$.X3
+z=new P.vs(0,z,null,null,null,null,null,z.Al(a))
+H.VM(z,[b])
+return z},GZ:function(a,b){var z
+b.swG(!0)
+z=J.x(a)
+if(typeof a==="object"&&a!==null&&!!z.$isvs)if(a.Gv>=4)P.HZ(a,b)
+else a.au(b)
+else a.Rx(new P.xw(b),new P.dm(b))},yE:function(a,b){var z
+do{z=b.gBQ()
+b.sBQ(null)
+P.HZ(a,b)
+if(z!=null){b=z
+continue}else break}while(!0)},HZ:function(a,b){var z,y,x,w,v,u,t,s,r
+z={}
+z.e=a
+for(;!0;){y={}
+if(!z.e.gcg())return
+x=z.e.gNm()
+if(x&&b==null){w=z.e.gcG()
+z.e.gLj().hk(J.w8(w),w.gI4())
+return}if(b==null)return
+if(b.gBQ()!=null){P.yE(z.e,b)
+return}if(x&&!z.e.gLj().fC(b.gLj())){w=z.e.gcG()
+z.e.gLj().hk(J.w8(w),w.gI4())
+return}v=$.X3
+u=b.gLj()
+if(v==null?u!=null:v!==u){b.gLj().Gr(new P.mi(z,b))
+return}y.b=null
+y.c=null
+y.d=!1
+b.gLj().Gr(new P.jb(z,y,x,b))
+if(y.d)return
+v=y.b===!0
+if(v){u=y.c
+t=J.x(u)
+t=typeof u==="object"&&u!==null&&!!t.$isb8
+u=t}else u=!1
+if(u){s=y.c
+y=J.x(s)
+if(typeof s==="object"&&s!==null&&!!y.$isvs&&s.Gv>=4){b.swG(!0)
+z.e=s
+continue}P.GZ(s,b)
+return}if(v){r=b.L3()
+b.Am(y.c)}else{r=b.L3()
+w=y.c
+b.E6(J.w8(w),w.gI4())}z.e=b
+b=r}}}},da:{"":"Tp;a,b",
+call$0:function(){P.HZ(this.a,this.b)},
+"+call:0:0":0,
+$isEH:true,
+$is_X0:true},xw:{"":"Tp;a",
+call$1:function(a){this.a.rX(a)},
+"+call:1:0":0,
+$isEH:true,
+$is_HB:true,
+$is_Dv:true},dm:{"":"Tp;b",
+call$2:function(a,b){this.b.K5(a,b)},
+"+call:2:0":0,
+"*call":[40],
+call$1:function(a){return this.call$2(a,null)},
+"+call:1:0":0,
+$isEH:true,
+$is_bh:true,
+$is_HB:true,
+$is_Dv:true},rH:{"":"Tp;a,b",
+call$0:function(){this.a.rX(this.b)},
+"+call:0:0":0,
+$isEH:true,
+$is_X0:true},ZL:{"":"Tp;a,b,c",
+call$0:function(){this.a.K5(this.b,this.c)},
+"+call:0:0":0,
+$isEH:true,
+$is_X0:true},mi:{"":"Tp;c,d",
+call$0:function(){P.HZ(this.c.e,this.d)},
+"+call:0:0":0,
+$isEH:true,
+$is_X0:true},jb:{"":"Tp;c,b,e,f",
+call$0:function(){var z,y,x,w,v,u,t,s,r,q,p,o
+z={}
+try{r=this.c
+if(!this.e){y=r.e.gDL()
+r=this.f
+q=this.b
+if(r.gO1()!=null){q.c=r.GP(y)
+q.b=!0}else{q.c=y
+q.b=!0}}else{x=r.e.gcG()
+r=this.f
+w=r.gyK()
+v=!0
+if(w!=null)v=w.call$1(J.w8(x))
+q=v===!0&&r.go7()!=null
+p=this.b
+if(q){u=r.go7()
+p.c=P.K2(u,J.w8(x),x.gI4())
+p.b=!0}else{p.c=x
+p.b=!1}}r=this.f
+if(r.gIa()!=null){z.a=r.xY()
+q=z.a
+p=J.x(q)
+if(typeof q==="object"&&q!==null&&!!p.$isb8){r.swG(!0)
+z.a.Rx(new P.wB(this.c,r),new P.Pu(z,r))
+this.b.d=!0}}}catch(o){z=H.Ru(o)
+t=z
+s=new H.XO(o,null)
+if(this.e){z=J.w8(this.c.e.gcG())
+r=t
+r=z==null?r==null:z===r
+z=r}else z=!1
+r=this.b
+if(z)r.c=this.c.e.gcG()
+else r.c=new P.Ca(t,s)
+this.b.b=!1}},
+"+call:0:0":0,
+$isEH:true,
+$is_X0:true},wB:{"":"Tp;c,g",
+call$1:function(a){P.HZ(this.c.e,this.g)},
+"+call:1:0":0,
+$isEH:true,
+$is_HB:true,
+$is_Dv:true},Pu:{"":"Tp;a,h",
+call$2:function(a,b){var z,y,x
+z=this.a
+y=z.a
+x=J.x(y)
+if(typeof y!=="object"||y===null||!x.$isvs){z.a=P.Dt(null)
+z.a.E6(a,b)}P.HZ(z.a,this.h)},
+"+call:2:0":0,
+"*call":[40],
+call$1:function(a){return this.call$2(a,null)},
+"+call:1:0":0,
+$isEH:true,
+$is_bh:true,
+$is_HB:true,
+$is_Dv:true},qh:{"":"a;",
+ev:function(a,b){var z=new P.nO(b,this)
+H.VM(z,[H.W8(this,"qh",0)])
+return z},
+ez:function(a,b){var z=new P.t3(b,this)
+H.VM(z,[H.W8(this,"qh",0),null])
+return z},
+zV:function(a,b){var z,y,x
+z={}
+y=P.Dt(J.O)
+x=P.p9("")
+z.a=null
+z.b=!0
+z.a=this.KR(new P.QC(z,this,b,y,x),!0,new P.Rv(y,x),new P.Yl(y))
+return y},
+tg:function(a,b){var z,y
+z={}
+y=P.Dt(J.kn)
+z.a=null
+z.a=this.KR(new P.YJ(z,this,b,y),!0,new P.DO(y),y.gbY())
+return y},
+aN:function(a,b){var z,y
+z={}
+y=P.Dt(null)
+z.a=null
+z.a=this.KR(new P.lz(z,this,b,y),!0,new P.M4(y),y.gbY())
+return y},
+Vr:function(a,b){var z,y
+z={}
+y=P.Dt(J.kn)
+z.a=null
+z.a=this.KR(new P.Jp(z,this,b,y),!0,new P.eN(y),y.gbY())
+return y},
+gB:function(a){var z,y
+z={}
+y=new P.vs(0,$.X3,null,null,null,null,null,null)
+y.$builtinTypeInfo=[J.im]
+z.a=0
+this.KR(new P.B5(z),!0,new P.PI(z,y),y.gbY())
+return y},
+"+length":0,
+gl0:function(a){var z,y
+z={}
+y=P.Dt(J.kn)
+z.a=null
+z.a=this.KR(new P.j4(z,y),!0,new P.i9(y),y.gbY())
+return y},
+"+isEmpty":0,
+br:function(a){var z,y
+z=[]
+H.VM(z,[H.W8(this,"qh",0)])
+y=P.Dt([J.Q,H.W8(this,"qh",0)])
+this.KR(new P.VV(this,z),!0,new P.Dy(z,y),y.gbY())
+return y},
+eR:function(a,b){return P.eF(this,b,null)},
+gFV:function(a){var z,y
+z={}
+y=P.Dt(H.W8(this,"qh",0))
+z.a=null
+z.a=this.KR(new P.lU(z,this,y),!0,new P.xp(y),y.gbY())
+return y},
+grZ:function(a){var z,y
+z={}
+y=P.Dt(H.W8(this,"qh",0))
+z.a=null
+z.b=!1
+this.KR(new P.UH(z,this),!0,new P.Z5(z,y),y.gbY())
+return y},
+Zv:function(a,b){var z,y,x
+z={}
+z.a=b
+y=z.a
+if(typeof y!=="number"||Math.floor(y)!==y||J.u6(y,0))throw H.b(new P.AT(z.a))
+x=P.Dt(H.W8(this,"qh",0))
+z.b=null
+z.b=this.KR(new P.ii(z,this,x),!0,new P.ib(z,x),x.gbY())
+return x},
+$isqh:true},QC:{"":"Tp;a,b,c,d,e",
+call$1:function(a){var z,y,x,w,v
+x=this.a
+if(!x.b)this.e.KF(this.c)
+x.b=!1
+try{this.e.KF(a)}catch(w){v=H.Ru(w)
+z=v
+y=new H.XO(w,null)
+P.NX(x.a,this.d,z,y)}},
+"+call:1:0":0,
+$isEH:true,
+$is_HB:true,
+$is_Dv:true},Yl:{"":"Tp;f",
+call$1:function(a){this.f.Lp(a)},
+"+call:1:0":0,
+$isEH:true,
+$is_HB:true,
+$is_Dv:true},Rv:{"":"Tp;g,h",
+call$0:function(){this.g.rX(this.h.vM)},
+"+call:0:0":0,
+$isEH:true,
+$is_X0:true},YJ:{"":"Tp;a,b,c,d",
+call$1:function(a){var z,y
+z=this.a
+y=this.d
+P.FE(new P.jv(this.c,a),new P.LB(z,y),P.TB(z.a,y))},
+"+call:1:0":0,
+$isEH:true,
+$is_HB:true,
+$is_Dv:true},jv:{"":"Tp;e,f",
+call$0:function(){return J.xC(this.f,this.e)},
+"+call:0:0":0,
+$isEH:true,
+$is_X0:true},LB:{"":"Tp;a,g",
+call$1:function(a){if(a===!0)P.Bb(this.a.a,this.g,!0)},
+"+call:1:0":0,
+$isEH:true,
+$is_HB:true,
+$is_Dv:true},DO:{"":"Tp;h",
+call$0:function(){this.h.rX(!1)},
+"+call:0:0":0,
+$isEH:true,
+$is_X0:true},lz:{"":"Tp;a,b,c,d",
+call$1:function(a){P.FE(new P.Rl(this.c,a),new P.Jb(),P.TB(this.a.a,this.d))},
+"+call:1:0":0,
+$isEH:true,
+$is_HB:true,
+$is_Dv:true},Rl:{"":"Tp;e,f",
+call$0:function(){return this.e.call$1(this.f)},
+"+call:0:0":0,
+$isEH:true,
+$is_X0:true},Jb:{"":"Tp;",
+call$1:function(a){},
+"+call:1:0":0,
+$isEH:true,
+$is_HB:true,
+$is_Dv:true},M4:{"":"Tp;g",
+call$0:function(){this.g.rX(null)},
+"+call:0:0":0,
+$isEH:true,
+$is_X0:true},Jp:{"":"Tp;a,b,c,d",
+call$1:function(a){var z,y
+z=this.a
+y=this.d
+P.FE(new P.h7(this.c,a),new P.pr(z,y),P.TB(z.a,y))},
+"+call:1:0":0,
+$isEH:true,
+$is_HB:true,
+$is_Dv:true},h7:{"":"Tp;e,f",
+call$0:function(){return this.e.call$1(this.f)},
+"+call:0:0":0,
+$isEH:true,
+$is_X0:true},pr:{"":"Tp;a,g",
+call$1:function(a){if(a===!0)P.Bb(this.a.a,this.g,!0)},
+"+call:1:0":0,
+$isEH:true,
+$is_HB:true,
+$is_Dv:true},eN:{"":"Tp;h",
+call$0:function(){this.h.rX(!1)},
+"+call:0:0":0,
+$isEH:true,
+$is_X0:true},B5:{"":"Tp;a",
+call$1:function(a){var z=this.a
+z.a=z.a+1},
+"+call:1:0":0,
+$isEH:true,
+$is_HB:true,
+$is_Dv:true},PI:{"":"Tp;a,b",
+call$0:function(){this.b.rX(this.a.a)},
+"+call:0:0":0,
+$isEH:true,
+$is_X0:true},j4:{"":"Tp;a,b",
+call$1:function(a){P.Bb(this.a.a,this.b,!1)},
+"+call:1:0":0,
+$isEH:true,
+$is_HB:true,
+$is_Dv:true},i9:{"":"Tp;c",
+call$0:function(){this.c.rX(!0)},
+"+call:0:0":0,
+$isEH:true,
+$is_X0:true},VV:{"":"Tp;a,b",
+call$1:function(a){this.b.push(a)},
+"+call:1:0":0,
+$isEH:true,
+$is_HB:true,
+$is_Dv:true},Dy:{"":"Tp;c,d",
+call$0:function(){this.d.rX(this.c)},
+"+call:0:0":0,
+$isEH:true,
+$is_X0:true},lU:{"":"Tp;a,b,c",
+call$1:function(a){P.Bb(this.a.a,this.c,a)},
+"+call:1:0":0,
+$isEH:true,
+$is_HB:true,
+$is_Dv:true},xp:{"":"Tp;d",
+call$0:function(){this.d.Lp(new P.lj("No elements"))},
+"+call:0:0":0,
+$isEH:true,
+$is_X0:true},UH:{"":"Tp;a,b",
+call$1:function(a){var z=this.a
+z.b=!0
+z.a=a},
+"+call:1:0":0,
+$isEH:true,
+$is_HB:true,
+$is_Dv:true},Z5:{"":"Tp;a,c",
+call$0:function(){var z=this.a
+if(z.b){this.c.rX(z.a)
+return}this.c.Lp(new P.lj("No elements"))},
+"+call:0:0":0,
+$isEH:true,
+$is_X0:true},ii:{"":"Tp;a,b,c",
+call$1:function(a){var z=this.a
+if(J.xC(z.a,0)){P.Bb(z.b,this.c,a)
+return}z.a=J.xH(z.a,1)},
+"+call:1:0":0,
+$isEH:true,
+$is_HB:true,
+$is_Dv:true},ib:{"":"Tp;a,d",
+call$0:function(){this.d.Lp(new P.bJ("value "+H.d(this.a.a)))},
+"+call:0:0":0,
+$isEH:true,
+$is_X0:true},MO:{"":"a;",$isMO:true},ms:{"":"a;",
+gh6:function(){if((this.Gv&8)===0)return this.iP
+return this.iP.gjy()},
+kW:function(){if((this.Gv&8)===0){if(this.iP==null)this.iP=new P.ny(null,null,0)
+return this.iP}var z=this.iP.gjy()
+return z},
+ghG:function(){if((this.Gv&8)!==0)return this.iP.gjy()
+return this.iP},
+BW:function(){if((this.Gv&4)!==0)return new P.lj("Cannot add event after closing")
+return new P.lj("Cannot add event while adding a stream")},
+SL:function(){if(this.Ip==null){this.Ip=P.Dt(null)
+if((this.Gv&2)!==0)this.Ip.rX(null)}return this.Ip},
+h:function(a,b){if(this.Gv>=4)throw H.b(this.BW())
+this.Rg(b)},
+cO:function(a){var z=this.Gv
+if((z&4)!==0)return this.Ip
+if(z>=4)throw H.b(this.BW())
+this.Gv=(z|4)>>>0
+this.SL()
+z=this.Gv
+if((z&1)!==0)this.SY()
+else if((z&3)===0){z=this.kW()
+z.h(z,C.Wj)}return this.Ip},
+Rg:function(a){var z,y
+z=this.Gv
+if((z&1)!==0)this.Iv(a)
+else if((z&3)===0){z=this.kW()
+y=new P.LV(a,null)
+H.VM(y,[H.W8(this,"ms",0)])
+z.h(z,y)}},
+V8:function(a,b){var z=this.Gv
+if((z&1)!==0)this.pb(a,b)
+else if((z&3)===0){z=this.kW()
+z.h(z,new P.DS(a,b,null))}},
+Qj:function(){var z=this.iP
+this.iP=z.gjy()
+this.Gv=(this.Gv&4294967287)>>>0
+z.tZ(z)},
+ET:function(a){var z,y,x,w,v
+if((this.Gv&3)!==0)throw H.b(new P.lj("Stream has already been listened to."))
+z=$.X3
+y=a?1:0
+x=new P.yU(this,null,null,null,z,y,null,null)
+H.VM(x,[null])
+w=this.gh6()
+this.Gv=(this.Gv|1)>>>0
+if((this.Gv&8)!==0){v=this.iP
+v.sjy(x)
+v.QE()}else this.iP=x
+x.WN(w)
+x.J7(new P.UO(this))
+return x},
+j0:function(a){var z,y
+if((this.Gv&8)!==0)this.iP.ed()
+this.iP=null
+this.Gv=(this.Gv&4294967286|2)>>>0
+z=new P.Bc(this)
+y=P.ot(this.gQC())
+if(y!=null)y=y.wM(z)
+else z.call$0()
+return y},
+mO:function(a){var z
+if((this.Gv&8)!==0){z=this.iP
+z.yy(z)}P.ot(this.gp4())},
+m4:function(a){if((this.Gv&8)!==0)this.iP.QE()
+P.ot(this.gZ9())}},UO:{"":"Tp;a",
+call$0:function(){P.ot(this.a.gnL())},
+"+call:0:0":0,
+$isEH:true,
+$is_X0:true},Bc:{"":"Tp;a",
+call$0:function(){var z=this.a.Ip
+if(z!=null&&z.Gv===0)z.OH(null)},
+"+call:0:0":0,
+$isEH:true,
+$is_X0:true},vp:{"":"a;",
+Iv:function(a){this.ghG().Rg(a)},
+pb:function(a,b){this.ghG().V8(a,b)},
+SY:function(){this.ghG().Qj()}},lk:{"":"a;",
+Iv:function(a){var z,y
+z=this.ghG()
+y=new P.LV(a,null)
+H.VM(y,[null])
+z.w6(y)},
+pb:function(a,b){this.ghG().w6(new P.DS(a,b,null))},
+SY:function(){this.ghG().w6(C.Wj)}},Gh:{"":"XB;nL<,p4<,Z9<,QC<,iP,Gv,Ip"},XB:{"":"ms+lk;",$asms:null},ly:{"":"cK;nL<,p4<,Z9<,QC<,iP,Gv,Ip"},cK:{"":"ms+vp;",$asms:null},O9:{"":"ez;Y8",
+w4:function(a){return this.Y8.ET(a)},
+giO:function(a){return(H.eQ(this.Y8)^892482866)>>>0},
+n:function(a,b){var z
+if(b==null)return!1
+if(this===b)return!0
+z=J.x(b)
+if(typeof b!=="object"||b===null||!z.$isO9)return!1
+return b.Y8===this.Y8},
+$isO9:true,
+$asez:null,
+$asqh:null},yU:{"":"KA;Y8<,dB,o7,Bd,Lj,Gv,lz,Ri",
+tA:function(){return this.gY8().j0(this)},
+gQC:function(){return new P.Ip(this,P.yU.prototype.tA,null,"tA")},
+uO:function(){this.gY8().mO(this)},
+gp4:function(){return new P.Ip(this,P.yU.prototype.uO,null,"uO")},
+LP:function(){this.gY8().m4(this)},
+gZ9:function(){return new P.Ip(this,P.yU.prototype.LP,null,"LP")},
+$asKA:null,
+$asMO:null},nP:{"":"a;"},KA:{"":"a;dB,o7<,Bd,Lj<,Gv,lz,Ri",
+WN:function(a){if(a==null)return
+this.Ri=a
+if(!a.gl0(a)){this.Gv=(this.Gv|64)>>>0
+this.Ri.t2(this)}},
+fe:function(a){this.dB=$.X3.cR(a)},
+fm:function(a,b){if(b==null)b=P.AY
+this.o7=P.VH(b,$.X3)},
+pE:function(a){if(a==null)a=P.No
+this.Bd=$.X3.Al(a)},
+nB:function(a,b){var z=this.Gv
+if((z&8)!==0)return
+this.Gv=(z+128|4)>>>0
+if(z<128&&this.Ri!=null)this.Ri.FK()
+if((z&4)===0&&(this.Gv&32)===0)this.J7(this.gp4())},
+yy:function(a){return this.nB(a,null)},
+QE:function(){var z=this.Gv
+if((z&8)!==0)return
+if(z>=128){this.Gv=z-128
+z=this.Gv
+if(z<128){if((z&64)!==0){z=this.Ri
+z=!z.gl0(z)}else z=!1
+if(z)this.Ri.t2(this)
+else{this.Gv=(this.Gv&4294967291)>>>0
+if((this.Gv&32)===0)this.J7(this.gZ9())}}}},
+ed:function(){this.Gv=(this.Gv&4294967279)>>>0
+if((this.Gv&8)!==0)return this.lz
+this.Ek()
+return this.lz},
+gzG:function(){if(this.Gv<128){var z=this.Ri
+z=z==null||z.gl0(z)}else z=!1
+return z},
+Ek:function(){this.Gv=(this.Gv|8)>>>0
+if((this.Gv&64)!==0)this.Ri.FK()
+if((this.Gv&32)===0)this.Ri=null
+this.lz=this.tA()},
+Rg:function(a){var z=this.Gv
+if((z&8)!==0)return
+if(z<32)this.Iv(a)
+else{z=new P.LV(a,null)
+H.VM(z,[null])
+this.w6(z)}},
+V8:function(a,b){var z=this.Gv
+if((z&8)!==0)return
+if(z<32)this.pb(a,b)
+else this.w6(new P.DS(a,b,null))},
+Qj:function(){var z=this.Gv
+if((z&8)!==0)return
+this.Gv=(z|2)>>>0
+if(this.Gv<32)this.SY()
+else this.w6(C.Wj)},
+uO:function(){},
+gp4:function(){return new P.Ip(this,P.KA.prototype.uO,null,"uO")},
+LP:function(){},
+gZ9:function(){return new P.Ip(this,P.KA.prototype.LP,null,"LP")},
+tA:function(){},
+gQC:function(){return new P.Ip(this,P.KA.prototype.tA,null,"tA")},
+w6:function(a){var z,y
+z=this.Ri
+if(z==null){z=new P.ny(null,null,0)
+this.Ri=z}z.h(z,a)
+y=this.Gv
+if((y&64)===0){this.Gv=(y|64)>>>0
+if(this.Gv<128)this.Ri.t2(this)}},
+Iv:function(a){var z=this.Gv
+this.Gv=(z|32)>>>0
+this.Lj.m1(this.dB,a)
+this.Gv=(this.Gv&4294967263)>>>0
+this.Kl((z&4)!==0)},
+pb:function(a,b){var z,y,x
+z=this.Gv
+y=new P.Vo(this,a,b)
+if((z&1)!==0){this.Gv=(z|16)>>>0
+this.Ek()
+z=this.lz
+x=J.x(z)
+if(typeof z==="object"&&z!==null&&!!x.$isb8)z.wM(y)
+else y.call$0()}else{y.call$0()
+this.Kl((z&4)!==0)}},
+SY:function(){var z,y,x
+z=new P.qB(this)
+this.Ek()
+this.Gv=(this.Gv|16)>>>0
+y=this.lz
+x=J.x(y)
+if(typeof y==="object"&&y!==null&&!!x.$isb8)y.wM(z)
+else z.call$0()},
+J7:function(a){var z=this.Gv
+this.Gv=(z|32)>>>0
+a.call$0()
+this.Gv=(this.Gv&4294967263)>>>0
+this.Kl((z&4)!==0)},
+Kl:function(a){var z,y
+if((this.Gv&64)!==0){z=this.Ri
+z=z.gl0(z)}else z=!1
+if(z){this.Gv=(this.Gv&4294967231)>>>0
+if((this.Gv&4)!==0&&this.gzG())this.Gv=(this.Gv&4294967291)>>>0}for(;!0;a=y){z=this.Gv
+if((z&8)!==0){this.Ri=null
+return}y=(z&4)!==0
+if(a===y)break
+this.Gv=(z^32)>>>0
+if(y)this.uO()
+else this.LP()
+this.Gv=(this.Gv&4294967263)>>>0}z=this.Gv
+if((z&64)!==0&&z<128)this.Ri.t2(this)},
+$isMO:true,
+static:{"":"ry,bG,Q9,QU,yJ,F2,yo,GC,L3",}},Vo:{"":"Tp;a,b,c",
+call$0:function(){var z,y,x,w,v
+z=this.a
+y=z.Gv
+if((y&8)!==0&&(y&16)===0)return
+z.Gv=(y|32)>>>0
+y=z.Lj
+if(!y.fC($.X3))$.X3.hk(this.b,this.c)
+else{x=z.o7
+w=J.x(x)
+v=this.b
+if(!!w.$is_bh)y.z8(x,v,this.c)
+else y.m1(x,v)}z.Gv=(z.Gv&4294967263)>>>0},
+"+call:0:0":0,
+$isEH:true,
+$is_X0:true},qB:{"":"Tp;a",
+call$0:function(){var z,y
+z=this.a
+y=z.Gv
+if((y&16)===0)return
+z.Gv=(y|42)>>>0
+z.Lj.bH(z.Bd)
+z.Gv=(z.Gv&4294967263)>>>0},
+"+call:0:0":0,
+$isEH:true,
+$is_X0:true},ez:{"":"qh;",
+KR:function(a,b,c,d){var z=this.w4(!0===b)
+z.fe(a)
+z.fm(z,d)
+z.pE(c)
+return z},
+zC:function(a,b,c){return this.KR(a,null,b,c)},
+yI:function(a){return this.KR(a,null,null,null)},
+w4:function(a){var z,y,x
+z=H.W8(this,"ez",0)
+y=$.X3
+x=a?1:0
+x=new P.KA(null,null,null,y,x,null,null)
+H.VM(x,[z])
+return x},
+fN:function(a){},
+gnL:function(){return new H.Pm(this,P.ez.prototype.fN,null,"fN")},
+$asqh:null},lx:{"":"a;LD@"},LV:{"":"lx;P>,LD",
+r6:function(a,b){return this.P.call$1(b)},
+pP:function(a){a.Iv(this.P)}},DS:{"":"lx;kc>,I4<,LD",
+pP:function(a){a.pb(this.kc,this.I4)}},dp:{"":"a;",
+pP:function(a){a.SY()},
+gLD:function(){return},
+sLD:function(a){throw H.b(new P.lj("No events after a done."))}},B3:{"":"a;",
+t2:function(a){var z=this.Gv
+if(z===1)return
+if(z>=1){this.Gv=1
+return}P.rb(new P.CR(this,a))
+this.Gv=1},
+FK:function(){if(this.Gv===1)this.Gv=3}},CR:{"":"Tp;a,b",
+call$0:function(){var z,y
+z=this.a
+y=z.Gv
+z.Gv=0
+if(y===3)return
+z.TO(this.b)},
+"+call:0:0":0,
+$isEH:true,
+$is_X0:true},ny:{"":"B3;zR,N6,Gv",
+gl0:function(a){return this.N6==null},
+"+isEmpty":0,
+h:function(a,b){var z=this.N6
+if(z==null){this.N6=b
+this.zR=b}else{z.sLD(b)
+this.N6=b}},
+TO:function(a){var z=this.zR
+this.zR=z.gLD()
+if(this.zR==null)this.N6=null
+z.pP(a)}},dR:{"":"Tp;a,b,c",
+call$0:function(){return this.a.K5(this.b,this.c)},
+"+call:0:0":0,
+$isEH:true,
+$is_X0:true},uR:{"":"Tp;a,b",
+call$2:function(a,b){return P.NX(this.a,this.b,a,b)},
+"+call:2:0":0,
+$isEH:true,
+$is_bh:true},QX:{"":"Tp;a,b",
+call$0:function(){return this.a.rX(this.b)},
+"+call:0:0":0,
+$isEH:true,
+$is_X0:true},YR:{"":"qh;",
+KR:function(a,b,c,d){var z=P.zK(this,!0===b,H.W8(this,"YR",0),H.W8(this,"YR",1))
+z.fe(a)
+z.fm(z,d)
+z.pE(c)
+return z},
+zC:function(a,b,c){return this.KR(a,null,b,c)},
+yI:function(a){return this.KR(a,null,null,null)},
+Ml:function(a,b){b.Rg(a)},
+$asqh:function(a,b){return[b]}},fB:{"":"KA;UY,hG,dB,o7,Bd,Lj,Gv,lz,Ri",
+Rg:function(a){if((this.Gv&2)!==0)return
+P.KA.prototype.Rg.call(this,a)},
+V8:function(a,b){if((this.Gv&2)!==0)return
+P.KA.prototype.V8.call(this,a,b)},
+uO:function(){var z=this.hG
+if(z==null)return
+z.yy(z)},
+gp4:function(){return new P.Ip(this,P.fB.prototype.uO,null,"uO")},
+LP:function(){var z=this.hG
+if(z==null)return
+z.QE()},
+gZ9:function(){return new P.Ip(this,P.fB.prototype.LP,null,"LP")},
+tA:function(){var z=this.hG
+if(z!=null){this.hG=null
+z.ed()}return},
+gQC:function(){return new P.Ip(this,P.fB.prototype.tA,null,"tA")},
+vx:function(a){this.UY.Ml(a,this)},
+gOa:function(){return new H.Pm(this,P.fB.prototype.vx,null,"vx")},
+xL:function(a,b){this.V8(a,b)},
+gRE:function(){return new P.bq(this,P.fB.prototype.xL,null,"xL")},
+fE:function(){this.Qj()},
+gH1:function(){return new P.Ip(this,P.fB.prototype.fE,null,"fE")},
+S8:function(a,b,c,d){var z,y
+z=this.gOa()
+y=this.gRE()
+this.hG=this.UY.Sb.zC(z,this.gH1(),y)},
+$asKA:function(a,b){return[b]},
+$asMO:function(a,b){return[b]},
+static:{zK:function(a,b,c,d){var z,y
+z=$.X3
+y=b?1:0
+y=new P.fB(a,null,null,null,null,z,y,null,null)
+H.VM(y,[c,d])
+y.S8(a,b,c,d)
+return y}}},nO:{"":"YR;qs,Sb",
+Dr:function(a){return this.qs.call$1(a)},
+Ml:function(a,b){var z,y,x,w,v
+z=null
+try{z=this.Dr(a)}catch(w){v=H.Ru(w)
+y=v
+x=new H.XO(w,null)
+b.V8(y,x)
+return}if(z===!0)b.Rg(a)},
+$asYR:function(a){return[a,a]},
+$asqh:null},t3:{"":"YR;TN,Sb",
+kn:function(a){return this.TN.call$1(a)},
+Ml:function(a,b){var z,y,x,w,v
+z=null
+try{z=this.kn(a)}catch(w){v=H.Ru(w)
+y=v
+x=new H.XO(w,null)
+b.V8(y,x)
+return}b.Rg(z)},
+$asYR:null,
+$asqh:function(a,b){return[b]}},dq:{"":"YR;Em,Sb",
+Ml:function(a,b){var z=this.Em
+if(z>0){this.Em=z-1
+return}b.Rg(a)},
+U6:function(a,b,c){if(b<0)throw H.b(new P.AT(b))},
+$asYR:function(a){return[a,a]},
+$asqh:null,
+static:{eF:function(a,b,c){var z=new P.dq(b,a)
+H.VM(z,[c])
+z.U6(a,b,c)
+return z}}},dX:{"":"a;"},aY:{"":"a;"},wJ:{"":"a;E2<,cP<,vo<,eo<,Ka<,Xp<,fb<,rb<,Zq<,rF,JS>,iq<",
+hk:function(a,b){return this.E2.call$2(a,b)},
+Gr:function(a){return this.cP.call$1(a)},
+Al:function(a){return this.Ka.call$1(a)},
+cR:function(a){return this.Xp.call$1(a)},
+O8:function(a){return this.fb.call$1(a)},
+wr:function(a){return this.rb.call$1(a)},
+RK:function(a,b){return this.rb.call$2(a,b)},
+kG:function(a,b){return this.Zq.call$2(a,b)},
+Ch:function(a,b){return this.JS.call$1(b)},
+iT:function(a){return this.iq.call$1$specification(a)},
+$iswJ:true},e4:{"":"a;"},JB:{"":"a;"},Id:{"":"a;nU",
+gLj:function(){return this.nU},
+x5:function(a,b,c){var z,y
+z=this.nU
+for(;y=J.RE(z),z.gtp().gE2()==null;)z=y.geT(z)
+return z.gtp().gE2().call$5(z,new P.Id(y.geT(z)),a,b,c)},
+Vn:function(a,b){var z,y
+z=this.nU
+for(;y=J.RE(z),z.gtp().gcP()==null;)z=y.geT(z)
+return z.gtp().gcP().call$4(z,new P.Id(y.geT(z)),a,b)},
+qG:function(a,b,c){var z,y
+z=this.nU
+for(;y=J.RE(z),z.gtp().gvo()==null;)z=y.geT(z)
+return z.gtp().gvo().call$5(z,new P.Id(y.geT(z)),a,b,c)},
+nA:function(a,b,c,d){var z,y
+z=this.nU
+for(;y=J.RE(z),z.gtp().geo()==null;)z=y.geT(z)
+return z.gtp().geo().call$6(z,new P.Id(y.geT(z)),a,b,c,d)},
+TE:function(a,b){var z,y
+z=this.nU
+for(;y=J.RE(z),z.gtp().gKa()==null;)z=y.geT(z)
+return z.gtp().gKa().call$4(z,new P.Id(y.geT(z)),a,b)},
+"+registerCallback:2:0":0,
+xO:function(a,b){var z,y
+z=this.nU
+for(;y=J.RE(z),z.gtp().gXp()==null;)z=y.geT(z)
+return z.gtp().gXp().call$4(z,new P.Id(y.geT(z)),a,b)},
+P6:function(a,b){var z,y
+z=this.nU
+for(;y=J.RE(z),z.gtp().gfb()==null;)z=y.geT(z)
+return z.gtp().gfb().call$4(z,new P.Id(y.geT(z)),a,b)},
+RK:function(a,b){var z,y
+z=this.nU
+for(;y=J.RE(z),z.gtp().grb()==null;)z=y.geT(z)
+y=y.geT(z)
+z.gtp().grb().call$4(z,new P.Id(y),a,b)},
+B7:function(a,b,c){var z,y
+z=this.nU
+for(;y=J.RE(z),z.gtp().gZq()==null;)z=y.geT(z)
+return z.gtp().gZq().call$5(z,new P.Id(y.geT(z)),a,b,c)},
+RB:function(a,b,c){var z,y,x
+z=this.nU
+for(;y=z.gtp(),x=J.RE(z),y.gJS(y)==null;)z=x.geT(z)
+y=z.gtp()
+y.gJS(y).call$4(z,new P.Id(x.geT(z)),b,c)},
+ld:function(a,b,c){var z,y
+z=this.nU
+for(;y=J.RE(z),z.gtp().giq()==null;)z=y.geT(z)
+y=y.geT(z)
+return z.gtp().giq().call$5(z,new P.Id(y),a,b,c)}},fZ:{"":"a;",
+fC:function(a){return this.gC5()===a.gC5()},
+bH:function(a){var z,y,x,w
+try{x=this.Gr(a)
+return x}catch(w){x=H.Ru(w)
+z=x
+y=new H.XO(w,null)
+return this.hk(z,y)}},
+m1:function(a,b){var z,y,x,w
+try{x=this.FI(a,b)
+return x}catch(w){x=H.Ru(w)
+z=x
+y=new H.XO(w,null)
+return this.hk(z,y)}},
+z8:function(a,b,c){var z,y,x,w
+try{x=this.mg(a,b,c)
+return x}catch(w){x=H.Ru(w)
+z=x
+y=new H.XO(w,null)
+return this.hk(z,y)}},
+xi:function(a,b){var z=this.Al(a)
+if(b)return new P.TF(this,z)
+else return new P.Xz(this,z)},
+oj:function(a,b){var z=this.cR(a)
+if(b)return new P.Cg(this,z)
+else return new P.Hs(this,z)}},TF:{"":"Tp;a,b",
+call$0:function(){return this.a.bH(this.b)},
+"+call:0:0":0,
+$isEH:true,
+$is_X0:true},Xz:{"":"Tp;c,d",
+call$0:function(){return this.c.Gr(this.d)},
+"+call:0:0":0,
+$isEH:true,
+$is_X0:true},Cg:{"":"Tp;a,b",
+call$1:function(a){return this.a.m1(this.b,a)},
+"+call:1:0":0,
+$isEH:true,
+$is_HB:true,
+$is_Dv:true},Hs:{"":"Tp;c,d",
+call$1:function(a){return this.c.FI(this.d,a)},
+"+call:1:0":0,
+$isEH:true,
+$is_HB:true,
+$is_Dv:true},uo:{"":"fZ;eT>,tp<,Se",
+gC5:function(){return this.eT.gC5()},
+t:function(a,b){var z,y
+z=this.Se
+y=z.t(z,b)
+if(y!=null||z.x4(b))return y
+z=this.eT
+if(z!=null)return J.UQ(z,b)
+return},
+"+[]:1:0":0,
+hk:function(a,b){return new P.Id(this).x5(this,a,b)},
+uI:function(a,b){return new P.Id(this).ld(this,a,b)},
+iT:function(a){return this.uI(a,null)},
+Gr:function(a){return new P.Id(this).Vn(this,a)},
+FI:function(a,b){return new P.Id(this).qG(this,a,b)},
+mg:function(a,b,c){return new P.Id(this).nA(this,a,b,c)},
+Al:function(a){return new P.Id(this).TE(this,a)},
+"+registerCallback:1:0":0,
+cR:function(a){return new P.Id(this).xO(this,a)},
+O8:function(a){return new P.Id(this).P6(this,a)},
+wr:function(a){new P.Id(this).RK(this,a)},
+kG:function(a,b){return new P.Id(this).B7(this,a,b)},
+Ch:function(a,b){var z=new P.Id(this)
+z.RB(z,this,b)}},pK:{"":"Tp;a,b",
+call$0:function(){P.IA(new P.eM(this.a,this.b))},
+"+call:0:0":0,
+$isEH:true,
+$is_X0:true},eM:{"":"Tp;c,d",
+call$0:function(){var z,y,x
+z=this.c
+P.JS("Uncaught Error: "+H.d(z))
+y=this.d
+if(y==null){x=J.x(z)
+x=typeof z==="object"&&z!==null&&!!x.$isGe}else x=!1
+if(x)y=z.gI4()
+if(y!=null)P.JS("Stack Trace: \n"+H.d(y)+"\n")
+throw H.b(z)},
+"+call:0:0":0,
+$isEH:true,
+$is_X0:true},Ue:{"":"Tp;a",
+call$2:function(a,b){var z
+if(a==null)throw H.b(P.u("ZoneValue key must not be null"))
+z=this.a
+z.u(z,a,b)},
+"+call:2:0":0,
+$isEH:true,
+$is_bh:true},W5:{"":"a;",
+gE2:function(){return P.xP},
+hk:function(a,b){return this.gE2().call$2(a,b)},
+gcP:function(){return P.AI},
+Gr:function(a){return this.gcP().call$1(a)},
+gvo:function(){return P.MM},
+geo:function(){return P.C9},
+gKa:function(){return P.Qk},
+"+registerCallback":0,
+Al:function(a){return this.gKa().call$1(a)},
+gXp:function(){return P.zi},
+cR:function(a){return this.gXp().call$1(a)},
+gfb:function(){return P.v3},
+O8:function(a){return this.gfb().call$1(a)},
+grb:function(){return P.G2},
+wr:function(a){return this.grb().call$1(a)},
+RK:function(a,b){return this.grb().call$2(a,b)},
+gZq:function(){return P.KF},
+kG:function(a,b){return this.gZq().call$2(a,b)},
+gJS:function(a){return P.ZB},
+Ch:function(a,b){return this.gJS(a).call$1(b)},
+giq:function(){return P.LS},
+iT:function(a){return this.giq().call$1$specification(a)}},R8:{"":"fZ;",
+geT:function(a){return},
+gtp:function(){return C.v8},
+gC5:function(){return this},
+fC:function(a){return a.gC5()===this},
+t:function(a,b){return},
+"+[]:1:0":0,
+hk:function(a,b){return P.L2(this,null,this,a,b)},
+uI:function(a,b){return P.qc(this,null,this,a,b)},
+iT:function(a){return this.uI(a,null)},
+Gr:function(a){return P.T8(this,null,this,a)},
+FI:function(a,b){return P.V7(this,null,this,a,b)},
+mg:function(a,b,c){return P.Qx(this,null,this,a,b,c)},
+Al:function(a){return a},
+"+registerCallback:1:0":0,
+cR:function(a){return a},
+O8:function(a){return a},
+wr:function(a){P.IA(a)},
+kG:function(a,b){return P.jL(a,b)},
+Ch:function(a,b){H.LJ(b)
+return}}}],["dart.collection","dart:collection",,P,{Ou:function(a,b){return J.xC(a,b)},T9:function(a){return J.v1(a)},Py:function(a,b,c,d,e){var z
+if(a==null){z=new P.k6(0,null,null,null,null)
+H.VM(z,[d,e])
+return z}b=P.py
+return P.MP(a,b,c,d,e)},yv:function(a){var z=new P.YO(0,null,null,null,null)
+H.VM(z,[a])
+return z},FO:function(a){var z,y
+y=$.xb()
+if(y.tg(y,a))return"(...)"
+y=$.xb()
+y.h(y,a)
+z=[]
+try{P.Vr(a,z)}finally{y=$.xb()
+y.Rz(y,a)}y=P.p9("(")
+y.We(z,", ")
+y.KF(")")
+return y.vM},Vr:function(a,b){var z,y,x,w,v,u,t,s,r,q
+z=a.gA(a)
+y=0
+x=0
+while(!0){if(!(y<80||x<3))break
+if(!z.G())return
+w=H.d(z.gl())
+b.push(w)
+y+=w.length+2;++x}if(!z.G()){if(x<=5)return
+if(0>=b.length)throw H.e(b,0)
+v=b.pop()
+if(0>=b.length)throw H.e(b,0)
+u=b.pop()}else{t=z.gl();++x
+if(!z.G()){if(x<=4){b.push(H.d(t))
+return}v=H.d(t)
+if(0>=b.length)throw H.e(b,0)
+u=b.pop()
+y+=v.length+2}else{s=z.gl();++x
+for(;z.G();t=s,s=r){r=z.gl();++x
+if(x>100){while(!0){if(!(y>75&&x>3))break
+if(0>=b.length)throw H.e(b,0)
+y-=b.pop().length+2;--x}b.push("...")
+return}}u=H.d(t)
+v=H.d(s)
+y+=v.length+u.length+4}}if(x>b.length+2){y+=5
+q="..."}else q=null
+while(!0){if(!(y>80&&b.length>3))break
+if(0>=b.length)throw H.e(b,0)
+y-=b.pop().length+2
+if(q==null){y+=5
+q="..."}}if(q!=null)b.push(q)
+b.push(u)
+b.push(v)},L5:function(a,b,c,d,e){var z
+if(b==null){if(a==null){z=new P.YB(0,null,null,null,null,null,0)
+H.VM(z,[d,e])
+return z}b=P.py}else{if(P.J2===b&&P.N3===a){z=new P.ey(0,null,null,null,null,null,0)
+H.VM(z,[d,e])
+return z}if(a==null)a=P.iv}return P.Ex(a,b,c,d,e)},Ls:function(a,b,c,d){var z=new P.b6(0,null,null,null,null,null,0)
+H.VM(z,[d])
+return z},vW:function(a){var z,y,x,w
+z={}
+for(x=0;x<$.tw().length;++x){w=$.tw()
+if(x>=w.length)throw H.e(w,x)
+if(w[x]===a)return"{...}"}y=P.p9("")
+try{$.tw().push(a)
+y.KF("{")
+z.a=!0
+J.kH(a,new P.W0(z,y))
+y.KF("}")}finally{z=$.tw()
+if(0>=z.length)throw H.e(z,0)
+z.pop()}return y.gvM()},k6:{"":"a;X5,vv,OX,OB,aw",
+gB:function(a){return this.X5},
+"+length":0,
+gl0:function(a){return this.X5===0},
+"+isEmpty":0,
+gor:function(a){return this.X5!==0},
+"+isNotEmpty":0,
+gvc:function(a){var z=new P.fG(this)
+H.VM(z,[H.W8(this,"k6",0)])
+return z},
+"+keys":0,
+gUQ:function(a){var z=new P.fG(this)
+H.VM(z,[H.W8(this,"k6",0)])
+return H.K1(z,new P.oi(this),H.W8(z,"mW",0),null)},
+"+values":0,
+x4:function(a){var z,y,x
+if(typeof a==="string"&&a!=="__proto__"){z=this.vv
+return z==null?!1:z[a]!=null}else if(typeof a==="number"&&(a&0x3ffffff)===a){y=this.OX
+return y==null?!1:y[a]!=null}else{x=this.OB
+if(x==null)return!1
+return this.aH(x[this.nm(a)],a)>=0}},
+"+containsKey:1:0":0,
+PF:function(a){var z=this.Ig()
+z.toString
+return H.Ck(z,new P.ce(this,a))},
+"+containsValue:1:0":0,
+t:function(a,b){var z,y,x,w,v,u,t
+if(typeof b==="string"&&b!=="__proto__"){z=this.vv
+if(z==null)y=null
+else{x=z[b]
+y=x===z?null:x}return y}else if(typeof b==="number"&&(b&0x3ffffff)===b){w=this.OX
+if(w==null)y=null
+else{x=w[b]
+y=x===w?null:x}return y}else{v=this.OB
+if(v==null)return
+u=v[this.nm(b)]
+t=this.aH(u,b)
+return t<0?null:u[t+1]}},
+"+[]:1:0":0,
+u:function(a,b,c){var z,y,x,w,v,u,t,s
+if(typeof b==="string"&&b!=="__proto__"){z=this.vv
+if(z==null){y=Object.create(null)
+if(y==null)y["<non-identifier-key>"]=y
+else y["<non-identifier-key>"]=y
+delete y["<non-identifier-key>"]
+this.vv=y
+z=y}if(z[b]==null){this.X5=this.X5+1
+this.aw=null}if(c==null)z[b]=z
+else z[b]=c}else if(typeof b==="number"&&(b&0x3ffffff)===b){x=this.OX
+if(x==null){y=Object.create(null)
+if(y==null)y["<non-identifier-key>"]=y
+else y["<non-identifier-key>"]=y
+delete y["<non-identifier-key>"]
+this.OX=y
+x=y}if(x[b]==null){this.X5=this.X5+1
+this.aw=null}if(c==null)x[b]=x
+else x[b]=c}else{w=this.OB
+if(w==null){y=Object.create(null)
+if(y==null)y["<non-identifier-key>"]=y
+else y["<non-identifier-key>"]=y
+delete y["<non-identifier-key>"]
+this.OB=y
+w=y}v=this.nm(b)
+u=w[v]
+if(u==null){t=[b,c]
+if(t==null)w[v]=w
+else w[v]=t
+this.X5=this.X5+1
+this.aw=null}else{s=this.aH(u,b)
+if(s>=0)u[s+1]=c
+else{u.push(b,c)
+this.X5=this.X5+1
+this.aw=null}}}},
+"+[]=:2:0":0,
+Rz:function(a,b){var z,y,x
+if(typeof b==="string"&&b!=="__proto__")return this.Nv(this.vv,b)
+else if(typeof b==="number"&&(b&0x3ffffff)===b)return this.Nv(this.OX,b)
+else{z=this.OB
+if(z==null)return
+y=z[this.nm(b)]
+x=this.aH(y,b)
+if(x<0)return
+this.X5=this.X5-1
+this.aw=null
+return y.splice(x,2)[1]}},
+aN:function(a,b){var z,y,x,w
+z=this.Ig()
+for(y=z.length,x=0;x<y;++x){w=z[x]
+b.call$2(w,this.t(this,w))
+if(z!==this.aw)throw H.b(P.a4(this))}},
+Ig:function(){var z,y,x,w,v,u,t,s,r,q,p,o
+z=this.aw
+if(z!=null)return z
+y=P.A(this.X5,null)
+x=this.vv
+if(x!=null){w=Object.getOwnPropertyNames(x)
+v=w.length
+for(u=0,t=0;t<v;++t){y[u]=w[t];++u}}else u=0
+s=this.OX
+if(s!=null){w=Object.getOwnPropertyNames(s)
+v=w.length
+for(t=0;t<v;++t){y[u]=+w[t];++u}}r=this.OB
+if(r!=null){w=Object.getOwnPropertyNames(r)
+v=w.length
+for(t=0;t<v;++t){q=r[w[t]]
+p=q.length
+for(o=0;o<p;o+=2){y[u]=q[o];++u}}}this.aw=y
+return y},
+Nv:function(a,b){var z
+if(a!=null&&a[b]!=null){z=P.vL(a,b)
+delete a[b]
+this.X5=this.X5-1
+this.aw=null
+return z}else return},
+nm:function(a){return J.v1(a)&0x3ffffff},
+aH:function(a,b){var z,y
+if(a==null)return-1
+z=a.length
+for(y=0;y<z;y+=2)if(J.xC(a[y],b))return y
+return-1},
+$isL8:true,
+static:{vL:function(a,b){var z=a[b]
+return z===a?null:z}}},oi:{"":"Tp;a",
+call$1:function(a){var z=this.a
+return z.t(z,a)},
+"+call:1:0":0,
+$isEH:true,
+$is_HB:true,
+$is_Dv:true},ce:{"":"Tp;a,b",
+call$1:function(a){var z=this.a
+return J.xC(z.t(z,a),this.b)},
+"+call:1:0":0,
+$isEH:true,
+$is_HB:true,
+$is_Dv:true},o2:{"":"k6;m6,Q6,bR,X5,vv,OX,OB,aw",
+C2:function(a,b){return this.m6.call$2(a,b)},
+H5:function(a){return this.Q6.call$1(a)},
+Ef:function(a){return this.bR.call$1(a)},
+t:function(a,b){if(this.Ef(b)!==!0)return
+return P.k6.prototype.t.call(this,this,b)},
+"+[]:1:0":0,
+x4:function(a){if(this.Ef(a)!==!0)return!1
+return P.k6.prototype.x4.call(this,a)},
+"+containsKey:1:0":0,
+Rz:function(a,b){if(this.Ef(b)!==!0)return
+return P.k6.prototype.Rz.call(this,this,b)},
+nm:function(a){return this.H5(a)&0x3ffffff},
+aH:function(a,b){var z,y
+if(a==null)return-1
+z=a.length
+for(y=0;y<z;y+=2)if(this.C2(a[y],b)===!0)return y
+return-1},
+bu:function(a){return P.vW(this)},
+$ask6:null,
+$asL8:null,
+static:{MP:function(a,b,c,d,e){var z=new P.jG(d)
+z=new P.o2(a,b,z,0,null,null,null,null)
+H.VM(z,[d,e])
+return z}}},jG:{"":"Tp;a",
+call$1:function(a){var z=H.Gq(a,this.a)
+return z},
+"+call:1:0":0,
+$isEH:true,
+$is_HB:true,
+$is_Dv:true},fG:{"":"mW;Fb",
+gB:function(a){return this.Fb.X5},
+"+length":0,
+gl0:function(a){return this.Fb.X5===0},
+"+isEmpty":0,
+gA:function(a){var z,y
+z=this.Fb
+y=z.Ig()
+y=new P.EQ(z,y,0,null)
+H.VM(y,[H.W8(this,"fG",0)])
+return y},
+tg:function(a,b){return this.Fb.x4(b)},
+aN:function(a,b){var z,y,x,w
+z=this.Fb
+y=z.Ig()
+for(x=y.length,w=0;w<x;++w){b.call$1(y[w])
+if(y!==z.aw)throw H.b(P.a4(z))}},
+$asmW:null,
+$ascX:null,
+$isqC:true},EQ:{"":"a;Fb,aw,zi,fD",
+gl:function(){return this.fD},
+"+current":0,
+G:function(){var z,y,x
+z=this.aw
+y=this.zi
+x=this.Fb
+if(z!==x.aw)throw H.b(P.a4(x))
+else if(y>=z.length){this.fD=null
+return!1}else{this.fD=z[y]
+this.zi=y+1
+return!0}}},YB:{"":"a;X5,vv,OX,OB,H9,lX,zN",
+gB:function(a){return this.X5},
+"+length":0,
+gl0:function(a){return this.X5===0},
+"+isEmpty":0,
+gor:function(a){return this.X5!==0},
+"+isNotEmpty":0,
+gvc:function(a){var z=new P.Cm(this)
+H.VM(z,[H.W8(this,"YB",0)])
+return z},
+"+keys":0,
+gUQ:function(a){var z=new P.Cm(this)
+H.VM(z,[H.W8(this,"YB",0)])
+return H.K1(z,new P.iX(this),H.W8(z,"mW",0),null)},
+"+values":0,
+x4:function(a){var z,y,x
+if(typeof a==="string"&&a!=="__proto__"){z=this.vv
+if(z==null)return!1
+return z[a]!=null}else if(typeof a==="number"&&(a&0x3ffffff)===a){y=this.OX
+if(y==null)return!1
+return y[a]!=null}else{x=this.OB
+if(x==null)return!1
+return this.aH(x[this.nm(a)],a)>=0}},
+"+containsKey:1:0":0,
+PF:function(a){var z=new P.Cm(this)
+H.VM(z,[H.W8(this,"YB",0)])
+return z.Vr(z,new P.ou(this,a))},
+"+containsValue:1:0":0,
+Ay:function(a,b){J.kH(b,new P.S9(this))},
+t:function(a,b){var z,y,x,w,v,u
+if(typeof b==="string"&&b!=="__proto__"){z=this.vv
+if(z==null)return
+y=z[b]
+return y==null?null:y.gS4()}else if(typeof b==="number"&&(b&0x3ffffff)===b){x=this.OX
+if(x==null)return
+y=x[b]
+return y==null?null:y.gS4()}else{w=this.OB
+if(w==null)return
+v=w[this.nm(b)]
+u=this.aH(v,b)
+if(u<0)return
+return v[u].gS4()}},
+"+[]:1:0":0,
+u:function(a,b,c){var z,y,x,w,v,u,t,s
+if(typeof b==="string"&&b!=="__proto__"){z=this.vv
+if(z==null){y=Object.create(null)
+y["<non-identifier-key>"]=y
+delete y["<non-identifier-key>"]
+this.vv=y
+z=y}x=z[b]
+if(x==null)z[b]=this.y5(b,c)
+else x.sS4(c)}else if(typeof b==="number"&&(b&0x3ffffff)===b){w=this.OX
+if(w==null){y=Object.create(null)
+y["<non-identifier-key>"]=y
+delete y["<non-identifier-key>"]
+this.OX=y
+w=y}x=w[b]
+if(x==null)w[b]=this.y5(b,c)
+else x.sS4(c)}else{v=this.OB
+if(v==null){y=Object.create(null)
+y["<non-identifier-key>"]=y
+delete y["<non-identifier-key>"]
+this.OB=y
+v=y}u=this.nm(b)
+t=v[u]
+if(t==null)v[u]=[this.y5(b,c)]
+else{s=this.aH(t,b)
+if(s>=0)t[s].sS4(c)
+else t.push(this.y5(b,c))}}},
+"+[]=:2:0":0,
+to:function(a,b){var z
+if(this.x4(a))return this.t(this,a)
+z=b.call$0()
+this.u(this,a,z)
+return z},
+Rz:function(a,b){var z,y,x,w
+if(typeof b==="string"&&b!=="__proto__")return this.Nv(this.vv,b)
+else if(typeof b==="number"&&(b&0x3ffffff)===b)return this.Nv(this.OX,b)
+else{z=this.OB
+if(z==null)return
+y=z[this.nm(b)]
+x=this.aH(y,b)
+if(x<0)return
+w=y.splice(x,1)[0]
+this.Vb(w)
+return w.gS4()}},
+V1:function(a){if(this.X5>0){this.lX=null
+this.H9=null
+this.OB=null
+this.OX=null
+this.vv=null
+this.X5=0
+this.zN=this.zN+1&67108863}},
+aN:function(a,b){var z,y
+z=this.H9
+y=this.zN
+for(;z!=null;){b.call$2(z.gkh(),z.gS4())
+if(y!==this.zN)throw H.b(P.a4(this))
+z=z.gDG()}},
+Nv:function(a,b){var z
+if(a==null)return
+z=a[b]
+if(z==null)return
+this.Vb(z)
+delete a[b]
+return z.gS4()},
+y5:function(a,b){var z,y
+z=new P.db(a,b,null,null)
+if(this.H9==null){this.lX=z
+this.H9=z}else{y=this.lX
+z.zQ=y
+y.sDG(z)
+this.lX=z}this.X5=this.X5+1
+this.zN=this.zN+1&67108863
+return z},
+Vb:function(a){var z,y
+z=a.gzQ()
+y=a.gDG()
+if(z==null)this.H9=y
+else z.sDG(y)
+if(y==null)this.lX=z
+else y.szQ(z)
+this.X5=this.X5-1
+this.zN=this.zN+1&67108863},
+nm:function(a){return J.v1(a)&0x3ffffff},
+aH:function(a,b){var z,y
+if(a==null)return-1
+z=a.length
+for(y=0;y<z;++y)if(J.xC(a[y].gkh(),b))return y
+return-1},
+bu:function(a){return P.vW(this)},
+$isFo:true,
+$isL8:true},iX:{"":"Tp;a",
+call$1:function(a){var z=this.a
+return z.t(z,a)},
+"+call:1:0":0,
+$isEH:true,
+$is_HB:true,
+$is_Dv:true},ou:{"":"Tp;a,b",
+call$1:function(a){var z=this.a
+return J.xC(z.t(z,a),this.b)},
+"+call:1:0":0,
+$isEH:true,
+$is_HB:true,
+$is_Dv:true},S9:{"":"Tp;a",
+call$2:function(a,b){var z=this.a
+z.u(z,a,b)},
+"+call:2:0":0,
+$isEH:true,
+$is_bh:true},ey:{"":"YB;X5,vv,OX,OB,H9,lX,zN",
+nm:function(a){return H.CU(a)&0x3ffffff},
+aH:function(a,b){var z,y,x
+if(a==null)return-1
+z=a.length
+for(y=0;y<z;++y){x=a[y].gkh()
+if(x==null?b==null:x===b)return y}return-1},
+$asYB:null,
+$asFo:null,
+$asL8:null},xd:{"":"YB;m6,Q6,bR,X5,vv,OX,OB,H9,lX,zN",
+C2:function(a,b){return this.m6.call$2(a,b)},
+H5:function(a){return this.Q6.call$1(a)},
+Ef:function(a){return this.bR.call$1(a)},
+t:function(a,b){if(this.Ef(b)!==!0)return
+return P.YB.prototype.t.call(this,this,b)},
+"+[]:1:0":0,
+x4:function(a){if(this.Ef(a)!==!0)return!1
+return P.YB.prototype.x4.call(this,a)},
+"+containsKey:1:0":0,
+Rz:function(a,b){if(this.Ef(b)!==!0)return
+return P.YB.prototype.Rz.call(this,this,b)},
+nm:function(a){return this.H5(a)&0x3ffffff},
+aH:function(a,b){var z,y
+if(a==null)return-1
+z=a.length
+for(y=0;y<z;++y)if(this.C2(a[y].gkh(),b)===!0)return y
+return-1},
+$asYB:null,
+$asFo:null,
+$asL8:null,
+static:{Ex:function(a,b,c,d,e){var z=new P.v6(d)
+z=new P.xd(a,b,z,0,null,null,null,null,null,0)
+H.VM(z,[d,e])
+return z}}},v6:{"":"Tp;a",
+call$1:function(a){var z=H.Gq(a,this.a)
+return z},
+"+call:1:0":0,
+$isEH:true,
+$is_HB:true,
+$is_Dv:true},db:{"":"a;kh<,S4@,DG@,zQ@"},Cm:{"":"mW;Fb",
+gB:function(a){return this.Fb.X5},
+"+length":0,
+gl0:function(a){return this.Fb.X5===0},
+"+isEmpty":0,
+gA:function(a){var z,y
+z=this.Fb
+y=z.zN
+y=new P.N6(z,y,null,null)
+H.VM(y,[H.W8(this,"Cm",0)])
+y.zq=y.Fb.H9
+return y},
+tg:function(a,b){return this.Fb.x4(b)},
+aN:function(a,b){var z,y,x
+z=this.Fb
+y=z.H9
+x=z.zN
+for(;y!=null;){b.call$1(y.gkh())
+if(x!==z.zN)throw H.b(P.a4(z))
+y=y.gDG()}},
+$asmW:null,
+$ascX:null,
+$isqC:true},N6:{"":"a;Fb,zN,zq,fD",
+gl:function(){return this.fD},
+"+current":0,
+G:function(){var z=this.Fb
+if(this.zN!==z.zN)throw H.b(P.a4(z))
+else{z=this.zq
+if(z==null){this.fD=null
+return!1}else{this.fD=z.gkh()
+this.zq=this.zq.gDG()
+return!0}}}},jg:{"":"u3;",
+gA:function(a){var z=this.Zl()
+z=new P.oz(this,z,0,null)
+H.VM(z,[H.W8(this,"jg",0)])
+return z},
+gB:function(a){return this.X5},
+"+length":0,
+gl0:function(a){return this.X5===0},
+"+isEmpty":0,
+gor:function(a){return this.X5!==0},
+"+isNotEmpty":0,
+tg:function(a,b){var z,y,x
+if(typeof b==="string"&&b!=="__proto__"){z=this.vv
+return z==null?!1:z[b]!=null}else if(typeof b==="number"&&(b&0x3ffffff)===b){y=this.OX
+return y==null?!1:y[b]!=null}else{x=this.OB
+if(x==null)return!1
+return this.aH(x[this.nm(b)],b)>=0}},
+Zt:function(a){var z,y,x,w
+if(!(typeof a==="string"&&a!=="__proto__"))z=typeof a==="number"&&(a&0x3ffffff)===a
+else z=!0
+if(z)return this.tg(this,a)?a:null
+y=this.OB
+if(y==null)return
+x=y[this.nm(a)]
+w=this.aH(x,a)
+if(w<0)return
+return J.UQ(x,w)},
+h:function(a,b){var z,y,x,w,v,u
+if(typeof b==="string"&&b!=="__proto__"){z=this.vv
+if(z==null){y=Object.create(null)
+y["<non-identifier-key>"]=y
+delete y["<non-identifier-key>"]
+this.vv=y
+z=y}return this.cA(z,b)}else if(typeof b==="number"&&(b&0x3ffffff)===b){x=this.OX
+if(x==null){y=Object.create(null)
+y["<non-identifier-key>"]=y
+delete y["<non-identifier-key>"]
+this.OX=y
+x=y}return this.cA(x,b)}else{w=this.OB
+if(w==null){y=Object.create(null)
+y["<non-identifier-key>"]=y
+delete y["<non-identifier-key>"]
+this.OB=y
+w=y}v=this.nm(b)
+u=w[v]
+if(u==null)w[v]=[b]
+else{if(this.aH(u,b)>=0)return!1
+u.push(b)}this.X5=this.X5+1
+this.DM=null
+return!0}},
+Rz:function(a,b){var z,y,x
+if(typeof b==="string"&&b!=="__proto__")return this.Nv(this.vv,b)
+else if(typeof b==="number"&&(b&0x3ffffff)===b)return this.Nv(this.OX,b)
+else{z=this.OB
+if(z==null)return!1
+y=z[this.nm(b)]
+x=this.aH(y,b)
+if(x<0)return!1
+this.X5=this.X5-1
+this.DM=null
+y.splice(x,1)
+return!0}},
+Zl:function(){var z,y,x,w,v,u,t,s,r,q,p,o
+z=this.DM
+if(z!=null)return z
+y=P.A(this.X5,null)
+x=this.vv
+if(x!=null){w=Object.getOwnPropertyNames(x)
+v=w.length
+for(u=0,t=0;t<v;++t){y[u]=w[t];++u}}else u=0
+s=this.OX
+if(s!=null){w=Object.getOwnPropertyNames(s)
+v=w.length
+for(t=0;t<v;++t){y[u]=+w[t];++u}}r=this.OB
+if(r!=null){w=Object.getOwnPropertyNames(r)
+v=w.length
+for(t=0;t<v;++t){q=r[w[t]]
+p=q.length
+for(o=0;o<p;++o){y[u]=q[o];++u}}}this.DM=y
+return y},
+cA:function(a,b){if(a[b]!=null)return!1
+a[b]=0
+this.X5=this.X5+1
+this.DM=null
+return!0},
+Nv:function(a,b){if(a!=null&&a[b]!=null){delete a[b]
+this.X5=this.X5-1
+this.DM=null
+return!0}else return!1},
+nm:function(a){return J.v1(a)&0x3ffffff},
+aH:function(a,b){var z,y
+if(a==null)return-1
+z=a.length
+for(y=0;y<z;++y)if(J.xC(a[y],b))return y
+return-1},
+$asu3:null,
+$ascX:null,
+$isqC:true,
+$iscX:true},YO:{"":"jg;X5,vv,OX,OB,DM",
+nm:function(a){return H.CU(a)&0x3ffffff},
+aH:function(a,b){var z,y,x
+if(a==null)return-1
+z=a.length
+for(y=0;y<z;++y){x=a[y]
+if(x==null?b==null:x===b)return y}return-1},
+$asjg:null,
+$ascX:null},oz:{"":"a;O2,DM,zi,fD",
+gl:function(){return this.fD},
+"+current":0,
+G:function(){var z,y,x
+z=this.DM
+y=this.zi
+x=this.O2
+if(z!==x.DM)throw H.b(P.a4(x))
+else if(y>=z.length){this.fD=null
+return!1}else{this.fD=z[y]
+this.zi=y+1
+return!0}}},b6:{"":"u3;X5,vv,OX,OB,H9,lX,zN",
+gA:function(a){var z=new P.zQ(this,this.zN,null,null)
+H.VM(z,[null])
+z.zq=z.O2.H9
+return z},
+gB:function(a){return this.X5},
+"+length":0,
+gl0:function(a){return this.X5===0},
+"+isEmpty":0,
+gor:function(a){return this.X5!==0},
+"+isNotEmpty":0,
+tg:function(a,b){var z,y,x
+if(typeof b==="string"&&b!=="__proto__"){z=this.vv
+if(z==null)return!1
+return z[b]!=null}else if(typeof b==="number"&&(b&0x3ffffff)===b){y=this.OX
+if(y==null)return!1
+return y[b]!=null}else{x=this.OB
+if(x==null)return!1
+return this.aH(x[this.nm(b)],b)>=0}},
+Zt:function(a){var z,y,x,w
+if(!(typeof a==="string"&&a!=="__proto__"))z=typeof a==="number"&&(a&0x3ffffff)===a
+else z=!0
+if(z)return this.tg(this,a)?a:null
+else{y=this.OB
+if(y==null)return
+x=y[this.nm(a)]
+w=this.aH(x,a)
+if(w<0)return
+return J.UQ(x,w).gGc()}},
+aN:function(a,b){var z,y
+z=this.H9
+y=this.zN
+for(;z!=null;){b.call$1(z.gGc())
+if(y!==this.zN)throw H.b(P.a4(this))
+z=z.gDG()}},
+grZ:function(a){var z=this.lX
+if(z==null)throw H.b(new P.lj("No elements"))
+return z.gGc()},
+h:function(a,b){var z,y,x,w,v,u
+if(typeof b==="string"&&b!=="__proto__"){z=this.vv
+if(z==null){y=Object.create(null)
+y["<non-identifier-key>"]=y
+delete y["<non-identifier-key>"]
+this.vv=y
+z=y}return this.cA(z,b)}else if(typeof b==="number"&&(b&0x3ffffff)===b){x=this.OX
+if(x==null){y=Object.create(null)
+y["<non-identifier-key>"]=y
+delete y["<non-identifier-key>"]
+this.OX=y
+x=y}return this.cA(x,b)}else{w=this.OB
+if(w==null){y=Object.create(null)
+y["<non-identifier-key>"]=y
+delete y["<non-identifier-key>"]
+this.OB=y
+w=y}v=this.nm(b)
+u=w[v]
+if(u==null)w[v]=[this.xf(b)]
+else{if(this.aH(u,b)>=0)return!1
+u.push(this.xf(b))}return!0}},
+Ay:function(a,b){var z
+for(z=new P.zQ(b,b.zN,null,null),H.VM(z,[null]),z.zq=z.O2.H9;z.G();)this.h(this,z.fD)},
+Rz:function(a,b){var z,y,x
+if(typeof b==="string"&&b!=="__proto__")return this.Nv(this.vv,b)
+else if(typeof b==="number"&&(b&0x3ffffff)===b)return this.Nv(this.OX,b)
+else{z=this.OB
+if(z==null)return!1
+y=z[this.nm(b)]
+x=this.aH(y,b)
+if(x<0)return!1
+this.Vb(y.splice(x,1)[0])
+return!0}},
+cA:function(a,b){if(a[b]!=null)return!1
+a[b]=this.xf(b)
+return!0},
+Nv:function(a,b){var z
+if(a==null)return!1
+z=a[b]
+if(z==null)return!1
+this.Vb(z)
+delete a[b]
+return!0},
+xf:function(a){var z,y
+z=new P.ef(a,null,null)
+if(this.H9==null){this.lX=z
+this.H9=z}else{y=this.lX
+z.zQ=y
+y.sDG(z)
+this.lX=z}this.X5=this.X5+1
+this.zN=this.zN+1&67108863
+return z},
+Vb:function(a){var z,y
+z=a.gzQ()
+y=a.gDG()
+if(z==null)this.H9=y
+else z.sDG(y)
+if(y==null)this.lX=z
+else y.szQ(z)
+this.X5=this.X5-1
+this.zN=this.zN+1&67108863},
+nm:function(a){return J.v1(a)&0x3ffffff},
+aH:function(a,b){var z,y
+if(a==null)return-1
+z=a.length
+for(y=0;y<z;++y)if(J.xC(a[y].gGc(),b))return y
+return-1},
+$asu3:null,
+$ascX:null,
+$isqC:true,
+$iscX:true},ef:{"":"a;Gc<,DG@,zQ@"},zQ:{"":"a;O2,zN,zq,fD",
+gl:function(){return this.fD},
+"+current":0,
+G:function(){var z=this.O2
+if(this.zN!==z.zN)throw H.b(P.a4(z))
+else{z=this.zq
+if(z==null){this.fD=null
+return!1}else{this.fD=z.gGc()
+this.zq=this.zq.gDG()
+return!0}}}},Yp:{"":"XC;G4",
+gB:function(a){return J.q8(this.G4)},
+"+length":0,
+t:function(a,b){return J.i4(this.G4,b)},
+"+[]:1:0":0,
+$asXC:null,
+$asWO:null,
+$ascX:null},u3:{"":"mW;",
+tt:function(a,b){var z,y,x,w,v
+if(b){z=P.A(null,H.W8(this,"u3",0))
+H.VM(z,[H.W8(this,"u3",0)])
+C.Nm.sB(z,this.gB(this))}else{z=P.A(this.gB(this),H.W8(this,"u3",0))
+H.VM(z,[H.W8(this,"u3",0)])}for(y=this.gA(this),x=0;y.G();x=v){w=y.gl()
+v=x+1
+if(x>=z.length)throw H.e(z,x)
+z[x]=w}return z},
+br:function(a){return this.tt(a,!0)},
+bu:function(a){return H.mx(this,"{","}")},
+$asmW:null,
+$ascX:null,
+$isqC:true,
+$iscX:true},mW:{"":"a;",
+ez:function(a,b){return H.K1(this,b,H.W8(this,"mW",0),null)},
+ev:function(a,b){var z=new H.U5(this,b)
+H.VM(z,[H.W8(this,"mW",0)])
+return z},
+tg:function(a,b){var z
+for(z=this.gA(this);z.G();)if(J.xC(z.gl(),b))return!0
+return!1},
+aN:function(a,b){var z
+for(z=this.gA(this);z.G();)b.call$1(z.gl())},
+zV:function(a,b){var z,y,x
+z=this.gA(this)
+if(!z.G())return""
+y=P.p9("")
+if(b==="")do{x=H.d(z.gl())
+y.vM=y.vM+x}while(z.G())
+else{y.KF(H.d(z.gl()))
+for(;z.G();){y.vM=y.vM+b
+x=H.d(z.gl())
+y.vM=y.vM+x}}return y.vM},
+Vr:function(a,b){var z
+for(z=this.gA(this);z.G();)if(b.call$1(z.gl())===!0)return!0
+return!1},
+tt:function(a,b){return P.F(this,b,H.W8(this,"mW",0))},
+br:function(a){return this.tt(a,!0)},
+gB:function(a){var z,y
+z=this.gA(this)
+for(y=0;z.G();)++y
+return y},
+"+length":0,
+gl0:function(a){return!this.gA(this).G()},
+"+isEmpty":0,
+gor:function(a){return this.gl0(this)!==!0},
+"+isNotEmpty":0,
+eR:function(a,b){return H.ke(this,b,H.W8(this,"mW",0))},
+gFV:function(a){var z=this.gA(this)
+if(!z.G())throw H.b(new P.lj("No elements"))
+return z.gl()},
+grZ:function(a){var z,y
+z=this.gA(this)
+if(!z.G())throw H.b(new P.lj("No elements"))
+do y=z.gl()
+while(z.G())
+return y},
+l8:function(a,b,c){var z,y
+for(z=this.gA(this);z.G();){y=z.gl()
+if(b.call$1(y)===!0)return y}throw H.b(new P.lj("No matching element"))},
+XG:function(a,b){return this.l8(a,b,null)},
+Zv:function(a,b){var z,y,x,w
+if(typeof b!=="number"||Math.floor(b)!==b||b<0)throw H.b(P.N(b))
+for(z=this.gA(this),y=b;z.G();){x=z.gl()
+w=J.x(y)
+if(w.n(y,0))return x
+y=w.W(y,1)}throw H.b(P.N(b))},
+bu:function(a){return P.FO(this)},
+$iscX:true,
+$ascX:null},ar:{"":"a+lD;",$isList:true,$asWO:null,$isqC:true,$iscX:true,$ascX:null},lD:{"":"a;",
+gA:function(a){var z=new H.a7(a,this.gB(a),0,null)
+H.VM(z,[H.W8(a,"lD",0)])
+return z},
+Zv:function(a,b){return this.t(a,b)},
+aN:function(a,b){var z,y
+z=this.gB(a)
+if(typeof z!=="number")throw H.s(z)
+y=0
+for(;y<z;++y){b.call$1(this.t(a,y))
+if(z!==this.gB(a))throw H.b(P.a4(a))}},
+gl0:function(a){return J.xC(this.gB(a),0)},
+"+isEmpty":0,
+gor:function(a){return!this.gl0(a)},
+"+isNotEmpty":0,
+grZ:function(a){if(J.xC(this.gB(a),0))throw H.b(new P.lj("No elements"))
+return this.t(a,J.xH(this.gB(a),1))},
+tg:function(a,b){var z,y
+z=this.gB(a)
+if(typeof z!=="number")throw H.s(z)
+y=0
+for(;y<z;++y){if(J.xC(this.t(a,y),b))return!0
+if(z!==this.gB(a))throw H.b(P.a4(a))}return!1},
+Vr:function(a,b){var z,y
+z=this.gB(a)
+if(typeof z!=="number")throw H.s(z)
+y=0
+for(;y<z;++y){if(b.call$1(this.t(a,y))===!0)return!0
+if(z!==this.gB(a))throw H.b(P.a4(a))}return!1},
+zV:function(a,b){var z,y,x,w,v,u
+z=this.gB(a)
+if(b.length!==0){y=J.x(z)
+if(y.n(z,0))return""
+x=H.d(this.t(a,0))
+if(!y.n(z,this.gB(a)))throw H.b(P.a4(a))
+w=P.p9(x)
+if(typeof z!=="number")throw H.s(z)
+v=1
+for(;v<z;++v){w.vM=w.vM+b
+u=this.t(a,v)
+u=typeof u==="string"?u:H.d(u)
+w.vM=w.vM+u
+if(z!==this.gB(a))throw H.b(P.a4(a))}return w.vM}else{w=P.p9("")
+if(typeof z!=="number")throw H.s(z)
+v=0
+for(;v<z;++v){u=this.t(a,v)
+u=typeof u==="string"?u:H.d(u)
+w.vM=w.vM+u
+if(z!==this.gB(a))throw H.b(P.a4(a))}return w.vM}},
+ev:function(a,b){var z=new H.U5(a,b)
+H.VM(z,[H.W8(a,"lD",0)])
+return z},
+ez:function(a,b){var z=new H.A8(a,b)
+H.VM(z,[null,null])
+return z},
+eR:function(a,b){return H.j5(a,b,null,null)},
+tt:function(a,b){var z,y,x
+if(b){z=P.A(null,H.W8(a,"lD",0))
+H.VM(z,[H.W8(a,"lD",0)])
+C.Nm.sB(z,this.gB(a))}else{z=P.A(this.gB(a),H.W8(a,"lD",0))
+H.VM(z,[H.W8(a,"lD",0)])}y=0
+while(!0){x=this.gB(a)
+if(typeof x!=="number")throw H.s(x)
+if(!(y<x))break
+x=this.t(a,y)
+if(y>=z.length)throw H.e(z,y)
+z[y]=x;++y}return z},
+br:function(a){return this.tt(a,!0)},
+h:function(a,b){var z=this.gB(a)
+this.sB(a,J.WB(z,1))
+this.u(a,z,b)},
+Rz:function(a,b){var z,y
+z=0
+while(!0){y=this.gB(a)
+if(typeof y!=="number")throw H.s(y)
+if(!(z<y))break
+if(J.xC(this.t(a,z),b)){this.YW(a,z,J.xH(this.gB(a),1),a,z+1)
+this.sB(a,J.xH(this.gB(a),1))
+return!0}++z}return!1},
+pZ:function(a,b,c){var z=J.Wx(b)
+if(z.C(b,0)||z.D(b,this.gB(a)))throw H.b(P.TE(b,0,this.gB(a)))
+z=J.Wx(c)
+if(z.C(c,b)||z.D(c,this.gB(a)))throw H.b(P.TE(c,b,this.gB(a)))},
+D6:function(a,b,c){var z,y,x,w
+c=this.gB(a)
+this.pZ(a,b,c)
+z=J.xH(c,b)
+y=P.A(null,H.W8(a,"lD",0))
+H.VM(y,[H.W8(a,"lD",0)])
+C.Nm.sB(y,z)
+if(typeof z!=="number")throw H.s(z)
+x=0
+for(;x<z;++x){w=this.t(a,b+x)
+if(x>=y.length)throw H.e(y,x)
+y[x]=w}return y},
+Jk:function(a,b){return this.D6(a,b,null)},
+Mu:function(a,b,c){this.pZ(a,b,c)
+return H.j5(a,b,c,null)},
+YW:function(a,b,c,d,e){var z,y,x,w
+if(b>=0){z=this.gB(a)
+if(typeof z!=="number")throw H.s(z)
+z=b>z}else z=!0
+if(z)H.vh(P.TE(b,0,this.gB(a)))
+z=J.Wx(c)
+if(z.C(c,b)||z.D(c,this.gB(a)))H.vh(P.TE(c,b,this.gB(a)))
+y=z.W(c,b)
+if(J.xC(y,0))return
+if(e<0)throw H.b(new P.AT(e))
+if(typeof y!=="number")throw H.s(y)
+z=J.U6(d)
+x=z.gB(d)
+if(typeof x!=="number")throw H.s(x)
+if(e+y>x)throw H.b(new P.lj("Not enough elements"))
+if(e<b)for(w=y-1;w>=0;--w)this.u(a,b+w,z.t(d,e+w))
+else for(w=0;w<y;++w)this.u(a,b+w,z.t(d,e+w))},
+XU:function(a,b,c){var z,y
+z=this.gB(a)
+if(typeof z!=="number")throw H.s(z)
+if(c>=z)return-1
+if(c<0)c=0
+y=c
+while(!0){z=this.gB(a)
+if(typeof z!=="number")throw H.s(z)
+if(!(y<z))break
+if(J.xC(this.t(a,y),b))return y;++y}return-1},
+u8:function(a,b){return this.XU(a,b,0)},
+Pk:function(a,b,c){var z,y
+c=J.xH(this.gB(a),1)
+for(z=c;y=J.Wx(z),y.F(z,0);z=y.W(z,1))if(J.xC(this.t(a,z),b))return z
+return-1},
+cn:function(a,b){return this.Pk(a,b,null)},
+bu:function(a){var z,y
+y=$.xb()
+if(y.tg(y,a))return"[...]"
+z=P.p9("")
+try{y=$.xb()
+y.h(y,a)
+z.KF("[")
+z.We(a,", ")
+z.KF("]")}finally{y=$.xb()
+y.Rz(y,a)}return z.gvM()},
+$isList:true,
+$asWO:null,
+$isqC:true,
+$iscX:true,
+$ascX:null},W0:{"":"Tp;a,b",
+call$2:function(a,b){var z=this.a
+if(!z.a)this.b.KF(", ")
+z.a=!1
+z=this.b
+z.KF(a)
+z.KF(": ")
+z.KF(b)},
+"+call:2:0":0,
+$isEH:true,
+$is_bh:true},Sw:{"":"mW;v5,av,HV,qT",
+gA:function(a){return P.MW(this,H.W8(this,"Sw",0))},
+aN:function(a,b){var z,y,x
+z=this.qT
+for(y=this.av;y!==this.HV;y=(y+1&this.v5.length-1)>>>0){x=this.v5
+if(y<0||y>=x.length)throw H.e(x,y)
+b.call$1(x[y])
+if(z!==this.qT)H.vh(P.a4(this))}},
+gl0:function(a){return this.av===this.HV},
+"+isEmpty":0,
+gB:function(a){return(this.HV-this.av&this.v5.length-1)>>>0},
+"+length":0,
+grZ:function(a){var z,y,x
+z=this.av
+y=this.HV
+if(z===y)throw H.b(new P.lj("No elements"))
+z=this.v5
+x=z.length
+y=(y-1&x-1)>>>0
+if(y<0||y>=x)throw H.e(z,y)
+return z[y]},
+Zv:function(a,b){var z,y,x
+z=J.Wx(b)
+if(z.C(b,0)||z.D(b,this.gB(this)))throw H.b(P.TE(b,0,this.gB(this)))
+z=this.v5
+y=this.av
+if(typeof b!=="number")throw H.s(b)
+x=z.length
+y=(y+b&x-1)>>>0
+if(y<0||y>=x)throw H.e(z,y)
+return z[y]},
+tt:function(a,b){var z
+if(b){z=P.A(null,H.W8(this,"Sw",0))
+H.VM(z,[H.W8(this,"Sw",0)])
+C.Nm.sB(z,this.gB(this))}else{z=P.A(this.gB(this),H.W8(this,"Sw",0))
+H.VM(z,[H.W8(this,"Sw",0)])}this.e4(z)
+return z},
+br:function(a){return this.tt(a,!0)},
+h:function(a,b){this.NZ(b)},
+Rz:function(a,b){var z,y
+for(z=this.av;z!==this.HV;z=(z+1&this.v5.length-1)>>>0){y=this.v5
+if(z<0||z>=y.length)throw H.e(y,z)
+if(J.xC(y[z],b)){this.bB(z)
+this.qT=this.qT+1
+return!0}}return!1},
+bu:function(a){return H.mx(this,"{","}")},
+Ux:function(){var z,y,x,w
+if(this.av===this.HV)throw H.b(P.w("No elements"))
+this.qT=this.qT+1
+z=this.v5
+y=this.av
+x=z.length
+if(y<0||y>=x)throw H.e(z,y)
+w=z[y]
+this.av=(y+1&x-1)>>>0
+return w},
+NZ:function(a){var z,y,x
+z=this.v5
+y=this.HV
+x=z.length
+if(y<0||y>=x)throw H.e(z,y)
+z[y]=a
+this.HV=(y+1&x-1)>>>0
+if(this.av===this.HV)this.VW()
+this.qT=this.qT+1},
+bB:function(a){var z,y,x,w,v,u,t,s
+z=this.v5
+y=z.length
+x=y-1
+w=this.av
+v=this.HV
+if((a-w&x)>>>0<(v-a&x)>>>0){for(u=a;u!==w;u=t){t=(u-1&x)>>>0
+if(t<0||t>=y)throw H.e(z,t)
+v=z[t]
+if(u<0||u>=y)throw H.e(z,u)
+z[u]=v}if(w<0||w>=y)throw H.e(z,w)
+z[w]=null
+this.av=(w+1&x)>>>0
+return(a+1&x)>>>0}else{this.HV=(v-1&x)>>>0
+for(z=this.HV,y=this.v5,w=y.length,u=a;u!==z;u=s){s=(u+1&x)>>>0
+if(s<0||s>=w)throw H.e(y,s)
+v=y[s]
+if(u<0||u>=w)throw H.e(y,u)
+y[u]=v}if(z<0||z>=w)throw H.e(y,z)
+y[z]=null
+return a}},
+VW:function(){var z,y,x,w
+z=P.A(this.v5.length*2,H.W8(this,"Sw",0))
+H.VM(z,[H.W8(this,"Sw",0)])
+y=this.v5
+x=this.av
+w=y.length-x
+H.qG(z,0,w,y,x)
+y=this.av
+x=this.v5
+H.qG(z,w,w+y,x,0)
+this.av=0
+this.HV=this.v5.length
+this.v5=z},
+e4:function(a){var z,y,x,w,v
+z=this.av
+y=this.HV
+x=this.v5
+if(z<=y){w=y-z
+H.qG(a,0,w,x,z)
+return w}else{v=x.length-z
+H.qG(a,0,v,x,z)
+z=this.HV
+y=this.v5
+H.qG(a,v,v+z,y,0)
+return this.HV+v}},
+Eo:function(a,b){var z=P.A(8,b)
+H.VM(z,[b])
+this.v5=z},
+$asmW:null,
+$ascX:null,
+$isqC:true,
+$iscX:true,
+static:{"":"TN",NZ:function(a,b){var z=new P.Sw(null,0,0,0)
+H.VM(z,[b])
+z.Eo(a,b)
+return z}}},o0:{"":"a;Lz,dP,qT,Dc,fD",
+gl:function(){return this.fD},
+"+current":0,
+G:function(){var z,y,x
+z=this.Lz
+if(this.qT!==z.qT)H.vh(P.a4(z))
+y=this.Dc
+if(y===this.dP){this.fD=null
+return!1}x=z.v5
+if(y<0||y>=x.length)throw H.e(x,y)
+this.fD=x[y]
+this.Dc=(this.Dc+1&z.v5.length-1)>>>0
+return!0},
+static:{MW:function(a,b){var z=new P.o0(a,a.HV,a.qT,a.av,null)
+H.VM(z,[b])
+return z}}},a1:{"":"a;G3>,Bb>,T8>",$isa1:true},jp:{"":"a1;P*,G3,Bb,T8",
+r6:function(a,b){return this.P.call$1(b)},
+$asa1:function(a,b){return[a]}},Xt:{"":"a;",
+vh:function(a){var z,y,x,w,v,u,t,s
+z=this.aY
+if(z==null)return-1
+y=this.iW
+for(x=y,w=x,v=null;!0;){v=this.nw(z.G3,a)
+u=J.Wx(v)
+if(u.D(v,0)){u=z.Bb
+if(u==null)break
+v=this.nw(u.G3,a)
+if(J.xZ(v,0)){t=z.Bb
+z.Bb=t.T8
+t.T8=z
+if(t.Bb==null){z=t
+break}z=t}x.Bb=z
+s=z.Bb
+x=z
+z=s}else{if(u.C(v,0)){u=z.T8
+if(u==null)break
+v=this.nw(u.G3,a)
+if(J.u6(v,0)){t=z.T8
+z.T8=t.Bb
+t.Bb=z
+if(t.T8==null){z=t
+break}z=t}w.T8=z
+s=z.T8}else break
+w=z
+z=s}}w.T8=z.Bb
+x.Bb=z.T8
+z.Bb=y.T8
+z.T8=y.Bb
+this.aY=z
+y.T8=null
+y.Bb=null
+this.bb=this.bb+1
+return v},
+bB:function(a){var z,y,x
+if(this.aY==null)return
+if(!J.xC(this.vh(a),0))return
+z=this.aY
+this.J0=this.J0-1
+y=this.aY
+x=y.Bb
+y=y.T8
+if(x==null)this.aY=y
+else{this.aY=x
+this.vh(a)
+this.aY.T8=y}this.qT=this.qT+1
+return z},
+K8:function(a,b){var z,y
+this.J0=this.J0+1
+this.qT=this.qT+1
+if(this.aY==null){this.aY=a
+return}z=J.u6(b,0)
+y=this.aY
+if(z){a.Bb=y
+a.T8=this.aY.T8
+this.aY.T8=null}else{a.T8=y
+a.Bb=this.aY.Bb
+this.aY.Bb=null}this.aY=a}},Ba:{"":"Xt;Cw,bR,aY,iW,J0,qT,bb",
+wS:function(a,b){return this.Cw.call$2(a,b)},
+Ef:function(a){return this.bR.call$1(a)},
+nw:function(a,b){return this.wS(a,b)},
+t:function(a,b){if(b==null)throw H.b(new P.AT(b))
+if(this.Ef(b)!==!0)return
+if(this.aY!=null)if(J.xC(this.vh(b),0))return this.aY.P
+return},
+"+[]:1:0":0,
+Rz:function(a,b){var z
+if(this.Ef(b)!==!0)return
+z=this.bB(b)
+if(z!=null)return z.P
+return},
+u:function(a,b,c){var z,y
+if(b==null)throw H.b(new P.AT(b))
+z=this.vh(b)
+if(J.xC(z,0)){this.aY.P=c
+return}y=new P.jp(c,b,null,null)
+y.$builtinTypeInfo=[null,null]
+this.K8(y,z)},
+"+[]=:2:0":0,
+gl0:function(a){return this.aY==null},
+"+isEmpty":0,
+gor:function(a){return this.aY!=null},
+"+isNotEmpty":0,
+aN:function(a,b){var z,y,x,w
+z=H.W8(this,"Ba",0)
+y=[]
+H.VM(y,[P.a1])
+x=new P.HW(this,y,this.qT,this.bb,null)
+H.VM(x,[z])
+x.Qf(this,[P.a1,z])
+for(;x.G();){w=x.gl()
+z=J.RE(w)
+b.call$2(z.gG3(w),z.gP(w))}},
+gB:function(a){return this.J0},
+"+length":0,
+x4:function(a){return this.Ef(a)===!0&&J.xC(this.vh(a),0)},
+"+containsKey:1:0":0,
+PF:function(a){return new P.LD(this,a,this.bb).call$1(this.aY)},
+"+containsValue:1:0":0,
+gvc:function(a){var z=new P.OG(this)
+H.VM(z,[H.W8(this,"Ba",0)])
+return z},
+"+keys":0,
+gUQ:function(a){var z=new P.ro(this)
+H.VM(z,[H.W8(this,"Ba",0),H.W8(this,"Ba",1)])
+return z},
+"+values":0,
+bu:function(a){return P.vW(this)},
+$isBa:true,
+$asXt:function(a,b){return[a]},
+$asL8:null,
+$isL8:true,
+static:{GV:function(a,b,c,d){var z,y,x
+z=P.n4
+y=new P.An(c)
+x=new P.a1(null,null,null)
+H.VM(x,[c])
+x=new P.Ba(z,y,null,x,0,0,0)
+H.VM(x,[c,d])
+return x}}},An:{"":"Tp;a",
+call$1:function(a){var z=H.Gq(a,this.a)
+return z},
+"+call:1:0":0,
+$isEH:true,
+$is_HB:true,
+$is_Dv:true},LD:{"":"Tp;a,b,c",
+call$1:function(a){var z,y,x,w
+for(z=this.c,y=this.a,x=this.b;a!=null;){w=J.RE(a)
+if(J.xC(w.gP(a),x))return!0
+if(z!==y.bb)throw H.b(P.a4(y))
+if(w.gT8(a)!=null&&this.call$1(w.gT8(a))===!0)return!0
+a=w.gBb(a)}return!1},
+"+call:1:0":0,
+$isEH:true,
+$is_HB:true,
+$is_Dv:true},YI:{"":"a;",
+gl:function(){var z=this.ya
+if(z==null)return
+return this.Wb(z)},
+"+current":0,
+WV:function(a){var z
+for(z=this.Ln;a!=null;){z.push(a)
+a=a.Bb}},
+zU:function(a){var z
+C.Nm.sB(this.Ln,0)
+z=this.Dn
+if(a==null)this.WV(z.aY)
+else{z.vh(a.G3)
+this.WV(z.aY.T8)}},
+G:function(){var z,y
+z=this.Dn
+if(this.qT!==z.qT)throw H.b(P.a4(z))
+y=this.Ln
+if(y.length===0){this.ya=null
+return!1}if(z.bb!==this.bb)this.zU(this.ya)
+if(0>=y.length)throw H.e(y,0)
+this.ya=y.pop()
+this.WV(this.ya.T8)
+return!0},
+Qf:function(a,b){this.WV(a.aY)}},OG:{"":"mW;Dn",
+gB:function(a){return this.Dn.J0},
+"+length":0,
+gl0:function(a){return this.Dn.J0===0},
+"+isEmpty":0,
+gA:function(a){var z,y,x
+z=this.Dn
+y=H.W8(this,"OG",0)
+x=[]
+H.VM(x,[P.a1])
+x=new P.DN(z,x,z.qT,z.bb,null)
+H.VM(x,[y])
+x.Qf(z,y)
+return x},
+$asmW:null,
+$ascX:null,
+$isqC:true},ro:{"":"mW;Fb",
+gB:function(a){return this.Fb.J0},
+"+length":0,
+gl0:function(a){return this.Fb.J0===0},
+"+isEmpty":0,
+gA:function(a){var z,y,x,w
+z=this.Fb
+y=H.W8(this,"ro",0)
+x=H.W8(this,"ro",1)
+w=[]
+H.VM(w,[P.a1])
+w=new P.ZM(z,w,z.qT,z.bb,null)
+H.VM(w,[y,x])
+w.Qf(z,x)
+return w},
+$asmW:function(a,b){return[b]},
+$ascX:function(a,b){return[b]},
+$isqC:true},DN:{"":"YI;Dn,Ln,qT,bb,ya",
+Wb:function(a){return a.G3},
+$asYI:null},ZM:{"":"YI;Dn,Ln,qT,bb,ya",
+Wb:function(a){return a.P},
+$asYI:function(a,b){return[b]}},HW:{"":"YI;Dn,Ln,qT,bb,ya",
+Wb:function(a){return a},
+$asYI:function(a){return[[P.a1,a]]}}}],["dart.convert","dart:convert",,P,{VQ:function(a,b){var z=new P.JC()
+return z.call$2(null,new P.f1(z).call$1(a))},BS:function(a,b){var z,y,x,w
+x=a
+if(typeof x!=="string")throw H.b(new P.AT(a))
+z=null
+try{z=JSON.parse(a)}catch(w){x=H.Ru(w)
+y=x
+throw H.b(P.cD(String(y)))}return P.VQ(z,b)},tp:function(a){return a.Lt()},JC:{"":"Tp;",
+call$2:function(a,b){return b},
+"+call:2:0":0,
+$isEH:true,
+$is_bh:true},f1:{"":"Tp;a",
+call$1:function(a){var z,y,x,w,v,u,t
+if(a==null||typeof a!="object")return a
+if(Object.getPrototypeOf(a)===Array.prototype){z=a
+for(y=this.a,x=0;x<z.length;++x)z[x]=y.call$2(x,this.call$1(z[x]))
+return z}w=Object.keys(a)
+v=H.B7([],P.L5(null,null,null,null,null))
+for(y=this.a,x=0;x<w.length;++x){u=w[x]
+v.u(v,u,y.call$2(u,this.call$1(a[u])))}t=a.__proto__
+if(typeof t!=="undefined"&&t!==Object.prototype)v.u(v,"__proto__",y.call$2("__proto__",this.call$1(t)))
+return v},
+"+call:1:0":0,
+$isEH:true,
+$is_HB:true,
+$is_Dv:true},Uk:{"":"a;"},wI:{"":"a;"},ob:{"":"Uk;",
+$asUk:function(){return[J.O,[J.Q,J.im]]}},Ud:{"":"Ge;Ct,FN",
+bu:function(a){if(this.FN!=null)return"Converting object to an encodable object failed."
+else return"Converting object did not return an encodable object."},
+static:{ox:function(a,b){return new P.Ud(a,b)}}},K8:{"":"Ud;Ct,FN",
+bu:function(a){return"Cyclic error in JSON stringify"},
+static:{hT:function(a){return new P.K8(a,null)}}},by:{"":"Uk;",
+pW:function(a,b){return P.BS(a,C.A3.N5)},
+kV:function(a){return this.pW(a,null)},
+PN:function(a,b){return P.Vg(a,C.Ap.ke)},
+KP:function(a){return this.PN(a,null)},
+$asUk:function(){return[P.a,J.O]}},dI:{"":"wI;ke",
+$aswI:function(){return[P.a,J.O]}},QM:{"":"wI;N5",
+$aswI:function(){return[J.O,P.a]}},Sh:{"":"a;WE,u4,JN",
+Tt:function(a){return this.WE.call$1(a)},
+WD:function(a){var z=this.JN
+if(z.tg(z,a))throw H.b(P.hT(a))
+z.h(z,a)},
+C7:function(a){var z,y,x,w,v
+if(!this.IS(a)){x=a
+w=this.JN
+if(w.tg(w,x))H.vh(P.hT(x))
+w.h(w,x)
+try{z=this.Tt(a)
+if(!this.IS(z)){x=P.ox(a,null)
+throw H.b(x)}w.Rz(w,a)}catch(v){x=H.Ru(v)
+y=x
+throw H.b(P.ox(a,y))}}},
+IS:function(a){var z,y,x,w
+z={}
+if(typeof a==="number"){this.u4.KF(C.CD.bu(a))
+return!0}else if(a===!0){this.u4.KF("true")
+return!0}else if(a===!1){this.u4.KF("false")
+return!0}else if(a==null){this.u4.KF("null")
+return!0}else if(typeof a==="string"){z=this.u4
+z.KF("\"")
+P.NY(z,a)
+z.KF("\"")
+return!0}else{y=J.x(a)
+if(typeof a==="object"&&a!==null&&(a.constructor===Array||!!y.$isList)){this.WD(a)
+z=this.u4
+z.KF("[")
+if(J.xZ(y.gB(a),0)){this.C7(y.t(a,0))
+x=1
+while(!0){w=y.gB(a)
+if(typeof w!=="number")throw H.s(w)
+if(!(x<w))break
+z.vM=z.vM+","
+this.C7(y.t(a,x));++x}}z.KF("]")
+z=this.JN
+z.Rz(z,a)
+return!0}else if(typeof a==="object"&&a!==null&&!!y.$isL8){this.WD(a)
+w=this.u4
+w.KF("{")
+z.a=!0
+y.aN(a,new P.tF(z,this))
+w.KF("}")
+w=this.JN
+w.Rz(w,a)
+return!0}else return!1}},
+static:{"":"P3,kD,Ta,Yz,qS,fg,SW,KQ,MU,mr,YM,Xk,QV",Vg:function(a,b){var z
+b=P.BC
+z=P.p9("")
+new P.Sh(b,z,P.yv(null)).C7(a)
+return z.vM},NY:function(a,b){var z,y,x,w,v,u,t
+z=J.U6(b)
+y=z.gB(b)
+x=P.A(null,J.im)
+H.VM(x,[J.im])
+if(typeof y!=="number")throw H.s(y)
+w=!1
+v=0
+for(;v<y;++v){u=z.j(b,v)
+if(u<32){x.push(92)
+switch(u){case 8:x.push(98)
+break
+case 9:x.push(116)
+break
+case 10:x.push(110)
+break
+case 12:x.push(102)
+break
+case 13:x.push(114)
+break
+default:x.push(117)
+t=C.jn.m(u,12)&15
+x.push(t<10?48+t:87+t)
+t=C.jn.m(u,8)&15
+x.push(t<10?48+t:87+t)
+t=C.jn.m(u,4)&15
+x.push(t<10?48+t:87+t)
+t=u&15
+x.push(t<10?48+t:87+t)
+break}w=!0}else if(u===34||u===92){x.push(92)
+x.push(u)
+w=!0}else x.push(u)}a.KF(w?P.HM(x):b)}}},tF:{"":"Tp;a,b",
+call$2:function(a,b){var z,y,x
+z=this.a
+y=this.b
+if(!z.a)y.u4.KF(",\"")
+else y.u4.KF("\"")
+y=this.b
+x=y.u4
+P.NY(x,a)
+x.KF("\":")
+y.C7(b)
+z.a=!1},
+"+call:2:0":0,
+$isEH:true,
+$is_bh:true},z0:{"":"ob;lH",
+goc:function(a){return"utf-8"},
+"+name":0,
+gZE:function(){return new P.Vx()}},Vx:{"":"wI;",
+WJ:function(a){var z,y,x
+z=a.length
+y=P.A(z*3,J.im)
+H.VM(y,[J.im])
+x=new P.Rw(0,0,y)
+if(x.fJ(a,0,z)!==z)x.Lb(C.xB.j(a,z-1),0)
+return C.Nm.D6(x.EN,0,x.An)},
+$aswI:function(){return[J.O,[J.Q,J.im]]}},Rw:{"":"a;vn,An,EN",
+Lb:function(a,b){var z,y,x,w,v
+z=this.EN
+y=this.An
+if((b&64512)===56320){x=(65536+((a&1023)<<10>>>0)|b&1023)>>>0
+this.An=y+1
+w=C.jn.m(x,18)
+v=z.length
+if(y<0||y>=v)throw H.e(z,y)
+z[y]=(240|w)>>>0
+w=this.An
+this.An=w+1
+y=C.jn.m(x,12)
+if(w<0||w>=v)throw H.e(z,w)
+z[w]=(128|y&63)>>>0
+y=this.An
+this.An=y+1
+w=C.jn.m(x,6)
+if(y<0||y>=v)throw H.e(z,y)
+z[y]=(128|w&63)>>>0
+w=this.An
+this.An=w+1
+if(w<0||w>=v)throw H.e(z,w)
+z[w]=(128|x&63)>>>0
+return!0}else{this.An=y+1
+w=C.jn.m(a,12)
+v=z.length
+if(y<0||y>=v)throw H.e(z,y)
+z[y]=(224|w)>>>0
+w=this.An
+this.An=w+1
+y=C.jn.m(a,6)
+if(w<0||w>=v)throw H.e(z,w)
+z[w]=(128|y&63)>>>0
+y=this.An
+this.An=y+1
+if(y<0||y>=v)throw H.e(z,y)
+z[y]=(128|a&63)>>>0
+return!1}},
+fJ:function(a,b,c){var z,y,x,w,v,u,t,s
+if(b!==c&&(C.xB.j(a,c-1)&64512)===55296)--c
+for(z=this.EN,y=z.length,x=a.length,w=b;w<c;++w){if(w<0)H.vh(new P.bJ("value "+w))
+if(w>=x)H.vh(new P.bJ("value "+w))
+v=a.charCodeAt(w)
+if(v<=127){u=this.An
+if(u>=y)break
+this.An=u+1
+if(u<0)throw H.e(z,u)
+z[u]=v}else if((v&64512)===55296){if(this.An+3>=y)break
+t=w+1
+if(t<0)H.vh(new P.bJ("value "+t))
+if(t>=x)H.vh(new P.bJ("value "+t))
+if(this.Lb(v,a.charCodeAt(t)))w=t}else if(v<=2047){u=this.An
+s=u+1
+if(s>=y)break
+this.An=s
+s=C.jn.m(v,6)
+if(u<0||u>=y)throw H.e(z,u)
+z[u]=(192|s)>>>0
+s=this.An
+this.An=s+1
+if(s<0||s>=y)throw H.e(z,s)
+z[s]=(128|v&63)>>>0}else{u=this.An
+if(u+2>=y)break
+this.An=u+1
+s=C.jn.m(v,12)
+if(u<0||u>=y)throw H.e(z,u)
+z[u]=(224|s)>>>0
+s=this.An
+this.An=s+1
+u=C.jn.m(v,6)
+if(s<0||s>=y)throw H.e(z,s)
+z[s]=(128|u&63)>>>0
+u=this.An
+this.An=u+1
+if(u<0||u>=y)throw H.e(z,u)
+z[u]=(128|v&63)>>>0}}return w},
+static:{"":"Ij",}},GY:{"":"wI;lH",
+WJ:function(a){var z,y
+z=P.p9("")
+y=new P.jZ(this.lH,z,!0,0,0,0)
+y.ME(a,0,a.length)
+y.fZ()
+return z.vM},
+$aswI:function(){return[[J.Q,J.im],J.O]}},jZ:{"":"a;lH,aS,rU,Hu,iU,VN",
+cO:function(a){this.fZ()},
+fZ:function(){if(this.iU>0){if(this.lH!==!0)throw H.b(P.cD("Unfinished UTF-8 octet sequence"))
+this.aS.KF(P.fc(65533))
+this.Hu=0
+this.iU=0
+this.VN=0}},
+ME:function(a,b,c){var z,y,x,w,v,u,t,s,r,q
+z=this.Hu
+y=this.iU
+x=this.VN
+this.Hu=0
+this.iU=0
+this.VN=0
+$loop$0:for(w=this.aS,v=this.lH!==!0,u=b;!0;u=q){$multibyte$2:{if(y>0){t=a.length
+do{if(u===c)break $loop$0
+if(u<0||u>=t)throw H.e(a,u)
+s=a[u]
+if((s&192)!==128){if(v)throw H.b(P.cD("Bad UTF-8 encoding 0x"+C.jn.WZ(s,16)))
+this.rU=!1
+r=P.O8(1,65533,J.im)
+r.$builtinTypeInfo=[J.im]
+t=H.eT(r)
+w.vM=w.vM+t
+y=0
+break $multibyte$2}else{z=(z<<6|s&63)>>>0;--y;++u}}while(y>0)
+t=x-1
+if(t<0||t>=4)throw H.e(C.Gb,t)
+if(z<=C.Gb[t]){if(v)throw H.b(P.cD("Overlong encoding of 0x"+C.jn.WZ(z,16)))
+z=65533
+y=0
+x=0}if(z>1114111){if(v)throw H.b(P.cD("Character outside valid Unicode range: 0x"+C.jn.WZ(z,16)))
+z=65533}if(!this.rU||z!==65279){r=P.O8(1,z,J.im)
+r.$builtinTypeInfo=[J.im]
+t=H.eT(r)
+w.vM=w.vM+t}this.rU=!1}}for(;u<c;u=q){q=u+1
+if(u<0||u>=a.length)throw H.e(a,u)
+s=a[u]
+if(s<0){if(v)throw H.b(P.cD("Negative UTF-8 code unit: -0x"+C.jn.WZ(-s,16)))
+r=P.O8(1,65533,J.im)
+r.$builtinTypeInfo=[J.im]
+t=H.eT(r)
+w.vM=w.vM+t}else if(s<=127){this.rU=!1
+r=P.O8(1,s,J.im)
+r.$builtinTypeInfo=[J.im]
+t=H.eT(r)
+w.vM=w.vM+t}else{if((s&224)===192){z=s&31
+y=1
+x=1
+continue $loop$0}if((s&240)===224){z=s&15
+y=2
+x=2
+continue $loop$0}if((s&248)===240&&s<245){z=s&7
+y=3
+x=3
+continue $loop$0}if(v)throw H.b(P.cD("Bad UTF-8 encoding 0x"+C.jn.WZ(s,16)))
+this.rU=!1
+r=P.O8(1,65533,J.im)
+r.$builtinTypeInfo=[J.im]
+t=H.eT(r)
+w.vM=w.vM+t
+z=65533
+y=0
+x=0}}break $loop$0}if(y>0){this.Hu=z
+this.iU=y
+this.VN=x}},
+static:{"":"a3",}}}],["dart.core","dart:core",,P,{Te:function(a){return},Wc:function(a,b){return J.oE(a,b)},hl:function(a){var z,y,x,w,v,u
+if(typeof a==="number"||typeof a==="boolean"||null==a)return J.AG(a)
+if(typeof a==="string"){z=new P.Rn("")
+z.vM="\""
+for(y=a.length,x=0;x<y;++x){w=C.xB.j(a,x)
+if(w<=31)if(w===10)z.vM=z.vM+"\\n"
+else if(w===13)z.vM=z.vM+"\\r"
+else if(w===9)z.vM=z.vM+"\\t"
+else{z.vM=z.vM+"\\x"
+if(w<16)z.vM=z.vM+"0"
+else{z.vM=z.vM+"1"
+w-=16}v=w<10?48+w:87+w
+u=P.O8(1,v,J.im)
+u.$builtinTypeInfo=[J.im]
+v=H.eT(u)
+z.vM=z.vM+v}else if(w===92)z.vM=z.vM+"\\\\"
+else if(w===34)z.vM=z.vM+"\\\""
+else{u=P.O8(1,w,J.im)
+u.$builtinTypeInfo=[J.im]
+v=H.eT(u)
+z.vM=z.vM+v}}z.vM=z.vM+"\""
+return z.vM}return"Instance of '"+H.lh(a)+"'"},FM:function(a){return new P.HG(a)},ad:function(a,b){return a==null?b==null:a===b},xv:function(a){return H.CU(a)},QA:function(a,b,c){return H.BU(a,c,b)},A:function(a,b){var z
+if(a==null)return new Array(0)
+if(typeof a!=="number"||Math.floor(a)!==a||a<0)throw H.b(P.u("Length must be a positive integer: "+H.d(a)+"."))
+z=new Array(a)
+z.fixed$length=!0
+return z},O8:function(a,b,c){var z,y,x
+if(a<0)throw H.b(P.u("Length must be a positive integer: "+a+"."))
+z=H.rD(a)
+if(a!==0&&b!=null)for(y=z.length,x=0;x<y;++x)z[x]=b
+return z},F:function(a,b,c){var z,y,x,w,v
+z=P.A(null,c)
+H.VM(z,[c])
+for(y=J.GP(a);y.G();)z.push(y.gl())
+if(b)return z
+x=z.length
+w=P.A(x,c)
+H.VM(w,[c])
+for(y=z.length,v=0;v<x;++v){if(v>=y)throw H.e(z,v)
+w[v]=z[v]}return w},JS:function(a){var z,y
+z=J.AG(a)
+y=$.oK
+if(y==null)H.LJ(z)
+else y.call$1(z)},HM:function(a){return H.eT(a)},fc:function(a){var z=P.O8(1,a,J.im)
+z.$builtinTypeInfo=[J.im]
+return H.eT(z)},hz:function(a,b){return 65536+((a&1023)<<10>>>0)+(b&1023)},h0:{"":"Tp;a",
+call$2:function(a,b){var z=this.a
+z.u(z,J.Z0(a),b)},
+"+call:2:0":0,
+$isEH:true,
+$is_bh:true},CL:{"":"Tp;a",
+call$2:function(a,b){var z=this.a
+if(z.b>0)z.a.KF(", ")
+z.a.KF(J.Z0(a))
+z.a.KF(": ")
+z.a.KF(P.hl(b))
+z.b=z.b+1},
+"+call:2:0":0,
+$isEH:true,
+$is_bh:true},uA:{"":"a;OF",
+bu:function(a){return"Deprecated feature. Will be removed "+this.OF}},a2:{"":"a;",
+bu:function(a){return this?"true":"false"},
+$isbool:true},fR:{"":"a;"},iP:{"":"a;rq<,aL",
+n:function(a,b){var z
+if(b==null)return!1
+z=J.x(b)
+if(typeof b!=="object"||b===null||!z.$isiP)return!1
+return this.rq===b.rq&&this.aL===b.aL},
+iM:function(a,b){return C.CD.iM(this.rq,b.grq())},
+giO:function(a){return this.rq},
+bu:function(a){var z,y,x,w,v,u,t,s
+z=new P.pl()
+y=new P.Hn().call$1(H.tJ(this))
+x=z.call$1(H.NS(this))
+w=z.call$1(H.jA(this))
+v=z.call$1(H.KL(this))
+u=z.call$1(H.ch(this))
+t=z.call$1(H.XJ(this))
+s=new P.Zl().call$1(H.o1(this))
+if(this.aL)return H.d(y)+"-"+H.d(x)+"-"+H.d(w)+" "+H.d(v)+":"+H.d(u)+":"+H.d(t)+"."+H.d(s)+"Z"
+else return H.d(y)+"-"+H.d(x)+"-"+H.d(w)+" "+H.d(v)+":"+H.d(u)+":"+H.d(t)+"."+H.d(s)},
+h:function(a,b){return P.Wu(this.rq+b.gVs(),this.aL)},
+EK:function(){H.U8(this)},
+RM:function(a,b){if(Math.abs(a)>8640000000000000)throw H.b(new P.AT(a))},
+$isiP:true,
+static:{"":"Oj,bI,df,yM,h2,OK,nm,DU,H9,Gio,k3,cR,E0,Ke,lT,pi,bm,o4,Kz,J7,TO,lme",Gl:function(a){var z,y,x,w,v,u,t,s,r,q,p,o,n
+z=new H.VR(H.v4("^([+-]?\\d?\\d\\d\\d\\d)-?(\\d\\d)-?(\\d\\d)(?:[ T](\\d\\d)(?::?(\\d\\d)(?::?(\\d\\d)(.\\d{1,6})?)?)?( ?[zZ]| ?\\+00(?::?00)?)?)?$",!1,!0,!1),null,null).ej(a)
+if(z!=null){y=new P.MF()
+x=z.oH
+if(1>=x.length)throw H.e(x,1)
+w=H.BU(x[1],null,null)
+if(2>=x.length)throw H.e(x,2)
+v=H.BU(x[2],null,null)
+if(3>=x.length)throw H.e(x,3)
+u=H.BU(x[3],null,null)
+if(4>=x.length)throw H.e(x,4)
+t=y.call$1(x[4])
+if(5>=x.length)throw H.e(x,5)
+s=y.call$1(x[5])
+if(6>=x.length)throw H.e(x,6)
+r=y.call$1(x[6])
+if(7>=x.length)throw H.e(x,7)
+q=J.LL(J.p0(new P.Rq().call$1(x[7]),1000))
+if(q===1000){p=!0
+q=999}else p=!1
+if(8>=x.length)throw H.e(x,8)
+o=x[8]!=null
+n=H.zW(w,v,u,t,s,r,q,o)
+return P.Wu(p?n+1:n,o)}else throw H.b(new P.AT(a))},Wu:function(a,b){var z=new P.iP(a,b)
+z.RM(a,b)
+return z},Xs:function(){var z=new P.iP(Date.now(),!1)
+z.EK()
+return z}}},MF:{"":"Tp;",
+call$1:function(a){if(a==null)return 0
+return H.BU(a,null,null)},
+"+call:1:0":0,
+$isEH:true,
+$is_HB:true,
+$is_Dv:true},Rq:{"":"Tp;",
+call$1:function(a){if(a==null)return 0
+return H.IH(a,null)},
+"+call:1:0":0,
+$isEH:true,
+$is_HB:true,
+$is_Dv:true},Hn:{"":"Tp;",
+call$1:function(a){var z,y,x
+z=J.Wx(a)
+y=z.Vy(a)
+x=z.C(a,0)?"-":""
+if(y>=1000)return H.d(a)
+if(y>=100)return x+"0"+H.d(y)
+if(y>=10)return x+"00"+H.d(y)
+return x+"000"+H.d(y)},
+"+call:1:0":0,
+$isEH:true,
+$is_HB:true,
+$is_Dv:true},Zl:{"":"Tp;",
+call$1:function(a){var z=J.Wx(a)
+if(z.F(a,100))return H.d(a)
+if(z.F(a,10))return"0"+H.d(a)
+return"00"+H.d(a)},
+"+call:1:0":0,
+$isEH:true,
+$is_HB:true,
+$is_Dv:true},pl:{"":"Tp;",
+call$1:function(a){if(J.J5(a,10))return H.d(a)
+return"0"+H.d(a)},
+"+call:1:0":0,
+$isEH:true,
+$is_HB:true,
+$is_Dv:true},a6:{"":"a;Fq<",
+g:function(a,b){return P.k5(0,0,this.Fq+b.gFq(),0,0,0)},
+W:function(a,b){return P.k5(0,0,this.Fq-b.gFq(),0,0,0)},
+U:function(a,b){if(typeof b!=="number")throw H.s(b)
+return P.k5(0,0,C.CD.yu(C.CD.UD(this.Fq*b)),0,0,0)},
+C:function(a,b){return this.Fq<b.gFq()},
+D:function(a,b){return this.Fq>b.gFq()},
+E:function(a,b){return this.Fq<=b.gFq()},
+F:function(a,b){return this.Fq>=b.gFq()},
+gVs:function(){return C.CD.Z(this.Fq,1000)},
+n:function(a,b){var z
+if(b==null)return!1
+z=J.x(b)
+if(typeof b!=="object"||b===null||!z.$isa6)return!1
+return this.Fq===b.Fq},
+giO:function(a){return this.Fq&0x1FFFFFFF},
+iM:function(a,b){return C.CD.iM(this.Fq,b.gFq())},
+bu:function(a){var z,y,x,w,v
+z=new P.DW()
+y=this.Fq
+if(y<0)return"-"+H.d(P.k5(0,0,-y,0,0,0))
+x=z.call$1(C.CD.JV(C.CD.Z(y,60000000),60))
+w=z.call$1(C.CD.JV(C.CD.Z(y,1000000),60))
+v=new P.P7().call$1(C.CD.JV(y,1000000))
+return H.d(C.CD.Z(y,3600000000))+":"+H.d(x)+":"+H.d(w)+"."+H.d(v)},
+$isa6:true,
+static:{"":"Bp,S4,dk,Lo,RD,b2,q9,Ie,Do,f4,vd,IJ,iI,Vk,fm,yn",k5:function(a,b,c,d,e,f){return new P.a6(a*86400000000+b*3600000000+e*60000000+f*1000000+d*1000+c)}}},P7:{"":"Tp;",
+call$1:function(a){var z=J.Wx(a)
+if(z.F(a,100000))return H.d(a)
+if(z.F(a,10000))return"0"+H.d(a)
+if(z.F(a,1000))return"00"+H.d(a)
+if(z.F(a,100))return"000"+H.d(a)
+if(z.D(a,10))return"0000"+H.d(a)
+return"00000"+H.d(a)},
+"+call:1:0":0,
+$isEH:true,
+$is_HB:true,
+$is_Dv:true},DW:{"":"Tp;",
+call$1:function(a){if(J.J5(a,10))return H.d(a)
+return"0"+H.d(a)},
+"+call:1:0":0,
+$isEH:true,
+$is_HB:true,
+$is_Dv:true},Ge:{"":"a;",
+gI4:function(){return new H.XO(this.$thrownJsError,null)},
+$isGe:true},LK:{"":"Ge;",
+bu:function(a){return"Throw of null."}},AT:{"":"Ge;G1>",
+bu:function(a){var z=this.G1
+if(z!=null)return"Illegal argument(s): "+H.d(z)
+return"Illegal argument(s)"},
+static:{u:function(a){return new P.AT(a)}}},bJ:{"":"AT;G1",
+bu:function(a){return"RangeError: "+H.d(this.G1)},
+static:{C3:function(a){return new P.bJ(a)},N:function(a){return new P.bJ("value "+H.d(a))},"+new RangeError$value:1:0":0,TE:function(a,b,c){return new P.bJ("value "+H.d(a)+" not in range "+H.d(b)+".."+H.d(c))}}},mp:{"":"Ge;uF,UP,mP,SA,vG",
+bu:function(a){var z,y,x,w,v,u
+z={}
+z.a=P.p9("")
+z.b=0
+y=this.mP
+if(y!=null){x=J.U6(y)
+while(!0){w=z.b
+v=x.gB(y)
+if(typeof v!=="number")throw H.s(v)
+if(!(w<v))break
+if(z.b>0){w=z.a
+w.vM=w.vM+", "}w=z.a
+u=P.hl(x.t(y,z.b))
+u=typeof u==="string"?u:H.d(u)
+w.vM=w.vM+u
+z.b=z.b+1}}y=this.SA
+if(y!=null)J.kH(y,new P.CL(z))
+return"NoSuchMethodError : method not found: '"+H.d(this.UP)+"'\nReceiver: "+H.d(P.hl(this.uF))+"\nArguments: ["+H.d(z.a)+"]"},
+$ismp:true,
+static:{lr:function(a,b,c,d,e){return new P.mp(a,b,c,d,e)}}},ub:{"":"Ge;G1>",
+bu:function(a){return"Unsupported operation: "+this.G1},
+$isub:true,
+static:{f:function(a){return new P.ub(a)}}},ds:{"":"Ge;G1>",
+bu:function(a){var z=this.G1
+return z!=null?"UnimplementedError: "+H.d(z):"UnimplementedError"},
+$isub:true,
+$isGe:true,
+static:{SY:function(a){return new P.ds(a)}}},lj:{"":"Ge;G1>",
+bu:function(a){return"Bad state: "+this.G1},
+static:{w:function(a){return new P.lj(a)}}},UV:{"":"Ge;YA",
+bu:function(a){var z=this.YA
+if(z==null)return"Concurrent modification during iteration."
+return"Concurrent modification during iteration: "+H.d(P.hl(z))+"."},
+static:{a4:function(a){return new P.UV(a)}}},VS:{"":"a;",
+bu:function(a){return"Stack Overflow"},
+gI4:function(){return},
+$isGe:true},t7:{"":"Ge;Wo",
+bu:function(a){return"Reading static variable '"+this.Wo+"' during its initialization"},
+static:{Gz:function(a){return new P.t7(a)}}},HG:{"":"a;G1>",
+bu:function(a){var z=this.G1
+if(z==null)return"Exception"
+return"Exception: "+H.d(z)}},aE:{"":"a;G1>",
+bu:function(a){return"FormatException: "+H.d(this.G1)},
+$isaE:true,
+static:{cD:function(a){return new P.aE(a)}}},kM:{"":"a;oc>",
+bu:function(a){return"Expando:"+this.oc},
+t:function(a,b){var z=H.of(b,"expando$values")
+return z==null?null:H.of(z,this.Qz())},
+"+[]:1:0":0,
+u:function(a,b,c){var z=H.of(b,"expando$values")
+if(z==null){z=new P.a()
+H.aw(b,"expando$values",z)}H.aw(z,this.Qz(),c)},
+"+[]=:2:0":0,
+Qz:function(){var z,y
+z=H.of(this,"expando$key")
+if(z==null){y=$.Ss
+$.Ss=y+1
+z="expando$key$"+y
+H.aw(this,"expando$key",z)}return z},
+static:{"":"bZ,rt,Ss",}},EH:{"":"a;",$isEH:true},cX:{"":"a;",$iscX:true,$ascX:null},eL:{"":"a;"},L8:{"":"a;",$isL8:true},c8:{"":"a;",
+bu:function(a){return"null"}},a:{"":";",
+n:function(a,b){return this===b},
+giO:function(a){return H.eQ(this)},
+bu:function(a){return H.a5(this)},
+T:function(a,b){throw H.b(P.lr(this,b.gWa(),b.gnd(),b.gVm(),null))},
+"+noSuchMethod:1:0":0,
+gbx:function(a){return new H.cu(H.dJ(this),null)},
+$isa:true},Od:{"":"a;",$isOd:true},mE:{"":"a;"},WU:{"":"a;Qk,SU,Oq,Wn",
+gl:function(){return this.Wn},
+"+current":0,
+G:function(){var z,y,x,w,v,u
+this.SU=this.Oq
+z=this.Qk
+y=J.U6(z)
+if(this.SU===y.gB(z)){this.Wn=null
+return!1}x=y.j(z,this.SU)
+w=this.SU+1
+if((x&64512)===55296){v=y.gB(z)
+if(typeof v!=="number")throw H.s(v)
+v=w<v}else v=!1
+if(v){u=y.j(z,w)
+if((u&64512)===56320){this.Oq=w+1
+this.Wn=P.hz(x,u)
+return!0}}this.Oq=w
+this.Wn=x
+return!0}},Rn:{"":"a;vM<",
+gB:function(a){return this.vM.length},
+"+length":0,
+gl0:function(a){return this.vM.length===0},
+"+isEmpty":0,
+gor:function(a){return this.vM.length!==0},
+"+isNotEmpty":0,
+KF:function(a){var z=typeof a==="string"?a:H.d(a)
+this.vM=this.vM+z},
+We:function(a,b){var z,y
+z=J.GP(a)
+if(!z.G())return
+if(b.length===0)do{y=z.gl()
+y=typeof y==="string"?y:H.d(y)
+this.vM=this.vM+y}while(z.G())
+else{this.KF(z.gl())
+for(;z.G();){this.vM=this.vM+b
+y=z.gl()
+y=typeof y==="string"?y:H.d(y)
+this.vM=this.vM+y}}},
+bu:function(a){return this.vM},
+PD:function(a){if(typeof a==="string")this.vM=a
+else this.KF(a)},
+static:{p9:function(a){var z=new P.Rn("")
+z.PD(a)
+return z}}},wv:{"":"a;",$iswv:true},uq:{"":"a;",$isuq:true},iD:{"":"a;NN,HC,r0,Fi,iV,tP,BJ,MS,yW",
+gJf:function(a){var z,y
+z=this.NN
+if(z!=null&&J.co(z,"[")){y=J.U6(z)
+return y.JT(z,1,J.xH(y.gB(z),1))}return z},
+gGL:function(a){var z,y
+if(J.xC(this.HC,0)){z=this.Fi
+y=J.x(z)
+if(y.n(z,"http"))return 80
+if(y.n(z,"https"))return 443}return this.HC},
+gIi:function(a){return this.r0},
+Ja:function(a,b){return this.tP.call$1(b)},
+ghY:function(){if(this.yW==null){var z=new P.dD(P.Ak(this.tP,C.dy))
+H.VM(z,[null,null])
+this.yW=z}return this.yW},
+x6:function(a,b){var z,y
+z=a==null
+if(z&&!0)return""
+z=!z
+if(z);if(z)y=P.Xc(a)
+else{z=C.jN.ez(b,new P.Kd())
+y=z.zV(z,"/")}if(!J.xC(this.gJf(this),"")||J.xC(this.Fi,"file")){z=J.U6(y)
+z=z.gor(y)&&!z.nC(y,"/")}else z=!1
+if(z)return"/"+H.d(y)
+return y},
+Ky:function(a,b){var z=J.x(a)
+if(z.n(a,""))return"/"+H.d(b)
+return z.JT(a,0,J.WB(z.cn(a,"/"),1))+H.d(b)},
+uo:function(a){var z=J.U6(a)
+if(J.xZ(z.gB(a),0)&&z.j(a,0)===58)return!0
+return z.u8(a,"/.")!==-1},
+SK:function(a){var z,y,x,w,v
+if(!this.uo(a))return a
+z=[]
+for(y=J.uH(a,"/"),x=new H.a7(y,y.length,0,null),H.VM(x,[H.W8(y,"Q",0)]),w=!1;x.G();){v=x.mD
+if(J.xC(v,"..")){y=z.length
+if(y!==0)if(y===1){if(0>=y)throw H.e(z,0)
+y=!J.xC(z[0],"")}else y=!0
+else y=!1
+if(y){if(0>=z.length)throw H.e(z,0)
+z.pop()}w=!0}else if("."===v)w=!0
+else{z.push(v)
+w=!1}}if(w)z.push("")
+return C.Nm.zV(z,"/")},
+mS:function(a){var z,y,x,w,v,u,t,s
+z=a.Fi
+if(!J.xC(z,"")){y=a.iV
+x=a.gJf(a)
+w=a.gGL(a)
+v=this.SK(a.r0)
+u=a.tP}else{if(!J.xC(a.gJf(a),"")){y=a.iV
+x=a.gJf(a)
+w=a.gGL(a)
+v=this.SK(a.r0)
+u=a.tP}else{if(J.xC(a.r0,"")){v=this.r0
+u=a.tP
+u=!J.xC(u,"")?u:this.tP}else{t=J.co(a.r0,"/")
+s=a.r0
+v=t?this.SK(s):this.SK(this.Ky(this.r0,s))
+u=a.tP}y=this.iV
+x=this.gJf(this)
+w=this.gGL(this)}z=this.Fi}return P.R6(a.BJ,x,v,null,w,u,null,z,y)},
+tb:function(a){var z=this.iV
+if(""!==z){a.KF(z)
+a.KF("@")}z=this.NN
+a.KF(z==null?"null":z)
+if(!J.xC(this.HC,0)){a.KF(":")
+a.KF(J.AG(this.HC))}},
+bu:function(a){var z,y
+z=P.p9("")
+y=this.Fi
+if(""!==y){z.KF(y)
+z.KF(":")}if(!J.xC(this.gJf(this),"")||J.xC(y,"file")){z.KF("//")
+this.tb(z)}z.KF(this.r0)
+y=this.tP
+if(""!==y){z.KF("?")
+z.KF(y)}y=this.BJ
+if(""!==y){z.KF("#")
+z.KF(y)}return z.vM},
+n:function(a,b){var z
+if(b==null)return!1
+z=J.RE(b)
+if(typeof b!=="object"||b===null||!z.$isiD)return!1
+return J.xC(this.Fi,b.Fi)&&J.xC(this.iV,b.iV)&&J.xC(this.gJf(this),z.gJf(b))&&J.xC(this.gGL(this),z.gGL(b))&&J.xC(this.r0,b.r0)&&J.xC(this.tP,b.tP)&&J.xC(this.BJ,b.BJ)},
+giO:function(a){var z=new P.XZ()
+return z.call$2(this.Fi,z.call$2(this.iV,z.call$2(this.gJf(this),z.call$2(this.gGL(this),z.call$2(this.r0,z.call$2(this.tP,z.call$2(this.BJ,1)))))))},
+n3:function(a,b,c,d,e,f,g,h,i){var z=J.x(h)
+if(z.n(h,"http")&&J.xC(e,80))this.HC=0
+else if(z.n(h,"https")&&J.xC(e,443))this.HC=0
+else this.HC=e
+this.r0=this.x6(c,d)},
+$isiD:true,
+static:{"":"Um,B4,Bx,iR,LM,mv,nR,jJ,d2,q7,ux,vI,SF,tC,IL,Q5,vl,yt,fC,O5,eq,qf,Tx,y3,Cn,R1,oe,vT,K7,nL,H5,zst,eK,bf,nc,nU,uj,SQ,SD",r6:function(a){var z,y,x,w,v,u,t,s
+z=a.oH
+if(1>=z.length)throw H.e(z,1)
+y=z[1]
+y=P.iy(y!=null?y:"")
+x=z.length
+if(2>=x)throw H.e(z,2)
+w=z[2]
+w=w!=null?w:""
+if(3>=x)throw H.e(z,3)
+v=z[3]
+if(4>=x)throw H.e(z,4)
+v=P.K6(v,z[4])
+if(5>=x)throw H.e(z,5)
+x=P.n7(z[5])
+u=z.length
+if(6>=u)throw H.e(z,6)
+t=z[6]
+t=t!=null?t:""
+if(7>=u)throw H.e(z,7)
+s=z[7]
+s=s!=null?s:""
+if(8>=u)throw H.e(z,8)
+z=z[8]
+z=z!=null?z:""
+u=P.iy(y)
+u=new P.iD(P.L7(v),null,null,u,w,P.LE(s,null),P.UJ(z),null,null)
+u.n3(z,v,t,null,x,s,null,y,w)
+return u},R6:function(a,b,c,d,e,f,g,h,i){var z=P.iy(h)
+z=new P.iD(P.L7(b),null,null,z,i,P.LE(f,g),P.UJ(a),null,null)
+z.n3(a,b,c,d,e,f,g,h,i)
+return z},L7:function(a){var z,y,x
+if(a==null||J.FN(a)===!0)return a
+z=J.rY(a)
+if(z.j(a,0)===91){if(z.j(a,J.xH(z.gB(a),1))!==93)throw H.b(P.cD("Missing end `]` to match `[` in host"))
+P.eg(z.JT(a,1,J.xH(z.gB(a),1)))
+return a}y=0
+while(!0){x=z.gB(a)
+if(typeof x!=="number")throw H.s(x)
+if(!(y<x))break
+if(z.j(a,y)===58){P.eg(a)
+return"["+H.d(a)+"]"}++y}return a},iy:function(a){var z,y,x,w,v,u,t,s
+z=new P.hb()
+y=new P.XX()
+if(a==null)return""
+x=J.U6(a)
+w=x.gB(a)
+if(typeof w!=="number")throw H.s(w)
+v=!0
+u=0
+for(;u<w;++u){t=x.j(a,u)
+if(u===0){if(!(t>=97&&t<=122))s=t>=65&&t<=90
+else s=!0
+s=!s}else s=!1
+if(s)throw H.b(new P.AT("Illegal scheme: "+H.d(a)))
+if(z.call$1(t)!==!0){if(y.call$1(t)===!0);else throw H.b(new P.AT("Illegal scheme: "+H.d(a)))
+v=!1}}return v?a:x.hc(a)},LE:function(a,b){var z,y,x
+z={}
+y=a==null
+if(y&&!0)return""
+y=!y
+if(y);if(y)return P.Xc(a)
+x=P.p9("")
+z.a=!0
+C.jN.aN(b,new P.yZ(z,x))
+return x.vM},UJ:function(a){if(a==null)return""
+return P.Xc(a)},Xc:function(a){var z,y,x,w,v,u,t,s,r,q,p,o,n,m
+z={}
+y=new P.Gs()
+x=new P.Tw()
+w=new P.wm(a,y,new P.pm())
+v=new P.FB(a)
+z.a=null
+u=J.U6(a)
+t=u.gB(a)
+z.b=0
+z.c=0
+s=new P.Lk(z,a)
+if(typeof t!=="number")throw H.s(t)
+for(;r=z.b,r<t;)if(u.j(a,r)===37){r=z.b
+if(t<r+2)throw H.b(new P.AT("Invalid percent-encoding in URI component: "+H.d(a)))
+q=u.j(a,r+1)
+p=u.j(a,z.b+2)
+o=v.call$1(z.b+1)
+if(y.call$1(q)===!0&&y.call$1(p)===!0&&x.call$1(o)!==!0)z.b=z.b+3
+else{s.call$0()
+r=x.call$1(o)
+n=z.a
+if(r===!0){n.toString
+m=P.O8(1,o,J.im)
+m.$builtinTypeInfo=[J.im]
+r=H.eT(m)
+n.vM=n.vM+r}else{n.toString
+n.vM=n.vM+"%"
+r=z.a
+n=w.call$1(z.b+1)
+r.toString
+m=P.O8(1,n,J.im)
+m.$builtinTypeInfo=[J.im]
+n=H.eT(m)
+r.vM=r.vM+n
+r=z.a
+n=w.call$1(z.b+2)
+r.toString
+m=P.O8(1,n,J.im)
+m.$builtinTypeInfo=[J.im]
+n=H.eT(m)
+r.vM=r.vM+n}z.b=z.b+3
+z.c=z.b}}else z.b=z.b+1
+if(z.a!=null&&z.c!==r)s.call$0()
+z=z.a
+if(z==null)return a
+return J.AG(z)},n7:function(a){if(a!=null&&!J.xC(a,""))return H.BU(a,null,null)
+else return 0},K6:function(a,b){if(a!=null)return a
+if(b!=null)return b
+return""},Ak:function(a,b){return H.n3(J.uH(a,"&"),H.B7([],P.L5(null,null,null,null,null)),new P.qz(b))},q5:function(a){var z,y
+z=new P.hQ()
+y=a.split(".")
+if(y.length!==4)z.call$1("IPv4 address should contain exactly 4 parts")
+z=new H.A8(y,new P.Nw(z))
+H.VM(z,[null,null])
+return z.br(z)},eg:function(a){var z,y,x,w,v,u,t,s,r,q,p,o,n
+z=new P.kZ()
+y=new P.JT(a,z)
+if(J.u6(J.q8(a),2))z.call$1("address is too short")
+x=[]
+w=0
+u=!1
+t=0
+while(!0){s=J.q8(a)
+if(typeof s!=="number")throw H.s(s)
+if(!(t<s))break
+if(J.Dz(a,t)===58){if(t===0){++t
+if(J.Dz(a,t)!==58)z.call$1("invalid start colon.")
+w=t}if(t===w){if(u)z.call$1("only one wildcard `::` is allowed")
+J.bi(x,-1)
+u=!0}else J.bi(x,y.call$2(w,t))
+w=t+1}++t}if(J.q8(x)===0)z.call$1("too few parts")
+r=J.xC(w,J.q8(a))
+q=J.xC(J.MQ(x),-1)
+if(r&&!q)z.call$1("expected a part after last `:`")
+if(!r)try{J.bi(x,y.call$2(w,J.q8(a)))}catch(p){H.Ru(p)
+try{v=P.q5(J.ZZ(a,w))
+s=J.Eh(J.UQ(v,0),8)
+o=J.UQ(v,1)
+if(typeof o!=="number")throw H.s(o)
+J.bi(x,(s|o)>>>0)
+o=J.Eh(J.UQ(v,2),8)
+s=J.UQ(v,3)
+if(typeof s!=="number")throw H.s(s)
+J.bi(x,(o|s)>>>0)}catch(p){H.Ru(p)
+z.call$1("invalid end of IPv6 address.")}}if(u){if(J.q8(x)>7)z.call$1("an address with a wildcard must have less than 7 parts")}else if(J.q8(x)!==8)z.call$1("an address without a wildcard must contain exactly 8 parts")
+s=new H.zs(x,new P.d9(x))
+s.$builtinTypeInfo=[null,null]
+n=H.Y9(s.$asmW,H.oX(s))
+o=n==null?null:n[0]
+return P.F(s,!0,o)},jW:function(a,b,c){var z,y,x,w,v,u,t,s,r
+z=new P.rI()
+y=P.p9("")
+x=J.U6(b)
+w=0
+while(!0){v=x.gB(b)
+if(typeof v!=="number")throw H.s(v)
+if(!(w<v))break
+u=x.j(b,w)
+if(u<128){v=C.jn.m(u,4)
+if(v<0||v>=8)throw H.e(a,v)
+v=(a[v]&C.jn.O(1,u&15))>>>0!==0}else v=!1
+if(v){t=x.t(b,w)
+t=typeof t==="string"?t:H.d(t)
+y.vM=y.vM+t}else if(c&&J.xC(x.t(b,w)," "))y.vM=y.vM+"+"
+else{if(u>=55296&&u<56320){++w
+s=J.xC(x.gB(b),w)?0:x.j(b,w)
+if(s>=56320&&s<57344)u=65536+(u-55296<<10>>>0)+(s-56320)
+else throw H.b(new P.AT("Malformed URI"))}r=P.O8(1,u,J.im)
+r.$builtinTypeInfo=[J.im]
+v=H.eT(r)
+v=C.Nm.gA(C.dy.gZE().WJ(v))
+for(;v.G();){t=z.call$1(v.mD)
+t=typeof t==="string"?t:H.d(t)
+y.vM=y.vM+t}}++w}return y.vM},oh:function(a,b){var z,y,x,w
+for(z=J.rY(a),y=0,x=0;x<2;++x){w=z.j(a,b+x)
+if(48<=w&&w<=57)y=y*16+w-48
+else{w=(w|32)>>>0
+if(97<=w&&w<=102)y=y*16+w-87
+else throw H.b(new P.AT("Invalid URL encoding"))}}return y},pE:function(a,b,c){var z,y,x,w,v,u,t,s
+z=P.p9("")
+y=P.A(null,J.im)
+H.VM(y,[J.im])
+x=J.U6(a)
+w=b.lH
+v=0
+while(!0){u=x.gB(a)
+if(typeof u!=="number")throw H.s(u)
+if(!(v<u))break
+t=x.j(a,v)
+if(t!==37){if(c&&t===43)z.vM=z.vM+" "
+else{s=P.O8(1,t,J.im)
+s.$builtinTypeInfo=[J.im]
+u=H.eT(s)
+z.vM=z.vM+u}++v}else{C.Nm.sB(y,0)
+for(;t===37;){++v
+u=J.xH(x.gB(a),2)
+if(typeof u!=="number")throw H.s(u)
+if(v>u)throw H.b(new P.AT("Truncated URI"))
+y.push(P.oh(a,v))
+v+=2
+if(v===x.gB(a))break
+t=x.j(a,v)}u=new P.GY(w).WJ(y)
+z.vM=z.vM+u}}return z.vM}}},hb:{"":"Tp;",
+call$1:function(a){var z,y
+z=J.Wx(a)
+if(z.C(a,128)){y=z.m(a,4)
+if(y<0||y>=8)throw H.e(C.HE,y)
+z=(C.HE[y]&C.jn.O(1,z.i(a,15)))>>>0!==0}else z=!1
+return z},
+"+call:1:0":0,
+$isEH:true,
+$is_HB:true,
+$is_Dv:true},XX:{"":"Tp;",
+call$1:function(a){var z,y
+z=J.Wx(a)
+if(z.C(a,128)){y=z.m(a,4)
+if(y<0||y>=8)throw H.e(C.mK,y)
+z=(C.mK[y]&C.jn.O(1,z.i(a,15)))>>>0!==0}else z=!1
+return z},
+"+call:1:0":0,
+$isEH:true,
+$is_HB:true,
+$is_Dv:true},Kd:{"":"Tp;",
+call$1:function(a){return P.jW(C.Wd,a,!1)},
+"+call:1:0":0,
+$isEH:true,
+$is_HB:true,
+$is_Dv:true},yZ:{"":"Tp;a,b",
+call$2:function(a,b){var z=this.a
+if(!z.a)this.b.KF("&")
+z.a=!1
+z=this.b
+z.KF(P.jW(C.kg,a,!0))
+if(b!=null&&J.FN(b)!==!0){z.KF("=")
+z.KF(P.jW(C.kg,b,!0))}},
+"+call:2:0":0,
+$isEH:true,
+$is_bh:true},Gs:{"":"Tp;",
+call$1:function(a){var z
+if(typeof a!=="number")throw H.s(a)
+if(!(48<=a&&a<=57))z=65<=a&&a<=70
+else z=!0
+return z},
+"+call:1:0":0,
+$isEH:true,
+$is_HB:true,
+$is_Dv:true},pm:{"":"Tp;",
+call$1:function(a){if(typeof a!=="number")throw H.s(a)
+return 97<=a&&a<=102},
+"+call:1:0":0,
+$isEH:true,
+$is_HB:true,
+$is_Dv:true},Tw:{"":"Tp;",
+call$1:function(a){var z,y
+z=J.Wx(a)
+if(z.C(a,128)){y=z.m(a,4)
+if(y<0||y>=8)throw H.e(C.kg,y)
+z=(C.kg[y]&C.jn.O(1,z.i(a,15)))>>>0!==0}else z=!1
+return z},
+"+call:1:0":0,
+$isEH:true,
+$is_HB:true,
+$is_Dv:true},wm:{"":"Tp;b,c,d",
+call$1:function(a){var z,y
+z=this.b
+y=J.Dz(z,a)
+if(this.d.call$1(y)===!0)return y-32
+else if(this.c.call$1(y)!==!0)throw H.b(new P.AT("Invalid URI component: "+H.d(z)))
+else return y},
+"+call:1:0":0,
+$isEH:true,
+$is_HB:true,
+$is_Dv:true},FB:{"":"Tp;e",
+call$1:function(a){var z,y,x,w,v,u
+for(z=this.e,y=J.Qc(a),x=J.rY(z),w=0,v=0;v<2;++v){u=x.j(z,y.g(a,v))
+if(48<=u&&u<=57)w=w*16+u-48
+else{u=(u|32)>>>0
+if(97<=u&&u<=102)w=w*16+u-97+10
+else throw H.b(new P.AT("Invalid percent-encoding in URI component: "+H.d(z)))}}return w},
+"+call:1:0":0,
+$isEH:true,
+$is_HB:true,
+$is_Dv:true},Lk:{"":"Tp;a,f",
+call$0:function(){var z,y,x,w,v
+z=this.a
+y=z.a
+x=z.c
+w=this.f
+v=z.b
+if(y==null)z.a=P.p9(J.bh(w,x,v))
+else y.KF(J.bh(w,x,v))},
+"+call:0:0":0,
+$isEH:true,
+$is_X0:true},XZ:{"":"Tp;",
+call$2:function(a,b){return J.mQ(J.WB(J.p0(b,31),J.v1(a)),1073741823)},
+"+call:2:0":0,
+$isEH:true,
+$is_bh:true},qz:{"":"Tp;a",
+call$2:function(a,b){var z,y,x,w
+z=J.U6(b)
+y=z.u8(b,"=")
+if(y===-1){if(!z.n(b,""))J.kW(a,P.pE(b,this.a,!0),"")}else if(y!==0){x=z.JT(b,0,y)
+w=z.yn(b,y+1)
+z=this.a
+J.kW(a,P.pE(x,z,!0),P.pE(w,z,!0))}return a},
+"+call:2:0":0,
+$isEH:true,
+$is_bh:true},hQ:{"":"Tp;",
+call$1:function(a){throw H.b(P.cD("Illegal IPv4 address, "+H.d(a)))},
+"+call:1:0":0,
+$isEH:true,
+$is_HB:true,
+$is_Dv:true},Nw:{"":"Tp;a",
+call$1:function(a){var z,y
+z=H.BU(a,null,null)
+y=J.Wx(z)
+if(y.C(z,0)||y.D(z,255))this.a.call$1("each part must be in the range of `0..255`")
+return z},
+"+call:1:0":0,
+$isEH:true,
+$is_HB:true,
+$is_Dv:true},kZ:{"":"Tp;",
+call$1:function(a){throw H.b(P.cD("Illegal IPv6 address, "+H.d(a)))},
+"+call:1:0":0,
+$isEH:true,
+$is_HB:true,
+$is_Dv:true},JT:{"":"Tp;a,b",
+call$2:function(a,b){var z,y
+if(J.xZ(J.xH(b,a),4))this.b.call$1("an IPv6 part can only contain a maximum of 4 hex digits")
+z=H.BU(J.bh(this.a,a,b),16,null)
+y=J.Wx(z)
+if(y.C(z,0)||y.D(z,65535))this.b.call$1("each part must be in the range of `0x0..0xFFFF`")
+return z},
+"+call:2:0":0,
+$isEH:true,
+$is_bh:true},d9:{"":"Tp;c",
+call$1:function(a){var z=J.x(a)
+if(z.n(a,-1))return P.O8((9-this.c.length)*2,0,null)
+else return[z.m(a,8)&255,z.i(a,255)]},
+"+call:1:0":0,
+$isEH:true,
+$is_HB:true,
+$is_Dv:true},rI:{"":"Tp;",
+call$1:function(a){var z,y
+z=J.Wx(a)
+y=z.m(a,4)
+if(y<0||y>=16)throw H.e("0123456789ABCDEF",y)
+y="%"+"0123456789ABCDEF"[y]
+z=z.i(a,15)
+if(z<0||z>=16)throw H.e("0123456789ABCDEF",z)
+return y+"0123456789ABCDEF"[z]},
+"+call:1:0":0,
+$isEH:true,
+$is_HB:true,
+$is_Dv:true},dD:{"":"a;iY",
+PF:function(a){return this.iY.PF(a)},
+"+containsValue:1:0":0,
+x4:function(a){return this.iY.x4(a)},
+"+containsKey:1:0":0,
+t:function(a,b){return J.UQ(this.iY,b)},
+"+[]:1:0":0,
+u:function(a,b,c){throw H.b(P.f("Cannot modify an unmodifiable map"))},
+"+[]=:2:0":0,
+Rz:function(a,b){throw H.b(P.f("Cannot modify an unmodifiable map"))},
+aN:function(a,b){return J.kH(this.iY,b)},
+gvc:function(a){return J.iY(this.iY)},
+"+keys":0,
+gUQ:function(a){return J.hI(this.iY)},
+"+values":0,
+gB:function(a){return J.q8(this.iY)},
+"+length":0,
+gl0:function(a){return J.FN(this.iY)},
+"+isEmpty":0,
+gor:function(a){return J.pO(this.iY)},
+"+isNotEmpty":0,
+$isL8:true}}],["dart.dom.html","dart:html",,W,{lq:function(){return window
+"12"},"+window":1,UE:function(a){if(P.F7()===!0)return"webkitTransitionEnd"
+else if(P.dg()===!0)return"oTransitionEnd"
+return"transitionend"},r3:function(a,b){return document.createElement(a)},It:function(a,b,c){return W.lt(a,null,null,b,null,null,null,c).ml(new W.Kx())},lt:function(a,b,c,d,e,f,g,h){var z,y,x,w
+z=W.fJ
+y=new P.Zf(P.Dt(z))
+H.VM(y,[z])
+x=new XMLHttpRequest()
+C.W3.xI(x,"GET",a,!0)
+z=C.fK.aM(x)
+w=new W.Ov(0,z.uv,z.Ph,W.aF(new W.bU(y,x)),z.Sg)
+H.VM(w,[H.W8(z,"RO",0)])
+w.Zz()
+w=C.MD.aM(x)
+z=y.gYJ()
+z=new W.Ov(0,w.uv,w.Ph,W.aF(z),w.Sg)
+H.VM(z,[H.W8(w,"RO",0)])
+z.Zz()
+x.send()
+return y.MM},ED:function(a){var z,y
+z=document.createElement("input",null)
+if(a!=null)try{J.Q3(z,a)}catch(y){H.Ru(y)}return z},H6:function(a,b,c,d,e,f,g,h,i,j,k,l,m,n,o){var z=document.createEvent("MouseEvent")
+J.e2(z,a,d,e,o,i,l,m,f,g,h,b,n,j,c,k)
+return z},uC:function(a){var z,y,x
+try{z=a
+y=J.x(z)
+return typeof z==="object"&&z!==null&&!!y.$iscS}catch(x){H.Ru(x)
+return!1}},uV:function(a){if(a==null)return
+return W.P1(a)},bt:function(a){var z,y
+if(a==null)return
+if("setInterval" in a){z=W.P1(a)
+y=J.x(z)
+if(typeof z==="object"&&z!==null&&!!y.$isD0)return z
+return}else return a},m7:function(a){return a},YT:function(a,b){return new W.vZ(a,b)},GO:function(a){return J.TD(a)},Yb:function(a){return J.W7(a)},Qp:function(a,b,c,d){return J.qd(a,b,c,d)},wi:function(a,b,c,d,e){var z,y,x,w,v,u,t,s,r,q
+z=J.Fb(d)
+if(z==null)throw H.b(new P.AT(d))
+y=z.prototype
+x=J.Dp(d,"created")
+if(x==null)throw H.b(new P.AT(H.d(d)+" has no constructor called 'created'"))
+J.ks(W.r3("article",null))
+w=z.$nativeSuperclassTag
+if(w==null)throw H.b(new P.AT(d))
+v=e==null
+if(v){if(!J.xC(w,"HTMLElement"))throw H.b(P.f("Class must provide extendsTag if base native class is not HTMLElement"))}else if(!(b.createElement(e) instanceof window[w]))throw H.b(P.f("extendsTag does not match base native class"))
+u=a[w]
+t={}
+t.createdCallback={value: ((function(invokeCallback) {
+ return function() {
+ return invokeCallback(this);
+ };
+ })(H.tR(W.YT(x,y),1)))}
+t.enteredViewCallback={value: ((function(invokeCallback) {
+ return function() {
+ return invokeCallback(this);
+ };
+ })(H.tR(W.V5,1)))}
+t.leftViewCallback={value: ((function(invokeCallback) {
+ return function() {
+ return invokeCallback(this);
+ };
+ })(H.tR(W.cn,1)))}
+t.attributeChangedCallback={value: ((function(invokeCallback) {
+ return function(arg1, arg2, arg3) {
+ return invokeCallback(this, arg1, arg2, arg3);
+ };
+ })(H.tR(W.A6,4)))}
+s=Object.create(u.prototype,t)
+r=H.Va(y)
+Object.defineProperty(s, init.dispatchPropertyName, {value: r, enumerable: false, writable: true, configurable: true})
+q={prototype: s}
+if(!J.xC(w,"HTMLElement"))if(!v)q.extends=e
+b.register(c,q)},aF:function(a){if(J.xC($.X3,C.NU))return a
+return $.X3.oj(a,!0)},qE:{"":"cv;","%":"HTMLAppletElement|HTMLBRElement|HTMLBaseFontElement|HTMLBodyElement|HTMLCanvasElement|HTMLContentElement|HTMLDListElement|HTMLDataListElement|HTMLDetailsElement|HTMLDialogElement|HTMLDirectoryElement|HTMLDivElement|HTMLFontElement|HTMLFrameElement|HTMLFrameSetElement|HTMLHRElement|HTMLHeadElement|HTMLHeadingElement|HTMLHtmlElement|HTMLMarqueeElement|HTMLMenuElement|HTMLModElement|HTMLOptGroupElement|HTMLParagraphElement|HTMLPreElement|HTMLQuoteElement|HTMLShadowElement|HTMLSpanElement|HTMLTableCaptionElement|HTMLTableCellElement|HTMLTableColElement|HTMLTableDataCellElement|HTMLTableElement|HTMLTableHeaderCellElement|HTMLTableRowElement|HTMLTableSectionElement|HTMLTitleElement|HTMLUListElement|HTMLUnknownElement;HTMLElement;Sa|GN|ir|Nr|uL|Vf|aC|tu|Be|Vc|i6|WZ|Fv|pv|I3|Vfx|qr|Dsd|Gk|tuj|Ds|Vct|pR|D13|hx|u7|WZq|St|pva|vj|cda|CX|Nh|ih|waa|F1|XP|NQ|V0|fI|V4|kK|V6|uw"},Yy:{"":"Gv;",$isList:true,
+$asWO:function(){return[W.M5]},
+$isqC:true,
+$iscX:true,
+$ascX:function(){return[W.M5]},
+"%":"EntryArray"},Ps:{"":"qE;cC:hash%,LU:href=,N:target=,r9:type%",
+bu:function(a){return a.toString()},
+"%":"HTMLAnchorElement"},fY:{"":"qE;cC:hash=,LU:href=,N:target=","%":"HTMLAreaElement"},nB:{"":"qE;LU:href=,N:target=","%":"HTMLBaseElement"},i3:{"":"ea;O3:url=","%":"BeforeLoadEvent"},Az:{"":"Gv;r9:type=",$isAz:true,"%":";Blob"},QW:{"":"qE;MB:form=,oc:name%,r9:type%,P:value%",
+r6:function(a,b){return this.value.call$1(b)},
+"%":"HTMLButtonElement"},OM:{"":"KV;Rn:data=,B:length=",$isGv:true,"%":"Comment;CharacterData"},QQ:{"":"ea;tT:code=","%":"CloseEvent"},y4:{"":"Mf;Rn:data=","%":"CompositionEvent"},oJ:{"":"BV;B:length=",
+T2:function(a,b){var z=a.getPropertyValue(b)
+return z!=null?z:""},
+hV:function(a,b,c,d){var z
+try{if(d==null)d=""
+a.setProperty(b,c,d)
+if(!!a.setAttribute)a.setAttribute(b,c)}catch(z){H.Ru(z)}},
+"%":"CSS2Properties|CSSStyleDeclaration|MSStyleCSSProperties"},DG:{"":"ea;",
+gey:function(a){var z=a._dartDetail
+if(z!=null)return z
+return P.o7(a.detail,!0)},
+$isDG:true,
+"%":"CustomEvent"},YN:{"":"KV;",
+JP:function(a){return a.createDocumentFragment()},
+Kb:function(a,b){return a.getElementById(b)},
+gEr:function(a){return C.mt.aM(a)},
+gVl:function(a){return C.T1.aM(a)},
+gLm:function(a){return C.io.aM(a)},
+Md:function(a,b){return W.vD(a.querySelectorAll(b),null)},
+Ja:function(a,b){return a.querySelector(b)},
+pr:function(a,b){return W.vD(a.querySelectorAll(b),null)},
+$isYN:true,
+"%":"Document|HTMLDocument|SVGDocument"},bA:{"":"KV;",
+Md:function(a,b){return W.vD(a.querySelectorAll(b),null)},
+Ja:function(a,b){return a.querySelector(b)},
+pr:function(a,b){return W.vD(a.querySelectorAll(b),null)},
+$isGv:true,
+"%":";DocumentFragment"},Wq:{"":"KV;",$isGv:true,"%":"DocumentType"},rv:{"":"Gv;G1:message=,oc:name=","%":";DOMError"},BK:{"":"Gv;G1:message=",
+goc:function(a){var z=a.name
+if(P.F7()===!0&&z==="SECURITY_ERR")return"SecurityError"
+if(P.F7()===!0&&z==="SYNTAX_ERR")return"SyntaxError"
+return z},
+"+name":0,
+bu:function(a){return a.toString()},
+"%":"DOMException"},cv:{"":"KV;xr:className%,jO:id%",
+gQg:function(a){return new W.E9(a)},
+Md:function(a,b){return W.vD(a.querySelectorAll(b),null)},
+Ja:function(a,b){return a.querySelector(b)},
+pr:function(a,b){return W.vD(a.querySelectorAll(b),null)},
+gDD:function(a){return new W.I4(a)},
+i4:function(a){},
+"+enteredView:0:0":0,
+Nz:function(a){},
+"+leftView:0:0":0,
+aC:function(a,b,c,d){},
+gjU:function(a){return a.localName},
+bu:function(a){return a.localName},
+WO:function(a,b){if(!!a.matches)return a.matches(b)
+else if(!!a.webkitMatchesSelector)return a.webkitMatchesSelector(b)
+else if(!!a.mozMatchesSelector)return a.mozMatchesSelector(b)
+else if(!!a.msMatchesSelector)return a.msMatchesSelector(b)
+else if(!!a.oMatchesSelector)return a.oMatchesSelector(b)
+else throw H.b(P.f("Not supported on this platform"))},
+bA:function(a,b){var z=a
+do{if(J.RF(z,b))return!0
+z=z.parentElement}while(z!=null)
+return!1},
+er:function(a){return(a.createShadowRoot||a.webkitCreateShadowRoot).call(a)},
+gKE:function(a){return a.shadowRoot||a.webkitShadowRoot},
+gI:function(a){return new W.DM(a,a)},
+gEr:function(a){return C.mt.f0(a)},
+gVl:function(a){return C.T1.f0(a)},
+gLm:function(a){return C.io.f0(a)},
+ZL:function(a){},
+$iscv:true,
+$isGv:true,
+"%":";Element"},Fs:{"":"qE;oc:name%,LA:src%,r9:type%","%":"HTMLEmbedElement"},SX:{"":"ea;kc:error=,G1:message=","%":"ErrorEvent"},ea:{"":"Gv;It:_selector},Xt:bubbles=,Ii:path=,r9:type=",
+gN:function(a){return W.bt(a.target)},
+$isea:true,
+"%":"AudioProcessingEvent|AutocompleteErrorEvent|BeforeUnloadEvent|CSSFontFaceLoadEvent|DeviceMotionEvent|DeviceOrientationEvent|HashChangeEvent|IDBVersionChangeEvent|MIDIConnectionEvent|MediaKeyNeededEvent|MediaStreamEvent|MediaStreamTrackEvent|MutationEvent|OfflineAudioCompletionEvent|OverflowEvent|PageTransitionEvent|PopStateEvent|RTCDTMFToneChangeEvent|RTCDataChannelEvent|RTCIceCandidateEvent|SecurityPolicyViolationEvent|SpeechInputEvent|SpeechRecognitionEvent|TrackEvent|WebGLContextEvent|WebKitAnimationEvent;Event"},D0:{"":"Gv;",
+gI:function(a){return new W.Jn(a)},
+On:function(a,b,c,d){return a.addEventListener(b,H.tR(c,1),d)},
+Y9:function(a,b,c,d){return a.removeEventListener(b,H.tR(c,1),d)},
+$isD0:true,
+"%":";EventTarget"},as:{"":"qE;MB:form=,oc:name%,r9:type=","%":"HTMLFieldSetElement"},T5:{"":"Az;oc:name=",$isT5:true,"%":"File"},Aa:{"":"rv;tT:code=","%":"FileError"},Yu:{"":"qE;B:length=,bP:method=,oc:name%,N:target=","%":"HTMLFormElement"},xn:{"":"ec;",
+gB:function(a){return a.length},
+"+length":0,
+t:function(a,b){var z=a.length
+if(b>>>0!==b||b>=z)throw H.b(P.TE(b,0,z))
+return a[b]},
+"+[]:1:0":0,
+u:function(a,b,c){throw H.b(P.f("Cannot assign element of immutable List."))},
+"+[]=:2:0":0,
+sB:function(a,b){throw H.b(P.f("Cannot resize immutable List."))},
+"+length=":0,
+grZ:function(a){var z=a.length
+if(z>0)return a[z-1]
+throw H.b(new P.lj("No elements"))},
+Zv:function(a,b){if(b>>>0!==b||b>=a.length)throw H.e(a,b)
+return a[b]},
+$asWO:function(){return[W.KV]},
+$ascX:function(){return[W.KV]},
+$isList:true,
+$isqC:true,
+$iscX:true,
+$isXj:true,
+"%":"HTMLCollection|HTMLFormControlsCollection|HTMLOptionsCollection"},fJ:{"":"Vi;iC:responseText=,ys:status=,po:statusText=",
+R3:function(a,b,c,d,e,f){return a.open(b,c,d,f,e)},
+xI:function(a,b,c,d){return a.open(b,c,d)},
+wR:function(a,b){return a.send(b)},
+$isfJ:true,
+"%":"XMLHttpRequest"},Vi:{"":"D0;","%":";XMLHttpRequestEventTarget"},tX:{"":"qE;oc:name%,LA:src%","%":"HTMLIFrameElement"},Sg:{"":"Gv;Rn:data=",$isSg:true,"%":"ImageData"},pA:{"":"qE;LA:src%",
+tZ:function(a){return this.complete.call$0()},
+oo:function(a,b){return this.complete.call$1(b)},
+"%":"HTMLImageElement"},Mi:{"":"qE;Tq:checked%,MB:form=,qC:list=,oc:name%,LA:src%,r9:type%,P:value%",
+RR:function(a,b){return this.accept.call$1(b)},
+r6:function(a,b){return this.value.call$1(b)},
+$isMi:true,
+$iscv:true,
+$isGv:true,
+$isKV:true,
+$isD0:true,
+"%":"HTMLInputElement"},Gt:{"":"Mf;mW:location=","%":"KeyboardEvent"},In:{"":"qE;MB:form=,oc:name%,r9:type=","%":"HTMLKeygenElement"},Gx:{"":"qE;P:value%",
+r6:function(a,b){return this.value.call$1(b)},
+"%":"HTMLLIElement"},eP:{"":"qE;MB:form=","%":"HTMLLabelElement"},AL:{"":"qE;MB:form=","%":"HTMLLegendElement"},Og:{"":"qE;LU:href=,r9:type%",$isOg:true,"%":"HTMLLinkElement"},cS:{"":"Gv;cC:hash%,LU:href=",
+bu:function(a){return a.toString()},
+$iscS:true,
+"%":"Location"},M6:{"":"qE;oc:name%","%":"HTMLMapElement"},El:{"":"qE;kc:error=,LA:src%",
+yy:function(a){return a.pause()},
+"%":"HTMLAudioElement|HTMLMediaElement|HTMLVideoElement"},zm:{"":"Gv;tT:code=","%":"MediaError"},SV:{"":"Gv;tT:code=","%":"MediaKeyError"},aB:{"":"ea;G1:message=","%":"MediaKeyEvent"},ku:{"":"ea;G1:message=","%":"MediaKeyMessageEvent"},cW:{"":"D0;jO:id=","%":"MediaStream"},cx:{"":"ea;",
+gRn:function(a){return P.o7(a.data,!0)},
+gFF:function(a){return W.bt(a.source)},
+"+source":0,
+$iscx:true,
+"%":"MessageEvent"},la:{"":"qE;jb:content=,oc:name%","%":"HTMLMetaElement"},Vn:{"":"qE;P:value%",
+r6:function(a,b){return this.value.call$1(b)},
+"%":"HTMLMeterElement"},Hw:{"":"ea;Rn:data=","%":"MIDIMessageEvent"},bn:{"":"Im;",
+LV:function(a,b,c){return a.send(b,c)},
+wR:function(a,b){return a.send(b)},
+"%":"MIDIOutput"},Im:{"":"D0;jO:id=,oc:name=,r9:type=","%":"MIDIInput;MIDIPort"},Aj:{"":"Mf;",
+nH:function(a,b,c,d,e,f,g,h,i,j,k,l,m,n,o,p){a.initMouseEvent(b,c,d,e,f,g,h,i,j,k,l,m,n,o,W.m7(p))
+return},
+$isAj:true,
+"%":"DragEvent|MSPointerEvent|MouseEvent|MouseScrollEvent|MouseWheelEvent|PointerEvent|WheelEvent"},oU:{"":"Gv;",$isGv:true,"%":"Navigator"},qT:{"":"Gv;G1:message=,oc:name=","%":"NavigatorUserMediaError"},KV:{"":"D0;q6:firstChild=,uD:nextSibling=,M0:ownerDocument=,eT:parentElement=,KV:parentNode=,a4:textContent}",
+gyT:function(a){return new W.e7(a)},
+wg:function(a){var z=a.parentNode
+if(z!=null)z.removeChild(a)},
+bu:function(a){var z=a.nodeValue
+return z==null?J.Gv.prototype.bu.call(this,a):z},
+jx:function(a,b){return a.appendChild(b)},
+Yv:function(a,b){return a.cloneNode(b)},
+tg:function(a,b){return a.contains(b)},
+mK:function(a,b,c){return a.insertBefore(b,c)},
+$isKV:true,
+"%":"Entity|Notation;Node"},BH:{"":"rl;",
+gB:function(a){return a.length},
+"+length":0,
+t:function(a,b){var z=a.length
+if(b>>>0!==b||b>=z)throw H.b(P.TE(b,0,z))
+return a[b]},
+"+[]:1:0":0,
+u:function(a,b,c){throw H.b(P.f("Cannot assign element of immutable List."))},
+"+[]=:2:0":0,
+sB:function(a,b){throw H.b(P.f("Cannot resize immutable List."))},
+"+length=":0,
+grZ:function(a){var z=a.length
+if(z>0)return a[z-1]
+throw H.b(new P.lj("No elements"))},
+Zv:function(a,b){if(b>>>0!==b||b>=a.length)throw H.e(a,b)
+return a[b]},
+$asWO:function(){return[W.KV]},
+$ascX:function(){return[W.KV]},
+$isList:true,
+$isqC:true,
+$iscX:true,
+$isXj:true,
+"%":"NodeList|RadioNodeList"},mh:{"":"qE;r9:type%","%":"HTMLOListElement"},G7:{"":"qE;Rn:data=,MB:form=,oc:name%,r9:type%","%":"HTMLObjectElement"},Ql:{"":"qE;MB:form=,vH:index=,P:value%",
+r6:function(a,b){return this.value.call$1(b)},
+$isQl:true,
+"%":"HTMLOptionElement"},Xp:{"":"qE;MB:form=,oc:name%,r9:type=,P:value%",
+r6:function(a,b){return this.value.call$1(b)},
+"%":"HTMLOutputElement"},HD:{"":"qE;oc:name%,P:value%",
+r6:function(a,b){return this.value.call$1(b)},
+"%":"HTMLParamElement"},p3:{"":"Gv;tT:code=,G1:message=","%":"PositionError"},qW:{"":"OM;N:target=","%":"ProcessingInstruction"},KR:{"":"qE;P:value%",
+r6:function(a,b){return this.value.call$1(b)},
+"%":"HTMLProgressElement"},ew:{"":"ea;",$isew:true,"%":"XMLHttpRequestProgressEvent;ProgressEvent"},bX:{"":"ew;O3:url=","%":"ResourceProgressEvent"},j2:{"":"qE;LA:src%,r9:type%",$isj2:true,"%":"HTMLScriptElement"},lp:{"":"qE;MB:form=,B:length%,oc:name%,ig:selectedIndex%,r9:type=,P:value%",
+r6:function(a,b){return this.value.call$1(b)},
+$islp:true,
+"%":"HTMLSelectElement"},I0:{"":"bA;pQ:applyAuthorStyles=",
+Yv:function(a,b){return a.cloneNode(b)},
+Kb:function(a,b){return a.getElementById(b)},
+$isI0:true,
+"%":"ShadowRoot"},QR:{"":"qE;LA:src%,r9:type%","%":"HTMLSourceElement"},zD:{"":"ea;kc:error=,G1:message=","%":"SpeechRecognitionError"},G0:{"":"ea;oc:name=","%":"SpeechSynthesisEvent"},wb:{"":"ea;G3:key=,zZ:newValue=,jL:oldValue=,O3:url=","%":"StorageEvent"},fq:{"":"qE;r9:type%","%":"HTMLStyleElement"},yY:{"":"qE;jb:content=",$isyY:true,"%":"HTMLTemplateElement"},kJ:{"":"OM;",$iskJ:true,"%":"CDATASection|Text"},AE:{"":"qE;MB:form=,oc:name%,r9:type=,P:value%",
+r6:function(a,b){return this.value.call$1(b)},
+$isAE:true,
+"%":"HTMLTextAreaElement"},xV:{"":"Mf;Rn:data=","%":"TextEvent"},RH:{"":"qE;fY:kind%,LA:src%","%":"HTMLTrackElement"},Lq:{"":"ea;",$isLq:true,"%":"TransitionEvent|WebKitTransitionEvent"},Mf:{"":"ea;","%":"FocusEvent|SVGZoomEvent|TouchEvent;UIEvent"},K5:{"":"D0;oc:name%,ys:status=",
+gmW:function(a){var z=a.location
+if(W.uC(z)===!0)return z
+if(null==a._location_wrapper)a._location_wrapper=new W.H2(z)
+return a._location_wrapper},
+oB:function(a,b){return a.requestAnimationFrame(H.tR(b,1))},
+pl:function(a){if(!!(a.requestAnimationFrame&&a.cancelAnimationFrame))return
+ (function($this) {
+ var vendors = ['ms', 'moz', 'webkit', 'o'];
+ for (var i = 0; i < vendors.length && !$this.requestAnimationFrame; ++i) {
+ $this.requestAnimationFrame = $this[vendors[i] + 'RequestAnimationFrame'];
+ $this.cancelAnimationFrame =
+ $this[vendors[i]+'CancelAnimationFrame'] ||
+ $this[vendors[i]+'CancelRequestAnimationFrame'];
+ }
+ if ($this.requestAnimationFrame && $this.cancelAnimationFrame) return;
+ $this.requestAnimationFrame = function(callback) {
+ return window.setTimeout(function() {
+ callback(Date.now());
+ }, 16 /* 16ms ~= 60fps */);
+ };
+ $this.cancelAnimationFrame = function(id) { clearTimeout(id); }
+ })(a)},
+geT:function(a){return W.uV(a.parent)},
+cO:function(a){return a.close()},
+xc:function(a,b,c,d){a.postMessage(P.bL(b),c)
+return},
+X6:function(a,b,c){return this.xc(a,b,c,null)},
+bu:function(a){return a.toString()},
+gEr:function(a){return C.mt.aM(a)},
+gVl:function(a){return C.T1.aM(a)},
+gLm:function(a){return C.io.aM(a)},
+$isK5:true,
+$isGv:true,
+$isD0:true,
+"%":"DOMWindow|Window"},UM:{"":"KV;oc:name=,P:value%",
+r6:function(a,b){return this.value.call$1(b)},
+"%":"Attr"},rh:{"":"ma;",
+gB:function(a){return a.length},
+"+length":0,
+t:function(a,b){var z=a.length
+if(b>>>0!==b||b>=z)throw H.b(P.TE(b,0,z))
+return a[b]},
+"+[]:1:0":0,
+u:function(a,b,c){throw H.b(P.f("Cannot assign element of immutable List."))},
+"+[]=:2:0":0,
+sB:function(a,b){throw H.b(P.f("Cannot resize immutable List."))},
+"+length=":0,
+grZ:function(a){var z=a.length
+if(z>0)return a[z-1]
+throw H.b(new P.lj("No elements"))},
+Zv:function(a,b){if(b>>>0!==b||b>=a.length)throw H.e(a,b)
+return a[b]},
+$asWO:function(){return[W.KV]},
+$ascX:function(){return[W.KV]},
+$isList:true,
+$isqC:true,
+$iscX:true,
+$isXj:true,
+"%":"MozNamedAttrMap|NamedNodeMap"},QZ:{"":"a;",
+Wt:function(a,b){return typeof console!="undefined"?console.error(b):null},
+"+error:1:0":0,
+gkc:function(a){return new P.C7(this,W.QZ.prototype.Wt,a,"Wt")},
+To:function(a){return typeof console!="undefined"?console.info(a):null},
+ZF:function(a,b){return typeof console!="undefined"?console.trace(b):null},
+"+trace:1:0":0,
+gtN:function(a){return new P.C7(this,W.QZ.prototype.ZF,a,"ZF")},
+static:{"":"wk",}},BV:{"":"Gv+E1;"},E1:{"":"a;",
+gjb:function(a){return this.T2(a,"content")},
+gBb:function(a){return this.T2(a,"left")},
+gT8:function(a){return this.T2(a,"right")},
+gLA:function(a){return this.T2(a,"src")},
+"+src":0,
+sLA:function(a,b){this.hV(a,"src",b,"")},
+"+src=":0},wz:{"":"ar;Sn,Sc",
+gB:function(a){return this.Sn.length},
+"+length":0,
+t:function(a,b){var z=this.Sn
+if(b>>>0!==b||b>=z.length)throw H.e(z,b)
+return z[b]},
+"+[]:1:0":0,
+u:function(a,b,c){throw H.b(P.f("Cannot modify list"))},
+"+[]=:2:0":0,
+sB:function(a,b){throw H.b(P.f("Cannot modify list"))},
+"+length=":0,
+grZ:function(a){return C.t5.grZ(this.Sn)},
+gDD:function(a){return W.or(this.Sc)},
+gEr:function(a){return C.mt.Uh(this)},
+gVl:function(a){return C.T1.Uh(this)},
+gLm:function(a){return C.io.Uh(this)},
+nJ:function(a,b){var z=C.t5.ev(this.Sn,new W.B1())
+this.Sc=P.F(z,!0,H.W8(z,"mW",0))},
+$asar:null,
+$asWO:null,
+$ascX:null,
+$isList:true,
+$isqC:true,
+$iscX:true,
+static:{vD:function(a,b){var z=new W.wz(a,null)
+H.VM(z,[b])
+z.nJ(a,b)
+return z}}},B1:{"":"Tp;",
+call$1:function(a){var z=J.x(a)
+return typeof a==="object"&&a!==null&&!!z.$iscv},
+"+call:1:0":0,
+$isEH:true,
+$is_HB:true,
+$is_Dv:true},M5:{"":"Gv;"},Jn:{"":"a;WK<",
+t:function(a,b){var z=new W.RO(this.gWK(),b,!1)
+z.$builtinTypeInfo=[null]
+return z},
+"+[]:1:0":0},DM:{"":"Jn;WK<,vW",
+t:function(a,b){var z,y
+z=$.Vp()
+y=J.rY(b)
+if(z.gvc(z).Fb.x4(y.hc(b))){if($.PN==null){if($.L4==null){z=window.navigator.userAgent
+z.toString
+z.length
+$.L4=H.m2(z,"Opera",0)}if($.L4!==!0){z=window.navigator.userAgent
+z.toString
+z.length
+z=H.m2(z,"WebKit",0)}else z=!1
+$.PN=z}if($.PN===!0){z=$.Vp()
+y=new W.eu(this.WK,z.t(z,y.hc(b)),!1)
+y.$builtinTypeInfo=[null]
+return y}}z=new W.eu(this.WK,b,!1)
+z.$builtinTypeInfo=[null]
+return z},
+"+[]:1:0":0,
+static:{"":"fD",}},zL:{"":"Gv+lD;",$isList:true,$asWO:null,$isqC:true,$iscX:true,$ascX:null},ec:{"":"zL+Gm;",$asWO:null,$ascX:null,$isList:true,$isqC:true,$iscX:true},Kx:{"":"Tp;",
+call$1:function(a){return J.EC(a)},
+"+call:1:0":0,
+$isEH:true,
+$is_HB:true,
+$is_Dv:true},iO:{"":"Tp;a",
+call$2:function(a,b){this.a.setRequestHeader(a,b)},
+"+call:2:0":0,
+$isEH:true,
+$is_bh:true},bU:{"":"Tp;b,c",
+call$1:function(a){var z,y,x
+z=this.c
+y=z.status
+if(typeof y!=="number")throw y.F()
+y=y>=200&&y<300||y===0||y===304
+x=this.b
+if(y){y=x.MM
+if(y.Gv!==0)H.vh(new P.lj("Future already completed"))
+y.OH(z)}else x.pm(a)},
+"+call:1:0":0,
+$isEH:true,
+$is_HB:true,
+$is_Dv:true},e7:{"":"ar;NL",
+grZ:function(a){var z=this.NL.lastChild
+if(z==null)throw H.b(new P.lj("No elements"))
+return z},
+h:function(a,b){this.NL.appendChild(b)},
+Rz:function(a,b){var z=J.x(b)
+if(typeof b!=="object"||b===null||!z.$isKV)return!1
+z=this.NL
+if(z!==b.parentNode)return!1
+z.removeChild(b)
+return!0},
+u:function(a,b,c){var z,y
+z=this.NL
+y=z.childNodes
+if(b>>>0!==b||b>=y.length)throw H.e(y,b)
+z.replaceChild(c,y[b])},
+"+[]=:2:0":0,
+gA:function(a){return C.t5.gA(this.NL.childNodes)},
+YW:function(a,b,c,d,e){throw H.b(P.f("Cannot setRange on Node list"))},
+gB:function(a){return this.NL.childNodes.length},
+"+length":0,
+sB:function(a,b){throw H.b(P.f("Cannot set length on immutable List."))},
+"+length=":0,
+t:function(a,b){var z=this.NL.childNodes
+if(b>>>0!==b||b>=z.length)throw H.e(z,b)
+return z[b]},
+"+[]:1:0":0,
+$asar:function(){return[W.KV]},
+$asWO:function(){return[W.KV]},
+$ascX:function(){return[W.KV]}},nj:{"":"Gv+lD;",$isList:true,$asWO:null,$isqC:true,$iscX:true,$ascX:null},rl:{"":"nj+Gm;",$asWO:null,$ascX:null,$isList:true,$isqC:true,$iscX:true},RAp:{"":"Gv+lD;",$isList:true,$asWO:null,$isqC:true,$iscX:true,$ascX:null},ma:{"":"RAp+Gm;",$asWO:null,$ascX:null,$isList:true,$isqC:true,$iscX:true},cf:{"":"a;",
+PF:function(a){var z,y
+for(z=this.gUQ(this),y=new H.a7(z,z.length,0,null),H.VM(y,[H.W8(z,"Q",0)]);y.G(););return!1},
+"+containsValue:1:0":0,
+to:function(a,b){if(this.x4(a)!==!0)this.u(this,a,b.call$0())
+return this.t(this,a)},
+aN:function(a,b){var z,y,x
+for(z=this.gvc(this),y=new H.a7(z,z.length,0,null),H.VM(y,[H.W8(z,"Q",0)]);y.G();){x=y.mD
+b.call$2(x,this.t(this,x))}},
+gvc:function(a){var z,y,x,w
+z=this.MW.attributes
+y=P.A(null,J.O)
+H.VM(y,[J.O])
+for(x=z.length,w=0;w<x;++w){if(w>=z.length)throw H.e(z,w)
+if(this.mb(z[w])){if(w>=z.length)throw H.e(z,w)
+y.push(J.DA(z[w]))}}return y},
+"+keys":0,
+gUQ:function(a){var z,y,x,w
+z=this.MW.attributes
+y=P.A(null,J.O)
+H.VM(y,[J.O])
+for(x=z.length,w=0;w<x;++w){if(w>=z.length)throw H.e(z,w)
+if(this.mb(z[w])){if(w>=z.length)throw H.e(z,w)
+y.push(J.Vm(z[w]))}}return y},
+"+values":0,
+gl0:function(a){return this.gB(this)===0},
+"+isEmpty":0,
+gor:function(a){return this.gB(this)!==0},
+"+isNotEmpty":0,
+$isL8:true,
+$asL8:function(){return[J.O,J.O]}},E9:{"":"cf;MW",
+x4:function(a){return this.MW.hasAttribute(a)},
+"+containsKey:1:0":0,
+t:function(a,b){return this.MW.getAttribute(b)},
+"+[]:1:0":0,
+u:function(a,b,c){this.MW.setAttribute(b,c)},
+"+[]=:2:0":0,
+Rz:function(a,b){var z,y
+z=this.MW
+y=z.getAttribute(b)
+z.removeAttribute(b)
+return y},
+gB:function(a){return this.gvc(this).length},
+"+length":0,
+mb:function(a){return a.namespaceURI==null}},nF:{"":"As;QX,Kd",
+lF:function(){var z,y
+z=P.Ls(null,null,null,J.O)
+y=this.Kd
+y.aN(y,new W.Si(z))
+return z},
+p5:function(a){var z,y,x
+z=C.Nm.zV(P.F(a,!0,null)," ")
+for(y=this.QX,x=new H.a7(y,y.length,0,null),H.VM(x,[H.W8(y,"Q",0)]);x.G();)J.Pw(x.mD,z)},
+OS:function(a){var z=this.Kd
+z.aN(z,new W.vf(a))},
+Rz:function(a,b){return this.xz(new W.Fc(b))},
+xz:function(a){var z=this.Kd
+return z.es(z,!1,new W.hD(a))},
+yJ:function(a){var z=new H.A8(P.F(this.QX,!0,null),new W.FK())
+H.VM(z,[null,null])
+this.Kd=z},
+static:{or:function(a){var z=new W.nF(a,null)
+z.yJ(a)
+return z}}},FK:{"":"Tp;",
+call$1:function(a){return new W.I4(a)},
+"+call:1:0":0,
+$isEH:true,
+$is_HB:true,
+$is_Dv:true},Si:{"":"Tp;a",
+call$1:function(a){var z=this.a
+return z.Ay(z,a.lF())},
+"+call:1:0":0,
+$isEH:true,
+$is_HB:true,
+$is_Dv:true},vf:{"":"Tp;a",
+call$1:function(a){return a.OS(this.a)},
+"+call:1:0":0,
+$isEH:true,
+$is_HB:true,
+$is_Dv:true},Fc:{"":"Tp;a",
+call$1:function(a){return J.V1(a,this.a)},
+"+call:1:0":0,
+$isEH:true,
+$is_HB:true,
+$is_Dv:true},hD:{"":"Tp;a",
+call$2:function(a,b){return this.a.call$1(b)===!0||a===!0},
+"+call:2:0":0,
+$isEH:true,
+$is_bh:true},I4:{"":"As;MW",
+lF:function(){var z,y,x,w
+z=P.Ls(null,null,null,J.O)
+for(y=J.uf(this.MW).split(" "),x=new H.a7(y,y.length,0,null),H.VM(x,[H.W8(y,"Q",0)]);x.G();){w=J.rr(x.mD)
+if(w.length!==0)z.h(z,w)}return z},
+p5:function(a){P.F(a,!0,null)
+J.Pw(this.MW,a.zV(a," "))}},e0:{"":"a;Ph",
+zc:function(a,b){var z=new W.RO(a,this.Ph,b)
+H.VM(z,[null])
+return z},
+aM:function(a){return this.zc(a,!1)},
+Qm:function(a,b){var z=new W.eu(a,this.Ph,b)
+H.VM(z,[null])
+return z},
+f0:function(a){return this.Qm(a,!1)},
+nq:function(a,b){var z=new W.pu(a,b,this.Ph)
+H.VM(z,[null])
+return z},
+Uh:function(a){return this.nq(a,!1)}},RO:{"":"qh;uv,Ph,Sg",
+KR:function(a,b,c,d){var z=new W.Ov(0,this.uv,this.Ph,W.aF(a),this.Sg)
+H.VM(z,[H.W8(this,"RO",0)])
+z.Zz()
+return z},
+zC:function(a,b,c){return this.KR(a,null,b,c)},
+yI:function(a){return this.KR(a,null,null,null)},
+$asqh:null},eu:{"":"RO;uv,Ph,Sg",
+WO:function(a,b){var z,y
+z=new P.nO(new W.ie(b),this)
+H.VM(z,[H.W8(this,"qh",0)])
+y=new P.t3(new W.Ea(b),z)
+H.VM(y,[H.W8(z,"qh",0),null])
+return y},
+$asRO:null,
+$asqh:null,
+$isqh:true},ie:{"":"Tp;a",
+call$1:function(a){return J.eI(J.l2(a),this.a)},
+"+call:1:0":0,
+$isEH:true,
+$is_HB:true,
+$is_Dv:true},Ea:{"":"Tp;b",
+call$1:function(a){J.og(a,this.b)
+return a},
+"+call:1:0":0,
+$isEH:true,
+$is_HB:true,
+$is_Dv:true},pu:{"":"qh;AF,Sg,Ph",
+WO:function(a,b){var z,y
+z=new P.nO(new W.i2(b),this)
+H.VM(z,[H.W8(this,"qh",0)])
+y=new P.t3(new W.b0(b),z)
+H.VM(y,[H.W8(z,"qh",0),null])
+return y},
+KR:function(a,b,c,d){var z,y,x,w,v
+z=W.Lu(null)
+for(y=this.AF,y=y.gA(y),x=this.Ph,w=this.Sg;y.G();){v=new W.RO(y.mD,x,w)
+v.$builtinTypeInfo=[null]
+z.h(z,v)}y=z.aV
+y.toString
+x=new P.Ik(y)
+H.VM(x,[H.W8(y,"WV",0)])
+return x.KR(a,b,c,d)},
+zC:function(a,b,c){return this.KR(a,null,b,c)},
+yI:function(a){return this.KR(a,null,null,null)},
+$asqh:null,
+$isqh:true},i2:{"":"Tp;a",
+call$1:function(a){return J.eI(J.l2(a),this.a)},
+"+call:1:0":0,
+$isEH:true,
+$is_HB:true,
+$is_Dv:true},b0:{"":"Tp;b",
+call$1:function(a){J.og(a,this.b)
+return a},
+"+call:1:0":0,
+$isEH:true,
+$is_HB:true,
+$is_Dv:true},Ov:{"":"MO;VP,uv,Ph,u7,Sg",
+ed:function(){if(this.uv==null)return
+this.Ns()
+this.uv=null
+this.u7=null},
+nB:function(a,b){if(this.uv==null)return
+this.VP=this.VP+1
+this.Ns()},
+yy:function(a){return this.nB(a,null)},
+QE:function(){if(this.uv==null||this.VP<=0)return
+this.VP=this.VP-1
+this.Zz()},
+Zz:function(){var z=this.u7
+if(z!=null&&this.VP<=0)J.qV(this.uv,this.Ph,z,this.Sg)},
+Ns:function(){var z=this.u7
+if(z!=null)J.GJ(this.uv,this.Ph,z,this.Sg)},
+$asMO:null},qO:{"":"a;aV,eM",
+h:function(a,b){var z,y
+z=this.eM
+if(z.x4(b))return
+y=this.aV
+z.u(z,b,b.zC(y.ght(y),new W.RX(this,b),y.gGj()))},
+Rz:function(a,b){var z,y
+z=this.eM
+y=z.Rz(z,b)
+if(y!=null)y.ed()},
+cO:function(a){var z,y,x
+for(z=this.eM,y=z.gUQ(z),x=y.Kw,x=x.gA(x),x=new H.MH(null,x,y.ew),H.VM(x,[H.W8(y,"i1",0),H.W8(y,"i1",1)]);x.G();)x.mD.ed()
+z.V1(z)
+z=this.aV
+z.cO(z)},
+gJK:function(a){return new H.YP(this,W.qO.prototype.cO,a,"cO")},
+KS:function(a){this.aV=P.bK(this.gJK(this),null,!0,a)},
+static:{Lu:function(a){var z=new W.qO(null,P.L5(null,null,null,[P.qh,a],[P.MO,a]))
+H.VM(z,[a])
+z.KS(a)
+return z}}},RX:{"":"Tp;a,b",
+call$0:function(){var z=this.a
+return z.Rz(z,this.b)},
+"+call:0:0":0,
+$isEH:true,
+$is_X0:true},kG:{"":"a;bG",
+cN:function(a){return this.bG.call$1(a)},
+zc:function(a,b){var z=new W.RO(a,this.cN(a),b)
+H.VM(z,[null])
+return z},
+aM:function(a){return this.zc(a,!1)},
+Qm:function(a,b){var z=new W.eu(a,this.cN(a),b)
+H.VM(z,[null])
+return z},
+f0:function(a){return this.Qm(a,!1)},
+nq:function(a,b){var z=new W.pu(a,b,this.cN(a))
+H.VM(z,[null])
+return z},
+Uh:function(a){return this.nq(a,!1)}},Gm:{"":"a;",
+gA:function(a){return W.yB(a,H.W8(a,"Gm",0))},
+h:function(a,b){throw H.b(P.f("Cannot add to immutable List."))},
+Rz:function(a,b){throw H.b(P.f("Cannot remove from immutable List."))},
+YW:function(a,b,c,d,e){throw H.b(P.f("Cannot setRange on immutable List."))},
+$isList:true,
+$asWO:null,
+$isqC:true,
+$iscX:true,
+$ascX:null},W9:{"":"a;nj,vN,Nq,QZ",
+G:function(){var z,y
+z=this.Nq+1
+y=this.vN
+if(z<y){this.QZ=J.UQ(this.nj,z)
+this.Nq=z
+return!0}this.QZ=null
+this.Nq=y
+return!1},
+gl:function(){return this.QZ},
+"+current":0,
+static:{yB:function(a,b){var z=new W.W9(a,J.q8(a),-1,null)
+H.VM(z,[b])
+return z}}},vZ:{"":"Tp;a,b",
+call$1:function(a){var z=H.Va(this.b)
+Object.defineProperty(a, init.dispatchPropertyName, {value: z, enumerable: false, writable: true, configurable: true})
+return this.a(a)},
+"+call:1:0":0,
+$isEH:true,
+$is_HB:true,
+$is_Dv:true},dW:{"":"a;Ui",
+gmW:function(a){return W.zX(this.Ui.location)},
+geT:function(a){return W.P1(this.Ui.parent)},
+cO:function(a){return this.Ui.close()},
+xc:function(a,b,c,d){this.Ui.postMessage(b,c)},
+X6:function(a,b,c){return this.xc(a,b,c,null)},
+$isD0:true,
+$isGv:true,
+static:{P1:function(a){if(a===window)return a
+else return new W.dW(a)}}},PA:{"":"a;mf",static:{zX:function(a){if(a===C.ol.gmW(window))return a
+else return new W.PA(a)}}},H2:{"":"a;WK",
+gcC:function(a){return this.WK.hash},
+"+hash":0,
+scC:function(a,b){this.WK.hash=b},
+"+hash=":0,
+gLU:function(a){return this.WK.href},
+bu:function(a){return this.WK.toString()},
+$iscS:true,
+$isGv:true}}],["dart.dom.indexed_db","dart:indexed_db",,P,{hF:{"":"Gv;",$ishF:true,"%":"IDBKeyRange"}}],["dart.dom.svg","dart:svg",,P,{HB:{"":"zp;N:target=,LU:href=",$isGv:true,"%":"SVGAElement"},ZJ:{"":"Eo;LU:href=",$isGv:true,"%":"SVGAltGlyphElement"},ui:{"":"MB;",$isGv:true,"%":"SVGAnimateColorElement|SVGAnimateElement|SVGAnimateMotionElement|SVGAnimateTransformElement|SVGAnimationElement|SVGSetElement"},D6:{"":"zp;",$isGv:true,"%":"SVGCircleElement"},DQ:{"":"zp;",$isGv:true,"%":"SVGClipPathElement"},Sm:{"":"zp;",$isGv:true,"%":"SVGDefsElement"},es:{"":"zp;",$isGv:true,"%":"SVGEllipseElement"},eG:{"":"MB;",$isGv:true,"%":"SVGFEBlendElement"},lv:{"":"MB;r9:type=,UQ:values=",$isGv:true,"%":"SVGFEColorMatrixElement"},pf:{"":"MB;",$isGv:true,"%":"SVGFEComponentTransferElement"},NV:{"":"MB;kp:operator=",$isGv:true,"%":"SVGFECompositeElement"},W1:{"":"MB;",$isGv:true,"%":"SVGFEConvolveMatrixElement"},zo:{"":"MB;",$isGv:true,"%":"SVGFEDiffuseLightingElement"},wf:{"":"MB;",$isGv:true,"%":"SVGFEDisplacementMapElement"},bb:{"":"MB;",$isGv:true,"%":"SVGFEFloodElement"},tk:{"":"MB;",$isGv:true,"%":"SVGFEGaussianBlurElement"},me:{"":"MB;LU:href=",$isGv:true,"%":"SVGFEImageElement"},qN:{"":"MB;",$isGv:true,"%":"SVGFEMergeElement"},d4:{"":"MB;kp:operator=",$isGv:true,"%":"SVGFEMorphologyElement"},MI:{"":"MB;",$isGv:true,"%":"SVGFEOffsetElement"},xX:{"":"MB;",$isGv:true,"%":"SVGFESpecularLightingElement"},um:{"":"MB;",$isGv:true,"%":"SVGFETileElement"},Fu:{"":"MB;r9:type=",$isGv:true,"%":"SVGFETurbulenceElement"},OE:{"":"MB;LU:href=",$isGv:true,"%":"SVGFilterElement"},l6:{"":"zp;",$isGv:true,"%":"SVGForeignObjectElement"},BA:{"":"zp;",$isGv:true,"%":"SVGGElement"},zp:{"":"MB;",$isGv:true,"%":";SVGGraphicsElement"},rE:{"":"zp;LU:href=",$isGv:true,"%":"SVGImageElement"},CC:{"":"zp;",$isGv:true,"%":"SVGLineElement"},uz:{"":"MB;",$isGv:true,"%":"SVGMarkerElement"},Yd:{"":"MB;",$isGv:true,"%":"SVGMaskElement"},AD:{"":"zp;",$isGv:true,"%":"SVGPathElement"},Gr:{"":"MB;LU:href=",$isGv:true,"%":"SVGPatternElement"},tc:{"":"zp;",$isGv:true,"%":"SVGPolygonElement"},GH:{"":"zp;",$isGv:true,"%":"SVGPolylineElement"},NJ:{"":"zp;",$isGv:true,"%":"SVGRectElement"},nd:{"":"MB;r9:type%,LU:href=",$isGv:true,"%":"SVGScriptElement"},EU:{"":"MB;r9:type%","%":"SVGStyleElement"},MB:{"":"cv;",
+gDD:function(a){if(a._cssClassSet==null)a._cssClassSet=new P.O7(a)
+return a._cssClassSet},
+"%":"SVGAltGlyphDefElement|SVGAltGlyphItemElement|SVGComponentTransferFunctionElement|SVGDescElement|SVGFEDistantLightElement|SVGFEFuncAElement|SVGFEFuncBElement|SVGFEFuncGElement|SVGFEFuncRElement|SVGFEMergeNodeElement|SVGFEPointLightElement|SVGFESpotLightElement|SVGFontElement|SVGFontFaceElement|SVGFontFaceFormatElement|SVGFontFaceNameElement|SVGFontFaceSrcElement|SVGFontFaceUriElement|SVGGlyphElement|SVGHKernElement|SVGMetadataElement|SVGMissingGlyphElement|SVGStopElement|SVGTitleElement|SVGVKernElement;SVGElement"},hy:{"":"zp;",
+Kb:function(a,b){return a.getElementById(b)},
+$ishy:true,
+$isGv:true,
+"%":"SVGSVGElement"},r8:{"":"zp;",$isGv:true,"%":"SVGSwitchElement"},aS:{"":"MB;",$isGv:true,"%":"SVGSymbolElement"},qF:{"":"zp;",$isGv:true,"%":";SVGTextContentElement"},Rk:{"":"qF;bP:method=,LU:href=",$isGv:true,"%":"SVGTextPathElement"},Eo:{"":"qF;","%":"SVGTSpanElement|SVGTextElement;SVGTextPositioningElement"},UD:{"":"zp;LU:href=",$isGv:true,"%":"SVGUseElement"},ZD:{"":"MB;",$isGv:true,"%":"SVGViewElement"},wD:{"":"MB;LU:href=",$isGv:true,"%":"SVGGradientElement|SVGLinearGradientElement|SVGRadialGradientElement"},mj:{"":"MB;",$isGv:true,"%":"SVGCursorElement"},cB:{"":"MB;",$isGv:true,"%":"SVGFEDropShadowElement"},nb:{"":"MB;",$isGv:true,"%":"SVGGlyphRefElement"},xt:{"":"MB;",$isGv:true,"%":"SVGMPathElement"},O7:{"":"As;CE",
+lF:function(){var z,y,x,w,v
+z=new W.E9(this.CE).MW.getAttribute("class")
+y=P.Ls(null,null,null,J.O)
+if(z==null)return y
+for(x=z.split(" "),w=new H.a7(x,x.length,0,null),H.VM(w,[H.W8(x,"Q",0)]);w.G();){v=J.rr(w.mD)
+if(v.length!==0)y.h(y,v)}return y},
+p5:function(a){new W.E9(this.CE).MW.setAttribute("class",a.zV(a," "))}}}],["dart.dom.web_sql","dart:web_sql",,P,{Cf:{"":"Gv;tT:code=,G1:message=","%":"SQLError"}}],["dart.isolate","dart:isolate",,P,{HI:{"":"a;",$isHI:true,$isqh:true,
+$asqh:function(){return[null]}}}],["dart.js","dart:js",,P,{z8:function(a,b){return function(_call, f, captureThis) {return function() {return _call(f, captureThis, this, Array.prototype.slice.apply(arguments));}}(P.uu.call$4, a, b)},R4:function(a,b,c,d){var z
+if(b===!0){z=[c]
+C.Nm.Ay(z,d)
+d=z}return P.wY(H.Ek(a,P.F(J.C0(d,P.Xl),!0,null),P.Te(null)))},Dm:function(a,b,c){var z
+if(Object.isExtensible(a))try{Object.defineProperty(a, b, { value: c})
+return!0}catch(z){H.Ru(z)}return!1},wY:function(a){var z
+if(a==null)return
+else{if(typeof a!=="string")if(typeof a!=="number")if(typeof a!=="boolean"){z=J.x(a)
+z=typeof a==="object"&&a!==null&&!!z.$isAz||typeof a==="object"&&a!==null&&!!z.$isea||typeof a==="object"&&a!==null&&!!z.$ishF||typeof a==="object"&&a!==null&&!!z.$isSg||typeof a==="object"&&a!==null&&!!z.$isKV||typeof a==="object"&&a!==null&&!!z.$isAS||typeof a==="object"&&a!==null&&!!z.$isK5}else z=!0
+else z=!0
+else z=!0
+if(z)return a
+else{z=J.x(a)
+if(typeof a==="object"&&a!==null&&!!z.$isiP)return H.U8(a)
+else if(typeof a==="object"&&a!==null&&!!z.$isE4)return a.eh
+else if(typeof a==="object"&&a!==null&&!!z.$isEH)return P.hE(a,"$dart_jsFunction",new P.DV())
+else return P.hE(a,"_$dart_jsObject",new P.Hp())}}},hE:function(a,b,c){var z=a[b]
+if(z==null){z=c.call$1(a)
+P.Dm(a,b,z)}return z},dU:function(a){var z
+if(a==null||typeof a=="string"||typeof a=="number"||typeof a=="boolean")return a
+else{if(a instanceof Object){z=J.x(a)
+z=typeof a==="object"&&a!==null&&!!z.$isAz||typeof a==="object"&&a!==null&&!!z.$isea||typeof a==="object"&&a!==null&&!!z.$ishF||typeof a==="object"&&a!==null&&!!z.$isSg||typeof a==="object"&&a!==null&&!!z.$isKV||typeof a==="object"&&a!==null&&!!z.$isAS||typeof a==="object"&&a!==null&&!!z.$isK5}else z=!1
+if(z)return a
+else if(a instanceof Date)return P.Wu(a.getMilliseconds(),!1)
+else if(a.constructor===DartObject)return a.o
+else return P.ND(a)}},ND:function(a){if(typeof a=="function")return P.iQ(a,"_$dart_dartClosure",new P.Nz())
+else if(a instanceof Array)return P.iQ(a,"_$dart_dartObject",new P.Jd())
+else return P.iQ(a,"_$dart_dartObject",new P.QS())},iQ:function(a,b,c){var z=a[b]
+if(z==null){z=c.call$1(a)
+P.Dm(a,b,z)}return z},E4:{"":"a;eh",
+t:function(a,b){if(typeof b!=="string"&&typeof b!=="number")throw H.b(new P.AT("property is not a String or num"))
+return P.dU(this.eh[b])},
+"+[]:1:0":0,
+u:function(a,b,c){if(typeof b!=="string"&&typeof b!=="number")throw H.b(new P.AT("property is not a String or num"))
+this.eh[b]=P.wY(c)},
+"+[]=:2:0":0,
+giO:function(a){return 0},
+n:function(a,b){var z
+if(b==null)return!1
+z=J.x(b)
+return typeof b==="object"&&b!==null&&!!z.$isE4&&this.eh===b.eh},
+Bm:function(a){return a in this.eh},
+bu:function(a){var z,y
+try{z=String(this.eh)
+return z}catch(y){H.Ru(y)
+return P.a.prototype.bu.call(this,this)}},
+V7:function(a,b){var z,y
+z=this.eh
+if(b==null)y=null
+else{b.toString
+y=new H.A8(b,P.En)
+H.VM(y,[null,null])
+y=P.F(y,!0,null)}return P.dU(z[a].apply(z,y))},
+$isE4:true,
+static:{Oe:function(a){if(typeof a==="number"||typeof a==="string"||typeof a==="boolean"||a==null)throw H.b(new P.AT("object cannot be a num, string, bool, or null"))
+return P.ND(P.wY(a))}}},r7:{"":"E4;eh"},Tz:{"":"Wk;eh",
+t:function(a,b){var z
+if(typeof b==="number"&&b===C.CD.yu(b)){if(typeof b==="number"&&Math.floor(b)===b)if(!(b<0)){z=P.E4.prototype.t.call(this,this,"length")
+if(typeof z!=="number")throw H.s(z)
+z=b>=z}else z=!0
+else z=!1
+if(z)H.vh(P.TE(b,0,P.E4.prototype.t.call(this,this,"length")))}return P.E4.prototype.t.call(this,this,b)},
+"+[]:1:0":0,
+u:function(a,b,c){var z
+if(typeof b==="number"&&b===C.CD.yu(b)){if(typeof b==="number"&&Math.floor(b)===b)if(!(b<0)){z=P.E4.prototype.t.call(this,this,"length")
+if(typeof z!=="number")throw H.s(z)
+z=b>=z}else z=!0
+else z=!1
+if(z)H.vh(P.TE(b,0,P.E4.prototype.t.call(this,this,"length")))}P.E4.prototype.u.call(this,this,b,c)},
+"+[]=:2:0":0,
+gB:function(a){return P.E4.prototype.t.call(this,this,"length")},
+"+length":0,
+sB:function(a,b){P.E4.prototype.u.call(this,this,"length",b)},
+"+length=":0,
+h:function(a,b){this.V7("push",[b])},
+YW:function(a,b,c,d,e){var z,y,x,w,v,u
+if(b>=0){z=P.E4.prototype.t.call(this,this,"length")
+if(typeof z!=="number")throw H.s(z)
+z=b>z}else z=!0
+if(z)H.vh(P.TE(b,0,P.E4.prototype.t.call(this,this,"length")))
+z=J.Wx(c)
+if(z.C(c,b)||z.D(c,P.E4.prototype.t.call(this,this,"length")))H.vh(P.TE(c,b,P.E4.prototype.t.call(this,this,"length")))
+y=z.W(c,b)
+if(J.xC(y,0))return
+if(e<0)throw H.b(new P.AT(e))
+x=[b,y]
+z=new H.nH(d,e,null)
+z.$builtinTypeInfo=[null]
+w=z.Bz
+v=J.Wx(w)
+if(v.C(w,0))H.vh(P.N(w))
+u=z.n1
+if(u!=null){if(J.u6(u,0))H.vh(P.N(u))
+if(v.D(w,u))H.vh(P.TE(w,0,u))}C.Nm.Ay(x,z.qZ(z,y))
+this.V7("splice",x)},
+$asWO:null,
+$ascX:null},Wk:{"":"E4+lD;",$isList:true,$asWO:null,$isqC:true,$iscX:true,$ascX:null},DV:{"":"Tp;",
+call$1:function(a){var z=P.z8(a,!1)
+P.Dm(z,"_$dart_dartClosure",a)
+return z},
+"+call:1:0":0,
+$isEH:true,
+$is_HB:true,
+$is_Dv:true},Hp:{"":"Tp;",
+call$1:function(a){return new DartObject(a)},
+"+call:1:0":0,
+$isEH:true,
+$is_HB:true,
+$is_Dv:true},Nz:{"":"Tp;",
+call$1:function(a){return new P.r7(a)},
+"+call:1:0":0,
+$isEH:true,
+$is_HB:true,
+$is_Dv:true},Jd:{"":"Tp;",
+call$1:function(a){var z=new P.Tz(a)
+H.VM(z,[null])
+return z},
+"+call:1:0":0,
+$isEH:true,
+$is_HB:true,
+$is_Dv:true},QS:{"":"Tp;",
+call$1:function(a){return new P.E4(a)},
+"+call:1:0":0,
+$isEH:true,
+$is_HB:true,
+$is_Dv:true}}],["dart.math","dart:math",,P,{J:function(a,b){if(typeof a!=="number")throw H.b(new P.AT(a))
+if(typeof b!=="number")throw H.b(new P.AT(b))
+if(a>b)return b
+if(a<b)return a
+if(typeof b==="number"){if(typeof a==="number")if(a===0)return(a+b)*a*b
+if(a===0&&C.ON.gzP(b)||C.ON.gG0(b))return b
+return a}return a},y:function(a,b){if(typeof a!=="number")throw H.b(new P.AT(a))
+if(typeof b!=="number")throw H.b(new P.AT(b))
+if(a>b)return a
+if(a<b)return b
+if(typeof b==="number"){if(typeof a==="number")if(a===0)return a+b
+if(C.CD.gG0(b))return b
+return a}if(b===0&&C.CD.gzP(a))return b
+return a}}],["dart.mirrors","dart:mirrors",,P,{re:function(a){var z,y
+z=J.x(a)
+if(typeof a!=="object"||a===null||!z.$isuq||z.n(a,C.HH))throw H.b(new P.AT(H.d(a)+" does not denote a class"))
+y=P.yq(a)
+z=J.x(y)
+if(typeof y!=="object"||y===null||!z.$isMs)throw H.b(new P.AT(H.d(a)+" does not denote a class"))
+return y.gJi()},yq:function(a){if(J.xC(a,C.HH)){$.At().toString
+return $.Cr()}return H.jO(a.gIE())},QF:{"":"a;",$isQF:true},NL:{"":"a;",$isNL:true,$isQF:true},vr:{"":"a;",$isvr:true,$isQF:true},D4:{"":"a;",$isD4:true,$isQF:true,$isNL:true},L9u:{"":"a;",$isL9u:true,$isNL:true,$isQF:true},Ms:{"":"a;",$isMs:true,$isQF:true,$isL9u:true,$isNL:true},Fw:{"":"L9u;",$isFw:true},RS:{"":"a;",$isRS:true,$isNL:true,$isQF:true},RY:{"":"a;",$isRY:true,$isNL:true,$isQF:true},Ys:{"":"a;",$isYs:true,$isRY:true,$isNL:true,$isQF:true},vg:{"":"a;c1,m2,nV,V3"}}],["dart.typed_data","dart:typed_data",,P,{I2:{"":"Gv;",$isI2:true,"%":"ArrayBuffer"},AS:{"":"Gv;",
+aq:function(a,b,c){var z=J.Wx(b)
+if(z.C(b,0)||z.F(b,c))throw H.b(P.TE(b,0,c))
+else throw H.b(P.u("Invalid list index "+H.d(b)))},
+iA:function(a,b,c){if(b>>>0!=b||J.J5(b,c))this.aq(a,b,c)},
+Im:function(a,b,c,d){this.iA(a,b,d+1)
+return d},
+$isAS:true,
+"%":"DataView;ArrayBufferView;xG|Vj|VW|RK|DH|ZK|Th|Vju|KB|RKu|xGn|TkQ|VWk|ZKG|DHb|w6W|Hna|z9g|G8|UZ"},oI:{"":"Vj;",
+gB:function(a){return C.i7(a)},
+"+length":0,
+t:function(a,b){var z=C.i7(a)
+if(b>>>0!=b||J.J5(b,z))this.aq(a,b,z)
+return a[b]},
+"+[]:1:0":0,
+u:function(a,b,c){var z=C.i7(a)
+if(b>>>0!=b||J.J5(b,z))this.aq(a,b,z)
+a[b]=c},
+"+[]=:2:0":0,
+D6:function(a,b,c){var z,y
+z=a.subarray(b,this.Im(a,b,c,C.i7(a)))
+z.$dartCachedLength=z.length
+y=new Float32Array(z)
+y.$dartCachedLength=y.length
+return y},
+Jk:function(a,b){return this.D6(a,b,null)},
+$asWO:function(){return[J.Pp]},
+$ascX:function(){return[J.Pp]},
+$isList:true,
+$isqC:true,
+$iscX:true,
+$isXj:true,
+"%":"Float32Array"},mJ:{"":"RK;",
+gB:function(a){return C.i7(a)},
+"+length":0,
+t:function(a,b){var z=C.i7(a)
+if(b>>>0!=b||J.J5(b,z))this.aq(a,b,z)
+return a[b]},
+"+[]:1:0":0,
+u:function(a,b,c){var z=C.i7(a)
+if(b>>>0!=b||J.J5(b,z))this.aq(a,b,z)
+a[b]=c},
+"+[]=:2:0":0,
+D6:function(a,b,c){var z,y
+z=a.subarray(b,this.Im(a,b,c,C.i7(a)))
+z.$dartCachedLength=z.length
+y=new Float64Array(z)
+y.$dartCachedLength=y.length
+return y},
+Jk:function(a,b){return this.D6(a,b,null)},
+$asWO:function(){return[J.Pp]},
+$ascX:function(){return[J.Pp]},
+$isList:true,
+$isqC:true,
+$iscX:true,
+$isXj:true,
+"%":"Float64Array"},rF:{"":"ZK;",
+gB:function(a){return C.i7(a)},
+"+length":0,
+t:function(a,b){var z=C.i7(a)
+if(b>>>0!=b||J.J5(b,z))this.aq(a,b,z)
+return a[b]},
+"+[]:1:0":0,
+u:function(a,b,c){var z=C.i7(a)
+if(b>>>0!=b||J.J5(b,z))this.aq(a,b,z)
+a[b]=c},
+"+[]=:2:0":0,
+D6:function(a,b,c){var z,y
+z=a.subarray(b,this.Im(a,b,c,C.i7(a)))
+z.$dartCachedLength=z.length
+y=new Int16Array(z)
+y.$dartCachedLength=y.length
+return y},
+Jk:function(a,b){return this.D6(a,b,null)},
+$asWO:function(){return[J.im]},
+$ascX:function(){return[J.im]},
+$isList:true,
+$isqC:true,
+$iscX:true,
+$isXj:true,
+"%":"Int16Array"},vi:{"":"Vju;",
+gB:function(a){return C.i7(a)},
+"+length":0,
+t:function(a,b){var z=C.i7(a)
+if(b>>>0!=b||J.J5(b,z))this.aq(a,b,z)
+return a[b]},
+"+[]:1:0":0,
+u:function(a,b,c){var z=C.i7(a)
+if(b>>>0!=b||J.J5(b,z))this.aq(a,b,z)
+a[b]=c},
+"+[]=:2:0":0,
+D6:function(a,b,c){var z,y
+z=a.subarray(b,this.Im(a,b,c,C.i7(a)))
+z.$dartCachedLength=z.length
+y=new Int32Array(z)
+y.$dartCachedLength=y.length
+return y},
+Jk:function(a,b){return this.D6(a,b,null)},
+$asWO:function(){return[J.im]},
+$ascX:function(){return[J.im]},
+$isList:true,
+$isqC:true,
+$iscX:true,
+$isXj:true,
+"%":"Int32Array"},ZX:{"":"RKu;",
+gB:function(a){return C.i7(a)},
+"+length":0,
+t:function(a,b){var z=C.i7(a)
+if(b>>>0!=b||J.J5(b,z))this.aq(a,b,z)
+return a[b]},
+"+[]:1:0":0,
+u:function(a,b,c){var z=C.i7(a)
+if(b>>>0!=b||J.J5(b,z))this.aq(a,b,z)
+a[b]=c},
+"+[]=:2:0":0,
+D6:function(a,b,c){var z,y
+z=a.subarray(b,this.Im(a,b,c,C.i7(a)))
+z.$dartCachedLength=z.length
+y=new Int8Array(z)
+y.$dartCachedLength=y.length
+return y},
+Jk:function(a,b){return this.D6(a,b,null)},
+$asWO:function(){return[J.im]},
+$ascX:function(){return[J.im]},
+$isList:true,
+$isqC:true,
+$iscX:true,
+$isXj:true,
+"%":"Int8Array"},ycx:{"":"TkQ;",
+gB:function(a){return C.i7(a)},
+"+length":0,
+t:function(a,b){var z=C.i7(a)
+if(b>>>0!=b||J.J5(b,z))this.aq(a,b,z)
+return a[b]},
+"+[]:1:0":0,
+u:function(a,b,c){var z=C.i7(a)
+if(b>>>0!=b||J.J5(b,z))this.aq(a,b,z)
+a[b]=c},
+"+[]=:2:0":0,
+D6:function(a,b,c){var z,y
+z=a.subarray(b,this.Im(a,b,c,C.i7(a)))
+z.$dartCachedLength=z.length
+y=new Uint16Array(z)
+y.$dartCachedLength=y.length
+return y},
+Jk:function(a,b){return this.D6(a,b,null)},
+$asWO:function(){return[J.im]},
+$ascX:function(){return[J.im]},
+$isList:true,
+$isqC:true,
+$iscX:true,
+$isXj:true,
+"%":"Uint16Array"},nE:{"":"ZKG;",
+gB:function(a){return C.i7(a)},
+"+length":0,
+t:function(a,b){var z=C.i7(a)
+if(b>>>0!=b||J.J5(b,z))this.aq(a,b,z)
+return a[b]},
+"+[]:1:0":0,
+u:function(a,b,c){var z=C.i7(a)
+if(b>>>0!=b||J.J5(b,z))this.aq(a,b,z)
+a[b]=c},
+"+[]=:2:0":0,
+D6:function(a,b,c){var z,y
+z=a.subarray(b,this.Im(a,b,c,C.i7(a)))
+z.$dartCachedLength=z.length
+y=new Uint32Array(z)
+y.$dartCachedLength=y.length
+return y},
+Jk:function(a,b){return this.D6(a,b,null)},
+$asWO:function(){return[J.im]},
+$ascX:function(){return[J.im]},
+$isList:true,
+$isqC:true,
+$iscX:true,
+$isXj:true,
+"%":"Uint32Array"},zt:{"":"w6W;",
+gB:function(a){return C.i7(a)},
+"+length":0,
+t:function(a,b){var z=C.i7(a)
+if(b>>>0!=b||J.J5(b,z))this.aq(a,b,z)
+return a[b]},
+"+[]:1:0":0,
+u:function(a,b,c){var z=C.i7(a)
+if(b>>>0!=b||J.J5(b,z))this.aq(a,b,z)
+a[b]=c},
+"+[]=:2:0":0,
+D6:function(a,b,c){var z,y
+z=a.subarray(b,this.Im(a,b,c,C.i7(a)))
+z.$dartCachedLength=z.length
+y=new Uint8ClampedArray(z)
+y.$dartCachedLength=y.length
+return y},
+Jk:function(a,b){return this.D6(a,b,null)},
+$asWO:function(){return[J.im]},
+$ascX:function(){return[J.im]},
+$isList:true,
+$isqC:true,
+$iscX:true,
+$isXj:true,
+"%":"CanvasPixelArray|Uint8ClampedArray"},F0:{"":"z9g;",
+gB:function(a){return C.i7(a)},
+"+length":0,
+t:function(a,b){var z=C.i7(a)
+if(b>>>0!=b||J.J5(b,z))this.aq(a,b,z)
+return a[b]},
+"+[]:1:0":0,
+u:function(a,b,c){var z=C.i7(a)
+if(b>>>0!=b||J.J5(b,z))this.aq(a,b,z)
+a[b]=c},
+"+[]=:2:0":0,
+D6:function(a,b,c){var z,y
+z=a.subarray(b,this.Im(a,b,c,C.i7(a)))
+z.$dartCachedLength=z.length
+y=new Uint8Array(z)
+y.$dartCachedLength=y.length
+return y},
+Jk:function(a,b){return this.D6(a,b,null)},
+$asWO:function(){return[J.im]},
+$ascX:function(){return[J.im]},
+$isList:true,
+$isqC:true,
+$iscX:true,
+$isXj:true,
+"%":";Uint8Array"},xG:{"":"AS+lD;",$isList:true,$asWO:null,$isqC:true,$iscX:true,$ascX:null},Vj:{"":"xG+SU;",$asWO:null,$ascX:null},VW:{"":"AS+lD;",$isList:true,$asWO:null,$isqC:true,$iscX:true,$ascX:null},RK:{"":"VW+SU;",$asWO:null,$ascX:null},DH:{"":"AS+lD;",$isList:true,$asWO:null,$isqC:true,$iscX:true,$ascX:null},ZK:{"":"DH+SU;",$asWO:null,$ascX:null},Th:{"":"AS+lD;",$isList:true,$asWO:null,$isqC:true,$iscX:true,$ascX:null},Vju:{"":"Th+SU;",$asWO:null,$ascX:null},KB:{"":"AS+lD;",$isList:true,$asWO:null,$isqC:true,$iscX:true,$ascX:null},RKu:{"":"KB+SU;",$asWO:null,$ascX:null},xGn:{"":"AS+lD;",$isList:true,$asWO:null,$isqC:true,$iscX:true,$ascX:null},TkQ:{"":"xGn+SU;",$asWO:null,$ascX:null},VWk:{"":"AS+lD;",$isList:true,$asWO:null,$isqC:true,$iscX:true,$ascX:null},ZKG:{"":"VWk+SU;",$asWO:null,$ascX:null},DHb:{"":"AS+lD;",$isList:true,$asWO:null,$isqC:true,$iscX:true,$ascX:null},w6W:{"":"DHb+SU;",$asWO:null,$ascX:null},Hna:{"":"AS+lD;",$isList:true,$asWO:null,$isqC:true,$iscX:true,$ascX:null},z9g:{"":"Hna+SU;",$asWO:null,$ascX:null},G8:{"":"AS;",$isList:true,
+$asWO:function(){return[J.im]},
+$isqC:true,
+$iscX:true,
+$ascX:function(){return[J.im]},
+$isXj:true,
+static:{"":"tn",}},UZ:{"":"AS;",$isList:true,
+$asWO:function(){return[J.im]},
+$isqC:true,
+$iscX:true,
+$ascX:function(){return[J.im]},
+$isXj:true,
+static:{"":"U9",}}}],["disassembly_entry_element","package:observatory/src/observatory_elements/disassembly_entry.dart",,E,{Fv:{"":["WZ;FT%-,VJ,Ai,tH-,VJ,Ai,VJ,Ai,ZI,uN,z3,TQ,Vk,Ye,mT,KM-",null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,function(){return[C.nJ]}],
+gNI:function(a){return a.FT
+"37,38,39"},
+"+instruction":1,
+sNI:function(a,b){a.FT=this.pD(a,C.eJ,a.FT,b)
+"40,31,37,38"},
+"+instruction=":1,
+"@":function(){return[C.Vy]},
+static:{AH:function(a){var z,y,x,w,v,u
+z=H.B7([],P.L5(null,null,null,null,null))
+z=R.Jk(z)
+y=$.Nd()
+x=P.Py(null,null,null,J.O,W.I0)
+w=J.O
+v=W.cv
+u=new V.br(P.Py(null,null,null,w,v),null,null)
+H.VM(u,[w,v])
+a.FT=z
+a.Ye=y
+a.mT=x
+a.KM=u
+C.Tl.ZL(a)
+C.Tl.FH(a)
+return a
+"13"},"+new DisassemblyEntryElement$created:0:0":1}},"+DisassemblyEntryElement": [83],WZ:{"":"uL+Pi;",$isd3:true}}],["error_view_element","package:observatory/src/observatory_elements/error_view.dart",,F,{I3:{"":["pv;Py%-,hO%-,VJ,Ai,tH-,VJ,Ai,VJ,Ai,ZI,uN,z3,TQ,Vk,Ye,mT,KM-",null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,function(){return[C.nJ]}],
+gkc:function(a){return a.Py
+"8,38,39"},
+"+error":1,
+skc:function(a,b){a.Py=this.pD(a,C.YU,a.Py,b)
+"40,31,8,38"},
+"+error=":1,
+gVB:function(a){return a.hO
+"40,38,39"},
+"+error_obj":1,
+sVB:function(a,b){a.hO=this.pD(a,C.Yn,a.hO,b)
+"40,31,40,38"},
+"+error_obj=":1,
+"@":function(){return[C.uW]},
+static:{TW:function(a){var z,y,x,w,v
+z=$.Nd()
+y=P.Py(null,null,null,J.O,W.I0)
+x=J.O
+w=W.cv
+v=new V.br(P.Py(null,null,null,x,w),null,null)
+H.VM(v,[x,w])
+a.Py=""
+a.Ye=z
+a.mT=y
+a.KM=v
+C.OD.ZL(a)
+C.OD.FH(a)
+return a
+"14"},"+new ErrorViewElement$created:0:0":1}},"+ErrorViewElement": [84],pv:{"":"uL+Pi;",$isd3:true}}],["field_ref_element","package:observatory/src/observatory_elements/field_ref.dart",,D,{qr:{"":["Vfx;Lf%-,VJ,Ai,tH-,VJ,Ai,VJ,Ai,ZI,uN,z3,TQ,Vk,Ye,mT,KM-",null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,function(){return[C.nJ]}],
+gt0:function(a){return a.Lf
+"37,38,39"},
+"+field":1,
+st0:function(a,b){a.Lf=this.pD(a,C.WQ,a.Lf,b)
+"40,31,37,38"},
+"+field=":1,
+"@":function(){return[C.ht]},
+static:{ip:function(a){var z,y,x,w,v
+z=$.Nd()
+y=P.Py(null,null,null,J.O,W.I0)
+x=J.O
+w=W.cv
+v=new V.br(P.Py(null,null,null,x,w),null,null)
+H.VM(v,[x,w])
+a.Ye=z
+a.mT=y
+a.KM=v
+C.WR.ZL(a)
+C.WR.FH(a)
+return a
+"15"},"+new FieldRefElement$created:0:0":1}},"+FieldRefElement": [85],Vfx:{"":"uL+Pi;",$isd3:true}}],["field_view_element","package:observatory/src/observatory_elements/field_view.dart",,A,{Gk:{"":["Dsd;vt%-,VJ,Ai,tH-,VJ,Ai,VJ,Ai,ZI,uN,z3,TQ,Vk,Ye,mT,KM-",null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,function(){return[C.nJ]}],
+gt0:function(a){return a.vt
+"37,38,39"},
+"+field":1,
+st0:function(a,b){a.vt=this.pD(a,C.WQ,a.vt,b)
+"40,31,37,38"},
+"+field=":1,
+"@":function(){return[C.Tq]},
+static:{cY:function(a){var z,y,x,w,v
+z=$.Nd()
+y=P.Py(null,null,null,J.O,W.I0)
+x=J.O
+w=W.cv
+v=new V.br(P.Py(null,null,null,x,w),null,null)
+H.VM(v,[x,w])
+a.Ye=z
+a.mT=y
+a.KM=v
+C.lS.ZL(a)
+C.lS.FH(a)
+return a
+"16"},"+new FieldViewElement$created:0:0":1}},"+FieldViewElement": [86],Dsd:{"":"uL+Pi;",$isd3:true}}],["function_view_element","package:observatory/src/observatory_elements/function_view.dart",,N,{Ds:{"":["tuj;ql%-,VJ,Ai,tH-,VJ,Ai,VJ,Ai,ZI,uN,z3,TQ,Vk,Ye,mT,KM-",null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,function(){return[C.nJ]}],
+gMj:function(a){return a.ql
+"37,38,39"},
+"+function":1,
+sMj:function(a,b){a.ql=this.pD(a,C.nf,a.ql,b)
+"40,31,37,38"},
+"+function=":1,
+"@":function(){return[C.Uc]},
+static:{p7:function(a){var z,y,x,w,v
+z=$.Nd()
+y=P.Py(null,null,null,J.O,W.I0)
+x=J.O
+w=W.cv
+v=new V.br(P.Py(null,null,null,x,w),null,null)
+H.VM(v,[x,w])
+a.Ye=z
+a.mT=y
+a.KM=v
+C.PJ.ZL(a)
+C.PJ.FH(a)
+return a
+"17"},"+new FunctionViewElement$created:0:0":1}},"+FunctionViewElement": [87],tuj:{"":"uL+Pi;",$isd3:true}}],["html_common","dart:html_common",,P,{jD:function(a){return P.Wu(a.getTime(),!0)},bL:function(a){var z,y
+z=[]
+y=new P.Tm(new P.aI([],z),new P.rG(z),new P.yh(z)).call$1(a)
+new P.wO().call$0()
+return y},o7:function(a,b){var z=[]
+return new P.xL(b,new P.CA([],z),new P.YL(z),new P.KC(z)).call$1(a)},dg:function(){if($.L4==null)$.L4=J.Vw(window.navigator.userAgent,"Opera",0)
+return $.L4},F7:function(){if($.PN==null)$.PN=P.dg()!==!0&&J.Vw(window.navigator.userAgent,"WebKit",0)
+return $.PN},aI:{"":"Tp;b,c",
+call$1:function(a){var z,y,x,w
+z=this.b
+y=z.length
+for(x=0;x<y;++x){w=z[x]
+if(w==null?a==null:w===a)return x}z.push(a)
+this.c.push(null)
+return y},
+"+call:1:0":0,
+$isEH:true,
+$is_HB:true,
+$is_Dv:true},rG:{"":"Tp;d",
+call$1:function(a){var z=this.d
+if(a>>>0!==a||a>=z.length)throw H.e(z,a)
+return z[a]},
+"+call:1:0":0,
+$isEH:true,
+$is_HB:true,
+$is_Dv:true},yh:{"":"Tp;e",
+call$2:function(a,b){var z=this.e
+if(a>>>0!==a||a>=z.length)throw H.e(z,a)
+z[a]=b},
+"+call:2:0":0,
+$isEH:true,
+$is_bh:true},wO:{"":"Tp;",
+call$0:function(){},
+"+call:0:0":0,
+$isEH:true,
+$is_X0:true},Tm:{"":"Tp;f,g,h",
+call$1:function(a){var z,y,x,w,v,u,t
+z={}
+if(a==null)return a
+if(typeof a==="boolean")return a
+if(typeof a==="number")return a
+if(typeof a==="string")return a
+y=J.x(a)
+if(typeof a==="object"&&a!==null&&!!y.$isiP)return new Date(a.rq)
+if(typeof a==="object"&&a!==null&&!!y.$iscT)throw H.b(P.SY("structured clone of RegExp"))
+if(typeof a==="object"&&a!==null&&!!y.$isT5)return a
+if(typeof a==="object"&&a!==null&&!!y.$isAz)return a
+if(typeof a==="object"&&a!==null&&!!y.$isSg)return a
+if(typeof a==="object"&&a!==null&&!!y.$isI2)return a
+if(typeof a==="object"&&a!==null&&!!y.$isAS)return a
+if(typeof a==="object"&&a!==null&&!!y.$isL8){x=this.f.call$1(a)
+z.a=this.g.call$1(x)
+w=z.a
+if(w!=null)return w
+z.a={}
+this.h.call$2(x,z.a)
+y.aN(a,new P.rz(z,this))
+return z.a}if(typeof a==="object"&&a!==null&&(a.constructor===Array||!!y.$isList)){v=y.gB(a)
+x=this.f.call$1(a)
+u=this.g.call$1(x)
+if(u!=null){if(!0===u){u=new Array(v)
+this.h.call$2(x,u)}return u}u=new Array(v)
+this.h.call$2(x,u)
+if(typeof v!=="number")throw H.s(v)
+t=0
+for(;t<v;++t){z=this.call$1(y.t(a,t))
+if(t>=u.length)throw H.e(u,t)
+u[t]=z}return u}throw H.b(P.SY("structured clone of other type"))},
+"+call:1:0":0,
+$isEH:true,
+$is_HB:true,
+$is_Dv:true},rz:{"":"Tp;a,i",
+call$2:function(a,b){this.a.a[a]=this.i.call$1(b)},
+"+call:2:0":0,
+$isEH:true,
+$is_bh:true},CA:{"":"Tp;a,b",
+call$1:function(a){var z,y,x,w
+z=this.a
+y=z.length
+for(x=0;x<y;++x){w=z[x]
+if(w==null?a==null:w===a)return x}z.push(a)
+this.b.push(null)
+return y},
+"+call:1:0":0,
+$isEH:true,
+$is_HB:true,
+$is_Dv:true},YL:{"":"Tp;c",
+call$1:function(a){var z=this.c
+if(a>>>0!==a||a>=z.length)throw H.e(z,a)
+return z[a]},
+"+call:1:0":0,
+$isEH:true,
+$is_HB:true,
+$is_Dv:true},KC:{"":"Tp;d",
+call$2:function(a,b){var z=this.d
+if(a>>>0!==a||a>=z.length)throw H.e(z,a)
+z[a]=b},
+"+call:2:0":0,
+$isEH:true,
+$is_bh:true},xL:{"":"Tp;e,f,g,h",
+call$1:function(a){var z,y,x,w,v,u,t
+if(a==null)return a
+if(typeof a==="boolean")return a
+if(typeof a==="number")return a
+if(typeof a==="string")return a
+if(a instanceof Date)return P.jD(a)
+if(a instanceof RegExp)throw H.b(P.SY("structured clone of RegExp"))
+if(Object.getPrototypeOf(a)===Object.prototype){z=this.f.call$1(a)
+y=this.g.call$1(z)
+if(y!=null)return y
+y=H.B7([],P.L5(null,null,null,null,null))
+this.h.call$2(z,y)
+for(x=Object.keys(a),w=new H.a7(x,x.length,0,null),H.VM(w,[H.W8(x,"Q",0)]);w.G();){v=w.mD
+y.u(y,v,this.call$1(a[v]))}return y}if(a instanceof Array){z=this.f.call$1(a)
+y=this.g.call$1(z)
+if(y!=null)return y
+x=J.U6(a)
+u=x.gB(a)
+y=this.e?new Array(u):a
+this.h.call$2(z,y)
+if(typeof u!=="number")throw H.s(u)
+w=J.w1(y)
+t=0
+for(;t<u;++t)w.u(y,t,this.call$1(x.t(a,t)))
+return y}return a},
+"+call:1:0":0,
+$isEH:true,
+$is_HB:true,
+$is_Dv:true},As:{"":"a;",
+bu:function(a){var z=this.lF()
+return z.zV(z," ")},
+gA:function(a){var z=this.lF()
+z=new P.zQ(z,z.zN,null,null)
+H.VM(z,[null])
+z.zq=z.O2.H9
+return z},
+aN:function(a,b){var z=this.lF()
+z.aN(z,b)},
+zV:function(a,b){var z=this.lF()
+return z.zV(z,b)},
+ez:function(a,b){var z=this.lF()
+return H.K1(z,b,H.W8(z,"mW",0),null)},
+ev:function(a,b){var z,y
+z=this.lF()
+y=new H.U5(z,b)
+H.VM(y,[H.W8(z,"mW",0)])
+return y},
+Vr:function(a,b){var z=this.lF()
+return z.Vr(z,b)},
+gl0:function(a){return this.lF().X5===0},
+"+isEmpty":0,
+gor:function(a){return this.lF().X5!==0},
+"+isNotEmpty":0,
+gB:function(a){return this.lF().X5},
+"+length":0,
+tg:function(a,b){var z=this.lF()
+return z.tg(z,b)},
+Zt:function(a){var z=this.lF()
+return z.tg(z,a)?a:null},
+h:function(a,b){return this.OS(new P.GE(b))},
+Rz:function(a,b){var z,y
+if(typeof b!=="string")return!1
+z=this.lF()
+y=z.Rz(z,b)
+this.p5(z)
+return y},
+grZ:function(a){var z=this.lF().lX
+if(z==null)H.vh(new P.lj("No elements"))
+return z.gGc()},
+tt:function(a,b){var z=this.lF()
+return z.tt(z,b)},
+br:function(a){return this.tt(a,!0)},
+eR:function(a,b){var z=this.lF()
+return H.ke(z,b,H.W8(z,"mW",0))},
+Zv:function(a,b){var z=this.lF()
+return z.Zv(z,b)},
+OS:function(a){var z,y
+z=this.lF()
+y=a.call$1(z)
+this.p5(z)
+return y},
+$isqC:true,
+$iscX:true,
+$ascX:function(){return[J.O]}},GE:{"":"Tp;a",
+call$1:function(a){return J.bi(a,this.a)},
+"+call:1:0":0,
+$isEH:true,
+$is_HB:true,
+$is_Dv:true}}],["instance_ref_element","package:observatory/src/observatory_elements/instance_ref.dart",,B,{pR:{"":["Vct;iK%-,VJ,Ai,tH-,VJ,Ai,VJ,Ai,ZI,uN,z3,TQ,Vk,Ye,mT,KM-",null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,function(){return[C.nJ]}],
+ghf:function(a){return a.iK
+"37,38,39"},
+"+instance":1,
+shf:function(a,b){a.iK=this.pD(a,C.fn,a.iK,b)
+"40,31,37,38"},
+"+instance=":1,
+"@":function(){return[C.ay]},
+static:{lu:function(a){var z,y,x,w,v
+z=$.Nd()
+y=P.Py(null,null,null,J.O,W.I0)
+x=J.O
+w=W.cv
+v=new V.br(P.Py(null,null,null,x,w),null,null)
+H.VM(v,[x,w])
+a.Ye=z
+a.mT=y
+a.KM=v
+C.cp.ZL(a)
+C.cp.FH(a)
+return a
+"18"},"+new InstanceRefElement$created:0:0":1}},"+InstanceRefElement": [88],Vct:{"":"uL+Pi;",$isd3:true}}],["instance_view_element","package:observatory/src/observatory_elements/instance_view.dart",,Z,{hx:{"":["D13;Xh%-,VJ,Ai,tH-,VJ,Ai,VJ,Ai,ZI,uN,z3,TQ,Vk,Ye,mT,KM-",null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,function(){return[C.nJ]}],
+ghf:function(a){return a.Xh
+"37,38,39"},
+"+instance":1,
+shf:function(a,b){a.Xh=this.pD(a,C.fn,a.Xh,b)
+"40,31,37,38"},
+"+instance=":1,
+"@":function(){return[C.ql]},
+static:{HC:function(a){var z,y,x,w,v
+z=$.Nd()
+y=P.Py(null,null,null,J.O,W.I0)
+x=J.O
+w=W.cv
+v=new V.br(P.Py(null,null,null,x,w),null,null)
+H.VM(v,[x,w])
+a.Ye=z
+a.mT=y
+a.KM=v
+C.yK.ZL(a)
+C.yK.FH(a)
+return a
+"19"},"+new InstanceViewElement$created:0:0":1}},"+InstanceViewElement": [89],D13:{"":"uL+Pi;",$isd3:true}}],["isolate_list_element","package:observatory/src/observatory_elements/isolate_list.dart",,L,{u7:{"":["uL;tH-,VJ,Ai,VJ,Ai,ZI,uN,z3,TQ,Vk,Ye,mT,KM-",null,null,null,null,null,null,null,null,null,null,null,null,function(){return[C.nJ]}],
+"@":function(){return[C.jF]},
+static:{Tt:function(a){var z,y,x,w,v
+z=$.Nd()
+y=P.Py(null,null,null,J.O,W.I0)
+x=J.O
+w=W.cv
+v=new V.br(P.Py(null,null,null,x,w),null,null)
+H.VM(v,[x,w])
+a.Ye=z
+a.mT=y
+a.KM=v
+C.Dh.ZL(a)
+C.Dh.FH(a)
+return a
+"20"},"+new IsolateListElement$created:0:0":1}},"+IsolateListElement": [27]}],["isolate_summary_element","package:observatory/src/observatory_elements/isolate_summary.dart",,D,{St:{"":["WZq;Pw%-,i0%-,VJ,Ai,tH-,VJ,Ai,VJ,Ai,ZI,uN,z3,TQ,Vk,Ye,mT,KM-",null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,function(){return[C.nJ]}],
+gF1:function(a){return a.Pw
+"30,38,39"},
+"+isolate":1,
+sF1:function(a,b){a.Pw=this.pD(a,C.Y2,a.Pw,b)
+"40,31,30,38"},
+"+isolate=":1,
+goc:function(a){return a.i0
+"8,38,39"},
+"+name":1,
+soc:function(a,b){a.i0=this.pD(a,C.YS,a.i0,b)
+"40,31,8,38"},
+"+name=":1,
+"@":function(){return[C.aM]},
+static:{N5:function(a){var z,y,x,w,v
+z=$.Nd()
+y=P.Py(null,null,null,J.O,W.I0)
+x=J.O
+w=W.cv
+v=new V.br(P.Py(null,null,null,x,w),null,null)
+H.VM(v,[x,w])
+a.i0=""
+a.Ye=z
+a.mT=y
+a.KM=v
+C.nM.ZL(a)
+C.nM.FH(a)
+return a
+"21"},"+new IsolateSummaryElement$created:0:0":1}},"+IsolateSummaryElement": [90],WZq:{"":"uL+Pi;",$isd3:true}}],["json_view_element","package:observatory/src/observatory_elements/json_view.dart",,Z,{vj:{"":["pva;eb%-,kf%-,VJ,Ai,tH-,VJ,Ai,VJ,Ai,ZI,uN,z3,TQ,Vk,Ye,mT,KM-",null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,function(){return[C.nJ]}],
+gTn:function(a){return a.eb
+"40,38,39"},
+"+json":1,
+sTn:function(a,b){a.eb=this.pD(a,C.Gd,a.eb,b)
+"40,31,40,38"},
+"+json=":1,
+i4:function(a){Z.uL.prototype.i4.call(this,a)
+a.kf=0
+"40"},
+"+enteredView:0:0":1,
+yC:function(a,b){this.pD(a,C.eR,"a","b")
+"40,91,40"},
+"+jsonChanged:1:0":1,
+gE8:function(a){return J.AG(a.eb)
+"8"},
+"+primitiveString":1,
+gmm:function(a){var z,y
+z=a.eb
+y=J.x(z)
+if(typeof z==="object"&&z!==null&&!!y.$isL8)return"Map"
+else if(typeof z==="object"&&z!==null&&(z.constructor===Array||!!y.$isList))return"List"
+return"Primitive"
+"8"},
+"+valueType":1,
+gFe:function(a){var z=a.kf
+a.kf=J.WB(z,1)
+return z
+"30"},
+"+counter":1,
+gqC:function(a){var z,y
+z=a.eb
+y=J.x(z)
+if(typeof z==="object"&&z!==null&&(z.constructor===Array||!!y.$isList))return z
+return[]
+"70"},
+"+list":1,
+gvc:function(a){var z,y
+z=a.eb
+y=J.RE(z)
+if(typeof z==="object"&&z!==null&&!!y.$isL8)return J.qA(y.gvc(z))
+return[]
+"70"},
+"+keys":1,
+r6:function(a,b){return J.UQ(a.eb,b)
+"40,78,8"},
+"+value:1:0":1,
+gP:function(a){return new P.C7(this,Z.vj.prototype.r6,a,"r6")},
+"@":function(){return[C.HN]},
+static:{un:function(a){var z,y,x,w,v
+z=$.Nd()
+y=P.Py(null,null,null,J.O,W.I0)
+x=J.O
+w=W.cv
+v=new V.br(P.Py(null,null,null,x,w),null,null)
+H.VM(v,[x,w])
+a.eb=null
+a.kf=0
+a.Ye=z
+a.mT=y
+a.KM=v
+C.GB.ZL(a)
+C.GB.FH(a)
+return a
+"22"},"+new JsonViewElement$created:0:0":1}},"+JsonViewElement": [92],pva:{"":"uL+Pi;",$isd3:true}}],["library_view_element","package:observatory/src/observatory_elements/library_view.dart",,M,{CX:{"":["cda;iI%-,VJ,Ai,tH-,VJ,Ai,VJ,Ai,ZI,uN,z3,TQ,Vk,Ye,mT,KM-",null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,function(){return[C.nJ]}],
+gtD:function(a){return a.iI
+"37,38,39"},
+"+library":1,
+stD:function(a,b){a.iI=this.pD(a,C.EV,a.iI,b)
+"40,31,37,38"},
+"+library=":1,
+"@":function(){return[C.Oy]},
+static:{SP:function(a){var z,y,x,w,v,u
+z=H.B7([],P.L5(null,null,null,null,null))
+z=R.Jk(z)
+y=$.Nd()
+x=P.Py(null,null,null,J.O,W.I0)
+w=J.O
+v=W.cv
+u=new V.br(P.Py(null,null,null,w,v),null,null)
+H.VM(u,[w,v])
+a.iI=z
+a.Ye=y
+a.mT=x
+a.KM=u
+C.MG.ZL(a)
+C.MG.FH(a)
+return a
+"23"},"+new LibraryViewElement$created:0:0":1}},"+LibraryViewElement": [93],cda:{"":"uL+Pi;",$isd3:true}}],["logging","package:logging/logging.dart",,N,{TJ:{"":"a;oc>,eT>,yz,Cj>,wd,Gs",
+gB8:function(){var z,y,x
+z=this.eT
+y=z==null||J.xC(J.DA(z),"")
+x=this.oc
+return y?x:z.gB8()+"."+x},
+gOR:function(){if($.RL){var z=this.eT
+if(z!=null)return z.gOR()}return $.Y4},
+mL:function(a){return a.P>=this.gOR().P},
+Y6:function(a,b,c,d){var z,y,x,w,v
+if(a.P>=this.gOR().P){z=this.gB8()
+y=P.Xs()
+x=$.xO
+$.xO=x+1
+w=new N.HV(a,b,z,y,x,c,d)
+if($.RL)for(v=this;v!=null;){z=J.RE(v)
+z.od(v,w)
+v=z.geT(v)}else J.EY(N.Jx(""),w)}},
+X2:function(a,b,c){return this.Y6(C.VZ,a,b,c)},
+x9:function(a){return this.X2(a,null,null)},
+yl:function(a,b,c){return this.Y6(C.R5,a,b,c)},
+J4:function(a){return this.yl(a,null,null)},
+ZG:function(a,b,c){return this.Y6(C.IF,a,b,c)},
+To:function(a){return this.ZG(a,null,null)},
+cI:function(a,b,c){return this.Y6(C.UP,a,b,c)},
+A3:function(a){return this.cI(a,null,null)},
+od:function(a,b){},
+QL:function(a,b,c){var z=this.eT
+if(z!=null){z=J.Tr(z)
+z.u(z,this.oc,this)}},
+$isTJ:true,
+static:{"":"Uj",Jx:function(a){return $.Iu().to(a,new N.dG(a))},hS:function(a){var z,y,x
+if(C.xB.nC(a,"."))throw H.b(new P.AT("name shouldn't start with a '.'"))
+z=C.xB.cn(a,".")
+if(z===-1){y=a!==""?N.Jx(""):null
+x=a}else{y=N.Jx(C.xB.JT(a,0,z))
+x=C.xB.yn(a,z+1)}return N.Ww(x,y,P.L5(null,null,null,J.O,N.TJ))},Ww:function(a,b,c){var z=new F.Oh(c)
+H.VM(z,[null,null])
+z=new N.TJ(a,b,null,c,z,null)
+z.QL(a,b,c)
+return z}}},dG:{"":"Tp;a",
+call$0:function(){return N.hS(this.a)},
+"+call:0:0":0,
+$isEH:true,
+$is_X0:true},Ng:{"":"a;oc>,P>",
+r6:function(a,b){return this.P.call$1(b)},
+n:function(a,b){var z
+if(b==null)return!1
+z=J.x(b)
+return typeof b==="object"&&b!==null&&!!z.$isNg&&this.P===b.P},
+C:function(a,b){var z=J.Vm(b)
+if(typeof z!=="number")throw H.s(z)
+return this.P<z},
+E:function(a,b){var z=J.Vm(b)
+if(typeof z!=="number")throw H.s(z)
+return this.P<=z},
+D:function(a,b){var z=J.Vm(b)
+if(typeof z!=="number")throw H.s(z)
+return this.P>z},
+F:function(a,b){var z=J.Vm(b)
+if(typeof z!=="number")throw H.s(z)
+return this.P>=z},
+iM:function(a,b){var z=J.Vm(b)
+if(typeof z!=="number")throw H.s(z)
+return this.P-z},
+giO:function(a){return this.P},
+bu:function(a){return this.oc},
+$isNg:true,
+static:{"":"bR,tm,EL,X8,IQ,Fn,Eb,AN,JY,bo",}},HV:{"":"a;OR<,G1>,iJ,Fl,O0,kc>,I4<",
+bu:function(a){return"["+this.OR.oc+"] "+this.iJ+": "+this.G1},
+static:{"":"xO",}}}],["message_viewer_element","package:observatory/src/observatory_elements/message_viewer.dart",,L,{Nh:{"":["uL;XB%-,tH-,VJ,Ai,VJ,Ai,ZI,uN,z3,TQ,Vk,Ye,mT,KM-",null,null,null,null,null,null,null,null,null,null,null,null,null,function(){return[C.nJ]}],
+gG1:function(a){return a.XB
+"37,39"},
+"+message":1,
+sG1:function(a,b){a.XB=b
+this.pD(a,C.KY,"",this.gQW(a))
+this.pD(a,C.wt,[],this.glc(a))
+"40,94,37,39"},
+"+message=":1,
+gQW:function(a){var z=a.XB
+if(z==null||J.UQ(z,"type")==null)return"Error"
+return J.UQ(a.XB,"type")
+"8"},
+"+messageType":1,
+glc:function(a){var z=a.XB
+if(z==null||J.UQ(z,"members")==null)return[]
+return J.UQ(a.XB,"members")
+"95"},
+"+members":1,
+"@":function(){return[C.c0]},
+static:{rJ:function(a){var z,y,x,w,v
+z=$.Nd()
+y=P.Py(null,null,null,J.O,W.I0)
+x=J.O
+w=W.cv
+v=new V.br(P.Py(null,null,null,x,w),null,null)
+H.VM(v,[x,w])
+a.Ye=z
+a.mT=y
+a.KM=v
+C.Wp.ZL(a)
+C.Wp.FH(a)
+return a
+"24"},"+new MessageViewerElement$created:0:0":1}},"+MessageViewerElement": [27]}],["metadata","../../../../../../../../../dart/dart-sdk/lib/html/html_common/metadata.dart",,B,{fA:{"":"a;Kr,Jt",static:{"":"Xd,en,yS,PZ,xa",}},tz:{"":"a;"},jR:{"":"a;oc>"},PO:{"":"a;"},c5:{"":"a;"}}],["navigation_bar_element","package:observatory/src/observatory_elements/navigation_bar.dart",,Q,{ih:{"":["uL;tH-,VJ,Ai,VJ,Ai,ZI,uN,z3,TQ,Vk,Ye,mT,KM-",null,null,null,null,null,null,null,null,null,null,null,null,function(){return[C.nJ]}],
+"@":function(){return[C.KG]},
+static:{BW:function(a){var z,y,x,w,v
+z=$.Nd()
+y=P.Py(null,null,null,J.O,W.I0)
+x=J.O
+w=W.cv
+v=new V.br(P.Py(null,null,null,x,w),null,null)
+H.VM(v,[x,w])
+a.Ye=z
+a.mT=y
+a.KM=v
+C.Xg.ZL(a)
+C.Xg.FH(a)
+return a
+"25"},"+new NavigationBarElement$created:0:0":1}},"+NavigationBarElement": [27]}],["observatory","package:observatory/observatory.dart",,L,{mL:{"":["Pi;Z6<-,lw<-,nI<-,VJ,Ai",function(){return[C.mI]},function(){return[C.mI]},function(){return[C.mI]},null,null],
+Ey:function(){var z,y,x
+z=this.Z6
+z.sJR(this)
+y=this.lw
+y.sJR(this)
+x=this.nI
+x.sJR(this)
+y.se0(x.gVY())
+z.kI()},
+AQ:function(a){return J.UQ(this.nI.gi2(),a)},
+hq:function(){this.Ey()},
+US:function(){this.Ey()},
+static:{WS:function(){var z,y,x
+z=P.L5(null,null,null,null,null)
+y=R.Jk([])
+y=new L.Rb(z,0,null,null,"http://127.0.0.1:8181",y,null,null)
+z=C.ph.aM(window)
+x=y.gT9()
+x=new W.Ov(0,z.uv,z.Ph,W.aF(x),z.Sg)
+H.VM(x,[H.W8(z,"RO",0)])
+x.Zz()
+x=P.L5(null,null,null,J.im,L.bv)
+z=R.Jk(x)
+z=new L.mL(new L.dZ(null,"",null,null,null),y,new L.pt(null,z,null,null),null,null)
+z.hq()
+return z},"+new ObservatoryApplication$devtools:0:0":0,AK:function(){var z,y
+z=R.Jk([])
+y=P.L5(null,null,null,J.im,L.bv)
+y=R.Jk(y)
+y=new L.mL(new L.dZ(null,"",null,null,null),new L.jI(null,null,"http://127.0.0.1:8181",z,null,null),new L.pt(null,y,null,null),null,null)
+y.US()
+return y}}},bv:{"":["Pi;nk,SS,XR<-,VJ,Ai",null,null,function(){return[C.mI]},null,null],
+gjO:function(a){return this.nk
+"30,38,43"},
+"+id":1,
+sjO:function(a,b){this.nk=F.Wi(this,C.EN,this.nk,b)
+"40,31,30,38"},
+"+id=":1,
+goc:function(a){return this.SS
+"8,38,43"},
+"+name":1,
+soc:function(a,b){this.SS=F.Wi(this,C.YS,this.SS,b)
+"40,31,8,38"},
+"+name=":1,
+bu:function(a){return H.d(this.nk)+" "+H.d(this.SS)},
+$isbv:true},pt:{"":["Pi;JR?,i2<-,VJ,Ai",null,function(){return[C.mI]},null,null],
+yi:function(){J.kH(this.JR.lw.gn2(),new L.dY(this))},
+gVY:function(){return new P.Ip(this,L.pt.prototype.yi,null,"yi")},
+AQ:function(a){var z,y,x,w
+z=this.i2
+y=J.U6(z)
+x=y.t(z,a)
+if(x==null){w=P.L5(null,null,null,J.O,L.Pf)
+w=R.Jk(w)
+x=new L.bv(a,"",w,null,null)
+y.u(z,a,x)}return x},
+LZ:function(a){var z=[]
+J.kH(this.i2,new L.vY(a,z))
+H.bQ(z,new L.dS(this))
+J.kH(a,new L.ZW(this))},
+static:{AC:function(a,b){return J.ja(b,new L.Zd(a))}}},Zd:{"":"Tp;a",
+call$1:function(a){return J.xC(J.UQ(a,"id"),this.a)},
+"+call:1:0":0,
+$isEH:true,
+$is_HB:true,
+$is_Dv:true},dY:{"":"Tp;a",
+call$1:function(a){var z=J.U6(a)
+if(J.xC(z.t(a,"type"),"IsolateList"))this.a.LZ(z.t(a,"members"))},
+"+call:1:0":0,
+$isEH:true,
+$is_HB:true,
+$is_Dv:true},vY:{"":"Tp;a,b",
+call$2:function(a,b){if(L.AC(a,this.a)!==!0)this.b.push(a)},
+"+call:2:0":0,
+$isEH:true,
+$is_bh:true},dS:{"":"Tp;c",
+call$1:function(a){J.V1(this.c.i2,a)},
+"+call:1:0":0,
+$isEH:true,
+$is_HB:true,
+$is_Dv:true},ZW:{"":"Tp;d",
+call$1:function(a){var z,y,x,w,v
+z=J.U6(a)
+y=z.t(a,"id")
+x=z.t(a,"name")
+z=this.d.i2
+w=J.U6(z)
+if(w.t(z,y)==null){v=P.L5(null,null,null,J.O,L.Pf)
+v=R.Jk(v)
+w.u(z,y,new L.bv(y,x,v,null,null))}else J.DF(w.t(z,y),x)},
+"+call:1:0":0,
+$isEH:true,
+$is_HB:true,
+$is_Dv:true},dZ:{"":"Pi;JR?,IT,Jj,VJ,Ai",
+gzd:function(){return this.IT
+"8,38,43"},
+"+currentHash":1,
+szd:function(a){this.IT=F.Wi(this,C.h1,this.IT,a)
+"40,31,8,38"},
+"+currentHash=":1,
+glD:function(){return this.Jj
+"96,38,43"},
+"+currentHashUri":1,
+slD:function(a){this.Jj=F.Wi(this,C.tv,this.Jj,a)
+"40,31,96,38"},
+"+currentHashUri=":1,
+kI:function(){var z,y
+z=C.PP.aM(window)
+y=new W.Ov(0,z.uv,z.Ph,W.aF(new L.Qe(this)),z.Sg)
+H.VM(y,[H.W8(z,"RO",0)])
+y.Zz()
+if(!this.S7())this.df()},
+vI:function(){var z,y,x,w,v
+z=$.oy()
+y=z.R4(z,this.IT)
+if(y==null)return
+z=y.oH
+x=z.input
+w=z.index
+v=z.index
+if(0>=z.length)throw H.e(z,0)
+z=J.q8(z[0])
+if(typeof z!=="number")throw H.s(z)
+return C.xB.JT(x,w,v+z)},
+gAT:function(){return J.xC(J.UQ(this.Jj.ghY().iY,"type"),"Script")},
+gDe:function(){return P.pE(J.UQ(this.Jj.ghY().iY,"name"),C.dy,!0)},
+R6:function(){var z,y
+z=this.vI()
+if(z==null)return 0
+y=z.split("/")
+if(2>=y.length)throw H.e(y,2)
+return H.BU(y[2],null,null)},
+S7:function(){var z=J.Co(C.ol.gmW(window))
+this.IT=F.Wi(this,C.h1,this.IT,z)
+if(J.xC(this.IT,"")||J.xC(this.IT,"#")){J.We(C.ol.gmW(window),"#/isolates/")
+return!0}return!1},
+df:function(){var z,y
+z=J.Co(C.ol.gmW(window))
+this.IT=F.Wi(this,C.h1,this.IT,z)
+y=J.ZZ(this.IT,1)
+z=P.r6($.cO().ej(y))
+this.Jj=F.Wi(this,C.tv,this.Jj,z)
+this.JR.lw.ox(y)},
+PI:function(a){var z=this.R6()
+if(J.xC(z,0))return"#/isolates/"
+return"#/isolates/"+H.d(z)+"/"+H.d(a)
+"8,97,8,43"},
+"+currentIsolateRelativeLink:1:0":1,
+Ao:function(a){var z=this.R6()
+if(J.xC(z,0))return"#/isolates/"
+return"#/isolates/"+H.d(z)+"/objects/"+H.d(a)
+"8,98,30,43"},
+"+currentIsolateObjectLink:1:0":1,
+dL:function(a){var z=this.R6()
+if(J.xC(z,0))return"#/isolates/"
+return"#/isolates/"+H.d(z)+"/classes/"+H.d(a)
+"8,99,30,43"},
+"+currentIsolateClassLink:1:0":1,
+WW:function(a,b){var z=this.R6()
+if(J.xC(z,0))return"#/isolates/"
+return this.yX(z,a,b)
+"8,98,30,7,8,43"},
+"+currentIsolateScriptLink:2:0":1,
+r4:function(a,b){return"#/isolates/"+H.d(a)+"/"+H.d(b)
+"8,100,30,97,8,43"},
+"+relativeLink:2:0":1,
+Dd:function(a,b){return"#/isolates/"+H.d(a)+"/objects/"+H.d(b)
+"8,100,30,98,30,43"},
+"+objectLink:2:0":1,
+bD:function(a,b){return"#/isolates/"+H.d(a)+"/classes/"+H.d(b)
+"8,100,30,99,30,43"},
+"+classLink:2:0":1,
+yX:function(a,b,c){var z=P.jW(C.kg,c,!0)
+return"#/isolates/"+H.d(a)+"/objects/"+H.d(b)+"?type=Script&name="+z
+"8,100,30,98,30,7,8,43"},
+"+scriptLink:3:0":1,
+static:{"":"kx,K3D,qY",}},Qe:{"":"Tp;a",
+call$1:function(a){var z=this.a
+if(z.S7())return
+z.df()},
+"+call:1:0":0,
+$isEH:true,
+$is_HB:true,
+$is_Dv:true},Nu:{"":"Pi;JR?,e0?",
+pG:function(){return this.e0.call$0()},
+gEI:function(){return this.oJ
+"8,38,43"},
+"+prefix":1,
+sEI:function(a){this.oJ=F.Wi(this,C.qb,this.oJ,a)
+"40,31,8,38"},
+"+prefix=":1,
+gn2:function(){return this.vm
+"95,38,43"},
+"+responses":1,
+sn2:function(a){this.vm=F.Wi(this,C.wH,this.vm,a)
+"40,31,95,38"},
+"+responses=":1,
+Qn:function(a){var z,y
+z=C.lM.kV(a)
+y=J.x(z)
+if(typeof z==="object"&&z!==null&&!!y.$isL8)this.dq([z])
+else this.dq(z)},
+dq:function(a){var z=R.Jk(a)
+this.vm=F.Wi(this,C.wH,this.vm,z)
+if(this.e0!=null)this.pG()},
+AI:function(a){var z,y
+z=J.RE(a)
+y=H.d(z.gys(a))+" "+z.gpo(a)
+if(z.gys(a)===0)y="No service found. Did you run with --enable-vm-service ?"
+this.dq([H.B7(["type","RequestError","error",y],P.L5(null,null,null,null,null))])},
+ox:function(a){var z
+if(this.JR.Z6.gAT()){z=this.JR.Z6.gDe()
+this.iG(z,a).ml(new L.pF(this,z))}else this.ym(this,a).ml(new L.Ha(this)).OA(new L.nu(this))},
+iG:function(a,b){var z,y,x
+z=this.JR.Z6.R6()
+y=this.JR.nI.AQ(z)
+x=J.UQ(y.gXR(),a)
+if(x!=null)return P.Ab(x,null)
+return this.ym(this,b).ml(new L.be(a,y)).OA(new L.Pg(this))}},pF:{"":"Tp;a,b",
+call$1:function(a){var z=this.a
+if(a!=null)z.dq([H.B7(["type","Script","source",a],P.L5(null,null,null,null,null))])
+else z.dq([H.B7(["type","RequestError","error","Source for "+this.b+" could not be loaded."],P.L5(null,null,null,null,null))])},
+"+call:1:0":0,
+$isEH:true,
+$is_HB:true,
+$is_Dv:true},Ha:{"":"Tp;c",
+call$1:function(a){this.c.Qn(a)},
+"+call:1:0":0,
+$isEH:true,
+$is_HB:true,
+$is_Dv:true},nu:{"":"Tp;d",
+call$1:function(a){var z,y
+z=J.RE(a)
+y=this.d
+if(typeof a==="object"&&a!==null&&!!z.$isaE)y.AI(a.G1)
+else y.AI(z.gN(a))},
+"+call:1:0":0,
+$isEH:true,
+$is_HB:true,
+$is_Dv:true},be:{"":"Tp;a,b",
+call$1:function(a){var z=L.Sp(C.lM.kV(a))
+J.kW(this.b.gXR(),this.a,z)
+return z},
+"+call:1:0":0,
+$isEH:true,
+$is_HB:true,
+$is_Dv:true},Pg:{"":"Tp;c",
+call$1:function(a){this.c.AI(J.l2(a))
+return},
+"+call:1:0":0,
+$isEH:true,
+$is_HB:true,
+$is_Dv:true},jI:{"":"Nu;JR,e0,oJ,vm,VJ,Ai",
+ym:function(a,b){return W.It(J.WB(this.oJ,b),null,null)}},Rb:{"":"Nu;Hr,Oy,JR,e0,oJ,vm,VJ,Ai",
+Vc:function(a){var z,y,x,w,v
+z=J.RE(a)
+y=J.UQ(z.gRn(a),"id")
+x=J.UQ(z.gRn(a),"name")
+w=J.UQ(z.gRn(a),"data")
+if(!J.xC(x,"observatoryData"))return
+P.JS("Got reply "+H.d(y)+" "+H.d(w))
+z=this.Hr
+v=z.t(z,y)
+if(v!=null){z.Rz(z,y)
+P.JS("Completing "+H.d(y))
+J.Xf(v,w)}else P.JS("Could not find completer for "+H.d(y))},
+gT9:function(){return new H.Pm(this,L.Rb.prototype.Vc,null,"Vc")},
+ym:function(a,b){var z,y,x,w
+z=""+this.Oy
+y=H.B7([],P.L5(null,null,null,null,null))
+y.u(y,"id",z)
+y.u(y,"method","observatoryQuery")
+y.u(y,"query",b)
+this.Oy=this.Oy+1
+x=null
+w=new P.Zf(P.Dt(x))
+H.VM(w,[x])
+x=this.Hr
+x.u(x,z,w)
+J.Ih(W.uV(window.parent),C.lM.KP(y),"*")
+return w.MM}},Zw:{"":["Pi;Rd,n7,LA>-,Vg,VJ,Ai",null,null,function(){return[C.mI]},null,null,null],
+geV:function(){return this.Vg
+"8,38,43"},
+"+paddedLine":1,
+seV:function(a){var z=this.Vg
+if(this.gUV(this)&&!J.xC(z,a)){z=new T.qI(this,C.X9,z,a)
+z.$builtinTypeInfo=[null]
+this.SZ(this,z)}this.Vg=a
+"40,31,8,38"},
+"+paddedLine=":1,
+QQ:function(a,b,c){var z,y,x,w,v
+z=""+this.Rd
+this.Vg=F.Wi(this,C.X9,this.Vg,z)
+for(y=J.q8(this.Vg),z=this.n7;x=J.Wx(y),x.C(y,z);y=x.g(y,1)){w=" "+H.d(this.Vg)
+v=this.Vg
+if(this.gUV(this)&&!J.xC(v,w)){v=new T.qI(this,C.X9,v,w)
+v.$builtinTypeInfo=[null]
+this.SZ(this,v)}this.Vg=w}},
+static:{il:function(a,b,c){var z=new L.Zw(a,b,c,null,null,null)
+z.QQ(a,b,c)
+return z}}},Pf:{"":"Pi;WF,uM,ZQ,VJ,Ai",
+gfY:function(a){return this.WF
+"8,38,43"},
+"+kind":1,
+sfY:function(a,b){this.WF=F.Wi(this,C.fy,this.WF,b)
+"40,31,8,38"},
+"+kind=":1,
+gO3:function(a){return this.uM
+"8,38,43"},
+"+url":1,
+sO3:function(a,b){this.uM=F.Wi(this,C.Fh,this.uM,b)
+"40,31,8,38"},
+"+url=":1,
+gXJ:function(){return this.ZQ
+"101,38,43"},
+"+lines":1,
+sXJ:function(a){this.ZQ=F.Wi(this,C.Cv,this.ZQ,a)
+"40,31,101,38"},
+"+lines=":1,
+Cn:function(a){var z,y,x,w,v
+z=J.uH(a,"\n")
+y=(""+(z.length+1)).length
+for(x=0;x<z.length;x=w){w=x+1
+v=L.il(w,y,z[x])
+J.bi(this.ZQ,v)}},
+bu:function(a){return"ScriptSource"},
+EQ:function(a){var z,y
+z=J.U6(a)
+y=z.t(a,"kind")
+this.WF=F.Wi(this,C.fy,this.WF,y)
+y=z.t(a,"name")
+this.uM=F.Wi(this,C.Fh,this.uM,y)
+this.Cn(z.t(a,"source"))},
+$isPf:true,
+static:{Sp:function(a){var z=R.Jk([])
+z=new L.Pf("","",z,null,null)
+z.EQ(a)
+return z}}}}],["observatory_application_element","package:observatory/src/observatory_elements/observatory_application.dart",,V,{F1:{"":["waa;k5%-,VJ,Ai,tH-,VJ,Ai,VJ,Ai,ZI,uN,z3,TQ,Vk,Ye,mT,KM-",null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,function(){return[C.nJ]}],
+gzj:function(a){return a.k5
+"44,38,39"},
+"+devtools":1,
+szj:function(a,b){a.k5=this.pD(a,C.Na,a.k5,b)
+"40,31,44,38"},
+"+devtools=":1,
+ZB:function(a){var z
+if(a.k5===!0){z=L.WS()
+a.tH=this.pD(a,C.wh,a.tH,z)}else{z=L.AK()
+a.tH=this.pD(a,C.wh,a.tH,z)}"40"},
+"@":function(){return[C.bd]},
+static:{fv:function(a){var z,y,x,w,v
+z=$.Nd()
+y=P.Py(null,null,null,J.O,W.I0)
+x=J.O
+w=W.cv
+v=new V.br(P.Py(null,null,null,x,w),null,null)
+H.VM(v,[x,w])
+a.k5=!1
+a.Ye=z
+a.mT=y
+a.KM=v
+C.k0.ZL(a)
+C.k0.FH(a)
+C.k0.ZB(a)
+return a
+"26"},"+new ObservatoryApplicationElement$created:0:0":1}},"+ObservatoryApplicationElement": [102],waa:{"":"uL+Pi;",$isd3:true}}],["observatory_element","package:observatory/src/observatory_elements/observatory_element.dart",,Z,{uL:{"":["Nr;tH%-,VJ,Ai,VJ,Ai,ZI,uN,z3,TQ,Vk,Ye,mT,KM-",null,null,null,null,null,null,null,null,null,null,null,null,function(){return[C.nJ]}],
+i4:function(a){A.dM.prototype.i4.call(this,a)
+"40"},
+"+enteredView:0:0":1,
+Nz:function(a){A.dM.prototype.Nz.call(this,a)
+"40"},
+"+leftView:0:0":1,
+gQG:function(a){return a.tH
+"103,38,39"},
+"+app":1,
+sQG:function(a,b){a.tH=this.pD(a,C.wh,a.tH,b)
+"40,31,103,38"},
+"+app=":1,
+gpQ:function(a){return!0
+"44"},
+"+applyAuthorStyles":1,
+"@":function(){return[C.J0]},
+static:{Hx:function(a){var z,y,x,w,v
+z=$.Nd()
+y=P.Py(null,null,null,J.O,W.I0)
+x=J.O
+w=W.cv
+v=new V.br(P.Py(null,null,null,x,w),null,null)
+H.VM(v,[x,w])
+a.Ye=z
+a.mT=y
+a.KM=v
+C.mk.ZL(a)
+C.mk.FH(a)
+return a
+"27"},"+new ObservatoryElement$created:0:0":1}},"+ObservatoryElement": [104],Nr:{"":"ir+Pi;",$isd3:true}}],["observe.src.change_notifier","package:observe/src/change_notifier.dart",,O,{Pi:{"":"a;",
+gqh:function(a){var z,y
+if(a.VJ==null){z=this.gqw(a)
+a.VJ=P.bK(this.gl1(a),z,!0,null)}z=a.VJ
+z.toString
+y=new P.Ik(z)
+H.VM(y,[H.W8(z,"WV",0)])
+return y},
+w3:function(a){},
+gqw:function(a){return new H.YP(this,O.Pi.prototype.w3,a,"w3")},
+ni:function(a){a.VJ=null},
+gl1:function(a){return new H.YP(this,O.Pi.prototype.ni,a,"ni")},
+BN:function(a){var z,y,x
+z=a.Ai
+a.Ai=null
+y=a.VJ
+if(y!=null){x=y.iE
+x=x==null?y!=null:x!==y}else x=!1
+if(x&&z!=null){x=new P.Yp(z)
+H.VM(x,[T.yj])
+if(y.Gv>=4)H.vh(y.q7())
+y.Iv(x)
+return!0}return!1},
+gDx:function(a){return new H.YP(this,O.Pi.prototype.BN,a,"BN")},
+gUV:function(a){var z,y
+z=a.VJ
+if(z!=null){y=z.iE
+z=y==null?z!=null:y!==z}else z=!1
+return z},
+pD:function(a,b,c,d){return F.Wi(a,b,c,d)},
+SZ:function(a,b){var z,y
+z=a.VJ
+if(z!=null){y=z.iE
+z=y==null?z!=null:y!==z}else z=!1
+if(!z)return
+if(a.Ai==null){a.Ai=[]
+P.rb(this.gDx(a))}a.Ai.push(b)},
+$isd3:true}}],["observe.src.change_record","package:observe/src/change_record.dart",,T,{yj:{"":"a;",$isyj:true},qI:{"":"yj;WA<,oc>,jL>,zZ>",
+bu:function(a){return"#<PropertyChangeRecord "+H.d(this.oc)+" from: "+H.d(this.jL)+" to: "+H.d(this.zZ)+">"},
+$isqI:true}}],["observe.src.compound_path_observer","package:observe/src/compound_path_observer.dart",,Y,{J3:{"":"Pi;b9,kK,Sv,rk,YX,B6,VJ,Ai",
+kb:function(a){return this.rk.call$1(a)},
+gB:function(a){return this.b9.length},
+"+length":0,
+gP:function(a){return this.Sv
+"40,38"},
+"+value":1,
+r6:function(a,b){return this.gP(a).call$1(b)},
+wE:function(a){var z,y,x,w
+if(this.YX)return
+this.YX=!0
+z=this.geu()
+for(y=this.b9,x=new H.a7(y,y.length,0,null),H.VM(x,[H.W8(y,"Q",0)]),y=this.kK;x.G();){w=J.Ib(x.mD).w4(!1)
+w.dB=$.X3.cR(z)
+w.o7=P.VH(P.AY,$.X3)
+w.Bd=$.X3.Al(P.No)
+y.push(w)}this.CV()},
+TF:function(a){if(this.B6)return
+this.B6=!0
+P.rb(this.gMc())},
+geu:function(){return new H.Pm(this,Y.J3.prototype.TF,null,"TF")},
+CV:function(){var z,y
+this.B6=!1
+z=this.b9
+if(z.length===0)return
+z=new H.A8(z,new Y.E5())
+H.VM(z,[null,null])
+y=z.br(z)
+if(this.rk!=null)y=this.kb(y)
+this.Sv=F.Wi(this,C.ls,this.Sv,y)},
+gMc:function(){return new P.Ip(this,Y.J3.prototype.CV,null,"CV")},
+cO:function(a){var z,y,x
+z=this.b9
+if(z.length===0)return
+if(this.YX)for(y=this.kK,x=new H.a7(y,y.length,0,null),H.VM(x,[H.W8(y,"Q",0)]);x.G();)x.mD.ed()
+C.Nm.sB(z,0)
+C.Nm.sB(this.kK,0)
+this.Sv=null},
+w3:function(a){return this.wE(this)},
+gqw:function(a){return new H.YP(this,Y.J3.prototype.w3,a,"w3")},
+ni:function(a){return this.cO(this)},
+gl1:function(a){return new H.YP(this,Y.J3.prototype.ni,a,"ni")},
+$isJ3:true},E5:{"":"Tp;",
+call$1:function(a){return J.Vm(a)},
+"+call:1:0":0,
+$isEH:true,
+$is_HB:true,
+$is_Dv:true}}],["observe.src.dirty_check","package:observe/src/dirty_check.dart",,O,{Y3:function(){var z,y,x,w,v,u,t,s,r
+if($.Td)return
+if($.tW==null)return
+$.Td=!0
+z=0
+y=null
+do{++z
+if(z===1000)y=[]
+x=$.tW
+w=[]
+w.$builtinTypeInfo=[F.d3]
+$.tW=w
+for(w=y!=null,v=!1,u=0;u<x.length;++u){t=x[u]
+s=t.R9
+s=s.iE!==s
+if(s){if(t.BN(t)){if(w)y.push([u,t])
+v=!0}$.tW.push(t)}}}while(z<1000&&v)
+if(w&&v){$.iU().A3("Possible loop in Observable.dirtyCheck, stopped checking.")
+for(y.toString,w=new H.a7(y,y.length,0,null),H.VM(w,[H.W8(y,"Q",0)]);w.G();){r=w.mD
+s=J.U6(r)
+$.iU().A3("In last iteration Observable changed at index "+H.d(s.t(r,0))+", object: "+H.d(s.t(r,1))+".")}}$.el=$.tW.length
+$.Td=!1},Ht:function(){var z={}
+z.a=!1
+z=new O.o5(z)
+return new P.wJ(null,null,null,null,new O.zI(z),new O.id(z),null,null,null,null,null,null)},o5:{"":"Tp;a",
+call$2:function(a,b){var z=this.a
+if(z.a)return
+z.a=!0
+a.RK(b,new O.b5(z))},
+"+call:2:0":0,
+$isEH:true,
+$is_bh:true},b5:{"":"Tp;a",
+call$0:function(){this.a.a=!1
+O.Y3()},
+"+call:0:0":0,
+$isEH:true,
+$is_X0:true},zI:{"":"Tp;b",
+call$4:function(a,b,c,d){if(d==null)return d
+return new O.Zb(this.b,b,c,d)},
+"+call:4:0":0,
+$isEH:true},Zb:{"":"Tp;c,d,e,f",
+call$0:function(){this.c.call$2(this.d,this.e)
+return this.f.call$0()},
+"+call:0:0":0,
+$isEH:true,
+$is_X0:true},id:{"":"Tp;g",
+call$4:function(a,b,c,d){if(d==null)return d
+return new O.iV(this.g,b,c,d)},
+"+call:4:0":0,
+$isEH:true},iV:{"":"Tp;h,i,j,k",
+call$1:function(a){this.h.call$2(this.i,this.j)
+return this.k.call$1(a)},
+"+call:1:0":0,
+$isEH:true,
+$is_HB:true,
+$is_Dv:true}}],["observe.src.list_diff","package:observe/src/list_diff.dart",,G,{f6:function(a,b,c,d,e,f){var z,y,x,w,v,u,t,s,r,q,p,o,n,m,l,k
+z=J.WB(J.xH(f,e),1)
+y=J.WB(J.xH(c,b),1)
+x=P.A(z,null)
+if(typeof z!=="number")throw H.s(z)
+w=x.length
+v=0
+for(;v<z;++v){u=P.A(y,null)
+if(v>=w)throw H.e(x,v)
+x[v]=u
+u=x[v]
+if(0>=u.length)throw H.e(u,0)
+u[0]=v}if(typeof y!=="number")throw H.s(y)
+t=0
+for(;t<y;++t){if(0>=w)throw H.e(x,0)
+u=x[0]
+if(t>=u.length)throw H.e(u,t)
+u[t]=t}for(u=J.U6(d),s=J.Qc(b),r=J.U6(a),v=1;v<z;++v)for(q=v-1,p=e+v-1,t=1;t<y;++t){o=J.xC(u.t(d,p),r.t(a,J.xH(s.g(b,t),1)))
+n=x[q]
+m=t-1
+if(o){if(v>=w)throw H.e(x,v)
+o=x[v]
+if(q>=w)throw H.e(x,q)
+if(m>=n.length)throw H.e(n,m)
+m=n[m]
+if(t>=o.length)throw H.e(o,t)
+o[t]=m}else{if(q>=w)throw H.e(x,q)
+if(t>=n.length)throw H.e(n,t)
+l=J.WB(n[t],1)
+if(v>=w)throw H.e(x,v)
+o=x[v]
+if(m>=o.length)throw H.e(o,m)
+k=J.WB(o[m],1)
+m=x[v]
+o=P.J(l,k)
+if(t>=m.length)throw H.e(m,t)
+m[t]=o}}return x},Mw:function(a){var z,y,x,w,v,u,t,s,r,q,p,o,n
+z=a.length
+y=z-1
+if(0>=z)throw H.e(a,0)
+x=a[0].length-1
+if(y<0)throw H.e(a,y)
+w=a[y]
+if(x<0||x>=w.length)throw H.e(w,x)
+v=w[x]
+u=[]
+while(!0){if(!(y>0||x>0))break
+c$0:{if(y===0){u.push(2);--x
+break c$0}if(x===0){u.push(3);--y
+break c$0}w=y-1
+if(w<0)throw H.e(a,w)
+t=a[w]
+s=x-1
+r=t.length
+if(s<0||s>=r)throw H.e(t,s)
+q=t[s]
+if(x<0||x>=r)throw H.e(t,x)
+p=t[x]
+if(y<0)throw H.e(a,y)
+t=a[y]
+if(s>=t.length)throw H.e(t,s)
+o=t[s]
+n=P.J(P.J(p,o),q)
+if(n===q){if(J.xC(q,v))u.push(0)
+else{u.push(1)
+v=q}x=s
+y=w}else if(n===p){u.push(3)
+v=p
+y=w}else{u.push(2)
+v=o
+x=s}}}z=new H.iK(u)
+H.VM(z,[null])
+return z.br(z)},rB:function(a,b,c){var z,y,x
+for(z=J.U6(a),y=J.U6(b),x=0;x<c;++x)if(!J.xC(z.t(a,x),y.t(b,x)))return x
+return c},xU:function(a,b,c){var z,y,x,w,v,u
+z=J.U6(a)
+y=z.gB(a)
+x=J.U6(b)
+w=x.gB(b)
+v=0
+while(!0){if(v<c){y=J.xH(y,1)
+u=z.t(a,y)
+w=J.xH(w,1)
+u=J.xC(u,x.t(b,w))}else u=!1
+if(!u)break;++v}return v},jj:function(a,b,c,d,e,f){var z,y,x,w,v,u,t,s,r,q,p,o,n,m
+z=J.Wx(c)
+y=J.Wx(f)
+x=P.J(z.W(c,b),y.W(f,e))
+w=J.x(b)
+v=w.n(b,0)&&e===0?G.rB(a,d,x):0
+u=z.n(c,J.q8(a))&&y.n(f,J.q8(d))?G.xU(a,d,x-v):0
+b=w.g(b,v)
+e+=v
+c=z.W(c,u)
+f=y.W(f,u)
+z=J.Wx(c)
+if(J.xC(z.W(c,b),0)&&J.xC(J.xH(f,e),0))return C.xD
+if(J.xC(b,c)){t=[]
+z=new P.Yp(t)
+z.$builtinTypeInfo=[null]
+s=new G.W4(a,z,t,b,0)
+if(typeof f!=="number")throw H.s(f)
+z=J.U6(d)
+for(;e<f;e=r){r=e+1
+s.Il.push(z.t(d,e))}return[s]}else if(e===f){z=z.W(c,b)
+t=[]
+y=new P.Yp(t)
+y.$builtinTypeInfo=[null]
+return[new G.W4(a,y,t,b,z)]}q=G.Mw(G.f6(a,b,c,d,e,f))
+p=[]
+p.$builtinTypeInfo=[G.W4]
+for(z=J.U6(d),o=e,n=b,s=null,m=0;m<q.length;++m)switch(q[m]){case 0:if(s!=null){p.push(s)
+s=null}n=J.WB(n,1);++o
+break
+case 1:if(s==null){t=[]
+y=new P.Yp(t)
+y.$builtinTypeInfo=[null]
+s=new G.W4(a,y,t,n,0)}s.dM=J.WB(s.dM,1)
+n=J.WB(n,1)
+s.Il.push(z.t(d,o));++o
+break
+case 2:if(s==null){t=[]
+y=new P.Yp(t)
+y.$builtinTypeInfo=[null]
+s=new G.W4(a,y,t,n,0)}s.dM=J.WB(s.dM,1)
+n=J.WB(n,1)
+break
+case 3:if(s==null){t=[]
+y=new P.Yp(t)
+y.$builtinTypeInfo=[null]
+s=new G.W4(a,y,t,n,0)}s.Il.push(z.t(d,o));++o
+break
+default:}if(s!=null)p.push(s)
+return p},m1:function(a,b){var z,y,x,w,v,u,t,s,r,q,p,o,n,m,l
+z=b.gWA()
+y=J.zj(b)
+x=b.gIl()
+x.toString
+w=H.Y9(x.$asQ,H.oX(x))
+v=w==null?null:w[0]
+v=P.F(x,!0,v)
+u=b.gNg()
+if(u==null)u=0
+x=new P.Yp(v)
+x.$builtinTypeInfo=[null]
+t=new G.W4(z,x,v,y,u)
+for(s=!1,r=0,q=0;z=a.length,q<z;++q){if(q<0)throw H.e(a,q)
+p=a[q]
+p.jr=J.WB(p.jr,r)
+if(s)continue
+z=t.jr
+y=J.WB(z,J.q8(t.Uj.G4))
+x=p.jr
+o=P.J(y,J.WB(x,p.dM))-P.y(z,x)
+if(o>=0){C.Nm.W4(a,q);--q
+z=J.xH(p.dM,J.q8(p.Uj.G4))
+if(typeof z!=="number")throw H.s(z)
+r-=z
+t.dM=J.WB(t.dM,J.xH(p.dM,o))
+n=J.xH(J.WB(J.q8(t.Uj.G4),J.q8(p.Uj.G4)),o)
+if(J.xC(t.dM,0)&&J.xC(n,0))s=!0
+else{m=p.Il
+if(J.u6(t.jr,p.jr)){z=t.Uj
+z=z.Mu(z,0,J.xH(p.jr,t.jr))
+m.toString
+if(typeof m!=="object"||m===null||!!m.fixed$length)H.vh(P.f("insertAll"))
+H.IC(m,0,z)}if(J.xZ(J.WB(t.jr,J.q8(t.Uj.G4)),J.WB(p.jr,p.dM))){z=t.Uj
+J.DB(m,z.Mu(z,J.xH(J.WB(p.jr,p.dM),t.jr),J.q8(t.Uj.G4)))}t.Il=m
+t.Uj=p.Uj
+if(J.u6(p.jr,t.jr))t.jr=p.jr
+s=!1}}else if(J.u6(t.jr,p.jr)){C.Nm.xe(a,q,t);++q
+l=J.xH(t.dM,J.q8(t.Uj.G4))
+p.jr=J.WB(p.jr,l)
+if(typeof l!=="number")throw H.s(l)
+r+=l
+s=!0}else s=!1}if(!s)a.push(t)},xl:function(a,b){var z,y
+z=[]
+H.VM(z,[G.W4])
+for(y=new H.a7(b,b.length,0,null),H.VM(y,[H.W8(b,"Q",0)]);y.G();)G.m1(z,y.mD)
+return z},u2:function(a,b){var z,y,x,w,v,u
+if(b.length===1)return b
+z=[]
+for(y=G.xl(a,b),x=new H.a7(y,y.length,0,null),H.VM(x,[H.W8(y,"Q",0)]),y=a.h3;x.G();){w=x.mD
+if(J.xC(w.gNg(),1)&&J.xC(J.q8(w.gRt().G4),1)){v=J.i4(w.gRt().G4,0)
+u=J.zj(w)
+if(u>>>0!==u||u>=y.length)throw H.e(y,u)
+if(!J.xC(v,y[u]))z.push(w)
+continue}v=J.RE(w)
+C.Nm.Ay(z,G.jj(a,v.gvH(w),J.WB(v.gvH(w),w.gNg()),w.gIl(),0,J.q8(w.gRt().G4)))}return z},W4:{"":"a;WA<,Uj,Il<,jr,dM",
+gvH:function(a){return this.jr},
+"+index":0,
+gRt:function(){return this.Uj},
+gNg:function(){return this.dM},
+ck:function(a){var z=this.jr
+if(typeof z!=="number")throw H.s(z)
+z=a<z
+if(z)return!1
+if(!J.xC(this.dM,J.q8(this.Uj.G4)))return!0
+z=J.WB(this.jr,this.dM)
+if(typeof z!=="number")throw H.s(z)
+return a<z},
+bu:function(a){return"#<ListChangeRecord index: "+H.d(this.jr)+", removed: "+H.d(this.Uj)+", addedCount: "+H.d(this.dM)+">"},
+$isW4:true,
+static:{XM:function(a,b,c,d){var z
+if(d==null)d=[]
+if(c==null)c=0
+z=new P.Yp(d)
+z.$builtinTypeInfo=[null]
+return new G.W4(a,z,d,b,c)}}}}],["observe.src.metadata","package:observe/src/metadata.dart",,K,{Fa:{"":"a;"},x9:{"":"a;"}}],["observe.src.observable","package:observe/src/observable.dart",,F,{Wi:function(a,b,c,d){var z,y
+z=J.RE(a)
+if(z.gUV(a)&&!J.xC(c,d)){y=new T.qI(a,b,c,d)
+H.VM(y,[null])
+z.SZ(a,y)}return d},d3:{"":"a;",$isd3:true},X6:{"":"Tp;a,b",
+call$2:function(a,b){var z,y,x,w
+z=this.b
+y=z.p6.rN(a).Ax
+if(!J.xC(b,y)){x=this.a
+if(x.a==null)x.a=[]
+x=x.a
+w=new T.qI(z,a,b,y)
+H.VM(w,[null])
+x.push(w)
+z=z.V2
+z.u(z,a,y)}},
+"+call:2:0":0,
+$isEH:true,
+$is_bh:true}}],["observe.src.observable_box","package:observe/src/observable_box.dart",,A,{xh:{"":"Pi;",
+gP:function(a){return this.L1
+"105,38"},
+"+value":1,
+r6:function(a,b){return this.gP(a).call$1(b)},
+sP:function(a,b){this.L1=F.Wi(this,C.ls,this.L1,b)
+"40,106,105,38"},
+"+value=":1,
+bu:function(a){return"#<"+H.d(new H.cu(H.dJ(this),null))+" value: "+H.d(this.L1)+">"}}}],["observe.src.observable_list","package:observe/src/observable_list.dart",,Q,{wn:{"":"uF;b3,xg,h3,VJ,Ai",
+gRT:function(){var z,y
+if(this.xg==null)this.xg=P.bK(new Q.cj(this),null,!0,null)
+z=this.xg
+z.toString
+y=new P.Ik(z)
+H.VM(y,[H.W8(z,"WV",0)])
+return y},
+gB:function(a){return this.h3.length
+"30,38"},
+"+length":1,
+sB:function(a,b){var z,y,x,w,v,u,t
+z=this.h3
+y=z.length
+if(y===b)return
+this.pD(this,C.Wn,y,b)
+x=this.xg
+if(x!=null){w=x.iE
+x=w==null?x!=null:w!==x}else x=!1
+if(x){x=J.Wx(b)
+if(x.C(b,y)){if(x.C(b,0)||x.D(b,z.length))H.vh(P.TE(b,0,z.length))
+if(typeof b!=="number")throw H.s(b)
+if(y<b||y>z.length)H.vh(P.TE(y,b,z.length))
+x=new H.nH(z,b,y)
+x.$builtinTypeInfo=[null]
+w=x.Bz
+v=J.Wx(w)
+if(v.C(w,0))H.vh(new P.bJ("value "+H.d(w)))
+u=x.n1
+if(u!=null){if(J.u6(u,0))H.vh(new P.bJ("value "+H.d(u)))
+if(v.D(w,u))H.vh(P.TE(w,0,u))}x=x.br(x)
+w=new P.Yp(x)
+w.$builtinTypeInfo=[null]
+this.iH(new G.W4(this,w,x,b,0))}else{x=x.W(b,y)
+t=[]
+w=new P.Yp(t)
+w.$builtinTypeInfo=[null]
+this.iH(new G.W4(this,w,t,y,x))}}C.Nm.sB(z,b)
+"40,31,30,38"},
+"+length=":1,
+t:function(a,b){var z=this.h3
+if(b>>>0!==b||b>=z.length)throw H.e(z,b)
+return z[b]
+"107,29,30,38"},
+"+[]:1:0":1,
+u:function(a,b,c){var z,y,x,w
+z=this.h3
+if(b>>>0!==b||b>=z.length)throw H.e(z,b)
+y=z[b]
+x=this.xg
+if(x!=null){w=x.iE
+x=w==null?x!=null:w!==x}else x=!1
+if(x){x=[y]
+w=new P.Yp(x)
+w.$builtinTypeInfo=[null]
+this.iH(new G.W4(this,w,x,b,1))}if(b>=z.length)throw H.e(z,b)
+z[b]=c
+"40,29,30,31,107,38"},
+"+[]=:2:0":1,
+h:function(a,b){var z,y,x,w
+z=this.h3
+y=z.length
+this.pD(this,C.Wn,y,y+1)
+x=this.xg
+if(x!=null){w=x.iE
+x=w==null?x!=null:w!==x}else x=!1
+if(x)this.iH(G.XM(this,y,1,null))
+C.Nm.h(z,b)},
+Ay:function(a,b){var z,y,x,w
+z=this.h3
+y=z.length
+C.Nm.Ay(z,b)
+this.pD(this,C.Wn,y,z.length)
+x=z.length-y
+z=this.xg
+if(z!=null){w=z.iE
+z=w==null?z!=null:w!==z}else z=!1
+if(z&&x>0)this.iH(G.XM(this,y,x,null))},
+Rz:function(a,b){var z,y
+for(z=this.h3,y=0;y<z.length;++y)if(J.xC(z[y],b)){this.UZ(this,y,y+1)
+return!0}return!1},
+UZ:function(a,b,c){var z,y,x,w,v,u,t
+z=b>=0
+if(b<0||b>this.h3.length)H.vh(P.TE(b,0,this.h3.length))
+y=c>=b
+if(c<b||c>this.h3.length)H.vh(P.TE(c,b,this.h3.length))
+x=c-b
+w=this.h3
+v=w.length
+this.pD(this,C.Wn,v,v-x)
+u=this.xg
+if(u!=null){t=u.iE
+u=t==null?u!=null:t!==u}else u=!1
+if(u&&x>0){if(b<0||b>w.length)H.vh(P.TE(b,0,w.length))
+if(c<b||c>w.length)H.vh(P.TE(c,b,w.length))
+z=new H.nH(w,b,c)
+z.$builtinTypeInfo=[null]
+y=z.Bz
+u=J.Wx(y)
+if(u.C(y,0))H.vh(new P.bJ("value "+H.d(y)))
+t=z.n1
+if(t!=null){if(J.u6(t,0))H.vh(new P.bJ("value "+H.d(t)))
+if(u.D(y,t))H.vh(P.TE(y,0,t))}z=z.br(z)
+y=new P.Yp(z)
+y.$builtinTypeInfo=[null]
+this.iH(new G.W4(this,y,z,b,0))}C.Nm.UZ(w,b,c)},
+iH:function(a){var z,y
+z=this.xg
+if(z!=null){y=z.iE
+z=y==null?z!=null:y!==z}else z=!1
+if(!z)return
+if(this.b3==null){this.b3=[]
+P.rb(this.gL6())}this.b3.push(a)},
+oC:function(){var z,y,x
+z=this.b3
+if(z==null)return!1
+y=G.u2(this,z)
+this.b3=null
+z=this.xg
+if(z!=null){x=z.iE
+x=x==null?z!=null:x!==z}else x=!1
+if(x){x=new P.Yp(y)
+H.VM(x,[G.W4])
+if(z.Gv>=4)H.vh(z.q7())
+z.Iv(x)
+return!0}return!1},
+gL6:function(){return new P.Ip(this,Q.wn.prototype.oC,null,"oC")},
+$iswn:true,
+$asWO:null,
+$ascX:null,
+static:{uX:function(a,b){var z=[]
+H.VM(z,[b])
+z=new Q.wn(null,null,z,null,null)
+H.VM(z,[b])
+return z}}},uF:{"":"ar+Pi;",$asar:null,$asWO:null,$ascX:null,$isd3:true},cj:{"":"Tp;a",
+call$0:function(){this.a.xg=null},
+"+call:0:0":0,
+$isEH:true,
+$is_X0:true}}],["observe.src.observable_map","package:observe/src/observable_map.dart",,V,{HA:{"":"yj;G3>,jL>,zZ>,JD,dr",
+bu:function(a){var z
+if(this.JD)z="insert"
+else z=this.dr?"remove":"set"
+return"#<MapChangeRecord "+z+" "+H.d(this.G3)+" from: "+H.d(this.jL)+" to: "+H.d(this.zZ)+">"},
+$isHA:true},br:{"":"Pi;Zp,VJ,Ai",
+gvc:function(a){var z=this.Zp
+return z.gvc(z)
+"108,38"},
+"+keys":1,
+gUQ:function(a){var z=this.Zp
+return z.gUQ(z)
+"109,38"},
+"+values":1,
+gB:function(a){var z=this.Zp
+return z.gB(z)
+"30,38"},
+"+length":1,
+gl0:function(a){var z=this.Zp
+return z.gB(z)===0
+"44,38"},
+"+isEmpty":1,
+gor:function(a){var z=this.Zp
+return z.gB(z)!==0
+"44,38"},
+"+isNotEmpty":1,
+PF:function(a){return this.Zp.PF(a)
+"44,31,0,38"},
+"+containsValue:1:0":1,
+x4:function(a){return this.Zp.x4(a)
+"44,78,0,38"},
+"+containsKey:1:0":1,
+t:function(a,b){var z=this.Zp
+return z.t(z,b)
+"110,78,0,38"},
+"+[]:1:0":1,
+u:function(a,b,c){var z,y,x,w,v
+z=this.Zp
+y=z.gB(z)
+x=z.t(z,b)
+z.u(z,b,c)
+w=this.VJ
+if(w!=null){v=w.iE
+w=v==null?w!=null:v!==w}else w=!1
+if(w)if(y!==z.gB(z)){z=z.gB(z)
+if(this.gUV(this)&&y!==z){z=new T.qI(this,C.Wn,y,z)
+z.$builtinTypeInfo=[null]
+this.SZ(this,z)}z=new V.HA(b,null,c,!0,!1)
+z.$builtinTypeInfo=[null,null]
+this.SZ(this,z)}else if(!J.xC(x,c)){z=new V.HA(b,x,c,!1,!1)
+z.$builtinTypeInfo=[null,null]
+this.SZ(this,z)}"40,78,111,31,110,38"},
+"+[]=:2:0":1,
+Ay:function(a,b){b.aN(b,new V.zT(this))},
+Rz:function(a,b){var z,y,x,w,v
+z=this.Zp
+y=z.gB(z)
+x=z.Rz(z,b)
+w=this.VJ
+if(w!=null){v=w.iE
+w=v==null?w!=null:v!==w}else w=!1
+if(w&&y!==z.gB(z)){w=new V.HA(b,x,null,!1,!0)
+H.VM(w,[null,null])
+this.SZ(this,w)
+F.Wi(this,C.Wn,y,z.gB(z))}return x},
+aN:function(a,b){var z=this.Zp
+return z.aN(z,b)},
+bu:function(a){return P.vW(this)},
+$asL8:null,
+$isL8:true,
+static:{WF:function(a,b,c){var z=V.Bq(a,b,c)
+z.Ay(z,a)
+return z},Bq:function(a,b,c){var z,y,x
+z=J.x(a)
+if(typeof a==="object"&&a!==null&&!!z.$isBa){z=b
+y=c
+x=new V.br(P.GV(null,null,z,y),null,null)
+H.VM(x,[z,y])}else if(typeof a==="object"&&a!==null&&!!z.$isFo){z=b
+y=c
+x=new V.br(P.L5(null,null,null,z,y),null,null)
+H.VM(x,[z,y])}else{z=b
+y=c
+x=new V.br(P.Py(null,null,null,z,y),null,null)
+H.VM(x,[z,y])}return x}}},zT:{"":"Tp;a",
+call$2:function(a,b){var z=this.a
+z.u(z,a,b)},
+"+call:2:0":0,
+$isEH:true,
+$is_bh:true}}],["observe.src.path_observer","package:observe/src/path_observer.dart",,L,{Wa:function(a,b){var z=J.x(a)
+if(typeof a==="object"&&a!==null&&!!z.$isqI)return J.xC(a.oc,b)
+if(typeof a==="object"&&a!==null&&!!z.$isHA){z=J.RE(b)
+if(typeof b==="object"&&b!==null&&!!z.$iswv)b=z.ghr(b)
+return J.xC(a.G3,b)}return!1},yf:function(a,b){var z,y,x,w,v,u,t
+if(a==null)return
+x=b
+if(typeof x==="number"&&Math.floor(x)===x){x=a
+w=J.x(x)
+if(typeof x==="object"&&x!==null&&(x.constructor===Array||!!w.$isList)&&J.J5(b,0)&&J.u6(b,J.q8(a)))return J.UQ(a,b)}else{x=b
+w=J.x(x)
+if(typeof x==="object"&&x!==null&&!!w.$iswv){z=H.vn(a)
+v=J.bB(z.gAx()).IE
+x=$.Sl()
+u=x.t(x,v)
+y=H.tT(H.YC(u==null?v:u),v)
+try{if(L.My(y,b)){x=b
+x=z.tu(x,1,J.Z0(x),[])
+return x.Ax}if(L.iN(y,C.fz)){x=J.UQ(a,J.Z0(b))
+return x}}catch(t){x=H.Ru(t)
+w=J.x(x)
+if(typeof x==="object"&&x!==null&&!!w.$ismp){if(!L.iN(y,C.OV))throw t}else throw t}}}if($.aT().mL(C.VZ))$.aT().x9("can't get "+H.d(b)+" in "+H.d(a))
+return},h6:function(a,b,c){var z,y,x,w,v
+if(a==null)return!1
+x=b
+if(typeof x==="number"&&Math.floor(x)===x){x=a
+w=J.x(x)
+if(typeof x==="object"&&x!==null&&(x.constructor===Array||!!w.$isList)&&J.J5(b,0)&&J.u6(b,J.q8(a))){J.kW(a,b,c)
+return!0}}else{x=b
+w=J.x(x)
+if(typeof x==="object"&&x!==null&&!!w.$iswv){z=H.vn(a)
+y=H.jO(J.bB(z.gAx()).IE)
+try{if(L.hg(y,b)){z.PU(b,c)
+return!0}if(L.iN(y,C.eC)){J.kW(a,J.Z0(b),c)
+return!0}}catch(v){x=H.Ru(v)
+w=J.x(x)
+if(typeof x==="object"&&x!==null&&!!w.$ismp){if(!L.iN(y,C.OV))throw v}else throw v}}}if($.aT().mL(C.VZ))$.aT().x9("can't set "+H.d(b)+" in "+H.d(a))
+return!1},My:function(a,b){var z
+for(;!J.xC(a,$.aA());){z=a.gYK()
+if(z.x4(b)===!0)return!0
+if(z.x4(C.OV)===!0)return!0
+a=L.pY(a)}return!1},hg:function(a,b){var z,y,x,w
+z=new H.GD(H.le(H.d(b.ghr(b))+"="))
+for(;!J.xC(a,$.aA());){y=a.gYK()
+x=J.UQ(y,b)
+w=J.x(x)
+if(typeof x==="object"&&x!==null&&!!w.$isRY)return!0
+if(y.x4(z)===!0)return!0
+if(y.x4(C.OV)===!0)return!0
+a=L.pY(a)}return!1},iN:function(a,b){var z,y
+for(;!J.xC(a,$.aA());){z=J.UQ(a.gYK(),b)
+y=J.x(z)
+if(typeof z==="object"&&z!==null&&!!y.$isRS&&z.guU())return!0
+a=L.pY(a)}return!1},pY:function(a){var z,y,x
+try{z=a.gAY()
+return z}catch(y){z=H.Ru(y)
+x=J.x(z)
+if(typeof z==="object"&&z!==null&&!!x.$isub)return $.aA()
+else throw y}},rd:function(a){a=J.JA(a,$.c3(),"")
+if(a==="")return!0
+if(0>=a.length)throw H.e(a,0)
+if(a[0]===".")return!1
+return $.tN().zD(a)},D7:{"":"Pi;Ii>,YB,BK,kN,cs,cT,VJ,Ai",
+E4:function(a){return this.cT.call$1(a)},
+gWA:function(){var z=this.kN
+if(0>=z.length)throw H.e(z,0)
+return z[0]},
+gP:function(a){var z,y
+if(!this.YB)return
+z=this.VJ
+if(z!=null){y=z.iE
+z=y==null?z!=null:y!==z}else z=!1
+if(!z)this.ov()
+return C.Nm.grZ(this.kN)
+"40,38"},
+"+value":1,
+r6:function(a,b){return this.gP(a).call$1(b)},
+sP:function(a,b){var z,y,x,w
+z=this.BK
+y=z.length
+if(y===0)return
+x=this.VJ
+if(x!=null){w=x.iE
+x=w==null?x!=null:w!==x}else x=!1
+if(!x)this.Zy(y-1)
+x=this.kN
+w=y-1
+if(w<0||w>=x.length)throw H.e(x,w)
+x=x[w]
+if(w>=z.length)throw H.e(z,w)
+if(L.h6(x,z[w],b)){z=this.kN
+if(y>=z.length)throw H.e(z,y)
+z[y]=b}"40,106,0,38"},
+"+value=":1,
+w3:function(a){O.Pi.prototype.w3.call(this,this)
+this.ov()
+this.XI()},
+gqw:function(a){return new H.YP(this,L.D7.prototype.w3,a,"w3")},
+ni:function(a){var z,y
+for(z=0;y=this.cs,z<y.length;++z){y=y[z]
+if(y!=null){y.ed()
+y=this.cs
+if(z>=y.length)throw H.e(y,z)
+y[z]=null}}O.Pi.prototype.ni.call(this,this)},
+gl1:function(a){return new H.YP(this,L.D7.prototype.ni,a,"ni")},
+Zy:function(a){var z,y,x,w,v,u
+if(a==null)a=this.BK.length
+z=this.BK
+y=z.length-1
+if(typeof a!=="number")throw H.s(a)
+x=this.cT!=null
+w=0
+for(;w<a;){v=this.kN
+if(w>=v.length)throw H.e(v,w)
+v=v[w]
+if(w>=z.length)throw H.e(z,w)
+u=L.yf(v,z[w])
+if(w===y&&x)u=this.E4(u)
+v=this.kN;++w
+if(w>=v.length)throw H.e(v,w)
+v[w]=u}},
+ov:function(){return this.Zy(null)},
+hd:function(a){var z,y,x,w,v,u,t,s,r
+for(z=this.BK,y=z.length-1,x=this.cT!=null,w=a,v=null,u=null;w<=y;w=s){t=this.kN
+s=w+1
+r=t.length
+if(s<0||s>=r)throw H.e(t,s)
+v=t[s]
+if(w<0||w>=r)throw H.e(t,w)
+t=t[w]
+if(w>=z.length)throw H.e(z,w)
+u=L.yf(t,z[w])
+if(w===y&&x)u=this.E4(u)
+if(v==null?u==null:v===u){this.Rl(a,w)
+return}t=this.kN
+if(s>=t.length)throw H.e(t,s)
+t[s]=u}this.ij(a)
+if(this.gUV(this)&&!J.xC(v,u)){z=new T.qI(this,C.ls,v,u)
+z.$builtinTypeInfo=[null]
+this.SZ(this,z)}},
+Rl:function(a,b){var z,y
+if(b==null)b=this.BK.length
+if(typeof b!=="number")throw H.s(b)
+z=a
+for(;z<b;++z){y=this.cs
+if(z<0||z>=y.length)throw H.e(y,z)
+y=y[z]
+if(y!=null)y.ed()
+this.Kh(z)}},
+XI:function(){return this.Rl(0,null)},
+ij:function(a){return this.Rl(a,null)},
+Kh:function(a){var z,y,x,w,v,u,t
+z=this.kN
+if(a<0||a>=z.length)throw H.e(z,a)
+y=z[a]
+z=this.BK
+if(a>=z.length)throw H.e(z,a)
+x=z[a]
+if(typeof x==="number"&&Math.floor(x)===x){z=J.x(y)
+if(typeof y==="object"&&y!==null&&!!z.$iswn){z=this.cs
+w=y.gRT().w4(!1)
+w.dB=$.X3.cR(new L.C4(this,a,x))
+v=P.AY
+w.o7=P.VH(v,$.X3)
+u=P.No
+w.Bd=$.X3.Al(u)
+if(a>=z.length)throw H.e(z,a)
+z[a]=w}}else{z=J.RE(y)
+if(typeof y==="object"&&y!==null&&!!z.$isd3){t=this.cs
+w=z.gqh(y).w4(!1)
+w.dB=$.X3.cR(new L.l9(this,a,x))
+v=P.AY
+w.o7=P.VH(v,$.X3)
+u=P.No
+w.Bd=$.X3.Al(u)
+if(a>=t.length)throw H.e(t,a)
+t[a]=w}}},
+d4:function(a,b,c){var z,y,x,w
+if(this.YB)for(z=J.rr(b).split("."),y=new H.a7(z,z.length,0,null),H.VM(y,[H.W8(z,"Q",0)]),z=this.BK;y.G();){x=y.mD
+if(J.xC(x,""))continue
+w=H.BU(x,10,new L.qL())
+z.push(w!=null?w:new H.GD(H.le(x)))}z=this.BK
+y=P.A(z.length+1,P.a)
+H.VM(y,[P.a])
+this.kN=y
+if(z.length===0&&c!=null)a=c.call$1(a)
+y=this.kN
+if(0>=y.length)throw H.e(y,0)
+y[0]=a
+z=P.A(z.length,P.MO)
+H.VM(z,[P.MO])
+this.cs=z},
+$isD7:true,
+static:{ao:function(a,b,c){var z,y
+z=L.rd(b)
+y=[]
+H.VM(y,[P.a])
+y=new L.D7(b,z,y,null,null,c,null,null)
+y.d4(a,b,c)
+return y}}},qL:{"":"Tp;",
+call$1:function(a){return},
+"+call:1:0":0,
+$isEH:true,
+$is_HB:true,
+$is_Dv:true},C4:{"":"Tp;a,b,c",
+call$1:function(a){var z,y
+for(z=J.GP(a),y=this.c;z.G();)if(z.gl().ck(y)){this.a.hd(this.b)
+return}},
+"+call:1:0":0,
+$isEH:true,
+$is_HB:true,
+$is_Dv:true},l9:{"":"Tp;d,e,f",
+call$1:function(a){var z,y
+for(z=J.GP(a),y=this.f;z.G();)if(L.Wa(z.gl(),y)){this.d.hd(this.e)
+return}},
+"+call:1:0":0,
+$isEH:true,
+$is_HB:true,
+$is_Dv:true},lP:{"":"Tp;",
+call$0:function(){return new H.VR(H.v4("^(?:(?:[$_a-zA-Z]+[$_a-zA-Z0-9]*|(?:[0-9]|[1-9]+[0-9]+)))(?:\\.(?:[$_a-zA-Z]+[$_a-zA-Z0-9]*|(?:[0-9]|[1-9]+[0-9]+)))*$",!1,!0,!1),null,null)},
+"+call:0:0":0,
+$isEH:true,
+$is_X0:true}}],["observe.src.to_observable","package:observe/src/to_observable.dart",,R,{Jk:function(a){var z,y,x
+z=J.x(a)
+if(typeof a==="object"&&a!==null&&!!z.$isd3)return a
+if(typeof a==="object"&&a!==null&&!!z.$isL8){y=V.Bq(a,null,null)
+z.aN(a,new R.km(y))
+return y}if(typeof a==="object"&&a!==null&&(a.constructor===Array||!!z.$iscX)){z=z.ez(a,R.np)
+x=Q.uX(null,null)
+x.Ay(x,z)
+return x}return a},km:{"":"Tp;a",
+call$2:function(a,b){var z=this.a
+z.u(z,R.Jk(a),R.Jk(b))},
+"+call:2:0":0,
+$isEH:true,
+$is_bh:true}}],["path","package:path/path.dart",,B,{ab:function(){var z,y
+z=$.At().gvU()
+y=P.r6($.cO().ej("dart:io"))
+z=z.nb
+if(z.t(z,y)!=null){z=$.At().gvU()
+y=P.r6($.cO().ej("dart:io"))
+z=z.nb
+return J.AF(H.Go(J.UQ(z.t(z,y).gYK(),C.A5),"$isMs").rN(C.Je).Ax)}else{z=$.At().gvU()
+y=P.r6($.cO().ej("dart:html"))
+z=z.nb
+if(z.t(z,y)!=null){z=$.At().gvU()
+y=P.r6($.cO().ej("dart:html"))
+z=z.nb
+return J.UW(J.UX(z.t(z,y).rN(C.QK).Ax))}else return"."}},"+current":0,YF:function(a,b){var z,y,x,w,v,u,t,s
+for(z=1;z<8;++z){if(b[z]==null||b[z-1]!=null)continue
+for(y=8;y>=1;y=x){x=y-1
+if(b[x]!=null)break}w=new P.Rn("")
+w.vM=""
+v=a+"("
+w.vM=w.vM+v
+v=new H.nH(b,0,y)
+v.$builtinTypeInfo=[null]
+u=v.Bz
+t=J.Wx(u)
+if(t.C(u,0))H.vh(new P.bJ("value "+H.d(u)))
+s=v.n1
+if(s!=null){if(J.u6(s,0))H.vh(new P.bJ("value "+H.d(s)))
+if(t.D(u,s))H.vh(P.TE(u,0,s))}v=new H.A8(v,new B.Qt())
+v.$builtinTypeInfo=[null,null]
+v=v.zV(v,", ")
+w.vM=w.vM+v
+v="): part "+(z-1)+" was null, but part "+z+" was not."
+w.vM=w.vM+v
+throw H.b(new P.AT(w.vM))}},Rh:function(){var z,y
+z=$.At().gvU()
+y=P.r6($.cO().ej("dart:io"))
+z=z.nb
+if(z.t(z,y)==null)return $.LT()
+z=$.At().gvU()
+y=P.r6($.cO().ej("dart:io"))
+z=z.nb
+if(J.xC(H.Go(J.UQ(z.t(z,y).gYK(),C.pk),"$isMs").rN(C.Ws).Ax,"windows"))return $.CE()
+return $.IX()},Qt:{"":"Tp;",
+call$1:function(a){return a==null?"null":"\""+H.d(a)+"\""},
+"+call:1:0":0,
+$isEH:true,
+$is_HB:true,
+$is_Dv:true},Dk:{"":"a;S,SF",
+tM:function(a){var z,y,x
+z=this.G7(a)
+z.IV()
+y=z.dY
+x=y.length
+if(x===0){y=z.SF
+return y==null?".":y}if(x===1){y=z.SF
+return y==null?".":y}C.Nm.mv(y)
+y=z.Yj
+if(0>=y.length)throw H.e(y,0)
+y.pop()
+z.IV()
+return z.bu(z)},
+C8:function(a,b,c,d,e,f,g,h,i){var z,y
+z=[b,c,d,e,f,g,h,i]
+B.YF("join",z)
+y=new H.U5(z,new B.A0())
+H.VM(y,[null])
+return this.IP(y)},
+zV:function(a,b){return this.C8(a,b,null,null,null,null,null,null,null)},
+IP:function(a){var z,y,x,w,v,u,t,s,r,q,p
+z=P.p9("")
+for(y=new H.U5(a,new B.rm()),H.VM(y,[H.W8(a,"mW",0)]),x=J.GP(y.Kw),x=new H.SO(x,y.ew),H.VM(x,[H.W8(y,"U5",0)]),y=this.S,w=x.RX,v=!1,u=!1;x.G();){t=w.gl()
+if(this.G7(t).aA&&u){s=this.G7(z.vM).SF
+r=s==null?"":s
+z.vM=""
+q=typeof r==="string"?r:H.d(r)
+z.vM=z.vM+q
+q=typeof t==="string"?t:H.d(t)
+z.vM=z.vM+q}else if(this.G7(t).SF!=null){u=!this.G7(t).aA
+z.vM=""
+q=typeof t==="string"?t:H.d(t)
+z.vM=z.vM+q}else{p=J.U6(t)
+if(J.xZ(p.gB(t),0)&&J.kE(p.t(t,0),y.gDF())===!0);else if(v===!0){p=y.gmI()
+z.vM=z.vM+p}q=typeof t==="string"?t:H.d(t)
+z.vM=z.vM+q}v=J.kE(t,y.gnK())}return z.vM},
+Fr:function(a,b){var z,y
+z=this.G7(b)
+y=new H.U5(z.dY,new B.eY())
+H.VM(y,[null])
+z.dY=P.F(y,!0,H.W8(y,"mW",0))
+y=z.SF
+if(y!=null)C.Nm.xe(z.dY,0,y)
+return z.dY},
+G7:function(a){var z,y,x,w,v,u,t,s,r,q,p
+z=this.S
+y=z.dz(a)
+x=z.uP(a)
+if(y!=null)a=J.ZZ(a,J.q8(y))
+w=[]
+v=[]
+u=z.gDF()
+t=u.R4(u,a)
+if(t!=null){u=t.oH
+if(0>=u.length)throw H.e(u,0)
+v.push(u[0])
+if(0>=u.length)throw H.e(u,0)
+a=J.ZZ(a,J.q8(u[0]))}else v.push("")
+u=z.gDF()
+if(typeof a!=="string")H.vh(new P.AT(a))
+u=new H.KW(u,a)
+u=new H.Pb(u.td,u.BZ,null)
+s=J.U6(a)
+r=0
+for(;u.G();){q=u.Jz.oH
+w.push(s.JT(a,r,q.index))
+if(0>=q.length)throw H.e(q,0)
+v.push(q[0])
+p=q.index
+if(0>=q.length)throw H.e(q,0)
+q=J.q8(q[0])
+if(typeof q!=="number")throw H.s(q)
+r=p+q}u=s.gB(a)
+if(typeof u!=="number")throw H.s(u)
+if(r<u){w.push(s.yn(a,r))
+v.push("")}return new B.q1(z,y,x!=null,w,v)},
+static:{mq:function(a,b){a=B.ab()
+b=$.vP()
+return new B.Dk(b,a)}}},A0:{"":"Tp;",
+call$1:function(a){return a!=null},
+"+call:1:0":0,
+$isEH:true,
+$is_HB:true,
+$is_Dv:true},rm:{"":"Tp;",
+call$1:function(a){return!J.xC(a,"")},
+"+call:1:0":0,
+$isEH:true,
+$is_HB:true,
+$is_Dv:true},eY:{"":"Tp;",
+call$1:function(a){return J.FN(a)!==!0},
+"+call:1:0":0,
+$isEH:true,
+$is_HB:true,
+$is_Dv:true},OO:{"":"a;TL<",
+dz:function(a){var z,y
+z=this.gEw()
+if(typeof a!=="string")H.vh(new P.AT(a))
+y=new H.KW(z,a)
+if(!y.gl0(y))return J.UQ(y.gFV(y),0)
+return this.uP(a)},
+uP:function(a){var z,y
+z=this.gTL()
+if(z==null)return
+z.toString
+if(typeof a!=="string")H.vh(new P.AT(a))
+y=new H.KW(z,a)
+if(!y.gA(y).G())return
+return J.UQ(y.gFV(y),0)},
+bu:function(a){return this.goc(this)},
+static:{"":"ak<",}},BE:{"":"OO;oc>,mI<,DF<,nK<,Ew<,TL"},Qb:{"":"OO;oc>,mI<,DF<,nK<,Ew<,TL"},xI:{"":"OO;oc>,mI<,DF<,nK<,Ew<,TL<,qW"},q1:{"":"a;S,SF,aA,dY,Yj",
+IV:function(){var z,y
+z=this.Yj
+while(!0){y=this.dY
+if(!(y.length!==0&&J.xC(C.Nm.grZ(y),"")))break
+C.Nm.mv(this.dY)
+if(0>=z.length)throw H.e(z,0)
+z.pop()}y=z.length
+if(y>0)z[y-1]=""},
+bu:function(a){var z,y,x,w,v
+z=P.p9("")
+y=this.SF
+if(y!=null)z.KF(y)
+for(y=this.Yj,x=0;x<this.dY.length;++x){if(x>=y.length)throw H.e(y,x)
+w=y[x]
+w=typeof w==="string"?w:H.d(w)
+z.vM=z.vM+w
+v=this.dY
+if(x>=v.length)throw H.e(v,x)
+w=v[x]
+w=typeof w==="string"?w:H.d(w)
+z.vM=z.vM+w}z.KF(C.Nm.grZ(y))
+return z.vM}},"":"O3<"}],["polymer","package:polymer/polymer.dart",,A,{JX:function(){var z,y
+z=document.createElement("style",null)
+z.textContent=".polymer-veiled { opacity: 0; } \n.polymer-unveil{ -webkit-transition: opacity 0.3s; transition: opacity 0.3s; }\n"
+y=document.querySelector("head")
+y.insertBefore(z,y.firstChild)
+A.B2()
+$.mC().MM.ml(new A.Zj())},B2:function(){var z,y,x,w
+for(z=$.IN(),y=new H.a7(z,1,0,null),H.VM(y,[H.W8(z,"Q",0)]);y.G();){x=y.mD
+for(z=W.vD(document.querySelectorAll(x),null),z=z.gA(z);z.G();){w=J.pP(z.mD)
+w.h(w,"polymer-veiled")}}},yV:function(a){var z,y
+z=$.xY()
+y=z.Rz(z,a)
+if(y!=null)for(z=J.GP(y);z.G();)J.Or(z.gl())},oF:function(a,b){var z,y,x,w,v,u
+if(J.xC(a,$.Tf()))return b
+b=A.oF(a.gAY(),b)
+for(z=J.GP(J.hI(a.gYK()));z.G();){y=z.gl()
+x=J.x(y)
+if(typeof y!=="object"||y===null||!x.$isRY||y.gV5()||y.gFo()||y.gkw())continue
+for(x=J.GP(y.gc9());x.G();){w=x.gl().gAx()
+v=J.x(w)
+if(typeof w==="object"&&w!==null&&!!v.$isyL){if(b==null)b=H.B7([],P.L5(null,null,null,null,null))
+b.u(b,y.gIf(),y)
+break}}}for(z=J.GP(J.hI(a.gYK()));z.G();){u=z.gl()
+x=J.x(u)
+if(typeof u!=="object"||u===null||!x.$isRS||!u.glT()||u.Fo||u.gkw())continue
+for(x=J.GP(u.gc9());x.G();){w=x.gl().gAx()
+v=J.x(w)
+if(typeof w==="object"&&w!==null&&!!v.$isyL){if(A.bc(a,u)){if(b==null)b=H.B7([],P.L5(null,null,null,null,null))
+b.u(b,u.gIf(),u)}break}}}return b},bc:function(a,b){var z,y
+z=H.le(H.d(J.Z0(b.gIf()))+"=")
+y=J.UQ(a.gYK(),new H.GD(z))
+z=J.x(y)
+return typeof y==="object"&&y!==null&&!!z.$isRS&&y.ghB()},hO:function(a,b,c){var z,y
+if($.LX()==null||a==null)return
+if($.LX().Bm("ShadowDOMPolyfill"))return
+z=J.UQ($.LX(),"Platform")
+if(z==null)return
+y=J.UQ(z,"ShadowCSS")
+if(y==null)return
+y.V7("shimStyling",[a,b,c])},Hl:function(a){var z
+if(a==null||$.LX()==null)return""
+z=J.UQ(P.Oe(a),"__resource")
+return z!=null?z:""},oY:function(a){var z=J.UQ($.pT(),a)
+return z!=null?z:a},Ad:function(a,b){var z,y
+if(b==null)b=C.hG
+z=$.Ej()
+z.u(z,a,b)
+z=$.p2()
+y=z.Rz(z,a)
+if(y!=null)J.Or(y)},zM:function(a){A.om(a,new A.Mq())},om:function(a,b){var z
+if(a==null)return
+b.call$1(a)
+for(z=a.firstChild;z!=null;z=z.nextSibling)A.om(z,b)},p1:function(a,b,c,d){var z
+if($.ZH().mL(C.R5))$.ZH().J4("["+H.d(c)+"]: bindProperties: ["+H.d(d)+"] to ["+J.Ro(a)+"].["+H.d(b)+"]")
+z=L.ao(c,d,null)
+if(z.gP(z)==null)z.sP(z,H.vn(a).rN(b).Ax)
+return A.vu(a,b,c,d)},lJ:function(a,b,c,d){if(!J.co(b,"on-"))return d.call$3(a,b,c)
+return new A.L6(a,b)},z9:function(a){var z,y
+for(;z=J.TZ(a),z!=null;a=z);y=$.od()
+return y.t(y,a)},HR:function(a,b,c){var z,y,x
+z=H.vn(a)
+y=J.UQ(H.jO(J.bB(z.Ax).IE).gtx(),b)
+if(y!=null){x=y.gJx()
+x=x.ev(x,new A.uJ())
+C.Nm.sB(c,x.gB(x))}return z.CI(b,c).Ax},ZI:function(a,b){var z,y
+if(a==null)return
+z=document.createElement("style",null)
+z.textContent=a.textContent
+y=new W.E9(a).MW.getAttribute("element")
+if(y!=null){z.toString
+new W.E9(z).MW.setAttribute("element",y)}b.appendChild(z)},pX:function(){var z=window
+C.ol.pl(z)
+C.ol.oB(z,W.aF(new A.hm()))},l3:function(a){var z=J.RE(a)
+return typeof a==="object"&&a!==null&&!!z.$isRY?z.gr9(a):H.Go(a,"$isRS").gdw()},al:function(a,b){var z,y
+z=A.l3(b)
+if(J.xC(z.gvd(),C.PU)||J.xC(z.gvd(),C.nN))if(a!=null){y=A.ER(a)
+if(y!=null)return P.re(y)
+return H.jO(J.bB(H.vn(a).Ax).IE)}return z},ER:function(a){var z
+if(a==null)return C.GX
+if(typeof a==="number"&&Math.floor(a)===a)return C.yw
+if(typeof a==="number")return C.O4
+if(typeof a==="boolean")return C.HL
+if(typeof a==="string")return C.Db
+z=J.x(a)
+if(typeof a==="object"&&a!==null&&!!z.$isiP)return C.Yc
+return},lN:function(a,b,c){if(a!=null)a.TP(a)
+else a=new A.S0(null,null)
+a.Ow=b
+a.VC=P.rT(c,a.gv6(a))
+return a},Ok:function(){if($.uP){var z=$.X3.iT(O.Ht())
+z.Gr(A.PB)
+return z}A.ei()
+return $.X3},ei:function(){var z=document
+W.wi(window,z,"polymer-element",C.Bm,null)
+A.Jv()
+A.JX()
+$.i5().ml(new A.Bl())},Jv:function(){var z,y,x,w,v,u,t
+for(w=$.nT(),w.toString,v=new H.a7(w,w.length,0,null),H.VM(v,[H.W8(w,"Q",0)]);v.G();){z=v.mD
+try{A.pw(z)}catch(u){w=H.Ru(u)
+y=w
+x=new H.XO(u,null)
+w=null
+t=new P.vs(0,$.X3,null,null,null,null,null,null)
+t.$builtinTypeInfo=[w]
+t=new P.Zf(t)
+t.$builtinTypeInfo=[w]
+w=y
+if(w==null)H.vh(new P.AT("Error must not be null"))
+t=t.MM
+if(t.Gv!==0)H.vh(new P.lj("Future already completed"))
+t.CG(w,x)}}},GA:function(a,b,c,d){var z,y,x,w,v,u
+if(c==null)c=P.Ls(null,null,null,W.YN)
+if(d==null){d=[]
+d.$builtinTypeInfo=[J.O]}if(a==null){z="warning: "+H.d(b)+" not found."
+y=$.oK
+if(y==null)H.LJ(z)
+else y.call$1(z)
+return d}if(c.tg(c,a))return d
+c.h(c,a)
+for(y=W.vD(a.querySelectorAll("script,link[rel=\"import\"]"),null),y=y.gA(y),x=!1;y.G();){w=y.mD
+v=J.RE(w)
+if(typeof w==="object"&&w!==null&&!!v.$isOg)A.GA(w.import,w.href,c,d)
+else if(typeof w==="object"&&w!==null&&!!v.$isj2&&w.type==="application/dart")if(!x){u=v.gLA(w)
+d.push(u===""?b:u)
+x=!0}else{z="warning: more than one Dart script tag in "+H.d(b)+". Dartium currently only allows a single Dart script tag per document."
+v=$.oK
+if(v==null)H.LJ(z)
+else v.call$1(z)}}return d},pw:function(a){var z,y,x,w,v,u,t,s,r,q,p,o,n
+z=$.RQ()
+z.toString
+y=z.mS(P.r6($.cO().ej(a)))
+z=$.UG().nb
+x=z.t(z,y)
+if(J.co(y.r0,$.rw())&&J.Eg(y.r0,".dart")){z="package:"+J.ZZ(y.r0,$.rw().length)
+w=P.r6($.cO().ej(z))
+z=$.UG().nb
+v=z.t(z,w)
+if(v!=null)x=v}if(x==null){$.M7().To(H.d(y)+" library not found")
+return}z=x.gmu().nb
+z=z.gUQ(z)
+u=z.Kw
+u=u.gA(u)
+t=H.Y9(z.$asi1,H.oX(z))
+s=t==null?null:t[0]
+t=H.Y9(z.$asi1,H.oX(z))
+r=t==null?null:t[1]
+z=new H.MH(null,u,z.ew)
+z.$builtinTypeInfo=[s,r]
+for(;z.G();)A.h5(x,z.mD)
+z=J.pP(x)
+z=z.gUQ(z)
+u=z.Kw
+u=u.gA(u)
+t=H.Y9(z.$asi1,H.oX(z))
+s=t==null?null:t[0]
+t=H.Y9(z.$asi1,H.oX(z))
+r=t==null?null:t[1]
+z=new H.MH(null,u,z.ew)
+z.$builtinTypeInfo=[s,r]
+for(;z.G();){q=z.mD
+for(u=J.GP(q.gc9());u.G();){p=u.gl().gAx()
+s=J.x(p)
+if(typeof p==="object"&&p!==null&&!!s.$isV3){s=p.ns
+o=M.Lh(q)
+if(o==null)o=C.hG
+r=$.Ej()
+r.u(r,s,o)
+r=$.p2()
+n=r.Rz(r,s)
+if(n!=null)J.Or(n)}}}},h5:function(a,b){var z,y,x
+for(z=J.GP(b.gc9());y=!1,z.G();)if(z.gl().gAx()===C.za){y=!0
+break}if(!y)return
+if(!b.gFo()){x="warning: methods marked with @initMethod should be static, "+H.d(b.gIf())+" is not."
+z=$.oK
+if(z==null)H.LJ(x)
+else z.call$1(x)
+return}z=b.gJx()
+z=z.ev(z,new A.pM())
+if(z.gA(z).G()){x="warning: methods marked with @initMethod should take no arguments, "+H.d(b.gIf())+" expects some."
+z=$.oK
+if(z==null)H.LJ(x)
+else z.call$1(x)
+return}a.CI(b.gIf(),C.xD)},Zj:{"":"Tp;",
+call$1:function(a){A.pX()},
+"+call:1:0":0,
+$isEH:true,
+$is_HB:true,
+$is_Dv:true},XP:{"":"qE;di,P0,ZD,S6,Dg=,Q0=,Hs=,n4=,pc,SV,EX=,mn",
+gr9:function(a){return a.di},
+gP1:function(a){return a.ZD},
+goc:function(a){return a.S6},
+"+name":0,
+gr3:function(a){var z,y,x
+z=a.querySelector("template")
+if(z!=null){y=J.x(z)
+x=J.nX(typeof z==="object"&&z!==null&&!!y.$ishs?z:M.Ky(z))
+y=x}else y=null
+return y},
+yx:function(a){var z
+if(this.y0(a,a.S6))return
+z=new W.E9(a).MW.getAttribute("extends")
+if(this.PM(a,z))return
+this.jT(a,a.S6,z)
+A.yV(a.S6)},
+y0:function(a,b){var z=$.Ej()
+if(z.t(z,b)!=null)return!1
+z=$.p2()
+z.u(z,b,a)
+if(new W.E9(a).MW.hasAttribute("noscript")===!0)A.Ad(b,null)
+return!0},
+PM:function(a,b){if(b!=null&&J.UU(b,"-")>=0)if(!$.cd().x4(b)){J.bi($.xY().to(b,new A.q6()),a)
+return!0}return!1},
+jT:function(a,b,c){var z
+this.Dh(a,b,c)
+z=$.cd()
+z.u(z,b,a)
+this.fj(a,b,c)
+this.Ba(a,b)},
+Dh:function(a,b,c){var z,y
+z=$.Ej()
+a.di=z.t(z,b)
+z=$.Ej()
+a.P0=z.t(z,c)
+if(a.P0!=null){z=$.cd()
+a.ZD=z.t(z,c)}y=P.re(a.di)
+this.YU(a,y,a.ZD)
+z=a.Dg
+if(z!=null)a.Q0=this.Pv(a,z)
+this.oq(a,y)},
+fj:function(a,b,c){var z,y
+this.uG(a)
+this.W3(a,a.EX)
+this.Mi(a)
+this.f6(a)
+this.yq(a)
+this.u5(a)
+A.hO(this.gr3(a),b,c)
+z=P.re(a.di)
+y=J.UQ(z.gtx(),C.Qi)
+if(y!=null&&y.gFo()&&y.guU())z.CI(C.Qi,[a])},
+Ba:function(a,b){var z,y,x,w
+for(z=a,y=null;z!=null;){x=J.RE(z)
+y=x.gQg(z).MW.getAttribute("extends")
+z=x.gP1(z)}x=document
+w=a.di
+W.wi(window,x,b,w,y)},
+YU:function(a,b,c){var z,y,x,w,v,u,t
+if(c!=null&&J.fP(c)!=null){z=J.fP(c)
+y=P.L5(null,null,null,null,null)
+y.Ay(y,z)
+a.Dg=y}a.Dg=A.oF(b,a.Dg)
+x=new W.E9(a).MW.getAttribute("attributes")
+if(x!=null){z=x.split(J.kE(x,",")?",":" ")
+y=new H.a7(z,z.length,0,null)
+H.VM(y,[H.W8(z,"Q",0)])
+for(;y.G();){w=J.rr(y.mD)
+if(w!==""){z=a.Dg
+z=z!=null&&z.x4(w)}else z=!1
+if(z)continue
+v=new H.GD(H.le(w))
+u=J.UQ(b.gYK(),v)
+z=J.x(u)
+if(typeof u==="object"&&u!==null&&!!z.$isRS){if(!u.glT()||!A.bc(b,u))u=null}else if(typeof u!=="object"||u===null||!z.$isRY)u=null
+if(u==null){window
+z=$.UT()
+t="property for attribute "+w+" of polymer-element name="+a.S6+" not found."
+z.toString
+if(typeof console!="undefined")console.warn(t)
+continue}if(a.Dg==null)a.Dg=H.B7([],P.L5(null,null,null,null,null))
+z=a.Dg
+z.u(z,v,u)}}},
+uG:function(a){var z,y
+a.n4=P.L5(null,null,null,J.O,P.a)
+z=a.ZD
+if(z!=null){y=a.n4
+y.Ay(y,J.GW(z))}z=new W.E9(a)
+z.aN(z,new A.CK(a))},
+W3:function(a,b){var z=new W.E9(a)
+z.aN(z,new A.BO(b))},
+Mi:function(a){var z,y
+a.pc=this.nP(a,"[rel=stylesheet]")
+for(z=a.pc,z.toString,y=new H.a7(z,z.length,0,null),H.VM(y,[H.W8(z,"Q",0)]);y.G();)J.vX(y.mD)},
+f6:function(a){var z,y
+a.SV=this.nP(a,"style[polymer-scope]")
+for(z=a.SV,z.toString,y=new H.a7(z,z.length,0,null),H.VM(y,[H.W8(z,"Q",0)]);y.G();)J.vX(y.mD)},
+yq:function(a){var z,y,x,w,v,u
+z=a.pc
+z.toString
+y=new H.U5(z,new A.ZG())
+H.VM(y,[null])
+x=this.gr3(a)
+if(x!=null){w=P.p9("")
+for(z=J.GP(y.Kw),z=new H.SO(z,y.ew),H.VM(z,[H.W8(y,"U5",0)]),v=z.RX;z.G();){u=A.Hl(v.gl())
+u=typeof u==="string"?u:H.d(u)
+w.vM=w.vM+u
+w.vM=w.vM+"\n"}if(w.vM.length>0){z=document.createElement("style",null)
+z.textContent=H.d(w)
+v=J.RE(x)
+v.mK(x,z,v.gq6(x))}}},
+Wz:function(a,b,c){var z,y,x
+z=W.vD(a.querySelectorAll(b),null)
+y=z.br(z)
+x=this.gr3(a)
+if(x!=null)C.Nm.Ay(y,J.US(x,b))
+return y},
+nP:function(a,b){return this.Wz(a,b,null)},
+u5:function(a){A.ZI(this.J3(a,this.kO(a,"global"),"global"),document.head)},
+kO:function(a,b){var z,y,x,w,v
+z=P.p9("")
+y=new A.Oc("[polymer-scope="+b+"]")
+for(x=a.pc,x.toString,x=new H.U5(x,y),H.VM(x,[null]),w=J.GP(x.Kw),w=new H.SO(w,x.ew),H.VM(w,[H.W8(x,"U5",0)]),x=w.RX;w.G();){v=A.Hl(x.gl())
+v=typeof v==="string"?v:H.d(v)
+z.vM=z.vM+v
+z.vM=z.vM+"\n\n"}for(x=a.SV,x.toString,y=new H.U5(x,y),H.VM(y,[null]),x=J.GP(y.Kw),x=new H.SO(x,y.ew),H.VM(x,[H.W8(y,"U5",0)]),y=x.RX;x.G();){w=y.gl().ghg()
+z.vM=z.vM+w
+z.vM=z.vM+"\n\n"}return z.vM},
+J3:function(a,b,c){var z
+if(b==="")return
+z=document.createElement("style",null)
+z.textContent=b
+z.toString
+new W.E9(z).MW.setAttribute("element",a.S6+"-"+c)
+return z},
+oq:function(a,b){var z,y,x,w
+for(z=J.GP(J.hI(b.gYK()));z.G();){y=z.gl()
+x=J.x(y)
+if(typeof y!=="object"||y===null||!x.$isRS||y.gFo()||!y.guU())continue
+w=J.Z0(y.gIf())
+x=J.rY(w)
+if(x.Tc(w,"Changed")&&!x.n(w,"attributeChanged")){if(a.Hs==null)a.Hs=P.L5(null,null,null,null,null)
+w=x.JT(w,0,J.xH(x.gB(w),7))
+x=a.Hs
+x.u(x,new H.GD(H.le(w)),y.gIf())}}},
+Pv:function(a,b){var z=P.L5(null,null,null,J.O,null)
+b.aN(b,new A.MX(z))
+return z},
+du:function(a){a.S6=new W.E9(a).MW.getAttribute("name")
+this.yx(a)},
+$isXP:true,
+static:{"":"wp",XL:function(a){a.EX=H.B7([],P.L5(null,null,null,null,null))
+C.xk.ZL(a)
+C.xk.du(a)
+return a},"+new PolymerDeclaration$created:0:0":0,wP:function(a){return!C.kr.x4(a)&&!J.co(a,"on-")}}},q6:{"":"Tp;",
+call$0:function(){return[]},
+"+call:0:0":0,
+$isEH:true,
+$is_X0:true},CK:{"":"Tp;a",
+call$2:function(a,b){var z
+if(A.wP(a)){z=this.a.n4
+z.u(z,a,b)}},
+"+call:2:0":0,
+$isEH:true,
+$is_bh:true},BO:{"":"Tp;a",
+call$2:function(a,b){var z,y,x,w,v
+z=J.rY(a)
+if(z.nC(a,"on-")){y=J.U6(b)
+x=y.u8(b,"{{")
+w=y.cn(b,"}}")
+if(x>=0&&J.J5(w,0)){v=this.a
+v.u(v,z.yn(a,3),C.xB.bS(y.JT(b,x+2,w)))}}},
+"+call:2:0":0,
+$isEH:true,
+$is_bh:true},ZG:{"":"Tp;",
+call$1:function(a){return J.Vs(a).MW.hasAttribute("polymer-scope")!==!0},
+"+call:1:0":0,
+$isEH:true,
+$is_HB:true,
+$is_Dv:true},Oc:{"":"Tp;a",
+call$1:function(a){return J.RF(a,this.a)},
+"+call:1:0":0,
+$isEH:true,
+$is_HB:true,
+$is_Dv:true},MX:{"":"Tp;a",
+call$2:function(a,b){var z=this.a
+z.u(z,J.Mz(J.Z0(a)),b)},
+"+call:2:0":0,
+$isEH:true,
+$is_bh:true},w12:{"":"Tp;",
+call$0:function(){var z=P.L5(null,null,null,J.O,J.O)
+C.FS.aN(C.FS,new A.fTP(z))
+return z},
+"+call:0:0":0,
+$isEH:true,
+$is_X0:true},fTP:{"":"Tp;a",
+call$2:function(a,b){var z=this.a
+z.u(z,b,a)},
+"+call:2:0":0,
+$isEH:true,
+$is_bh:true},yL:{"":"Fa;",$isyL:true},dM:{"":["a;KM=-",function(){return[C.nJ]}],
+gpQ:function(a){return!1},
+"+applyAuthorStyles":0,
+Pa:function(a){if(W.uV(this.gM0(a).defaultView)!=null||$.M0>0)this.Ec(a)},
+gTM:function(a){var z=this.gQg(a).MW.getAttribute("is")
+return z==null||z===""?this.gjU(a):z},
+Ec:function(a){var z,y
+z=this.gTM(a)
+y=$.cd()
+a.ZI=y.t(y,z)
+this.Xl(a)
+this.Z2(a)
+this.fk(a)
+this.Uc(a)
+$.M0=$.M0+1
+this.z2(a,a.ZI)
+$.M0=$.M0-1},
+i4:function(a){if(a.ZI==null)this.Ec(a)
+this.BT(a,!0)},
+"+enteredView:0:0":0,
+Nz:function(a){this.x3(a)},
+"+leftView:0:0":0,
+z2:function(a,b){if(b!=null){this.z2(a,J.lB(b))
+this.d0(a,b)}},
+d0:function(a,b){var z,y,x,w,v
+z=J.RE(b)
+y=z.Ja(b,"template")
+if(y!=null)if(J.Vs(a.ZI).MW.hasAttribute("lightdom")===!0){this.vs(a,y)
+x=null}else x=this.TH(a,y)
+else x=null
+w=J.x(x)
+if(typeof x!=="object"||x===null||!w.$isI0)return
+v=z.gQg(b).MW.getAttribute("name")
+if(v==null)return
+z=a.mT
+z.u(z,v,x)},
+vs:function(a,b){var z,y
+if(b==null)return
+z=J.x(b)
+z=typeof b==="object"&&b!==null&&!!z.$ishs?b:M.Ky(b)
+y=z.ZK(a,a.Ye)
+this.jx(a,y)
+this.lj(a,a)
+return y},
+TH:function(a,b){var z,y
+if(b==null)return
+this.gKE(a)
+z=this.er(a)
+y=$.od()
+y.u(y,z,a)
+z.applyAuthorStyles=this.gpQ(a)
+z.resetStyleInheritance=!1
+y=J.x(b)
+y=typeof b==="object"&&b!==null&&!!y.$ishs?b:M.Ky(b)
+z.appendChild(y.ZK(a,a.Ye))
+this.lj(a,z)
+return z},
+lj:function(a,b){var z,y,x,w
+for(z=J.US(b,"[id]"),z=z.gA(z),y=a.KM,x=J.w1(y);z.G();){w=z.mD
+x.u(y,J.F8(w),w)}},
+aC:function(a,b,c,d){var z=J.x(b)
+if(!z.n(b,"class")&&!z.n(b,"style"))this.D3(a,b,d)},
+Z2:function(a){var z=J.GW(a.ZI)
+z.aN(z,new A.WC(a))},
+fk:function(a){var z
+if(J.B8(a.ZI)==null)return
+z=this.gQg(a)
+z.aN(z,this.ghW(a))},
+D3:function(a,b,c){var z,y,x,w
+z=this.Nj(a,b)
+if(z==null)return
+if(c==null||J.kE(c,$.VC())===!0)return
+y=H.vn(a)
+x=y.rN(z.gIf()).Ax
+w=Z.Zh(c,x,A.al(x,z))
+if(w==null?x!=null:w!==x)y.PU(z.gIf(),w)},
+ghW:function(a){return new A.Y7(this,A.dM.prototype.D3,a,"D3")},
+Nj:function(a,b){var z=J.B8(a.ZI)
+if(z==null)return
+return z.t(z,b)},
+TW:function(a,b){if(b==null)return
+if(typeof b==="boolean")return b?"":null
+else if(typeof b==="string"||typeof b==="number"&&Math.floor(b)===b||typeof b==="number")return H.d(b)
+return},
+Id:function(a,b){var z,y,x
+z=H.vn(a).rN(b).Ax
+y=this.TW(a,z)
+if(y!=null)this.gQg(a).MW.setAttribute(J.Z0(b),y)
+else if(typeof z==="boolean"){x=this.gQg(a)
+x.Rz(x,J.Z0(b))}},
+Z1:function(a,b,c,d){var z,y
+if(a.ZI==null)this.Ec(a)
+z=this.Nj(a,b)
+if(z==null)return J.tb(M.Ky(a),b,c,d)
+else{J.MV(M.Ky(a),b)
+y=A.p1(a,z.gIf(),c,d)
+this.Id(a,z.gIf())
+J.kW(J.QE(M.Ky(a)),b,y)
+return y}},
+gCd:function(a){return J.QE(M.Ky(a))},
+Ih:function(a,b){return J.MV(M.Ky(a),b)},
+x3:function(a){if(a.z3===!0)return
+$.P5().J4("["+this.gjU(a)+"] asyncUnbindAll")
+a.TQ=A.lN(a.TQ,this.gJg(a),C.RT)},
+GB:function(a){var z
+if(a.z3===!0)return
+this.Td(a)
+J.AA(M.Ky(a))
+z=this.gKE(a)
+for(;z!=null;){A.zM(z)
+z=z.olderShadowRoot}a.z3=!0},
+gJg:function(a){return new H.YP(this,A.dM.prototype.GB,a,"GB")},
+BT:function(a,b){var z
+if(a.z3===!0){$.P5().A3("["+this.gjU(a)+"] already unbound, cannot cancel unbindAll")
+return}$.P5().J4("["+this.gjU(a)+"] cancelUnbindAll")
+z=a.TQ
+if(z!=null){z.TP(z)
+a.TQ=null}if(b===!0)return
+A.om(this.gKE(a),new A.TV())},
+oW:function(a){return this.BT(a,null)},
+Xl:function(a){var z,y,x,w,v,u,t
+z=a.ZI
+y=J.RE(z)
+x=y.gHs(z)
+w=y.gDg(z)
+z=x==null
+if(!z)for(x.toString,y=new P.Cm(x),H.VM(y,[H.W8(x,"YB",0)]),v=y.Fb,u=v.zN,u=new P.N6(v,u,null,null),H.VM(u,[H.W8(y,"Cm",0)]),u.zq=u.Fb.H9;u.G();){t=u.fD
+this.rJ(a,t,H.vn(a).tu(t,1,J.Z0(t),[]),null)}if(!z||w!=null)a.Vk=this.gqh(a).yI(this.gnu(a))},
+fd:function(a,b){var z,y,x,w,v,u
+z=a.ZI
+y=J.RE(z)
+x=y.gHs(z)
+w=y.gDg(z)
+v=P.L5(null,null,null,P.wv,A.k8)
+for(z=J.GP(b);z.G();){u=z.gl()
+y=J.x(u)
+if(typeof u!=="object"||u===null||!y.$isqI)continue
+J.Pz(v.to(u.oc,new A.Oa(u)),u.zZ)}v.aN(v,new A.n1(a,b,x,w))},
+gnu:function(a){return new P.C7(this,A.dM.prototype.fd,a,"fd")},
+rJ:function(a,b,c,d){var z,y,x,w,v,u,t
+z=J.Ir(a.ZI)
+if(z==null)return
+y=z.t(z,b)
+if(y==null)return
+x=J.x(d)
+if(typeof d==="object"&&d!==null&&!!x.$iswn){if($.yk().mL(C.R5))$.yk().J4("["+this.gjU(a)+"] observeArrayValue: unregister observer "+H.d(b))
+this.l5(a,H.d(J.Z0(b))+"__array")}x=J.x(c)
+if(typeof c==="object"&&c!==null&&!!x.$iswn){if($.yk().mL(C.R5))$.yk().J4("["+this.gjU(a)+"] observeArrayValue: register observer "+H.d(b))
+w=c.gRT().w4(!1)
+w.dB=$.X3.cR(new A.xf(a,d,y))
+v=P.AY
+w.o7=P.VH(v,$.X3)
+u=P.No
+w.Bd=$.X3.Al(u)
+x=H.d(J.Z0(b))+"__array"
+if(a.uN==null)a.uN=P.L5(null,null,null,J.O,P.MO)
+t=a.uN
+t.u(t,x,w)}},
+Td:function(a){var z=a.Vk
+if(z!=null){z.ed()
+a.Vk=null}this.C0(a)},
+l5:function(a,b){var z,y
+z=a.uN
+y=z.Rz(z,b)
+if(y==null)return!1
+y.ed()
+return!0},
+C0:function(a){var z,y
+z=a.uN
+if(z==null)return
+for(z=z.gUQ(z),y=z.Kw,y=y.gA(y),y=new H.MH(null,y,z.ew),H.VM(y,[H.W8(z,"i1",0),H.W8(z,"i1",1)]);y.G();)y.mD.ed()
+z=a.uN
+z.V1(z)
+a.uN=null},
+Uc:function(a){var z=J.fU(a.ZI)
+if(z.gl0(z))return
+if($.SS().mL(C.R5))$.SS().J4("["+this.gjU(a)+"] addHostListeners: "+H.d(z))
+this.UH(a,a,z.gvc(z),this.gay(a))},
+UH:function(a,b,c,d){var z,y,x,w,v,u
+for(z=c.Fb,y=z.zN,y=new P.N6(z,y,null,null),H.VM(y,[H.W8(c,"Cm",0)]),y.zq=y.Fb.H9,z=J.RE(b);y.G();){x=y.fD
+w=z.gI(b)
+w=w.t(w,x)
+v=H.Y9(w.$asRO,H.oX(w))
+u=v==null?null:v[0]
+w=new W.Ov(0,w.uv,w.Ph,W.aF(d),w.Sg)
+w.$builtinTypeInfo=[u]
+u=w.u7
+if(u!=null&&w.VP<=0)J.qV(w.uv,w.Ph,u,w.Sg)}},
+iw:function(a,b){var z,y,x,w
+z=J.RE(b)
+if(z.gXt(b)!==!0)return
+y=$.SS().mL(C.R5)
+if(y)$.SS().J4(">>> ["+this.gjU(a)+"]: hostEventListener("+H.d(z.gr9(b))+")")
+x=J.fU(a.ZI)
+w=x.t(x,A.oY(z.gr9(b)))
+if(w!=null){if(y)$.SS().J4("["+this.gjU(a)+"] found host handler name ["+H.d(w)+"]")
+this.ea(a,a,w,[b,typeof b==="object"&&b!==null&&!!z.$isDG?z.gey(b):null,a])}if(y)$.SS().J4("<<< ["+this.gjU(a)+"]: hostEventListener("+H.d(z.gr9(b))+")")},
+gay:function(a){return new P.C7(this,A.dM.prototype.iw,a,"iw")},
+ea:function(a,b,c,d){var z,y
+z=$.SS().mL(C.R5)
+if(z)$.SS().J4(">>> ["+this.gjU(a)+"]: dispatch "+H.d(c))
+y=J.x(c)
+if(typeof c==="object"&&c!==null&&!!y.$isEH)H.Ek(c,d,P.Te(null))
+else if(typeof c==="string")A.HR(b,new H.GD(H.le(c)),d)
+else $.SS().A3("invalid callback")
+if(z)$.SS().To("<<< ["+this.gjU(a)+"]: dispatch "+H.d(c))},
+$isdM:true,
+$ishs:true,
+$isd3:true,
+$iscv:true,
+$isGv:true,
+$isKV:true,
+$isD0:true},WC:{"":"Tp;a",
+call$2:function(a,b){J.Vs(this.a).to(a,new A.Xi(b))},
+"+call:2:0":0,
+$isEH:true,
+$is_bh:true},Xi:{"":"Tp;b",
+call$0:function(){return this.b},
+"+call:0:0":0,
+$isEH:true,
+$is_X0:true},TV:{"":"Tp;",
+call$1:function(a){var z=J.RE(a)
+if(typeof a==="object"&&a!==null&&!!z.$isdM)z.oW(a)},
+"+call:1:0":0,
+$isEH:true,
+$is_HB:true,
+$is_Dv:true},Mq:{"":"Tp;",
+call$1:function(a){var z=J.x(a)
+return J.AA(typeof a==="object"&&a!==null&&!!z.$ishs?a:M.Ky(a))},
+"+call:1:0":0,
+$isEH:true,
+$is_HB:true,
+$is_Dv:true},Oa:{"":"Tp;a",
+call$0:function(){return new A.k8(this.a.jL,null)},
+"+call:0:0":0,
+$isEH:true,
+$is_X0:true},n1:{"":"Tp;b,c,d,e",
+call$2:function(a,b){var z,y,x
+z=this.e
+if(z!=null&&z.x4(a))J.L9(this.b,a)
+z=this.d
+if(z==null)return
+y=z.t(z,a)
+if(y!=null){z=this.b
+x=J.RE(b)
+J.GS(z,a,x.gzZ(b),x.gjL(b))
+A.HR(z,y,[x.gjL(b),x.gzZ(b),this.c])}},
+"+call:2:0":0,
+$isEH:true,
+$is_bh:true},xf:{"":"Tp;a,b,c",
+call$1:function(a){A.HR(this.a,this.c,[this.b])},
+"+call:1:0":0,
+$isEH:true,
+$is_HB:true,
+$is_Dv:true},L6:{"":"Tp;a,b",
+call$2:function(a,b){var z,y,x,w
+if($.SS().mL(C.R5))$.SS().J4("event: ["+H.d(b)+"]."+H.d(this.b)+" => ["+H.d(a)+"]."+this.a+"())")
+z=J.ZZ(this.b,3)
+y=C.FS.t(C.FS,z)
+if(y!=null)z=y
+x=J.f5(b)
+x=x.t(x,z)
+w=new W.Ov(0,x.uv,x.Ph,W.aF(new A.Rs(this.a,a,b)),x.Sg)
+H.VM(w,[H.W8(x,"RO",0)])
+w.Zz()
+return w},
+"+call:2:0":0,
+$isEH:true,
+$is_bh:true},Rs:{"":"Tp;c,d,e",
+call$1:function(a){var z,y,x,w,v,u
+z=this.e
+y=A.z9(z)
+x=J.RE(y)
+if(typeof y!=="object"||y===null||!x.$isdM)return
+w=this.c
+if(0>=w.length)throw H.e(w,0)
+if(w[0]==="@"){v=this.d
+u=L.ao(v,C.xB.yn(w,1),null)
+w=u.gP(u)}else v=y
+u=J.RE(a)
+x.ea(y,v,w,[a,typeof a==="object"&&a!==null&&!!u.$isDG?u.gey(a):null,z])},
+"+call:1:0":0,
+$isEH:true,
+$is_HB:true,
+$is_Dv:true},uJ:{"":"Tp;",
+call$1:function(a){return!a.gQ2()},
+"+call:1:0":0,
+$isEH:true,
+$is_HB:true,
+$is_Dv:true},hm:{"":"Tp;",
+call$1:function(a){var z,y,x
+z=W.vD(document.querySelectorAll(".polymer-veiled"),null)
+for(y=z.gA(z);y.G();){x=J.pP(y.mD)
+x.h(x,"polymer-unveil")
+x.Rz(x,"polymer-veiled")}if(z.gor(z)){y=C.hi.aM(window)
+y.gFV(y).ml(new A.Ji(z))}},
+"+call:1:0":0,
+$isEH:true,
+$is_HB:true,
+$is_Dv:true},Ji:{"":"Tp;a",
+call$1:function(a){var z,y
+for(z=this.a,z=z.gA(z);z.G();){y=J.pP(z.mD)
+y.Rz(y,"polymer-unveil")}},
+"+call:1:0":0,
+$isEH:true,
+$is_HB:true,
+$is_Dv:true},Bf:{"":"TR;K3,Zu,Po,Ha,LO,ZY,xS,PB,eS,Ii",
+cO:function(a){if(this.LO==null)return
+this.Po.ed()
+X.TR.prototype.cO.call(this,this)},
+EC:function(a){this.Ha=a
+this.K3.PU(this.Zu,a)},
+zL:function(a){var z,y,x,w,v
+for(z=J.GP(a),y=this.Zu;z.G();){x=z.gl()
+w=J.x(x)
+if(typeof x==="object"&&x!==null&&!!w.$isqI&&J.xC(x.oc,y)){v=this.K3.tu(y,1,J.Z0(y),[]).Ax
+z=this.Ha
+if(z==null?v!=null:z!==v)J.ta(this.xS,v)
+return}}},
+gxH:function(){return new H.Pm(this,A.Bf.prototype.zL,null,"zL")},
+uY:function(a,b,c,d){this.Po=J.Ib(a).yI(this.gxH())},
+static:{vu:function(a,b,c,d){var z,y,x
+z=H.vn(a)
+y=J.Z0(b)
+x=d!=null?d:""
+x=new A.Bf(z,b,null,null,a,c,null,null,y,x)
+x.Og(a,y,c,d)
+x.uY(a,b,c,d)
+return x}}},ir:{"":["GN;VJ,Ai,ZI,uN,z3,TQ,Vk,Ye,mT,KM-",null,null,null,null,null,null,null,null,null,function(){return[C.nJ]}],
+FH:function(a){this.Pa(a)},
+static:{oa:function(a){var z,y,x,w,v
+z=$.Nd()
+y=P.Py(null,null,null,J.O,W.I0)
+x=J.O
+w=W.cv
+v=new V.br(P.Py(null,null,null,x,w),null,null)
+H.VM(v,[x,w])
+a.Ye=z
+a.mT=y
+a.KM=v
+C.Iv.ZL(a)
+C.Iv.FH(a)
+return a},"+new PolymerElement$created:0:0":0}},Sa:{"":["qE+dM;KM=-",function(){return[C.nJ]}],$isdM:true,$ishs:true,$isd3:true,$iscv:true,$isGv:true,$isKV:true,$isD0:true},GN:{"":"Sa+Pi;",$isd3:true},k8:{"":"a;jL>,zZ*",$isk8:true},HJ:{"":"e9;nF"},S0:{"":"a;Ow,VC",
+E5:function(){return this.Ow.call$0()},
+TP:function(a){var z=this.VC
+if(z!=null){z.ed()
+this.VC=null}},
+tZ:function(a){if(this.VC!=null){this.TP(this)
+this.E5()}},
+gv6:function(a){return new H.YP(this,A.S0.prototype.tZ,a,"tZ")}},V3:{"":"a;ns",$isV3:true},Bl:{"":"Tp;",
+call$1:function(a){var z=$.mC().MM
+if(z.Gv!==0)H.vh(new P.lj("Future already completed"))
+z.OH(null)
+return},
+"+call:1:0":0,
+$isEH:true,
+$is_HB:true,
+$is_Dv:true},pM:{"":"Tp;",
+call$1:function(a){return!a.gQ2()},
+"+call:1:0":0,
+$isEH:true,
+$is_HB:true,
+$is_Dv:true},Mh:{"":"a;"}}],["polymer.deserialize","package:polymer/deserialize.dart",,Z,{Zh:function(a,b,c){var z,y,x
+z=J.UQ($.WJ(),c.gvd())
+if(z!=null)return z.call$2(a,b)
+try{y=C.lM.kV(J.JA(a,"'","\""))
+return y}catch(x){H.Ru(x)
+return a}},Md:{"":"Tp;",
+call$0:function(){var z=P.L5(null,null,null,null,null)
+z.u(z,C.AZ,new Z.Lf())
+z.u(z,C.ok,new Z.fT())
+z.u(z,C.nz,new Z.pp())
+z.u(z,C.Ts,new Z.Nq())
+z.u(z,C.PC,new Z.nl())
+z.u(z,C.md,new Z.ej())
+return z},
+"+call:0:0":0,
+$isEH:true,
+$is_X0:true},Lf:{"":"Tp;",
+call$2:function(a,b){return a},
+"+call:2:0":0,
+$isEH:true,
+$is_bh:true},fT:{"":"Tp;",
+call$2:function(a,b){return a},
+"+call:2:0":0,
+$isEH:true,
+$is_bh:true},pp:{"":"Tp;",
+call$2:function(a,b){var z,y
+try{z=P.Gl(a)
+return z}catch(y){H.Ru(y)
+return b}},
+"+call:2:0":0,
+$isEH:true,
+$is_bh:true},Nq:{"":"Tp;",
+call$2:function(a,b){return!J.xC(a,"false")},
+"+call:2:0":0,
+$isEH:true,
+$is_bh:true},nl:{"":"Tp;",
+call$2:function(a,b){return H.BU(a,null,new Z.mf(b))},
+"+call:2:0":0,
+$isEH:true,
+$is_bh:true},mf:{"":"Tp;a",
+call$1:function(a){return this.a},
+"+call:1:0":0,
+$isEH:true,
+$is_HB:true,
+$is_Dv:true},ej:{"":"Tp;",
+call$2:function(a,b){return H.IH(a,new Z.HK(b))},
+"+call:2:0":0,
+$isEH:true,
+$is_bh:true},HK:{"":"Tp;b",
+call$1:function(a){return this.b},
+"+call:1:0":0,
+$isEH:true,
+$is_HB:true,
+$is_Dv:true}}],["polymer.src.reflected_type","package:polymer/src/reflected_type.dart",,M,{Lh:function(a){var z,y
+z=H.vn(a)
+y=$.av()
+y=z.tu(y,1,J.Z0(y),[])
+return $.Yr().CI(C.to,[y.Ax]).gAx()},w13:{"":"Tp;",
+call$0:function(){var z,y
+for(z=J.GP(J.iY(H.jO(J.bB(H.vn(P.re(C.dA)).Ax).IE).gZ3()));z.G();){y=z.gl()
+if(J.xC(J.Z0(y),"_mangledName"))return y}},
+"+call:0:0":0,
+$isEH:true,
+$is_X0:true}}],["polymer_expressions","package:polymer_expressions/polymer_expressions.dart",,T,{ul:function(a){var z=J.x(a)
+if(typeof a==="object"&&a!==null&&!!z.$isL8){z=J.vo(z.gvc(a),new T.o8(a))
+z=z.zV(z," ")}else z=typeof a==="object"&&a!==null&&(a.constructor===Array||!!z.$iscX)?z.zV(a," "):a
+return z},PX:function(a){var z=J.x(a)
+if(typeof a==="object"&&a!==null&&!!z.$isL8){z=J.C0(z.gvc(a),new T.GL(a))
+z=z.zV(z,";")}else z=typeof a==="object"&&a!==null&&(a.constructor===Array||!!z.$iscX)?z.zV(a,";"):a
+return z},o8:{"":"Tp;a",
+call$1:function(a){var z=this.a
+return J.xC(z.t(z,a),!0)},
+"+call:1:0":0,
+$isEH:true,
+$is_HB:true,
+$is_Dv:true},GL:{"":"Tp;a",
+call$1:function(a){var z=this.a
+return H.d(a)+": "+H.d(z.t(z,a))},
+"+call:1:0":0,
+$isEH:true,
+$is_HB:true,
+$is_Dv:true},e9:{"":"T4;",
+yt:function(a,b,c){var z,y
+if(a==null)return
+z=T.ww(a,null).oK()
+if(M.wR(c)){y=J.x(b)
+if(y.n(b,"bind")||y.n(b,"repeat")){y=J.x(z)
+y=typeof z==="object"&&z!==null&&!!y.$isEZ}else y=!1}else y=!1
+if(y)return
+return new T.Xy(this,b,z)},
+gca:function(){return new T.Dw(this,T.e9.prototype.yt,null,"yt")},
+A5:function(a){return new T.uK(this)}},Xy:{"":"Tp;a,b,c",
+call$2:function(a,b){var z=J.x(a)
+if(typeof a!=="object"||a===null||!z.$isz6)a=new K.z6(null,a,V.WF(this.a.nF,null,null),null)
+z=J.x(b)
+z=typeof b==="object"&&b!==null&&!!z.$iscv
+if(z&&J.xC(this.b,"class"))return T.FL(this.c,a,T.qP)
+if(z&&J.xC(this.b,"style"))return T.FL(this.c,a,T.Fx)
+return T.FL(this.c,a,null)},
+"+call:2:0":0,
+$isEH:true,
+$is_bh:true},uK:{"":"Tp;a",
+call$1:function(a){var z=J.x(a)
+return typeof a==="object"&&a!==null&&!!z.$isz6?a:new K.z6(null,a,V.WF(this.a.nF,null,null),null)},
+"+call:1:0":0,
+$isEH:true,
+$is_HB:true,
+$is_Dv:true},mY:{"":"Pi;qc,jf,Qi,uK,VJ,Ai",
+Qv:function(a){return this.Qi.call$1(a)},
+vr:function(a){var z,y
+z=this.uK
+y=J.x(a)
+if(typeof a==="object"&&a!==null&&!!y.$isfk){y=J.C0(a.bm,new T.mB(this,a))
+this.uK=y.tt(y,!1)}else this.uK=this.Qi==null?a:this.Qv(a)
+F.Wi(this,C.ls,z,this.uK)},
+gnc:function(){return new H.Pm(this,T.mY.prototype.vr,null,"vr")},
+gP:function(a){return this.uK
+"40,38"},
+"+value":1,
+r6:function(a,b){return this.gP(a).call$1(b)},
+sP:function(a,b){var z,y,x,w
+try{K.jX(this.jf,b,this.qc)}catch(y){x=H.Ru(y)
+w=J.x(x)
+if(typeof x==="object"&&x!==null&&!!w.$isB0){z=x
+$.IS().A3("Error evaluating expression '"+H.d(this.jf)+"': "+J.z2(z))}else throw y}"40,112,40,38"},
+"+value=":1,
+Va:function(a,b,c){var z,y,x,w,v
+y=this.jf
+x=y.gju().yI(this.gnc())
+x.fm(x,new T.fE(this))
+try{J.UK(y,new K.Ed(this.qc))
+y.gLl()
+this.vr(y.gLl())}catch(w){x=H.Ru(w)
+v=J.x(x)
+if(typeof x==="object"&&x!==null&&!!v.$isB0){z=x
+$.IS().A3("Error evaluating expression '"+H.d(y)+"': "+J.z2(z))}else throw w}},
+static:{FL:function(a,b,c){var z=new T.mY(b,a.RR(a,new K.G1(b,P.NZ(null,null))),c,null,null,null)
+z.Va(a,b,c)
+return z}}},fE:{"":"Tp;a",
+call$1:function(a){$.IS().A3("Error evaluating expression '"+H.d(this.a.jf)+"': "+H.d(J.z2(a)))},
+"+call:1:0":0,
+$isEH:true,
+$is_HB:true,
+$is_Dv:true},mB:{"":"Tp;a,b",
+call$1:function(a){var z=P.L5(null,null,null,null,null)
+z.u(z,this.b.kF,a)
+return new K.z6(this.a.qc,null,V.WF(z,null,null),null)},
+"+call:1:0":0,
+$isEH:true,
+$is_HB:true,
+$is_Dv:true}}],["polymer_expressions.async","package:polymer_expressions/async.dart",,B,{XF:{"":"xh;vq,L1,VJ,Ai",
+vb:function(a,b){this.vq.yI(new B.iH(b,this))},
+$asxh:function(a){return[null]},
+static:{z4:function(a,b){var z=new B.XF(a,null,null,null)
+H.VM(z,[b])
+z.vb(a,b)
+return z}}},iH:{"":"Tp;a,b",
+call$1:function(a){var z=this.b
+z.L1=F.Wi(z,C.ls,z.L1,a)},
+"+call:1:0":0,
+$isEH:true,
+$is_HB:true,
+$is_Dv:true}}],["polymer_expressions.eval","package:polymer_expressions/eval.dart",,K,{OH:function(a,b){var z=J.UK(a,new K.G1(b,P.NZ(null,null)))
+J.UK(z,new K.Ed(b))
+return z.gLv()},jX:function(a,b,c){var z,y,x,w,v,u,t,s,r,q,p
+z={}
+z.a=a
+y=new K.c4(z)
+x=[]
+H.VM(x,[U.hw])
+for(;w=z.a,v=J.RE(w),typeof w==="object"&&w!==null&&!!v.$isuk;){if(!J.xC(v.gkp(w),"|"))break
+x.push(v.gT8(w))
+z.a=v.gBb(w)}z=z.a
+w=J.x(z)
+if(typeof z==="object"&&z!==null&&!!w.$isw6){u=w.gP(z)
+t=C.OL
+s=!1}else if(typeof z==="object"&&z!==null&&!!w.$isRW){t=z.ghP()
+if(J.xC(w.gbP(z),"[]")){w=z.gre()
+if(0>=w.length)throw H.e(w,0)
+w=w[0]
+v=J.x(w)
+if(typeof w!=="object"||w===null||!v.$isno)y.call$0()
+z=z.gre()
+if(0>=z.length)throw H.e(z,0)
+u=J.Vm(z[0])
+s=!0}else{if(w.gbP(z)!=null){if(z.gre()!=null)y.call$0()
+u=w.gbP(z)}else{y.call$0()
+u=null}s=!1}}else{y.call$0()
+t=null
+u=null
+s=!1}for(z=new H.a7(x,x.length,0,null),H.VM(z,[H.W8(x,"Q",0)]);z.G();){r=z.mD
+q=J.UK(r,new K.G1(c,P.NZ(null,null)))
+J.UK(q,new K.Ed(c))
+q.gLv()
+throw H.b(K.yN("filter must implement Transformer: "+H.d(r)))}p=K.OH(t,c)
+if(p==null)throw H.b(K.yN("Can't assign to null: "+H.d(t)))
+if(s)J.kW(p,u,b)
+else H.vn(p).PU(new H.GD(H.le(u)),b)},ci:function(a){var z=J.x(a)
+if(typeof a==="object"&&a!==null&&!!z.$isqh)return B.z4(a,null)
+return a},Ku:function(a,b){var z=J.x(a)
+return K.ci(typeof a==="object"&&a!==null&&!!z.$iswL?a.lR.F2(a.ex,b,null).Ax:H.Ek(a,b,P.Te(null)))},"+call:2:0":0,wJY:{"":"Tp;",
+call$2:function(a,b){return J.WB(a,b)},
+"+call:2:0":0,
+$isEH:true,
+$is_bh:true},zOQ:{"":"Tp;",
+call$2:function(a,b){return J.xH(a,b)},
+"+call:2:0":0,
+$isEH:true,
+$is_bh:true},W6o:{"":"Tp;",
+call$2:function(a,b){return J.p0(a,b)},
+"+call:2:0":0,
+$isEH:true,
+$is_bh:true},MdQ:{"":"Tp;",
+call$2:function(a,b){return J.FW(a,b)},
+"+call:2:0":0,
+$isEH:true,
+$is_bh:true},YJG:{"":"Tp;",
+call$2:function(a,b){return J.xC(a,b)},
+"+call:2:0":0,
+$isEH:true,
+$is_bh:true},DOe:{"":"Tp;",
+call$2:function(a,b){return!J.xC(a,b)},
+"+call:2:0":0,
+$isEH:true,
+$is_bh:true},lPa:{"":"Tp;",
+call$2:function(a,b){return J.xZ(a,b)},
+"+call:2:0":0,
+$isEH:true,
+$is_bh:true},Ufa:{"":"Tp;",
+call$2:function(a,b){return J.J5(a,b)},
+"+call:2:0":0,
+$isEH:true,
+$is_bh:true},Raa:{"":"Tp;",
+call$2:function(a,b){return J.u6(a,b)},
+"+call:2:0":0,
+$isEH:true,
+$is_bh:true},w0:{"":"Tp;",
+call$2:function(a,b){return J.Hb(a,b)},
+"+call:2:0":0,
+$isEH:true,
+$is_bh:true},w4:{"":"Tp;",
+call$2:function(a,b){return a===!0||b===!0},
+"+call:2:0":0,
+$isEH:true,
+$is_bh:true},w5:{"":"Tp;",
+call$2:function(a,b){return a===!0&&b===!0},
+"+call:2:0":0,
+$isEH:true,
+$is_bh:true},w7:{"":"Tp;",
+call$2:function(a,b){var z=H.zN(b,"HB",null,null,null)
+if(z)return b.call$1(a)
+throw H.b(K.yN("Filters must be a one-argument function."))},
+"+call:2:0":0,
+$isEH:true,
+$is_bh:true},w9:{"":"Tp;",
+call$1:function(a){return a},
+"+call:1:0":0,
+$isEH:true,
+$is_HB:true,
+$is_Dv:true},w10:{"":"Tp;",
+call$1:function(a){return J.Z7(a)},
+"+call:1:0":0,
+$isEH:true,
+$is_HB:true,
+$is_Dv:true},w11:{"":"Tp;",
+call$1:function(a){return a!==!0},
+"+call:1:0":0,
+$isEH:true,
+$is_HB:true,
+$is_Dv:true},c4:{"":"Tp;a",
+call$0:function(){return H.vh(K.yN("Expression is not assignable: "+H.d(this.a.a)))},
+"+call:0:0":0,
+$isEH:true,
+$is_X0:true},z6:{"":"a;eT>,k8,bq,G9",
+gCH:function(){var z=this.G9
+if(z!=null)return z
+this.G9=H.vn(this.k8)
+return this.G9},
+t:function(a,b){var z,y,x,w,v,u
+if(J.xC(b,"this"))return this.k8
+else{z=this.bq.Zp
+if(z.x4(b))return K.ci(z.t(z,b))
+else if(this.k8!=null){y=new H.GD(H.le(b))
+x=J.bB(this.gCH().Ax).IE
+z=$.Sl()
+w=z.t(z,x)
+v=Z.xq(H.tT(H.YC(w==null?x:w),x),y)
+z=J.x(v)
+if(typeof v!=="object"||v===null||!z.$isRY)u=typeof v==="object"&&v!==null&&!!z.$isRS&&v.glT()
+else u=!0
+if(u)return K.ci(this.gCH().tu(y,1,y.hr,[]).Ax)
+else if(typeof v==="object"&&v!==null&&!!z.$isRS)return new K.wL(this.gCH(),y)}}z=this.eT
+if(z!=null)return K.ci(z.t(z,b))
+else throw H.b(K.yN("variable '"+H.d(b)+"' not found"))},
+"+[]:1:0":0,
+tI:function(a){var z
+if(J.xC(a,"this"))return
+else{z=this.bq
+if(z.Zp.x4(a))return z
+else{z=H.le(a)
+if(Z.xq(H.jO(J.bB(this.gCH().Ax).IE),new H.GD(z))!=null)return this.k8}}z=this.eT
+if(z!=null)return z.tI(a)},
+tg:function(a,b){var z
+if(this.bq.Zp.x4(b))return!0
+else{z=H.le(b)
+if(Z.xq(H.jO(J.bB(this.gCH().Ax).IE),new H.GD(z))!=null)return!0}z=this.eT
+if(z!=null)return z.tg(z,b)
+return!1},
+$isz6:true},Ay:{"":"a;bO?,Lv<",
+gju:function(){var z,y
+z=this.k6
+y=new P.Ik(z)
+H.VM(y,[H.W8(z,"WV",0)])
+return y},
+gLl:function(){return this.Lv},
+Qh:function(a){},
+DX:function(a){var z
+this.yc(this,a)
+z=this.bO
+if(z!=null)z.DX(a)},
+yc:function(a,b){var z,y,x
+z=this.tj
+if(z!=null){z.ed()
+this.tj=null}y=this.Lv
+this.Qh(b)
+z=this.Lv
+if(z==null?y!=null:z!==y){x=this.k6
+if(x.Gv>=4)H.vh(x.q7())
+x.Iv(z)}},
+bu:function(a){var z=this.KL
+return z.bu(z)},
+$ishw:true},Ed:{"":"a0;Jd",
+xn:function(a){a.yc(a,this.Jd)},
+ky:function(a){J.UK(a.gT8(a),this)
+a.yc(a,this.Jd)}},G1:{"":"fr;Jd,Le",
+W9:function(a){return new K.Wh(a,null,null,null,P.bK(null,null,!1,null))},
+LT:function(a){var z=a.wz
+return z.RR(z,this)},
+Y7:function(a){var z,y,x,w,v
+z=J.UK(a.ghP(),this)
+y=a.gre()
+if(y==null)x=null
+else{w=this.gnG()
+y.toString
+w=new H.A8(y,w)
+H.VM(w,[null,null])
+x=w.tt(w,!1)}v=new K.fa(z,x,a,null,null,null,P.bK(null,null,!1,null))
+z.sbO(v)
+if(x!=null){x.toString
+H.bQ(x,new K.Os(v))}return v},
+I6:function(a){return new K.x5(a,null,null,null,P.bK(null,null,!1,null))},
+o0:function(a){var z,y,x
+z=new H.A8(a.gPu(a),this.gnG())
+H.VM(z,[null,null])
+y=z.tt(z,!1)
+x=new K.ev(y,a,null,null,null,P.bK(null,null,!1,null))
+H.bQ(y,new K.Dl(x))
+return x},
+YV:function(a){var z,y,x
+z=J.UK(a.gG3(a),this)
+y=J.UK(a.gv4(),this)
+x=new K.jV(z,y,a,null,null,null,P.bK(null,null,!1,null))
+z.sbO(x)
+y.sbO(x)
+return x},
+qv:function(a){return new K.ek(a,null,null,null,P.bK(null,null,!1,null))},
+im:function(a){var z,y,x
+z=J.UK(a.gBb(a),this)
+y=J.UK(a.gT8(a),this)
+x=new K.ky(z,y,a,null,null,null,P.bK(null,null,!1,null))
+z.sbO(x)
+y.sbO(x)
+return x},
+Hx:function(a){var z,y
+z=J.UK(a.gwz(),this)
+y=new K.Jy(z,a,null,null,null,P.bK(null,null,!1,null))
+z.sbO(y)
+return y},
+ky:function(a){var z,y,x
+z=J.UK(a.gBb(a),this)
+y=J.UK(a.gT8(a),this)
+x=new K.VA(z,y,a,null,null,null,P.bK(null,null,!1,null))
+y.sbO(x)
+return x}},Os:{"":"Tp;a",
+call$1:function(a){var z=this.a
+a.sbO(z)
+return z},
+"+call:1:0":0,
+$isEH:true,
+$is_HB:true,
+$is_Dv:true},Dl:{"":"Tp;a",
+call$1:function(a){var z=this.a
+a.sbO(z)
+return z},
+"+call:1:0":0,
+$isEH:true,
+$is_HB:true,
+$is_Dv:true},Wh:{"":"Ay;KL,bO,tj,Lv,k6",
+Qh:function(a){this.Lv=a.k8},
+RR:function(a,b){return b.W9(this)},
+$asAy:function(){return[U.EZ]},
+$isEZ:true,
+$ishw:true},x5:{"":"Ay;KL,bO,tj,Lv,k6",
+gP:function(a){var z=this.KL
+return z.gP(z)},
+"+value":0,
+r6:function(a,b){return this.gP(a).call$1(b)},
+Qh:function(a){var z=this.KL
+this.Lv=z.gP(z)},
+RR:function(a,b){return b.I6(this)},
+$asAy:function(){return[U.no]},
+$asno:function(){return[null]},
+$isno:true,
+$ishw:true},ev:{"":"Ay;Pu>,KL,bO,tj,Lv,k6",
+Qh:function(a){this.Lv=H.n3(this.Pu,P.L5(null,null,null,null,null),new K.ID())},
+RR:function(a,b){return b.o0(this)},
+$asAy:function(){return[U.kB]},
+$iskB:true,
+$ishw:true},ID:{"":"Tp;",
+call$2:function(a,b){J.kW(a,J.WI(b).gLv(),b.gv4().gLv())
+return a},
+"+call:2:0":0,
+$isEH:true,
+$is_bh:true},jV:{"":"Ay;G3>,v4<,KL,bO,tj,Lv,k6",
+RR:function(a,b){return b.YV(this)},
+$asAy:function(){return[U.ae]},
+$isae:true,
+$ishw:true},ek:{"":"Ay;KL,bO,tj,Lv,k6",
+gP:function(a){var z=this.KL
+return z.gP(z)},
+"+value":0,
+r6:function(a,b){return this.gP(a).call$1(b)},
+Qh:function(a){var z,y,x
+z=this.KL
+this.Lv=a.t(a,z.gP(z))
+y=a.tI(z.gP(z))
+x=J.RE(y)
+if(typeof y==="object"&&y!==null&&!!x.$isd3){z=H.le(z.gP(z))
+this.tj=x.gqh(y).yI(new K.OC(this,a,new H.GD(z)))}},
+RR:function(a,b){return b.qv(this)},
+$asAy:function(){return[U.w6]},
+$isw6:true,
+$ishw:true},OC:{"":"Tp;a,b,c",
+call$1:function(a){if(J.ja(a,new K.Xm(this.c))===!0)this.a.DX(this.b)},
+"+call:1:0":0,
+$isEH:true,
+$is_HB:true,
+$is_Dv:true},Xm:{"":"Tp;d",
+call$1:function(a){var z=J.x(a)
+return typeof a==="object"&&a!==null&&!!z.$isqI&&J.xC(a.oc,this.d)},
+"+call:1:0":0,
+$isEH:true,
+$is_HB:true,
+$is_Dv:true},Jy:{"":"Ay;wz<,KL,bO,tj,Lv,k6",
+gkp:function(a){var z=this.KL
+return z.gkp(z)},
+Qh:function(a){var z,y,x
+z=$.YG()
+y=this.KL
+x=z.t(z,y.gkp(y))
+if(J.xC(y.gkp(y),"!")){z=this.wz.gLv()
+this.Lv=x.call$1(z==null?!1:z)}else{z=this.wz.gLv()
+this.Lv=z==null?null:x.call$1(z)}},
+RR:function(a,b){return b.Hx(this)},
+$asAy:function(){return[U.jK]},
+$isjK:true,
+$ishw:true},ky:{"":"Ay;Bb>,T8>,KL,bO,tj,Lv,k6",
+gkp:function(a){var z=this.KL
+return z.gkp(z)},
+Qh:function(a){var z,y,x
+z=$.bF()
+y=this.KL
+x=z.t(z,y.gkp(y))
+if(J.xC(y.gkp(y),"&&")||J.xC(y.gkp(y),"||")){z=this.Bb.gLv()
+if(z==null)z=!1
+y=this.T8.gLv()
+this.Lv=x.call$2(z,y==null?!1:y)}else if(J.xC(y.gkp(y),"==")||J.xC(y.gkp(y),"!="))this.Lv=x.call$2(this.Bb.gLv(),this.T8.gLv())
+else{z=this.Bb.gLv()
+if(z==null||this.T8.gLv()==null)this.Lv=null
+else this.Lv=x.call$2(z,this.T8.gLv())}},
+RR:function(a,b){return b.im(this)},
+$asAy:function(){return[U.uk]},
+$isuk:true,
+$ishw:true},fa:{"":"Ay;hP<,re<,KL,bO,tj,Lv,k6",
+glT:function(){return this.KL.glT()},
+gbP:function(a){var z=this.KL
+return z.gbP(z)},
+Qh:function(a){var z,y,x,w,v,u
+z=this.re
+if(z==null)y=[]
+else{z.toString
+z=new H.A8(z,new K.WW())
+H.VM(z,[null,null])
+y=z.tt(z,!1)}x=this.hP.gLv()
+if(x==null)this.Lv=null
+else{z=this.KL
+if(z.gbP(z)==null)if(z.glT())this.Lv=x
+else this.Lv=K.Ku(x,y)
+else if(J.xC(z.gbP(z),"[]")){if(0>=y.length)throw H.e(y,0)
+w=y[0]
+z=J.U6(x)
+this.Lv=z.t(x,w)
+if(typeof x==="object"&&x!==null&&!!z.$isd3)this.tj=z.gqh(x).yI(new K.vQ(this,a,w))}else{v=H.vn(x)
+u=new H.GD(H.le(z.gbP(z)))
+this.Lv=z.glT()?v.rN(u).Ax:v.F2(u,y,null).Ax
+z=J.RE(x)
+if(typeof x==="object"&&x!==null&&!!z.$isd3)this.tj=z.gqh(x).yI(new K.jh(this,a,u))}}},
+RR:function(a,b){return b.Y7(this)},
+$asAy:function(){return[U.RW]},
+$isRW:true,
+$ishw:true},WW:{"":"Tp;",
+call$1:function(a){return a.gLv()},
+"+call:1:0":0,
+$isEH:true,
+$is_HB:true,
+$is_Dv:true},vQ:{"":"Tp;a,b,c",
+call$1:function(a){if(J.ja(a,new K.a9(this.c))===!0)this.a.DX(this.b)},
+"+call:1:0":0,
+$isEH:true,
+$is_HB:true,
+$is_Dv:true},a9:{"":"Tp;d",
+call$1:function(a){var z=J.x(a)
+return typeof a==="object"&&a!==null&&!!z.$isHA&&J.xC(a.G3,this.d)},
+"+call:1:0":0,
+$isEH:true,
+$is_HB:true,
+$is_Dv:true},jh:{"":"Tp;e,f,g",
+call$1:function(a){if(J.ja(a,new K.e3(this.g))===!0)this.e.DX(this.f)},
+"+call:1:0":0,
+$isEH:true,
+$is_HB:true,
+$is_Dv:true},e3:{"":"Tp;h",
+call$1:function(a){var z=J.x(a)
+return typeof a==="object"&&a!==null&&!!z.$isqI&&J.xC(a.oc,this.h)},
+"+call:1:0":0,
+$isEH:true,
+$is_HB:true,
+$is_Dv:true},VA:{"":"Ay;Bb>,T8>,KL,bO,tj,Lv,k6",
+Qh:function(a){var z,y,x,w
+z=this.Bb
+y=this.T8.gLv()
+x=J.x(y)
+if((typeof y!=="object"||y===null||y.constructor!==Array&&!x.$iscX)&&y!=null)throw H.b(K.yN("right side of 'in' is not an iterator"))
+if(typeof y==="object"&&y!==null&&!!x.$iswn)this.tj=y.gRT().yI(new K.J1(this,a))
+x=J.Vm(z)
+w=y!=null?y:C.xD
+this.Lv=new K.fk(x,w)},
+RR:function(a,b){return b.ky(this)},
+$asAy:function(){return[U.K9]},
+$isK9:true,
+$ishw:true},J1:{"":"Tp;a,b",
+call$1:function(a){return this.a.DX(this.b)},
+"+call:1:0":0,
+$isEH:true,
+$is_HB:true,
+$is_Dv:true},fk:{"":"a;kF,bm",$isfk:true},wL:{"":"a;lR,ex",
+call$1:function(a){return this.lR.F2(this.ex,[a],null).Ax},
+"+call:1:0":0,
+$iswL:true,
+$isEH:true,
+$is_HB:true,
+$is_Dv:true},B0:{"":"a;G1>",
+bu:function(a){return"EvalException: "+this.G1},
+$isB0:true,
+static:{yN:function(a){return new K.B0(a)}}}}],["polymer_expressions.expression","package:polymer_expressions/expression.dart",,U,{ZP:function(a,b){var z,y,x
+z=J.x(a)
+if(z.n(a,b))return!0
+if(a==null||b==null)return!1
+if(!J.xC(z.gB(a),b.length))return!1
+y=0
+while(!0){x=z.gB(a)
+if(typeof x!=="number")throw H.s(x)
+if(!(y<x))break
+x=z.t(a,y)
+if(y>=b.length)throw H.e(b,y)
+if(!J.xC(x,b[y]))return!1;++y}return!0},au:function(a){a.toString
+return U.Up(H.n3(a,0,new U.xs()))},Zm:function(a,b){var z=J.WB(a,b)
+if(typeof z!=="number")throw H.s(z)
+a=536870911&z
+a=536870911&a+((524287&a)<<10>>>0)
+return(a^C.jn.m(a,6))>>>0},Up:function(a){if(typeof a!=="number")throw H.s(a)
+a=536870911&a+((67108863&a)<<3>>>0)
+a=(a^C.jn.m(a,11))>>>0
+return 536870911&a+((16383&a)<<15>>>0)},Fq:{"":"a;",
+F2:function(a,b,c){return new U.RW(a,b,c)},
+"+invoke:3:0":0,
+"*invoke":[40],
+CI:function(a,b){return this.F2(a,b,null)},
+"+invoke:2:0":0},hw:{"":"a;",$ishw:true},EZ:{"":"hw;",
+RR:function(a,b){return b.W9(this)},
+$isEZ:true},no:{"":"hw;P>",
+r6:function(a,b){return this.P.call$1(b)},
+RR:function(a,b){return b.I6(this)},
+bu:function(a){var z=this.P
+return typeof z==="string"?"\""+H.d(z)+"\"":H.d(z)},
+n:function(a,b){var z
+if(b==null)return!1
+z=H.RB(b,"$isno",[H.W8(this,"no",0)],"$asno")
+return z&&J.xC(J.Vm(b),this.P)},
+giO:function(a){return J.v1(this.P)},
+$isno:true},kB:{"":"hw;Pu>",
+RR:function(a,b){return b.o0(this)},
+bu:function(a){return"{"+H.d(this.Pu)+"}"},
+n:function(a,b){var z
+if(b==null)return!1
+z=J.RE(b)
+return typeof b==="object"&&b!==null&&!!z.$iskB&&U.ZP(z.gPu(b),this.Pu)},
+giO:function(a){return U.au(this.Pu)},
+$iskB:true},ae:{"":"hw;G3>,v4<",
+RR:function(a,b){return b.YV(this)},
+bu:function(a){return H.d(this.G3)+": "+H.d(this.v4)},
+n:function(a,b){var z
+if(b==null)return!1
+z=J.RE(b)
+return typeof b==="object"&&b!==null&&!!z.$isae&&J.xC(z.gG3(b),this.G3)&&J.xC(b.gv4(),this.v4)},
+giO:function(a){var z,y
+z=J.v1(this.G3.P)
+y=J.v1(this.v4)
+return U.Up(U.Zm(U.Zm(0,z),y))},
+$isae:true},Iq:{"":"hw;wz",
+RR:function(a,b){return b.LT(this)},
+bu:function(a){return"("+H.d(this.wz)+")"},
+n:function(a,b){var z
+if(b==null)return!1
+z=J.x(b)
+return typeof b==="object"&&b!==null&&!!z.$isIq&&J.xC(b.wz,this.wz)},
+giO:function(a){return J.v1(this.wz)},
+$isIq:true},w6:{"":"hw;P>",
+r6:function(a,b){return this.P.call$1(b)},
+RR:function(a,b){return b.qv(this)},
+bu:function(a){return this.P},
+n:function(a,b){var z
+if(b==null)return!1
+z=J.RE(b)
+return typeof b==="object"&&b!==null&&!!z.$isw6&&J.xC(z.gP(b),this.P)},
+giO:function(a){return J.v1(this.P)},
+$isw6:true},jK:{"":"hw;kp>,wz<",
+RR:function(a,b){return b.Hx(this)},
+bu:function(a){return H.d(this.kp)+" "+H.d(this.wz)},
+n:function(a,b){var z
+if(b==null)return!1
+z=J.RE(b)
+return typeof b==="object"&&b!==null&&!!z.$isjK&&J.xC(z.gkp(b),this.kp)&&J.xC(b.gwz(),this.wz)},
+giO:function(a){var z,y
+z=J.v1(this.kp)
+y=J.v1(this.wz)
+return U.Up(U.Zm(U.Zm(0,z),y))},
+$isjK:true},uk:{"":"hw;kp>,Bb>,T8>",
+RR:function(a,b){return b.im(this)},
+bu:function(a){return"("+H.d(this.Bb)+" "+H.d(this.kp)+" "+H.d(this.T8)+")"},
+n:function(a,b){var z
+if(b==null)return!1
+z=J.RE(b)
+return typeof b==="object"&&b!==null&&!!z.$isuk&&J.xC(z.gkp(b),this.kp)&&J.xC(z.gBb(b),this.Bb)&&J.xC(z.gT8(b),this.T8)},
+giO:function(a){var z,y,x
+z=J.v1(this.kp)
+y=J.v1(this.Bb)
+x=J.v1(this.T8)
+return U.Up(U.Zm(U.Zm(U.Zm(0,z),y),x))},
+$isuk:true},K9:{"":"hw;Bb>,T8>",
+RR:function(a,b){return b.ky(this)},
+bu:function(a){return"("+H.d(this.Bb)+" in "+H.d(this.T8)+")"},
+n:function(a,b){var z
+if(b==null)return!1
+z=J.RE(b)
+return typeof b==="object"&&b!==null&&!!z.$isK9&&J.xC(z.gBb(b),this.Bb)&&J.xC(z.gT8(b),this.T8)},
+giO:function(a){var z,y
+z=this.Bb
+z=z.giO(z)
+y=J.v1(this.T8)
+return U.Up(U.Zm(U.Zm(0,z),y))},
+$isK9:true},RW:{"":"hw;hP<,bP>,re<",
+RR:function(a,b){return b.Y7(this)},
+glT:function(){return this.re==null},
+bu:function(a){return H.d(this.hP)+"."+H.d(this.bP)+"("+H.d(this.re)+")"},
+n:function(a,b){var z
+if(b==null)return!1
+z=J.RE(b)
+return typeof b==="object"&&b!==null&&!!z.$isRW&&J.xC(b.ghP(),this.hP)&&J.xC(z.gbP(b),this.bP)&&U.ZP(b.gre(),this.re)},
+giO:function(a){var z,y,x
+z=J.v1(this.hP)
+y=J.v1(this.bP)
+x=U.au(this.re)
+return U.Up(U.Zm(U.Zm(U.Zm(0,z),y),x))},
+$isRW:true},xs:{"":"Tp;",
+call$2:function(a,b){return U.Zm(a,J.v1(b))},
+"+call:2:0":0,
+$isEH:true,
+$is_bh:true}}],["polymer_expressions.parser","package:polymer_expressions/parser.dart",,T,{FX:{"":"a;Sk,Ix,ku,fL,lQ",
+oK:function(){var z,y
+this.ku=this.Ix.zl()
+z=this.ku
+z.toString
+y=new H.a7(z,z.length,0,null)
+H.VM(y,[H.W8(z,"Q",0)])
+this.fL=y
+this.w5()
+return this.o9()},
+Gd:function(a,b){var z
+if(!(a!=null&&!J.xC(J.Iz(this.lQ),a)))z=b!=null&&!J.xC(J.Vm(this.lQ),b)
+else z=!0
+if(z)throw H.b(Y.RV("Expected "+b+": "+H.d(this.lQ)))
+this.lQ=this.fL.G()?this.fL.mD:null},
+w5:function(){return this.Gd(null,null)},
+o9:function(){if(this.lQ==null){this.Sk.toString
+return C.OL}var z=this.Dl()
+return z==null?null:this.BH(z,0)},
+BH:function(a,b){var z,y,x,w
+for(z=this.Sk;y=this.lQ,y!=null;)if(J.xC(J.Iz(y),9))if(J.xC(J.Vm(this.lQ),"(")){x=this.qk()
+z.toString
+a=new U.RW(a,null,x)}else if(J.xC(J.Vm(this.lQ),"[")){w=this.bK()
+x=w==null?[]:[w]
+z.toString
+a=new U.RW(a,"[]",x)}else break
+else if(J.xC(J.Iz(this.lQ),3)){this.w5()
+a=this.ct(a,this.Dl())}else if(J.xC(J.Iz(this.lQ),10)&&J.xC(J.Vm(this.lQ),"in"))a=this.xo(a)
+else if(J.xC(J.Iz(this.lQ),8)&&J.J5(this.lQ.gG8(),b))a=this.Tw(a)
+else break
+return a},
+ct:function(a,b){var z,y
+if(typeof b==="object"&&b!==null&&!!b.$isw6){z=b.gP(b)
+this.Sk.toString
+return new U.RW(a,z,null)}else{if(typeof b==="object"&&b!==null&&!!b.$isRW){z=b.ghP()
+y=J.x(z)
+y=typeof z==="object"&&z!==null&&!!y.$isw6
+z=y}else z=!1
+if(z){z=J.Vm(b.ghP())
+y=b.gre()
+this.Sk.toString
+return new U.RW(a,z,y)}else throw H.b(Y.RV("expected identifier: "+H.d(b)))}},
+Tw:function(a){var z,y,x
+z=this.lQ
+this.w5()
+y=this.Dl()
+while(!0){x=this.lQ
+if(x!=null)x=(J.xC(J.Iz(x),8)||J.xC(J.Iz(this.lQ),3)||J.xC(J.Iz(this.lQ),9))&&J.xZ(this.lQ.gG8(),z.gG8())
+else x=!1
+if(!x)break
+y=this.BH(y,this.lQ.gG8())}x=J.Vm(z)
+this.Sk.toString
+return new U.uk(x,a,y)},
+Dl:function(){var z,y,x,w
+if(J.xC(J.Iz(this.lQ),8)){z=J.Vm(this.lQ)
+y=J.x(z)
+if(y.n(z,"+")||y.n(z,"-")){this.w5()
+if(J.xC(J.Iz(this.lQ),6)){y=H.BU(H.d(z)+H.d(J.Vm(this.lQ)),null,null)
+this.Sk.toString
+z=new U.no(y)
+z.$builtinTypeInfo=[null]
+this.w5()
+return z}else{y=this.Sk
+if(J.xC(J.Iz(this.lQ),7)){x=H.IH(H.d(z)+H.d(J.Vm(this.lQ)),null)
+y.toString
+z=new U.no(x)
+z.$builtinTypeInfo=[null]
+this.w5()
+return z}else{w=this.BH(this.lb(),11)
+y.toString
+return new U.jK(z,w)}}}else if(y.n(z,"!")){this.w5()
+w=this.BH(this.lb(),11)
+this.Sk.toString
+return new U.jK(z,w)}}return this.lb()},
+lb:function(){var z,y
+switch(J.Iz(this.lQ)){case 10:z=J.Vm(this.lQ)
+y=J.x(z)
+if(y.n(z,"this")){this.w5()
+this.Sk.toString
+return new U.w6("this")}else if(y.n(z,"in"))return
+throw H.b(new P.AT("unrecognized keyword: "+H.d(z)))
+case 2:return this.Cy()
+case 1:return this.qF()
+case 6:return this.Ud()
+case 7:return this.tw()
+case 9:if(J.xC(J.Vm(this.lQ),"("))return this.Pj()
+else if(J.xC(J.Vm(this.lQ),"{"))return this.Wc()
+return
+default:return}},
+Wc:function(){var z,y,x,w
+z=[]
+y=this.Sk
+do{this.w5()
+if(J.xC(J.Iz(this.lQ),9)&&J.xC(J.Vm(this.lQ),"}"))break
+x=J.Vm(this.lQ)
+y.toString
+w=new U.no(x)
+w.$builtinTypeInfo=[null]
+this.w5()
+this.Gd(5,":")
+z.push(new U.ae(w,this.o9()))
+x=this.lQ}while(x!=null&&J.xC(J.Vm(x),","))
+this.Gd(9,"}")
+return new U.kB(z)},
+xo:function(a){var z,y
+z=J.x(a)
+if(typeof a!=="object"||a===null||!z.$isw6)throw H.b(Y.RV("in... statements must start with an identifier"))
+this.w5()
+y=this.o9()
+this.Sk.toString
+return new U.K9(a,y)},
+Cy:function(){var z,y,x
+if(J.xC(J.Vm(this.lQ),"true")){this.w5()
+this.Sk.toString
+z=new U.no(!0)
+H.VM(z,[null])
+return z}if(J.xC(J.Vm(this.lQ),"false")){this.w5()
+this.Sk.toString
+z=new U.no(!1)
+H.VM(z,[null])
+return z}if(J.xC(J.Vm(this.lQ),"null")){this.w5()
+this.Sk.toString
+z=new U.no(null)
+H.VM(z,[null])
+return z}y=this.nt()
+x=this.qk()
+if(x==null)return y
+else{this.Sk.toString
+return new U.RW(y,null,x)}},
+nt:function(){if(!J.xC(J.Iz(this.lQ),2))throw H.b(Y.RV("expected identifier: "+H.d(this.lQ)+".value"))
+var z=J.Vm(this.lQ)
+this.w5()
+this.Sk.toString
+return new U.w6(z)},
+qk:function(){var z,y
+z=this.lQ
+if(z!=null&&J.xC(J.Iz(z),9)&&J.xC(J.Vm(this.lQ),"(")){y=[]
+do{this.w5()
+if(J.xC(J.Iz(this.lQ),9)&&J.xC(J.Vm(this.lQ),")"))break
+y.push(this.o9())
+z=this.lQ}while(z!=null&&J.xC(J.Vm(z),","))
+this.Gd(9,")")
+return y}return},
+bK:function(){var z,y
+z=this.lQ
+if(z!=null&&J.xC(J.Iz(z),9)&&J.xC(J.Vm(this.lQ),"[")){this.w5()
+y=this.o9()
+this.Gd(9,"]")
+return y}return},
+Pj:function(){this.w5()
+var z=this.o9()
+this.Gd(9,")")
+this.Sk.toString
+return new U.Iq(z)},
+qF:function(){var z,y
+z=J.Vm(this.lQ)
+this.Sk.toString
+y=new U.no(z)
+H.VM(y,[null])
+this.w5()
+return y},
+pT:function(a){var z,y
+z=H.BU(H.d(a)+H.d(J.Vm(this.lQ)),null,null)
+this.Sk.toString
+y=new U.no(z)
+H.VM(y,[null])
+this.w5()
+return y},
+Ud:function(){return this.pT("")},
+yj:function(a){var z,y
+z=H.IH(H.d(a)+H.d(J.Vm(this.lQ)),null)
+this.Sk.toString
+y=new U.no(z)
+H.VM(y,[null])
+this.w5()
+return y},
+tw:function(){return this.yj("")},
+static:{ww:function(a,b){var z,y,x
+z=[]
+H.VM(z,[Y.Pn])
+y=P.p9("")
+x=new U.Fq()
+return new T.FX(x,new Y.hc(z,y,new P.WU(a,0,0,null),null),null,null,null)}}}}],["polymer_expressions.src.globals","package:polymer_expressions/src/globals.dart",,K,{Dc:function(a){var z=new K.Bt(a)
+H.VM(z,[null])
+return z},Ae:{"":"a;vH>-,P>-",
+r6:function(a,b){return this.P.call$1(b)},
+$isAe:true,
+"@":function(){return[C.nJ]},
+"<>":[3],
+static:{i0:function(a,b,c){var z=new K.Ae(a,b)
+H.VM(z,[c])
+return z
+"28,29,30,31,32"},"+new IndexedValue:2:0":1}},"+IndexedValue": [0],Bt:{"":"mW;YR",
+gA:function(a){var z=J.GP(this.YR)
+z=new K.vR(z,0,null)
+H.VM(z,[H.W8(this,"Bt",0)])
+return z},
+gB:function(a){return J.q8(this.YR)},
+"+length":0,
+gl0:function(a){return J.FN(this.YR)},
+"+isEmpty":0,
+grZ:function(a){var z,y,x
+z=this.YR
+y=J.U6(z)
+x=J.xH(y.gB(z),1)
+z=y.grZ(z)
+z=new K.Ae(x,z)
+H.VM(z,[H.W8(this,"Bt",0)])
+return z},
+Zv:function(a,b){var z=J.i4(this.YR,b)
+z=new K.Ae(b,z)
+H.VM(z,[H.W8(this,"Bt",0)])
+return z},
+$asmW:function(a){return[[K.Ae,a]]},
+$ascX:function(a){return[[K.Ae,a]]}},vR:{"":"eL;Ee,wX,CD",
+gl:function(){return this.CD},
+"+current":0,
+G:function(){var z,y
+z=this.Ee
+if(z.G()){y=this.wX
+this.wX=y+1
+z=new K.Ae(y,z.gl())
+H.VM(z,[null])
+this.CD=z
+return!0}this.CD=null
+return!1},
+$aseL:function(a){return[[K.Ae,a]]}}}],["polymer_expressions.src.mirrors","package:polymer_expressions/src/mirrors.dart",,Z,{xq:function(a,b){var z,y,x
+if(a.gYK().x4(b)===!0)return J.UQ(a.gYK(),b)
+z=a.gAY()
+if(z!=null&&!J.xC(z.gvd(),C.PU)){y=Z.xq(a.gAY(),b)
+if(y!=null)return y}for(x=J.GP(a.gkZ());x.G();){y=Z.xq(x.gl(),b)
+if(y!=null)return y}return}}],["polymer_expressions.tokenizer","package:polymer_expressions/tokenizer.dart",,Y,{TI:function(a){var z
+if(typeof a!=="number")throw H.s(a)
+if(!(97<=a&&a<=122))z=65<=a&&a<=90||a===95||a===36||a>127
+else z=!0
+return z},KH:function(a){var z
+if(typeof a!=="number")throw H.s(a)
+if(!(97<=a&&a<=122))if(!(65<=a&&a<=90))z=48<=a&&a<=57||a===95||a===36||a>127
+else z=!0
+else z=!0
+return z},aK:function(a){switch(a){case 102:return 12
+case 110:return 10
+case 114:return 13
+case 116:return 9
+case 118:return 11
+default:return a}},Pn:{"":"a;fY>,P>,G8<",
+r6:function(a,b){return this.P.call$1(b)},
+bu:function(a){return"("+this.fY+", '"+this.P+"')"},
+$isPn:true},hc:{"":"a;MV,wV,jI,x0",
+zl:function(){var z,y,x,w,v
+z=this.jI
+this.x0=z.G()?z.Wn:null
+for(y=this.MV;x=this.x0,x!=null;)if(x===32||x===9||x===160)this.x0=z.G()?z.Wn:null
+else if(x===34||x===39)this.DS()
+else if(Y.TI(x))this.y3()
+else{x=this.x0
+if(typeof x!=="number")throw H.s(x)
+if(48<=x&&x<=57)this.jj()
+else if(x===46){this.x0=z.G()?z.Wn:null
+x=this.x0
+if(typeof x!=="number")throw H.s(x)
+if(48<=x&&x<=57)this.e1()
+else y.push(new Y.Pn(3,".",11))}else if(x===44){this.x0=z.G()?z.Wn:null
+y.push(new Y.Pn(4,",",0))}else if(x===58){this.x0=z.G()?z.Wn:null
+y.push(new Y.Pn(5,":",0))}else if(C.Nm.tg(C.xu,x))this.yV()
+else if(C.Nm.tg(C.iq,this.x0)){w=P.O8(1,this.x0,J.im)
+w.$builtinTypeInfo=[J.im]
+v=H.eT(w)
+y.push(new Y.Pn(9,v,C.dj.t(C.dj,v)))
+this.x0=z.G()?z.Wn:null}else this.x0=z.G()?z.Wn:null}return y},
+DS:function(){var z,y,x,w,v
+z=this.x0
+y=this.jI
+this.x0=y.G()?y.Wn:null
+for(x=this.wV;w=this.x0,w==null?z!=null:w!==z;){if(w==null)throw H.b(Y.RV("unterminated string"))
+if(w===92){this.x0=y.G()?y.Wn:null
+w=this.x0
+if(w==null)throw H.b(Y.RV("unterminated string"))
+v=P.O8(1,Y.aK(w),J.im)
+v.$builtinTypeInfo=[J.im]
+w=H.eT(v)
+x.vM=x.vM+w}else{v=P.O8(1,w,J.im)
+v.$builtinTypeInfo=[J.im]
+w=H.eT(v)
+x.vM=x.vM+w}this.x0=y.G()?y.Wn:null}this.MV.push(new Y.Pn(1,x.vM,0))
+x.vM=""
+this.x0=y.G()?y.Wn:null},
+y3:function(){var z,y,x,w,v
+z=this.jI
+y=this.wV
+while(!0){x=this.x0
+if(!(x!=null&&Y.KH(x)))break
+w=P.O8(1,this.x0,J.im)
+w.$builtinTypeInfo=[J.im]
+x=H.eT(w)
+y.vM=y.vM+x
+this.x0=z.G()?z.Wn:null}v=y.vM
+z=this.MV
+if(C.Nm.tg(C.Qy,v))z.push(new Y.Pn(10,v,0))
+else z.push(new Y.Pn(2,v,0))
+y.vM=""},
+jj:function(){var z,y,x,w,v
+z=this.jI
+y=this.wV
+while(!0){x=this.x0
+if(x!=null){if(typeof x!=="number")throw H.s(x)
+w=48<=x&&x<=57}else w=!1
+if(!w)break
+v=P.O8(1,x,J.im)
+v.$builtinTypeInfo=[J.im]
+x=H.eT(v)
+y.vM=y.vM+x
+this.x0=z.G()?z.Wn:null}if(x===46){this.x0=z.G()?z.Wn:null
+z=this.x0
+if(typeof z!=="number")throw H.s(z)
+if(48<=z&&z<=57)this.e1()
+else this.MV.push(new Y.Pn(3,".",11))}else{this.MV.push(new Y.Pn(6,y.vM,0))
+y.vM=""}},
+e1:function(){var z,y,x,w,v
+z=this.wV
+z.KF(P.fc(46))
+y=this.jI
+while(!0){x=this.x0
+if(x!=null){if(typeof x!=="number")throw H.s(x)
+w=48<=x&&x<=57}else w=!1
+if(!w)break
+v=P.O8(1,x,J.im)
+v.$builtinTypeInfo=[J.im]
+x=H.eT(v)
+z.vM=z.vM+x
+this.x0=y.G()?y.Wn:null}this.MV.push(new Y.Pn(7,z.vM,0))
+z.vM=""},
+yV:function(){var z,y,x,w,v,u
+z=this.x0
+y=this.jI
+this.x0=y.G()?y.Wn:null
+if(C.Nm.tg(C.xu,this.x0)){x=this.x0
+w=H.eT([z,x])
+if(C.Nm.tg(C.u0,w)){this.x0=y.G()?y.Wn:null
+v=w}else{u=P.O8(1,z,J.im)
+u.$builtinTypeInfo=[J.im]
+v=H.eT(u)}}else{u=P.O8(1,z,J.im)
+u.$builtinTypeInfo=[J.im]
+v=H.eT(u)}this.MV.push(new Y.Pn(8,v,C.dj.t(C.dj,v)))}},hA:{"":"a;G1>",
+bu:function(a){return"ParseException: "+this.G1},
+static:{RV:function(a){return new Y.hA(a)}}}}],["polymer_expressions.visitor","package:polymer_expressions/visitor.dart",,S,{fr:{"":"a;",
+DV:function(a){return J.UK(a,this)},
+gnG:function(){return new H.Pm(this,S.fr.prototype.DV,null,"DV")}},a0:{"":"fr;",
+W9:function(a){return this.xn(a)},
+LT:function(a){a.RR(a,this)
+this.xn(a)},
+Y7:function(a){var z,y
+J.UK(a.ghP(),this)
+z=a.gre()
+if(z!=null)for(z.toString,y=new H.a7(z,z.length,0,null),H.VM(y,[H.W8(z,"Q",0)]);y.G();)J.UK(y.mD,this)
+this.xn(a)},
+I6:function(a){return this.xn(a)},
+o0:function(a){var z,y
+for(z=a.gPu(a),y=new H.a7(z,z.length,0,null),H.VM(y,[H.W8(z,"Q",0)]);y.G();)J.UK(y.mD,this)
+this.xn(a)},
+YV:function(a){J.UK(a.gG3(a),this)
+J.UK(a.gv4(),this)
+this.xn(a)},
+qv:function(a){return this.xn(a)},
+im:function(a){J.UK(a.gBb(a),this)
+J.UK(a.gT8(a),this)
+this.xn(a)},
+Hx:function(a){J.UK(a.gwz(),this)
+this.xn(a)},
+ky:function(a){J.UK(a.gBb(a),this)
+J.UK(a.gT8(a),this)
+this.xn(a)}}}],["response_viewer_element","package:observatory/src/observatory_elements/response_viewer.dart",,Q,{NQ:{"":["uL;tH-,VJ,Ai,VJ,Ai,ZI,uN,z3,TQ,Vk,Ye,mT,KM-",null,null,null,null,null,null,null,null,null,null,null,null,function(){return[C.nJ]}],
+"@":function(){return[C.Ig]},
+static:{Zo:function(a){var z,y,x,w,v
+z=$.Nd()
+y=P.Py(null,null,null,J.O,W.I0)
+x=J.O
+w=W.cv
+v=new V.br(P.Py(null,null,null,x,w),null,null)
+H.VM(v,[x,w])
+a.Ye=z
+a.mT=y
+a.KM=v
+C.Cc.ZL(a)
+C.Cc.FH(a)
+return a
+"33"},"+new ResponseViewerElement$created:0:0":1}},"+ResponseViewerElement": [27]}],["script_view_element","package:observatory/src/observatory_elements/script_view.dart",,U,{fI:{"":["V0;Uz%-,VJ,Ai,tH-,VJ,Ai,VJ,Ai,ZI,uN,z3,TQ,Vk,Ye,mT,KM-",null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,function(){return[C.nJ]}],
+gNl:function(a){return a.Uz
+"37,38,39"},
+"+script":1,
+sNl:function(a,b){a.Uz=this.pD(a,C.fX,a.Uz,b)
+"40,31,37,38"},
+"+script=":1,
+"@":function(){return[C.Er]},
+static:{Ry:function(a){var z,y,x,w,v
+z=$.Nd()
+y=P.Py(null,null,null,J.O,W.I0)
+x=J.O
+w=W.cv
+v=new V.br(P.Py(null,null,null,x,w),null,null)
+H.VM(v,[x,w])
+a.Ye=z
+a.mT=y
+a.KM=v
+C.cJ.ZL(a)
+C.cJ.FH(a)
+return a
+"34"},"+new ScriptViewElement$created:0:0":1}},"+ScriptViewElement": [113],V0:{"":"uL+Pi;",$isd3:true}}],["source_view_element","package:observatory/src/observatory_elements/source_view.dart",,X,{kK:{"":["V4;vX%-,VJ,Ai,tH-,VJ,Ai,VJ,Ai,ZI,uN,z3,TQ,Vk,Ye,mT,KM-",null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,function(){return[C.nJ]}],
+gFF:function(a){return a.vX
+"114,38,39"},
+"+source":1,
+sFF:function(a,b){a.vX=this.pD(a,C.hn,a.vX,b)
+"40,31,114,38"},
+"+source=":1,
+"@":function(){return[C.H8]},
+static:{HO:function(a){var z,y,x,w,v
+z=$.Nd()
+y=P.Py(null,null,null,J.O,W.I0)
+x=J.O
+w=W.cv
+v=new V.br(P.Py(null,null,null,x,w),null,null)
+H.VM(v,[x,w])
+a.Ye=z
+a.mT=y
+a.KM=v
+C.Ks.ZL(a)
+C.Ks.FH(a)
+return a
+"35"},"+new SourceViewElement$created:0:0":1}},"+SourceViewElement": [115],V4:{"":"uL+Pi;",$isd3:true}}],["stack_trace_element","package:observatory/src/observatory_elements/stack_trace.dart",,X,{uw:{"":["V6;V4%-,VJ,Ai,tH-,VJ,Ai,VJ,Ai,ZI,uN,z3,TQ,Vk,Ye,mT,KM-",null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,function(){return[C.nJ]}],
+gtN:function(a){return a.V4
+"37,38,39"},
+"+trace":1,
+stN:function(a,b){a.V4=this.pD(a,C.kw,a.V4,b)
+"40,31,37,38"},
+"+trace=":1,
+"@":function(){return[C.js]},
+static:{bV:function(a){var z,y,x,w,v,u
+z=H.B7([],P.L5(null,null,null,null,null))
+z=R.Jk(z)
+y=$.Nd()
+x=P.Py(null,null,null,J.O,W.I0)
+w=J.O
+v=W.cv
+u=new V.br(P.Py(null,null,null,w,v),null,null)
+H.VM(u,[w,v])
+a.V4=z
+a.Ye=y
+a.mT=x
+a.KM=u
+C.bg.ZL(a)
+C.bg.FH(a)
+return a
+"36"},"+new StackTraceElement$created:0:0":1}},"+StackTraceElement": [116],V6:{"":"uL+Pi;",$isd3:true}}],["template_binding","package:template_binding/template_binding.dart",,M,{IP:function(a){var z=J.RE(a)
+if(typeof a==="object"&&a!==null&&!!z.$isQl)return C.io.f0(a)
+switch(z.gr9(a)){case"checkbox":return $.FF().aM(a)
+case"radio":case"select-multiple":case"select-one":return z.gEr(a)
+default:return z.gLm(a)}},HP:function(a,b,c,d,e){var z,y,x,w
+if(b==null)return
+z=b.N2
+if(z!=null){M.Ky(a).wh(z)
+if(d!=null)M.Ky(a).sxT(d)}z=b.Cd
+if(z!=null)M.mV(z,a,c,e)
+z=b.wd
+if(z==null)return
+for(y=a.firstChild,x=0;y!=null;y=y.nextSibling,x=w){w=x+1
+if(x>=z.length)throw H.e(z,x)
+M.HP(y,z[x],c,d,e)}},bM:function(a){var z,y
+for(;z=J.RE(a),y=z.gKV(a),y!=null;a=y);if(typeof a==="object"&&a!==null&&!!z.$isYN||typeof a==="object"&&a!==null&&!!z.$isI0||typeof a==="object"&&a!==null&&!!z.$ishy)return a
+return},pN:function(a,b){var z,y
+z=J.x(a)
+if(typeof a==="object"&&a!==null&&!!z.$iscv)return M.F5(a,b)
+if(typeof a==="object"&&a!==null&&!!z.$iskJ){y=M.F4(a.textContent,"text",a,b)
+if(y!=null)return["text",y]}return},F5:function(a,b){var z,y
+z={}
+z.a=null
+z.b=!1
+z.c=!1
+y=new W.E9(a)
+y.aN(y,new M.NW(z,a,b,M.wR(a)))
+if(z.b&&!z.c){if(z.a==null)z.a=[]
+y=z.a
+y.push("bind")
+y.push(M.F4("{{}}","bind",a,b))}return z.a},mV:function(a,b,c,d){var z,y,x,w,v,u,t,s,r,q,p,o,n,m,l,k,j,i
+for(z=d!=null,y=J.x(b),y=typeof b==="object"&&b!==null&&!!y.$ishs,x=0;w=a.length,x<w;x+=2){v=a[x]
+u=x+1
+if(u>=w)throw H.e(a,u)
+t=a[u]
+u=t.gEJ()
+if(1>=u.length)throw H.e(u,1)
+s=u[1]
+if(t.gqz()){w=t.gEJ()
+if(2>=w.length)throw H.e(w,2)
+r=w[2]
+if(r!=null){q=r.call$2(c,b)
+if(q!=null){p=q
+s="value"}else p=c}else p=c
+if(!t.gaW()){p=L.ao(p,s,t.gcK())
+s="value"}}else{o=new Y.J3([],[],null,t.gcK(),!1,!1,null,null)
+for(w=o.b9,n=1;u=t.gEJ(),m=u.length,n<m;n+=3){l=u[n]
+k=n+1
+if(k>=m)throw H.e(u,k)
+r=u[k]
+q=r!=null?r.call$2(c,b):null
+if(q!=null){j=q
+l="value"}else j=c
+if(o.YX)H.vh(new P.lj("Cannot add more paths once started."))
+w.push(L.ao(j,l,null))}o.wE(o)
+p=o
+s="value"}i=J.tb(y?b:M.Ky(b),v,p,s)
+if(z)d.push(i)}},F4:function(a,b,c,d){var z,y,x,w,v,u,t,s,r
+z=J.U6(a)
+if(z.gl0(a)===!0)return
+y=z.gB(a)
+if(typeof y!=="number")throw H.s(y)
+x=d==null
+w=null
+v=0
+for(;v<y;){u=z.XU(a,"{{",v)
+t=u<0?-1:z.XU(a,"}}",u+2)
+if(t<0){if(w==null)return
+w.push(z.yn(a,v))
+break}if(w==null)w=[]
+w.push(z.JT(a,v,u))
+s=C.xB.bS(z.JT(a,u+2,t))
+w.push(s)
+if(x)r=null
+else{d.toString
+r=A.lJ(s,b,c,T.e9.prototype.gca.call(d))}w.push(r)
+v=t+2}if(v===y)w.push("")
+return M.hp(w)},cZ:function(a,b){var z,y,x
+z=a.firstChild
+if(z==null)return
+y=new M.yp(z,a.lastChild,b)
+x=y.KO
+for(;x!=null;){M.Ky(x).sCk(y)
+x=x.nextSibling}},Ky:function(a){var z,y,x
+z=$.cm()
+z.toString
+y=H.of(a,"expando$values")
+x=y==null?null:H.of(y,z.Qz())
+if(x!=null)return x
+z=J.RE(a)
+if(typeof a==="object"&&a!==null&&!!z.$isMi)x=new M.ee(a,null,null)
+else if(typeof a==="object"&&a!==null&&!!z.$islp)x=new M.ug(a,null,null)
+else if(typeof a==="object"&&a!==null&&!!z.$isAE)x=new M.VT(a,null,null)
+else if(typeof a==="object"&&a!==null&&!!z.$iscv){if(z.gjU(a)!=="template")z=z.gQg(a).MW.hasAttribute("template")===!0&&C.uE.x4(z.gjU(a))===!0
+else z=!0
+x=z?new M.DT(null,null,null,!1,null,null,null,null,a,null,null):new M.V2(a,null,null)}else x=typeof a==="object"&&a!==null&&!!z.$iskJ?new M.XT(a,null,null):new M.hs(a,null,null)
+z=$.cm()
+z.u(z,a,x)
+return x},wR:function(a){var z=J.RE(a)
+if(typeof a==="object"&&a!==null&&!!z.$iscv)if(z.gjU(a)!=="template")z=z.gQg(a).MW.hasAttribute("template")===!0&&C.uE.x4(z.gjU(a))===!0
+else z=!0
+else z=!1
+return z},V2:{"":"hs;N1,bn,Ck",
+Z1:function(a,b,c,d){var z,y,x
+J.MV(this.glN(),b)
+z=this.gN1()
+y=J.x(z)
+if(typeof z==="object"&&z!==null&&!!y.$isQl&&J.xC(b,"value")){z=H.Go(this.gN1(),"$isQl")
+z.toString
+z=new W.E9(z)
+z.Rz(z,b)
+z=this.gN1()
+y=d!=null?d:""
+x=new M.jY(null,z,c,null,null,"value",y)
+x.Og(z,"value",c,d)
+x.Ca=M.IP(z).yI(x.gqf())}else x=M.hN(this.gN1(),b,c,d)
+z=this.gCd(this)
+z.u(z,b,x)
+return x}},D8:{"":"TR;Y0,LO,ZY,xS,PB,eS,Ii",
+EC:function(a){var z,y
+if(this.Y0){z=null!=a&&!1!==a
+y=this.eS
+if(z)J.Vs(X.TR.prototype.gH.call(this)).MW.setAttribute(y,"")
+else{z=J.Vs(X.TR.prototype.gH.call(this))
+z.Rz(z,y)}}else{z=J.Vs(X.TR.prototype.gH.call(this))
+y=a==null?"":H.d(a)
+z.MW.setAttribute(this.eS,y)}},
+static:{hN:function(a,b,c,d){var z,y,x
+z=J.rY(b)
+y=z.Tc(b,"?")
+if(y){x=J.Vs(a)
+x.Rz(x,b)
+b=z.JT(b,0,J.xH(z.gB(b),1))}z=d!=null?d:""
+z=new M.D8(y,a,c,null,null,b,z)
+z.Og(a,b,c,d)
+return z}}},jY:{"":"NP;Ca,LO,ZY,xS,PB,eS,Ii",
+gH:function(){return M.NP.prototype.gH.call(this)},
+EC:function(a){var z,y,x,w,v,u
+z=J.Lp(M.NP.prototype.gH.call(this))
+y=J.RE(z)
+if(typeof z==="object"&&z!==null&&!!y.$islp){x=J.UQ(J.QE(M.Ky(z)),"value")
+w=J.x(x)
+if(typeof x==="object"&&x!==null&&!!w.$isSA){v=z.value
+u=x}else{v=null
+u=null}}else{v=null
+u=null}M.NP.prototype.EC.call(this,a)
+if(u!=null&&u.gLO()!=null&&!J.xC(y.gP(z),v))u.FC(null)}},ll:{"":"TR;",
+cO:function(a){if(this.LO==null)return
+this.Ca.ed()
+X.TR.prototype.cO.call(this,this)}},Uf:{"":"Tp;",
+call$0:function(){var z,y,x,w,v
+z=document.createElement("div",null).appendChild(W.ED(null))
+y=J.RE(z)
+y.sr9(z,"checkbox")
+x=[]
+w=y.gVl(z)
+v=new W.Ov(0,w.uv,w.Ph,W.aF(new M.ik(x)),w.Sg)
+H.VM(v,[H.W8(w,"RO",0)])
+v.Zz()
+y=y.gEr(z)
+v=new W.Ov(0,y.uv,y.Ph,W.aF(new M.LfS(x)),y.Sg)
+H.VM(v,[H.W8(y,"RO",0)])
+v.Zz()
+z.dispatchEvent(W.H6("click",!1,0,!0,!0,0,0,!1,0,!1,null,0,0,!1,window))
+return x.length===1?C.mt:C.Nm.gFV(x)},
+"+call:0:0":0,
+$isEH:true,
+$is_X0:true},ik:{"":"Tp;a",
+call$1:function(a){this.a.push(C.T1)},
+"+call:1:0":0,
+$isEH:true,
+$is_HB:true,
+$is_Dv:true},LfS:{"":"Tp;b",
+call$1:function(a){this.b.push(C.mt)},
+"+call:1:0":0,
+$isEH:true,
+$is_HB:true,
+$is_Dv:true},NP:{"":"ll;Ca,LO,ZY,xS,PB,eS,Ii",
+gH:function(){return X.TR.prototype.gH.call(this)},
+EC:function(a){var z=this.gH()
+J.ta(z,a==null?"":H.d(a))},
+FC:function(a){var z=J.Vm(this.gH())
+J.ta(this.xS,z)
+O.Y3()},
+gqf:function(){return new H.Pm(this,M.NP.prototype.FC,null,"FC")}},Vh:{"":"ll;Ca,LO,ZY,xS,PB,eS,Ii",
+EC:function(a){var z=X.TR.prototype.gH.call(this)
+J.rP(z,null!=a&&!1!==a)},
+FC:function(a){var z,y,x,w
+z=J.Hf(X.TR.prototype.gH.call(this))
+J.ta(this.xS,z)
+z=X.TR.prototype.gH.call(this)
+y=J.x(z)
+if(typeof z==="object"&&z!==null&&!!y.$isMi&&J.xC(J.Ja(X.TR.prototype.gH.call(this)),"radio"))for(z=J.GP(M.kv(X.TR.prototype.gH.call(this)));z.G();){x=z.gl()
+y=J.x(x)
+w=J.UQ(J.QE(typeof x==="object"&&x!==null&&!!y.$ishs?x:M.Ky(x)),"checked")
+if(w!=null)J.ta(w,!1)}O.Y3()},
+gqf:function(){return new H.Pm(this,M.Vh.prototype.FC,null,"FC")},
+static:{kv:function(a){var z,y,x,w
+z=J.RE(a)
+y=z.gMB(a)
+if(y!=null){y.toString
+z=new W.e7(y)
+return z.ev(z,new M.r0(a))}else{x=M.bM(a)
+if(x==null)return C.xD
+w=J.MK(x,"input[type=\"radio\"][name=\""+H.d(z.goc(a))+"\"]")
+return w.ev(w,new M.jz(a))}}}},r0:{"":"Tp;a",
+call$1:function(a){var z,y
+z=this.a
+y=J.x(a)
+if(!y.n(a,z))if(typeof a==="object"&&a!==null&&!!y.$isMi)if(a.type==="radio"){y=a.name
+z=J.DA(z)
+z=y==null?z==null:y===z}else z=!1
+else z=!1
+else z=!1
+return z},
+"+call:1:0":0,
+$isEH:true,
+$is_HB:true,
+$is_Dv:true},jz:{"":"Tp;b",
+call$1:function(a){var z=J.x(a)
+return!z.n(a,this.b)&&z.gMB(a)==null},
+"+call:1:0":0,
+$isEH:true,
+$is_HB:true,
+$is_Dv:true},SA:{"":"ll;Ca,LO,ZY,xS,PB,eS,Ii",
+EC:function(a){var z={}
+if(this.Gh(a)===!0)return
+z.a=4
+P.rb(new M.zV(z,this,a))},
+Gh:function(a){var z,y,x
+z=this.eS
+y=J.x(z)
+if(y.n(z,"selectedIndex")){x=M.oj(a)
+J.Mu(X.TR.prototype.gH.call(this),x)
+z=J.m4(X.TR.prototype.gH.call(this))
+return z==null?x==null:z===x}else if(y.n(z,"value")){z=X.TR.prototype.gH.call(this)
+J.ta(z,a==null?"":H.d(a))
+return J.xC(J.Vm(X.TR.prototype.gH.call(this)),a)}},
+FC:function(a){var z,y
+z=this.eS
+y=J.x(z)
+if(y.n(z,"selectedIndex")){z=J.m4(X.TR.prototype.gH.call(this))
+J.ta(this.xS,z)}else if(y.n(z,"value")){z=J.Vm(X.TR.prototype.gH.call(this))
+J.ta(this.xS,z)}},
+gqf:function(){return new H.Pm(this,M.SA.prototype.FC,null,"FC")},
+$isSA:true,
+static:{oj:function(a){if(typeof a==="string")return H.BU(a,null,new M.nv())
+return typeof a==="number"&&Math.floor(a)===a?a:0}}},zV:{"":"Tp;a,b,c",
+call$0:function(){var z,y
+if(this.b.Gh(this.c)!==!0){z=this.a
+y=z.a
+z.a=y-1
+y=y>0
+z=y}else z=!1
+if(z)P.rb(this)},
+"+call:0:0":0,
+$isEH:true,
+$is_X0:true},nv:{"":"Tp;",
+call$1:function(a){return 0},
+"+call:1:0":0,
+$isEH:true,
+$is_HB:true,
+$is_Dv:true},ee:{"":"V2;N1,bn,Ck",
+gN1:function(){return this.N1},
+Z1:function(a,b,c,d){var z,y,x,w
+z=J.x(b)
+if(!z.n(b,"value")&&!z.n(b,"checked"))return M.V2.prototype.Z1.call(this,this,b,c,d)
+y=this.gN1()
+x=J.x(y)
+J.MV(typeof y==="object"&&y!==null&&!!x.$ishs?this.gN1():this,b)
+w=J.Vs(this.N1)
+w.Rz(w,b)
+w=this.gCd(this)
+if(z.n(b,"value")){z=this.N1
+y=d!=null?d:""
+y=new M.NP(null,z,c,null,null,"value",y)
+y.Og(z,"value",c,d)
+y.Ca=M.IP(z).yI(y.gqf())
+z=y}else{z=this.N1
+y=d!=null?d:""
+y=new M.Vh(null,z,c,null,null,"checked",y)
+y.Og(z,"checked",c,d)
+y.Ca=M.IP(z).yI(y.gqf())
+z=y}w.u(w,b,z)
+return z}},XI:{"":"a;Cd>,wd,N2,oA",static:{lX:function(a,b){var z,y,x,w,v,u,t,s,r
+z=M.pN(a,b)
+y=J.x(a)
+if(typeof a==="object"&&a!==null&&!!y.$iscv)if(y.gjU(a)!=="template")x=y.gQg(a).MW.hasAttribute("template")===!0&&C.uE.x4(y.gjU(a))===!0
+else x=!0
+else x=!1
+if(x){w=a
+v=!0}else{v=!1
+w=null}for(u=y.gq6(a),t=null,s=0;u!=null;u=u.nextSibling,++s){r=M.lX(u,b)
+if(t==null)t=P.A(y.gyT(a).NL.childNodes.length,null)
+if(s>=t.length)throw H.e(t,s)
+t[s]=r
+if(r.oA)v=!0}return new M.XI(z,t,w,v)}}},hs:{"":"a;N1<,bn,Ck?",
+Z1:function(a,b,c,d){var z,y
+window
+z=$.UT()
+y="Unhandled binding to Node: "+H.d(this)+" "+H.d(b)+" "+H.d(c)+" "+H.d(d)
+z.toString
+if(typeof console!="undefined")console.error(y)},
+Ih:function(a,b){var z,y
+if(this.bn==null)return
+z=this.gCd(this)
+y=z.Rz(z,b)
+if(y!=null)J.wC(y)},
+GB:function(a){var z,y,x
+if(this.bn==null)return
+for(z=this.gCd(this),z=z.gUQ(z),z=P.F(z,!0,H.W8(z,"mW",0)),y=new H.a7(z,z.length,0,null),H.VM(y,[H.W8(z,"Q",0)]);y.G();){x=y.mD
+if(x!=null)J.wC(x)}this.bn=null},
+gCd:function(a){if(this.bn==null)this.bn=P.L5(null,null,null,J.O,X.TR)
+return this.bn},
+glN:function(){var z,y
+z=this.gN1()
+y=J.x(z)
+return typeof z==="object"&&z!==null&&!!y.$ishs?this.gN1():this},
+$ishs:true},yp:{"":"a;KO,lC,k8"},ug:{"":"V2;N1,bn,Ck",
+gN1:function(){return this.N1},
+Z1:function(a,b,c,d){var z,y,x,w
+if(J.xC(b,"selectedindex"))b="selectedIndex"
+z=J.x(b)
+if(!z.n(b,"selectedIndex")&&!z.n(b,"value"))return M.V2.prototype.Z1.call(this,this,b,c,d)
+z=this.gN1()
+y=J.x(z)
+J.MV(typeof z==="object"&&z!==null&&!!y.$ishs?this.gN1():this,b)
+x=J.Vs(this.N1)
+x.Rz(x,b)
+x=this.gCd(this)
+w=this.N1
+z=d!=null?d:""
+z=new M.SA(null,w,c,null,null,b,z)
+z.Og(w,b,c,d)
+z.Ca=M.IP(w).yI(z.gqf())
+x.u(x,b,z)
+return z}},DT:{"":"V2;lr,xT?,kr<,Ds,QO?,jH?,mj?,zx@,N1,bn,Ck",
+gN1:function(){return this.N1},
+glN:function(){var z,y
+z=this.N1
+y=J.x(z)
+return typeof z==="object"&&z!==null&&!!y.$isDT?this.N1:this},
+Z1:function(a,b,c,d){var z,y
+d=d!=null?d:""
+if(this.kr==null)this.kr=new M.TG(this,[],null,!1,!1,!1,!1,!1,null,null,null,null,null,null,null,null,!1,null,null)
+switch(b){case"bind":z=this.kr
+z.TU=!0
+z.d6=c
+z.XV=d
+this.jq()
+z=this.gCd(this)
+y=new M.N9(this,c,b,d)
+z.u(z,b,y)
+return y
+case"repeat":z=this.kr
+z.A7=!0
+z.JM=c
+z.yO=d
+this.jq()
+z=this.gCd(this)
+y=new M.N9(this,c,b,d)
+z.u(z,b,y)
+return y
+case"if":z=this.kr
+z.Q3=!0
+z.rV=c
+z.eD=d
+this.jq()
+z=this.gCd(this)
+y=new M.N9(this,c,b,d)
+z.u(z,b,y)
+return y
+default:return M.V2.prototype.Z1.call(this,this,b,c,d)}},
+Ih:function(a,b){var z
+switch(b){case"bind":z=this.kr
+if(z==null)return
+z.TU=!1
+z.d6=null
+z.XV=null
+this.jq()
+z=this.gCd(this)
+z.Rz(z,b)
+return
+case"repeat":z=this.kr
+if(z==null)return
+z.A7=!1
+z.JM=null
+z.yO=null
+this.jq()
+z=this.gCd(this)
+z.Rz(z,b)
+return
+case"if":z=this.kr
+if(z==null)return
+z.Q3=!1
+z.rV=null
+z.eD=null
+this.jq()
+z=this.gCd(this)
+z.Rz(z,b)
+return
+default:M.hs.prototype.Ih.call(this,this,b)
+return}},
+jq:function(){var z=this.kr
+if(!z.t9){z.t9=!0
+P.rb(this.kr.gjM())}},
+a5:function(a,b,c){var z,y,x,w,v
+z=this.gnv()
+y=J.x(z)
+z=typeof z==="object"&&z!==null&&!!y.$ishs?z:M.Ky(z)
+x=J.nX(z)
+w=z.gzx()
+if(w==null){w=M.lX(x,b)
+z.szx(w)}v=w.oA?M.Fz(x):J.zZ(x,!0)
+M.HP(v,w,a,b,c)
+M.cZ(v,a)
+return v},
+ZK:function(a,b){return this.a5(a,b,null)},
+gzH:function(){return this.xT},
+gnv:function(){var z,y,x,w,v
+this.Sy()
+z=J.Vs(this.N1).MW.getAttribute("ref")
+if(z!=null){y=M.bM(this.N1)
+x=y!=null?J.K3(y,z):null}else x=null
+if(x==null){x=this.QO
+if(x==null)return this.N1}w=J.x(x)
+v=(typeof x==="object"&&x!==null&&!!w.$ishs?x:M.Ky(x)).gnv()
+return v!=null?v:x},
+gjb:function(a){var z
+this.Sy()
+z=this.jH
+return z!=null?z:H.Go(this.N1,"$isyY").content},
+wh:function(a){var z,y,x,w,v,u
+if(this.mj===!0)return!1
+M.oR()
+this.mj=!0
+z=this.N1
+y=J.x(z)
+x=typeof z==="object"&&z!==null&&!!y.$isyY
+w=!x
+if(w){z=this.N1
+y=J.RE(z)
+z=y.gQg(z).MW.hasAttribute("template")===!0&&C.uE.x4(y.gjU(z))===!0}else z=!1
+if(z){if(a!=null)throw H.b(new P.AT("instanceRef should not be supplied for attribute templates."))
+v=M.eX(this.N1)
+z=J.x(v)
+v=typeof v==="object"&&v!==null&&!!z.$ishs?v:M.Ky(v)
+v.smj(!0)
+z=v.gN1()
+y=J.x(z)
+x=typeof z==="object"&&z!==null&&!!y.$isyY
+u=!0}else{v=this
+u=!1}if(!x)v.sjH(J.bs(M.nk(J.VN(v.gN1()))))
+if(a!=null)v.sQO(a)
+else if(w)M.KE(v,this.N1,u)
+else M.GM(J.nX(v))
+return!0},
+Sy:function(){return this.wh(null)},
+$isDT:true,
+static:{"":"mn,Sf,To",Fz:function(a){var z,y,x,w
+z=J.RE(a)
+y=z.Yv(a,!1)
+x=J.RE(y)
+if(typeof y==="object"&&y!==null&&!!x.$iscv)if(x.gjU(y)!=="template")x=x.gQg(y).MW.hasAttribute("template")===!0&&C.uE.x4(x.gjU(y))===!0
+else x=!0
+else x=!1
+if(x)return y
+for(w=z.gq6(a);w!=null;w=w.nextSibling)y.appendChild(M.Fz(w))
+return y},nk:function(a){var z,y,x
+if(W.uV(a.defaultView)==null)return a
+z=$.LQ()
+y=z.t(z,a)
+if(y==null){y=a.implementation.createHTMLDocument("")
+for(;z=y.lastChild,z!=null;){x=z.parentNode
+if(x!=null)x.removeChild(z)}z=$.LQ()
+z.u(z,a,y)}return y},eX:function(a){var z,y,x,w,v,u
+z=J.RE(a)
+y=z.gM0(a).createElement("template",null)
+z.gKV(a).insertBefore(y,a)
+for(x=z.gQg(a),x=x.gvc(x),x=P.F(x,!0,H.W8(x,"Q",0)),w=new H.a7(x,x.length,0,null),H.VM(w,[H.W8(x,"Q",0)]);w.G();){v=w.mD
+switch(v){case"template":x=z.gQg(a).MW
+x.getAttribute(v)
+x.removeAttribute(v)
+break
+case"repeat":case"bind":case"ref":y.toString
+x=z.gQg(a).MW
+u=x.getAttribute(v)
+x.removeAttribute(v)
+new W.E9(y).MW.setAttribute(v,u)
+break
+default:}}return y},KE:function(a,b,c){var z,y,x,w
+z=J.nX(a)
+if(c){J.BM(z,b)
+return}for(y=J.RE(b),x=J.RE(z);w=y.gq6(b),w!=null;)x.jx(z,w)},GM:function(a){var z,y
+z=new M.OB()
+y=J.MK(a,$.cz())
+if(M.wR(a))z.call$1(a)
+y.aN(y,z)},oR:function(){if($.To===!0)return
+$.To=!0
+var z=document.createElement("style",null)
+z.textContent=$.cz()+" { display: none; }"
+document.head.appendChild(z)}}},OB:{"":"Tp;",
+call$1:function(a){var z
+if(!M.Ky(a).wh(null)){z=J.x(a)
+M.GM(J.nX(typeof a==="object"&&a!==null&&!!z.$ishs?a:M.Ky(a)))}},
+"+call:1:0":0,
+$isEH:true,
+$is_HB:true,
+$is_Dv:true},Ra:{"":"Tp;",
+call$1:function(a){return H.d(a)+"[template]"},
+"+call:1:0":0,
+$isEH:true,
+$is_HB:true,
+$is_Dv:true},N9:{"":"a;ud,lr,eS,Ii>",
+gP:function(a){return J.Vm(this.gND())},
+"+value":0,
+r6:function(a,b){return this.gP(a).call$1(b)},
+sP:function(a,b){J.ta(this.gND(),b)},
+"+value=":0,
+gND:function(){var z,y
+z=this.lr
+y=J.x(z)
+if((typeof z==="object"&&z!==null&&!!y.$isD7||typeof z==="object"&&z!==null&&!!y.$isJ3)&&J.xC(this.Ii,"value"))return this.lr
+return L.ao(this.lr,this.Ii,null)},
+cO:function(a){var z=this.ud
+if(z==null)return
+z.Ih(z,this.eS)
+this.lr=null
+this.ud=null},
+$isTR:true},NW:{"":"Tp;a,b,c,d",
+call$2:function(a,b){var z,y
+for(;z=J.U6(a),J.xC(z.t(a,0),"_");)a=z.yn(a,1)
+if(this.d)if(z.n(a,"if")){this.a.b=!0
+if(J.xC(b,""))b="{{}}"}else if(z.n(a,"bind")||z.n(a,"repeat")){this.a.c=!0
+if(J.xC(b,""))b="{{}}"}y=M.F4(b,a,this.b,this.c)
+if(y!=null){z=this.a
+if(z.a==null)z.a=[]
+z=z.a
+z.push(a)
+z.push(y)}},
+"+call:2:0":0,
+$isEH:true,
+$is_bh:true},HS:{"":"a;EJ<,bX",
+gqz:function(){return this.EJ.length===4},
+gaW:function(){var z,y
+z=this.EJ
+y=z.length
+if(y===4){if(0>=y)throw H.e(z,0)
+if(J.xC(z[0],"")){if(3>=z.length)throw H.e(z,3)
+z=J.xC(z[3],"")}else z=!1}else z=!1
+return z},
+gcK:function(){return this.bX},
+JI:function(a){var z,y
+if(a==null)a=""
+z=this.EJ
+if(0>=z.length)throw H.e(z,0)
+y=H.d(z[0])+H.d(a)
+if(3>=z.length)throw H.e(z,3)
+return y+H.d(z[3])},
+gBg:function(){return new H.Pm(this,M.HS.prototype.JI,null,"JI")},
+DJ:function(a){var z,y,x,w,v,u,t
+z=this.EJ
+if(0>=z.length)throw H.e(z,0)
+y=P.p9(z[0])
+for(x=J.U6(a),w=1;w<z.length;w+=3){v=x.t(a,C.jn.Z(w-1,3))
+if(v!=null){u=typeof v==="string"?v:H.d(v)
+y.vM=y.vM+u}t=w+2
+if(t>=z.length)throw H.e(z,t)
+u=z[t]
+u=typeof u==="string"?u:H.d(u)
+y.vM=y.vM+u}return y.vM},
+gqD:function(){return new H.Pm(this,M.HS.prototype.DJ,null,"DJ")},
+Yn:function(a){this.bX=this.EJ.length===4?this.gBg():this.gqD()},
+static:{hp:function(a){var z=new M.HS(a,null)
+z.Yn(a)
+return z}}},TG:{"":"a;e9,YC,xG,pq,t9,A7,TU,Q3,JM,d6,rV,yO,XV,eD,FS,IY,U9,DO,Fy",
+Mv:function(a){return this.DO.call$1(a)},
+WS:function(){var z,y,x,w,v,u
+this.t9=!1
+z=this.FS
+if(z!=null){z.ed()
+this.FS=null}z=this.A7
+if(!z&&!this.TU){this.Az(null)
+return}y=z?this.JM:this.d6
+x=z?this.yO:this.XV
+if(!this.Q3)w=L.ao(y,x,z?null:new M.ts())
+else{w=new Y.J3([],[],null,new M.Kj(z),!1,!1,null,null)
+if(w.YX)H.vh(new P.lj("Cannot add more paths once started."))
+z=w.b9
+z.push(L.ao(y,x,null))
+v=this.rV
+u=this.eD
+if(w.YX)H.vh(new P.lj("Cannot add more paths once started."))
+z.push(L.ao(v,u,null))
+w.wE(w)}this.FS=w.gqh(w).yI(new M.VU(this))
+this.Az(w.gP(w))},
+gjM:function(){return new P.Ip(this,M.TG.prototype.WS,null,"WS")},
+Az:function(a){var z,y,x,w
+z=this.xG
+this.Gb()
+y=J.w1(a)
+if(typeof a==="object"&&a!==null&&(a.constructor===Array||!!y.$isList))this.xG=a
+else if(typeof a==="object"&&a!==null&&(a.constructor===Array||!!y.$iscX))this.xG=y.br(a)
+else this.xG=null
+if(this.xG!=null&&typeof a==="object"&&a!==null&&!!y.$iswn)this.IY=a.gRT().yI(this.gZX())
+y=z!=null?z:[]
+x=this.xG
+x=x!=null?x:[]
+w=G.jj(x,0,J.q8(x),y,0,J.q8(y))
+if(w.length!==0)this.El(w)},
+wx:function(a){var z,y,x,w
+z=J.x(a)
+if(z.n(a,-1))return this.e9.N1
+y=this.YC
+z=z.U(a,2)
+if(z>>>0!==z||z>=y.length)throw H.e(y,z)
+x=y[z]
+if(M.wR(x)){z=this.e9.N1
+z=x==null?z==null:x===z}else z=!0
+if(z)return x
+w=M.Ky(x).gkr()
+if(w==null)return x
+return w.wx(C.jn.Z(w.YC.length,2)-1)},
+lP:function(a,b,c,d){var z,y,x,w,v,u
+z=J.Wx(a)
+y=this.wx(z.W(a,1))
+x=b!=null
+if(x)w=b.lastChild
+else w=c!=null&&J.pO(c)?J.MQ(c):null
+if(w==null)w=y
+z=z.U(a,2)
+H.IC(this.YC,z,[w,d])
+v=J.TZ(this.e9.N1)
+u=J.tx(y)
+if(x)v.insertBefore(b,u)
+else if(c!=null)for(z=J.GP(c);z.G();)v.insertBefore(z.gl(),u)},
+MC:function(a){var z,y,x,w,v,u,t,s
+z=[]
+z.$builtinTypeInfo=[W.KV]
+y=J.Wx(a)
+x=this.wx(y.W(a,1))
+w=this.wx(a)
+v=this.YC
+u=J.WB(y.U(a,2),1)
+if(u>>>0!==u||u>=v.length)throw H.e(v,u)
+t=v[u]
+C.Nm.UZ(v,y.U(a,2),J.WB(y.U(a,2),2))
+J.TZ(this.e9.N1)
+for(y=J.RE(x);!J.xC(w,x);){s=y.guD(x)
+if(s==null?w==null:s===w)w=x
+v=s.parentNode
+if(v!=null)v.removeChild(s)
+z.push(s)}return new M.Ya(z,t)},
+El:function(a){var z,y,x,w,v,u,t,s,r,q,p,o,n,m,l,k
+if(this.pq)return
+z=this.e9
+y=z.N1
+x=z.N1
+w=J.x(x)
+v=(typeof x==="object"&&x!==null&&!!w.$isDT?z.N1:z).gzH()
+x=J.RE(y)
+if(x.gKV(y)==null||W.uV(x.gM0(y).defaultView)==null){this.cO(this)
+return}if(!this.U9){this.U9=!0
+if(v!=null){this.DO=v.A5(y)
+this.Fy=null}}u=P.Py(P.N3,null,null,P.a,M.Ya)
+for(x=J.w1(a),w=x.gA(a),t=0;w.G();){s=w.gl()
+for(r=s.gRt(),r=r.gA(r),q=J.RE(s);r.G();)u.u(u,r.mD,this.MC(J.WB(q.gvH(s),t)))
+r=s.gNg()
+if(typeof r!=="number")throw H.s(r)
+t-=r}for(x=x.gA(a);x.G();){s=x.gl()
+for(w=J.RE(s),p=w.gvH(s);r=J.Wx(p),r.C(p,J.WB(w.gvH(s),s.gNg()));p=r.g(p,1)){o=J.UQ(this.xG,p)
+n=u.Rz(u,o)
+if(n!=null&&J.pO(J.Y5(n))){q=J.RE(n)
+m=q.gkU(n)
+l=q.gyT(n)
+k=null}else{m=[]
+if(this.DO!=null)o=this.Mv(o)
+k=o!=null?z.a5(o,v,m):null
+l=null}this.lP(p,k,l,m)}}for(z=u.gUQ(u),x=z.Kw,x=x.gA(x),x=new H.MH(null,x,z.ew),H.VM(x,[H.W8(z,"i1",0),H.W8(z,"i1",1)]);x.G();)this.uS(J.AB(x.mD))},
+gZX:function(){return new H.Pm(this,M.TG.prototype.El,null,"El")},
+uS:function(a){var z
+for(z=J.GP(a);z.G();)J.wC(z.gl())},
+Gb:function(){var z=this.IY
+if(z==null)return
+z.ed()
+this.IY=null},
+cO:function(a){var z,y
+if(this.pq)return
+this.Gb()
+for(z=this.YC,y=1;y<z.length;y+=2)this.uS(z[y])
+C.Nm.sB(z,0)
+z=this.FS
+if(z!=null){z.ed()
+this.FS=null}this.e9.kr=null
+this.pq=!0}},ts:{"":"Tp;",
+call$1:function(a){return[a]},
+"+call:1:0":0,
+$isEH:true,
+$is_HB:true,
+$is_Dv:true},Kj:{"":"Tp;a",
+call$1:function(a){var z,y,x
+z=J.U6(a)
+y=z.t(a,0)
+x=z.t(a,1)
+if(!(null!=x&&!1!==x))return
+return this.a?y:[y]},
+"+call:1:0":0,
+$isEH:true,
+$is_HB:true,
+$is_Dv:true},VU:{"":"Tp;b",
+call$1:function(a){return this.b.Az(J.iZ(J.MQ(a)))},
+"+call:1:0":0,
+$isEH:true,
+$is_HB:true,
+$is_Dv:true},Ya:{"":"a;yT>,kU>",$isYa:true},XT:{"":"hs;N1,bn,Ck",
+Z1:function(a,b,c,d){var z,y,x
+if(!J.xC(b,"text"))return M.hs.prototype.Z1.call(this,this,b,c,d)
+this.Ih(this,b)
+z=this.gCd(this)
+y=this.N1
+x=d!=null?d:""
+x=new M.ic(y,c,null,null,"text",x)
+x.Og(y,"text",c,d)
+z.u(z,b,x)
+return x}},ic:{"":"TR;LO,ZY,xS,PB,eS,Ii",
+EC:function(a){var z=this.LO
+J.c9(z,a==null?"":H.d(a))}},VT:{"":"V2;N1,bn,Ck",
+gN1:function(){return this.N1},
+Z1:function(a,b,c,d){var z,y,x,w
+if(!J.xC(b,"value"))return M.V2.prototype.Z1.call(this,this,b,c,d)
+z=this.gN1()
+y=J.x(z)
+J.MV(typeof z==="object"&&z!==null&&!!y.$ishs?this.gN1():this,b)
+x=J.Vs(this.N1)
+x.Rz(x,b)
+x=this.gCd(this)
+w=this.N1
+z=d!=null?d:""
+z=new M.NP(null,w,c,null,null,"value",z)
+z.Og(w,"value",c,d)
+z.Ca=M.IP(w).yI(z.gqf())
+x.u(x,b,z)
+return z}}}],["template_binding.src.binding_delegate","package:template_binding/src/binding_delegate.dart",,O,{T4:{"":"a;"}}],["template_binding.src.node_binding","package:template_binding/src/node_binding.dart",,X,{TR:{"":"a;LO<,Ii>",
+gH:function(){return this.LO},
+gP:function(a){return J.Vm(this.xS)},
+"+value":0,
+r6:function(a,b){return this.gP(a).call$1(b)},
+sP:function(a,b){J.ta(this.xS,b)},
+"+value=":0,
+cO:function(a){var z
+if(this.LO==null)return
+z=this.PB
+if(z!=null)z.ed()
+this.PB=null
+this.xS=null
+this.LO=null
+this.ZY=null},
+Og:function(a,b,c,d){var z,y
+z=this.ZY
+y=J.x(z)
+z=(typeof z==="object"&&z!==null&&!!y.$isD7||typeof z==="object"&&z!==null&&!!y.$isJ3)&&J.xC(d,"value")
+y=this.ZY
+if(z)this.xS=y
+else this.xS=L.ao(y,this.Ii,null)
+this.PB=J.Ib(this.xS).yI(new X.VD(this))
+this.EC(J.Vm(this.xS))},
+$isTR:true},VD:{"":"Tp;a",
+call$1:function(a){var z=this.a
+return z.EC(J.Vm(z.xS))},
+"+call:1:0":0,
+$isEH:true,
+$is_HB:true,
+$is_Dv:true}}],["unmodifiable_collection","package:unmodifiable_collection/unmodifiable_collection.dart",,F,{Oh:{"":"a;Mw",
+gB:function(a){return this.Mw.X5},
+"+length":0,
+gl0:function(a){return this.Mw.X5===0},
+"+isEmpty":0,
+gor:function(a){return this.Mw.X5!==0},
+"+isNotEmpty":0,
+t:function(a,b){var z=this.Mw
+return z.t(z,b)},
+"+[]:1:0":0,
+x4:function(a){return this.Mw.x4(a)},
+"+containsKey:1:0":0,
+PF:function(a){return this.Mw.PF(a)},
+"+containsValue:1:0":0,
+aN:function(a,b){var z=this.Mw
+return z.aN(z,b)},
+gvc:function(a){var z,y
+z=this.Mw
+y=new P.Cm(z)
+H.VM(y,[H.W8(z,"YB",0)])
+return y},
+"+keys":0,
+gUQ:function(a){var z=this.Mw
+return z.gUQ(z)},
+"+values":0,
+u:function(a,b,c){return F.TM()},
+"+[]=:2:0":0,
+Rz:function(a,b){F.TM()},
+$isL8:true,
+static:{TM:function(){throw H.b(P.f("Cannot modify an unmodifiable Map"))}}}}],])
+I.$finishClasses($$,$,null)
+$$=null
+init.globalFunctions.NB=H.NB=new H.zy(H.Mg,"NB")
+init.globalFunctions.Rm=H.Rm=new H.Nb(H.vx,"Rm")
+init.globalFunctions.Eu=H.Eu=new H.Fy(H.Ju,"Eu")
+init.globalFunctions.eH=H.eH=new H.eU(H.ft,"eH")
+init.globalFunctions.Qv=H.Qv=new H.zy(H.pe,"Qv")
+init.globalFunctions.qg=E.qg=new H.Fy(E.E2,"qg")
+init.globalFunctions.Yf=H.Yf=new H.Nb(H.vn,"Yf")
+init.globalFunctions.qZ=P.qZ=new H.Fy(P.BG,"qZ")
+init.globalFunctions.Xw=P.Xw=new H.Nb(P.YE,"Xw")
+init.globalFunctions.AY=P.AY=new P.ADW(P.SZ,"AY")
+init.globalFunctions.No=P.No=new H.Fy(P.ax,"No")
+init.globalFunctions.xP=P.xP=new P.Ri(P.L2,"xP")
+init.globalFunctions.AI=P.AI=new P.kq(P.T8,"AI")
+init.globalFunctions.MM=P.MM=new P.Ri(P.V7,"MM")
+init.globalFunctions.C9=P.C9=new P.Ag(P.Qx,"C9")
+init.globalFunctions.Qk=P.Qk=new P.kq(P.Ee,"Qk")
+init.globalFunctions.zi=P.zi=new P.kq(P.cQ,"zi")
+init.globalFunctions.v3=P.v3=new P.kq(P.dL,"v3")
+init.globalFunctions.G2=P.G2=new P.kq(P.Tk,"G2")
+init.globalFunctions.KF=P.KF=new P.Ri(P.h8,"KF")
+init.globalFunctions.ZB=P.ZB=new P.kq(P.Jj,"ZB")
+init.globalFunctions.jt=P.jt=new H.Nb(P.CI,"jt")
+init.globalFunctions.LS=P.LS=new P.Ri(P.qc,"LS")
+init.globalFunctions.iv=P.iv=new H.zy(P.Ou,"iv")
+init.globalFunctions.py=P.py=new H.Nb(P.T9,"py")
+init.globalFunctions.BC=P.BC=new H.Nb(P.tp,"BC")
+init.globalFunctions.n4=P.n4=new H.zy(P.Wc,"n4")
+init.globalFunctions.N3=P.N3=new H.zy(P.ad,"N3")
+init.globalFunctions.J2=P.J2=new H.Nb(P.xv,"J2")
+init.globalFunctions.ya=P.ya=new P.PW(P.QA,"ya")
+init.globalFunctions.f0=W.f0=new H.Nb(W.UE,"f0")
+init.globalFunctions.V5=W.V5=new H.Nb(W.GO,"V5")
+init.globalFunctions.cn=W.cn=new H.Nb(W.Yb,"cn")
+init.globalFunctions.A6=W.A6=new P.kq(W.Qp,"A6")
+init.globalFunctions.uu=P.uu=new P.kq(P.R4,"uu")
+init.globalFunctions.En=P.En=new H.Nb(P.wY,"En")
+init.globalFunctions.Xl=P.Xl=new H.Nb(P.dU,"Xl")
+init.globalFunctions.np=R.np=new H.Nb(R.Jk,"np")
+init.globalFunctions.PB=A.PB=new H.Fy(A.ei,"PB")
+init.globalFunctions.qP=T.qP=new H.Nb(T.ul,"qP")
+init.globalFunctions.Fx=T.Fx=new H.Nb(T.PX,"Fx")
+init.globalFunctions.ZO=K.ZO=new H.Nb(K.Dc,"ZO")
+J.O.$isString=true
+J.O.$isfR=true
+J.O.$asfR=[J.O]
+J.O.$isa=true
+J.im.$isint=true
+J.im.$isfR=true
+J.im.$asfR=[J.P]
+J.im.$isfR=true
+J.im.$asfR=[J.P]
+J.im.$isfR=true
+J.im.$asfR=[J.P]
+J.im.$isa=true
+W.KV.$isKV=true
+W.KV.$isD0=true
+W.KV.$isa=true
+J.Pp.$isdouble=true
+J.Pp.$isfR=true
+J.Pp.$asfR=[J.P]
+J.Pp.$isfR=true
+J.Pp.$asfR=[J.P]
+J.Pp.$isa=true
+W.M5.$isa=true
+J.P.$isfR=true
+J.P.$asfR=[J.P]
+J.P.$isa=true
+P.a6.$isa6=true
+P.a6.$isfR=true
+P.a6.$asfR=[P.a6]
+P.a6.$isa=true
+P.Od.$isa=true
+J.Q.$isList=true
+J.Q.$iscX=true
+J.Q.$isa=true
+P.a.$isa=true
+N.Ng.$isfR=true
+N.Ng.$asfR=[N.Ng]
+N.Ng.$isa=true
+P.a1.$isa=true
+U.EZ.$ishw=true
+U.EZ.$isa=true
+U.RW.$ishw=true
+U.RW.$isa=true
+U.uk.$ishw=true
+U.uk.$isa=true
+U.K9.$ishw=true
+U.K9.$isa=true
+U.no.$ishw=true
+U.no.$isa=true
+U.jK.$ishw=true
+U.jK.$isa=true
+U.w6.$isw6=true
+U.w6.$ishw=true
+U.w6.$isa=true
+U.ae.$ishw=true
+U.ae.$isa=true
+U.kB.$ishw=true
+U.kB.$isa=true
+K.Ae.$isAe=true
+K.Ae.$isa=true
+J.kn.$isbool=true
+J.kn.$isa=true
+P.wv.$iswv=true
+P.wv.$isa=true
+W.Lq.$isea=true
+W.Lq.$isa=true
+A.XP.$isXP=true
+A.XP.$iscv=true
+A.XP.$isKV=true
+A.XP.$isD0=true
+A.XP.$isa=true
+P.vr.$isvr=true
+P.vr.$isQF=true
+P.vr.$isa=true
+P.D4.$isD4=true
+P.D4.$isQF=true
+P.D4.$isQF=true
+P.D4.$isa=true
+P.RS.$isQF=true
+P.RS.$isa=true
+H.Zk.$isQF=true
+H.Zk.$isQF=true
+H.Zk.$isQF=true
+H.Zk.$isa=true
+P.Ys.$isQF=true
+P.Ys.$isa=true
+P.Ms.$isMs=true
+P.Ms.$isQF=true
+P.Ms.$isQF=true
+P.Ms.$isa=true
+P.Fw.$isQF=true
+P.Fw.$isa=true
+P.L9u.$isQF=true
+P.L9u.$isa=true
+X.TR.$isa=true
+N.TJ.$isa=true
+T.yj.$isyj=true
+T.yj.$isa=true
+P.NL.$isQF=true
+P.NL.$isa=true
+P.RY.$isQF=true
+P.RY.$isa=true
+P.QF.$isQF=true
+P.QF.$isa=true
+P.MO.$isMO=true
+P.MO.$isa=true
+F.d3.$isa=true
+W.ea.$isea=true
+W.ea.$isa=true
+P.qh.$isqh=true
+P.qh.$isa=true
+W.Aj.$isea=true
+W.Aj.$isa=true
+G.W4.$isW4=true
+G.W4.$isa=true
+M.Ya.$isa=true
+Y.Pn.$isa=true
+U.hw.$ishw=true
+U.hw.$isa=true
+A.dM.$iscv=true
+A.dM.$isKV=true
+A.dM.$isD0=true
+A.dM.$isa=true
+A.k8.$isa=true
+P.uq.$isa=true
+P.iD.$isiD=true
+P.iD.$isa=true
+W.YN.$isKV=true
+W.YN.$isD0=true
+W.YN.$isa=true
+P.HI.$isqh=true
+P.HI.$asqh=[null]
+P.HI.$isa=true
+H.IY.$isa=true
+H.aX.$isa=true
+W.I0.$isKV=true
+W.I0.$isD0=true
+W.I0.$isa=true
+W.cv.$iscv=true
+W.cv.$isKV=true
+W.cv.$isD0=true
+W.cv.$isa=true
+L.bv.$isa=true
+W.fJ.$isD0=true
+W.fJ.$isa=true
+W.ew.$isea=true
+W.ew.$isa=true
+L.Pf.$isa=true
+W.cx.$isea=true
+W.cx.$isa=true
+P.mE.$ismE=true
+P.mE.$isa=true
+P.KA.$isKA=true
+P.KA.$isnP=true
+P.KA.$isMO=true
+P.KA.$isa=true
+P.JI.$isJI=true
+P.JI.$isKA=true
+P.JI.$isnP=true
+P.JI.$isMO=true
+P.JI.$isa=true
+H.Uz.$isUz=true
+H.Uz.$isD4=true
+H.Uz.$isQF=true
+H.Uz.$isQF=true
+H.Uz.$isQF=true
+H.Uz.$isQF=true
+H.Uz.$isQF=true
+H.Uz.$isa=true
+P.e4.$ise4=true
+P.e4.$isa=true
+P.JB.$isJB=true
+P.JB.$isa=true
+P.jp.$isjp=true
+P.jp.$isa=true
+P.aY.$isaY=true
+P.aY.$isa=true
+P.L8.$isL8=true
+P.L8.$isa=true
+P.EH.$isEH=true
+P.EH.$isa=true
+W.D0.$isD0=true
+W.D0.$isa=true
+P.dX.$isdX=true
+P.dX.$isa=true
+P.fR.$isfR=true
+P.fR.$isa=true
+P.cX.$iscX=true
+P.cX.$isa=true
+P.nP.$isnP=true
+P.nP.$isa=true
+P.b8.$isb8=true
+P.b8.$isa=true
+P.iP.$isiP=true
+P.iP.$isfR=true
+P.iP.$asfR=[null]
+P.iP.$isa=true
+P.lx.$islx=true
+P.lx.$isa=true
+J.Qc=function(a){if(typeof a=="number")return J.P.prototype
+if(typeof a=="string")return J.O.prototype
+if(a==null)return a
+if(!(a instanceof P.a))return J.is.prototype
+return a}
+J.RE=function(a){if(a==null)return a
+if(typeof a!="object")return a
+if(a instanceof P.a)return a
+return J.ks(a)}
+J.U6=function(a){if(typeof a=="string")return J.O.prototype
+if(a==null)return a
+if(a.constructor==Array)return J.Q.prototype
+if(typeof a!="object")return a
+if(a instanceof P.a)return a
+return J.ks(a)}
+J.Wx=function(a){if(typeof a=="number")return J.P.prototype
+if(a==null)return a
+if(!(a instanceof P.a))return J.is.prototype
+return a}
+J.rY=function(a){if(typeof a=="string")return J.O.prototype
+if(a==null)return a
+if(!(a instanceof P.a))return J.is.prototype
+return a}
+J.w1=function(a){if(a==null)return a
+if(a.constructor==Array)return J.Q.prototype
+if(typeof a!="object")return a
+if(a instanceof P.a)return a
+return J.ks(a)}
+J.x=function(a){if(typeof a=="number"){if(Math.floor(a)==a)return J.im.prototype
+return J.Pp.prototype}if(typeof a=="string")return J.O.prototype
+if(a==null)return J.PE.prototype
+if(typeof a=="boolean")return J.kn.prototype
+if(a.constructor==Array)return J.Q.prototype
+if(typeof a!="object")return a
+if(a instanceof P.a)return a
+return J.ks(a)}
+C.OL=new U.EZ()
+C.Gw=new H.SJ()
+C.E3=new J.Q()
+C.Fm=new J.kn()
+C.yX=new J.Pp()
+C.c1=new J.im()
+C.oD=new J.P()
+C.Kn=new J.O()
+C.lM=new P.by()
+C.mI=new K.Fa()
+C.Us=new A.yL()
+C.nJ=new K.x9()
+C.Wj=new P.dp()
+C.za=new A.Mh()
+C.NU=new P.R8()
+C.v8=new P.W5()
+C.kk=Z.aC.prototype
+C.YD=F.Be.prototype
+C.j8=R.i6.prototype
+C.Vy=new A.V3("disassembly-entry")
+C.J0=new A.V3("observatory-element")
+C.Er=new A.V3("script-view")
+C.ht=new A.V3("field-ref")
+C.aM=new A.V3("isolate-summary")
+C.Ig=new A.V3("response-viewer")
+C.Uc=new A.V3("function-view")
+C.xW=new A.V3("code-view")
+C.aQ=new A.V3("class-view")
+C.Oy=new A.V3("library-view")
+C.c0=new A.V3("message-viewer")
+C.js=new A.V3("stack-trace")
+C.jF=new A.V3("isolate-list")
+C.KG=new A.V3("navigation-bar")
+C.ay=new A.V3("instance-ref")
+C.Gu=new A.V3("collapsible-content")
+C.bd=new A.V3("observatory-application")
+C.uW=new A.V3("error-view")
+C.HN=new A.V3("json-view")
+C.H8=new A.V3("source-view")
+C.Tq=new A.V3("field-view")
+C.ql=new A.V3("instance-view")
+C.Tl=E.Fv.prototype
+C.RT=new P.a6(0)
+C.OD=F.I3.prototype
+C.mt=H.VM(new W.e0("change"),[W.ea])
+C.T1=H.VM(new W.e0("click"),[W.Aj])
+C.MD=H.VM(new W.e0("error"),[W.ew])
+C.PP=H.VM(new W.e0("hashchange"),[W.ea])
+C.io=H.VM(new W.e0("input"),[W.ea])
+C.fK=H.VM(new W.e0("load"),[W.ew])
+C.ph=H.VM(new W.e0("message"),[W.cx])
+C.WR=D.qr.prototype
+C.lS=A.Gk.prototype
+C.PJ=N.Ds.prototype
+C.W3=W.fJ.prototype
+C.cp=B.pR.prototype
+C.yK=Z.hx.prototype
+C.Dh=L.u7.prototype
+C.nM=D.St.prototype
+C.Nm=J.Q.prototype
+C.ON=J.Pp.prototype
+C.jn=J.im.prototype
+C.jN=J.PE.prototype
+C.CD=J.P.prototype
+C.xB=J.O.prototype
+C.Mc=function(hooks) {
+ if (typeof dartExperimentalFixupGetTag != "function") return hooks;
+ hooks.getTag = dartExperimentalFixupGetTag(hooks.getTag);
+}
+C.dE=function(hooks) {
+ var userAgent = typeof navigator == "object" ? navigator.userAgent : "";
+ if (userAgent.indexOf("Firefox") == -1) return hooks;
+ var getTag = hooks.getTag;
+ var quickMap = {
+ "BeforeUnloadEvent": "Event",
+ "DataTransfer": "Clipboard",
+ "GeoGeolocation": "Geolocation",
+ "WorkerMessageEvent": "MessageEvent",
+ "XMLDocument": "Document"};
+ function getTagFirefox(o) {
+ var tag = getTag(o);
+ return quickMap[tag] || tag;
+ }
+ hooks.getTag = getTagFirefox;
+}
+C.Mo=function getTagFallback(o) {
+ if (o == null) return "Null";
+ var constructor = o.constructor;
+ if (typeof constructor == "function") {
+ var name = constructor.builtin$cls;
+ if (typeof name == "string") return name;
+ name = constructor.name;
+ if (typeof name == "string"
+ && name !== ""
+ && name !== "Object"
+ && name !== "Function.prototype") {
+ return name;
+ }
+ }
+ var s = Object.prototype.toString.call(o);
+ return s.substring(8, s.length - 1);
+}
+C.dK=function(getTagFallback) {
+ return function(hooks) {
+ if (typeof navigator != "object") return hooks;
+ var userAgent = navigator.userAgent;
+ if (userAgent.indexOf("Chrome") >= 0 ||
+ userAgent.indexOf("DumpRenderTree") >= 0) {
+ return hooks;
+ }
+ hooks.getTag = getTagFallback;
+ };
+}
+C.XQ=function(hooks) { return hooks; }
+
+C.HX=function() {
+ function typeNameInChrome(obj) { return obj.constructor.name; }
+ function getUnknownTag(object, tag) {
+ if (/^HTML[A-Z].*Element$/.test(tag)) {
+ var name = Object.prototype.toString.call(object);
+ if (name == "[object Object]") return null;
+ return "HTMLElement";
+ }
+ }
+ function getUnknownTagGenericBrowser(object, tag) {
+ if (object instanceof HTMLElement) return "HTMLElement";
+ return getUnknownTag(object, tag);
+ }
+ function prototypeForTag(tag) {
+ if (typeof window == "undefined") return null;
+ if (typeof window[tag] == "undefined") return null;
+ var constructor = window[tag];
+ if (typeof constructor != "function") return null;
+ return constructor.prototype;
+ }
+ function discriminator(tag) { return null; }
+ var isBrowser = typeof navigator == "object";
+ return {
+ getTag: typeNameInChrome,
+ getUnknownTag: isBrowser ? getUnknownTagGenericBrowser : getUnknownTag,
+ prototypeForTag: prototypeForTag,
+ discriminator: discriminator };
+}
+C.i7= ((typeof version == "function" && typeof os == "object" && "system" in os)
+ || (typeof navigator == "object"
+ && navigator.userAgent.indexOf('Chrome') != -1))
+ ? function(x) { return x.$dartCachedLength || x.length; }
+ : function(x) { return x.length; };
+
+C.Px=function(hooks) {
+ var userAgent = typeof navigator == "object" ? navigator.userAgent : "";
+ if (userAgent.indexOf("Trident/") == -1) return hooks;
+ var getTag = hooks.getTag;
+ var quickMap = {
+ "BeforeUnloadEvent": "Event",
+ "DataTransfer": "Clipboard",
+ "HTMLDDElement": "HTMLElement",
+ "HTMLDTElement": "HTMLElement",
+ "HTMLPhraseElement": "HTMLElement",
+ "Position": "Geoposition"
+ };
+ function getTagIE(o) {
+ var tag = getTag(o);
+ var newTag = quickMap[tag];
+ if (newTag) return newTag;
+ if (tag == "Document") {
+ if (!!o.xmlVersion) return "!Document";
+ return "!HTMLDocument";
+ }
+ if (tag == "Object") {
+ if (window.DataView && (o instanceof window.DataView)) return "DataView";
+ }
+ return tag;
+ }
+ function prototypeForTagIE(tag) {
+ if (tag == "Document") return null;
+ var constructor = window[tag];
+ if (constructor == null) return null;
+ return constructor.prototype;
+ }
+ hooks.getTag = getTagIE;
+ hooks.prototypeForTag = prototypeForTagIE;
+}
+C.A3=new P.QM(null)
+C.Ap=new P.dI(null)
+C.GB=Z.vj.prototype
+C.VZ=new N.Ng("FINER",400)
+C.R5=new N.Ng("FINE",500)
+C.IF=new N.Ng("INFO",800)
+C.UP=new N.Ng("WARNING",900)
+C.MG=M.CX.prototype
+I.makeConstantList = function(list) {
+ list.immutable$list = true;
+ list.fixed$length = true;
+ return list;
+};
+C.Gb=H.VM(I.makeConstantList([127,2047,65535,1114111]),[J.im])
+C.HE=I.makeConstantList([0,0,26624,1023,0,0,65534,2047])
+C.mK=I.makeConstantList([0,0,26624,1023,65534,2047,65534,2047])
+C.xu=I.makeConstantList([43,45,42,47,33,38,60,61,62,63,94,124])
+C.u0=I.makeConstantList(["==","!=","<=",">=","||","&&"])
+C.Me=H.VM(I.makeConstantList([]),[P.Ms])
+C.dn=H.VM(I.makeConstantList([]),[P.Fw])
+C.hU=H.VM(I.makeConstantList([]),[P.L9u])
+C.xD=I.makeConstantList([])
+C.Qy=I.makeConstantList(["in","this"])
+C.kg=I.makeConstantList([0,0,24576,1023,65534,34815,65534,18431])
+C.Wd=I.makeConstantList([0,0,32722,12287,65535,34815,65534,18431])
+C.iq=I.makeConstantList([40,41,91,93,123,125])
+C.zJ=I.makeConstantList(["caption","col","colgroup","option","optgroup","tbody","td","tfoot","th","thead","tr"])
+C.uE=new H.LP(11,{caption:null,col:null,colgroup:null,option:null,optgroup:null,tbody:null,td:null,tfoot:null,th:null,thead:null,tr:null},C.zJ)
+C.uS=I.makeConstantList(["webkitanimationstart","webkitanimationend","webkittransitionend","domfocusout","domfocusin","animationend","animationiteration","animationstart","doubleclick","fullscreenchange","fullscreenerror","keyadded","keyerror","keymessage","needkey","speechchange"])
+C.FS=new H.LP(16,{webkitanimationstart:"webkitAnimationStart",webkitanimationend:"webkitAnimationEnd",webkittransitionend:"webkitTransitionEnd",domfocusout:"DOMFocusOut",domfocusin:"DOMFocusIn",animationend:"webkitAnimationEnd",animationiteration:"webkitAnimationIteration",animationstart:"webkitAnimationStart",doubleclick:"dblclick",fullscreenchange:"webkitfullscreenchange",fullscreenerror:"webkitfullscreenerror",keyadded:"webkitkeyadded",keyerror:"webkitkeyerror",keymessage:"webkitkeymessage",needkey:"webkitneedkey",speechchange:"webkitSpeechChange"},C.uS)
+C.p5=I.makeConstantList(["!",":",",",")","]","}","?","||","&&","|","^","&","!=","==",">=",">","<=","<","+","-","%","/","*","(","[",".","{"])
+C.dj=new H.LP(27,{"!":0,":":0,",":0,")":0,"]":0,"}":0,"?":1,"||":2,"&&":3,"|":4,"^":5,"&":6,"!=":7,"==":7,">=":8,">":8,"<=":8,"<":8,"+":9,"-":9,"%":10,"/":10,"*":10,"(":11,"[":11,".":11,"{":11},C.p5)
+C.pa=I.makeConstantList(["name","extends","constructor","noscript","attributes"])
+C.kr=new H.LP(5,{name:1,extends:1,constructor:1,noscript:1,attributes:1},C.pa)
+C.ME=I.makeConstantList(["enumerate"])
+C.va=new H.LP(1,{enumerate:K.ZO},C.ME)
+C.Wp=L.Nh.prototype
+C.Xg=Q.ih.prototype
+C.t5=W.BH.prototype
+C.k0=V.F1.prototype
+C.mk=Z.uL.prototype
+C.xk=A.XP.prototype
+C.Iv=A.ir.prototype
+C.Cc=Q.NQ.prototype
+C.cJ=U.fI.prototype
+C.Ks=X.kK.prototype
+C.bg=X.uw.prototype
+C.PU=new H.GD("dart.core.Object")
+C.nz=new H.GD("dart.core.DateTime")
+C.Ts=new H.GD("dart.core.bool")
+C.A5=new H.GD("Directory")
+C.pk=new H.GD("Platform")
+C.fz=new H.GD("[]")
+C.wh=new H.GD("app")
+C.Ka=new H.GD("call")
+C.XA=new H.GD("cls")
+C.b1=new H.GD("code")
+C.to=new H.GD("createRuntimeType")
+C.Je=new H.GD("current")
+C.h1=new H.GD("currentHash")
+C.tv=new H.GD("currentHashUri")
+C.Na=new H.GD("devtools")
+C.Jw=new H.GD("displayValue")
+C.nN=new H.GD("dynamic")
+C.YU=new H.GD("error")
+C.Yn=new H.GD("error_obj")
+C.WQ=new H.GD("field")
+C.nf=new H.GD("function")
+C.AZ=new H.GD("dart.core.String")
+C.Di=new H.GD("iconClass")
+C.EN=new H.GD("id")
+C.fn=new H.GD("instance")
+C.eJ=new H.GD("instruction")
+C.Y2=new H.GD("isolate")
+C.Gd=new H.GD("json")
+C.fy=new H.GD("kind")
+C.Wn=new H.GD("length")
+C.EV=new H.GD("library")
+C.Cv=new H.GD("lines")
+C.PC=new H.GD("dart.core.int")
+C.wt=new H.GD("members")
+C.KY=new H.GD("messageType")
+C.YS=new H.GD("name")
+C.OV=new H.GD("noSuchMethod")
+C.Ws=new H.GD("operatingSystem")
+C.X9=new H.GD("paddedLine")
+C.qb=new H.GD("prefix")
+C.Qi=new H.GD("registerCallback")
+C.wH=new H.GD("responses")
+C.ok=new H.GD("dart.core.Null")
+C.md=new H.GD("dart.core.double")
+C.fX=new H.GD("script")
+C.eC=new H.GD("[]=")
+C.hn=new H.GD("source")
+C.kw=new H.GD("trace")
+C.Fh=new H.GD("url")
+C.ls=new H.GD("value")
+C.eR=new H.GD("valueType")
+C.QK=new H.GD("window")
+C.vO=H.mm('br')
+C.wK=new H.Lm(C.vO,"K",0)
+C.SL=H.mm('Ae')
+C.WX=new H.Lm(C.SL,"V",0)
+C.QJ=H.mm('xh')
+C.wW=new H.Lm(C.QJ,"T",0)
+C.wa=new H.Lm(C.vO,"V",0)
+C.Ti=H.mm('wn')
+C.Mt=new H.Lm(C.Ti,"E",0)
+C.Ye=H.mm('hx')
+C.G6=H.mm('F1')
+C.NM=H.mm('Nh')
+C.nY=H.mm('a')
+C.Yc=H.mm('iP')
+C.LN=H.mm('Be')
+C.Qa=H.mm('u7')
+C.xS=H.mm('UZ')
+C.PT=H.mm('CX')
+C.Op=H.mm('G8')
+C.xF=H.mm('NQ')
+C.b4=H.mm('ih')
+C.Ob=H.mm('kK')
+C.hG=H.mm('ir')
+C.aj=H.mm('fI')
+C.dA=H.mm('Ms')
+C.mo=H.mm('Fv')
+C.O4=H.mm('double')
+C.xE=H.mm('aC')
+C.yw=H.mm('int')
+C.vuj=H.mm('uw')
+C.j6=H.mm('qr')
+C.C6=H.mm('vj')
+C.CT=H.mm('St')
+C.Q4=H.mm('uL')
+C.yQ=H.mm('EH')
+C.Db=H.mm('String')
+C.yg=H.mm('I3')
+C.XU=H.mm('i6')
+C.Bm=H.mm('XP')
+C.Wz=H.mm('pR')
+C.HL=H.mm('bool')
+C.HH=H.mm('dynamic')
+C.Gp=H.mm('cw')
+C.mnH=H.mm('Ds')
+C.CS=H.mm('vm')
+C.XK=H.mm('Gk')
+C.GX=H.mm('c8')
+C.vB=J.is.prototype
+C.dy=new P.z0(!1)
+C.ol=W.K5.prototype
+C.hi=H.VM(new W.kG(W.f0),[W.Lq])
+C.Qq=new P.wJ(null,null,null,null,null,null,null,null,null,null,null,null)
+$.lE=null
+$.b9=1
+$.te="$cachedFunction"
+$.eb="$cachedInvocation"
+$.NF=null
+$.TX=null
+$.x7=null
+$.nw=null
+$.vv=null
+$.Bv=null
+$.oK=null
+$.tY=null
+$.TH=!1
+$.X3=C.NU
+$.Ss=0
+$.L4=null
+$.PN=null
+$.RL=!1
+$.Y4=C.IF
+$.xO=0
+$.el=0
+$.tW=null
+$.Td=!1
+$.M0=0
+$.uP=!0
+$.To=null
+J.AA=function(a){return J.RE(a).GB(a)}
+J.AB=function(a){return J.RE(a).gkU(a)}
+J.AF=function(a){return J.RE(a).gIi(a)}
+J.AG=function(a){return J.x(a).bu(a)}
+J.B8=function(a){return J.RE(a).gQ0(a)}
+J.BM=function(a,b){return J.RE(a).jx(a,b)}
+J.C0=function(a,b){return J.w1(a).ez(a,b)}
+J.Co=function(a){return J.RE(a).gcC(a)}
+J.DA=function(a){return J.RE(a).goc(a)}
+J.DB=function(a,b){return J.w1(a).Ay(a,b)}
+J.DF=function(a,b){return J.RE(a).soc(a,b)}
+J.Dz=function(a,b){return J.rY(a).j(a,b)}
+J.EC=function(a){return J.RE(a).giC(a)}
+J.EY=function(a,b){return J.RE(a).od(a,b)}
+J.Eg=function(a,b){return J.rY(a).Tc(a,b)}
+J.Eh=function(a,b){return J.Wx(a).O(a,b)}
+J.F8=function(a){return J.RE(a).gjO(a)}
+J.FN=function(a){return J.U6(a).gl0(a)}
+J.FW=function(a,b){if(typeof a=="number"&&typeof b=="number")return a/b
+return J.Wx(a).V(a,b)}
+J.GJ=function(a,b,c,d){return J.RE(a).Y9(a,b,c,d)}
+J.GK=function(a){return J.RE(a).glc(a)}
+J.GP=function(a){return J.w1(a).gA(a)}
+J.GS=function(a,b,c,d){return J.RE(a).rJ(a,b,c,d)}
+J.GW=function(a){return J.RE(a).gn4(a)}
+J.H4=function(a,b){return J.RE(a).wR(a,b)}
+J.Hb=function(a,b){if(typeof a=="number"&&typeof b=="number")return a<=b
+return J.Wx(a).E(a,b)}
+J.Hf=function(a){return J.RE(a).gTq(a)}
+J.I8=function(a,b,c){return J.rY(a).wL(a,b,c)}
+J.Ib=function(a){return J.RE(a).gqh(a)}
+J.Ih=function(a,b,c){return J.RE(a).X6(a,b,c)}
+J.Ir=function(a){return J.RE(a).gHs(a)}
+J.Iz=function(a){return J.RE(a).gfY(a)}
+J.J5=function(a,b){if(typeof a=="number"&&typeof b=="number")return a>=b
+return J.Wx(a).F(a,b)}
+J.JA=function(a,b,c){return J.rY(a).h8(a,b,c)}
+J.Ja=function(a){return J.RE(a).gr9(a)}
+J.K3=function(a,b){return J.RE(a).Kb(a,b)}
+J.L9=function(a,b){return J.RE(a).Id(a,b)}
+J.LL=function(a){return J.Wx(a).HG(a)}
+J.Lp=function(a){return J.RE(a).geT(a)}
+J.MK=function(a,b){return J.RE(a).Md(a,b)}
+J.MQ=function(a){return J.w1(a).grZ(a)}
+J.MV=function(a,b){return J.RE(a).Ih(a,b)}
+J.Mu=function(a,b){return J.RE(a).sig(a,b)}
+J.Mz=function(a){return J.rY(a).hc(a)}
+J.Or=function(a){return J.RE(a).yx(a)}
+J.Pr=function(a,b){return J.w1(a).eR(a,b)}
+J.Pw=function(a,b){return J.RE(a).sxr(a,b)}
+J.Pz=function(a,b){return J.RE(a).szZ(a,b)}
+J.Q3=function(a,b){return J.RE(a).sr9(a,b)}
+J.QE=function(a){return J.RE(a).gCd(a)}
+J.RF=function(a,b){return J.RE(a).WO(a,b)}
+J.Ro=function(a){return J.RE(a).gjU(a)}
+J.TD=function(a){return J.RE(a).i4(a)}
+J.TZ=function(a){return J.RE(a).gKV(a)}
+J.Tr=function(a){return J.RE(a).gCj(a)}
+J.UK=function(a,b){return J.RE(a).RR(a,b)}
+J.UQ=function(a,b){if(a.constructor==Array||typeof a=="string"||H.wV(a,a[init.dispatchPropertyName]))if(b>>>0===b&&b<a.length)return a[b]
+return J.U6(a).t(a,b)}
+J.US=function(a,b){return J.RE(a).pr(a,b)}
+J.UU=function(a,b){return J.U6(a).u8(a,b)}
+J.UW=function(a){return J.RE(a).gLU(a)}
+J.UX=function(a){return J.RE(a).gmW(a)}
+J.V1=function(a,b){return J.w1(a).Rz(a,b)}
+J.VN=function(a){return J.RE(a).gM0(a)}
+J.Vm=function(a){return J.RE(a).gP(a)}
+J.Vs=function(a){return J.RE(a).gQg(a)}
+J.Vw=function(a,b,c){return J.U6(a).Is(a,b,c)}
+J.W7=function(a){return J.RE(a).Nz(a)}
+J.WB=function(a,b){if(typeof a=="number"&&typeof b=="number")return a+b
+return J.Qc(a).g(a,b)}
+J.WI=function(a){return J.RE(a).gG3(a)}
+J.We=function(a,b){return J.RE(a).scC(a,b)}
+J.Xf=function(a,b){return J.RE(a).oo(a,b)}
+J.Y5=function(a){return J.RE(a).gyT(a)}
+J.Z0=function(a){return J.RE(a).ghr(a)}
+J.Z7=function(a){if(typeof a=="number")return-a
+return J.Wx(a).J(a)}
+J.ZZ=function(a,b){return J.rY(a).yn(a,b)}
+J.bB=function(a){return J.x(a).gbx(a)}
+J.bh=function(a,b,c){return J.rY(a).JT(a,b,c)}
+J.bi=function(a,b){return J.w1(a).h(a,b)}
+J.bs=function(a){return J.RE(a).JP(a)}
+J.c9=function(a,b){return J.RE(a).sa4(a,b)}
+J.co=function(a,b){return J.rY(a).nC(a,b)}
+J.e2=function(a,b,c,d,e,f,g,h,i,j,k,l,m,n,o,p){return J.RE(a).nH(a,b,c,d,e,f,g,h,i,j,k,l,m,n,o,p)}
+J.eI=function(a,b){return J.RE(a).bA(a,b)}
+J.f5=function(a){return J.RE(a).gI(a)}
+J.fP=function(a){return J.RE(a).gDg(a)}
+J.fU=function(a){return J.RE(a).gEX(a)}
+J.hI=function(a){return J.RE(a).gUQ(a)}
+J.i4=function(a,b){return J.w1(a).Zv(a,b)}
+J.iY=function(a){return J.RE(a).gvc(a)}
+J.iZ=function(a){return J.RE(a).gzZ(a)}
+J.ja=function(a,b){return J.w1(a).Vr(a,b)}
+J.jf=function(a,b){return J.x(a).T(a,b)}
+J.kE=function(a,b){return J.U6(a).tg(a,b)}
+J.kH=function(a,b){return J.w1(a).aN(a,b)}
+J.kW=function(a,b,c){if((a.constructor==Array||H.wV(a,a[init.dispatchPropertyName]))&&!a.immutable$list&&b>>>0===b&&b<a.length)return a[b]=c
+return J.w1(a).u(a,b,c)}
+J.l2=function(a){return J.RE(a).gN(a)}
+J.lB=function(a){return J.RE(a).gP1(a)}
+J.m4=function(a){return J.RE(a).gig(a)}
+J.mQ=function(a,b){if(typeof a=="number"&&typeof b=="number")return(a&b)>>>0
+return J.Wx(a).i(a,b)}
+J.nX=function(a){return J.RE(a).gjb(a)}
+J.oE=function(a,b){return J.Qc(a).iM(a,b)}
+J.og=function(a,b){return J.RE(a).sIt(a,b)}
+J.p0=function(a,b){if(typeof a=="number"&&typeof b=="number")return a*b
+return J.Wx(a).U(a,b)}
+J.pO=function(a){return J.U6(a).gor(a)}
+J.pP=function(a){return J.RE(a).gDD(a)}
+J.q8=function(a){return J.U6(a).gB(a)}
+J.qA=function(a){return J.w1(a).br(a)}
+J.qV=function(a,b,c,d){return J.RE(a).On(a,b,c,d)}
+J.qd=function(a,b,c,d){return J.RE(a).aC(a,b,c,d)}
+J.rP=function(a,b){return J.RE(a).sTq(a,b)}
+J.rr=function(a){return J.rY(a).bS(a)}
+J.ta=function(a,b){return J.RE(a).sP(a,b)}
+J.tb=function(a,b,c,d){return J.RE(a).Z1(a,b,c,d)}
+J.tx=function(a){return J.RE(a).guD(a)}
+J.u6=function(a,b){if(typeof a=="number"&&typeof b=="number")return a<b
+return J.Wx(a).C(a,b)}
+J.uH=function(a,b){return J.rY(a).Fr(a,b)}
+J.uf=function(a){return J.RE(a).gxr(a)}
+J.v1=function(a){return J.x(a).giO(a)}
+J.vX=function(a){return J.w1(a).wg(a)}
+J.vo=function(a,b){return J.w1(a).ev(a,b)}
+J.w8=function(a){return J.RE(a).gkc(a)}
+J.wC=function(a){return J.RE(a).cO(a)}
+J.wg=function(a,b){return J.U6(a).sB(a,b)}
+J.wl=function(a,b){return J.RE(a).Ch(a,b)}
+J.xC=function(a,b){if(a==null)return b==null
+if(typeof a!="object")return b!=null&&a===b
+return J.x(a).n(a,b)}
+J.xH=function(a,b){if(typeof a=="number"&&typeof b=="number")return a-b
+return J.Wx(a).W(a,b)}
+J.xZ=function(a,b){if(typeof a=="number"&&typeof b=="number")return a>b
+return J.Wx(a).D(a,b)}
+J.z2=function(a){return J.RE(a).gG1(a)}
+J.zZ=function(a,b){return J.RE(a).Yv(a,b)}
+J.zj=function(a){return J.RE(a).gvH(a)}
+$.Dq=["Ay","BN","BT","Ba","C","C0","C8","Ch","D","D3","D6","Dh","E","Ec","F","FH","Fr","GB","HG","Hn","Id","Ih","Im","Is","J","J3","JP","JT","JV","Ja","Jk","Kb","LV","Md","Mi","Mu","Nj","Nz","O","On","PM","Pa","Pk","Pv","R3","R4","RB","RR","Rz","SZ","T","T2","TH","TP","TW","Tc","Td","U","UD","UH","UZ","Uc","V","V1","Vr","Vy","W","W3","W4","WO","WZ","Wt","Wz","X6","XG","XU","Xl","Y9","YU","YW","Ys","Yv","Z","Z1","Z2","ZB","ZF","ZL","ZP","Zv","aC","aN","aq","bA","bS","br","bu","cO","cn","d0","dR","dd","du","eR","ea","er","es","ev","ez","f6","fd","fj","fk","fm","g","gA","gB","gBb","gCd","gCj","gDD","gDg","gE8","gEX","gEr","gF1","gFF","gFJ","gFT","gFV","gFe","gG0","gG1","gG3","gGL","gHs","gI","gIi","gJS","gJf","gKE","gKM","gKV","gLA","gLU","gLf","gLm","gM0","gMB","gMj","gN","gNI","gNl","gO3","gP","gP1","gP2","gPp","gPu","gPw","gPy","gQ0","gQG","gQW","gQg","gRn","gRu","gT8","gTM","gTn","gTq","gUQ","gUV","gUz","gV4","gVA","gVB","gVl","gXB","gXf","gXh","gXt","gZw","gai","gbP","gbx","gcC","geT","geb","gey","gfY","ghO","ghf","ghr","gi0","giC","giI","giK","giO","gig","gjL","gjO","gjU","gjb","gk5","gkU","gkc","gkf","gkp","gl0","gl7","glc","gmW","gmm","gn4","goc","gor","gpQ","gpo","gq6","gqC","gqh","gql","gr3","gr9","grK","grZ","gt0","gtD","gtH","gtN","gtT","guD","gvH","gvX","gvc","gvt","gxj","gxr","gyT","gys","gzP","gzZ","gzj","h","h8","hV","hc","i","i4","iA","iM","iw","j","jT","jx","kO","l5","l8","lj","m","mK","mv","n","nB","nC","nH","nP","ni","oB","oW","od","oo","oq","pD","pZ","pl","pr","qZ","r6","rJ","rS","sB","sF1","sFF","sFJ","sFT","sG1","sIt","sLA","sLf","sMj","sNI","sNl","sO3","sP","sP2","sPw","sPy","sQG","sRu","sTn","sTq","sUz","sV4","sVA","sVB","sXB","sXf","sXh","sZw","sa4","sai","scC","seb","sfY","shO","shf","si0","siI","siK","sig","sjO","sk5","skc","skf","sl7","soc","sql","sr9","st0","stD","stH","stN","stT","svX","svt","sxj","sxr","szZ","szj","t","tZ","tg","tt","u","u5","u8","uG","vs","w3","wE","wL","wR","wg","x3","xI","xc","xe","y0","yC","yc","ym","yn","yq","yu","yx","yy","z2","zV"]
+$.Au=[C.Ye,Z.hx,{created:Z.HC},C.G6,V.F1,{created:V.fv},C.NM,L.Nh,{created:L.rJ},C.LN,F.Be,{created:F.Fe},C.Qa,L.u7,{created:L.Tt},C.xS,P.UZ,{},C.PT,M.CX,{created:M.SP},C.Op,P.G8,{},C.xF,Q.NQ,{created:Q.Zo},C.b4,Q.ih,{created:Q.BW},C.Ob,X.kK,{created:X.HO},C.hG,A.ir,{created:A.oa},C.aj,U.fI,{created:U.Ry},C.mo,E.Fv,{created:E.AH},C.xE,Z.aC,{created:Z.zg},C.vuj,X.uw,{created:X.bV},C.j6,D.qr,{created:D.ip},C.C6,Z.vj,{created:Z.un},C.CT,D.St,{created:D.N5},C.Q4,Z.uL,{created:Z.Hx},C.yg,F.I3,{created:F.TW},C.XU,R.i6,{created:R.IT},C.Bm,A.XP,{created:A.XL},C.Wz,B.pR,{created:B.lu},C.mnH,N.Ds,{created:N.p7},C.XK,A.Gk,{created:A.cY}]
+I.$lazy($,"globalThis","DX","jk",function(){return function() { return this; }()})
+I.$lazy($,"globalWindow","pG","Qm",function(){return $.jk().window})
+I.$lazy($,"globalWorker","zA","Nl",function(){return $.jk().Worker})
+I.$lazy($,"globalPostMessageDefined","Da","JU",function(){return $.jk().postMessage!==void 0})
+I.$lazy($,"thisScript","Kb","Cl",function(){return H.yl()})
+I.$lazy($,"workerIds","rS","p6",function(){var z=new P.kM(null)
+H.VM(z,[J.im])
+return z})
+I.$lazy($,"noSuchMethodPattern","lm","WD",function(){return H.cM(H.S7({ toString: function() { return "$receiver$"; } }))})
+I.$lazy($,"notClosurePattern","k1","OI",function(){return H.cM(H.S7({ $method$: null, toString: function() { return "$receiver$"; } }))})
+I.$lazy($,"nullCallPattern","Re","PH",function(){return H.cM(H.S7(null))})
+I.$lazy($,"nullLiteralCallPattern","fN","D1",function(){return H.cM(H.pb())})
+I.$lazy($,"undefinedCallPattern","qi","rx",function(){return H.cM(H.S7(void 0))})
+I.$lazy($,"undefinedLiteralCallPattern","rZ","Kr",function(){return H.cM(H.u9())})
+I.$lazy($,"nullPropertyPattern","BX","W6",function(){return H.cM(H.Mj(null))})
+I.$lazy($,"nullLiteralPropertyPattern","tt","Bi",function(){return H.cM(H.Qd())})
+I.$lazy($,"undefinedPropertyPattern","dt","eA",function(){return H.cM(H.Mj(void 0))})
+I.$lazy($,"undefinedLiteralPropertyPattern","A7","ko",function(){return H.cM(H.m0())})
+I.$lazy($,"customElementsReady","Am","i5",function(){return new B.zO().call$0()})
+I.$lazy($,"_toStringList","Ml","RM",function(){return P.A(null,null)})
+I.$lazy($,"validationPattern","zP","R0",function(){return new H.VR(H.v4("^(?:[a-zA-Z$][a-zA-Z$0-9_]*\\.)*(?:[a-zA-Z$][a-zA-Z$0-9_]*=?|-|unary-|\\[\\]=|~|==|\\[\\]|\\*|/|%|~/|\\+|<<|>>|>=|>|<=|<|&|\\^|\\|)$",!1,!0,!1),null,null)})
+I.$lazy($,"_dynamicType","QG","Cr",function(){return new H.EE(C.nN)})
+I.$lazy($,"librariesByName","Ct","vK",function(){return H.dF()})
+I.$lazy($,"currentJsMirrorSystem","GR","At",function(){return new H.Sn(null,new H.Lj($globalState.N0))})
+I.$lazy($,"mangledNames","tj","bx",function(){return H.hY(init.mangledNames,!1)})
+I.$lazy($,"reflectiveNames","DE","I6",function(){return H.YK($.bx())})
+I.$lazy($,"mangledGlobalNames","iC","Sl",function(){return H.hY(init.mangledGlobalNames,!0)})
+I.$lazy($,"_asyncCallbacks","r1","P8",function(){return P.NZ(null,{func:"X0",void:true})})
+I.$lazy($,"_toStringVisiting","xg","xb",function(){return P.yv(null)})
+I.$lazy($,"_toStringList","yu","tw",function(){return P.A(null,null)})
+I.$lazy($,"_splitRe","Um","cO",function(){return new H.VR(H.v4("^(?:([^:/?#]+):)?(?://(?:([^/?#]*)@)?(?:([\\w\\d\\-\\u0100-\\uffff.%]*)|\\[([A-Fa-f0-9:.]*)\\])(?::([0-9]+))?)?([^?#[]+)?(?:\\?([^#]*))?(?:#(.*))?$",!1,!0,!1),null,null)})
+I.$lazy($,"_safeConsole","wk","UT",function(){return new W.QZ()})
+I.$lazy($,"webkitEvents","fD","Vp",function(){return H.B7(["animationend","webkitAnimationEnd","animationiteration","webkitAnimationIteration","animationstart","webkitAnimationStart","fullscreenchange","webkitfullscreenchange","fullscreenerror","webkitfullscreenerror","keyadded","webkitkeyadded","keyerror","webkitkeyerror","keymessage","webkitkeymessage","needkey","webkitneedkey","pointerlockchange","webkitpointerlockchange","pointerlockerror","webkitpointerlockerror","resourcetimingbufferfull","webkitresourcetimingbufferfull","transitionend","webkitTransitionEnd","speechchange","webkitSpeechChange"],P.L5(null,null,null,null,null))})
+I.$lazy($,"context","eo","LX",function(){return P.ND(function() { return this; }())})
+I.$lazy($,"_loggers","Uj","Iu",function(){var z=H.B7([],P.L5(null,null,null,null,null))
+H.VM(z,[J.O,N.TJ])
+return z})
+I.$lazy($,"currentIsolateMatcher","qY","oy",function(){return new H.VR(H.v4("#/isolates/\\d+/",!1,!0,!1),null,null)})
+I.$lazy($,"_logger","G3","iU",function(){return N.Jx("Observable.dirtyCheck")})
+I.$lazy($,"objectType","XV","aA",function(){return P.re(C.nY)})
+I.$lazy($,"_pathRegExp","Jm","tN",function(){return new L.lP().call$0()})
+I.$lazy($,"_spacesRegExp","JV","c3",function(){return new H.VR(H.v4("\\s",!1,!0,!1),null,null)})
+I.$lazy($,"_logger","y7","aT",function(){return N.Jx("observe.PathObserver")})
+I.$lazy($,"_builder","RU","vw",function(){return B.mq(null,null)})
+I.$lazy($,"posix","yr","IX",function(){return new B.BE("posix","/",new H.VR(H.v4("/",!1,!0,!1),null,null),new H.VR(H.v4("[^/]$",!1,!0,!1),null,null),new H.VR(H.v4("^/",!1,!0,!1),null,null),null)})
+I.$lazy($,"windows","ho","CE",function(){return new B.Qb("windows","\\",new H.VR(H.v4("[/\\\\]",!1,!0,!1),null,null),new H.VR(H.v4("[^/\\\\]$",!1,!0,!1),null,null),new H.VR(H.v4("^(\\\\\\\\|[a-zA-Z]:[/\\\\])",!1,!0,!1),null,null),null)})
+I.$lazy($,"url","ak","LT",function(){return new B.xI("url","/",new H.VR(H.v4("/",!1,!0,!1),null,null),new H.VR(H.v4("(^[a-zA-Z][-+.a-zA-Z\\d]*://|[^/])$",!1,!0,!1),null,null),new H.VR(H.v4("[a-zA-Z][-+.a-zA-Z\\d]*://[^/]*",!1,!0,!1),null,null),new H.VR(H.v4("^/",!1,!0,!1),null,null),null)})
+I.$lazy($,"platform","qu","vP",function(){return B.Rh()})
+I.$lazy($,"_typesByName","Hi","Ej",function(){return P.L5(null,null,null,J.O,P.uq)})
+I.$lazy($,"_waitType","Mp","p2",function(){return P.L5(null,null,null,J.O,A.XP)})
+I.$lazy($,"_waitSuper","uv","xY",function(){return P.L5(null,null,null,J.O,[J.Q,A.XP])})
+I.$lazy($,"_declarations","EJ","cd",function(){return P.L5(null,null,null,J.O,A.XP)})
+I.$lazy($,"_objectType","Cy","Tf",function(){return P.re(C.nY)})
+I.$lazy($,"_reverseEventTranslations","fp","pT",function(){return new A.w12().call$0()})
+I.$lazy($,"bindPattern","ZA","VC",function(){return new H.VR(H.v4("\\{\\{([^{}]*)}}",!1,!0,!1),null,null)})
+I.$lazy($,"_polymerSyntax","Df","Nd",function(){var z=P.L5(null,null,null,J.O,P.a)
+z.Ay(z,C.va)
+return new A.HJ(z)})
+I.$lazy($,"_ready","tS","mC",function(){var z,y
+z=null
+y=new P.Zf(P.Dt(z))
+H.VM(y,[z])
+return y})
+I.$lazy($,"veiledElements","yi","IN",function(){return["body"]})
+I.$lazy($,"_observeLog","VY","yk",function(){return N.Jx("polymer.observe")})
+I.$lazy($,"_eventsLog","Fj","SS",function(){return N.Jx("polymer.events")})
+I.$lazy($,"_unbindLog","fV","P5",function(){return N.Jx("polymer.unbind")})
+I.$lazy($,"_bindLog","Q6","ZH",function(){return N.Jx("polymer.bind")})
+I.$lazy($,"_shadowHost","cU","od",function(){var z=new P.kM(null)
+H.VM(z,[A.dM])
+return z})
+I.$lazy($,"_librariesToLoad","x2","nT",function(){return A.GA(document,J.UW(C.ol.gmW(window)),null,null)})
+I.$lazy($,"_libs","D9","UG",function(){return $.At().gvU()})
+I.$lazy($,"_rootUri","aU","RQ",function(){return $.At().F1.gcZ().gFP()})
+I.$lazy($,"_packageRoot","Po","rw",function(){var z=J.UW(C.ol.gmW(window))
+z=P.r6($.cO().ej(z)).r0
+return H.d($.vw().tM(z))+"/packages/"})
+I.$lazy($,"_loaderLog","ha","M7",function(){return N.Jx("polymer.loader")})
+I.$lazy($,"_typeHandlers","FZ","WJ",function(){return new Z.Md().call$0()})
+I.$lazy($,"_jsHelper","zU","Yr",function(){var z,y
+z=$.At().gvU()
+y=P.r6($.cO().ej("dart:_js_helper"))
+z=z.nb
+return z.t(z,y)})
+I.$lazy($,"_mangledNameField","AU","av",function(){return new M.w13().call$0()})
+I.$lazy($,"_logger","Kp","IS",function(){return N.Jx("polymer_expressions")})
+I.$lazy($,"_BINARY_OPERATORS","tB","bF",function(){return H.B7(["+",new K.wJY(),"-",new K.zOQ(),"*",new K.W6o(),"/",new K.MdQ(),"==",new K.YJG(),"!=",new K.DOe(),">",new K.lPa(),">=",new K.Ufa(),"<",new K.Raa(),"<=",new K.w0(),"||",new K.w4(),"&&",new K.w5(),"|",new K.w7()],P.L5(null,null,null,null,null))})
+I.$lazy($,"_UNARY_OPERATORS","ju","YG",function(){return H.B7(["+",new K.w9(),"-",new K.w10(),"!",new K.w11()],P.L5(null,null,null,null,null))})
+I.$lazy($,"_checkboxEventType","S8","FF",function(){return new M.Uf().call$0()})
+I.$lazy($,"_contentsOwner","mn","LQ",function(){var z=new P.kM(null)
+H.VM(z,[null])
+return z})
+I.$lazy($,"_allTemplatesSelectors","Sf","cz",function(){var z=J.C0(C.uE.gvc(C.uE),new M.Ra())
+return"template, "+z.zV(z,", ")})
+I.$lazy($,"_expando","fF","cm",function(){var z=new P.kM("template_binding")
+H.VM(z,[null])
+return z})
+
+init.functionAliases={}
+init.metadata=[P.a,C.wK,C.wa,C.WX,C.Mt,C.wW,P.uq,"name",J.O,Z.aC,F.Be,R.i6,W.K5,E.Fv,F.I3,D.qr,A.Gk,N.Ds,B.pR,Z.hx,L.u7,D.St,Z.vj,M.CX,L.Nh,Q.ih,V.F1,Z.uL,[K.Ae,3],"index",J.im,"value",3,Q.NQ,U.fI,X.kK,X.uw,P.L8,C.nJ,C.Us,,Z.Vf,F.tu,C.mI,J.kn,"r","e",W.ea,"detail","target",W.KV,R.Vc,[P.L8,P.wv,P.RS],[J.Q,H.Zk],"methodOwner",P.NL,[J.Q,P.RY],"fieldOwner",[P.L8,P.wv,P.RY],[P.L8,P.wv,P.QF],[P.L8,P.wv,P.NL],P.vr,"fieldName",P.wv,"arg",H.Uz,[J.Q,P.vr],P.Ms,"memberName","positionalArguments",J.Q,"namedArguments",[P.L8,P.wv,null],[J.Q,P.Ms],"owner",[J.Q,P.Fw],[J.Q,P.L9u],H.Un,"key",P.QF,H.Tp,"tv","i",E.WZ,F.pv,D.Vfx,A.Dsd,N.tuj,B.Vct,Z.D13,D.WZq,"oldValue",Z.pva,M.cda,"m",[J.Q,P.L8],P.iD,"l","objectId","cid","isolateId",[J.Q,L.Zw],V.waa,L.mL,Z.Nr,5,"newValue",4,[P.cX,1],[P.cX,2],2,1,"v",U.V0,L.Pf,X.V4,X.V6,];$=null
+I = I.$finishIsolateConstructor(I)
+$=new I()
+function convertToFastObject(properties) {
+ function MyClass() {};
+ MyClass.prototype = properties;
+ new MyClass();
+ return properties;
+}
+A = convertToFastObject(A)
+B = convertToFastObject(B)
+C = convertToFastObject(C)
+D = convertToFastObject(D)
+E = convertToFastObject(E)
+F = convertToFastObject(F)
+G = convertToFastObject(G)
+H = convertToFastObject(H)
+J = convertToFastObject(J)
+K = convertToFastObject(K)
+L = convertToFastObject(L)
+M = convertToFastObject(M)
+N = convertToFastObject(N)
+O = convertToFastObject(O)
+P = convertToFastObject(P)
+Q = convertToFastObject(Q)
+R = convertToFastObject(R)
+S = convertToFastObject(S)
+T = convertToFastObject(T)
+U = convertToFastObject(U)
+V = convertToFastObject(V)
+W = convertToFastObject(W)
+X = convertToFastObject(X)
+Y = convertToFastObject(Y)
+Z = convertToFastObject(Z)
+!function(){var z=Object.prototype
+for(var y=0;;y++){var x="___dart_dispatch_record_ZxYxX_0_"
+if(y>0)x=rootProperty+"_"+y
+if(!(x in z))return init.dispatchPropertyName=x}}()
+;(function (callback) {
+ if (typeof document === "undefined") {
+ callback(null);
+ return;
+ }
+ if (document.currentScript) {
+ callback(document.currentScript);
+ return;
+ }
+
+ var scripts = document.scripts;
+ function onLoad(event) {
+ for (var i = 0; i < scripts.length; ++i) {
+ scripts[i].removeEventListener("load", onLoad, false);
+ }
+ callback(event.target);
+ }
+ for (var i = 0; i < scripts.length; ++i) {
+ scripts[i].addEventListener("load", onLoad, false);
+ }
+})(function(currentScript) {
+ init.currentScript = currentScript;
+
+ if (typeof dartMainRunner === "function") {
+ dartMainRunner(function() { H.SG(E.qg); });
+ } else {
+ H.SG(E.qg);
+ }
+})
+function init(){I.p={}
+function generateAccessor(a,b,c){var y=a.length
+var x=a.charCodeAt(y-1)
+var w=false
+if(x==45){y--
+x=a.charCodeAt(y-1)
+a=a.substring(0,y)
+w=true}x=x>=60&&x<=64?x-59:x>=123&&x<=126?x-117:x>=37&&x<=43?x-27:0
+if(x){var v=x&3
+var u=x>>2
+var t=a=a.substring(0,y-1)
+var s=a.indexOf(":")
+if(s>0){t=a.substring(0,s)
+a=a.substring(s+1)}if(v){var r=v&2?"r":""
+var q=v&1?"this":"r"
+var p="return "+q+"."+a
+var o=c+".prototype.g"+t+"="
+var n="function("+r+"){"+p+"}"
+if(w)b.push(o+"$reflectable("+n+");\n")
+else b.push(o+n+";\n")}if(u){var r=u&2?"r,v":"v"
+var q=u&1?"this":"r"
+var p=q+"."+a+"=v"
+var o=c+".prototype.s"+t+"="
+var n="function("+r+"){"+p+"}"
+if(w)b.push(o+"$reflectable("+n+");\n")
+else b.push(o+n+";\n")}}return a}I.p.$generateAccessor=generateAccessor
+function defineClass(a,b,c){var y=[]
+var x="function "+b+"("
+var w=""
+for(var v=0;v<c.length;v++){if(v!=0)x+=", "
+var u=generateAccessor(c[v],y,b)
+var t="parameter_"+u
+x+=t
+w+="this."+u+" = "+t+";\n"}x+=") {\n"+w+"}\n"
+x+=b+".builtin$cls=\""+a+"\";\n"
+x+="$desc=$collectedClasses."+b+";\n"
+x+="if($desc instanceof Array) $desc = $desc[1];\n"
+x+=b+".prototype = $desc;\n"
+if(typeof defineClass.name!="string"){x+=b+".name=\""+b+"\";\n"}x+=y.join("")
+return x}var z=function(){function tmp(){}var y=Object.prototype.hasOwnProperty
+return function(a,b){tmp.prototype=b.prototype
+var x=new tmp()
+var w=a.prototype
+for(var v in w)if(y.call(w,v))x[v]=w[v]
+x.constructor=a
+a.prototype=x
+return x}}()
+I.$finishClasses=function(a,b,c){var y={}
+if(!init.allClasses)init.allClasses={}
+var x=init.allClasses
+var w=Object.prototype.hasOwnProperty
+if(typeof dart_precompiled=="function"){var v=dart_precompiled(a)}else{var u="function $reflectable(fn){fn.$reflectable=1;return fn};\n"+"var $desc;\n"
+var t=[]}for(var s in a){if(w.call(a,s)){var r=a[s]
+if(r instanceof Array)r=r[1]
+var q=r[""],p,o=s,n=q
+if(typeof q=="object"&&q instanceof Array){q=n=q[0]}if(typeof q=="string"){var m=q.split("/")
+if(m.length==2){o=m[0]
+n=m[1]}}var l=n.split(";")
+n=l[1]==""?[]:l[1].split(",")
+p=l[0]
+if(p&&p.indexOf("+")>0){l=p.split("+")
+p=l[0]
+var k=a[l[1]]
+if(k instanceof Array)k=k[1]
+for(var j in k){if(w.call(k,j)&&!w.call(r,j))r[j]=k[j]}}if(typeof dart_precompiled!="function"){u+=defineClass(o,s,n)
+t.push(s)}if(p)y[s]=p}}if(typeof dart_precompiled!="function"){u+="return [\n "+t.join(",\n ")+"\n]"
+var v=new Function("$collectedClasses",u)(a)
+u=null}for(var i=0;i<v.length;i++){var h=v[i]
+var s=h.name
+var r=a[s]
+var g=b
+if(r instanceof Array){g=r[0]||b
+r=r[1]}h["@"]=r
+x[s]=h
+g[s]=h}v=null
+var f={}
+init.interceptorsByTag=Object.create(null)
+init.leafTags={}
+function finishClass(a8){var e=Object.prototype.hasOwnProperty
+if(e.call(f,a8))return
+f[a8]=true
+var d=y[a8]
+if(!d||typeof d!="string")return
+finishClass(d)
+var a0=x[a8]
+var a1=x[d]
+if(!a1)a1=c[d]
+var a2=z(a0,a1)
+if(e.call(a2,"%")){var a3=a2["%"].split(";")
+if(a3[0]){var a4=a3[0].split("|")
+for(var a5=0;a5<a4.length;a5++){init.interceptorsByTag[a4[a5]]=a0
+init.leafTags[a4[a5]]=true}}if(a3[1]){a4=a3[1].split("|")
+if(a3[2]){var a6=a3[2].split("|")
+for(var a5=0;a5<a6.length;a5++){var a7=x[a6[a5]]
+a7.$nativeSuperclassTag=a4[0]}}for(a5=0;a5<a4.length;a5++){init.interceptorsByTag[a4[a5]]=a0
+init.leafTags[a4[a5]]=false}}}}for(var s in y)finishClass(s)}
+I.$lazy=function(a,b,c,d,e){if(!init.lazies)init.lazies={}
+init.lazies[c]=d
+var y={}
+var x={}
+a[c]=y
+a[d]=function(){var w=$[c]
+try{if(w===y){$[c]=x
+try{w=$[c]=e()}finally{if(w===y){if($[c]===x){$[c]=null}}}}else{if(w===x)H.ag(b)}return w}finally{$[d]=function(){return this[c]}}}}
+I.$finishIsolateConstructor=function(a){var y=a.p
+function Isolate(){var x=Object.prototype.hasOwnProperty
+for(var w in y)if(x.call(y,w))this[w]=y[w]
+function ForceEfficientMap(){}ForceEfficientMap.prototype=this
+new ForceEfficientMap()}Isolate.prototype=a.prototype
+Isolate.prototype.constructor=Isolate
+Isolate.p=y
+Isolate.$finishClasses=a.$finishClasses
+Isolate.makeConstantList=a.makeConstantList
+return Isolate}}
+})()
+function dart_precompiled($collectedClasses){var $desc
+function qE(){}qE.builtin$cls="qE"
+if(!"name" in qE)qE.name="qE"
+$desc=$collectedClasses.qE
+if($desc instanceof Array)$desc=$desc[1]
+qE.prototype=$desc
+function Yy(){}Yy.builtin$cls="Yy"
+if(!"name" in Yy)Yy.name="Yy"
+$desc=$collectedClasses.Yy
+if($desc instanceof Array)$desc=$desc[1]
+Yy.prototype=$desc
+function Ps(){}Ps.builtin$cls="Ps"
+if(!"name" in Ps)Ps.name="Ps"
+$desc=$collectedClasses.Ps
+if($desc instanceof Array)$desc=$desc[1]
+Ps.prototype=$desc
+Ps.prototype.gcC=function(receiver){return receiver.hash}
+Ps.prototype.scC=function(receiver,v){return receiver.hash=v}
+Ps.prototype.gLU=function(receiver){return receiver.href}
+Ps.prototype.gN=function(receiver){return receiver.target}
+Ps.prototype.gr9=function(receiver){return receiver.type}
+Ps.prototype.sr9=function(receiver,v){return receiver.type=v}
+function rK(){}rK.builtin$cls="rK"
+if(!"name" in rK)rK.name="rK"
+$desc=$collectedClasses.rK
+if($desc instanceof Array)$desc=$desc[1]
+rK.prototype=$desc
+function fY(){}fY.builtin$cls="fY"
+if(!"name" in fY)fY.name="fY"
+$desc=$collectedClasses.fY
+if($desc instanceof Array)$desc=$desc[1]
+fY.prototype=$desc
+fY.prototype.gcC=function(receiver){return receiver.hash}
+fY.prototype.gLU=function(receiver){return receiver.href}
+fY.prototype.gN=function(receiver){return receiver.target}
+function Mr(){}Mr.builtin$cls="Mr"
+if(!"name" in Mr)Mr.name="Mr"
+$desc=$collectedClasses.Mr
+if($desc instanceof Array)$desc=$desc[1]
+Mr.prototype=$desc
+function zx(){}zx.builtin$cls="zx"
+if(!"name" in zx)zx.name="zx"
+$desc=$collectedClasses.zx
+if($desc instanceof Array)$desc=$desc[1]
+zx.prototype=$desc
+function ct(){}ct.builtin$cls="ct"
+if(!"name" in ct)ct.name="ct"
+$desc=$collectedClasses.ct
+if($desc instanceof Array)$desc=$desc[1]
+ct.prototype=$desc
+function nB(){}nB.builtin$cls="nB"
+if(!"name" in nB)nB.name="nB"
+$desc=$collectedClasses.nB
+if($desc instanceof Array)$desc=$desc[1]
+nB.prototype=$desc
+nB.prototype.gLU=function(receiver){return receiver.href}
+nB.prototype.gN=function(receiver){return receiver.target}
+function i3(){}i3.builtin$cls="i3"
+if(!"name" in i3)i3.name="i3"
+$desc=$collectedClasses.i3
+if($desc instanceof Array)$desc=$desc[1]
+i3.prototype=$desc
+i3.prototype.gO3=function(receiver){return receiver.url}
+function it(){}it.builtin$cls="it"
+if(!"name" in it)it.name="it"
+$desc=$collectedClasses.it
+if($desc instanceof Array)$desc=$desc[1]
+it.prototype=$desc
+function Az(){}Az.builtin$cls="Az"
+if(!"name" in Az)Az.name="Az"
+$desc=$collectedClasses.Az
+if($desc instanceof Array)$desc=$desc[1]
+Az.prototype=$desc
+Az.prototype.gr9=function(receiver){return receiver.type}
+function QP(){}QP.builtin$cls="QP"
+if(!"name" in QP)QP.name="QP"
+$desc=$collectedClasses.QP
+if($desc instanceof Array)$desc=$desc[1]
+QP.prototype=$desc
+function QW(){}QW.builtin$cls="QW"
+if(!"name" in QW)QW.name="QW"
+$desc=$collectedClasses.QW
+if($desc instanceof Array)$desc=$desc[1]
+QW.prototype=$desc
+QW.prototype.gMB=function(receiver){return receiver.form}
+QW.prototype.goc=function(receiver){return receiver.name}
+QW.prototype.soc=function(receiver,v){return receiver.name=v}
+QW.prototype.gr9=function(receiver){return receiver.type}
+QW.prototype.sr9=function(receiver,v){return receiver.type=v}
+QW.prototype.gP=function(receiver){return receiver.value}
+QW.prototype.sP=function(receiver,v){return receiver.value=v}
+function n6(){}n6.builtin$cls="n6"
+if(!"name" in n6)n6.name="n6"
+$desc=$collectedClasses.n6
+if($desc instanceof Array)$desc=$desc[1]
+n6.prototype=$desc
+function Ny(){}Ny.builtin$cls="Ny"
+if(!"name" in Ny)Ny.name="Ny"
+$desc=$collectedClasses.Ny
+if($desc instanceof Array)$desc=$desc[1]
+Ny.prototype=$desc
+function OM(){}OM.builtin$cls="OM"
+if(!"name" in OM)OM.name="OM"
+$desc=$collectedClasses.OM
+if($desc instanceof Array)$desc=$desc[1]
+OM.prototype=$desc
+OM.prototype.gRn=function(receiver){return receiver.data}
+OM.prototype.gB=function(receiver){return receiver.length}
+function QQ(){}QQ.builtin$cls="QQ"
+if(!"name" in QQ)QQ.name="QQ"
+$desc=$collectedClasses.QQ
+if($desc instanceof Array)$desc=$desc[1]
+QQ.prototype=$desc
+QQ.prototype.gtT=function(receiver){return receiver.code}
+function MA(){}MA.builtin$cls="MA"
+if(!"name" in MA)MA.name="MA"
+$desc=$collectedClasses.MA
+if($desc instanceof Array)$desc=$desc[1]
+MA.prototype=$desc
+function y4(){}y4.builtin$cls="y4"
+if(!"name" in y4)y4.name="y4"
+$desc=$collectedClasses.y4
+if($desc instanceof Array)$desc=$desc[1]
+y4.prototype=$desc
+y4.prototype.gRn=function(receiver){return receiver.data}
+function d7(){}d7.builtin$cls="d7"
+if(!"name" in d7)d7.name="d7"
+$desc=$collectedClasses.d7
+if($desc instanceof Array)$desc=$desc[1]
+d7.prototype=$desc
+function na(){}na.builtin$cls="na"
+if(!"name" in na)na.name="na"
+$desc=$collectedClasses.na
+if($desc instanceof Array)$desc=$desc[1]
+na.prototype=$desc
+function oJ(){}oJ.builtin$cls="oJ"
+if(!"name" in oJ)oJ.name="oJ"
+$desc=$collectedClasses.oJ
+if($desc instanceof Array)$desc=$desc[1]
+oJ.prototype=$desc
+oJ.prototype.gB=function(receiver){return receiver.length}
+function DG(){}DG.builtin$cls="DG"
+if(!"name" in DG)DG.name="DG"
+$desc=$collectedClasses.DG
+if($desc instanceof Array)$desc=$desc[1]
+DG.prototype=$desc
+function mN(){}mN.builtin$cls="mN"
+if(!"name" in mN)mN.name="mN"
+$desc=$collectedClasses.mN
+if($desc instanceof Array)$desc=$desc[1]
+mN.prototype=$desc
+function vH(){}vH.builtin$cls="vH"
+if(!"name" in vH)vH.name="vH"
+$desc=$collectedClasses.vH
+if($desc instanceof Array)$desc=$desc[1]
+vH.prototype=$desc
+function hh(){}hh.builtin$cls="hh"
+if(!"name" in hh)hh.name="hh"
+$desc=$collectedClasses.hh
+if($desc instanceof Array)$desc=$desc[1]
+hh.prototype=$desc
+function Em(){}Em.builtin$cls="Em"
+if(!"name" in Em)Em.name="Em"
+$desc=$collectedClasses.Em
+if($desc instanceof Array)$desc=$desc[1]
+Em.prototype=$desc
+function Sb(){}Sb.builtin$cls="Sb"
+if(!"name" in Sb)Sb.name="Sb"
+$desc=$collectedClasses.Sb
+if($desc instanceof Array)$desc=$desc[1]
+Sb.prototype=$desc
+function rV(){}rV.builtin$cls="rV"
+if(!"name" in rV)rV.name="rV"
+$desc=$collectedClasses.rV
+if($desc instanceof Array)$desc=$desc[1]
+rV.prototype=$desc
+function Wy(){}Wy.builtin$cls="Wy"
+if(!"name" in Wy)Wy.name="Wy"
+$desc=$collectedClasses.Wy
+if($desc instanceof Array)$desc=$desc[1]
+Wy.prototype=$desc
+function YN(){}YN.builtin$cls="YN"
+if(!"name" in YN)YN.name="YN"
+$desc=$collectedClasses.YN
+if($desc instanceof Array)$desc=$desc[1]
+YN.prototype=$desc
+function bA(){}bA.builtin$cls="bA"
+if(!"name" in bA)bA.name="bA"
+$desc=$collectedClasses.bA
+if($desc instanceof Array)$desc=$desc[1]
+bA.prototype=$desc
+function Wq(){}Wq.builtin$cls="Wq"
+if(!"name" in Wq)Wq.name="Wq"
+$desc=$collectedClasses.Wq
+if($desc instanceof Array)$desc=$desc[1]
+Wq.prototype=$desc
+function rv(){}rv.builtin$cls="rv"
+if(!"name" in rv)rv.name="rv"
+$desc=$collectedClasses.rv
+if($desc instanceof Array)$desc=$desc[1]
+rv.prototype=$desc
+rv.prototype.gG1=function(receiver){return receiver.message}
+rv.prototype.goc=function(receiver){return receiver.name}
+function BK(){}BK.builtin$cls="BK"
+if(!"name" in BK)BK.name="BK"
+$desc=$collectedClasses.BK
+if($desc instanceof Array)$desc=$desc[1]
+BK.prototype=$desc
+BK.prototype.gG1=function(receiver){return receiver.message}
+function wj(){}wj.builtin$cls="wj"
+if(!"name" in wj)wj.name="wj"
+$desc=$collectedClasses.wj
+if($desc instanceof Array)$desc=$desc[1]
+wj.prototype=$desc
+function cv(){}cv.builtin$cls="cv"
+if(!"name" in cv)cv.name="cv"
+$desc=$collectedClasses.cv
+if($desc instanceof Array)$desc=$desc[1]
+cv.prototype=$desc
+cv.prototype.gxr=function(receiver){return receiver.className}
+cv.prototype.sxr=function(receiver,v){return receiver.className=v}
+cv.prototype.gjO=function(receiver){return receiver.id}
+cv.prototype.sjO=function(receiver,v){return receiver.id=v}
+function Fs(){}Fs.builtin$cls="Fs"
+if(!"name" in Fs)Fs.name="Fs"
+$desc=$collectedClasses.Fs
+if($desc instanceof Array)$desc=$desc[1]
+Fs.prototype=$desc
+Fs.prototype.goc=function(receiver){return receiver.name}
+Fs.prototype.soc=function(receiver,v){return receiver.name=v}
+Fs.prototype.gLA=function(receiver){return receiver.src}
+Fs.prototype.sLA=function(receiver,v){return receiver.src=v}
+Fs.prototype.gr9=function(receiver){return receiver.type}
+Fs.prototype.sr9=function(receiver,v){return receiver.type=v}
+function SX(){}SX.builtin$cls="SX"
+if(!"name" in SX)SX.name="SX"
+$desc=$collectedClasses.SX
+if($desc instanceof Array)$desc=$desc[1]
+SX.prototype=$desc
+SX.prototype.gkc=function(receiver){return receiver.error}
+SX.prototype.gG1=function(receiver){return receiver.message}
+function ea(){}ea.builtin$cls="ea"
+if(!"name" in ea)ea.name="ea"
+$desc=$collectedClasses.ea
+if($desc instanceof Array)$desc=$desc[1]
+ea.prototype=$desc
+ea.prototype.sIt=function(receiver,v){return receiver._selector=v}
+ea.prototype.gXt=function(receiver){return receiver.bubbles}
+ea.prototype.gIi=function(receiver){return receiver.path}
+ea.prototype.gr9=function(receiver){return receiver.type}
+function D0(){}D0.builtin$cls="D0"
+if(!"name" in D0)D0.name="D0"
+$desc=$collectedClasses.D0
+if($desc instanceof Array)$desc=$desc[1]
+D0.prototype=$desc
+function as(){}as.builtin$cls="as"
+if(!"name" in as)as.name="as"
+$desc=$collectedClasses.as
+if($desc instanceof Array)$desc=$desc[1]
+as.prototype=$desc
+as.prototype.gMB=function(receiver){return receiver.form}
+as.prototype.goc=function(receiver){return receiver.name}
+as.prototype.soc=function(receiver,v){return receiver.name=v}
+as.prototype.gr9=function(receiver){return receiver.type}
+function T5(){}T5.builtin$cls="T5"
+if(!"name" in T5)T5.name="T5"
+$desc=$collectedClasses.T5
+if($desc instanceof Array)$desc=$desc[1]
+T5.prototype=$desc
+T5.prototype.goc=function(receiver){return receiver.name}
+function Aa(){}Aa.builtin$cls="Aa"
+if(!"name" in Aa)Aa.name="Aa"
+$desc=$collectedClasses.Aa
+if($desc instanceof Array)$desc=$desc[1]
+Aa.prototype=$desc
+Aa.prototype.gtT=function(receiver){return receiver.code}
+function u5(){}u5.builtin$cls="u5"
+if(!"name" in u5)u5.name="u5"
+$desc=$collectedClasses.u5
+if($desc instanceof Array)$desc=$desc[1]
+u5.prototype=$desc
+function Yu(){}Yu.builtin$cls="Yu"
+if(!"name" in Yu)Yu.name="Yu"
+$desc=$collectedClasses.Yu
+if($desc instanceof Array)$desc=$desc[1]
+Yu.prototype=$desc
+Yu.prototype.gB=function(receiver){return receiver.length}
+Yu.prototype.gbP=function(receiver){return receiver.method}
+Yu.prototype.goc=function(receiver){return receiver.name}
+Yu.prototype.soc=function(receiver,v){return receiver.name=v}
+Yu.prototype.gN=function(receiver){return receiver.target}
+function iG(){}iG.builtin$cls="iG"
+if(!"name" in iG)iG.name="iG"
+$desc=$collectedClasses.iG
+if($desc instanceof Array)$desc=$desc[1]
+iG.prototype=$desc
+function jP(){}jP.builtin$cls="jP"
+if(!"name" in jP)jP.name="jP"
+$desc=$collectedClasses.jP
+if($desc instanceof Array)$desc=$desc[1]
+jP.prototype=$desc
+function U2(){}U2.builtin$cls="U2"
+if(!"name" in U2)U2.name="U2"
+$desc=$collectedClasses.U2
+if($desc instanceof Array)$desc=$desc[1]
+U2.prototype=$desc
+function tA(){}tA.builtin$cls="tA"
+if(!"name" in tA)tA.name="tA"
+$desc=$collectedClasses.tA
+if($desc instanceof Array)$desc=$desc[1]
+tA.prototype=$desc
+function xn(){}xn.builtin$cls="xn"
+if(!"name" in xn)xn.name="xn"
+$desc=$collectedClasses.xn
+if($desc instanceof Array)$desc=$desc[1]
+xn.prototype=$desc
+function Vb(){}Vb.builtin$cls="Vb"
+if(!"name" in Vb)Vb.name="Vb"
+$desc=$collectedClasses.Vb
+if($desc instanceof Array)$desc=$desc[1]
+Vb.prototype=$desc
+function QH(){}QH.builtin$cls="QH"
+if(!"name" in QH)QH.name="QH"
+$desc=$collectedClasses.QH
+if($desc instanceof Array)$desc=$desc[1]
+QH.prototype=$desc
+function ST(){}ST.builtin$cls="ST"
+if(!"name" in ST)ST.name="ST"
+$desc=$collectedClasses.ST
+if($desc instanceof Array)$desc=$desc[1]
+ST.prototype=$desc
+function X2(){}X2.builtin$cls="X2"
+if(!"name" in X2)X2.name="X2"
+$desc=$collectedClasses.X2
+if($desc instanceof Array)$desc=$desc[1]
+X2.prototype=$desc
+function fJ(){}fJ.builtin$cls="fJ"
+if(!"name" in fJ)fJ.name="fJ"
+$desc=$collectedClasses.fJ
+if($desc instanceof Array)$desc=$desc[1]
+fJ.prototype=$desc
+fJ.prototype.giC=function(receiver){return receiver.responseText}
+fJ.prototype.gys=function(receiver){return receiver.status}
+fJ.prototype.gpo=function(receiver){return receiver.statusText}
+function Vi(){}Vi.builtin$cls="Vi"
+if(!"name" in Vi)Vi.name="Vi"
+$desc=$collectedClasses.Vi
+if($desc instanceof Array)$desc=$desc[1]
+Vi.prototype=$desc
+function tX(){}tX.builtin$cls="tX"
+if(!"name" in tX)tX.name="tX"
+$desc=$collectedClasses.tX
+if($desc instanceof Array)$desc=$desc[1]
+tX.prototype=$desc
+tX.prototype.goc=function(receiver){return receiver.name}
+tX.prototype.soc=function(receiver,v){return receiver.name=v}
+tX.prototype.gLA=function(receiver){return receiver.src}
+tX.prototype.sLA=function(receiver,v){return receiver.src=v}
+function Sg(){}Sg.builtin$cls="Sg"
+if(!"name" in Sg)Sg.name="Sg"
+$desc=$collectedClasses.Sg
+if($desc instanceof Array)$desc=$desc[1]
+Sg.prototype=$desc
+Sg.prototype.gRn=function(receiver){return receiver.data}
+function pA(){}pA.builtin$cls="pA"
+if(!"name" in pA)pA.name="pA"
+$desc=$collectedClasses.pA
+if($desc instanceof Array)$desc=$desc[1]
+pA.prototype=$desc
+pA.prototype.gLA=function(receiver){return receiver.src}
+pA.prototype.sLA=function(receiver,v){return receiver.src=v}
+function Mi(){}Mi.builtin$cls="Mi"
+if(!"name" in Mi)Mi.name="Mi"
+$desc=$collectedClasses.Mi
+if($desc instanceof Array)$desc=$desc[1]
+Mi.prototype=$desc
+Mi.prototype.gTq=function(receiver){return receiver.checked}
+Mi.prototype.sTq=function(receiver,v){return receiver.checked=v}
+Mi.prototype.gMB=function(receiver){return receiver.form}
+Mi.prototype.gqC=function(receiver){return receiver.list}
+Mi.prototype.goc=function(receiver){return receiver.name}
+Mi.prototype.soc=function(receiver,v){return receiver.name=v}
+Mi.prototype.gLA=function(receiver){return receiver.src}
+Mi.prototype.sLA=function(receiver,v){return receiver.src=v}
+Mi.prototype.gr9=function(receiver){return receiver.type}
+Mi.prototype.sr9=function(receiver,v){return receiver.type=v}
+Mi.prototype.gP=function(receiver){return receiver.value}
+Mi.prototype.sP=function(receiver,v){return receiver.value=v}
+function Gt(){}Gt.builtin$cls="Gt"
+if(!"name" in Gt)Gt.name="Gt"
+$desc=$collectedClasses.Gt
+if($desc instanceof Array)$desc=$desc[1]
+Gt.prototype=$desc
+Gt.prototype.gmW=function(receiver){return receiver.location}
+function In(){}In.builtin$cls="In"
+if(!"name" in In)In.name="In"
+$desc=$collectedClasses.In
+if($desc instanceof Array)$desc=$desc[1]
+In.prototype=$desc
+In.prototype.gMB=function(receiver){return receiver.form}
+In.prototype.goc=function(receiver){return receiver.name}
+In.prototype.soc=function(receiver,v){return receiver.name=v}
+In.prototype.gr9=function(receiver){return receiver.type}
+function Gx(){}Gx.builtin$cls="Gx"
+if(!"name" in Gx)Gx.name="Gx"
+$desc=$collectedClasses.Gx
+if($desc instanceof Array)$desc=$desc[1]
+Gx.prototype=$desc
+Gx.prototype.gP=function(receiver){return receiver.value}
+Gx.prototype.sP=function(receiver,v){return receiver.value=v}
+function eP(){}eP.builtin$cls="eP"
+if(!"name" in eP)eP.name="eP"
+$desc=$collectedClasses.eP
+if($desc instanceof Array)$desc=$desc[1]
+eP.prototype=$desc
+eP.prototype.gMB=function(receiver){return receiver.form}
+function AL(){}AL.builtin$cls="AL"
+if(!"name" in AL)AL.name="AL"
+$desc=$collectedClasses.AL
+if($desc instanceof Array)$desc=$desc[1]
+AL.prototype=$desc
+AL.prototype.gMB=function(receiver){return receiver.form}
+function Og(){}Og.builtin$cls="Og"
+if(!"name" in Og)Og.name="Og"
+$desc=$collectedClasses.Og
+if($desc instanceof Array)$desc=$desc[1]
+Og.prototype=$desc
+Og.prototype.gLU=function(receiver){return receiver.href}
+Og.prototype.gr9=function(receiver){return receiver.type}
+Og.prototype.sr9=function(receiver,v){return receiver.type=v}
+function cS(){}cS.builtin$cls="cS"
+if(!"name" in cS)cS.name="cS"
+$desc=$collectedClasses.cS
+if($desc instanceof Array)$desc=$desc[1]
+cS.prototype=$desc
+cS.prototype.gcC=function(receiver){return receiver.hash}
+cS.prototype.scC=function(receiver,v){return receiver.hash=v}
+cS.prototype.gLU=function(receiver){return receiver.href}
+function M6(){}M6.builtin$cls="M6"
+if(!"name" in M6)M6.name="M6"
+$desc=$collectedClasses.M6
+if($desc instanceof Array)$desc=$desc[1]
+M6.prototype=$desc
+M6.prototype.goc=function(receiver){return receiver.name}
+M6.prototype.soc=function(receiver,v){return receiver.name=v}
+function El(){}El.builtin$cls="El"
+if(!"name" in El)El.name="El"
+$desc=$collectedClasses.El
+if($desc instanceof Array)$desc=$desc[1]
+El.prototype=$desc
+El.prototype.gkc=function(receiver){return receiver.error}
+El.prototype.gLA=function(receiver){return receiver.src}
+El.prototype.sLA=function(receiver,v){return receiver.src=v}
+function zm(){}zm.builtin$cls="zm"
+if(!"name" in zm)zm.name="zm"
+$desc=$collectedClasses.zm
+if($desc instanceof Array)$desc=$desc[1]
+zm.prototype=$desc
+zm.prototype.gtT=function(receiver){return receiver.code}
+function SV(){}SV.builtin$cls="SV"
+if(!"name" in SV)SV.name="SV"
+$desc=$collectedClasses.SV
+if($desc instanceof Array)$desc=$desc[1]
+SV.prototype=$desc
+SV.prototype.gtT=function(receiver){return receiver.code}
+function aB(){}aB.builtin$cls="aB"
+if(!"name" in aB)aB.name="aB"
+$desc=$collectedClasses.aB
+if($desc instanceof Array)$desc=$desc[1]
+aB.prototype=$desc
+aB.prototype.gG1=function(receiver){return receiver.message}
+function ku(){}ku.builtin$cls="ku"
+if(!"name" in ku)ku.name="ku"
+$desc=$collectedClasses.ku
+if($desc instanceof Array)$desc=$desc[1]
+ku.prototype=$desc
+ku.prototype.gG1=function(receiver){return receiver.message}
+function KM(){}KM.builtin$cls="KM"
+if(!"name" in KM)KM.name="KM"
+$desc=$collectedClasses.KM
+if($desc instanceof Array)$desc=$desc[1]
+KM.prototype=$desc
+function cW(){}cW.builtin$cls="cW"
+if(!"name" in cW)cW.name="cW"
+$desc=$collectedClasses.cW
+if($desc instanceof Array)$desc=$desc[1]
+cW.prototype=$desc
+cW.prototype.gjO=function(receiver){return receiver.id}
+function DK(){}DK.builtin$cls="DK"
+if(!"name" in DK)DK.name="DK"
+$desc=$collectedClasses.DK
+if($desc instanceof Array)$desc=$desc[1]
+DK.prototype=$desc
+function qm(){}qm.builtin$cls="qm"
+if(!"name" in qm)qm.name="qm"
+$desc=$collectedClasses.qm
+if($desc instanceof Array)$desc=$desc[1]
+qm.prototype=$desc
+function ZY(){}ZY.builtin$cls="ZY"
+if(!"name" in ZY)ZY.name="ZY"
+$desc=$collectedClasses.ZY
+if($desc instanceof Array)$desc=$desc[1]
+ZY.prototype=$desc
+function cx(){}cx.builtin$cls="cx"
+if(!"name" in cx)cx.name="cx"
+$desc=$collectedClasses.cx
+if($desc instanceof Array)$desc=$desc[1]
+cx.prototype=$desc
+function la(){}la.builtin$cls="la"
+if(!"name" in la)la.name="la"
+$desc=$collectedClasses.la
+if($desc instanceof Array)$desc=$desc[1]
+la.prototype=$desc
+la.prototype.gjb=function(receiver){return receiver.content}
+la.prototype.goc=function(receiver){return receiver.name}
+la.prototype.soc=function(receiver,v){return receiver.name=v}
+function Vn(){}Vn.builtin$cls="Vn"
+if(!"name" in Vn)Vn.name="Vn"
+$desc=$collectedClasses.Vn
+if($desc instanceof Array)$desc=$desc[1]
+Vn.prototype=$desc
+Vn.prototype.gP=function(receiver){return receiver.value}
+Vn.prototype.sP=function(receiver,v){return receiver.value=v}
+function PG(){}PG.builtin$cls="PG"
+if(!"name" in PG)PG.name="PG"
+$desc=$collectedClasses.PG
+if($desc instanceof Array)$desc=$desc[1]
+PG.prototype=$desc
+function xe(){}xe.builtin$cls="xe"
+if(!"name" in xe)xe.name="xe"
+$desc=$collectedClasses.xe
+if($desc instanceof Array)$desc=$desc[1]
+xe.prototype=$desc
+function Hw(){}Hw.builtin$cls="Hw"
+if(!"name" in Hw)Hw.name="Hw"
+$desc=$collectedClasses.Hw
+if($desc instanceof Array)$desc=$desc[1]
+Hw.prototype=$desc
+Hw.prototype.gRn=function(receiver){return receiver.data}
+function bn(){}bn.builtin$cls="bn"
+if(!"name" in bn)bn.name="bn"
+$desc=$collectedClasses.bn
+if($desc instanceof Array)$desc=$desc[1]
+bn.prototype=$desc
+function Im(){}Im.builtin$cls="Im"
+if(!"name" in Im)Im.name="Im"
+$desc=$collectedClasses.Im
+if($desc instanceof Array)$desc=$desc[1]
+Im.prototype=$desc
+Im.prototype.gjO=function(receiver){return receiver.id}
+Im.prototype.goc=function(receiver){return receiver.name}
+Im.prototype.gr9=function(receiver){return receiver.type}
+function oB(){}oB.builtin$cls="oB"
+if(!"name" in oB)oB.name="oB"
+$desc=$collectedClasses.oB
+if($desc instanceof Array)$desc=$desc[1]
+oB.prototype=$desc
+function Aj(){}Aj.builtin$cls="Aj"
+if(!"name" in Aj)Aj.name="Aj"
+$desc=$collectedClasses.Aj
+if($desc instanceof Array)$desc=$desc[1]
+Aj.prototype=$desc
+function oU(){}oU.builtin$cls="oU"
+if(!"name" in oU)oU.name="oU"
+$desc=$collectedClasses.oU
+if($desc instanceof Array)$desc=$desc[1]
+oU.prototype=$desc
+function qT(){}qT.builtin$cls="qT"
+if(!"name" in qT)qT.name="qT"
+$desc=$collectedClasses.qT
+if($desc instanceof Array)$desc=$desc[1]
+qT.prototype=$desc
+qT.prototype.gG1=function(receiver){return receiver.message}
+qT.prototype.goc=function(receiver){return receiver.name}
+function KV(){}KV.builtin$cls="KV"
+if(!"name" in KV)KV.name="KV"
+$desc=$collectedClasses.KV
+if($desc instanceof Array)$desc=$desc[1]
+KV.prototype=$desc
+KV.prototype.gq6=function(receiver){return receiver.firstChild}
+KV.prototype.guD=function(receiver){return receiver.nextSibling}
+KV.prototype.gM0=function(receiver){return receiver.ownerDocument}
+KV.prototype.geT=function(receiver){return receiver.parentElement}
+KV.prototype.gKV=function(receiver){return receiver.parentNode}
+KV.prototype.sa4=function(receiver,v){return receiver.textContent=v}
+function BH(){}BH.builtin$cls="BH"
+if(!"name" in BH)BH.name="BH"
+$desc=$collectedClasses.BH
+if($desc instanceof Array)$desc=$desc[1]
+BH.prototype=$desc
+function mh(){}mh.builtin$cls="mh"
+if(!"name" in mh)mh.name="mh"
+$desc=$collectedClasses.mh
+if($desc instanceof Array)$desc=$desc[1]
+mh.prototype=$desc
+mh.prototype.gr9=function(receiver){return receiver.type}
+mh.prototype.sr9=function(receiver,v){return receiver.type=v}
+function G7(){}G7.builtin$cls="G7"
+if(!"name" in G7)G7.name="G7"
+$desc=$collectedClasses.G7
+if($desc instanceof Array)$desc=$desc[1]
+G7.prototype=$desc
+G7.prototype.gRn=function(receiver){return receiver.data}
+G7.prototype.gMB=function(receiver){return receiver.form}
+G7.prototype.goc=function(receiver){return receiver.name}
+G7.prototype.soc=function(receiver,v){return receiver.name=v}
+G7.prototype.gr9=function(receiver){return receiver.type}
+G7.prototype.sr9=function(receiver,v){return receiver.type=v}
+function wq(){}wq.builtin$cls="wq"
+if(!"name" in wq)wq.name="wq"
+$desc=$collectedClasses.wq
+if($desc instanceof Array)$desc=$desc[1]
+wq.prototype=$desc
+function Ql(){}Ql.builtin$cls="Ql"
+if(!"name" in Ql)Ql.name="Ql"
+$desc=$collectedClasses.Ql
+if($desc instanceof Array)$desc=$desc[1]
+Ql.prototype=$desc
+Ql.prototype.gMB=function(receiver){return receiver.form}
+Ql.prototype.gvH=function(receiver){return receiver.index}
+Ql.prototype.gP=function(receiver){return receiver.value}
+Ql.prototype.sP=function(receiver,v){return receiver.value=v}
+function Xp(){}Xp.builtin$cls="Xp"
+if(!"name" in Xp)Xp.name="Xp"
+$desc=$collectedClasses.Xp
+if($desc instanceof Array)$desc=$desc[1]
+Xp.prototype=$desc
+Xp.prototype.gMB=function(receiver){return receiver.form}
+Xp.prototype.goc=function(receiver){return receiver.name}
+Xp.prototype.soc=function(receiver,v){return receiver.name=v}
+Xp.prototype.gr9=function(receiver){return receiver.type}
+Xp.prototype.gP=function(receiver){return receiver.value}
+Xp.prototype.sP=function(receiver,v){return receiver.value=v}
+function bP(){}bP.builtin$cls="bP"
+if(!"name" in bP)bP.name="bP"
+$desc=$collectedClasses.bP
+if($desc instanceof Array)$desc=$desc[1]
+bP.prototype=$desc
+function mX(){}mX.builtin$cls="mX"
+if(!"name" in mX)mX.name="mX"
+$desc=$collectedClasses.mX
+if($desc instanceof Array)$desc=$desc[1]
+mX.prototype=$desc
+function SN(){}SN.builtin$cls="SN"
+if(!"name" in SN)SN.name="SN"
+$desc=$collectedClasses.SN
+if($desc instanceof Array)$desc=$desc[1]
+SN.prototype=$desc
+function HD(){}HD.builtin$cls="HD"
+if(!"name" in HD)HD.name="HD"
+$desc=$collectedClasses.HD
+if($desc instanceof Array)$desc=$desc[1]
+HD.prototype=$desc
+HD.prototype.goc=function(receiver){return receiver.name}
+HD.prototype.soc=function(receiver,v){return receiver.name=v}
+HD.prototype.gP=function(receiver){return receiver.value}
+HD.prototype.sP=function(receiver,v){return receiver.value=v}
+function ni(){}ni.builtin$cls="ni"
+if(!"name" in ni)ni.name="ni"
+$desc=$collectedClasses.ni
+if($desc instanceof Array)$desc=$desc[1]
+ni.prototype=$desc
+function p3(){}p3.builtin$cls="p3"
+if(!"name" in p3)p3.name="p3"
+$desc=$collectedClasses.p3
+if($desc instanceof Array)$desc=$desc[1]
+p3.prototype=$desc
+p3.prototype.gtT=function(receiver){return receiver.code}
+p3.prototype.gG1=function(receiver){return receiver.message}
+function qj(){}qj.builtin$cls="qj"
+if(!"name" in qj)qj.name="qj"
+$desc=$collectedClasses.qj
+if($desc instanceof Array)$desc=$desc[1]
+qj.prototype=$desc
+function qW(){}qW.builtin$cls="qW"
+if(!"name" in qW)qW.name="qW"
+$desc=$collectedClasses.qW
+if($desc instanceof Array)$desc=$desc[1]
+qW.prototype=$desc
+qW.prototype.gN=function(receiver){return receiver.target}
+function KR(){}KR.builtin$cls="KR"
+if(!"name" in KR)KR.name="KR"
+$desc=$collectedClasses.KR
+if($desc instanceof Array)$desc=$desc[1]
+KR.prototype=$desc
+KR.prototype.gP=function(receiver){return receiver.value}
+KR.prototype.sP=function(receiver,v){return receiver.value=v}
+function ew(){}ew.builtin$cls="ew"
+if(!"name" in ew)ew.name="ew"
+$desc=$collectedClasses.ew
+if($desc instanceof Array)$desc=$desc[1]
+ew.prototype=$desc
+function fs(){}fs.builtin$cls="fs"
+if(!"name" in fs)fs.name="fs"
+$desc=$collectedClasses.fs
+if($desc instanceof Array)$desc=$desc[1]
+fs.prototype=$desc
+function bX(){}bX.builtin$cls="bX"
+if(!"name" in bX)bX.name="bX"
+$desc=$collectedClasses.bX
+if($desc instanceof Array)$desc=$desc[1]
+bX.prototype=$desc
+bX.prototype.gO3=function(receiver){return receiver.url}
+function BL(){}BL.builtin$cls="BL"
+if(!"name" in BL)BL.name="BL"
+$desc=$collectedClasses.BL
+if($desc instanceof Array)$desc=$desc[1]
+BL.prototype=$desc
+function MC(){}MC.builtin$cls="MC"
+if(!"name" in MC)MC.name="MC"
+$desc=$collectedClasses.MC
+if($desc instanceof Array)$desc=$desc[1]
+MC.prototype=$desc
+function Mx(){}Mx.builtin$cls="Mx"
+if(!"name" in Mx)Mx.name="Mx"
+$desc=$collectedClasses.Mx
+if($desc instanceof Array)$desc=$desc[1]
+Mx.prototype=$desc
+function j2(){}j2.builtin$cls="j2"
+if(!"name" in j2)j2.name="j2"
+$desc=$collectedClasses.j2
+if($desc instanceof Array)$desc=$desc[1]
+j2.prototype=$desc
+j2.prototype.gLA=function(receiver){return receiver.src}
+j2.prototype.sLA=function(receiver,v){return receiver.src=v}
+j2.prototype.gr9=function(receiver){return receiver.type}
+j2.prototype.sr9=function(receiver,v){return receiver.type=v}
+function yz(){}yz.builtin$cls="yz"
+if(!"name" in yz)yz.name="yz"
+$desc=$collectedClasses.yz
+if($desc instanceof Array)$desc=$desc[1]
+yz.prototype=$desc
+function lp(){}lp.builtin$cls="lp"
+if(!"name" in lp)lp.name="lp"
+$desc=$collectedClasses.lp
+if($desc instanceof Array)$desc=$desc[1]
+lp.prototype=$desc
+lp.prototype.gMB=function(receiver){return receiver.form}
+lp.prototype.gB=function(receiver){return receiver.length}
+lp.prototype.sB=function(receiver,v){return receiver.length=v}
+lp.prototype.goc=function(receiver){return receiver.name}
+lp.prototype.soc=function(receiver,v){return receiver.name=v}
+lp.prototype.gig=function(receiver){return receiver.selectedIndex}
+lp.prototype.sig=function(receiver,v){return receiver.selectedIndex=v}
+lp.prototype.gr9=function(receiver){return receiver.type}
+lp.prototype.gP=function(receiver){return receiver.value}
+lp.prototype.sP=function(receiver,v){return receiver.value=v}
+function pD(){}pD.builtin$cls="pD"
+if(!"name" in pD)pD.name="pD"
+$desc=$collectedClasses.pD
+if($desc instanceof Array)$desc=$desc[1]
+pD.prototype=$desc
+function I0(){}I0.builtin$cls="I0"
+if(!"name" in I0)I0.name="I0"
+$desc=$collectedClasses.I0
+if($desc instanceof Array)$desc=$desc[1]
+I0.prototype=$desc
+I0.prototype.gpQ=function(receiver){return receiver.applyAuthorStyles}
+function QR(){}QR.builtin$cls="QR"
+if(!"name" in QR)QR.name="QR"
+$desc=$collectedClasses.QR
+if($desc instanceof Array)$desc=$desc[1]
+QR.prototype=$desc
+QR.prototype.gLA=function(receiver){return receiver.src}
+QR.prototype.sLA=function(receiver,v){return receiver.src=v}
+QR.prototype.gr9=function(receiver){return receiver.type}
+QR.prototype.sr9=function(receiver,v){return receiver.type=v}
+function Cp(){}Cp.builtin$cls="Cp"
+if(!"name" in Cp)Cp.name="Cp"
+$desc=$collectedClasses.Cp
+if($desc instanceof Array)$desc=$desc[1]
+Cp.prototype=$desc
+function ua(){}ua.builtin$cls="ua"
+if(!"name" in ua)ua.name="ua"
+$desc=$collectedClasses.ua
+if($desc instanceof Array)$desc=$desc[1]
+ua.prototype=$desc
+function zD(){}zD.builtin$cls="zD"
+if(!"name" in zD)zD.name="zD"
+$desc=$collectedClasses.zD
+if($desc instanceof Array)$desc=$desc[1]
+zD.prototype=$desc
+zD.prototype.gkc=function(receiver){return receiver.error}
+zD.prototype.gG1=function(receiver){return receiver.message}
+function Ul(){}Ul.builtin$cls="Ul"
+if(!"name" in Ul)Ul.name="Ul"
+$desc=$collectedClasses.Ul
+if($desc instanceof Array)$desc=$desc[1]
+Ul.prototype=$desc
+function G0(){}G0.builtin$cls="G0"
+if(!"name" in G0)G0.name="G0"
+$desc=$collectedClasses.G0
+if($desc instanceof Array)$desc=$desc[1]
+G0.prototype=$desc
+G0.prototype.goc=function(receiver){return receiver.name}
+function wb(){}wb.builtin$cls="wb"
+if(!"name" in wb)wb.name="wb"
+$desc=$collectedClasses.wb
+if($desc instanceof Array)$desc=$desc[1]
+wb.prototype=$desc
+wb.prototype.gG3=function(receiver){return receiver.key}
+wb.prototype.gzZ=function(receiver){return receiver.newValue}
+wb.prototype.gjL=function(receiver){return receiver.oldValue}
+wb.prototype.gO3=function(receiver){return receiver.url}
+function fq(){}fq.builtin$cls="fq"
+if(!"name" in fq)fq.name="fq"
+$desc=$collectedClasses.fq
+if($desc instanceof Array)$desc=$desc[1]
+fq.prototype=$desc
+fq.prototype.gr9=function(receiver){return receiver.type}
+fq.prototype.sr9=function(receiver,v){return receiver.type=v}
+function h4(){}h4.builtin$cls="h4"
+if(!"name" in h4)h4.name="h4"
+$desc=$collectedClasses.h4
+if($desc instanceof Array)$desc=$desc[1]
+h4.prototype=$desc
+function qk(){}qk.builtin$cls="qk"
+if(!"name" in qk)qk.name="qk"
+$desc=$collectedClasses.qk
+if($desc instanceof Array)$desc=$desc[1]
+qk.prototype=$desc
+function GI(){}GI.builtin$cls="GI"
+if(!"name" in GI)GI.name="GI"
+$desc=$collectedClasses.GI
+if($desc instanceof Array)$desc=$desc[1]
+GI.prototype=$desc
+function Tb(){}Tb.builtin$cls="Tb"
+if(!"name" in Tb)Tb.name="Tb"
+$desc=$collectedClasses.Tb
+if($desc instanceof Array)$desc=$desc[1]
+Tb.prototype=$desc
+function tV(){}tV.builtin$cls="tV"
+if(!"name" in tV)tV.name="tV"
+$desc=$collectedClasses.tV
+if($desc instanceof Array)$desc=$desc[1]
+tV.prototype=$desc
+function BT(){}BT.builtin$cls="BT"
+if(!"name" in BT)BT.name="BT"
+$desc=$collectedClasses.BT
+if($desc instanceof Array)$desc=$desc[1]
+BT.prototype=$desc
+function yY(){}yY.builtin$cls="yY"
+if(!"name" in yY)yY.name="yY"
+$desc=$collectedClasses.yY
+if($desc instanceof Array)$desc=$desc[1]
+yY.prototype=$desc
+yY.prototype.gjb=function(receiver){return receiver.content}
+function kJ(){}kJ.builtin$cls="kJ"
+if(!"name" in kJ)kJ.name="kJ"
+$desc=$collectedClasses.kJ
+if($desc instanceof Array)$desc=$desc[1]
+kJ.prototype=$desc
+function AE(){}AE.builtin$cls="AE"
+if(!"name" in AE)AE.name="AE"
+$desc=$collectedClasses.AE
+if($desc instanceof Array)$desc=$desc[1]
+AE.prototype=$desc
+AE.prototype.gMB=function(receiver){return receiver.form}
+AE.prototype.goc=function(receiver){return receiver.name}
+AE.prototype.soc=function(receiver,v){return receiver.name=v}
+AE.prototype.gr9=function(receiver){return receiver.type}
+AE.prototype.gP=function(receiver){return receiver.value}
+AE.prototype.sP=function(receiver,v){return receiver.value=v}
+function xV(){}xV.builtin$cls="xV"
+if(!"name" in xV)xV.name="xV"
+$desc=$collectedClasses.xV
+if($desc instanceof Array)$desc=$desc[1]
+xV.prototype=$desc
+xV.prototype.gRn=function(receiver){return receiver.data}
+function FH(){}FH.builtin$cls="FH"
+if(!"name" in FH)FH.name="FH"
+$desc=$collectedClasses.FH
+if($desc instanceof Array)$desc=$desc[1]
+FH.prototype=$desc
+function y6(){}y6.builtin$cls="y6"
+if(!"name" in y6)y6.name="y6"
+$desc=$collectedClasses.y6
+if($desc instanceof Array)$desc=$desc[1]
+y6.prototype=$desc
+function RH(){}RH.builtin$cls="RH"
+if(!"name" in RH)RH.name="RH"
+$desc=$collectedClasses.RH
+if($desc instanceof Array)$desc=$desc[1]
+RH.prototype=$desc
+RH.prototype.gfY=function(receiver){return receiver.kind}
+RH.prototype.sfY=function(receiver,v){return receiver.kind=v}
+RH.prototype.gLA=function(receiver){return receiver.src}
+RH.prototype.sLA=function(receiver,v){return receiver.src=v}
+function pU(){}pU.builtin$cls="pU"
+if(!"name" in pU)pU.name="pU"
+$desc=$collectedClasses.pU
+if($desc instanceof Array)$desc=$desc[1]
+pU.prototype=$desc
+function Lq(){}Lq.builtin$cls="Lq"
+if(!"name" in Lq)Lq.name="Lq"
+$desc=$collectedClasses.Lq
+if($desc instanceof Array)$desc=$desc[1]
+Lq.prototype=$desc
+function Mf(){}Mf.builtin$cls="Mf"
+if(!"name" in Mf)Mf.name="Mf"
+$desc=$collectedClasses.Mf
+if($desc instanceof Array)$desc=$desc[1]
+Mf.prototype=$desc
+function BR(){}BR.builtin$cls="BR"
+if(!"name" in BR)BR.name="BR"
+$desc=$collectedClasses.BR
+if($desc instanceof Array)$desc=$desc[1]
+BR.prototype=$desc
+function r4(){}r4.builtin$cls="r4"
+if(!"name" in r4)r4.name="r4"
+$desc=$collectedClasses.r4
+if($desc instanceof Array)$desc=$desc[1]
+r4.prototype=$desc
+function aG(){}aG.builtin$cls="aG"
+if(!"name" in aG)aG.name="aG"
+$desc=$collectedClasses.aG
+if($desc instanceof Array)$desc=$desc[1]
+aG.prototype=$desc
+function J6(){}J6.builtin$cls="J6"
+if(!"name" in J6)J6.name="J6"
+$desc=$collectedClasses.J6
+if($desc instanceof Array)$desc=$desc[1]
+J6.prototype=$desc
+function K5(){}K5.builtin$cls="K5"
+if(!"name" in K5)K5.name="K5"
+$desc=$collectedClasses.K5
+if($desc instanceof Array)$desc=$desc[1]
+K5.prototype=$desc
+K5.prototype.goc=function(receiver){return receiver.name}
+K5.prototype.soc=function(receiver,v){return receiver.name=v}
+K5.prototype.gys=function(receiver){return receiver.status}
+function UM(){}UM.builtin$cls="UM"
+if(!"name" in UM)UM.name="UM"
+$desc=$collectedClasses.UM
+if($desc instanceof Array)$desc=$desc[1]
+UM.prototype=$desc
+UM.prototype.goc=function(receiver){return receiver.name}
+UM.prototype.gP=function(receiver){return receiver.value}
+UM.prototype.sP=function(receiver,v){return receiver.value=v}
+function UL(){}UL.builtin$cls="UL"
+if(!"name" in UL)UL.name="UL"
+$desc=$collectedClasses.UL
+if($desc instanceof Array)$desc=$desc[1]
+UL.prototype=$desc
+function rq(){}rq.builtin$cls="rq"
+if(!"name" in rq)rq.name="rq"
+$desc=$collectedClasses.rq
+if($desc instanceof Array)$desc=$desc[1]
+rq.prototype=$desc
+function nK(){}nK.builtin$cls="nK"
+if(!"name" in nK)nK.name="nK"
+$desc=$collectedClasses.nK
+if($desc instanceof Array)$desc=$desc[1]
+nK.prototype=$desc
+function kc(){}kc.builtin$cls="kc"
+if(!"name" in kc)kc.name="kc"
+$desc=$collectedClasses.kc
+if($desc instanceof Array)$desc=$desc[1]
+kc.prototype=$desc
+function ij(){}ij.builtin$cls="ij"
+if(!"name" in ij)ij.name="ij"
+$desc=$collectedClasses.ij
+if($desc instanceof Array)$desc=$desc[1]
+ij.prototype=$desc
+function ty(){}ty.builtin$cls="ty"
+if(!"name" in ty)ty.name="ty"
+$desc=$collectedClasses.ty
+if($desc instanceof Array)$desc=$desc[1]
+ty.prototype=$desc
+function Nf(){}Nf.builtin$cls="Nf"
+if(!"name" in Nf)Nf.name="Nf"
+$desc=$collectedClasses.Nf
+if($desc instanceof Array)$desc=$desc[1]
+Nf.prototype=$desc
+function Nc(){}Nc.builtin$cls="Nc"
+if(!"name" in Nc)Nc.name="Nc"
+$desc=$collectedClasses.Nc
+if($desc instanceof Array)$desc=$desc[1]
+Nc.prototype=$desc
+function rj(){}rj.builtin$cls="rj"
+if(!"name" in rj)rj.name="rj"
+$desc=$collectedClasses.rj
+if($desc instanceof Array)$desc=$desc[1]
+rj.prototype=$desc
+function rh(){}rh.builtin$cls="rh"
+if(!"name" in rh)rh.name="rh"
+$desc=$collectedClasses.rh
+if($desc instanceof Array)$desc=$desc[1]
+rh.prototype=$desc
+function Zv(){}Zv.builtin$cls="Zv"
+if(!"name" in Zv)Zv.name="Zv"
+$desc=$collectedClasses.Zv
+if($desc instanceof Array)$desc=$desc[1]
+Zv.prototype=$desc
+function Q7(){}Q7.builtin$cls="Q7"
+if(!"name" in Q7)Q7.name="Q7"
+$desc=$collectedClasses.Q7
+if($desc instanceof Array)$desc=$desc[1]
+Q7.prototype=$desc
+function hF(){}hF.builtin$cls="hF"
+if(!"name" in hF)hF.name="hF"
+$desc=$collectedClasses.hF
+if($desc instanceof Array)$desc=$desc[1]
+hF.prototype=$desc
+function OF(){}OF.builtin$cls="OF"
+if(!"name" in OF)OF.name="OF"
+$desc=$collectedClasses.OF
+if($desc instanceof Array)$desc=$desc[1]
+OF.prototype=$desc
+function HB(){}HB.builtin$cls="HB"
+if(!"name" in HB)HB.name="HB"
+$desc=$collectedClasses.HB
+if($desc instanceof Array)$desc=$desc[1]
+HB.prototype=$desc
+HB.prototype.gN=function(receiver){return receiver.target}
+HB.prototype.gLU=function(receiver){return receiver.href}
+function ZJ(){}ZJ.builtin$cls="ZJ"
+if(!"name" in ZJ)ZJ.name="ZJ"
+$desc=$collectedClasses.ZJ
+if($desc instanceof Array)$desc=$desc[1]
+ZJ.prototype=$desc
+ZJ.prototype.gLU=function(receiver){return receiver.href}
+function mU(){}mU.builtin$cls="mU"
+if(!"name" in mU)mU.name="mU"
+$desc=$collectedClasses.mU
+if($desc instanceof Array)$desc=$desc[1]
+mU.prototype=$desc
+function eZ(){}eZ.builtin$cls="eZ"
+if(!"name" in eZ)eZ.name="eZ"
+$desc=$collectedClasses.eZ
+if($desc instanceof Array)$desc=$desc[1]
+eZ.prototype=$desc
+function Fl(){}Fl.builtin$cls="Fl"
+if(!"name" in Fl)Fl.name="Fl"
+$desc=$collectedClasses.Fl
+if($desc instanceof Array)$desc=$desc[1]
+Fl.prototype=$desc
+function y5(){}y5.builtin$cls="y5"
+if(!"name" in y5)y5.name="y5"
+$desc=$collectedClasses.y5
+if($desc instanceof Array)$desc=$desc[1]
+y5.prototype=$desc
+function nV(){}nV.builtin$cls="nV"
+if(!"name" in nV)nV.name="nV"
+$desc=$collectedClasses.nV
+if($desc instanceof Array)$desc=$desc[1]
+nV.prototype=$desc
+function Zc(){}Zc.builtin$cls="Zc"
+if(!"name" in Zc)Zc.name="Zc"
+$desc=$collectedClasses.Zc
+if($desc instanceof Array)$desc=$desc[1]
+Zc.prototype=$desc
+function ui(){}ui.builtin$cls="ui"
+if(!"name" in ui)ui.name="ui"
+$desc=$collectedClasses.ui
+if($desc instanceof Array)$desc=$desc[1]
+ui.prototype=$desc
+function D6(){}D6.builtin$cls="D6"
+if(!"name" in D6)D6.name="D6"
+$desc=$collectedClasses.D6
+if($desc instanceof Array)$desc=$desc[1]
+D6.prototype=$desc
+function DQ(){}DQ.builtin$cls="DQ"
+if(!"name" in DQ)DQ.name="DQ"
+$desc=$collectedClasses.DQ
+if($desc instanceof Array)$desc=$desc[1]
+DQ.prototype=$desc
+function Sm(){}Sm.builtin$cls="Sm"
+if(!"name" in Sm)Sm.name="Sm"
+$desc=$collectedClasses.Sm
+if($desc instanceof Array)$desc=$desc[1]
+Sm.prototype=$desc
+function dx(){}dx.builtin$cls="dx"
+if(!"name" in dx)dx.name="dx"
+$desc=$collectedClasses.dx
+if($desc instanceof Array)$desc=$desc[1]
+dx.prototype=$desc
+function es(){}es.builtin$cls="es"
+if(!"name" in es)es.name="es"
+$desc=$collectedClasses.es
+if($desc instanceof Array)$desc=$desc[1]
+es.prototype=$desc
+function eG(){}eG.builtin$cls="eG"
+if(!"name" in eG)eG.name="eG"
+$desc=$collectedClasses.eG
+if($desc instanceof Array)$desc=$desc[1]
+eG.prototype=$desc
+function lv(){}lv.builtin$cls="lv"
+if(!"name" in lv)lv.name="lv"
+$desc=$collectedClasses.lv
+if($desc instanceof Array)$desc=$desc[1]
+lv.prototype=$desc
+lv.prototype.gr9=function(receiver){return receiver.type}
+lv.prototype.gUQ=function(receiver){return receiver.values}
+function pf(){}pf.builtin$cls="pf"
+if(!"name" in pf)pf.name="pf"
+$desc=$collectedClasses.pf
+if($desc instanceof Array)$desc=$desc[1]
+pf.prototype=$desc
+function NV(){}NV.builtin$cls="NV"
+if(!"name" in NV)NV.name="NV"
+$desc=$collectedClasses.NV
+if($desc instanceof Array)$desc=$desc[1]
+NV.prototype=$desc
+NV.prototype.gkp=function(receiver){return receiver.operator}
+function W1(){}W1.builtin$cls="W1"
+if(!"name" in W1)W1.name="W1"
+$desc=$collectedClasses.W1
+if($desc instanceof Array)$desc=$desc[1]
+W1.prototype=$desc
+function zo(){}zo.builtin$cls="zo"
+if(!"name" in zo)zo.name="zo"
+$desc=$collectedClasses.zo
+if($desc instanceof Array)$desc=$desc[1]
+zo.prototype=$desc
+function wf(){}wf.builtin$cls="wf"
+if(!"name" in wf)wf.name="wf"
+$desc=$collectedClasses.wf
+if($desc instanceof Array)$desc=$desc[1]
+wf.prototype=$desc
+function TU(){}TU.builtin$cls="TU"
+if(!"name" in TU)TU.name="TU"
+$desc=$collectedClasses.TU
+if($desc instanceof Array)$desc=$desc[1]
+TU.prototype=$desc
+function bb(){}bb.builtin$cls="bb"
+if(!"name" in bb)bb.name="bb"
+$desc=$collectedClasses.bb
+if($desc instanceof Array)$desc=$desc[1]
+bb.prototype=$desc
+function VE(){}VE.builtin$cls="VE"
+if(!"name" in VE)VE.name="VE"
+$desc=$collectedClasses.VE
+if($desc instanceof Array)$desc=$desc[1]
+VE.prototype=$desc
+function lc(){}lc.builtin$cls="lc"
+if(!"name" in lc)lc.name="lc"
+$desc=$collectedClasses.lc
+if($desc instanceof Array)$desc=$desc[1]
+lc.prototype=$desc
+function Xu(){}Xu.builtin$cls="Xu"
+if(!"name" in Xu)Xu.name="Xu"
+$desc=$collectedClasses.Xu
+if($desc instanceof Array)$desc=$desc[1]
+Xu.prototype=$desc
+function qM(){}qM.builtin$cls="qM"
+if(!"name" in qM)qM.name="qM"
+$desc=$collectedClasses.qM
+if($desc instanceof Array)$desc=$desc[1]
+qM.prototype=$desc
+function tk(){}tk.builtin$cls="tk"
+if(!"name" in tk)tk.name="tk"
+$desc=$collectedClasses.tk
+if($desc instanceof Array)$desc=$desc[1]
+tk.prototype=$desc
+function me(){}me.builtin$cls="me"
+if(!"name" in me)me.name="me"
+$desc=$collectedClasses.me
+if($desc instanceof Array)$desc=$desc[1]
+me.prototype=$desc
+me.prototype.gLU=function(receiver){return receiver.href}
+function qN(){}qN.builtin$cls="qN"
+if(!"name" in qN)qN.name="qN"
+$desc=$collectedClasses.qN
+if($desc instanceof Array)$desc=$desc[1]
+qN.prototype=$desc
+function nh(){}nh.builtin$cls="nh"
+if(!"name" in nh)nh.name="nh"
+$desc=$collectedClasses.nh
+if($desc instanceof Array)$desc=$desc[1]
+nh.prototype=$desc
+function d4(){}d4.builtin$cls="d4"
+if(!"name" in d4)d4.name="d4"
+$desc=$collectedClasses.d4
+if($desc instanceof Array)$desc=$desc[1]
+d4.prototype=$desc
+d4.prototype.gkp=function(receiver){return receiver.operator}
+function MI(){}MI.builtin$cls="MI"
+if(!"name" in MI)MI.name="MI"
+$desc=$collectedClasses.MI
+if($desc instanceof Array)$desc=$desc[1]
+MI.prototype=$desc
+function ca(){}ca.builtin$cls="ca"
+if(!"name" in ca)ca.name="ca"
+$desc=$collectedClasses.ca
+if($desc instanceof Array)$desc=$desc[1]
+ca.prototype=$desc
+function xX(){}xX.builtin$cls="xX"
+if(!"name" in xX)xX.name="xX"
+$desc=$collectedClasses.xX
+if($desc instanceof Array)$desc=$desc[1]
+xX.prototype=$desc
+function eW(){}eW.builtin$cls="eW"
+if(!"name" in eW)eW.name="eW"
+$desc=$collectedClasses.eW
+if($desc instanceof Array)$desc=$desc[1]
+eW.prototype=$desc
+function um(){}um.builtin$cls="um"
+if(!"name" in um)um.name="um"
+$desc=$collectedClasses.um
+if($desc instanceof Array)$desc=$desc[1]
+um.prototype=$desc
+function Fu(){}Fu.builtin$cls="Fu"
+if(!"name" in Fu)Fu.name="Fu"
+$desc=$collectedClasses.Fu
+if($desc instanceof Array)$desc=$desc[1]
+Fu.prototype=$desc
+Fu.prototype.gr9=function(receiver){return receiver.type}
+function OE(){}OE.builtin$cls="OE"
+if(!"name" in OE)OE.name="OE"
+$desc=$collectedClasses.OE
+if($desc instanceof Array)$desc=$desc[1]
+OE.prototype=$desc
+OE.prototype.gLU=function(receiver){return receiver.href}
+function l6(){}l6.builtin$cls="l6"
+if(!"name" in l6)l6.name="l6"
+$desc=$collectedClasses.l6
+if($desc instanceof Array)$desc=$desc[1]
+l6.prototype=$desc
+function BA(){}BA.builtin$cls="BA"
+if(!"name" in BA)BA.name="BA"
+$desc=$collectedClasses.BA
+if($desc instanceof Array)$desc=$desc[1]
+BA.prototype=$desc
+function zp(){}zp.builtin$cls="zp"
+if(!"name" in zp)zp.name="zp"
+$desc=$collectedClasses.zp
+if($desc instanceof Array)$desc=$desc[1]
+zp.prototype=$desc
+function rE(){}rE.builtin$cls="rE"
+if(!"name" in rE)rE.name="rE"
+$desc=$collectedClasses.rE
+if($desc instanceof Array)$desc=$desc[1]
+rE.prototype=$desc
+rE.prototype.gLU=function(receiver){return receiver.href}
+function CC(){}CC.builtin$cls="CC"
+if(!"name" in CC)CC.name="CC"
+$desc=$collectedClasses.CC
+if($desc instanceof Array)$desc=$desc[1]
+CC.prototype=$desc
+function PQ(){}PQ.builtin$cls="PQ"
+if(!"name" in PQ)PQ.name="PQ"
+$desc=$collectedClasses.PQ
+if($desc instanceof Array)$desc=$desc[1]
+PQ.prototype=$desc
+function uz(){}uz.builtin$cls="uz"
+if(!"name" in uz)uz.name="uz"
+$desc=$collectedClasses.uz
+if($desc instanceof Array)$desc=$desc[1]
+uz.prototype=$desc
+function Yd(){}Yd.builtin$cls="Yd"
+if(!"name" in Yd)Yd.name="Yd"
+$desc=$collectedClasses.Yd
+if($desc instanceof Array)$desc=$desc[1]
+Yd.prototype=$desc
+function U0(){}U0.builtin$cls="U0"
+if(!"name" in U0)U0.name="U0"
+$desc=$collectedClasses.U0
+if($desc instanceof Array)$desc=$desc[1]
+U0.prototype=$desc
+function AD(){}AD.builtin$cls="AD"
+if(!"name" in AD)AD.name="AD"
+$desc=$collectedClasses.AD
+if($desc instanceof Array)$desc=$desc[1]
+AD.prototype=$desc
+function Gr(){}Gr.builtin$cls="Gr"
+if(!"name" in Gr)Gr.name="Gr"
+$desc=$collectedClasses.Gr
+if($desc instanceof Array)$desc=$desc[1]
+Gr.prototype=$desc
+Gr.prototype.gLU=function(receiver){return receiver.href}
+function tc(){}tc.builtin$cls="tc"
+if(!"name" in tc)tc.name="tc"
+$desc=$collectedClasses.tc
+if($desc instanceof Array)$desc=$desc[1]
+tc.prototype=$desc
+function GH(){}GH.builtin$cls="GH"
+if(!"name" in GH)GH.name="GH"
+$desc=$collectedClasses.GH
+if($desc instanceof Array)$desc=$desc[1]
+GH.prototype=$desc
+function lo(){}lo.builtin$cls="lo"
+if(!"name" in lo)lo.name="lo"
+$desc=$collectedClasses.lo
+if($desc instanceof Array)$desc=$desc[1]
+lo.prototype=$desc
+function NJ(){}NJ.builtin$cls="NJ"
+if(!"name" in NJ)NJ.name="NJ"
+$desc=$collectedClasses.NJ
+if($desc instanceof Array)$desc=$desc[1]
+NJ.prototype=$desc
+function nd(){}nd.builtin$cls="nd"
+if(!"name" in nd)nd.name="nd"
+$desc=$collectedClasses.nd
+if($desc instanceof Array)$desc=$desc[1]
+nd.prototype=$desc
+nd.prototype.gr9=function(receiver){return receiver.type}
+nd.prototype.sr9=function(receiver,v){return receiver.type=v}
+nd.prototype.gLU=function(receiver){return receiver.href}
+function vt(){}vt.builtin$cls="vt"
+if(!"name" in vt)vt.name="vt"
+$desc=$collectedClasses.vt
+if($desc instanceof Array)$desc=$desc[1]
+vt.prototype=$desc
+function rQ(){}rQ.builtin$cls="rQ"
+if(!"name" in rQ)rQ.name="rQ"
+$desc=$collectedClasses.rQ
+if($desc instanceof Array)$desc=$desc[1]
+rQ.prototype=$desc
+function EU(){}EU.builtin$cls="EU"
+if(!"name" in EU)EU.name="EU"
+$desc=$collectedClasses.EU
+if($desc instanceof Array)$desc=$desc[1]
+EU.prototype=$desc
+EU.prototype.gr9=function(receiver){return receiver.type}
+EU.prototype.sr9=function(receiver,v){return receiver.type=v}
+function LR(){}LR.builtin$cls="LR"
+if(!"name" in LR)LR.name="LR"
+$desc=$collectedClasses.LR
+if($desc instanceof Array)$desc=$desc[1]
+LR.prototype=$desc
+function MB(){}MB.builtin$cls="MB"
+if(!"name" in MB)MB.name="MB"
+$desc=$collectedClasses.MB
+if($desc instanceof Array)$desc=$desc[1]
+MB.prototype=$desc
+function hy(){}hy.builtin$cls="hy"
+if(!"name" in hy)hy.name="hy"
+$desc=$collectedClasses.hy
+if($desc instanceof Array)$desc=$desc[1]
+hy.prototype=$desc
+function r8(){}r8.builtin$cls="r8"
+if(!"name" in r8)r8.name="r8"
+$desc=$collectedClasses.r8
+if($desc instanceof Array)$desc=$desc[1]
+r8.prototype=$desc
+function aS(){}aS.builtin$cls="aS"
+if(!"name" in aS)aS.name="aS"
+$desc=$collectedClasses.aS
+if($desc instanceof Array)$desc=$desc[1]
+aS.prototype=$desc
+function CG(){}CG.builtin$cls="CG"
+if(!"name" in CG)CG.name="CG"
+$desc=$collectedClasses.CG
+if($desc instanceof Array)$desc=$desc[1]
+CG.prototype=$desc
+function qF(){}qF.builtin$cls="qF"
+if(!"name" in qF)qF.name="qF"
+$desc=$collectedClasses.qF
+if($desc instanceof Array)$desc=$desc[1]
+qF.prototype=$desc
+function MT(){}MT.builtin$cls="MT"
+if(!"name" in MT)MT.name="MT"
+$desc=$collectedClasses.MT
+if($desc instanceof Array)$desc=$desc[1]
+MT.prototype=$desc
+function Rk(){}Rk.builtin$cls="Rk"
+if(!"name" in Rk)Rk.name="Rk"
+$desc=$collectedClasses.Rk
+if($desc instanceof Array)$desc=$desc[1]
+Rk.prototype=$desc
+Rk.prototype.gbP=function(receiver){return receiver.method}
+Rk.prototype.gLU=function(receiver){return receiver.href}
+function Eo(){}Eo.builtin$cls="Eo"
+if(!"name" in Eo)Eo.name="Eo"
+$desc=$collectedClasses.Eo
+if($desc instanceof Array)$desc=$desc[1]
+Eo.prototype=$desc
+function Dn(){}Dn.builtin$cls="Dn"
+if(!"name" in Dn)Dn.name="Dn"
+$desc=$collectedClasses.Dn
+if($desc instanceof Array)$desc=$desc[1]
+Dn.prototype=$desc
+function UD(){}UD.builtin$cls="UD"
+if(!"name" in UD)UD.name="UD"
+$desc=$collectedClasses.UD
+if($desc instanceof Array)$desc=$desc[1]
+UD.prototype=$desc
+UD.prototype.gLU=function(receiver){return receiver.href}
+function ZD(){}ZD.builtin$cls="ZD"
+if(!"name" in ZD)ZD.name="ZD"
+$desc=$collectedClasses.ZD
+if($desc instanceof Array)$desc=$desc[1]
+ZD.prototype=$desc
+function NE(){}NE.builtin$cls="NE"
+if(!"name" in NE)NE.name="NE"
+$desc=$collectedClasses.NE
+if($desc instanceof Array)$desc=$desc[1]
+NE.prototype=$desc
+function wD(){}wD.builtin$cls="wD"
+if(!"name" in wD)wD.name="wD"
+$desc=$collectedClasses.wD
+if($desc instanceof Array)$desc=$desc[1]
+wD.prototype=$desc
+wD.prototype.gLU=function(receiver){return receiver.href}
+function BD(){}BD.builtin$cls="BD"
+if(!"name" in BD)BD.name="BD"
+$desc=$collectedClasses.BD
+if($desc instanceof Array)$desc=$desc[1]
+BD.prototype=$desc
+function vRT(){}vRT.builtin$cls="vRT"
+if(!"name" in vRT)vRT.name="vRT"
+$desc=$collectedClasses.vRT
+if($desc instanceof Array)$desc=$desc[1]
+vRT.prototype=$desc
+function Fi(){}Fi.builtin$cls="Fi"
+if(!"name" in Fi)Fi.name="Fi"
+$desc=$collectedClasses.Fi
+if($desc instanceof Array)$desc=$desc[1]
+Fi.prototype=$desc
+function Qr(){}Qr.builtin$cls="Qr"
+if(!"name" in Qr)Qr.name="Qr"
+$desc=$collectedClasses.Qr
+if($desc instanceof Array)$desc=$desc[1]
+Qr.prototype=$desc
+function mj(){}mj.builtin$cls="mj"
+if(!"name" in mj)mj.name="mj"
+$desc=$collectedClasses.mj
+if($desc instanceof Array)$desc=$desc[1]
+mj.prototype=$desc
+function cB(){}cB.builtin$cls="cB"
+if(!"name" in cB)cB.name="cB"
+$desc=$collectedClasses.cB
+if($desc instanceof Array)$desc=$desc[1]
+cB.prototype=$desc
+function uY(){}uY.builtin$cls="uY"
+if(!"name" in uY)uY.name="uY"
+$desc=$collectedClasses.uY
+if($desc instanceof Array)$desc=$desc[1]
+uY.prototype=$desc
+function yR(){}yR.builtin$cls="yR"
+if(!"name" in yR)yR.name="yR"
+$desc=$collectedClasses.yR
+if($desc instanceof Array)$desc=$desc[1]
+yR.prototype=$desc
+function AX(){}AX.builtin$cls="AX"
+if(!"name" in AX)AX.name="AX"
+$desc=$collectedClasses.AX
+if($desc instanceof Array)$desc=$desc[1]
+AX.prototype=$desc
+function xJ(){}xJ.builtin$cls="xJ"
+if(!"name" in xJ)xJ.name="xJ"
+$desc=$collectedClasses.xJ
+if($desc instanceof Array)$desc=$desc[1]
+xJ.prototype=$desc
+function l4(){}l4.builtin$cls="l4"
+if(!"name" in l4)l4.name="l4"
+$desc=$collectedClasses.l4
+if($desc instanceof Array)$desc=$desc[1]
+l4.prototype=$desc
+function Et(){}Et.builtin$cls="Et"
+if(!"name" in Et)Et.name="Et"
+$desc=$collectedClasses.Et
+if($desc instanceof Array)$desc=$desc[1]
+Et.prototype=$desc
+function NC(){}NC.builtin$cls="NC"
+if(!"name" in NC)NC.name="NC"
+$desc=$collectedClasses.NC
+if($desc instanceof Array)$desc=$desc[1]
+NC.prototype=$desc
+function nb(){}nb.builtin$cls="nb"
+if(!"name" in nb)nb.name="nb"
+$desc=$collectedClasses.nb
+if($desc instanceof Array)$desc=$desc[1]
+nb.prototype=$desc
+function By(){}By.builtin$cls="By"
+if(!"name" in By)By.name="By"
+$desc=$collectedClasses.By
+if($desc instanceof Array)$desc=$desc[1]
+By.prototype=$desc
+function xt(){}xt.builtin$cls="xt"
+if(!"name" in xt)xt.name="xt"
+$desc=$collectedClasses.xt
+if($desc instanceof Array)$desc=$desc[1]
+xt.prototype=$desc
+function tG(){}tG.builtin$cls="tG"
+if(!"name" in tG)tG.name="tG"
+$desc=$collectedClasses.tG
+if($desc instanceof Array)$desc=$desc[1]
+tG.prototype=$desc
+function P0(){}P0.builtin$cls="P0"
+if(!"name" in P0)P0.name="P0"
+$desc=$collectedClasses.P0
+if($desc instanceof Array)$desc=$desc[1]
+P0.prototype=$desc
+function Jq(){}Jq.builtin$cls="Jq"
+if(!"name" in Jq)Jq.name="Jq"
+$desc=$collectedClasses.Jq
+if($desc instanceof Array)$desc=$desc[1]
+Jq.prototype=$desc
+function Xr(){}Xr.builtin$cls="Xr"
+if(!"name" in Xr)Xr.name="Xr"
+$desc=$collectedClasses.Xr
+if($desc instanceof Array)$desc=$desc[1]
+Xr.prototype=$desc
+function qD(){}qD.builtin$cls="qD"
+if(!"name" in qD)qD.name="qD"
+$desc=$collectedClasses.qD
+if($desc instanceof Array)$desc=$desc[1]
+qD.prototype=$desc
+function Cf(){}Cf.builtin$cls="Cf"
+if(!"name" in Cf)Cf.name="Cf"
+$desc=$collectedClasses.Cf
+if($desc instanceof Array)$desc=$desc[1]
+Cf.prototype=$desc
+Cf.prototype.gtT=function(receiver){return receiver.code}
+Cf.prototype.gG1=function(receiver){return receiver.message}
+function I2(){}I2.builtin$cls="I2"
+if(!"name" in I2)I2.name="I2"
+$desc=$collectedClasses.I2
+if($desc instanceof Array)$desc=$desc[1]
+I2.prototype=$desc
+function AS(){}AS.builtin$cls="AS"
+if(!"name" in AS)AS.name="AS"
+$desc=$collectedClasses.AS
+if($desc instanceof Array)$desc=$desc[1]
+AS.prototype=$desc
+function Kq(){}Kq.builtin$cls="Kq"
+if(!"name" in Kq)Kq.name="Kq"
+$desc=$collectedClasses.Kq
+if($desc instanceof Array)$desc=$desc[1]
+Kq.prototype=$desc
+function oI(){}oI.builtin$cls="oI"
+if(!"name" in oI)oI.name="oI"
+$desc=$collectedClasses.oI
+if($desc instanceof Array)$desc=$desc[1]
+oI.prototype=$desc
+function mJ(){}mJ.builtin$cls="mJ"
+if(!"name" in mJ)mJ.name="mJ"
+$desc=$collectedClasses.mJ
+if($desc instanceof Array)$desc=$desc[1]
+mJ.prototype=$desc
+function rF(){}rF.builtin$cls="rF"
+if(!"name" in rF)rF.name="rF"
+$desc=$collectedClasses.rF
+if($desc instanceof Array)$desc=$desc[1]
+rF.prototype=$desc
+function vi(){}vi.builtin$cls="vi"
+if(!"name" in vi)vi.name="vi"
+$desc=$collectedClasses.vi
+if($desc instanceof Array)$desc=$desc[1]
+vi.prototype=$desc
+function ZX(){}ZX.builtin$cls="ZX"
+if(!"name" in ZX)ZX.name="ZX"
+$desc=$collectedClasses.ZX
+if($desc instanceof Array)$desc=$desc[1]
+ZX.prototype=$desc
+function ycx(){}ycx.builtin$cls="ycx"
+if(!"name" in ycx)ycx.name="ycx"
+$desc=$collectedClasses.ycx
+if($desc instanceof Array)$desc=$desc[1]
+ycx.prototype=$desc
+function nE(){}nE.builtin$cls="nE"
+if(!"name" in nE)nE.name="nE"
+$desc=$collectedClasses.nE
+if($desc instanceof Array)$desc=$desc[1]
+nE.prototype=$desc
+function zt(){}zt.builtin$cls="zt"
+if(!"name" in zt)zt.name="zt"
+$desc=$collectedClasses.zt
+if($desc instanceof Array)$desc=$desc[1]
+zt.prototype=$desc
+function F0(){}F0.builtin$cls="F0"
+if(!"name" in F0)F0.name="F0"
+$desc=$collectedClasses.F0
+if($desc instanceof Array)$desc=$desc[1]
+F0.prototype=$desc
+function Lt(tT){this.tT=tT}Lt.builtin$cls="Lt"
+if(!"name" in Lt)Lt.name="Lt"
+$desc=$collectedClasses.Lt
+if($desc instanceof Array)$desc=$desc[1]
+Lt.prototype=$desc
+Lt.prototype.gtT=function(receiver){return this.tT}
+function Gv(){}Gv.builtin$cls="Gv"
+if(!"name" in Gv)Gv.name="Gv"
+$desc=$collectedClasses.Gv
+if($desc instanceof Array)$desc=$desc[1]
+Gv.prototype=$desc
+function kn(){}kn.builtin$cls="bool"
+if(!"name" in kn)kn.name="kn"
+$desc=$collectedClasses.kn
+if($desc instanceof Array)$desc=$desc[1]
+kn.prototype=$desc
+function PE(){}PE.builtin$cls="PE"
+if(!"name" in PE)PE.name="PE"
+$desc=$collectedClasses.PE
+if($desc instanceof Array)$desc=$desc[1]
+PE.prototype=$desc
+function QI(){}QI.builtin$cls="QI"
+if(!"name" in QI)QI.name="QI"
+$desc=$collectedClasses.QI
+if($desc instanceof Array)$desc=$desc[1]
+QI.prototype=$desc
+function FP(){}FP.builtin$cls="FP"
+if(!"name" in FP)FP.name="FP"
+$desc=$collectedClasses.FP
+if($desc instanceof Array)$desc=$desc[1]
+FP.prototype=$desc
+function is(){}is.builtin$cls="is"
+if(!"name" in is)is.name="is"
+$desc=$collectedClasses.is
+if($desc instanceof Array)$desc=$desc[1]
+is.prototype=$desc
+function Q(){}Q.builtin$cls="List"
+if(!"name" in Q)Q.name="Q"
+$desc=$collectedClasses.Q
+if($desc instanceof Array)$desc=$desc[1]
+Q.prototype=$desc
+function jx(){}jx.builtin$cls="jx"
+if(!"name" in jx)jx.name="jx"
+$desc=$collectedClasses.jx
+if($desc instanceof Array)$desc=$desc[1]
+jx.prototype=$desc
+function ZC(){}ZC.builtin$cls="ZC"
+if(!"name" in ZC)ZC.name="ZC"
+$desc=$collectedClasses.ZC
+if($desc instanceof Array)$desc=$desc[1]
+ZC.prototype=$desc
+function Jt(){}Jt.builtin$cls="Jt"
+if(!"name" in Jt)Jt.name="Jt"
+$desc=$collectedClasses.Jt
+if($desc instanceof Array)$desc=$desc[1]
+Jt.prototype=$desc
+function P(){}P.builtin$cls="num"
+if(!"name" in P)P.name="P"
+$desc=$collectedClasses.P
+if($desc instanceof Array)$desc=$desc[1]
+P.prototype=$desc
+function im(){}im.builtin$cls="int"
+if(!"name" in im)im.name="im"
+$desc=$collectedClasses.im
+if($desc instanceof Array)$desc=$desc[1]
+im.prototype=$desc
+function Pp(){}Pp.builtin$cls="double"
+if(!"name" in Pp)Pp.name="Pp"
+$desc=$collectedClasses.Pp
+if($desc instanceof Array)$desc=$desc[1]
+Pp.prototype=$desc
+function O(){}O.builtin$cls="String"
+if(!"name" in O)O.name="O"
+$desc=$collectedClasses.O
+if($desc instanceof Array)$desc=$desc[1]
+O.prototype=$desc
+function PK(a){this.a=a}PK.builtin$cls="PK"
+if(!"name" in PK)PK.name="PK"
+$desc=$collectedClasses.PK
+if($desc instanceof Array)$desc=$desc[1]
+PK.prototype=$desc
+function JO(b){this.b=b}JO.builtin$cls="JO"
+if(!"name" in JO)JO.name="JO"
+$desc=$collectedClasses.JO
+if($desc instanceof Array)$desc=$desc[1]
+JO.prototype=$desc
+function O2(Hg,oL,hJ,N0,Nr,Xz,vu,EF,ji,i2,rj,XC,w2){this.Hg=Hg
+this.oL=oL
+this.hJ=hJ
+this.N0=N0
+this.Nr=Nr
+this.Xz=Xz
+this.vu=vu
+this.EF=EF
+this.ji=ji
+this.i2=i2
+this.rj=rj
+this.XC=XC
+this.w2=w2}O2.builtin$cls="O2"
+if(!"name" in O2)O2.name="O2"
+$desc=$collectedClasses.O2
+if($desc instanceof Array)$desc=$desc[1]
+O2.prototype=$desc
+O2.prototype.gi2=function(){return this.i2}
+O2.prototype.si2=function(v){return this.i2=v}
+function aX(jO,Gx,En){this.jO=jO
+this.Gx=Gx
+this.En=En}aX.builtin$cls="aX"
+if(!"name" in aX)aX.name="aX"
+$desc=$collectedClasses.aX
+if($desc instanceof Array)$desc=$desc[1]
+aX.prototype=$desc
+aX.prototype.gjO=function(receiver){return this.jO}
+aX.prototype.sjO=function(receiver,v){return this.jO=v}
+aX.prototype.gEn=function(){return this.En}
+function cC(Rk,bZ){this.Rk=Rk
+this.bZ=bZ}cC.builtin$cls="cC"
+if(!"name" in cC)cC.name="cC"
+$desc=$collectedClasses.cC
+if($desc instanceof Array)$desc=$desc[1]
+cC.prototype=$desc
+function RA(a){this.a=a}RA.builtin$cls="RA"
+if(!"name" in RA)RA.name="RA"
+$desc=$collectedClasses.RA
+if($desc instanceof Array)$desc=$desc[1]
+RA.prototype=$desc
+function IY(F1,i3,G1){this.F1=F1
+this.i3=i3
+this.G1=G1}IY.builtin$cls="IY"
+if(!"name" in IY)IY.name="IY"
+$desc=$collectedClasses.IY
+if($desc instanceof Array)$desc=$desc[1]
+IY.prototype=$desc
+IY.prototype.gF1=function(receiver){return this.F1}
+IY.prototype.sF1=function(receiver,v){return this.F1=v}
+IY.prototype.gG1=function(receiver){return this.G1}
+IY.prototype.sG1=function(receiver,v){return this.G1=v}
+function JH(){}JH.builtin$cls="JH"
+if(!"name" in JH)JH.name="JH"
+$desc=$collectedClasses.JH
+if($desc instanceof Array)$desc=$desc[1]
+JH.prototype=$desc
+function jl(a,b,c,d,e){this.a=a
+this.b=b
+this.c=c
+this.d=d
+this.e=e}jl.builtin$cls="jl"
+if(!"name" in jl)jl.name="jl"
+$desc=$collectedClasses.jl
+if($desc instanceof Array)$desc=$desc[1]
+jl.prototype=$desc
+function Iy(){}Iy.builtin$cls="Iy"
+if(!"name" in Iy)Iy.name="Iy"
+$desc=$collectedClasses.Iy
+if($desc instanceof Array)$desc=$desc[1]
+Iy.prototype=$desc
+function JM(JE,tv){this.JE=JE
+this.tv=tv}JM.builtin$cls="JM"
+if(!"name" in JM)JM.name="JM"
+$desc=$collectedClasses.JM
+if($desc instanceof Array)$desc=$desc[1]
+JM.prototype=$desc
+function Ua(b,c){this.b=b
+this.c=c}Ua.builtin$cls="Ua"
+if(!"name" in Ua)Ua.name="Ua"
+$desc=$collectedClasses.Ua
+if($desc instanceof Array)$desc=$desc[1]
+Ua.prototype=$desc
+function JG(a,d,e){this.a=a
+this.d=d
+this.e=e}JG.builtin$cls="JG"
+if(!"name" in JG)JG.name="JG"
+$desc=$collectedClasses.JG
+if($desc instanceof Array)$desc=$desc[1]
+JG.prototype=$desc
+function ns(Ws,bv,tv){this.Ws=Ws
+this.bv=bv
+this.tv=tv}ns.builtin$cls="ns"
+if(!"name" in ns)ns.name="ns"
+$desc=$collectedClasses.ns
+if($desc instanceof Array)$desc=$desc[1]
+ns.prototype=$desc
+function wd(a,b){this.a=a
+this.b=b}wd.builtin$cls="wd"
+if(!"name" in wd)wd.name="wd"
+$desc=$collectedClasses.wd
+if($desc instanceof Array)$desc=$desc[1]
+wd.prototype=$desc
+function TA(ng,da){this.ng=ng
+this.da=da}TA.builtin$cls="TA"
+if(!"name" in TA)TA.name="TA"
+$desc=$collectedClasses.TA
+if($desc instanceof Array)$desc=$desc[1]
+TA.prototype=$desc
+TA.prototype.gng=function(){return this.ng}
+TA.prototype.gda=function(){return this.da}
+function YP(wc,nn,lv,Pp){this.wc=wc
+this.nn=nn
+this.lv=lv
+this.Pp=Pp}YP.builtin$cls="YP"
+$desc=$collectedClasses.YP
+if($desc instanceof Array)$desc=$desc[1]
+YP.prototype=$desc
+function yc(a){this.a=a}yc.builtin$cls="yc"
+if(!"name" in yc)yc.name="yc"
+$desc=$collectedClasses.yc
+if($desc instanceof Array)$desc=$desc[1]
+yc.prototype=$desc
+function I9(Gx,mR){this.Gx=Gx
+this.mR=mR}I9.builtin$cls="I9"
+if(!"name" in I9)I9.name="I9"
+$desc=$collectedClasses.I9
+if($desc instanceof Array)$desc=$desc[1]
+I9.prototype=$desc
+function Bj(CN,mR){this.CN=CN
+this.mR=mR}Bj.builtin$cls="Bj"
+if(!"name" in Bj)Bj.name="Bj"
+$desc=$collectedClasses.Bj
+if($desc instanceof Array)$desc=$desc[1]
+Bj.prototype=$desc
+function NO(mR){this.mR=mR}NO.builtin$cls="NO"
+if(!"name" in NO)NO.name="NO"
+$desc=$collectedClasses.NO
+if($desc instanceof Array)$desc=$desc[1]
+NO.prototype=$desc
+function II(RZ){this.RZ=RZ}II.builtin$cls="II"
+if(!"name" in II)II.name="II"
+$desc=$collectedClasses.II
+if($desc instanceof Array)$desc=$desc[1]
+II.prototype=$desc
+function aJ(MD){this.MD=MD}aJ.builtin$cls="aJ"
+if(!"name" in aJ)aJ.name="aJ"
+$desc=$collectedClasses.aJ
+if($desc instanceof Array)$desc=$desc[1]
+aJ.prototype=$desc
+function X1(){}X1.builtin$cls="X1"
+if(!"name" in X1)X1.name="X1"
+$desc=$collectedClasses.X1
+if($desc instanceof Array)$desc=$desc[1]
+X1.prototype=$desc
+function HU(){}HU.builtin$cls="HU"
+if(!"name" in HU)HU.name="HU"
+$desc=$collectedClasses.HU
+if($desc instanceof Array)$desc=$desc[1]
+HU.prototype=$desc
+function Pm(wc,nn,lv,Pp){this.wc=wc
+this.nn=nn
+this.lv=lv
+this.Pp=Pp}Pm.builtin$cls="Pm"
+$desc=$collectedClasses.Pm
+if($desc instanceof Array)$desc=$desc[1]
+Pm.prototype=$desc
+function oo(){}oo.builtin$cls="oo"
+if(!"name" in oo)oo.name="oo"
+$desc=$collectedClasses.oo
+if($desc instanceof Array)$desc=$desc[1]
+oo.prototype=$desc
+function OW(a,b){this.a=a
+this.b=b}OW.builtin$cls="OW"
+if(!"name" in OW)OW.name="OW"
+$desc=$collectedClasses.OW
+if($desc instanceof Array)$desc=$desc[1]
+OW.prototype=$desc
+function Dd(){}Dd.builtin$cls="Dd"
+if(!"name" in Dd)Dd.name="Dd"
+$desc=$collectedClasses.Dd
+if($desc instanceof Array)$desc=$desc[1]
+Dd.prototype=$desc
+function AP(){}AP.builtin$cls="AP"
+if(!"name" in AP)AP.name="AP"
+$desc=$collectedClasses.AP
+if($desc instanceof Array)$desc=$desc[1]
+AP.prototype=$desc
+function yH(Kf,zu,p9){this.Kf=Kf
+this.zu=zu
+this.p9=p9}yH.builtin$cls="yH"
+if(!"name" in yH)yH.name="yH"
+$desc=$collectedClasses.yH
+if($desc instanceof Array)$desc=$desc[1]
+yH.prototype=$desc
+function FA(a,b){this.a=a
+this.b=b}FA.builtin$cls="FA"
+if(!"name" in FA)FA.name="FA"
+$desc=$collectedClasses.FA
+if($desc instanceof Array)$desc=$desc[1]
+FA.prototype=$desc
+function Av(c,d){this.c=c
+this.d=d}Av.builtin$cls="Av"
+if(!"name" in Av)Av.name="Av"
+$desc=$collectedClasses.Av
+if($desc instanceof Array)$desc=$desc[1]
+Av.prototype=$desc
+function oH(){}oH.builtin$cls="oH"
+if(!"name" in oH)oH.name="oH"
+$desc=$collectedClasses.oH
+if($desc instanceof Array)$desc=$desc[1]
+oH.prototype=$desc
+function LP(B,il,js){this.B=B
+this.il=il
+this.js=js}LP.builtin$cls="LP"
+if(!"name" in LP)LP.name="LP"
+$desc=$collectedClasses.LP
+if($desc instanceof Array)$desc=$desc[1]
+LP.prototype=$desc
+LP.prototype.gB=function(receiver){return this.B}
+function c2(a,b){this.a=a
+this.b=b}c2.builtin$cls="c2"
+if(!"name" in c2)c2.name="c2"
+$desc=$collectedClasses.c2
+if($desc instanceof Array)$desc=$desc[1]
+c2.prototype=$desc
+function WT(a,b){this.a=a
+this.b=b}WT.builtin$cls="WT"
+if(!"name" in WT)WT.name="WT"
+$desc=$collectedClasses.WT
+if($desc instanceof Array)$desc=$desc[1]
+WT.prototype=$desc
+function p8(a){this.a=a}p8.builtin$cls="p8"
+if(!"name" in p8)p8.name="p8"
+$desc=$collectedClasses.p8
+if($desc instanceof Array)$desc=$desc[1]
+p8.prototype=$desc
+function XR(Nt){this.Nt=Nt}XR.builtin$cls="XR"
+if(!"name" in XR)XR.name="XR"
+$desc=$collectedClasses.XR
+if($desc instanceof Array)$desc=$desc[1]
+XR.prototype=$desc
+function LI(t5,Qp,GF,FQ,md,mG){this.t5=t5
+this.Qp=Qp
+this.GF=GF
+this.FQ=FQ
+this.md=md
+this.mG=mG}LI.builtin$cls="LI"
+if(!"name" in LI)LI.name="LI"
+$desc=$collectedClasses.LI
+if($desc instanceof Array)$desc=$desc[1]
+LI.prototype=$desc
+function A2(mr,eK,Ot){this.mr=mr
+this.eK=eK
+this.Ot=Ot}A2.builtin$cls="A2"
+if(!"name" in A2)A2.name="A2"
+$desc=$collectedClasses.A2
+if($desc instanceof Array)$desc=$desc[1]
+A2.prototype=$desc
+function F3(e0){this.e0=e0}F3.builtin$cls="F3"
+if(!"name" in F3)F3.name="F3"
+$desc=$collectedClasses.F3
+if($desc instanceof Array)$desc=$desc[1]
+F3.prototype=$desc
+F3.prototype.se0=function(v){return this.e0=v}
+function u8(b){this.b=b}u8.builtin$cls="u8"
+if(!"name" in u8)u8.name="u8"
+$desc=$collectedClasses.u8
+if($desc instanceof Array)$desc=$desc[1]
+u8.prototype=$desc
+function Gi(c,d,e){this.c=c
+this.d=d
+this.e=e}Gi.builtin$cls="Gi"
+if(!"name" in Gi)Gi.name="Gi"
+$desc=$collectedClasses.Gi
+if($desc instanceof Array)$desc=$desc[1]
+Gi.prototype=$desc
+function t2(a,f,g){this.a=a
+this.f=f
+this.g=g}t2.builtin$cls="t2"
+if(!"name" in t2)t2.name="t2"
+$desc=$collectedClasses.t2
+if($desc instanceof Array)$desc=$desc[1]
+t2.prototype=$desc
+function Zr(i9,FQ,Vv,yB,Sp,lv){this.i9=i9
+this.FQ=FQ
+this.Vv=Vv
+this.yB=yB
+this.Sp=Sp
+this.lv=lv}Zr.builtin$cls="Zr"
+if(!"name" in Zr)Zr.name="Zr"
+$desc=$collectedClasses.Zr
+if($desc instanceof Array)$desc=$desc[1]
+Zr.prototype=$desc
+function ZQ(Zf,Sp){this.Zf=Zf
+this.Sp=Sp}ZQ.builtin$cls="ZQ"
+if(!"name" in ZQ)ZQ.name="ZQ"
+$desc=$collectedClasses.ZQ
+if($desc instanceof Array)$desc=$desc[1]
+ZQ.prototype=$desc
+function az(Zf,Sp,lv){this.Zf=Zf
+this.Sp=Sp
+this.lv=lv}az.builtin$cls="az"
+if(!"name" in az)az.name="az"
+$desc=$collectedClasses.az
+if($desc instanceof Array)$desc=$desc[1]
+az.prototype=$desc
+function vV(Zf){this.Zf=Zf}vV.builtin$cls="vV"
+if(!"name" in vV)vV.name="vV"
+$desc=$collectedClasses.vV
+if($desc instanceof Array)$desc=$desc[1]
+vV.prototype=$desc
+function Hk(a){this.a=a}Hk.builtin$cls="Hk"
+if(!"name" in Hk)Hk.name="Hk"
+$desc=$collectedClasses.Hk
+if($desc instanceof Array)$desc=$desc[1]
+Hk.prototype=$desc
+function XO(MP,bQ){this.MP=MP
+this.bQ=bQ}XO.builtin$cls="XO"
+if(!"name" in XO)XO.name="XO"
+$desc=$collectedClasses.XO
+if($desc instanceof Array)$desc=$desc[1]
+XO.prototype=$desc
+function dr(a){this.a=a}dr.builtin$cls="dr"
+if(!"name" in dr)dr.name="dr"
+$desc=$collectedClasses.dr
+if($desc instanceof Array)$desc=$desc[1]
+dr.prototype=$desc
+function TL(b,c){this.b=b
+this.c=c}TL.builtin$cls="TL"
+if(!"name" in TL)TL.name="TL"
+$desc=$collectedClasses.TL
+if($desc instanceof Array)$desc=$desc[1]
+TL.prototype=$desc
+function KX(d,e,f){this.d=d
+this.e=e
+this.f=f}KX.builtin$cls="KX"
+if(!"name" in KX)KX.name="KX"
+$desc=$collectedClasses.KX
+if($desc instanceof Array)$desc=$desc[1]
+KX.prototype=$desc
+function uZ(g,h,i,j){this.g=g
+this.h=h
+this.i=i
+this.j=j}uZ.builtin$cls="uZ"
+if(!"name" in uZ)uZ.name="uZ"
+$desc=$collectedClasses.uZ
+if($desc instanceof Array)$desc=$desc[1]
+uZ.prototype=$desc
+function OQ(k,l,m,n,o){this.k=k
+this.l=l
+this.m=m
+this.n=n
+this.o=o}OQ.builtin$cls="OQ"
+if(!"name" in OQ)OQ.name="OQ"
+$desc=$collectedClasses.OQ
+if($desc instanceof Array)$desc=$desc[1]
+OQ.prototype=$desc
+function Tp(){}Tp.builtin$cls="Tp"
+if(!"name" in Tp)Tp.name="Tp"
+$desc=$collectedClasses.Tp
+if($desc instanceof Array)$desc=$desc[1]
+Tp.prototype=$desc
+function v(wc,nn,lv,Pp){this.wc=wc
+this.nn=nn
+this.lv=lv
+this.Pp=Pp}v.builtin$cls="v"
+if(!"name" in v)v.name="v"
+$desc=$collectedClasses.v
+if($desc instanceof Array)$desc=$desc[1]
+v.prototype=$desc
+v.prototype.gwc=function(){return this.wc}
+v.prototype.gnn=function(){return this.nn}
+v.prototype.gPp=function(receiver){return this.Pp}
+function Z3(Jy){this.Jy=Jy}Z3.builtin$cls="Z3"
+if(!"name" in Z3)Z3.name="Z3"
+$desc=$collectedClasses.Z3
+if($desc instanceof Array)$desc=$desc[1]
+Z3.prototype=$desc
+function D2(Jy){this.Jy=Jy}D2.builtin$cls="D2"
+if(!"name" in D2)D2.name="D2"
+$desc=$collectedClasses.D2
+if($desc instanceof Array)$desc=$desc[1]
+D2.prototype=$desc
+function GT(oc){this.oc=oc}GT.builtin$cls="GT"
+if(!"name" in GT)GT.name="GT"
+$desc=$collectedClasses.GT
+if($desc instanceof Array)$desc=$desc[1]
+GT.prototype=$desc
+GT.prototype.goc=function(receiver){return this.oc}
+function Pe(G1){this.G1=G1}Pe.builtin$cls="Pe"
+if(!"name" in Pe)Pe.name="Pe"
+$desc=$collectedClasses.Pe
+if($desc instanceof Array)$desc=$desc[1]
+Pe.prototype=$desc
+Pe.prototype.gG1=function(receiver){return this.G1}
+function Eq(G1){this.G1=G1}Eq.builtin$cls="Eq"
+if(!"name" in Eq)Eq.name="Eq"
+$desc=$collectedClasses.Eq
+if($desc instanceof Array)$desc=$desc[1]
+Eq.prototype=$desc
+Eq.prototype.gG1=function(receiver){return this.G1}
+function cu(IE,rE){this.IE=IE
+this.rE=rE}cu.builtin$cls="cu"
+if(!"name" in cu)cu.name="cu"
+$desc=$collectedClasses.cu
+if($desc instanceof Array)$desc=$desc[1]
+cu.prototype=$desc
+cu.prototype.gIE=function(){return this.IE}
+function Lm(h7,oc,kU){this.h7=h7
+this.oc=oc
+this.kU=kU}Lm.builtin$cls="Lm"
+if(!"name" in Lm)Lm.name="Lm"
+$desc=$collectedClasses.Lm
+if($desc instanceof Array)$desc=$desc[1]
+Lm.prototype=$desc
+Lm.prototype.gh7=function(){return this.h7}
+Lm.prototype.goc=function(receiver){return this.oc}
+Lm.prototype.gkU=function(receiver){return this.kU}
+function dC(a){this.a=a}dC.builtin$cls="dC"
+if(!"name" in dC)dC.name="dC"
+$desc=$collectedClasses.dC
+if($desc instanceof Array)$desc=$desc[1]
+dC.prototype=$desc
+function wN(b){this.b=b}wN.builtin$cls="wN"
+if(!"name" in wN)wN.name="wN"
+$desc=$collectedClasses.wN
+if($desc instanceof Array)$desc=$desc[1]
+wN.prototype=$desc
+function VX(c){this.c=c}VX.builtin$cls="VX"
+if(!"name" in VX)VX.name="VX"
+$desc=$collectedClasses.VX
+if($desc instanceof Array)$desc=$desc[1]
+VX.prototype=$desc
+function VR(SQ,h2,fX){this.SQ=SQ
+this.h2=h2
+this.fX=fX}VR.builtin$cls="VR"
+if(!"name" in VR)VR.name="VR"
+$desc=$collectedClasses.VR
+if($desc instanceof Array)$desc=$desc[1]
+VR.prototype=$desc
+function EK(zO,oH){this.zO=zO
+this.oH=oH}EK.builtin$cls="EK"
+if(!"name" in EK)EK.name="EK"
+$desc=$collectedClasses.EK
+if($desc instanceof Array)$desc=$desc[1]
+EK.prototype=$desc
+function KW(td,BZ){this.td=td
+this.BZ=BZ}KW.builtin$cls="KW"
+if(!"name" in KW)KW.name="KW"
+$desc=$collectedClasses.KW
+if($desc instanceof Array)$desc=$desc[1]
+KW.prototype=$desc
+function Pb(EW,BZ,Jz){this.EW=EW
+this.BZ=BZ
+this.Jz=Jz}Pb.builtin$cls="Pb"
+if(!"name" in Pb)Pb.name="Pb"
+$desc=$collectedClasses.Pb
+if($desc instanceof Array)$desc=$desc[1]
+Pb.prototype=$desc
+function tQ(M,J9,zO){this.M=M
+this.J9=J9
+this.zO=zO}tQ.builtin$cls="tQ"
+if(!"name" in tQ)tQ.name="tQ"
+$desc=$collectedClasses.tQ
+if($desc instanceof Array)$desc=$desc[1]
+tQ.prototype=$desc
+function aC(FJ,VJ,Ai,tH,VJ,Ai,VJ,Ai,ZI,uN,z3,TQ,Vk,Ye,mT,KM){this.FJ=FJ
+this.VJ=VJ
+this.Ai=Ai
+this.tH=tH
+this.VJ=VJ
+this.Ai=Ai
+this.VJ=VJ
+this.Ai=Ai
+this.ZI=ZI
+this.uN=uN
+this.z3=z3
+this.TQ=TQ
+this.Vk=Vk
+this.Ye=Ye
+this.mT=mT
+this.KM=KM}aC.builtin$cls="aC"
+if(!"name" in aC)aC.name="aC"
+$desc=$collectedClasses.aC
+if($desc instanceof Array)$desc=$desc[1]
+aC.prototype=$desc
+aC.prototype.gFJ=function(receiver){return receiver.FJ}
+aC.prototype.gFJ.$reflectable=1
+aC.prototype.sFJ=function(receiver,v){return receiver.FJ=v}
+aC.prototype.sFJ.$reflectable=1
+function Vf(){}Vf.builtin$cls="Vf"
+if(!"name" in Vf)Vf.name="Vf"
+$desc=$collectedClasses.Vf
+if($desc instanceof Array)$desc=$desc[1]
+Vf.prototype=$desc
+function Be(Zw,VJ,Ai,tH,VJ,Ai,VJ,Ai,ZI,uN,z3,TQ,Vk,Ye,mT,KM){this.Zw=Zw
+this.VJ=VJ
+this.Ai=Ai
+this.tH=tH
+this.VJ=VJ
+this.Ai=Ai
+this.VJ=VJ
+this.Ai=Ai
+this.ZI=ZI
+this.uN=uN
+this.z3=z3
+this.TQ=TQ
+this.Vk=Vk
+this.Ye=Ye
+this.mT=mT
+this.KM=KM}Be.builtin$cls="Be"
+if(!"name" in Be)Be.name="Be"
+$desc=$collectedClasses.Be
+if($desc instanceof Array)$desc=$desc[1]
+Be.prototype=$desc
+Be.prototype.gZw=function(receiver){return receiver.Zw}
+Be.prototype.gZw.$reflectable=1
+Be.prototype.sZw=function(receiver,v){return receiver.Zw=v}
+Be.prototype.sZw.$reflectable=1
+function tu(){}tu.builtin$cls="tu"
+if(!"name" in tu)tu.name="tu"
+$desc=$collectedClasses.tu
+if($desc instanceof Array)$desc=$desc[1]
+tu.prototype=$desc
+function i6(Xf,VA,P2,VJ,Ai,tH,VJ,Ai,VJ,Ai,ZI,uN,z3,TQ,Vk,Ye,mT,KM){this.Xf=Xf
+this.VA=VA
+this.P2=P2
+this.VJ=VJ
+this.Ai=Ai
+this.tH=tH
+this.VJ=VJ
+this.Ai=Ai
+this.VJ=VJ
+this.Ai=Ai
+this.ZI=ZI
+this.uN=uN
+this.z3=z3
+this.TQ=TQ
+this.Vk=Vk
+this.Ye=Ye
+this.mT=mT
+this.KM=KM}i6.builtin$cls="i6"
+if(!"name" in i6)i6.name="i6"
+$desc=$collectedClasses.i6
+if($desc instanceof Array)$desc=$desc[1]
+i6.prototype=$desc
+i6.prototype.gXf=function(receiver){return receiver.Xf}
+i6.prototype.gXf.$reflectable=1
+i6.prototype.sXf=function(receiver,v){return receiver.Xf=v}
+i6.prototype.sXf.$reflectable=1
+i6.prototype.gVA=function(receiver){return receiver.VA}
+i6.prototype.gVA.$reflectable=1
+i6.prototype.sVA=function(receiver,v){return receiver.VA=v}
+i6.prototype.sVA.$reflectable=1
+i6.prototype.gP2=function(receiver){return receiver.P2}
+i6.prototype.gP2.$reflectable=1
+i6.prototype.sP2=function(receiver,v){return receiver.P2=v}
+i6.prototype.sP2.$reflectable=1
+function Vc(){}Vc.builtin$cls="Vc"
+if(!"name" in Vc)Vc.name="Vc"
+$desc=$collectedClasses.Vc
+if($desc instanceof Array)$desc=$desc[1]
+Vc.prototype=$desc
+function zO(){}zO.builtin$cls="zO"
+if(!"name" in zO)zO.name="zO"
+$desc=$collectedClasses.zO
+if($desc instanceof Array)$desc=$desc[1]
+zO.prototype=$desc
+function aL(){}aL.builtin$cls="aL"
+if(!"name" in aL)aL.name="aL"
+$desc=$collectedClasses.aL
+if($desc instanceof Array)$desc=$desc[1]
+aL.prototype=$desc
+function nH(Kw,Bz,n1){this.Kw=Kw
+this.Bz=Bz
+this.n1=n1}nH.builtin$cls="nH"
+if(!"name" in nH)nH.name="nH"
+$desc=$collectedClasses.nH
+if($desc instanceof Array)$desc=$desc[1]
+nH.prototype=$desc
+function a7(Kw,qn,j2,mD){this.Kw=Kw
+this.qn=qn
+this.j2=j2
+this.mD=mD}a7.builtin$cls="a7"
+if(!"name" in a7)a7.name="a7"
+$desc=$collectedClasses.a7
+if($desc instanceof Array)$desc=$desc[1]
+a7.prototype=$desc
+function i1(Kw,ew){this.Kw=Kw
+this.ew=ew}i1.builtin$cls="i1"
+if(!"name" in i1)i1.name="i1"
+$desc=$collectedClasses.i1
+if($desc instanceof Array)$desc=$desc[1]
+i1.prototype=$desc
+function xy(Kw,ew){this.Kw=Kw
+this.ew=ew}xy.builtin$cls="xy"
+if(!"name" in xy)xy.name="xy"
+$desc=$collectedClasses.xy
+if($desc instanceof Array)$desc=$desc[1]
+xy.prototype=$desc
+function MH(mD,RX,ew){this.mD=mD
+this.RX=RX
+this.ew=ew}MH.builtin$cls="MH"
+if(!"name" in MH)MH.name="MH"
+$desc=$collectedClasses.MH
+if($desc instanceof Array)$desc=$desc[1]
+MH.prototype=$desc
+function A8(qb,ew){this.qb=qb
+this.ew=ew}A8.builtin$cls="A8"
+if(!"name" in A8)A8.name="A8"
+$desc=$collectedClasses.A8
+if($desc instanceof Array)$desc=$desc[1]
+A8.prototype=$desc
+function U5(Kw,ew){this.Kw=Kw
+this.ew=ew}U5.builtin$cls="U5"
+if(!"name" in U5)U5.name="U5"
+$desc=$collectedClasses.U5
+if($desc instanceof Array)$desc=$desc[1]
+U5.prototype=$desc
+function SO(RX,ew){this.RX=RX
+this.ew=ew}SO.builtin$cls="SO"
+if(!"name" in SO)SO.name="SO"
+$desc=$collectedClasses.SO
+if($desc instanceof Array)$desc=$desc[1]
+SO.prototype=$desc
+function zs(Kw,ew){this.Kw=Kw
+this.ew=ew}zs.builtin$cls="zs"
+if(!"name" in zs)zs.name="zs"
+$desc=$collectedClasses.zs
+if($desc instanceof Array)$desc=$desc[1]
+zs.prototype=$desc
+function rR(RX,ew,IO,mD){this.RX=RX
+this.ew=ew
+this.IO=IO
+this.mD=mD}rR.builtin$cls="rR"
+if(!"name" in rR)rR.name="rR"
+$desc=$collectedClasses.rR
+if($desc instanceof Array)$desc=$desc[1]
+rR.prototype=$desc
+function AM(Kw,xZ){this.Kw=Kw
+this.xZ=xZ}AM.builtin$cls="AM"
+if(!"name" in AM)AM.name="AM"
+$desc=$collectedClasses.AM
+if($desc instanceof Array)$desc=$desc[1]
+AM.prototype=$desc
+function d5(Kw,xZ){this.Kw=Kw
+this.xZ=xZ}d5.builtin$cls="d5"
+if(!"name" in d5)d5.name="d5"
+$desc=$collectedClasses.d5
+if($desc instanceof Array)$desc=$desc[1]
+d5.prototype=$desc
+function U1(RX,xZ){this.RX=RX
+this.xZ=xZ}U1.builtin$cls="U1"
+if(!"name" in U1)U1.name="U1"
+$desc=$collectedClasses.U1
+if($desc instanceof Array)$desc=$desc[1]
+U1.prototype=$desc
+function SJ(){}SJ.builtin$cls="SJ"
+if(!"name" in SJ)SJ.name="SJ"
+$desc=$collectedClasses.SJ
+if($desc instanceof Array)$desc=$desc[1]
+SJ.prototype=$desc
+function SU(){}SU.builtin$cls="SU"
+if(!"name" in SU)SU.name="SU"
+$desc=$collectedClasses.SU
+if($desc instanceof Array)$desc=$desc[1]
+SU.prototype=$desc
+function Tv(){}Tv.builtin$cls="Tv"
+if(!"name" in Tv)Tv.name="Tv"
+$desc=$collectedClasses.Tv
+if($desc instanceof Array)$desc=$desc[1]
+Tv.prototype=$desc
+function XC(){}XC.builtin$cls="XC"
+if(!"name" in XC)XC.name="XC"
+$desc=$collectedClasses.XC
+if($desc instanceof Array)$desc=$desc[1]
+XC.prototype=$desc
+function iK(qb){this.qb=qb}iK.builtin$cls="iK"
+if(!"name" in iK)iK.name="iK"
+$desc=$collectedClasses.iK
+if($desc instanceof Array)$desc=$desc[1]
+iK.prototype=$desc
+function GD(hr){this.hr=hr}GD.builtin$cls="GD"
+if(!"name" in GD)GD.name="GD"
+$desc=$collectedClasses.GD
+if($desc instanceof Array)$desc=$desc[1]
+GD.prototype=$desc
+GD.prototype.ghr=function(receiver){return this.hr}
+function Sn(L5,F1){this.L5=L5
+this.F1=F1}Sn.builtin$cls="Sn"
+if(!"name" in Sn)Sn.name="Sn"
+$desc=$collectedClasses.Sn
+if($desc instanceof Array)$desc=$desc[1]
+Sn.prototype=$desc
+Sn.prototype.gF1=function(receiver){return this.F1}
+function nI(){}nI.builtin$cls="nI"
+if(!"name" in nI)nI.name="nI"
+$desc=$collectedClasses.nI
+if($desc instanceof Array)$desc=$desc[1]
+nI.prototype=$desc
+function jU(){}jU.builtin$cls="jU"
+if(!"name" in jU)jU.name="jU"
+$desc=$collectedClasses.jU
+if($desc instanceof Array)$desc=$desc[1]
+jU.prototype=$desc
+function Lj(MA){this.MA=MA}Lj.builtin$cls="Lj"
+if(!"name" in Lj)Lj.name="Lj"
+$desc=$collectedClasses.Lj
+if($desc instanceof Array)$desc=$desc[1]
+Lj.prototype=$desc
+function mb(){}mb.builtin$cls="mb"
+if(!"name" in mb)mb.name="mb"
+$desc=$collectedClasses.mb
+if($desc instanceof Array)$desc=$desc[1]
+mb.prototype=$desc
+function am(If){this.If=If}am.builtin$cls="am"
+if(!"name" in am)am.name="am"
+$desc=$collectedClasses.am
+if($desc instanceof Array)$desc=$desc[1]
+am.prototype=$desc
+am.prototype.gIf=function(){return this.If}
+function cw(h7,xW,LQ,If){this.h7=h7
+this.xW=xW
+this.LQ=LQ
+this.If=If}cw.builtin$cls="cw"
+if(!"name" in cw)cw.name="cw"
+$desc=$collectedClasses.cw
+if($desc instanceof Array)$desc=$desc[1]
+cw.prototype=$desc
+cw.prototype.gh7=function(){return this.h7}
+function EE(If){this.If=If}EE.builtin$cls="EE"
+if(!"name" in EE)EE.name="EE"
+$desc=$collectedClasses.EE
+if($desc instanceof Array)$desc=$desc[1]
+EE.prototype=$desc
+function Uz(FP,aP,wP,le,LB,rv,ae,SD,tB,P8,mX,T1,Ly,M2,uA,Db,Ok,If){this.FP=FP
+this.aP=aP
+this.wP=wP
+this.le=le
+this.LB=LB
+this.rv=rv
+this.ae=ae
+this.SD=SD
+this.tB=tB
+this.P8=P8
+this.mX=mX
+this.T1=T1
+this.Ly=Ly
+this.M2=M2
+this.uA=uA
+this.Db=Db
+this.Ok=Ok
+this.If=If}Uz.builtin$cls="Uz"
+if(!"name" in Uz)Uz.name="Uz"
+$desc=$collectedClasses.Uz
+if($desc instanceof Array)$desc=$desc[1]
+Uz.prototype=$desc
+Uz.prototype.gFP=function(){return this.FP}
+Uz.prototype.grv=function(){return this.rv}
+Uz.prototype.gae=function(){return this.ae}
+function uh(){}uh.builtin$cls="uh"
+if(!"name" in uh)uh.name="uh"
+$desc=$collectedClasses.uh
+if($desc instanceof Array)$desc=$desc[1]
+uh.prototype=$desc
+function Kv(a){this.a=a}Kv.builtin$cls="Kv"
+if(!"name" in Kv)Kv.name="Kv"
+$desc=$collectedClasses.Kv
+if($desc instanceof Array)$desc=$desc[1]
+Kv.prototype=$desc
+function oP(a){this.a=a}oP.builtin$cls="oP"
+if(!"name" in oP)oP.name="oP"
+$desc=$collectedClasses.oP
+if($desc instanceof Array)$desc=$desc[1]
+oP.prototype=$desc
+function YX(a){this.a=a}YX.builtin$cls="YX"
+if(!"name" in YX)YX.name="YX"
+$desc=$collectedClasses.YX
+if($desc instanceof Array)$desc=$desc[1]
+YX.prototype=$desc
+function BI(AY,XW,BB,If){this.AY=AY
+this.XW=XW
+this.BB=BB
+this.If=If}BI.builtin$cls="BI"
+if(!"name" in BI)BI.name="BI"
+$desc=$collectedClasses.BI
+if($desc instanceof Array)$desc=$desc[1]
+BI.prototype=$desc
+BI.prototype.gAY=function(){return this.AY}
+function y1(){}y1.builtin$cls="y1"
+if(!"name" in y1)y1.name="y1"
+$desc=$collectedClasses.y1
+if($desc instanceof Array)$desc=$desc[1]
+y1.prototype=$desc
+function M2(){}M2.builtin$cls="M2"
+if(!"name" in M2)M2.name="M2"
+$desc=$collectedClasses.M2
+if($desc instanceof Array)$desc=$desc[1]
+M2.prototype=$desc
+function iu(Ax){this.Ax=Ax}iu.builtin$cls="iu"
+if(!"name" in iu)iu.name="iu"
+$desc=$collectedClasses.iu
+if($desc instanceof Array)$desc=$desc[1]
+iu.prototype=$desc
+iu.prototype.gAx=function(){return this.Ax}
+function mg(){}mg.builtin$cls="mg"
+if(!"name" in mg)mg.name="mg"
+$desc=$collectedClasses.mg
+if($desc instanceof Array)$desc=$desc[1]
+mg.prototype=$desc
+function zE(a){this.a=a}zE.builtin$cls="zE"
+if(!"name" in zE)zE.name="zE"
+$desc=$collectedClasses.zE
+if($desc instanceof Array)$desc=$desc[1]
+zE.prototype=$desc
+function bl(NK,EZ,ut,Db,uA,b0,M2,T1,Ly,FU,jd,qN,qm,If){this.NK=NK
+this.EZ=EZ
+this.ut=ut
+this.Db=Db
+this.uA=uA
+this.b0=b0
+this.M2=M2
+this.T1=T1
+this.Ly=Ly
+this.FU=FU
+this.jd=jd
+this.qN=qN
+this.qm=qm
+this.If=If}bl.builtin$cls="bl"
+if(!"name" in bl)bl.name="bl"
+$desc=$collectedClasses.bl
+if($desc instanceof Array)$desc=$desc[1]
+bl.prototype=$desc
+function Ef(a){this.a=a}Ef.builtin$cls="Ef"
+if(!"name" in Ef)Ef.name="Ef"
+$desc=$collectedClasses.Ef
+if($desc instanceof Array)$desc=$desc[1]
+Ef.prototype=$desc
+function Oo(){}Oo.builtin$cls="Oo"
+if(!"name" in Oo)Oo.name="Oo"
+$desc=$collectedClasses.Oo
+if($desc instanceof Array)$desc=$desc[1]
+Oo.prototype=$desc
+function Tc(b){this.b=b}Tc.builtin$cls="Tc"
+if(!"name" in Tc)Tc.name="Tc"
+$desc=$collectedClasses.Tc
+if($desc instanceof Array)$desc=$desc[1]
+Tc.prototype=$desc
+function Ax(a){this.a=a}Ax.builtin$cls="Ax"
+if(!"name" in Ax)Ax.name="Ax"
+$desc=$collectedClasses.Ax
+if($desc instanceof Array)$desc=$desc[1]
+Ax.prototype=$desc
+function Wf(WL,Tx,H8,Ht,pz,le,qN,jd,tB,b0,FU,T1,Ly,M2,uA,Db,Ok,qm,UF,nz,If){this.WL=WL
+this.Tx=Tx
+this.H8=H8
+this.Ht=Ht
+this.pz=pz
+this.le=le
+this.qN=qN
+this.jd=jd
+this.tB=tB
+this.b0=b0
+this.FU=FU
+this.T1=T1
+this.Ly=Ly
+this.M2=M2
+this.uA=uA
+this.Db=Db
+this.Ok=Ok
+this.qm=qm
+this.UF=UF
+this.nz=nz
+this.If=If}Wf.builtin$cls="Wf"
+if(!"name" in Wf)Wf.name="Wf"
+$desc=$collectedClasses.Wf
+if($desc instanceof Array)$desc=$desc[1]
+Wf.prototype=$desc
+Wf.prototype.gWL=function(){return this.WL}
+Wf.prototype.gWL.$reflectable=1
+Wf.prototype.gTx=function(){return this.Tx}
+Wf.prototype.gTx.$reflectable=1
+Wf.prototype.gH8=function(){return this.H8}
+Wf.prototype.gH8.$reflectable=1
+Wf.prototype.gHt=function(){return this.Ht}
+Wf.prototype.gHt.$reflectable=1
+Wf.prototype.gpz=function(){return this.pz}
+Wf.prototype.gpz.$reflectable=1
+Wf.prototype.gle=function(){return this.le}
+Wf.prototype.gle.$reflectable=1
+Wf.prototype.sle=function(v){return this.le=v}
+Wf.prototype.sle.$reflectable=1
+Wf.prototype.gqN=function(){return this.qN}
+Wf.prototype.gqN.$reflectable=1
+Wf.prototype.sqN=function(v){return this.qN=v}
+Wf.prototype.sqN.$reflectable=1
+Wf.prototype.gjd=function(){return this.jd}
+Wf.prototype.gjd.$reflectable=1
+Wf.prototype.sjd=function(v){return this.jd=v}
+Wf.prototype.sjd.$reflectable=1
+Wf.prototype.gtB=function(){return this.tB}
+Wf.prototype.gtB.$reflectable=1
+Wf.prototype.stB=function(v){return this.tB=v}
+Wf.prototype.stB.$reflectable=1
+Wf.prototype.gb0=function(){return this.b0}
+Wf.prototype.gb0.$reflectable=1
+Wf.prototype.sb0=function(v){return this.b0=v}
+Wf.prototype.sb0.$reflectable=1
+Wf.prototype.gFU=function(){return this.FU}
+Wf.prototype.gFU.$reflectable=1
+Wf.prototype.sFU=function(v){return this.FU=v}
+Wf.prototype.sFU.$reflectable=1
+Wf.prototype.gT1=function(){return this.T1}
+Wf.prototype.gT1.$reflectable=1
+Wf.prototype.sT1=function(v){return this.T1=v}
+Wf.prototype.sT1.$reflectable=1
+Wf.prototype.gLy=function(){return this.Ly}
+Wf.prototype.gLy.$reflectable=1
+Wf.prototype.sLy=function(v){return this.Ly=v}
+Wf.prototype.sLy.$reflectable=1
+Wf.prototype.gM2=function(){return this.M2}
+Wf.prototype.gM2.$reflectable=1
+Wf.prototype.sM2=function(v){return this.M2=v}
+Wf.prototype.sM2.$reflectable=1
+Wf.prototype.guA=function(){return this.uA}
+Wf.prototype.guA.$reflectable=1
+Wf.prototype.suA=function(v){return this.uA=v}
+Wf.prototype.suA.$reflectable=1
+Wf.prototype.gDb=function(){return this.Db}
+Wf.prototype.gDb.$reflectable=1
+Wf.prototype.sDb=function(v){return this.Db=v}
+Wf.prototype.sDb.$reflectable=1
+Wf.prototype.gOk=function(){return this.Ok}
+Wf.prototype.gOk.$reflectable=1
+Wf.prototype.sOk=function(v){return this.Ok=v}
+Wf.prototype.sOk.$reflectable=1
+Wf.prototype.gqm=function(){return this.qm}
+Wf.prototype.gqm.$reflectable=1
+Wf.prototype.sqm=function(v){return this.qm=v}
+Wf.prototype.sqm.$reflectable=1
+Wf.prototype.gUF=function(){return this.UF}
+Wf.prototype.gUF.$reflectable=1
+Wf.prototype.sUF=function(v){return this.UF=v}
+Wf.prototype.sUF.$reflectable=1
+Wf.prototype.gnz=function(){return this.nz}
+Wf.prototype.gnz.$reflectable=1
+Wf.prototype.snz=function(v){return this.nz=v}
+Wf.prototype.snz.$reflectable=1
+function Un(){}Un.builtin$cls="Un"
+if(!"name" in Un)Un.name="Un"
+$desc=$collectedClasses.Un
+if($desc instanceof Array)$desc=$desc[1]
+Un.prototype=$desc
+function Ei(a){this.a=a}Ei.builtin$cls="Ei"
+if(!"name" in Ei)Ei.name="Ei"
+$desc=$collectedClasses.Ei
+if($desc instanceof Array)$desc=$desc[1]
+Ei.prototype=$desc
+function U7(b){this.b=b}U7.builtin$cls="U7"
+if(!"name" in U7)U7.name="U7"
+$desc=$collectedClasses.U7
+if($desc instanceof Array)$desc=$desc[1]
+U7.prototype=$desc
+function t0(a){this.a=a}t0.builtin$cls="t0"
+if(!"name" in t0)t0.name="t0"
+$desc=$collectedClasses.t0
+if($desc instanceof Array)$desc=$desc[1]
+t0.prototype=$desc
+function Ld(ao,V5,Fo,n6,nz,le,If){this.ao=ao
+this.V5=V5
+this.Fo=Fo
+this.n6=n6
+this.nz=nz
+this.le=le
+this.If=If}Ld.builtin$cls="Ld"
+if(!"name" in Ld)Ld.name="Ld"
+$desc=$collectedClasses.Ld
+if($desc instanceof Array)$desc=$desc[1]
+Ld.prototype=$desc
+Ld.prototype.gao=function(){return this.ao}
+Ld.prototype.gV5=function(){return this.V5}
+Ld.prototype.gFo=function(){return this.Fo}
+function Sz(Ax){this.Ax=Ax}Sz.builtin$cls="Sz"
+if(!"name" in Sz)Sz.name="Sz"
+$desc=$collectedClasses.Sz
+if($desc instanceof Array)$desc=$desc[1]
+Sz.prototype=$desc
+function Zk(dl,Yq,lT,hB,Fo,xV,qx,nz,le,G6,Cr,If){this.dl=dl
+this.Yq=Yq
+this.lT=lT
+this.hB=hB
+this.Fo=Fo
+this.xV=xV
+this.qx=qx
+this.nz=nz
+this.le=le
+this.G6=G6
+this.Cr=Cr
+this.If=If}Zk.builtin$cls="Zk"
+if(!"name" in Zk)Zk.name="Zk"
+$desc=$collectedClasses.Zk
+if($desc instanceof Array)$desc=$desc[1]
+Zk.prototype=$desc
+Zk.prototype.glT=function(){return this.lT}
+Zk.prototype.ghB=function(){return this.hB}
+Zk.prototype.gFo=function(){return this.Fo}
+Zk.prototype.gxV=function(){return this.xV}
+function fu(h7,Ad,If){this.h7=h7
+this.Ad=Ad
+this.If=If}fu.builtin$cls="fu"
+if(!"name" in fu)fu.name="fu"
+$desc=$collectedClasses.fu
+if($desc instanceof Array)$desc=$desc[1]
+fu.prototype=$desc
+fu.prototype.gh7=function(){return this.h7}
+function ng(WL,CM,If){this.WL=WL
+this.CM=CM
+this.If=If}ng.builtin$cls="ng"
+if(!"name" in ng)ng.name="ng"
+$desc=$collectedClasses.ng
+if($desc instanceof Array)$desc=$desc[1]
+ng.prototype=$desc
+ng.prototype.gWL=function(){return this.WL}
+function Ar(d9,o3,yA,zM,h7){this.d9=d9
+this.o3=o3
+this.yA=yA
+this.zM=zM
+this.h7=h7}Ar.builtin$cls="Ar"
+if(!"name" in Ar)Ar.name="Ar"
+$desc=$collectedClasses.Ar
+if($desc instanceof Array)$desc=$desc[1]
+Ar.prototype=$desc
+Ar.prototype.gh7=function(){return this.h7}
+function jB(a){this.a=a}jB.builtin$cls="jB"
+if(!"name" in jB)jB.name="jB"
+$desc=$collectedClasses.jB
+if($desc instanceof Array)$desc=$desc[1]
+jB.prototype=$desc
+function ye(){}ye.builtin$cls="ye"
+if(!"name" in ye)ye.name="ye"
+$desc=$collectedClasses.ye
+if($desc instanceof Array)$desc=$desc[1]
+ye.prototype=$desc
+function Gj(nb){this.nb=nb}Gj.builtin$cls="Gj"
+if(!"name" in Gj)Gj.name="Gj"
+$desc=$collectedClasses.Gj
+if($desc instanceof Array)$desc=$desc[1]
+Gj.prototype=$desc
+function Zz(hu){this.hu=hu}Zz.builtin$cls="Zz"
+if(!"name" in Zz)Zz.name="Zz"
+$desc=$collectedClasses.Zz
+if($desc instanceof Array)$desc=$desc[1]
+Zz.prototype=$desc
+function Xh(a){this.a=a}Xh.builtin$cls="Xh"
+if(!"name" in Xh)Xh.name="Xh"
+$desc=$collectedClasses.Xh
+if($desc instanceof Array)$desc=$desc[1]
+Xh.prototype=$desc
+function Ca(kc,I4){this.kc=kc
+this.I4=I4}Ca.builtin$cls="Ca"
+if(!"name" in Ca)Ca.name="Ca"
+$desc=$collectedClasses.Ca
+if($desc instanceof Array)$desc=$desc[1]
+Ca.prototype=$desc
+Ca.prototype.gkc=function(receiver){return this.kc}
+Ca.prototype.gI4=function(){return this.I4}
+function Ik(Y8){this.Y8=Y8}Ik.builtin$cls="Ik"
+if(!"name" in Ik)Ik.name="Ik"
+$desc=$collectedClasses.Ik
+if($desc instanceof Array)$desc=$desc[1]
+Ik.prototype=$desc
+function JI(Ae,iE,SJ,Y8,dB,o7,Bd,Lj,Gv,lz,Ri){this.Ae=Ae
+this.iE=iE
+this.SJ=SJ
+this.Y8=Y8
+this.dB=dB
+this.o7=o7
+this.Bd=Bd
+this.Lj=Lj
+this.Gv=Gv
+this.lz=lz
+this.Ri=Ri}JI.builtin$cls="JI"
+if(!"name" in JI)JI.name="JI"
+$desc=$collectedClasses.JI
+if($desc instanceof Array)$desc=$desc[1]
+JI.prototype=$desc
+JI.prototype.gAe=function(){return this.Ae}
+JI.prototype.sAe=function(v){return this.Ae=v}
+JI.prototype.giE=function(){return this.iE}
+JI.prototype.siE=function(v){return this.iE=v}
+JI.prototype.gSJ=function(){return this.SJ}
+JI.prototype.sSJ=function(v){return this.SJ=v}
+function Ip(wc,nn,lv,Pp){this.wc=wc
+this.nn=nn
+this.lv=lv
+this.Pp=Pp}Ip.builtin$cls="Ip"
+$desc=$collectedClasses.Ip
+if($desc instanceof Array)$desc=$desc[1]
+Ip.prototype=$desc
+function WV(nL,QC,iE,SJ){this.nL=nL
+this.QC=QC
+this.iE=iE
+this.SJ=SJ}WV.builtin$cls="WV"
+if(!"name" in WV)WV.name="WV"
+$desc=$collectedClasses.WV
+if($desc instanceof Array)$desc=$desc[1]
+WV.prototype=$desc
+WV.prototype.gnL=function(){return this.nL}
+WV.prototype.gQC=function(){return this.QC}
+WV.prototype.giE=function(){return this.iE}
+WV.prototype.siE=function(v){return this.iE=v}
+WV.prototype.gSJ=function(){return this.SJ}
+WV.prototype.sSJ=function(v){return this.SJ=v}
+function C7(wc,nn,lv,Pp){this.wc=wc
+this.nn=nn
+this.lv=lv
+this.Pp=Pp}C7.builtin$cls="C7"
+$desc=$collectedClasses.C7
+if($desc instanceof Array)$desc=$desc[1]
+C7.prototype=$desc
+function CQ(wc,nn,lv,Pp){this.wc=wc
+this.nn=nn
+this.lv=lv
+this.Pp=Pp}CQ.builtin$cls="CQ"
+$desc=$collectedClasses.CQ
+if($desc instanceof Array)$desc=$desc[1]
+CQ.prototype=$desc
+function dz(nL,QC,Gv,iE,SJ,AN,Ip){this.nL=nL
+this.QC=QC
+this.Gv=Gv
+this.iE=iE
+this.SJ=SJ
+this.AN=AN
+this.Ip=Ip}dz.builtin$cls="dz"
+if(!"name" in dz)dz.name="dz"
+$desc=$collectedClasses.dz
+if($desc instanceof Array)$desc=$desc[1]
+dz.prototype=$desc
+function tK(a,b){this.a=a
+this.b=b}tK.builtin$cls="tK"
+if(!"name" in tK)tK.name="tK"
+$desc=$collectedClasses.tK
+if($desc instanceof Array)$desc=$desc[1]
+tK.prototype=$desc
+function OR(a,b,c){this.a=a
+this.b=b
+this.c=c}OR.builtin$cls="OR"
+if(!"name" in OR)OR.name="OR"
+$desc=$collectedClasses.OR
+if($desc instanceof Array)$desc=$desc[1]
+OR.prototype=$desc
+function Bg(a){this.a=a}Bg.builtin$cls="Bg"
+if(!"name" in Bg)Bg.name="Bg"
+$desc=$collectedClasses.Bg
+if($desc instanceof Array)$desc=$desc[1]
+Bg.prototype=$desc
+function DL(nL,QC,Gv,iE,SJ,AN,Ip){this.nL=nL
+this.QC=QC
+this.Gv=Gv
+this.iE=iE
+this.SJ=SJ
+this.AN=AN
+this.Ip=Ip}DL.builtin$cls="DL"
+if(!"name" in DL)DL.name="DL"
+$desc=$collectedClasses.DL
+if($desc instanceof Array)$desc=$desc[1]
+DL.prototype=$desc
+function b8(){}b8.builtin$cls="b8"
+if(!"name" in b8)b8.name="b8"
+$desc=$collectedClasses.b8
+if($desc instanceof Array)$desc=$desc[1]
+b8.prototype=$desc
+function j7(a){this.a=a}j7.builtin$cls="j7"
+if(!"name" in j7)j7.name="j7"
+$desc=$collectedClasses.j7
+if($desc instanceof Array)$desc=$desc[1]
+j7.prototype=$desc
+function oV(a,b){this.a=a
+this.b=b}oV.builtin$cls="oV"
+if(!"name" in oV)oV.name="oV"
+$desc=$collectedClasses.oV
+if($desc instanceof Array)$desc=$desc[1]
+oV.prototype=$desc
+function TP(){}TP.builtin$cls="TP"
+if(!"name" in TP)TP.name="TP"
+$desc=$collectedClasses.TP
+if($desc instanceof Array)$desc=$desc[1]
+TP.prototype=$desc
+function Zf(MM){this.MM=MM}Zf.builtin$cls="Zf"
+if(!"name" in Zf)Zf.name="Zf"
+$desc=$collectedClasses.Zf
+if($desc instanceof Array)$desc=$desc[1]
+Zf.prototype=$desc
+function vs(Gv,Lj,jk,BQ,OY,As,qV,o4){this.Gv=Gv
+this.Lj=Lj
+this.jk=jk
+this.BQ=BQ
+this.OY=OY
+this.As=As
+this.qV=qV
+this.o4=o4}vs.builtin$cls="vs"
+if(!"name" in vs)vs.name="vs"
+$desc=$collectedClasses.vs
+if($desc instanceof Array)$desc=$desc[1]
+vs.prototype=$desc
+vs.prototype.gLj=function(){return this.Lj}
+vs.prototype.gBQ=function(){return this.BQ}
+vs.prototype.sBQ=function(v){return this.BQ=v}
+function da(a,b){this.a=a
+this.b=b}da.builtin$cls="da"
+if(!"name" in da)da.name="da"
+$desc=$collectedClasses.da
+if($desc instanceof Array)$desc=$desc[1]
+da.prototype=$desc
+function xw(a){this.a=a}xw.builtin$cls="xw"
+if(!"name" in xw)xw.name="xw"
+$desc=$collectedClasses.xw
+if($desc instanceof Array)$desc=$desc[1]
+xw.prototype=$desc
+function dm(b){this.b=b}dm.builtin$cls="dm"
+if(!"name" in dm)dm.name="dm"
+$desc=$collectedClasses.dm
+if($desc instanceof Array)$desc=$desc[1]
+dm.prototype=$desc
+function rH(a,b){this.a=a
+this.b=b}rH.builtin$cls="rH"
+if(!"name" in rH)rH.name="rH"
+$desc=$collectedClasses.rH
+if($desc instanceof Array)$desc=$desc[1]
+rH.prototype=$desc
+function ZL(a,b,c){this.a=a
+this.b=b
+this.c=c}ZL.builtin$cls="ZL"
+if(!"name" in ZL)ZL.name="ZL"
+$desc=$collectedClasses.ZL
+if($desc instanceof Array)$desc=$desc[1]
+ZL.prototype=$desc
+function mi(c,d){this.c=c
+this.d=d}mi.builtin$cls="mi"
+if(!"name" in mi)mi.name="mi"
+$desc=$collectedClasses.mi
+if($desc instanceof Array)$desc=$desc[1]
+mi.prototype=$desc
+function jb(c,b,e,f){this.c=c
+this.b=b
+this.e=e
+this.f=f}jb.builtin$cls="jb"
+if(!"name" in jb)jb.name="jb"
+$desc=$collectedClasses.jb
+if($desc instanceof Array)$desc=$desc[1]
+jb.prototype=$desc
+function wB(c,g){this.c=c
+this.g=g}wB.builtin$cls="wB"
+if(!"name" in wB)wB.name="wB"
+$desc=$collectedClasses.wB
+if($desc instanceof Array)$desc=$desc[1]
+wB.prototype=$desc
+function Pu(a,h){this.a=a
+this.h=h}Pu.builtin$cls="Pu"
+if(!"name" in Pu)Pu.name="Pu"
+$desc=$collectedClasses.Pu
+if($desc instanceof Array)$desc=$desc[1]
+Pu.prototype=$desc
+function qh(){}qh.builtin$cls="qh"
+if(!"name" in qh)qh.name="qh"
+$desc=$collectedClasses.qh
+if($desc instanceof Array)$desc=$desc[1]
+qh.prototype=$desc
+function QC(a,b,c,d,e){this.a=a
+this.b=b
+this.c=c
+this.d=d
+this.e=e}QC.builtin$cls="QC"
+if(!"name" in QC)QC.name="QC"
+$desc=$collectedClasses.QC
+if($desc instanceof Array)$desc=$desc[1]
+QC.prototype=$desc
+function Yl(f){this.f=f}Yl.builtin$cls="Yl"
+if(!"name" in Yl)Yl.name="Yl"
+$desc=$collectedClasses.Yl
+if($desc instanceof Array)$desc=$desc[1]
+Yl.prototype=$desc
+function Rv(g,h){this.g=g
+this.h=h}Rv.builtin$cls="Rv"
+if(!"name" in Rv)Rv.name="Rv"
+$desc=$collectedClasses.Rv
+if($desc instanceof Array)$desc=$desc[1]
+Rv.prototype=$desc
+function YJ(a,b,c,d){this.a=a
+this.b=b
+this.c=c
+this.d=d}YJ.builtin$cls="YJ"
+if(!"name" in YJ)YJ.name="YJ"
+$desc=$collectedClasses.YJ
+if($desc instanceof Array)$desc=$desc[1]
+YJ.prototype=$desc
+function jv(e,f){this.e=e
+this.f=f}jv.builtin$cls="jv"
+if(!"name" in jv)jv.name="jv"
+$desc=$collectedClasses.jv
+if($desc instanceof Array)$desc=$desc[1]
+jv.prototype=$desc
+function LB(a,g){this.a=a
+this.g=g}LB.builtin$cls="LB"
+if(!"name" in LB)LB.name="LB"
+$desc=$collectedClasses.LB
+if($desc instanceof Array)$desc=$desc[1]
+LB.prototype=$desc
+function DO(h){this.h=h}DO.builtin$cls="DO"
+if(!"name" in DO)DO.name="DO"
+$desc=$collectedClasses.DO
+if($desc instanceof Array)$desc=$desc[1]
+DO.prototype=$desc
+function lz(a,b,c,d){this.a=a
+this.b=b
+this.c=c
+this.d=d}lz.builtin$cls="lz"
+if(!"name" in lz)lz.name="lz"
+$desc=$collectedClasses.lz
+if($desc instanceof Array)$desc=$desc[1]
+lz.prototype=$desc
+function Rl(e,f){this.e=e
+this.f=f}Rl.builtin$cls="Rl"
+if(!"name" in Rl)Rl.name="Rl"
+$desc=$collectedClasses.Rl
+if($desc instanceof Array)$desc=$desc[1]
+Rl.prototype=$desc
+function Jb(){}Jb.builtin$cls="Jb"
+if(!"name" in Jb)Jb.name="Jb"
+$desc=$collectedClasses.Jb
+if($desc instanceof Array)$desc=$desc[1]
+Jb.prototype=$desc
+function M4(g){this.g=g}M4.builtin$cls="M4"
+if(!"name" in M4)M4.name="M4"
+$desc=$collectedClasses.M4
+if($desc instanceof Array)$desc=$desc[1]
+M4.prototype=$desc
+function Jp(a,b,c,d){this.a=a
+this.b=b
+this.c=c
+this.d=d}Jp.builtin$cls="Jp"
+if(!"name" in Jp)Jp.name="Jp"
+$desc=$collectedClasses.Jp
+if($desc instanceof Array)$desc=$desc[1]
+Jp.prototype=$desc
+function h7(e,f){this.e=e
+this.f=f}h7.builtin$cls="h7"
+if(!"name" in h7)h7.name="h7"
+$desc=$collectedClasses.h7
+if($desc instanceof Array)$desc=$desc[1]
+h7.prototype=$desc
+function pr(a,g){this.a=a
+this.g=g}pr.builtin$cls="pr"
+if(!"name" in pr)pr.name="pr"
+$desc=$collectedClasses.pr
+if($desc instanceof Array)$desc=$desc[1]
+pr.prototype=$desc
+function eN(h){this.h=h}eN.builtin$cls="eN"
+if(!"name" in eN)eN.name="eN"
+$desc=$collectedClasses.eN
+if($desc instanceof Array)$desc=$desc[1]
+eN.prototype=$desc
+function B5(a){this.a=a}B5.builtin$cls="B5"
+if(!"name" in B5)B5.name="B5"
+$desc=$collectedClasses.B5
+if($desc instanceof Array)$desc=$desc[1]
+B5.prototype=$desc
+function PI(a,b){this.a=a
+this.b=b}PI.builtin$cls="PI"
+if(!"name" in PI)PI.name="PI"
+$desc=$collectedClasses.PI
+if($desc instanceof Array)$desc=$desc[1]
+PI.prototype=$desc
+function j4(a,b){this.a=a
+this.b=b}j4.builtin$cls="j4"
+if(!"name" in j4)j4.name="j4"
+$desc=$collectedClasses.j4
+if($desc instanceof Array)$desc=$desc[1]
+j4.prototype=$desc
+function i9(c){this.c=c}i9.builtin$cls="i9"
+if(!"name" in i9)i9.name="i9"
+$desc=$collectedClasses.i9
+if($desc instanceof Array)$desc=$desc[1]
+i9.prototype=$desc
+function VV(a,b){this.a=a
+this.b=b}VV.builtin$cls="VV"
+if(!"name" in VV)VV.name="VV"
+$desc=$collectedClasses.VV
+if($desc instanceof Array)$desc=$desc[1]
+VV.prototype=$desc
+function Dy(c,d){this.c=c
+this.d=d}Dy.builtin$cls="Dy"
+if(!"name" in Dy)Dy.name="Dy"
+$desc=$collectedClasses.Dy
+if($desc instanceof Array)$desc=$desc[1]
+Dy.prototype=$desc
+function lU(a,b,c){this.a=a
+this.b=b
+this.c=c}lU.builtin$cls="lU"
+if(!"name" in lU)lU.name="lU"
+$desc=$collectedClasses.lU
+if($desc instanceof Array)$desc=$desc[1]
+lU.prototype=$desc
+function xp(d){this.d=d}xp.builtin$cls="xp"
+if(!"name" in xp)xp.name="xp"
+$desc=$collectedClasses.xp
+if($desc instanceof Array)$desc=$desc[1]
+xp.prototype=$desc
+function UH(a,b){this.a=a
+this.b=b}UH.builtin$cls="UH"
+if(!"name" in UH)UH.name="UH"
+$desc=$collectedClasses.UH
+if($desc instanceof Array)$desc=$desc[1]
+UH.prototype=$desc
+function Z5(a,c){this.a=a
+this.c=c}Z5.builtin$cls="Z5"
+if(!"name" in Z5)Z5.name="Z5"
+$desc=$collectedClasses.Z5
+if($desc instanceof Array)$desc=$desc[1]
+Z5.prototype=$desc
+function ii(a,b,c){this.a=a
+this.b=b
+this.c=c}ii.builtin$cls="ii"
+if(!"name" in ii)ii.name="ii"
+$desc=$collectedClasses.ii
+if($desc instanceof Array)$desc=$desc[1]
+ii.prototype=$desc
+function ib(a,d){this.a=a
+this.d=d}ib.builtin$cls="ib"
+if(!"name" in ib)ib.name="ib"
+$desc=$collectedClasses.ib
+if($desc instanceof Array)$desc=$desc[1]
+ib.prototype=$desc
+function MO(){}MO.builtin$cls="MO"
+if(!"name" in MO)MO.name="MO"
+$desc=$collectedClasses.MO
+if($desc instanceof Array)$desc=$desc[1]
+MO.prototype=$desc
+function ms(){}ms.builtin$cls="ms"
+if(!"name" in ms)ms.name="ms"
+$desc=$collectedClasses.ms
+if($desc instanceof Array)$desc=$desc[1]
+ms.prototype=$desc
+function UO(a){this.a=a}UO.builtin$cls="UO"
+if(!"name" in UO)UO.name="UO"
+$desc=$collectedClasses.UO
+if($desc instanceof Array)$desc=$desc[1]
+UO.prototype=$desc
+function Bc(a){this.a=a}Bc.builtin$cls="Bc"
+if(!"name" in Bc)Bc.name="Bc"
+$desc=$collectedClasses.Bc
+if($desc instanceof Array)$desc=$desc[1]
+Bc.prototype=$desc
+function vp(){}vp.builtin$cls="vp"
+if(!"name" in vp)vp.name="vp"
+$desc=$collectedClasses.vp
+if($desc instanceof Array)$desc=$desc[1]
+vp.prototype=$desc
+function lk(){}lk.builtin$cls="lk"
+if(!"name" in lk)lk.name="lk"
+$desc=$collectedClasses.lk
+if($desc instanceof Array)$desc=$desc[1]
+lk.prototype=$desc
+function Gh(nL,p4,Z9,QC,iP,Gv,Ip){this.nL=nL
+this.p4=p4
+this.Z9=Z9
+this.QC=QC
+this.iP=iP
+this.Gv=Gv
+this.Ip=Ip}Gh.builtin$cls="Gh"
+if(!"name" in Gh)Gh.name="Gh"
+$desc=$collectedClasses.Gh
+if($desc instanceof Array)$desc=$desc[1]
+Gh.prototype=$desc
+Gh.prototype.gnL=function(){return this.nL}
+Gh.prototype.gp4=function(){return this.p4}
+Gh.prototype.gZ9=function(){return this.Z9}
+Gh.prototype.gQC=function(){return this.QC}
+function XB(){}XB.builtin$cls="XB"
+if(!"name" in XB)XB.name="XB"
+$desc=$collectedClasses.XB
+if($desc instanceof Array)$desc=$desc[1]
+XB.prototype=$desc
+function ly(nL,p4,Z9,QC,iP,Gv,Ip){this.nL=nL
+this.p4=p4
+this.Z9=Z9
+this.QC=QC
+this.iP=iP
+this.Gv=Gv
+this.Ip=Ip}ly.builtin$cls="ly"
+if(!"name" in ly)ly.name="ly"
+$desc=$collectedClasses.ly
+if($desc instanceof Array)$desc=$desc[1]
+ly.prototype=$desc
+ly.prototype.gnL=function(){return this.nL}
+ly.prototype.gp4=function(){return this.p4}
+ly.prototype.gZ9=function(){return this.Z9}
+ly.prototype.gQC=function(){return this.QC}
+function cK(){}cK.builtin$cls="cK"
+if(!"name" in cK)cK.name="cK"
+$desc=$collectedClasses.cK
+if($desc instanceof Array)$desc=$desc[1]
+cK.prototype=$desc
+function O9(Y8){this.Y8=Y8}O9.builtin$cls="O9"
+if(!"name" in O9)O9.name="O9"
+$desc=$collectedClasses.O9
+if($desc instanceof Array)$desc=$desc[1]
+O9.prototype=$desc
+function yU(Y8,dB,o7,Bd,Lj,Gv,lz,Ri){this.Y8=Y8
+this.dB=dB
+this.o7=o7
+this.Bd=Bd
+this.Lj=Lj
+this.Gv=Gv
+this.lz=lz
+this.Ri=Ri}yU.builtin$cls="yU"
+if(!"name" in yU)yU.name="yU"
+$desc=$collectedClasses.yU
+if($desc instanceof Array)$desc=$desc[1]
+yU.prototype=$desc
+yU.prototype.gY8=function(){return this.Y8}
+function nP(){}nP.builtin$cls="nP"
+if(!"name" in nP)nP.name="nP"
+$desc=$collectedClasses.nP
+if($desc instanceof Array)$desc=$desc[1]
+nP.prototype=$desc
+function KA(dB,o7,Bd,Lj,Gv,lz,Ri){this.dB=dB
+this.o7=o7
+this.Bd=Bd
+this.Lj=Lj
+this.Gv=Gv
+this.lz=lz
+this.Ri=Ri}KA.builtin$cls="KA"
+if(!"name" in KA)KA.name="KA"
+$desc=$collectedClasses.KA
+if($desc instanceof Array)$desc=$desc[1]
+KA.prototype=$desc
+KA.prototype.go7=function(){return this.o7}
+KA.prototype.gLj=function(){return this.Lj}
+function Vo(a,b,c){this.a=a
+this.b=b
+this.c=c}Vo.builtin$cls="Vo"
+if(!"name" in Vo)Vo.name="Vo"
+$desc=$collectedClasses.Vo
+if($desc instanceof Array)$desc=$desc[1]
+Vo.prototype=$desc
+function qB(a){this.a=a}qB.builtin$cls="qB"
+if(!"name" in qB)qB.name="qB"
+$desc=$collectedClasses.qB
+if($desc instanceof Array)$desc=$desc[1]
+qB.prototype=$desc
+function ez(){}ez.builtin$cls="ez"
+if(!"name" in ez)ez.name="ez"
+$desc=$collectedClasses.ez
+if($desc instanceof Array)$desc=$desc[1]
+ez.prototype=$desc
+function lx(LD){this.LD=LD}lx.builtin$cls="lx"
+if(!"name" in lx)lx.name="lx"
+$desc=$collectedClasses.lx
+if($desc instanceof Array)$desc=$desc[1]
+lx.prototype=$desc
+lx.prototype.gLD=function(){return this.LD}
+lx.prototype.sLD=function(v){return this.LD=v}
+function LV(P,LD){this.P=P
+this.LD=LD}LV.builtin$cls="LV"
+if(!"name" in LV)LV.name="LV"
+$desc=$collectedClasses.LV
+if($desc instanceof Array)$desc=$desc[1]
+LV.prototype=$desc
+LV.prototype.gP=function(receiver){return this.P}
+function DS(kc,I4,LD){this.kc=kc
+this.I4=I4
+this.LD=LD}DS.builtin$cls="DS"
+if(!"name" in DS)DS.name="DS"
+$desc=$collectedClasses.DS
+if($desc instanceof Array)$desc=$desc[1]
+DS.prototype=$desc
+DS.prototype.gkc=function(receiver){return this.kc}
+DS.prototype.gI4=function(){return this.I4}
+function dp(){}dp.builtin$cls="dp"
+if(!"name" in dp)dp.name="dp"
+$desc=$collectedClasses.dp
+if($desc instanceof Array)$desc=$desc[1]
+dp.prototype=$desc
+function B3(){}B3.builtin$cls="B3"
+if(!"name" in B3)B3.name="B3"
+$desc=$collectedClasses.B3
+if($desc instanceof Array)$desc=$desc[1]
+B3.prototype=$desc
+function CR(a,b){this.a=a
+this.b=b}CR.builtin$cls="CR"
+if(!"name" in CR)CR.name="CR"
+$desc=$collectedClasses.CR
+if($desc instanceof Array)$desc=$desc[1]
+CR.prototype=$desc
+function ny(zR,N6,Gv){this.zR=zR
+this.N6=N6
+this.Gv=Gv}ny.builtin$cls="ny"
+if(!"name" in ny)ny.name="ny"
+$desc=$collectedClasses.ny
+if($desc instanceof Array)$desc=$desc[1]
+ny.prototype=$desc
+function dR(a,b,c){this.a=a
+this.b=b
+this.c=c}dR.builtin$cls="dR"
+if(!"name" in dR)dR.name="dR"
+$desc=$collectedClasses.dR
+if($desc instanceof Array)$desc=$desc[1]
+dR.prototype=$desc
+function uR(a,b){this.a=a
+this.b=b}uR.builtin$cls="uR"
+if(!"name" in uR)uR.name="uR"
+$desc=$collectedClasses.uR
+if($desc instanceof Array)$desc=$desc[1]
+uR.prototype=$desc
+function QX(a,b){this.a=a
+this.b=b}QX.builtin$cls="QX"
+if(!"name" in QX)QX.name="QX"
+$desc=$collectedClasses.QX
+if($desc instanceof Array)$desc=$desc[1]
+QX.prototype=$desc
+function YR(){}YR.builtin$cls="YR"
+if(!"name" in YR)YR.name="YR"
+$desc=$collectedClasses.YR
+if($desc instanceof Array)$desc=$desc[1]
+YR.prototype=$desc
+function fB(UY,hG,dB,o7,Bd,Lj,Gv,lz,Ri){this.UY=UY
+this.hG=hG
+this.dB=dB
+this.o7=o7
+this.Bd=Bd
+this.Lj=Lj
+this.Gv=Gv
+this.lz=lz
+this.Ri=Ri}fB.builtin$cls="fB"
+if(!"name" in fB)fB.name="fB"
+$desc=$collectedClasses.fB
+if($desc instanceof Array)$desc=$desc[1]
+fB.prototype=$desc
+function bq(wc,nn,lv,Pp){this.wc=wc
+this.nn=nn
+this.lv=lv
+this.Pp=Pp}bq.builtin$cls="bq"
+$desc=$collectedClasses.bq
+if($desc instanceof Array)$desc=$desc[1]
+bq.prototype=$desc
+function nO(qs,Sb){this.qs=qs
+this.Sb=Sb}nO.builtin$cls="nO"
+if(!"name" in nO)nO.name="nO"
+$desc=$collectedClasses.nO
+if($desc instanceof Array)$desc=$desc[1]
+nO.prototype=$desc
+function t3(TN,Sb){this.TN=TN
+this.Sb=Sb}t3.builtin$cls="t3"
+if(!"name" in t3)t3.name="t3"
+$desc=$collectedClasses.t3
+if($desc instanceof Array)$desc=$desc[1]
+t3.prototype=$desc
+function dq(Em,Sb){this.Em=Em
+this.Sb=Sb}dq.builtin$cls="dq"
+if(!"name" in dq)dq.name="dq"
+$desc=$collectedClasses.dq
+if($desc instanceof Array)$desc=$desc[1]
+dq.prototype=$desc
+function dX(){}dX.builtin$cls="dX"
+if(!"name" in dX)dX.name="dX"
+$desc=$collectedClasses.dX
+if($desc instanceof Array)$desc=$desc[1]
+dX.prototype=$desc
+function aY(){}aY.builtin$cls="aY"
+if(!"name" in aY)aY.name="aY"
+$desc=$collectedClasses.aY
+if($desc instanceof Array)$desc=$desc[1]
+aY.prototype=$desc
+function wJ(E2,cP,vo,eo,Ka,Xp,fb,rb,Zq,rF,JS,iq){this.E2=E2
+this.cP=cP
+this.vo=vo
+this.eo=eo
+this.Ka=Ka
+this.Xp=Xp
+this.fb=fb
+this.rb=rb
+this.Zq=Zq
+this.rF=rF
+this.JS=JS
+this.iq=iq}wJ.builtin$cls="wJ"
+if(!"name" in wJ)wJ.name="wJ"
+$desc=$collectedClasses.wJ
+if($desc instanceof Array)$desc=$desc[1]
+wJ.prototype=$desc
+wJ.prototype.gE2=function(){return this.E2}
+wJ.prototype.gcP=function(){return this.cP}
+wJ.prototype.gvo=function(){return this.vo}
+wJ.prototype.geo=function(){return this.eo}
+wJ.prototype.gKa=function(){return this.Ka}
+wJ.prototype.gXp=function(){return this.Xp}
+wJ.prototype.gfb=function(){return this.fb}
+wJ.prototype.grb=function(){return this.rb}
+wJ.prototype.gZq=function(){return this.Zq}
+wJ.prototype.gJS=function(receiver){return this.JS}
+wJ.prototype.giq=function(){return this.iq}
+function e4(){}e4.builtin$cls="e4"
+if(!"name" in e4)e4.name="e4"
+$desc=$collectedClasses.e4
+if($desc instanceof Array)$desc=$desc[1]
+e4.prototype=$desc
+function JB(){}JB.builtin$cls="JB"
+if(!"name" in JB)JB.name="JB"
+$desc=$collectedClasses.JB
+if($desc instanceof Array)$desc=$desc[1]
+JB.prototype=$desc
+function Id(nU){this.nU=nU}Id.builtin$cls="Id"
+if(!"name" in Id)Id.name="Id"
+$desc=$collectedClasses.Id
+if($desc instanceof Array)$desc=$desc[1]
+Id.prototype=$desc
+function fZ(){}fZ.builtin$cls="fZ"
+if(!"name" in fZ)fZ.name="fZ"
+$desc=$collectedClasses.fZ
+if($desc instanceof Array)$desc=$desc[1]
+fZ.prototype=$desc
+function TF(a,b){this.a=a
+this.b=b}TF.builtin$cls="TF"
+if(!"name" in TF)TF.name="TF"
+$desc=$collectedClasses.TF
+if($desc instanceof Array)$desc=$desc[1]
+TF.prototype=$desc
+function Xz(c,d){this.c=c
+this.d=d}Xz.builtin$cls="Xz"
+if(!"name" in Xz)Xz.name="Xz"
+$desc=$collectedClasses.Xz
+if($desc instanceof Array)$desc=$desc[1]
+Xz.prototype=$desc
+function Cg(a,b){this.a=a
+this.b=b}Cg.builtin$cls="Cg"
+if(!"name" in Cg)Cg.name="Cg"
+$desc=$collectedClasses.Cg
+if($desc instanceof Array)$desc=$desc[1]
+Cg.prototype=$desc
+function Hs(c,d){this.c=c
+this.d=d}Hs.builtin$cls="Hs"
+if(!"name" in Hs)Hs.name="Hs"
+$desc=$collectedClasses.Hs
+if($desc instanceof Array)$desc=$desc[1]
+Hs.prototype=$desc
+function uo(eT,tp,Se){this.eT=eT
+this.tp=tp
+this.Se=Se}uo.builtin$cls="uo"
+if(!"name" in uo)uo.name="uo"
+$desc=$collectedClasses.uo
+if($desc instanceof Array)$desc=$desc[1]
+uo.prototype=$desc
+uo.prototype.geT=function(receiver){return this.eT}
+uo.prototype.gtp=function(){return this.tp}
+function pK(a,b){this.a=a
+this.b=b}pK.builtin$cls="pK"
+if(!"name" in pK)pK.name="pK"
+$desc=$collectedClasses.pK
+if($desc instanceof Array)$desc=$desc[1]
+pK.prototype=$desc
+function eM(c,d){this.c=c
+this.d=d}eM.builtin$cls="eM"
+if(!"name" in eM)eM.name="eM"
+$desc=$collectedClasses.eM
+if($desc instanceof Array)$desc=$desc[1]
+eM.prototype=$desc
+function Ue(a){this.a=a}Ue.builtin$cls="Ue"
+if(!"name" in Ue)Ue.name="Ue"
+$desc=$collectedClasses.Ue
+if($desc instanceof Array)$desc=$desc[1]
+Ue.prototype=$desc
+function W5(){}W5.builtin$cls="W5"
+if(!"name" in W5)W5.name="W5"
+$desc=$collectedClasses.W5
+if($desc instanceof Array)$desc=$desc[1]
+W5.prototype=$desc
+function R8(){}R8.builtin$cls="R8"
+if(!"name" in R8)R8.name="R8"
+$desc=$collectedClasses.R8
+if($desc instanceof Array)$desc=$desc[1]
+R8.prototype=$desc
+function k6(X5,vv,OX,OB,aw){this.X5=X5
+this.vv=vv
+this.OX=OX
+this.OB=OB
+this.aw=aw}k6.builtin$cls="k6"
+if(!"name" in k6)k6.name="k6"
+$desc=$collectedClasses.k6
+if($desc instanceof Array)$desc=$desc[1]
+k6.prototype=$desc
+function oi(a){this.a=a}oi.builtin$cls="oi"
+if(!"name" in oi)oi.name="oi"
+$desc=$collectedClasses.oi
+if($desc instanceof Array)$desc=$desc[1]
+oi.prototype=$desc
+function ce(a,b){this.a=a
+this.b=b}ce.builtin$cls="ce"
+if(!"name" in ce)ce.name="ce"
+$desc=$collectedClasses.ce
+if($desc instanceof Array)$desc=$desc[1]
+ce.prototype=$desc
+function o2(m6,Q6,bR,X5,vv,OX,OB,aw){this.m6=m6
+this.Q6=Q6
+this.bR=bR
+this.X5=X5
+this.vv=vv
+this.OX=OX
+this.OB=OB
+this.aw=aw}o2.builtin$cls="o2"
+if(!"name" in o2)o2.name="o2"
+$desc=$collectedClasses.o2
+if($desc instanceof Array)$desc=$desc[1]
+o2.prototype=$desc
+function jG(a){this.a=a}jG.builtin$cls="jG"
+if(!"name" in jG)jG.name="jG"
+$desc=$collectedClasses.jG
+if($desc instanceof Array)$desc=$desc[1]
+jG.prototype=$desc
+function fG(Fb){this.Fb=Fb}fG.builtin$cls="fG"
+if(!"name" in fG)fG.name="fG"
+$desc=$collectedClasses.fG
+if($desc instanceof Array)$desc=$desc[1]
+fG.prototype=$desc
+function EQ(Fb,aw,zi,fD){this.Fb=Fb
+this.aw=aw
+this.zi=zi
+this.fD=fD}EQ.builtin$cls="EQ"
+if(!"name" in EQ)EQ.name="EQ"
+$desc=$collectedClasses.EQ
+if($desc instanceof Array)$desc=$desc[1]
+EQ.prototype=$desc
+function YB(X5,vv,OX,OB,H9,lX,zN){this.X5=X5
+this.vv=vv
+this.OX=OX
+this.OB=OB
+this.H9=H9
+this.lX=lX
+this.zN=zN}YB.builtin$cls="YB"
+if(!"name" in YB)YB.name="YB"
+$desc=$collectedClasses.YB
+if($desc instanceof Array)$desc=$desc[1]
+YB.prototype=$desc
+function iX(a){this.a=a}iX.builtin$cls="iX"
+if(!"name" in iX)iX.name="iX"
+$desc=$collectedClasses.iX
+if($desc instanceof Array)$desc=$desc[1]
+iX.prototype=$desc
+function ou(a,b){this.a=a
+this.b=b}ou.builtin$cls="ou"
+if(!"name" in ou)ou.name="ou"
+$desc=$collectedClasses.ou
+if($desc instanceof Array)$desc=$desc[1]
+ou.prototype=$desc
+function S9(a){this.a=a}S9.builtin$cls="S9"
+if(!"name" in S9)S9.name="S9"
+$desc=$collectedClasses.S9
+if($desc instanceof Array)$desc=$desc[1]
+S9.prototype=$desc
+function ey(X5,vv,OX,OB,H9,lX,zN){this.X5=X5
+this.vv=vv
+this.OX=OX
+this.OB=OB
+this.H9=H9
+this.lX=lX
+this.zN=zN}ey.builtin$cls="ey"
+if(!"name" in ey)ey.name="ey"
+$desc=$collectedClasses.ey
+if($desc instanceof Array)$desc=$desc[1]
+ey.prototype=$desc
+function xd(m6,Q6,bR,X5,vv,OX,OB,H9,lX,zN){this.m6=m6
+this.Q6=Q6
+this.bR=bR
+this.X5=X5
+this.vv=vv
+this.OX=OX
+this.OB=OB
+this.H9=H9
+this.lX=lX
+this.zN=zN}xd.builtin$cls="xd"
+if(!"name" in xd)xd.name="xd"
+$desc=$collectedClasses.xd
+if($desc instanceof Array)$desc=$desc[1]
+xd.prototype=$desc
+function v6(a){this.a=a}v6.builtin$cls="v6"
+if(!"name" in v6)v6.name="v6"
+$desc=$collectedClasses.v6
+if($desc instanceof Array)$desc=$desc[1]
+v6.prototype=$desc
+function db(kh,S4,DG,zQ){this.kh=kh
+this.S4=S4
+this.DG=DG
+this.zQ=zQ}db.builtin$cls="db"
+if(!"name" in db)db.name="db"
+$desc=$collectedClasses.db
+if($desc instanceof Array)$desc=$desc[1]
+db.prototype=$desc
+db.prototype.gkh=function(){return this.kh}
+db.prototype.gS4=function(){return this.S4}
+db.prototype.sS4=function(v){return this.S4=v}
+db.prototype.gDG=function(){return this.DG}
+db.prototype.sDG=function(v){return this.DG=v}
+db.prototype.gzQ=function(){return this.zQ}
+db.prototype.szQ=function(v){return this.zQ=v}
+function Cm(Fb){this.Fb=Fb}Cm.builtin$cls="Cm"
+if(!"name" in Cm)Cm.name="Cm"
+$desc=$collectedClasses.Cm
+if($desc instanceof Array)$desc=$desc[1]
+Cm.prototype=$desc
+function N6(Fb,zN,zq,fD){this.Fb=Fb
+this.zN=zN
+this.zq=zq
+this.fD=fD}N6.builtin$cls="N6"
+if(!"name" in N6)N6.name="N6"
+$desc=$collectedClasses.N6
+if($desc instanceof Array)$desc=$desc[1]
+N6.prototype=$desc
+function jg(){}jg.builtin$cls="jg"
+if(!"name" in jg)jg.name="jg"
+$desc=$collectedClasses.jg
+if($desc instanceof Array)$desc=$desc[1]
+jg.prototype=$desc
+function YO(X5,vv,OX,OB,DM){this.X5=X5
+this.vv=vv
+this.OX=OX
+this.OB=OB
+this.DM=DM}YO.builtin$cls="YO"
+if(!"name" in YO)YO.name="YO"
+$desc=$collectedClasses.YO
+if($desc instanceof Array)$desc=$desc[1]
+YO.prototype=$desc
+function oz(O2,DM,zi,fD){this.O2=O2
+this.DM=DM
+this.zi=zi
+this.fD=fD}oz.builtin$cls="oz"
+if(!"name" in oz)oz.name="oz"
+$desc=$collectedClasses.oz
+if($desc instanceof Array)$desc=$desc[1]
+oz.prototype=$desc
+function b6(X5,vv,OX,OB,H9,lX,zN){this.X5=X5
+this.vv=vv
+this.OX=OX
+this.OB=OB
+this.H9=H9
+this.lX=lX
+this.zN=zN}b6.builtin$cls="b6"
+if(!"name" in b6)b6.name="b6"
+$desc=$collectedClasses.b6
+if($desc instanceof Array)$desc=$desc[1]
+b6.prototype=$desc
+function ef(Gc,DG,zQ){this.Gc=Gc
+this.DG=DG
+this.zQ=zQ}ef.builtin$cls="ef"
+if(!"name" in ef)ef.name="ef"
+$desc=$collectedClasses.ef
+if($desc instanceof Array)$desc=$desc[1]
+ef.prototype=$desc
+ef.prototype.gGc=function(){return this.Gc}
+ef.prototype.gDG=function(){return this.DG}
+ef.prototype.sDG=function(v){return this.DG=v}
+ef.prototype.gzQ=function(){return this.zQ}
+ef.prototype.szQ=function(v){return this.zQ=v}
+function zQ(O2,zN,zq,fD){this.O2=O2
+this.zN=zN
+this.zq=zq
+this.fD=fD}zQ.builtin$cls="zQ"
+if(!"name" in zQ)zQ.name="zQ"
+$desc=$collectedClasses.zQ
+if($desc instanceof Array)$desc=$desc[1]
+zQ.prototype=$desc
+function Yp(G4){this.G4=G4}Yp.builtin$cls="Yp"
+if(!"name" in Yp)Yp.name="Yp"
+$desc=$collectedClasses.Yp
+if($desc instanceof Array)$desc=$desc[1]
+Yp.prototype=$desc
+function u3(){}u3.builtin$cls="u3"
+if(!"name" in u3)u3.name="u3"
+$desc=$collectedClasses.u3
+if($desc instanceof Array)$desc=$desc[1]
+u3.prototype=$desc
+function mW(){}mW.builtin$cls="mW"
+if(!"name" in mW)mW.name="mW"
+$desc=$collectedClasses.mW
+if($desc instanceof Array)$desc=$desc[1]
+mW.prototype=$desc
+function ar(){}ar.builtin$cls="ar"
+if(!"name" in ar)ar.name="ar"
+$desc=$collectedClasses.ar
+if($desc instanceof Array)$desc=$desc[1]
+ar.prototype=$desc
+function lD(){}lD.builtin$cls="lD"
+if(!"name" in lD)lD.name="lD"
+$desc=$collectedClasses.lD
+if($desc instanceof Array)$desc=$desc[1]
+lD.prototype=$desc
+function W0(a,b){this.a=a
+this.b=b}W0.builtin$cls="W0"
+if(!"name" in W0)W0.name="W0"
+$desc=$collectedClasses.W0
+if($desc instanceof Array)$desc=$desc[1]
+W0.prototype=$desc
+function Sw(v5,av,HV,qT){this.v5=v5
+this.av=av
+this.HV=HV
+this.qT=qT}Sw.builtin$cls="Sw"
+if(!"name" in Sw)Sw.name="Sw"
+$desc=$collectedClasses.Sw
+if($desc instanceof Array)$desc=$desc[1]
+Sw.prototype=$desc
+function o0(Lz,dP,qT,Dc,fD){this.Lz=Lz
+this.dP=dP
+this.qT=qT
+this.Dc=Dc
+this.fD=fD}o0.builtin$cls="o0"
+if(!"name" in o0)o0.name="o0"
+$desc=$collectedClasses.o0
+if($desc instanceof Array)$desc=$desc[1]
+o0.prototype=$desc
+function a1(G3,Bb,T8){this.G3=G3
+this.Bb=Bb
+this.T8=T8}a1.builtin$cls="a1"
+if(!"name" in a1)a1.name="a1"
+$desc=$collectedClasses.a1
+if($desc instanceof Array)$desc=$desc[1]
+a1.prototype=$desc
+a1.prototype.gG3=function(receiver){return this.G3}
+a1.prototype.gBb=function(receiver){return this.Bb}
+a1.prototype.gT8=function(receiver){return this.T8}
+function jp(P,G3,Bb,T8){this.P=P
+this.G3=G3
+this.Bb=Bb
+this.T8=T8}jp.builtin$cls="jp"
+if(!"name" in jp)jp.name="jp"
+$desc=$collectedClasses.jp
+if($desc instanceof Array)$desc=$desc[1]
+jp.prototype=$desc
+jp.prototype.gP=function(receiver){return this.P}
+jp.prototype.sP=function(receiver,v){return this.P=v}
+function Xt(){}Xt.builtin$cls="Xt"
+if(!"name" in Xt)Xt.name="Xt"
+$desc=$collectedClasses.Xt
+if($desc instanceof Array)$desc=$desc[1]
+Xt.prototype=$desc
+function Ba(Cw,bR,aY,iW,J0,qT,bb){this.Cw=Cw
+this.bR=bR
+this.aY=aY
+this.iW=iW
+this.J0=J0
+this.qT=qT
+this.bb=bb}Ba.builtin$cls="Ba"
+if(!"name" in Ba)Ba.name="Ba"
+$desc=$collectedClasses.Ba
+if($desc instanceof Array)$desc=$desc[1]
+Ba.prototype=$desc
+function An(a){this.a=a}An.builtin$cls="An"
+if(!"name" in An)An.name="An"
+$desc=$collectedClasses.An
+if($desc instanceof Array)$desc=$desc[1]
+An.prototype=$desc
+function LD(a,b,c){this.a=a
+this.b=b
+this.c=c}LD.builtin$cls="LD"
+if(!"name" in LD)LD.name="LD"
+$desc=$collectedClasses.LD
+if($desc instanceof Array)$desc=$desc[1]
+LD.prototype=$desc
+function YI(){}YI.builtin$cls="YI"
+if(!"name" in YI)YI.name="YI"
+$desc=$collectedClasses.YI
+if($desc instanceof Array)$desc=$desc[1]
+YI.prototype=$desc
+function OG(Dn){this.Dn=Dn}OG.builtin$cls="OG"
+if(!"name" in OG)OG.name="OG"
+$desc=$collectedClasses.OG
+if($desc instanceof Array)$desc=$desc[1]
+OG.prototype=$desc
+function ro(Fb){this.Fb=Fb}ro.builtin$cls="ro"
+if(!"name" in ro)ro.name="ro"
+$desc=$collectedClasses.ro
+if($desc instanceof Array)$desc=$desc[1]
+ro.prototype=$desc
+function DN(Dn,Ln,qT,bb,ya){this.Dn=Dn
+this.Ln=Ln
+this.qT=qT
+this.bb=bb
+this.ya=ya}DN.builtin$cls="DN"
+if(!"name" in DN)DN.name="DN"
+$desc=$collectedClasses.DN
+if($desc instanceof Array)$desc=$desc[1]
+DN.prototype=$desc
+function ZM(Dn,Ln,qT,bb,ya){this.Dn=Dn
+this.Ln=Ln
+this.qT=qT
+this.bb=bb
+this.ya=ya}ZM.builtin$cls="ZM"
+if(!"name" in ZM)ZM.name="ZM"
+$desc=$collectedClasses.ZM
+if($desc instanceof Array)$desc=$desc[1]
+ZM.prototype=$desc
+function HW(Dn,Ln,qT,bb,ya){this.Dn=Dn
+this.Ln=Ln
+this.qT=qT
+this.bb=bb
+this.ya=ya}HW.builtin$cls="HW"
+if(!"name" in HW)HW.name="HW"
+$desc=$collectedClasses.HW
+if($desc instanceof Array)$desc=$desc[1]
+HW.prototype=$desc
+function JC(){}JC.builtin$cls="JC"
+if(!"name" in JC)JC.name="JC"
+$desc=$collectedClasses.JC
+if($desc instanceof Array)$desc=$desc[1]
+JC.prototype=$desc
+function f1(a){this.a=a}f1.builtin$cls="f1"
+if(!"name" in f1)f1.name="f1"
+$desc=$collectedClasses.f1
+if($desc instanceof Array)$desc=$desc[1]
+f1.prototype=$desc
+function Uk(){}Uk.builtin$cls="Uk"
+if(!"name" in Uk)Uk.name="Uk"
+$desc=$collectedClasses.Uk
+if($desc instanceof Array)$desc=$desc[1]
+Uk.prototype=$desc
+function wI(){}wI.builtin$cls="wI"
+if(!"name" in wI)wI.name="wI"
+$desc=$collectedClasses.wI
+if($desc instanceof Array)$desc=$desc[1]
+wI.prototype=$desc
+function ob(){}ob.builtin$cls="ob"
+if(!"name" in ob)ob.name="ob"
+$desc=$collectedClasses.ob
+if($desc instanceof Array)$desc=$desc[1]
+ob.prototype=$desc
+function Ud(Ct,FN){this.Ct=Ct
+this.FN=FN}Ud.builtin$cls="Ud"
+if(!"name" in Ud)Ud.name="Ud"
+$desc=$collectedClasses.Ud
+if($desc instanceof Array)$desc=$desc[1]
+Ud.prototype=$desc
+function K8(Ct,FN){this.Ct=Ct
+this.FN=FN}K8.builtin$cls="K8"
+if(!"name" in K8)K8.name="K8"
+$desc=$collectedClasses.K8
+if($desc instanceof Array)$desc=$desc[1]
+K8.prototype=$desc
+function by(){}by.builtin$cls="by"
+if(!"name" in by)by.name="by"
+$desc=$collectedClasses.by
+if($desc instanceof Array)$desc=$desc[1]
+by.prototype=$desc
+function dI(ke){this.ke=ke}dI.builtin$cls="dI"
+if(!"name" in dI)dI.name="dI"
+$desc=$collectedClasses.dI
+if($desc instanceof Array)$desc=$desc[1]
+dI.prototype=$desc
+function QM(N5){this.N5=N5}QM.builtin$cls="QM"
+if(!"name" in QM)QM.name="QM"
+$desc=$collectedClasses.QM
+if($desc instanceof Array)$desc=$desc[1]
+QM.prototype=$desc
+function Sh(WE,u4,JN){this.WE=WE
+this.u4=u4
+this.JN=JN}Sh.builtin$cls="Sh"
+if(!"name" in Sh)Sh.name="Sh"
+$desc=$collectedClasses.Sh
+if($desc instanceof Array)$desc=$desc[1]
+Sh.prototype=$desc
+function tF(a,b){this.a=a
+this.b=b}tF.builtin$cls="tF"
+if(!"name" in tF)tF.name="tF"
+$desc=$collectedClasses.tF
+if($desc instanceof Array)$desc=$desc[1]
+tF.prototype=$desc
+function z0(lH){this.lH=lH}z0.builtin$cls="z0"
+if(!"name" in z0)z0.name="z0"
+$desc=$collectedClasses.z0
+if($desc instanceof Array)$desc=$desc[1]
+z0.prototype=$desc
+function Vx(){}Vx.builtin$cls="Vx"
+if(!"name" in Vx)Vx.name="Vx"
+$desc=$collectedClasses.Vx
+if($desc instanceof Array)$desc=$desc[1]
+Vx.prototype=$desc
+function Rw(vn,An,EN){this.vn=vn
+this.An=An
+this.EN=EN}Rw.builtin$cls="Rw"
+if(!"name" in Rw)Rw.name="Rw"
+$desc=$collectedClasses.Rw
+if($desc instanceof Array)$desc=$desc[1]
+Rw.prototype=$desc
+function GY(lH){this.lH=lH}GY.builtin$cls="GY"
+if(!"name" in GY)GY.name="GY"
+$desc=$collectedClasses.GY
+if($desc instanceof Array)$desc=$desc[1]
+GY.prototype=$desc
+function jZ(lH,aS,rU,Hu,iU,VN){this.lH=lH
+this.aS=aS
+this.rU=rU
+this.Hu=Hu
+this.iU=iU
+this.VN=VN}jZ.builtin$cls="jZ"
+if(!"name" in jZ)jZ.name="jZ"
+$desc=$collectedClasses.jZ
+if($desc instanceof Array)$desc=$desc[1]
+jZ.prototype=$desc
+function h0(a){this.a=a}h0.builtin$cls="h0"
+if(!"name" in h0)h0.name="h0"
+$desc=$collectedClasses.h0
+if($desc instanceof Array)$desc=$desc[1]
+h0.prototype=$desc
+function CL(a){this.a=a}CL.builtin$cls="CL"
+if(!"name" in CL)CL.name="CL"
+$desc=$collectedClasses.CL
+if($desc instanceof Array)$desc=$desc[1]
+CL.prototype=$desc
+function uA(OF){this.OF=OF}uA.builtin$cls="uA"
+if(!"name" in uA)uA.name="uA"
+$desc=$collectedClasses.uA
+if($desc instanceof Array)$desc=$desc[1]
+uA.prototype=$desc
+function a2(){}a2.builtin$cls="a2"
+if(!"name" in a2)a2.name="a2"
+$desc=$collectedClasses.a2
+if($desc instanceof Array)$desc=$desc[1]
+a2.prototype=$desc
+function fR(){}fR.builtin$cls="fR"
+if(!"name" in fR)fR.name="fR"
+$desc=$collectedClasses.fR
+if($desc instanceof Array)$desc=$desc[1]
+fR.prototype=$desc
+function iP(rq,aL){this.rq=rq
+this.aL=aL}iP.builtin$cls="iP"
+if(!"name" in iP)iP.name="iP"
+$desc=$collectedClasses.iP
+if($desc instanceof Array)$desc=$desc[1]
+iP.prototype=$desc
+iP.prototype.grq=function(){return this.rq}
+function MF(){}MF.builtin$cls="MF"
+if(!"name" in MF)MF.name="MF"
+$desc=$collectedClasses.MF
+if($desc instanceof Array)$desc=$desc[1]
+MF.prototype=$desc
+function Rq(){}Rq.builtin$cls="Rq"
+if(!"name" in Rq)Rq.name="Rq"
+$desc=$collectedClasses.Rq
+if($desc instanceof Array)$desc=$desc[1]
+Rq.prototype=$desc
+function Hn(){}Hn.builtin$cls="Hn"
+if(!"name" in Hn)Hn.name="Hn"
+$desc=$collectedClasses.Hn
+if($desc instanceof Array)$desc=$desc[1]
+Hn.prototype=$desc
+function Zl(){}Zl.builtin$cls="Zl"
+if(!"name" in Zl)Zl.name="Zl"
+$desc=$collectedClasses.Zl
+if($desc instanceof Array)$desc=$desc[1]
+Zl.prototype=$desc
+function pl(){}pl.builtin$cls="pl"
+if(!"name" in pl)pl.name="pl"
+$desc=$collectedClasses.pl
+if($desc instanceof Array)$desc=$desc[1]
+pl.prototype=$desc
+function a6(Fq){this.Fq=Fq}a6.builtin$cls="a6"
+if(!"name" in a6)a6.name="a6"
+$desc=$collectedClasses.a6
+if($desc instanceof Array)$desc=$desc[1]
+a6.prototype=$desc
+a6.prototype.gFq=function(){return this.Fq}
+function P7(){}P7.builtin$cls="P7"
+if(!"name" in P7)P7.name="P7"
+$desc=$collectedClasses.P7
+if($desc instanceof Array)$desc=$desc[1]
+P7.prototype=$desc
+function DW(){}DW.builtin$cls="DW"
+if(!"name" in DW)DW.name="DW"
+$desc=$collectedClasses.DW
+if($desc instanceof Array)$desc=$desc[1]
+DW.prototype=$desc
+function Ge(){}Ge.builtin$cls="Ge"
+if(!"name" in Ge)Ge.name="Ge"
+$desc=$collectedClasses.Ge
+if($desc instanceof Array)$desc=$desc[1]
+Ge.prototype=$desc
+function LK(){}LK.builtin$cls="LK"
+if(!"name" in LK)LK.name="LK"
+$desc=$collectedClasses.LK
+if($desc instanceof Array)$desc=$desc[1]
+LK.prototype=$desc
+function AT(G1){this.G1=G1}AT.builtin$cls="AT"
+if(!"name" in AT)AT.name="AT"
+$desc=$collectedClasses.AT
+if($desc instanceof Array)$desc=$desc[1]
+AT.prototype=$desc
+AT.prototype.gG1=function(receiver){return this.G1}
+function bJ(G1){this.G1=G1}bJ.builtin$cls="bJ"
+if(!"name" in bJ)bJ.name="bJ"
+$desc=$collectedClasses.bJ
+if($desc instanceof Array)$desc=$desc[1]
+bJ.prototype=$desc
+function mp(uF,UP,mP,SA,vG){this.uF=uF
+this.UP=UP
+this.mP=mP
+this.SA=SA
+this.vG=vG}mp.builtin$cls="mp"
+if(!"name" in mp)mp.name="mp"
+$desc=$collectedClasses.mp
+if($desc instanceof Array)$desc=$desc[1]
+mp.prototype=$desc
+function ub(G1){this.G1=G1}ub.builtin$cls="ub"
+if(!"name" in ub)ub.name="ub"
+$desc=$collectedClasses.ub
+if($desc instanceof Array)$desc=$desc[1]
+ub.prototype=$desc
+ub.prototype.gG1=function(receiver){return this.G1}
+function ds(G1){this.G1=G1}ds.builtin$cls="ds"
+if(!"name" in ds)ds.name="ds"
+$desc=$collectedClasses.ds
+if($desc instanceof Array)$desc=$desc[1]
+ds.prototype=$desc
+ds.prototype.gG1=function(receiver){return this.G1}
+function lj(G1){this.G1=G1}lj.builtin$cls="lj"
+if(!"name" in lj)lj.name="lj"
+$desc=$collectedClasses.lj
+if($desc instanceof Array)$desc=$desc[1]
+lj.prototype=$desc
+lj.prototype.gG1=function(receiver){return this.G1}
+function UV(YA){this.YA=YA}UV.builtin$cls="UV"
+if(!"name" in UV)UV.name="UV"
+$desc=$collectedClasses.UV
+if($desc instanceof Array)$desc=$desc[1]
+UV.prototype=$desc
+function VS(){}VS.builtin$cls="VS"
+if(!"name" in VS)VS.name="VS"
+$desc=$collectedClasses.VS
+if($desc instanceof Array)$desc=$desc[1]
+VS.prototype=$desc
+function t7(Wo){this.Wo=Wo}t7.builtin$cls="t7"
+if(!"name" in t7)t7.name="t7"
+$desc=$collectedClasses.t7
+if($desc instanceof Array)$desc=$desc[1]
+t7.prototype=$desc
+function HG(G1){this.G1=G1}HG.builtin$cls="HG"
+if(!"name" in HG)HG.name="HG"
+$desc=$collectedClasses.HG
+if($desc instanceof Array)$desc=$desc[1]
+HG.prototype=$desc
+HG.prototype.gG1=function(receiver){return this.G1}
+function aE(G1){this.G1=G1}aE.builtin$cls="aE"
+if(!"name" in aE)aE.name="aE"
+$desc=$collectedClasses.aE
+if($desc instanceof Array)$desc=$desc[1]
+aE.prototype=$desc
+aE.prototype.gG1=function(receiver){return this.G1}
+function kM(oc){this.oc=oc}kM.builtin$cls="kM"
+if(!"name" in kM)kM.name="kM"
+$desc=$collectedClasses.kM
+if($desc instanceof Array)$desc=$desc[1]
+kM.prototype=$desc
+kM.prototype.goc=function(receiver){return this.oc}
+function EH(){}EH.builtin$cls="EH"
+if(!"name" in EH)EH.name="EH"
+$desc=$collectedClasses.EH
+if($desc instanceof Array)$desc=$desc[1]
+EH.prototype=$desc
+function cX(){}cX.builtin$cls="cX"
+if(!"name" in cX)cX.name="cX"
+$desc=$collectedClasses.cX
+if($desc instanceof Array)$desc=$desc[1]
+cX.prototype=$desc
+function eL(){}eL.builtin$cls="eL"
+if(!"name" in eL)eL.name="eL"
+$desc=$collectedClasses.eL
+if($desc instanceof Array)$desc=$desc[1]
+eL.prototype=$desc
+function L8(){}L8.builtin$cls="L8"
+if(!"name" in L8)L8.name="L8"
+$desc=$collectedClasses.L8
+if($desc instanceof Array)$desc=$desc[1]
+L8.prototype=$desc
+function c8(){}c8.builtin$cls="c8"
+if(!"name" in c8)c8.name="c8"
+$desc=$collectedClasses.c8
+if($desc instanceof Array)$desc=$desc[1]
+c8.prototype=$desc
+function a(){}a.builtin$cls="a"
+if(!"name" in a)a.name="a"
+$desc=$collectedClasses.a
+if($desc instanceof Array)$desc=$desc[1]
+a.prototype=$desc
+function Od(){}Od.builtin$cls="Od"
+if(!"name" in Od)Od.name="Od"
+$desc=$collectedClasses.Od
+if($desc instanceof Array)$desc=$desc[1]
+Od.prototype=$desc
+function mE(){}mE.builtin$cls="mE"
+if(!"name" in mE)mE.name="mE"
+$desc=$collectedClasses.mE
+if($desc instanceof Array)$desc=$desc[1]
+mE.prototype=$desc
+function WU(Qk,SU,Oq,Wn){this.Qk=Qk
+this.SU=SU
+this.Oq=Oq
+this.Wn=Wn}WU.builtin$cls="WU"
+if(!"name" in WU)WU.name="WU"
+$desc=$collectedClasses.WU
+if($desc instanceof Array)$desc=$desc[1]
+WU.prototype=$desc
+function Rn(vM){this.vM=vM}Rn.builtin$cls="Rn"
+if(!"name" in Rn)Rn.name="Rn"
+$desc=$collectedClasses.Rn
+if($desc instanceof Array)$desc=$desc[1]
+Rn.prototype=$desc
+Rn.prototype.gvM=function(){return this.vM}
+function wv(){}wv.builtin$cls="wv"
+if(!"name" in wv)wv.name="wv"
+$desc=$collectedClasses.wv
+if($desc instanceof Array)$desc=$desc[1]
+wv.prototype=$desc
+function uq(){}uq.builtin$cls="uq"
+if(!"name" in uq)uq.name="uq"
+$desc=$collectedClasses.uq
+if($desc instanceof Array)$desc=$desc[1]
+uq.prototype=$desc
+function iD(NN,HC,r0,Fi,iV,tP,BJ,MS,yW){this.NN=NN
+this.HC=HC
+this.r0=r0
+this.Fi=Fi
+this.iV=iV
+this.tP=tP
+this.BJ=BJ
+this.MS=MS
+this.yW=yW}iD.builtin$cls="iD"
+if(!"name" in iD)iD.name="iD"
+$desc=$collectedClasses.iD
+if($desc instanceof Array)$desc=$desc[1]
+iD.prototype=$desc
+function hb(){}hb.builtin$cls="hb"
+if(!"name" in hb)hb.name="hb"
+$desc=$collectedClasses.hb
+if($desc instanceof Array)$desc=$desc[1]
+hb.prototype=$desc
+function XX(){}XX.builtin$cls="XX"
+if(!"name" in XX)XX.name="XX"
+$desc=$collectedClasses.XX
+if($desc instanceof Array)$desc=$desc[1]
+XX.prototype=$desc
+function Kd(){}Kd.builtin$cls="Kd"
+if(!"name" in Kd)Kd.name="Kd"
+$desc=$collectedClasses.Kd
+if($desc instanceof Array)$desc=$desc[1]
+Kd.prototype=$desc
+function yZ(a,b){this.a=a
+this.b=b}yZ.builtin$cls="yZ"
+if(!"name" in yZ)yZ.name="yZ"
+$desc=$collectedClasses.yZ
+if($desc instanceof Array)$desc=$desc[1]
+yZ.prototype=$desc
+function Gs(){}Gs.builtin$cls="Gs"
+if(!"name" in Gs)Gs.name="Gs"
+$desc=$collectedClasses.Gs
+if($desc instanceof Array)$desc=$desc[1]
+Gs.prototype=$desc
+function pm(){}pm.builtin$cls="pm"
+if(!"name" in pm)pm.name="pm"
+$desc=$collectedClasses.pm
+if($desc instanceof Array)$desc=$desc[1]
+pm.prototype=$desc
+function Tw(){}Tw.builtin$cls="Tw"
+if(!"name" in Tw)Tw.name="Tw"
+$desc=$collectedClasses.Tw
+if($desc instanceof Array)$desc=$desc[1]
+Tw.prototype=$desc
+function wm(b,c,d){this.b=b
+this.c=c
+this.d=d}wm.builtin$cls="wm"
+if(!"name" in wm)wm.name="wm"
+$desc=$collectedClasses.wm
+if($desc instanceof Array)$desc=$desc[1]
+wm.prototype=$desc
+function FB(e){this.e=e}FB.builtin$cls="FB"
+if(!"name" in FB)FB.name="FB"
+$desc=$collectedClasses.FB
+if($desc instanceof Array)$desc=$desc[1]
+FB.prototype=$desc
+function Lk(a,f){this.a=a
+this.f=f}Lk.builtin$cls="Lk"
+if(!"name" in Lk)Lk.name="Lk"
+$desc=$collectedClasses.Lk
+if($desc instanceof Array)$desc=$desc[1]
+Lk.prototype=$desc
+function XZ(){}XZ.builtin$cls="XZ"
+if(!"name" in XZ)XZ.name="XZ"
+$desc=$collectedClasses.XZ
+if($desc instanceof Array)$desc=$desc[1]
+XZ.prototype=$desc
+function qz(a){this.a=a}qz.builtin$cls="qz"
+if(!"name" in qz)qz.name="qz"
+$desc=$collectedClasses.qz
+if($desc instanceof Array)$desc=$desc[1]
+qz.prototype=$desc
+function hQ(){}hQ.builtin$cls="hQ"
+if(!"name" in hQ)hQ.name="hQ"
+$desc=$collectedClasses.hQ
+if($desc instanceof Array)$desc=$desc[1]
+hQ.prototype=$desc
+function Nw(a){this.a=a}Nw.builtin$cls="Nw"
+if(!"name" in Nw)Nw.name="Nw"
+$desc=$collectedClasses.Nw
+if($desc instanceof Array)$desc=$desc[1]
+Nw.prototype=$desc
+function kZ(){}kZ.builtin$cls="kZ"
+if(!"name" in kZ)kZ.name="kZ"
+$desc=$collectedClasses.kZ
+if($desc instanceof Array)$desc=$desc[1]
+kZ.prototype=$desc
+function JT(a,b){this.a=a
+this.b=b}JT.builtin$cls="JT"
+if(!"name" in JT)JT.name="JT"
+$desc=$collectedClasses.JT
+if($desc instanceof Array)$desc=$desc[1]
+JT.prototype=$desc
+function d9(c){this.c=c}d9.builtin$cls="d9"
+if(!"name" in d9)d9.name="d9"
+$desc=$collectedClasses.d9
+if($desc instanceof Array)$desc=$desc[1]
+d9.prototype=$desc
+function rI(){}rI.builtin$cls="rI"
+if(!"name" in rI)rI.name="rI"
+$desc=$collectedClasses.rI
+if($desc instanceof Array)$desc=$desc[1]
+rI.prototype=$desc
+function dD(iY){this.iY=iY}dD.builtin$cls="dD"
+if(!"name" in dD)dD.name="dD"
+$desc=$collectedClasses.dD
+if($desc instanceof Array)$desc=$desc[1]
+dD.prototype=$desc
+function QZ(){}QZ.builtin$cls="QZ"
+if(!"name" in QZ)QZ.name="QZ"
+$desc=$collectedClasses.QZ
+if($desc instanceof Array)$desc=$desc[1]
+QZ.prototype=$desc
+function BV(){}BV.builtin$cls="BV"
+if(!"name" in BV)BV.name="BV"
+$desc=$collectedClasses.BV
+if($desc instanceof Array)$desc=$desc[1]
+BV.prototype=$desc
+function E1(){}E1.builtin$cls="E1"
+if(!"name" in E1)E1.name="E1"
+$desc=$collectedClasses.E1
+if($desc instanceof Array)$desc=$desc[1]
+E1.prototype=$desc
+function wz(Sn,Sc){this.Sn=Sn
+this.Sc=Sc}wz.builtin$cls="wz"
+if(!"name" in wz)wz.name="wz"
+$desc=$collectedClasses.wz
+if($desc instanceof Array)$desc=$desc[1]
+wz.prototype=$desc
+function B1(){}B1.builtin$cls="B1"
+if(!"name" in B1)B1.name="B1"
+$desc=$collectedClasses.B1
+if($desc instanceof Array)$desc=$desc[1]
+B1.prototype=$desc
+function M5(){}M5.builtin$cls="M5"
+if(!"name" in M5)M5.name="M5"
+$desc=$collectedClasses.M5
+if($desc instanceof Array)$desc=$desc[1]
+M5.prototype=$desc
+function Jn(WK){this.WK=WK}Jn.builtin$cls="Jn"
+if(!"name" in Jn)Jn.name="Jn"
+$desc=$collectedClasses.Jn
+if($desc instanceof Array)$desc=$desc[1]
+Jn.prototype=$desc
+Jn.prototype.gWK=function(){return this.WK}
+function DM(WK,vW){this.WK=WK
+this.vW=vW}DM.builtin$cls="DM"
+if(!"name" in DM)DM.name="DM"
+$desc=$collectedClasses.DM
+if($desc instanceof Array)$desc=$desc[1]
+DM.prototype=$desc
+DM.prototype.gWK=function(){return this.WK}
+function zL(){}zL.builtin$cls="zL"
+if(!"name" in zL)zL.name="zL"
+$desc=$collectedClasses.zL
+if($desc instanceof Array)$desc=$desc[1]
+zL.prototype=$desc
+function ec(){}ec.builtin$cls="ec"
+if(!"name" in ec)ec.name="ec"
+$desc=$collectedClasses.ec
+if($desc instanceof Array)$desc=$desc[1]
+ec.prototype=$desc
+function Kx(){}Kx.builtin$cls="Kx"
+if(!"name" in Kx)Kx.name="Kx"
+$desc=$collectedClasses.Kx
+if($desc instanceof Array)$desc=$desc[1]
+Kx.prototype=$desc
+function iO(a){this.a=a}iO.builtin$cls="iO"
+if(!"name" in iO)iO.name="iO"
+$desc=$collectedClasses.iO
+if($desc instanceof Array)$desc=$desc[1]
+iO.prototype=$desc
+function bU(b,c){this.b=b
+this.c=c}bU.builtin$cls="bU"
+if(!"name" in bU)bU.name="bU"
+$desc=$collectedClasses.bU
+if($desc instanceof Array)$desc=$desc[1]
+bU.prototype=$desc
+function e7(NL){this.NL=NL}e7.builtin$cls="e7"
+if(!"name" in e7)e7.name="e7"
+$desc=$collectedClasses.e7
+if($desc instanceof Array)$desc=$desc[1]
+e7.prototype=$desc
+function nj(){}nj.builtin$cls="nj"
+if(!"name" in nj)nj.name="nj"
+$desc=$collectedClasses.nj
+if($desc instanceof Array)$desc=$desc[1]
+nj.prototype=$desc
+function rl(){}rl.builtin$cls="rl"
+if(!"name" in rl)rl.name="rl"
+$desc=$collectedClasses.rl
+if($desc instanceof Array)$desc=$desc[1]
+rl.prototype=$desc
+function RAp(){}RAp.builtin$cls="RAp"
+if(!"name" in RAp)RAp.name="RAp"
+$desc=$collectedClasses.RAp
+if($desc instanceof Array)$desc=$desc[1]
+RAp.prototype=$desc
+function ma(){}ma.builtin$cls="ma"
+if(!"name" in ma)ma.name="ma"
+$desc=$collectedClasses.ma
+if($desc instanceof Array)$desc=$desc[1]
+ma.prototype=$desc
+function cf(){}cf.builtin$cls="cf"
+if(!"name" in cf)cf.name="cf"
+$desc=$collectedClasses.cf
+if($desc instanceof Array)$desc=$desc[1]
+cf.prototype=$desc
+function E9(MW){this.MW=MW}E9.builtin$cls="E9"
+if(!"name" in E9)E9.name="E9"
+$desc=$collectedClasses.E9
+if($desc instanceof Array)$desc=$desc[1]
+E9.prototype=$desc
+function nF(QX,Kd){this.QX=QX
+this.Kd=Kd}nF.builtin$cls="nF"
+if(!"name" in nF)nF.name="nF"
+$desc=$collectedClasses.nF
+if($desc instanceof Array)$desc=$desc[1]
+nF.prototype=$desc
+function FK(){}FK.builtin$cls="FK"
+if(!"name" in FK)FK.name="FK"
+$desc=$collectedClasses.FK
+if($desc instanceof Array)$desc=$desc[1]
+FK.prototype=$desc
+function Si(a){this.a=a}Si.builtin$cls="Si"
+if(!"name" in Si)Si.name="Si"
+$desc=$collectedClasses.Si
+if($desc instanceof Array)$desc=$desc[1]
+Si.prototype=$desc
+function vf(a){this.a=a}vf.builtin$cls="vf"
+if(!"name" in vf)vf.name="vf"
+$desc=$collectedClasses.vf
+if($desc instanceof Array)$desc=$desc[1]
+vf.prototype=$desc
+function Fc(a){this.a=a}Fc.builtin$cls="Fc"
+if(!"name" in Fc)Fc.name="Fc"
+$desc=$collectedClasses.Fc
+if($desc instanceof Array)$desc=$desc[1]
+Fc.prototype=$desc
+function hD(a){this.a=a}hD.builtin$cls="hD"
+if(!"name" in hD)hD.name="hD"
+$desc=$collectedClasses.hD
+if($desc instanceof Array)$desc=$desc[1]
+hD.prototype=$desc
+function I4(MW){this.MW=MW}I4.builtin$cls="I4"
+if(!"name" in I4)I4.name="I4"
+$desc=$collectedClasses.I4
+if($desc instanceof Array)$desc=$desc[1]
+I4.prototype=$desc
+function e0(Ph){this.Ph=Ph}e0.builtin$cls="e0"
+if(!"name" in e0)e0.name="e0"
+$desc=$collectedClasses.e0
+if($desc instanceof Array)$desc=$desc[1]
+e0.prototype=$desc
+function RO(uv,Ph,Sg){this.uv=uv
+this.Ph=Ph
+this.Sg=Sg}RO.builtin$cls="RO"
+if(!"name" in RO)RO.name="RO"
+$desc=$collectedClasses.RO
+if($desc instanceof Array)$desc=$desc[1]
+RO.prototype=$desc
+function eu(uv,Ph,Sg){this.uv=uv
+this.Ph=Ph
+this.Sg=Sg}eu.builtin$cls="eu"
+if(!"name" in eu)eu.name="eu"
+$desc=$collectedClasses.eu
+if($desc instanceof Array)$desc=$desc[1]
+eu.prototype=$desc
+function ie(a){this.a=a}ie.builtin$cls="ie"
+if(!"name" in ie)ie.name="ie"
+$desc=$collectedClasses.ie
+if($desc instanceof Array)$desc=$desc[1]
+ie.prototype=$desc
+function Ea(b){this.b=b}Ea.builtin$cls="Ea"
+if(!"name" in Ea)Ea.name="Ea"
+$desc=$collectedClasses.Ea
+if($desc instanceof Array)$desc=$desc[1]
+Ea.prototype=$desc
+function pu(AF,Sg,Ph){this.AF=AF
+this.Sg=Sg
+this.Ph=Ph}pu.builtin$cls="pu"
+if(!"name" in pu)pu.name="pu"
+$desc=$collectedClasses.pu
+if($desc instanceof Array)$desc=$desc[1]
+pu.prototype=$desc
+function i2(a){this.a=a}i2.builtin$cls="i2"
+if(!"name" in i2)i2.name="i2"
+$desc=$collectedClasses.i2
+if($desc instanceof Array)$desc=$desc[1]
+i2.prototype=$desc
+function b0(b){this.b=b}b0.builtin$cls="b0"
+if(!"name" in b0)b0.name="b0"
+$desc=$collectedClasses.b0
+if($desc instanceof Array)$desc=$desc[1]
+b0.prototype=$desc
+function Ov(VP,uv,Ph,u7,Sg){this.VP=VP
+this.uv=uv
+this.Ph=Ph
+this.u7=u7
+this.Sg=Sg}Ov.builtin$cls="Ov"
+if(!"name" in Ov)Ov.name="Ov"
+$desc=$collectedClasses.Ov
+if($desc instanceof Array)$desc=$desc[1]
+Ov.prototype=$desc
+function qO(aV,eM){this.aV=aV
+this.eM=eM}qO.builtin$cls="qO"
+if(!"name" in qO)qO.name="qO"
+$desc=$collectedClasses.qO
+if($desc instanceof Array)$desc=$desc[1]
+qO.prototype=$desc
+function RX(a,b){this.a=a
+this.b=b}RX.builtin$cls="RX"
+if(!"name" in RX)RX.name="RX"
+$desc=$collectedClasses.RX
+if($desc instanceof Array)$desc=$desc[1]
+RX.prototype=$desc
+function kG(bG){this.bG=bG}kG.builtin$cls="kG"
+if(!"name" in kG)kG.name="kG"
+$desc=$collectedClasses.kG
+if($desc instanceof Array)$desc=$desc[1]
+kG.prototype=$desc
+function Gm(){}Gm.builtin$cls="Gm"
+if(!"name" in Gm)Gm.name="Gm"
+$desc=$collectedClasses.Gm
+if($desc instanceof Array)$desc=$desc[1]
+Gm.prototype=$desc
+function W9(nj,vN,Nq,QZ){this.nj=nj
+this.vN=vN
+this.Nq=Nq
+this.QZ=QZ}W9.builtin$cls="W9"
+if(!"name" in W9)W9.name="W9"
+$desc=$collectedClasses.W9
+if($desc instanceof Array)$desc=$desc[1]
+W9.prototype=$desc
+function vZ(a,b){this.a=a
+this.b=b}vZ.builtin$cls="vZ"
+if(!"name" in vZ)vZ.name="vZ"
+$desc=$collectedClasses.vZ
+if($desc instanceof Array)$desc=$desc[1]
+vZ.prototype=$desc
+function dW(Ui){this.Ui=Ui}dW.builtin$cls="dW"
+if(!"name" in dW)dW.name="dW"
+$desc=$collectedClasses.dW
+if($desc instanceof Array)$desc=$desc[1]
+dW.prototype=$desc
+function PA(mf){this.mf=mf}PA.builtin$cls="PA"
+if(!"name" in PA)PA.name="PA"
+$desc=$collectedClasses.PA
+if($desc instanceof Array)$desc=$desc[1]
+PA.prototype=$desc
+function H2(WK){this.WK=WK}H2.builtin$cls="H2"
+if(!"name" in H2)H2.name="H2"
+$desc=$collectedClasses.H2
+if($desc instanceof Array)$desc=$desc[1]
+H2.prototype=$desc
+function O7(CE){this.CE=CE}O7.builtin$cls="O7"
+if(!"name" in O7)O7.name="O7"
+$desc=$collectedClasses.O7
+if($desc instanceof Array)$desc=$desc[1]
+O7.prototype=$desc
+function HI(){}HI.builtin$cls="HI"
+if(!"name" in HI)HI.name="HI"
+$desc=$collectedClasses.HI
+if($desc instanceof Array)$desc=$desc[1]
+HI.prototype=$desc
+function E4(eh){this.eh=eh}E4.builtin$cls="E4"
+if(!"name" in E4)E4.name="E4"
+$desc=$collectedClasses.E4
+if($desc instanceof Array)$desc=$desc[1]
+E4.prototype=$desc
+function r7(eh){this.eh=eh}r7.builtin$cls="r7"
+if(!"name" in r7)r7.name="r7"
+$desc=$collectedClasses.r7
+if($desc instanceof Array)$desc=$desc[1]
+r7.prototype=$desc
+function Tz(eh){this.eh=eh}Tz.builtin$cls="Tz"
+if(!"name" in Tz)Tz.name="Tz"
+$desc=$collectedClasses.Tz
+if($desc instanceof Array)$desc=$desc[1]
+Tz.prototype=$desc
+function Wk(){}Wk.builtin$cls="Wk"
+if(!"name" in Wk)Wk.name="Wk"
+$desc=$collectedClasses.Wk
+if($desc instanceof Array)$desc=$desc[1]
+Wk.prototype=$desc
+function DV(){}DV.builtin$cls="DV"
+if(!"name" in DV)DV.name="DV"
+$desc=$collectedClasses.DV
+if($desc instanceof Array)$desc=$desc[1]
+DV.prototype=$desc
+function Hp(){}Hp.builtin$cls="Hp"
+if(!"name" in Hp)Hp.name="Hp"
+$desc=$collectedClasses.Hp
+if($desc instanceof Array)$desc=$desc[1]
+Hp.prototype=$desc
+function Nz(){}Nz.builtin$cls="Nz"
+if(!"name" in Nz)Nz.name="Nz"
+$desc=$collectedClasses.Nz
+if($desc instanceof Array)$desc=$desc[1]
+Nz.prototype=$desc
+function Jd(){}Jd.builtin$cls="Jd"
+if(!"name" in Jd)Jd.name="Jd"
+$desc=$collectedClasses.Jd
+if($desc instanceof Array)$desc=$desc[1]
+Jd.prototype=$desc
+function QS(){}QS.builtin$cls="QS"
+if(!"name" in QS)QS.name="QS"
+$desc=$collectedClasses.QS
+if($desc instanceof Array)$desc=$desc[1]
+QS.prototype=$desc
+function QF(){}QF.builtin$cls="QF"
+if(!"name" in QF)QF.name="QF"
+$desc=$collectedClasses.QF
+if($desc instanceof Array)$desc=$desc[1]
+QF.prototype=$desc
+function NL(){}NL.builtin$cls="NL"
+if(!"name" in NL)NL.name="NL"
+$desc=$collectedClasses.NL
+if($desc instanceof Array)$desc=$desc[1]
+NL.prototype=$desc
+function vr(){}vr.builtin$cls="vr"
+if(!"name" in vr)vr.name="vr"
+$desc=$collectedClasses.vr
+if($desc instanceof Array)$desc=$desc[1]
+vr.prototype=$desc
+function D4(){}D4.builtin$cls="D4"
+if(!"name" in D4)D4.name="D4"
+$desc=$collectedClasses.D4
+if($desc instanceof Array)$desc=$desc[1]
+D4.prototype=$desc
+function L9u(){}L9u.builtin$cls="L9u"
+if(!"name" in L9u)L9u.name="L9u"
+$desc=$collectedClasses.L9u
+if($desc instanceof Array)$desc=$desc[1]
+L9u.prototype=$desc
+function Ms(){}Ms.builtin$cls="Ms"
+if(!"name" in Ms)Ms.name="Ms"
+$desc=$collectedClasses.Ms
+if($desc instanceof Array)$desc=$desc[1]
+Ms.prototype=$desc
+function Fw(){}Fw.builtin$cls="Fw"
+if(!"name" in Fw)Fw.name="Fw"
+$desc=$collectedClasses.Fw
+if($desc instanceof Array)$desc=$desc[1]
+Fw.prototype=$desc
+function RS(){}RS.builtin$cls="RS"
+if(!"name" in RS)RS.name="RS"
+$desc=$collectedClasses.RS
+if($desc instanceof Array)$desc=$desc[1]
+RS.prototype=$desc
+function RY(){}RY.builtin$cls="RY"
+if(!"name" in RY)RY.name="RY"
+$desc=$collectedClasses.RY
+if($desc instanceof Array)$desc=$desc[1]
+RY.prototype=$desc
+function Ys(){}Ys.builtin$cls="Ys"
+if(!"name" in Ys)Ys.name="Ys"
+$desc=$collectedClasses.Ys
+if($desc instanceof Array)$desc=$desc[1]
+Ys.prototype=$desc
+function vg(c1,m2,nV,V3){this.c1=c1
+this.m2=m2
+this.nV=nV
+this.V3=V3}vg.builtin$cls="vg"
+if(!"name" in vg)vg.name="vg"
+$desc=$collectedClasses.vg
+if($desc instanceof Array)$desc=$desc[1]
+vg.prototype=$desc
+function xG(){}xG.builtin$cls="xG"
+if(!"name" in xG)xG.name="xG"
+$desc=$collectedClasses.xG
+if($desc instanceof Array)$desc=$desc[1]
+xG.prototype=$desc
+function Vj(){}Vj.builtin$cls="Vj"
+if(!"name" in Vj)Vj.name="Vj"
+$desc=$collectedClasses.Vj
+if($desc instanceof Array)$desc=$desc[1]
+Vj.prototype=$desc
+function VW(){}VW.builtin$cls="VW"
+if(!"name" in VW)VW.name="VW"
+$desc=$collectedClasses.VW
+if($desc instanceof Array)$desc=$desc[1]
+VW.prototype=$desc
+function RK(){}RK.builtin$cls="RK"
+if(!"name" in RK)RK.name="RK"
+$desc=$collectedClasses.RK
+if($desc instanceof Array)$desc=$desc[1]
+RK.prototype=$desc
+function DH(){}DH.builtin$cls="DH"
+if(!"name" in DH)DH.name="DH"
+$desc=$collectedClasses.DH
+if($desc instanceof Array)$desc=$desc[1]
+DH.prototype=$desc
+function ZK(){}ZK.builtin$cls="ZK"
+if(!"name" in ZK)ZK.name="ZK"
+$desc=$collectedClasses.ZK
+if($desc instanceof Array)$desc=$desc[1]
+ZK.prototype=$desc
+function Th(){}Th.builtin$cls="Th"
+if(!"name" in Th)Th.name="Th"
+$desc=$collectedClasses.Th
+if($desc instanceof Array)$desc=$desc[1]
+Th.prototype=$desc
+function Vju(){}Vju.builtin$cls="Vju"
+if(!"name" in Vju)Vju.name="Vju"
+$desc=$collectedClasses.Vju
+if($desc instanceof Array)$desc=$desc[1]
+Vju.prototype=$desc
+function KB(){}KB.builtin$cls="KB"
+if(!"name" in KB)KB.name="KB"
+$desc=$collectedClasses.KB
+if($desc instanceof Array)$desc=$desc[1]
+KB.prototype=$desc
+function RKu(){}RKu.builtin$cls="RKu"
+if(!"name" in RKu)RKu.name="RKu"
+$desc=$collectedClasses.RKu
+if($desc instanceof Array)$desc=$desc[1]
+RKu.prototype=$desc
+function xGn(){}xGn.builtin$cls="xGn"
+if(!"name" in xGn)xGn.name="xGn"
+$desc=$collectedClasses.xGn
+if($desc instanceof Array)$desc=$desc[1]
+xGn.prototype=$desc
+function TkQ(){}TkQ.builtin$cls="TkQ"
+if(!"name" in TkQ)TkQ.name="TkQ"
+$desc=$collectedClasses.TkQ
+if($desc instanceof Array)$desc=$desc[1]
+TkQ.prototype=$desc
+function VWk(){}VWk.builtin$cls="VWk"
+if(!"name" in VWk)VWk.name="VWk"
+$desc=$collectedClasses.VWk
+if($desc instanceof Array)$desc=$desc[1]
+VWk.prototype=$desc
+function ZKG(){}ZKG.builtin$cls="ZKG"
+if(!"name" in ZKG)ZKG.name="ZKG"
+$desc=$collectedClasses.ZKG
+if($desc instanceof Array)$desc=$desc[1]
+ZKG.prototype=$desc
+function DHb(){}DHb.builtin$cls="DHb"
+if(!"name" in DHb)DHb.name="DHb"
+$desc=$collectedClasses.DHb
+if($desc instanceof Array)$desc=$desc[1]
+DHb.prototype=$desc
+function w6W(){}w6W.builtin$cls="w6W"
+if(!"name" in w6W)w6W.name="w6W"
+$desc=$collectedClasses.w6W
+if($desc instanceof Array)$desc=$desc[1]
+w6W.prototype=$desc
+function Hna(){}Hna.builtin$cls="Hna"
+if(!"name" in Hna)Hna.name="Hna"
+$desc=$collectedClasses.Hna
+if($desc instanceof Array)$desc=$desc[1]
+Hna.prototype=$desc
+function z9g(){}z9g.builtin$cls="z9g"
+if(!"name" in z9g)z9g.name="z9g"
+$desc=$collectedClasses.z9g
+if($desc instanceof Array)$desc=$desc[1]
+z9g.prototype=$desc
+function G8(){}G8.builtin$cls="G8"
+if(!"name" in G8)G8.name="G8"
+$desc=$collectedClasses.G8
+if($desc instanceof Array)$desc=$desc[1]
+G8.prototype=$desc
+function UZ(){}UZ.builtin$cls="UZ"
+if(!"name" in UZ)UZ.name="UZ"
+$desc=$collectedClasses.UZ
+if($desc instanceof Array)$desc=$desc[1]
+UZ.prototype=$desc
+function Fv(FT,VJ,Ai,tH,VJ,Ai,VJ,Ai,ZI,uN,z3,TQ,Vk,Ye,mT,KM){this.FT=FT
+this.VJ=VJ
+this.Ai=Ai
+this.tH=tH
+this.VJ=VJ
+this.Ai=Ai
+this.VJ=VJ
+this.Ai=Ai
+this.ZI=ZI
+this.uN=uN
+this.z3=z3
+this.TQ=TQ
+this.Vk=Vk
+this.Ye=Ye
+this.mT=mT
+this.KM=KM}Fv.builtin$cls="Fv"
+if(!"name" in Fv)Fv.name="Fv"
+$desc=$collectedClasses.Fv
+if($desc instanceof Array)$desc=$desc[1]
+Fv.prototype=$desc
+Fv.prototype.gFT=function(receiver){return receiver.FT}
+Fv.prototype.gFT.$reflectable=1
+Fv.prototype.sFT=function(receiver,v){return receiver.FT=v}
+Fv.prototype.sFT.$reflectable=1
+function WZ(){}WZ.builtin$cls="WZ"
+if(!"name" in WZ)WZ.name="WZ"
+$desc=$collectedClasses.WZ
+if($desc instanceof Array)$desc=$desc[1]
+WZ.prototype=$desc
+function I3(Py,hO,VJ,Ai,tH,VJ,Ai,VJ,Ai,ZI,uN,z3,TQ,Vk,Ye,mT,KM){this.Py=Py
+this.hO=hO
+this.VJ=VJ
+this.Ai=Ai
+this.tH=tH
+this.VJ=VJ
+this.Ai=Ai
+this.VJ=VJ
+this.Ai=Ai
+this.ZI=ZI
+this.uN=uN
+this.z3=z3
+this.TQ=TQ
+this.Vk=Vk
+this.Ye=Ye
+this.mT=mT
+this.KM=KM}I3.builtin$cls="I3"
+if(!"name" in I3)I3.name="I3"
+$desc=$collectedClasses.I3
+if($desc instanceof Array)$desc=$desc[1]
+I3.prototype=$desc
+I3.prototype.gPy=function(receiver){return receiver.Py}
+I3.prototype.gPy.$reflectable=1
+I3.prototype.sPy=function(receiver,v){return receiver.Py=v}
+I3.prototype.sPy.$reflectable=1
+I3.prototype.ghO=function(receiver){return receiver.hO}
+I3.prototype.ghO.$reflectable=1
+I3.prototype.shO=function(receiver,v){return receiver.hO=v}
+I3.prototype.shO.$reflectable=1
+function pv(){}pv.builtin$cls="pv"
+if(!"name" in pv)pv.name="pv"
+$desc=$collectedClasses.pv
+if($desc instanceof Array)$desc=$desc[1]
+pv.prototype=$desc
+function qr(Lf,VJ,Ai,tH,VJ,Ai,VJ,Ai,ZI,uN,z3,TQ,Vk,Ye,mT,KM){this.Lf=Lf
+this.VJ=VJ
+this.Ai=Ai
+this.tH=tH
+this.VJ=VJ
+this.Ai=Ai
+this.VJ=VJ
+this.Ai=Ai
+this.ZI=ZI
+this.uN=uN
+this.z3=z3
+this.TQ=TQ
+this.Vk=Vk
+this.Ye=Ye
+this.mT=mT
+this.KM=KM}qr.builtin$cls="qr"
+if(!"name" in qr)qr.name="qr"
+$desc=$collectedClasses.qr
+if($desc instanceof Array)$desc=$desc[1]
+qr.prototype=$desc
+qr.prototype.gLf=function(receiver){return receiver.Lf}
+qr.prototype.gLf.$reflectable=1
+qr.prototype.sLf=function(receiver,v){return receiver.Lf=v}
+qr.prototype.sLf.$reflectable=1
+function Vfx(){}Vfx.builtin$cls="Vfx"
+if(!"name" in Vfx)Vfx.name="Vfx"
+$desc=$collectedClasses.Vfx
+if($desc instanceof Array)$desc=$desc[1]
+Vfx.prototype=$desc
+function Gk(vt,VJ,Ai,tH,VJ,Ai,VJ,Ai,ZI,uN,z3,TQ,Vk,Ye,mT,KM){this.vt=vt
+this.VJ=VJ
+this.Ai=Ai
+this.tH=tH
+this.VJ=VJ
+this.Ai=Ai
+this.VJ=VJ
+this.Ai=Ai
+this.ZI=ZI
+this.uN=uN
+this.z3=z3
+this.TQ=TQ
+this.Vk=Vk
+this.Ye=Ye
+this.mT=mT
+this.KM=KM}Gk.builtin$cls="Gk"
+if(!"name" in Gk)Gk.name="Gk"
+$desc=$collectedClasses.Gk
+if($desc instanceof Array)$desc=$desc[1]
+Gk.prototype=$desc
+Gk.prototype.gvt=function(receiver){return receiver.vt}
+Gk.prototype.gvt.$reflectable=1
+Gk.prototype.svt=function(receiver,v){return receiver.vt=v}
+Gk.prototype.svt.$reflectable=1
+function Dsd(){}Dsd.builtin$cls="Dsd"
+if(!"name" in Dsd)Dsd.name="Dsd"
+$desc=$collectedClasses.Dsd
+if($desc instanceof Array)$desc=$desc[1]
+Dsd.prototype=$desc
+function Ds(ql,VJ,Ai,tH,VJ,Ai,VJ,Ai,ZI,uN,z3,TQ,Vk,Ye,mT,KM){this.ql=ql
+this.VJ=VJ
+this.Ai=Ai
+this.tH=tH
+this.VJ=VJ
+this.Ai=Ai
+this.VJ=VJ
+this.Ai=Ai
+this.ZI=ZI
+this.uN=uN
+this.z3=z3
+this.TQ=TQ
+this.Vk=Vk
+this.Ye=Ye
+this.mT=mT
+this.KM=KM}Ds.builtin$cls="Ds"
+if(!"name" in Ds)Ds.name="Ds"
+$desc=$collectedClasses.Ds
+if($desc instanceof Array)$desc=$desc[1]
+Ds.prototype=$desc
+Ds.prototype.gql=function(receiver){return receiver.ql}
+Ds.prototype.gql.$reflectable=1
+Ds.prototype.sql=function(receiver,v){return receiver.ql=v}
+Ds.prototype.sql.$reflectable=1
+function tuj(){}tuj.builtin$cls="tuj"
+if(!"name" in tuj)tuj.name="tuj"
+$desc=$collectedClasses.tuj
+if($desc instanceof Array)$desc=$desc[1]
+tuj.prototype=$desc
+function aI(b,c){this.b=b
+this.c=c}aI.builtin$cls="aI"
+if(!"name" in aI)aI.name="aI"
+$desc=$collectedClasses.aI
+if($desc instanceof Array)$desc=$desc[1]
+aI.prototype=$desc
+function rG(d){this.d=d}rG.builtin$cls="rG"
+if(!"name" in rG)rG.name="rG"
+$desc=$collectedClasses.rG
+if($desc instanceof Array)$desc=$desc[1]
+rG.prototype=$desc
+function yh(e){this.e=e}yh.builtin$cls="yh"
+if(!"name" in yh)yh.name="yh"
+$desc=$collectedClasses.yh
+if($desc instanceof Array)$desc=$desc[1]
+yh.prototype=$desc
+function wO(){}wO.builtin$cls="wO"
+if(!"name" in wO)wO.name="wO"
+$desc=$collectedClasses.wO
+if($desc instanceof Array)$desc=$desc[1]
+wO.prototype=$desc
+function Tm(f,g,h){this.f=f
+this.g=g
+this.h=h}Tm.builtin$cls="Tm"
+if(!"name" in Tm)Tm.name="Tm"
+$desc=$collectedClasses.Tm
+if($desc instanceof Array)$desc=$desc[1]
+Tm.prototype=$desc
+function rz(a,i){this.a=a
+this.i=i}rz.builtin$cls="rz"
+if(!"name" in rz)rz.name="rz"
+$desc=$collectedClasses.rz
+if($desc instanceof Array)$desc=$desc[1]
+rz.prototype=$desc
+function CA(a,b){this.a=a
+this.b=b}CA.builtin$cls="CA"
+if(!"name" in CA)CA.name="CA"
+$desc=$collectedClasses.CA
+if($desc instanceof Array)$desc=$desc[1]
+CA.prototype=$desc
+function YL(c){this.c=c}YL.builtin$cls="YL"
+if(!"name" in YL)YL.name="YL"
+$desc=$collectedClasses.YL
+if($desc instanceof Array)$desc=$desc[1]
+YL.prototype=$desc
+function KC(d){this.d=d}KC.builtin$cls="KC"
+if(!"name" in KC)KC.name="KC"
+$desc=$collectedClasses.KC
+if($desc instanceof Array)$desc=$desc[1]
+KC.prototype=$desc
+function xL(e,f,g,h){this.e=e
+this.f=f
+this.g=g
+this.h=h}xL.builtin$cls="xL"
+if(!"name" in xL)xL.name="xL"
+$desc=$collectedClasses.xL
+if($desc instanceof Array)$desc=$desc[1]
+xL.prototype=$desc
+function As(){}As.builtin$cls="As"
+if(!"name" in As)As.name="As"
+$desc=$collectedClasses.As
+if($desc instanceof Array)$desc=$desc[1]
+As.prototype=$desc
+function GE(a){this.a=a}GE.builtin$cls="GE"
+if(!"name" in GE)GE.name="GE"
+$desc=$collectedClasses.GE
+if($desc instanceof Array)$desc=$desc[1]
+GE.prototype=$desc
+function pR(iK,VJ,Ai,tH,VJ,Ai,VJ,Ai,ZI,uN,z3,TQ,Vk,Ye,mT,KM){this.iK=iK
+this.VJ=VJ
+this.Ai=Ai
+this.tH=tH
+this.VJ=VJ
+this.Ai=Ai
+this.VJ=VJ
+this.Ai=Ai
+this.ZI=ZI
+this.uN=uN
+this.z3=z3
+this.TQ=TQ
+this.Vk=Vk
+this.Ye=Ye
+this.mT=mT
+this.KM=KM}pR.builtin$cls="pR"
+if(!"name" in pR)pR.name="pR"
+$desc=$collectedClasses.pR
+if($desc instanceof Array)$desc=$desc[1]
+pR.prototype=$desc
+pR.prototype.giK=function(receiver){return receiver.iK}
+pR.prototype.giK.$reflectable=1
+pR.prototype.siK=function(receiver,v){return receiver.iK=v}
+pR.prototype.siK.$reflectable=1
+function Vct(){}Vct.builtin$cls="Vct"
+if(!"name" in Vct)Vct.name="Vct"
+$desc=$collectedClasses.Vct
+if($desc instanceof Array)$desc=$desc[1]
+Vct.prototype=$desc
+function hx(Xh,VJ,Ai,tH,VJ,Ai,VJ,Ai,ZI,uN,z3,TQ,Vk,Ye,mT,KM){this.Xh=Xh
+this.VJ=VJ
+this.Ai=Ai
+this.tH=tH
+this.VJ=VJ
+this.Ai=Ai
+this.VJ=VJ
+this.Ai=Ai
+this.ZI=ZI
+this.uN=uN
+this.z3=z3
+this.TQ=TQ
+this.Vk=Vk
+this.Ye=Ye
+this.mT=mT
+this.KM=KM}hx.builtin$cls="hx"
+if(!"name" in hx)hx.name="hx"
+$desc=$collectedClasses.hx
+if($desc instanceof Array)$desc=$desc[1]
+hx.prototype=$desc
+hx.prototype.gXh=function(receiver){return receiver.Xh}
+hx.prototype.gXh.$reflectable=1
+hx.prototype.sXh=function(receiver,v){return receiver.Xh=v}
+hx.prototype.sXh.$reflectable=1
+function D13(){}D13.builtin$cls="D13"
+if(!"name" in D13)D13.name="D13"
+$desc=$collectedClasses.D13
+if($desc instanceof Array)$desc=$desc[1]
+D13.prototype=$desc
+function u7(tH,VJ,Ai,VJ,Ai,ZI,uN,z3,TQ,Vk,Ye,mT,KM){this.tH=tH
+this.VJ=VJ
+this.Ai=Ai
+this.VJ=VJ
+this.Ai=Ai
+this.ZI=ZI
+this.uN=uN
+this.z3=z3
+this.TQ=TQ
+this.Vk=Vk
+this.Ye=Ye
+this.mT=mT
+this.KM=KM}u7.builtin$cls="u7"
+if(!"name" in u7)u7.name="u7"
+$desc=$collectedClasses.u7
+if($desc instanceof Array)$desc=$desc[1]
+u7.prototype=$desc
+function St(Pw,i0,VJ,Ai,tH,VJ,Ai,VJ,Ai,ZI,uN,z3,TQ,Vk,Ye,mT,KM){this.Pw=Pw
+this.i0=i0
+this.VJ=VJ
+this.Ai=Ai
+this.tH=tH
+this.VJ=VJ
+this.Ai=Ai
+this.VJ=VJ
+this.Ai=Ai
+this.ZI=ZI
+this.uN=uN
+this.z3=z3
+this.TQ=TQ
+this.Vk=Vk
+this.Ye=Ye
+this.mT=mT
+this.KM=KM}St.builtin$cls="St"
+if(!"name" in St)St.name="St"
+$desc=$collectedClasses.St
+if($desc instanceof Array)$desc=$desc[1]
+St.prototype=$desc
+St.prototype.gPw=function(receiver){return receiver.Pw}
+St.prototype.gPw.$reflectable=1
+St.prototype.sPw=function(receiver,v){return receiver.Pw=v}
+St.prototype.sPw.$reflectable=1
+St.prototype.gi0=function(receiver){return receiver.i0}
+St.prototype.gi0.$reflectable=1
+St.prototype.si0=function(receiver,v){return receiver.i0=v}
+St.prototype.si0.$reflectable=1
+function WZq(){}WZq.builtin$cls="WZq"
+if(!"name" in WZq)WZq.name="WZq"
+$desc=$collectedClasses.WZq
+if($desc instanceof Array)$desc=$desc[1]
+WZq.prototype=$desc
+function vj(eb,kf,VJ,Ai,tH,VJ,Ai,VJ,Ai,ZI,uN,z3,TQ,Vk,Ye,mT,KM){this.eb=eb
+this.kf=kf
+this.VJ=VJ
+this.Ai=Ai
+this.tH=tH
+this.VJ=VJ
+this.Ai=Ai
+this.VJ=VJ
+this.Ai=Ai
+this.ZI=ZI
+this.uN=uN
+this.z3=z3
+this.TQ=TQ
+this.Vk=Vk
+this.Ye=Ye
+this.mT=mT
+this.KM=KM}vj.builtin$cls="vj"
+if(!"name" in vj)vj.name="vj"
+$desc=$collectedClasses.vj
+if($desc instanceof Array)$desc=$desc[1]
+vj.prototype=$desc
+vj.prototype.geb=function(receiver){return receiver.eb}
+vj.prototype.geb.$reflectable=1
+vj.prototype.seb=function(receiver,v){return receiver.eb=v}
+vj.prototype.seb.$reflectable=1
+vj.prototype.gkf=function(receiver){return receiver.kf}
+vj.prototype.gkf.$reflectable=1
+vj.prototype.skf=function(receiver,v){return receiver.kf=v}
+vj.prototype.skf.$reflectable=1
+function pva(){}pva.builtin$cls="pva"
+if(!"name" in pva)pva.name="pva"
+$desc=$collectedClasses.pva
+if($desc instanceof Array)$desc=$desc[1]
+pva.prototype=$desc
+function CX(iI,VJ,Ai,tH,VJ,Ai,VJ,Ai,ZI,uN,z3,TQ,Vk,Ye,mT,KM){this.iI=iI
+this.VJ=VJ
+this.Ai=Ai
+this.tH=tH
+this.VJ=VJ
+this.Ai=Ai
+this.VJ=VJ
+this.Ai=Ai
+this.ZI=ZI
+this.uN=uN
+this.z3=z3
+this.TQ=TQ
+this.Vk=Vk
+this.Ye=Ye
+this.mT=mT
+this.KM=KM}CX.builtin$cls="CX"
+if(!"name" in CX)CX.name="CX"
+$desc=$collectedClasses.CX
+if($desc instanceof Array)$desc=$desc[1]
+CX.prototype=$desc
+CX.prototype.giI=function(receiver){return receiver.iI}
+CX.prototype.giI.$reflectable=1
+CX.prototype.siI=function(receiver,v){return receiver.iI=v}
+CX.prototype.siI.$reflectable=1
+function cda(){}cda.builtin$cls="cda"
+if(!"name" in cda)cda.name="cda"
+$desc=$collectedClasses.cda
+if($desc instanceof Array)$desc=$desc[1]
+cda.prototype=$desc
+function TJ(oc,eT,yz,Cj,wd,Gs){this.oc=oc
+this.eT=eT
+this.yz=yz
+this.Cj=Cj
+this.wd=wd
+this.Gs=Gs}TJ.builtin$cls="TJ"
+if(!"name" in TJ)TJ.name="TJ"
+$desc=$collectedClasses.TJ
+if($desc instanceof Array)$desc=$desc[1]
+TJ.prototype=$desc
+TJ.prototype.goc=function(receiver){return this.oc}
+TJ.prototype.geT=function(receiver){return this.eT}
+TJ.prototype.gCj=function(receiver){return this.Cj}
+function dG(a){this.a=a}dG.builtin$cls="dG"
+if(!"name" in dG)dG.name="dG"
+$desc=$collectedClasses.dG
+if($desc instanceof Array)$desc=$desc[1]
+dG.prototype=$desc
+function Ng(oc,P){this.oc=oc
+this.P=P}Ng.builtin$cls="Ng"
+if(!"name" in Ng)Ng.name="Ng"
+$desc=$collectedClasses.Ng
+if($desc instanceof Array)$desc=$desc[1]
+Ng.prototype=$desc
+Ng.prototype.goc=function(receiver){return this.oc}
+Ng.prototype.gP=function(receiver){return this.P}
+function HV(OR,G1,iJ,Fl,O0,kc,I4){this.OR=OR
+this.G1=G1
+this.iJ=iJ
+this.Fl=Fl
+this.O0=O0
+this.kc=kc
+this.I4=I4}HV.builtin$cls="HV"
+if(!"name" in HV)HV.name="HV"
+$desc=$collectedClasses.HV
+if($desc instanceof Array)$desc=$desc[1]
+HV.prototype=$desc
+HV.prototype.gOR=function(){return this.OR}
+HV.prototype.gG1=function(receiver){return this.G1}
+HV.prototype.gkc=function(receiver){return this.kc}
+HV.prototype.gI4=function(){return this.I4}
+function Nh(XB,tH,VJ,Ai,VJ,Ai,ZI,uN,z3,TQ,Vk,Ye,mT,KM){this.XB=XB
+this.tH=tH
+this.VJ=VJ
+this.Ai=Ai
+this.VJ=VJ
+this.Ai=Ai
+this.ZI=ZI
+this.uN=uN
+this.z3=z3
+this.TQ=TQ
+this.Vk=Vk
+this.Ye=Ye
+this.mT=mT
+this.KM=KM}Nh.builtin$cls="Nh"
+if(!"name" in Nh)Nh.name="Nh"
+$desc=$collectedClasses.Nh
+if($desc instanceof Array)$desc=$desc[1]
+Nh.prototype=$desc
+Nh.prototype.gXB=function(receiver){return receiver.XB}
+Nh.prototype.gXB.$reflectable=1
+Nh.prototype.sXB=function(receiver,v){return receiver.XB=v}
+Nh.prototype.sXB.$reflectable=1
+function fA(Kr,Jt){this.Kr=Kr
+this.Jt=Jt}fA.builtin$cls="fA"
+if(!"name" in fA)fA.name="fA"
+$desc=$collectedClasses.fA
+if($desc instanceof Array)$desc=$desc[1]
+fA.prototype=$desc
+function tz(){}tz.builtin$cls="tz"
+if(!"name" in tz)tz.name="tz"
+$desc=$collectedClasses.tz
+if($desc instanceof Array)$desc=$desc[1]
+tz.prototype=$desc
+function jR(oc){this.oc=oc}jR.builtin$cls="jR"
+if(!"name" in jR)jR.name="jR"
+$desc=$collectedClasses.jR
+if($desc instanceof Array)$desc=$desc[1]
+jR.prototype=$desc
+jR.prototype.goc=function(receiver){return this.oc}
+function PO(){}PO.builtin$cls="PO"
+if(!"name" in PO)PO.name="PO"
+$desc=$collectedClasses.PO
+if($desc instanceof Array)$desc=$desc[1]
+PO.prototype=$desc
+function c5(){}c5.builtin$cls="c5"
+if(!"name" in c5)c5.name="c5"
+$desc=$collectedClasses.c5
+if($desc instanceof Array)$desc=$desc[1]
+c5.prototype=$desc
+function ih(tH,VJ,Ai,VJ,Ai,ZI,uN,z3,TQ,Vk,Ye,mT,KM){this.tH=tH
+this.VJ=VJ
+this.Ai=Ai
+this.VJ=VJ
+this.Ai=Ai
+this.ZI=ZI
+this.uN=uN
+this.z3=z3
+this.TQ=TQ
+this.Vk=Vk
+this.Ye=Ye
+this.mT=mT
+this.KM=KM}ih.builtin$cls="ih"
+if(!"name" in ih)ih.name="ih"
+$desc=$collectedClasses.ih
+if($desc instanceof Array)$desc=$desc[1]
+ih.prototype=$desc
+function mL(Z6,lw,nI,VJ,Ai){this.Z6=Z6
+this.lw=lw
+this.nI=nI
+this.VJ=VJ
+this.Ai=Ai}mL.builtin$cls="mL"
+if(!"name" in mL)mL.name="mL"
+$desc=$collectedClasses.mL
+if($desc instanceof Array)$desc=$desc[1]
+mL.prototype=$desc
+mL.prototype.gZ6=function(){return this.Z6}
+mL.prototype.gZ6.$reflectable=1
+mL.prototype.glw=function(){return this.lw}
+mL.prototype.glw.$reflectable=1
+mL.prototype.gnI=function(){return this.nI}
+mL.prototype.gnI.$reflectable=1
+function bv(nk,SS,XR,VJ,Ai){this.nk=nk
+this.SS=SS
+this.XR=XR
+this.VJ=VJ
+this.Ai=Ai}bv.builtin$cls="bv"
+if(!"name" in bv)bv.name="bv"
+$desc=$collectedClasses.bv
+if($desc instanceof Array)$desc=$desc[1]
+bv.prototype=$desc
+bv.prototype.gXR=function(){return this.XR}
+bv.prototype.gXR.$reflectable=1
+function pt(JR,i2,VJ,Ai){this.JR=JR
+this.i2=i2
+this.VJ=VJ
+this.Ai=Ai}pt.builtin$cls="pt"
+if(!"name" in pt)pt.name="pt"
+$desc=$collectedClasses.pt
+if($desc instanceof Array)$desc=$desc[1]
+pt.prototype=$desc
+pt.prototype.sJR=function(v){return this.JR=v}
+pt.prototype.gi2=function(){return this.i2}
+pt.prototype.gi2.$reflectable=1
+function Zd(a){this.a=a}Zd.builtin$cls="Zd"
+if(!"name" in Zd)Zd.name="Zd"
+$desc=$collectedClasses.Zd
+if($desc instanceof Array)$desc=$desc[1]
+Zd.prototype=$desc
+function dY(a){this.a=a}dY.builtin$cls="dY"
+if(!"name" in dY)dY.name="dY"
+$desc=$collectedClasses.dY
+if($desc instanceof Array)$desc=$desc[1]
+dY.prototype=$desc
+function vY(a,b){this.a=a
+this.b=b}vY.builtin$cls="vY"
+if(!"name" in vY)vY.name="vY"
+$desc=$collectedClasses.vY
+if($desc instanceof Array)$desc=$desc[1]
+vY.prototype=$desc
+function dS(c){this.c=c}dS.builtin$cls="dS"
+if(!"name" in dS)dS.name="dS"
+$desc=$collectedClasses.dS
+if($desc instanceof Array)$desc=$desc[1]
+dS.prototype=$desc
+function ZW(d){this.d=d}ZW.builtin$cls="ZW"
+if(!"name" in ZW)ZW.name="ZW"
+$desc=$collectedClasses.ZW
+if($desc instanceof Array)$desc=$desc[1]
+ZW.prototype=$desc
+function dZ(JR,IT,Jj,VJ,Ai){this.JR=JR
+this.IT=IT
+this.Jj=Jj
+this.VJ=VJ
+this.Ai=Ai}dZ.builtin$cls="dZ"
+if(!"name" in dZ)dZ.name="dZ"
+$desc=$collectedClasses.dZ
+if($desc instanceof Array)$desc=$desc[1]
+dZ.prototype=$desc
+dZ.prototype.sJR=function(v){return this.JR=v}
+function Qe(a){this.a=a}Qe.builtin$cls="Qe"
+if(!"name" in Qe)Qe.name="Qe"
+$desc=$collectedClasses.Qe
+if($desc instanceof Array)$desc=$desc[1]
+Qe.prototype=$desc
+function Nu(JR,e0){this.JR=JR
+this.e0=e0}Nu.builtin$cls="Nu"
+if(!"name" in Nu)Nu.name="Nu"
+$desc=$collectedClasses.Nu
+if($desc instanceof Array)$desc=$desc[1]
+Nu.prototype=$desc
+Nu.prototype.sJR=function(v){return this.JR=v}
+Nu.prototype.se0=function(v){return this.e0=v}
+function pF(a,b){this.a=a
+this.b=b}pF.builtin$cls="pF"
+if(!"name" in pF)pF.name="pF"
+$desc=$collectedClasses.pF
+if($desc instanceof Array)$desc=$desc[1]
+pF.prototype=$desc
+function Ha(c){this.c=c}Ha.builtin$cls="Ha"
+if(!"name" in Ha)Ha.name="Ha"
+$desc=$collectedClasses.Ha
+if($desc instanceof Array)$desc=$desc[1]
+Ha.prototype=$desc
+function nu(d){this.d=d}nu.builtin$cls="nu"
+if(!"name" in nu)nu.name="nu"
+$desc=$collectedClasses.nu
+if($desc instanceof Array)$desc=$desc[1]
+nu.prototype=$desc
+function be(a,b){this.a=a
+this.b=b}be.builtin$cls="be"
+if(!"name" in be)be.name="be"
+$desc=$collectedClasses.be
+if($desc instanceof Array)$desc=$desc[1]
+be.prototype=$desc
+function Pg(c){this.c=c}Pg.builtin$cls="Pg"
+if(!"name" in Pg)Pg.name="Pg"
+$desc=$collectedClasses.Pg
+if($desc instanceof Array)$desc=$desc[1]
+Pg.prototype=$desc
+function jI(JR,e0,oJ,vm,VJ,Ai){this.JR=JR
+this.e0=e0
+this.oJ=oJ
+this.vm=vm
+this.VJ=VJ
+this.Ai=Ai}jI.builtin$cls="jI"
+if(!"name" in jI)jI.name="jI"
+$desc=$collectedClasses.jI
+if($desc instanceof Array)$desc=$desc[1]
+jI.prototype=$desc
+function Rb(Hr,Oy,JR,e0,oJ,vm,VJ,Ai){this.Hr=Hr
+this.Oy=Oy
+this.JR=JR
+this.e0=e0
+this.oJ=oJ
+this.vm=vm
+this.VJ=VJ
+this.Ai=Ai}Rb.builtin$cls="Rb"
+if(!"name" in Rb)Rb.name="Rb"
+$desc=$collectedClasses.Rb
+if($desc instanceof Array)$desc=$desc[1]
+Rb.prototype=$desc
+function Zw(Rd,n7,LA,Vg,VJ,Ai){this.Rd=Rd
+this.n7=n7
+this.LA=LA
+this.Vg=Vg
+this.VJ=VJ
+this.Ai=Ai}Zw.builtin$cls="Zw"
+if(!"name" in Zw)Zw.name="Zw"
+$desc=$collectedClasses.Zw
+if($desc instanceof Array)$desc=$desc[1]
+Zw.prototype=$desc
+Zw.prototype.gLA=function(receiver){return this.LA}
+Zw.prototype.gLA.$reflectable=1
+function Pf(WF,uM,ZQ,VJ,Ai){this.WF=WF
+this.uM=uM
+this.ZQ=ZQ
+this.VJ=VJ
+this.Ai=Ai}Pf.builtin$cls="Pf"
+if(!"name" in Pf)Pf.name="Pf"
+$desc=$collectedClasses.Pf
+if($desc instanceof Array)$desc=$desc[1]
+Pf.prototype=$desc
+function F1(k5,VJ,Ai,tH,VJ,Ai,VJ,Ai,ZI,uN,z3,TQ,Vk,Ye,mT,KM){this.k5=k5
+this.VJ=VJ
+this.Ai=Ai
+this.tH=tH
+this.VJ=VJ
+this.Ai=Ai
+this.VJ=VJ
+this.Ai=Ai
+this.ZI=ZI
+this.uN=uN
+this.z3=z3
+this.TQ=TQ
+this.Vk=Vk
+this.Ye=Ye
+this.mT=mT
+this.KM=KM}F1.builtin$cls="F1"
+if(!"name" in F1)F1.name="F1"
+$desc=$collectedClasses.F1
+if($desc instanceof Array)$desc=$desc[1]
+F1.prototype=$desc
+F1.prototype.gk5=function(receiver){return receiver.k5}
+F1.prototype.gk5.$reflectable=1
+F1.prototype.sk5=function(receiver,v){return receiver.k5=v}
+F1.prototype.sk5.$reflectable=1
+function waa(){}waa.builtin$cls="waa"
+if(!"name" in waa)waa.name="waa"
+$desc=$collectedClasses.waa
+if($desc instanceof Array)$desc=$desc[1]
+waa.prototype=$desc
+function uL(tH,VJ,Ai,VJ,Ai,ZI,uN,z3,TQ,Vk,Ye,mT,KM){this.tH=tH
+this.VJ=VJ
+this.Ai=Ai
+this.VJ=VJ
+this.Ai=Ai
+this.ZI=ZI
+this.uN=uN
+this.z3=z3
+this.TQ=TQ
+this.Vk=Vk
+this.Ye=Ye
+this.mT=mT
+this.KM=KM}uL.builtin$cls="uL"
+if(!"name" in uL)uL.name="uL"
+$desc=$collectedClasses.uL
+if($desc instanceof Array)$desc=$desc[1]
+uL.prototype=$desc
+uL.prototype.gtH=function(receiver){return receiver.tH}
+uL.prototype.gtH.$reflectable=1
+uL.prototype.stH=function(receiver,v){return receiver.tH=v}
+uL.prototype.stH.$reflectable=1
+function Nr(){}Nr.builtin$cls="Nr"
+if(!"name" in Nr)Nr.name="Nr"
+$desc=$collectedClasses.Nr
+if($desc instanceof Array)$desc=$desc[1]
+Nr.prototype=$desc
+function Pi(){}Pi.builtin$cls="Pi"
+if(!"name" in Pi)Pi.name="Pi"
+$desc=$collectedClasses.Pi
+if($desc instanceof Array)$desc=$desc[1]
+Pi.prototype=$desc
+function yj(){}yj.builtin$cls="yj"
+if(!"name" in yj)yj.name="yj"
+$desc=$collectedClasses.yj
+if($desc instanceof Array)$desc=$desc[1]
+yj.prototype=$desc
+function qI(WA,oc,jL,zZ){this.WA=WA
+this.oc=oc
+this.jL=jL
+this.zZ=zZ}qI.builtin$cls="qI"
+if(!"name" in qI)qI.name="qI"
+$desc=$collectedClasses.qI
+if($desc instanceof Array)$desc=$desc[1]
+qI.prototype=$desc
+qI.prototype.gWA=function(){return this.WA}
+qI.prototype.goc=function(receiver){return this.oc}
+qI.prototype.gjL=function(receiver){return this.jL}
+qI.prototype.gzZ=function(receiver){return this.zZ}
+function J3(b9,kK,Sv,rk,YX,B6,VJ,Ai){this.b9=b9
+this.kK=kK
+this.Sv=Sv
+this.rk=rk
+this.YX=YX
+this.B6=B6
+this.VJ=VJ
+this.Ai=Ai}J3.builtin$cls="J3"
+if(!"name" in J3)J3.name="J3"
+$desc=$collectedClasses.J3
+if($desc instanceof Array)$desc=$desc[1]
+J3.prototype=$desc
+function E5(){}E5.builtin$cls="E5"
+if(!"name" in E5)E5.name="E5"
+$desc=$collectedClasses.E5
+if($desc instanceof Array)$desc=$desc[1]
+E5.prototype=$desc
+function o5(a){this.a=a}o5.builtin$cls="o5"
+if(!"name" in o5)o5.name="o5"
+$desc=$collectedClasses.o5
+if($desc instanceof Array)$desc=$desc[1]
+o5.prototype=$desc
+function b5(a){this.a=a}b5.builtin$cls="b5"
+if(!"name" in b5)b5.name="b5"
+$desc=$collectedClasses.b5
+if($desc instanceof Array)$desc=$desc[1]
+b5.prototype=$desc
+function zI(b){this.b=b}zI.builtin$cls="zI"
+if(!"name" in zI)zI.name="zI"
+$desc=$collectedClasses.zI
+if($desc instanceof Array)$desc=$desc[1]
+zI.prototype=$desc
+function Zb(c,d,e,f){this.c=c
+this.d=d
+this.e=e
+this.f=f}Zb.builtin$cls="Zb"
+if(!"name" in Zb)Zb.name="Zb"
+$desc=$collectedClasses.Zb
+if($desc instanceof Array)$desc=$desc[1]
+Zb.prototype=$desc
+function id(g){this.g=g}id.builtin$cls="id"
+if(!"name" in id)id.name="id"
+$desc=$collectedClasses.id
+if($desc instanceof Array)$desc=$desc[1]
+id.prototype=$desc
+function iV(h,i,j,k){this.h=h
+this.i=i
+this.j=j
+this.k=k}iV.builtin$cls="iV"
+if(!"name" in iV)iV.name="iV"
+$desc=$collectedClasses.iV
+if($desc instanceof Array)$desc=$desc[1]
+iV.prototype=$desc
+function W4(WA,Uj,Il,jr,dM){this.WA=WA
+this.Uj=Uj
+this.Il=Il
+this.jr=jr
+this.dM=dM}W4.builtin$cls="W4"
+if(!"name" in W4)W4.name="W4"
+$desc=$collectedClasses.W4
+if($desc instanceof Array)$desc=$desc[1]
+W4.prototype=$desc
+W4.prototype.gWA=function(){return this.WA}
+W4.prototype.gIl=function(){return this.Il}
+function Fa(){}Fa.builtin$cls="Fa"
+if(!"name" in Fa)Fa.name="Fa"
+$desc=$collectedClasses.Fa
+if($desc instanceof Array)$desc=$desc[1]
+Fa.prototype=$desc
+function x9(){}x9.builtin$cls="x9"
+if(!"name" in x9)x9.name="x9"
+$desc=$collectedClasses.x9
+if($desc instanceof Array)$desc=$desc[1]
+x9.prototype=$desc
+function d3(){}d3.builtin$cls="d3"
+if(!"name" in d3)d3.name="d3"
+$desc=$collectedClasses.d3
+if($desc instanceof Array)$desc=$desc[1]
+d3.prototype=$desc
+function X6(a,b){this.a=a
+this.b=b}X6.builtin$cls="X6"
+if(!"name" in X6)X6.name="X6"
+$desc=$collectedClasses.X6
+if($desc instanceof Array)$desc=$desc[1]
+X6.prototype=$desc
+function xh(){}xh.builtin$cls="xh"
+if(!"name" in xh)xh.name="xh"
+$desc=$collectedClasses.xh
+if($desc instanceof Array)$desc=$desc[1]
+xh.prototype=$desc
+function wn(b3,xg,h3,VJ,Ai){this.b3=b3
+this.xg=xg
+this.h3=h3
+this.VJ=VJ
+this.Ai=Ai}wn.builtin$cls="wn"
+if(!"name" in wn)wn.name="wn"
+$desc=$collectedClasses.wn
+if($desc instanceof Array)$desc=$desc[1]
+wn.prototype=$desc
+function uF(){}uF.builtin$cls="uF"
+if(!"name" in uF)uF.name="uF"
+$desc=$collectedClasses.uF
+if($desc instanceof Array)$desc=$desc[1]
+uF.prototype=$desc
+function cj(a){this.a=a}cj.builtin$cls="cj"
+if(!"name" in cj)cj.name="cj"
+$desc=$collectedClasses.cj
+if($desc instanceof Array)$desc=$desc[1]
+cj.prototype=$desc
+function HA(G3,jL,zZ,JD,dr){this.G3=G3
+this.jL=jL
+this.zZ=zZ
+this.JD=JD
+this.dr=dr}HA.builtin$cls="HA"
+if(!"name" in HA)HA.name="HA"
+$desc=$collectedClasses.HA
+if($desc instanceof Array)$desc=$desc[1]
+HA.prototype=$desc
+HA.prototype.gG3=function(receiver){return this.G3}
+HA.prototype.gjL=function(receiver){return this.jL}
+HA.prototype.gzZ=function(receiver){return this.zZ}
+function br(Zp,VJ,Ai){this.Zp=Zp
+this.VJ=VJ
+this.Ai=Ai}br.builtin$cls="br"
+if(!"name" in br)br.name="br"
+$desc=$collectedClasses.br
+if($desc instanceof Array)$desc=$desc[1]
+br.prototype=$desc
+function zT(a){this.a=a}zT.builtin$cls="zT"
+if(!"name" in zT)zT.name="zT"
+$desc=$collectedClasses.zT
+if($desc instanceof Array)$desc=$desc[1]
+zT.prototype=$desc
+function D7(Ii,YB,BK,kN,cs,cT,VJ,Ai){this.Ii=Ii
+this.YB=YB
+this.BK=BK
+this.kN=kN
+this.cs=cs
+this.cT=cT
+this.VJ=VJ
+this.Ai=Ai}D7.builtin$cls="D7"
+if(!"name" in D7)D7.name="D7"
+$desc=$collectedClasses.D7
+if($desc instanceof Array)$desc=$desc[1]
+D7.prototype=$desc
+D7.prototype.gIi=function(receiver){return this.Ii}
+function qL(){}qL.builtin$cls="qL"
+if(!"name" in qL)qL.name="qL"
+$desc=$collectedClasses.qL
+if($desc instanceof Array)$desc=$desc[1]
+qL.prototype=$desc
+function C4(a,b,c){this.a=a
+this.b=b
+this.c=c}C4.builtin$cls="C4"
+if(!"name" in C4)C4.name="C4"
+$desc=$collectedClasses.C4
+if($desc instanceof Array)$desc=$desc[1]
+C4.prototype=$desc
+function l9(d,e,f){this.d=d
+this.e=e
+this.f=f}l9.builtin$cls="l9"
+if(!"name" in l9)l9.name="l9"
+$desc=$collectedClasses.l9
+if($desc instanceof Array)$desc=$desc[1]
+l9.prototype=$desc
+function lP(){}lP.builtin$cls="lP"
+if(!"name" in lP)lP.name="lP"
+$desc=$collectedClasses.lP
+if($desc instanceof Array)$desc=$desc[1]
+lP.prototype=$desc
+function km(a){this.a=a}km.builtin$cls="km"
+if(!"name" in km)km.name="km"
+$desc=$collectedClasses.km
+if($desc instanceof Array)$desc=$desc[1]
+km.prototype=$desc
+function Qt(){}Qt.builtin$cls="Qt"
+if(!"name" in Qt)Qt.name="Qt"
+$desc=$collectedClasses.Qt
+if($desc instanceof Array)$desc=$desc[1]
+Qt.prototype=$desc
+function Dk(S,SF){this.S=S
+this.SF=SF}Dk.builtin$cls="Dk"
+if(!"name" in Dk)Dk.name="Dk"
+$desc=$collectedClasses.Dk
+if($desc instanceof Array)$desc=$desc[1]
+Dk.prototype=$desc
+function A0(){}A0.builtin$cls="A0"
+if(!"name" in A0)A0.name="A0"
+$desc=$collectedClasses.A0
+if($desc instanceof Array)$desc=$desc[1]
+A0.prototype=$desc
+function rm(){}rm.builtin$cls="rm"
+if(!"name" in rm)rm.name="rm"
+$desc=$collectedClasses.rm
+if($desc instanceof Array)$desc=$desc[1]
+rm.prototype=$desc
+function eY(){}eY.builtin$cls="eY"
+if(!"name" in eY)eY.name="eY"
+$desc=$collectedClasses.eY
+if($desc instanceof Array)$desc=$desc[1]
+eY.prototype=$desc
+function OO(TL){this.TL=TL}OO.builtin$cls="OO"
+if(!"name" in OO)OO.name="OO"
+$desc=$collectedClasses.OO
+if($desc instanceof Array)$desc=$desc[1]
+OO.prototype=$desc
+OO.prototype.gTL=function(){return this.TL}
+function BE(oc,mI,DF,nK,Ew,TL){this.oc=oc
+this.mI=mI
+this.DF=DF
+this.nK=nK
+this.Ew=Ew
+this.TL=TL}BE.builtin$cls="BE"
+if(!"name" in BE)BE.name="BE"
+$desc=$collectedClasses.BE
+if($desc instanceof Array)$desc=$desc[1]
+BE.prototype=$desc
+BE.prototype.goc=function(receiver){return this.oc}
+BE.prototype.gmI=function(){return this.mI}
+BE.prototype.gDF=function(){return this.DF}
+BE.prototype.gnK=function(){return this.nK}
+BE.prototype.gEw=function(){return this.Ew}
+function Qb(oc,mI,DF,nK,Ew,TL){this.oc=oc
+this.mI=mI
+this.DF=DF
+this.nK=nK
+this.Ew=Ew
+this.TL=TL}Qb.builtin$cls="Qb"
+if(!"name" in Qb)Qb.name="Qb"
+$desc=$collectedClasses.Qb
+if($desc instanceof Array)$desc=$desc[1]
+Qb.prototype=$desc
+Qb.prototype.goc=function(receiver){return this.oc}
+Qb.prototype.gmI=function(){return this.mI}
+Qb.prototype.gDF=function(){return this.DF}
+Qb.prototype.gnK=function(){return this.nK}
+Qb.prototype.gEw=function(){return this.Ew}
+function xI(oc,mI,DF,nK,Ew,TL,qW){this.oc=oc
+this.mI=mI
+this.DF=DF
+this.nK=nK
+this.Ew=Ew
+this.TL=TL
+this.qW=qW}xI.builtin$cls="xI"
+if(!"name" in xI)xI.name="xI"
+$desc=$collectedClasses.xI
+if($desc instanceof Array)$desc=$desc[1]
+xI.prototype=$desc
+xI.prototype.goc=function(receiver){return this.oc}
+xI.prototype.gmI=function(){return this.mI}
+xI.prototype.gDF=function(){return this.DF}
+xI.prototype.gnK=function(){return this.nK}
+xI.prototype.gEw=function(){return this.Ew}
+xI.prototype.gTL=function(){return this.TL}
+function q1(S,SF,aA,dY,Yj){this.S=S
+this.SF=SF
+this.aA=aA
+this.dY=dY
+this.Yj=Yj}q1.builtin$cls="q1"
+if(!"name" in q1)q1.name="q1"
+$desc=$collectedClasses.q1
+if($desc instanceof Array)$desc=$desc[1]
+q1.prototype=$desc
+function Zj(){}Zj.builtin$cls="Zj"
+if(!"name" in Zj)Zj.name="Zj"
+$desc=$collectedClasses.Zj
+if($desc instanceof Array)$desc=$desc[1]
+Zj.prototype=$desc
+function XP(di,P0,ZD,S6,Dg,Q0,Hs,n4,pc,SV,EX,mn){this.di=di
+this.P0=P0
+this.ZD=ZD
+this.S6=S6
+this.Dg=Dg
+this.Q0=Q0
+this.Hs=Hs
+this.n4=n4
+this.pc=pc
+this.SV=SV
+this.EX=EX
+this.mn=mn}XP.builtin$cls="XP"
+if(!"name" in XP)XP.name="XP"
+$desc=$collectedClasses.XP
+if($desc instanceof Array)$desc=$desc[1]
+XP.prototype=$desc
+XP.prototype.gDg=function(receiver){return receiver.Dg}
+XP.prototype.gQ0=function(receiver){return receiver.Q0}
+XP.prototype.gHs=function(receiver){return receiver.Hs}
+XP.prototype.gn4=function(receiver){return receiver.n4}
+XP.prototype.gEX=function(receiver){return receiver.EX}
+function q6(){}q6.builtin$cls="q6"
+if(!"name" in q6)q6.name="q6"
+$desc=$collectedClasses.q6
+if($desc instanceof Array)$desc=$desc[1]
+q6.prototype=$desc
+function CK(a){this.a=a}CK.builtin$cls="CK"
+if(!"name" in CK)CK.name="CK"
+$desc=$collectedClasses.CK
+if($desc instanceof Array)$desc=$desc[1]
+CK.prototype=$desc
+function BO(a){this.a=a}BO.builtin$cls="BO"
+if(!"name" in BO)BO.name="BO"
+$desc=$collectedClasses.BO
+if($desc instanceof Array)$desc=$desc[1]
+BO.prototype=$desc
+function ZG(){}ZG.builtin$cls="ZG"
+if(!"name" in ZG)ZG.name="ZG"
+$desc=$collectedClasses.ZG
+if($desc instanceof Array)$desc=$desc[1]
+ZG.prototype=$desc
+function Oc(a){this.a=a}Oc.builtin$cls="Oc"
+if(!"name" in Oc)Oc.name="Oc"
+$desc=$collectedClasses.Oc
+if($desc instanceof Array)$desc=$desc[1]
+Oc.prototype=$desc
+function MX(a){this.a=a}MX.builtin$cls="MX"
+if(!"name" in MX)MX.name="MX"
+$desc=$collectedClasses.MX
+if($desc instanceof Array)$desc=$desc[1]
+MX.prototype=$desc
+function w12(){}w12.builtin$cls="w12"
+if(!"name" in w12)w12.name="w12"
+$desc=$collectedClasses.w12
+if($desc instanceof Array)$desc=$desc[1]
+w12.prototype=$desc
+function fTP(a){this.a=a}fTP.builtin$cls="fTP"
+if(!"name" in fTP)fTP.name="fTP"
+$desc=$collectedClasses.fTP
+if($desc instanceof Array)$desc=$desc[1]
+fTP.prototype=$desc
+function yL(){}yL.builtin$cls="yL"
+if(!"name" in yL)yL.name="yL"
+$desc=$collectedClasses.yL
+if($desc instanceof Array)$desc=$desc[1]
+yL.prototype=$desc
+function dM(KM){this.KM=KM}dM.builtin$cls="dM"
+if(!"name" in dM)dM.name="dM"
+$desc=$collectedClasses.dM
+if($desc instanceof Array)$desc=$desc[1]
+dM.prototype=$desc
+dM.prototype.gKM=function(receiver){return receiver.KM}
+dM.prototype.gKM.$reflectable=1
+function Y7(wc,nn,lv,Pp){this.wc=wc
+this.nn=nn
+this.lv=lv
+this.Pp=Pp}Y7.builtin$cls="Y7"
+$desc=$collectedClasses.Y7
+if($desc instanceof Array)$desc=$desc[1]
+Y7.prototype=$desc
+function WC(a){this.a=a}WC.builtin$cls="WC"
+if(!"name" in WC)WC.name="WC"
+$desc=$collectedClasses.WC
+if($desc instanceof Array)$desc=$desc[1]
+WC.prototype=$desc
+function Xi(b){this.b=b}Xi.builtin$cls="Xi"
+if(!"name" in Xi)Xi.name="Xi"
+$desc=$collectedClasses.Xi
+if($desc instanceof Array)$desc=$desc[1]
+Xi.prototype=$desc
+function TV(){}TV.builtin$cls="TV"
+if(!"name" in TV)TV.name="TV"
+$desc=$collectedClasses.TV
+if($desc instanceof Array)$desc=$desc[1]
+TV.prototype=$desc
+function Mq(){}Mq.builtin$cls="Mq"
+if(!"name" in Mq)Mq.name="Mq"
+$desc=$collectedClasses.Mq
+if($desc instanceof Array)$desc=$desc[1]
+Mq.prototype=$desc
+function Oa(a){this.a=a}Oa.builtin$cls="Oa"
+if(!"name" in Oa)Oa.name="Oa"
+$desc=$collectedClasses.Oa
+if($desc instanceof Array)$desc=$desc[1]
+Oa.prototype=$desc
+function n1(b,c,d,e){this.b=b
+this.c=c
+this.d=d
+this.e=e}n1.builtin$cls="n1"
+if(!"name" in n1)n1.name="n1"
+$desc=$collectedClasses.n1
+if($desc instanceof Array)$desc=$desc[1]
+n1.prototype=$desc
+function xf(a,b,c){this.a=a
+this.b=b
+this.c=c}xf.builtin$cls="xf"
+if(!"name" in xf)xf.name="xf"
+$desc=$collectedClasses.xf
+if($desc instanceof Array)$desc=$desc[1]
+xf.prototype=$desc
+function L6(a,b){this.a=a
+this.b=b}L6.builtin$cls="L6"
+if(!"name" in L6)L6.name="L6"
+$desc=$collectedClasses.L6
+if($desc instanceof Array)$desc=$desc[1]
+L6.prototype=$desc
+function Rs(c,d,e){this.c=c
+this.d=d
+this.e=e}Rs.builtin$cls="Rs"
+if(!"name" in Rs)Rs.name="Rs"
+$desc=$collectedClasses.Rs
+if($desc instanceof Array)$desc=$desc[1]
+Rs.prototype=$desc
+function uJ(){}uJ.builtin$cls="uJ"
+if(!"name" in uJ)uJ.name="uJ"
+$desc=$collectedClasses.uJ
+if($desc instanceof Array)$desc=$desc[1]
+uJ.prototype=$desc
+function hm(){}hm.builtin$cls="hm"
+if(!"name" in hm)hm.name="hm"
+$desc=$collectedClasses.hm
+if($desc instanceof Array)$desc=$desc[1]
+hm.prototype=$desc
+function Ji(a){this.a=a}Ji.builtin$cls="Ji"
+if(!"name" in Ji)Ji.name="Ji"
+$desc=$collectedClasses.Ji
+if($desc instanceof Array)$desc=$desc[1]
+Ji.prototype=$desc
+function Bf(K3,Zu,Po,Ha,LO,ZY,xS,PB,eS,Ii){this.K3=K3
+this.Zu=Zu
+this.Po=Po
+this.Ha=Ha
+this.LO=LO
+this.ZY=ZY
+this.xS=xS
+this.PB=PB
+this.eS=eS
+this.Ii=Ii}Bf.builtin$cls="Bf"
+if(!"name" in Bf)Bf.name="Bf"
+$desc=$collectedClasses.Bf
+if($desc instanceof Array)$desc=$desc[1]
+Bf.prototype=$desc
+function ir(VJ,Ai,ZI,uN,z3,TQ,Vk,Ye,mT,KM){this.VJ=VJ
+this.Ai=Ai
+this.ZI=ZI
+this.uN=uN
+this.z3=z3
+this.TQ=TQ
+this.Vk=Vk
+this.Ye=Ye
+this.mT=mT
+this.KM=KM}ir.builtin$cls="ir"
+if(!"name" in ir)ir.name="ir"
+$desc=$collectedClasses.ir
+if($desc instanceof Array)$desc=$desc[1]
+ir.prototype=$desc
+function Sa(KM){this.KM=KM}Sa.builtin$cls="Sa"
+if(!"name" in Sa)Sa.name="Sa"
+$desc=$collectedClasses.Sa
+if($desc instanceof Array)$desc=$desc[1]
+Sa.prototype=$desc
+dM.prototype.gKM=function(receiver){return receiver.KM}
+dM.prototype.gKM.$reflectable=1
+function GN(){}GN.builtin$cls="GN"
+if(!"name" in GN)GN.name="GN"
+$desc=$collectedClasses.GN
+if($desc instanceof Array)$desc=$desc[1]
+GN.prototype=$desc
+function k8(jL,zZ){this.jL=jL
+this.zZ=zZ}k8.builtin$cls="k8"
+if(!"name" in k8)k8.name="k8"
+$desc=$collectedClasses.k8
+if($desc instanceof Array)$desc=$desc[1]
+k8.prototype=$desc
+k8.prototype.gjL=function(receiver){return this.jL}
+k8.prototype.gzZ=function(receiver){return this.zZ}
+k8.prototype.szZ=function(receiver,v){return this.zZ=v}
+function HJ(nF){this.nF=nF}HJ.builtin$cls="HJ"
+if(!"name" in HJ)HJ.name="HJ"
+$desc=$collectedClasses.HJ
+if($desc instanceof Array)$desc=$desc[1]
+HJ.prototype=$desc
+function S0(Ow,VC){this.Ow=Ow
+this.VC=VC}S0.builtin$cls="S0"
+if(!"name" in S0)S0.name="S0"
+$desc=$collectedClasses.S0
+if($desc instanceof Array)$desc=$desc[1]
+S0.prototype=$desc
+function V3(ns){this.ns=ns}V3.builtin$cls="V3"
+if(!"name" in V3)V3.name="V3"
+$desc=$collectedClasses.V3
+if($desc instanceof Array)$desc=$desc[1]
+V3.prototype=$desc
+function Bl(){}Bl.builtin$cls="Bl"
+if(!"name" in Bl)Bl.name="Bl"
+$desc=$collectedClasses.Bl
+if($desc instanceof Array)$desc=$desc[1]
+Bl.prototype=$desc
+function pM(){}pM.builtin$cls="pM"
+if(!"name" in pM)pM.name="pM"
+$desc=$collectedClasses.pM
+if($desc instanceof Array)$desc=$desc[1]
+pM.prototype=$desc
+function Mh(){}Mh.builtin$cls="Mh"
+if(!"name" in Mh)Mh.name="Mh"
+$desc=$collectedClasses.Mh
+if($desc instanceof Array)$desc=$desc[1]
+Mh.prototype=$desc
+function Md(){}Md.builtin$cls="Md"
+if(!"name" in Md)Md.name="Md"
+$desc=$collectedClasses.Md
+if($desc instanceof Array)$desc=$desc[1]
+Md.prototype=$desc
+function Lf(){}Lf.builtin$cls="Lf"
+if(!"name" in Lf)Lf.name="Lf"
+$desc=$collectedClasses.Lf
+if($desc instanceof Array)$desc=$desc[1]
+Lf.prototype=$desc
+function fT(){}fT.builtin$cls="fT"
+if(!"name" in fT)fT.name="fT"
+$desc=$collectedClasses.fT
+if($desc instanceof Array)$desc=$desc[1]
+fT.prototype=$desc
+function pp(){}pp.builtin$cls="pp"
+if(!"name" in pp)pp.name="pp"
+$desc=$collectedClasses.pp
+if($desc instanceof Array)$desc=$desc[1]
+pp.prototype=$desc
+function Nq(){}Nq.builtin$cls="Nq"
+if(!"name" in Nq)Nq.name="Nq"
+$desc=$collectedClasses.Nq
+if($desc instanceof Array)$desc=$desc[1]
+Nq.prototype=$desc
+function nl(){}nl.builtin$cls="nl"
+if(!"name" in nl)nl.name="nl"
+$desc=$collectedClasses.nl
+if($desc instanceof Array)$desc=$desc[1]
+nl.prototype=$desc
+function mf(a){this.a=a}mf.builtin$cls="mf"
+if(!"name" in mf)mf.name="mf"
+$desc=$collectedClasses.mf
+if($desc instanceof Array)$desc=$desc[1]
+mf.prototype=$desc
+function ej(){}ej.builtin$cls="ej"
+if(!"name" in ej)ej.name="ej"
+$desc=$collectedClasses.ej
+if($desc instanceof Array)$desc=$desc[1]
+ej.prototype=$desc
+function HK(b){this.b=b}HK.builtin$cls="HK"
+if(!"name" in HK)HK.name="HK"
+$desc=$collectedClasses.HK
+if($desc instanceof Array)$desc=$desc[1]
+HK.prototype=$desc
+function w13(){}w13.builtin$cls="w13"
+if(!"name" in w13)w13.name="w13"
+$desc=$collectedClasses.w13
+if($desc instanceof Array)$desc=$desc[1]
+w13.prototype=$desc
+function o8(a){this.a=a}o8.builtin$cls="o8"
+if(!"name" in o8)o8.name="o8"
+$desc=$collectedClasses.o8
+if($desc instanceof Array)$desc=$desc[1]
+o8.prototype=$desc
+function GL(a){this.a=a}GL.builtin$cls="GL"
+if(!"name" in GL)GL.name="GL"
+$desc=$collectedClasses.GL
+if($desc instanceof Array)$desc=$desc[1]
+GL.prototype=$desc
+function e9(){}e9.builtin$cls="e9"
+if(!"name" in e9)e9.name="e9"
+$desc=$collectedClasses.e9
+if($desc instanceof Array)$desc=$desc[1]
+e9.prototype=$desc
+function Dw(wc,nn,lv,Pp){this.wc=wc
+this.nn=nn
+this.lv=lv
+this.Pp=Pp}Dw.builtin$cls="Dw"
+$desc=$collectedClasses.Dw
+if($desc instanceof Array)$desc=$desc[1]
+Dw.prototype=$desc
+function Xy(a,b,c){this.a=a
+this.b=b
+this.c=c}Xy.builtin$cls="Xy"
+if(!"name" in Xy)Xy.name="Xy"
+$desc=$collectedClasses.Xy
+if($desc instanceof Array)$desc=$desc[1]
+Xy.prototype=$desc
+function uK(a){this.a=a}uK.builtin$cls="uK"
+if(!"name" in uK)uK.name="uK"
+$desc=$collectedClasses.uK
+if($desc instanceof Array)$desc=$desc[1]
+uK.prototype=$desc
+function mY(qc,jf,Qi,uK,VJ,Ai){this.qc=qc
+this.jf=jf
+this.Qi=Qi
+this.uK=uK
+this.VJ=VJ
+this.Ai=Ai}mY.builtin$cls="mY"
+if(!"name" in mY)mY.name="mY"
+$desc=$collectedClasses.mY
+if($desc instanceof Array)$desc=$desc[1]
+mY.prototype=$desc
+function fE(a){this.a=a}fE.builtin$cls="fE"
+if(!"name" in fE)fE.name="fE"
+$desc=$collectedClasses.fE
+if($desc instanceof Array)$desc=$desc[1]
+fE.prototype=$desc
+function mB(a,b){this.a=a
+this.b=b}mB.builtin$cls="mB"
+if(!"name" in mB)mB.name="mB"
+$desc=$collectedClasses.mB
+if($desc instanceof Array)$desc=$desc[1]
+mB.prototype=$desc
+function XF(vq,L1,VJ,Ai){this.vq=vq
+this.L1=L1
+this.VJ=VJ
+this.Ai=Ai}XF.builtin$cls="XF"
+if(!"name" in XF)XF.name="XF"
+$desc=$collectedClasses.XF
+if($desc instanceof Array)$desc=$desc[1]
+XF.prototype=$desc
+function iH(a,b){this.a=a
+this.b=b}iH.builtin$cls="iH"
+if(!"name" in iH)iH.name="iH"
+$desc=$collectedClasses.iH
+if($desc instanceof Array)$desc=$desc[1]
+iH.prototype=$desc
+function wJY(){}wJY.builtin$cls="wJY"
+if(!"name" in wJY)wJY.name="wJY"
+$desc=$collectedClasses.wJY
+if($desc instanceof Array)$desc=$desc[1]
+wJY.prototype=$desc
+function zOQ(){}zOQ.builtin$cls="zOQ"
+if(!"name" in zOQ)zOQ.name="zOQ"
+$desc=$collectedClasses.zOQ
+if($desc instanceof Array)$desc=$desc[1]
+zOQ.prototype=$desc
+function W6o(){}W6o.builtin$cls="W6o"
+if(!"name" in W6o)W6o.name="W6o"
+$desc=$collectedClasses.W6o
+if($desc instanceof Array)$desc=$desc[1]
+W6o.prototype=$desc
+function MdQ(){}MdQ.builtin$cls="MdQ"
+if(!"name" in MdQ)MdQ.name="MdQ"
+$desc=$collectedClasses.MdQ
+if($desc instanceof Array)$desc=$desc[1]
+MdQ.prototype=$desc
+function YJG(){}YJG.builtin$cls="YJG"
+if(!"name" in YJG)YJG.name="YJG"
+$desc=$collectedClasses.YJG
+if($desc instanceof Array)$desc=$desc[1]
+YJG.prototype=$desc
+function DOe(){}DOe.builtin$cls="DOe"
+if(!"name" in DOe)DOe.name="DOe"
+$desc=$collectedClasses.DOe
+if($desc instanceof Array)$desc=$desc[1]
+DOe.prototype=$desc
+function lPa(){}lPa.builtin$cls="lPa"
+if(!"name" in lPa)lPa.name="lPa"
+$desc=$collectedClasses.lPa
+if($desc instanceof Array)$desc=$desc[1]
+lPa.prototype=$desc
+function Ufa(){}Ufa.builtin$cls="Ufa"
+if(!"name" in Ufa)Ufa.name="Ufa"
+$desc=$collectedClasses.Ufa
+if($desc instanceof Array)$desc=$desc[1]
+Ufa.prototype=$desc
+function Raa(){}Raa.builtin$cls="Raa"
+if(!"name" in Raa)Raa.name="Raa"
+$desc=$collectedClasses.Raa
+if($desc instanceof Array)$desc=$desc[1]
+Raa.prototype=$desc
+function w0(){}w0.builtin$cls="w0"
+if(!"name" in w0)w0.name="w0"
+$desc=$collectedClasses.w0
+if($desc instanceof Array)$desc=$desc[1]
+w0.prototype=$desc
+function w4(){}w4.builtin$cls="w4"
+if(!"name" in w4)w4.name="w4"
+$desc=$collectedClasses.w4
+if($desc instanceof Array)$desc=$desc[1]
+w4.prototype=$desc
+function w5(){}w5.builtin$cls="w5"
+if(!"name" in w5)w5.name="w5"
+$desc=$collectedClasses.w5
+if($desc instanceof Array)$desc=$desc[1]
+w5.prototype=$desc
+function w7(){}w7.builtin$cls="w7"
+if(!"name" in w7)w7.name="w7"
+$desc=$collectedClasses.w7
+if($desc instanceof Array)$desc=$desc[1]
+w7.prototype=$desc
+function w9(){}w9.builtin$cls="w9"
+if(!"name" in w9)w9.name="w9"
+$desc=$collectedClasses.w9
+if($desc instanceof Array)$desc=$desc[1]
+w9.prototype=$desc
+function w10(){}w10.builtin$cls="w10"
+if(!"name" in w10)w10.name="w10"
+$desc=$collectedClasses.w10
+if($desc instanceof Array)$desc=$desc[1]
+w10.prototype=$desc
+function w11(){}w11.builtin$cls="w11"
+if(!"name" in w11)w11.name="w11"
+$desc=$collectedClasses.w11
+if($desc instanceof Array)$desc=$desc[1]
+w11.prototype=$desc
+function c4(a){this.a=a}c4.builtin$cls="c4"
+if(!"name" in c4)c4.name="c4"
+$desc=$collectedClasses.c4
+if($desc instanceof Array)$desc=$desc[1]
+c4.prototype=$desc
+function z6(eT,k8,bq,G9){this.eT=eT
+this.k8=k8
+this.bq=bq
+this.G9=G9}z6.builtin$cls="z6"
+if(!"name" in z6)z6.name="z6"
+$desc=$collectedClasses.z6
+if($desc instanceof Array)$desc=$desc[1]
+z6.prototype=$desc
+z6.prototype.geT=function(receiver){return this.eT}
+function Ay(bO,Lv){this.bO=bO
+this.Lv=Lv}Ay.builtin$cls="Ay"
+if(!"name" in Ay)Ay.name="Ay"
+$desc=$collectedClasses.Ay
+if($desc instanceof Array)$desc=$desc[1]
+Ay.prototype=$desc
+Ay.prototype.sbO=function(v){return this.bO=v}
+Ay.prototype.gLv=function(){return this.Lv}
+function Ed(Jd){this.Jd=Jd}Ed.builtin$cls="Ed"
+if(!"name" in Ed)Ed.name="Ed"
+$desc=$collectedClasses.Ed
+if($desc instanceof Array)$desc=$desc[1]
+Ed.prototype=$desc
+function G1(Jd,Le){this.Jd=Jd
+this.Le=Le}G1.builtin$cls="G1"
+if(!"name" in G1)G1.name="G1"
+$desc=$collectedClasses.G1
+if($desc instanceof Array)$desc=$desc[1]
+G1.prototype=$desc
+function Os(a){this.a=a}Os.builtin$cls="Os"
+if(!"name" in Os)Os.name="Os"
+$desc=$collectedClasses.Os
+if($desc instanceof Array)$desc=$desc[1]
+Os.prototype=$desc
+function Dl(a){this.a=a}Dl.builtin$cls="Dl"
+if(!"name" in Dl)Dl.name="Dl"
+$desc=$collectedClasses.Dl
+if($desc instanceof Array)$desc=$desc[1]
+Dl.prototype=$desc
+function Wh(KL,bO,tj,Lv,k6){this.KL=KL
+this.bO=bO
+this.tj=tj
+this.Lv=Lv
+this.k6=k6}Wh.builtin$cls="Wh"
+if(!"name" in Wh)Wh.name="Wh"
+$desc=$collectedClasses.Wh
+if($desc instanceof Array)$desc=$desc[1]
+Wh.prototype=$desc
+function x5(KL,bO,tj,Lv,k6){this.KL=KL
+this.bO=bO
+this.tj=tj
+this.Lv=Lv
+this.k6=k6}x5.builtin$cls="x5"
+if(!"name" in x5)x5.name="x5"
+$desc=$collectedClasses.x5
+if($desc instanceof Array)$desc=$desc[1]
+x5.prototype=$desc
+function ev(Pu,KL,bO,tj,Lv,k6){this.Pu=Pu
+this.KL=KL
+this.bO=bO
+this.tj=tj
+this.Lv=Lv
+this.k6=k6}ev.builtin$cls="ev"
+if(!"name" in ev)ev.name="ev"
+$desc=$collectedClasses.ev
+if($desc instanceof Array)$desc=$desc[1]
+ev.prototype=$desc
+ev.prototype.gPu=function(receiver){return this.Pu}
+function ID(){}ID.builtin$cls="ID"
+if(!"name" in ID)ID.name="ID"
+$desc=$collectedClasses.ID
+if($desc instanceof Array)$desc=$desc[1]
+ID.prototype=$desc
+function jV(G3,v4,KL,bO,tj,Lv,k6){this.G3=G3
+this.v4=v4
+this.KL=KL
+this.bO=bO
+this.tj=tj
+this.Lv=Lv
+this.k6=k6}jV.builtin$cls="jV"
+if(!"name" in jV)jV.name="jV"
+$desc=$collectedClasses.jV
+if($desc instanceof Array)$desc=$desc[1]
+jV.prototype=$desc
+jV.prototype.gG3=function(receiver){return this.G3}
+jV.prototype.gv4=function(){return this.v4}
+function ek(KL,bO,tj,Lv,k6){this.KL=KL
+this.bO=bO
+this.tj=tj
+this.Lv=Lv
+this.k6=k6}ek.builtin$cls="ek"
+if(!"name" in ek)ek.name="ek"
+$desc=$collectedClasses.ek
+if($desc instanceof Array)$desc=$desc[1]
+ek.prototype=$desc
+function OC(a,b,c){this.a=a
+this.b=b
+this.c=c}OC.builtin$cls="OC"
+if(!"name" in OC)OC.name="OC"
+$desc=$collectedClasses.OC
+if($desc instanceof Array)$desc=$desc[1]
+OC.prototype=$desc
+function Xm(d){this.d=d}Xm.builtin$cls="Xm"
+if(!"name" in Xm)Xm.name="Xm"
+$desc=$collectedClasses.Xm
+if($desc instanceof Array)$desc=$desc[1]
+Xm.prototype=$desc
+function Jy(wz,KL,bO,tj,Lv,k6){this.wz=wz
+this.KL=KL
+this.bO=bO
+this.tj=tj
+this.Lv=Lv
+this.k6=k6}Jy.builtin$cls="Jy"
+if(!"name" in Jy)Jy.name="Jy"
+$desc=$collectedClasses.Jy
+if($desc instanceof Array)$desc=$desc[1]
+Jy.prototype=$desc
+Jy.prototype.gwz=function(){return this.wz}
+function ky(Bb,T8,KL,bO,tj,Lv,k6){this.Bb=Bb
+this.T8=T8
+this.KL=KL
+this.bO=bO
+this.tj=tj
+this.Lv=Lv
+this.k6=k6}ky.builtin$cls="ky"
+if(!"name" in ky)ky.name="ky"
+$desc=$collectedClasses.ky
+if($desc instanceof Array)$desc=$desc[1]
+ky.prototype=$desc
+ky.prototype.gBb=function(receiver){return this.Bb}
+ky.prototype.gT8=function(receiver){return this.T8}
+function fa(hP,re,KL,bO,tj,Lv,k6){this.hP=hP
+this.re=re
+this.KL=KL
+this.bO=bO
+this.tj=tj
+this.Lv=Lv
+this.k6=k6}fa.builtin$cls="fa"
+if(!"name" in fa)fa.name="fa"
+$desc=$collectedClasses.fa
+if($desc instanceof Array)$desc=$desc[1]
+fa.prototype=$desc
+fa.prototype.ghP=function(){return this.hP}
+fa.prototype.gre=function(){return this.re}
+function WW(){}WW.builtin$cls="WW"
+if(!"name" in WW)WW.name="WW"
+$desc=$collectedClasses.WW
+if($desc instanceof Array)$desc=$desc[1]
+WW.prototype=$desc
+function vQ(a,b,c){this.a=a
+this.b=b
+this.c=c}vQ.builtin$cls="vQ"
+if(!"name" in vQ)vQ.name="vQ"
+$desc=$collectedClasses.vQ
+if($desc instanceof Array)$desc=$desc[1]
+vQ.prototype=$desc
+function a9(d){this.d=d}a9.builtin$cls="a9"
+if(!"name" in a9)a9.name="a9"
+$desc=$collectedClasses.a9
+if($desc instanceof Array)$desc=$desc[1]
+a9.prototype=$desc
+function jh(e,f,g){this.e=e
+this.f=f
+this.g=g}jh.builtin$cls="jh"
+if(!"name" in jh)jh.name="jh"
+$desc=$collectedClasses.jh
+if($desc instanceof Array)$desc=$desc[1]
+jh.prototype=$desc
+function e3(h){this.h=h}e3.builtin$cls="e3"
+if(!"name" in e3)e3.name="e3"
+$desc=$collectedClasses.e3
+if($desc instanceof Array)$desc=$desc[1]
+e3.prototype=$desc
+function VA(Bb,T8,KL,bO,tj,Lv,k6){this.Bb=Bb
+this.T8=T8
+this.KL=KL
+this.bO=bO
+this.tj=tj
+this.Lv=Lv
+this.k6=k6}VA.builtin$cls="VA"
+if(!"name" in VA)VA.name="VA"
+$desc=$collectedClasses.VA
+if($desc instanceof Array)$desc=$desc[1]
+VA.prototype=$desc
+VA.prototype.gBb=function(receiver){return this.Bb}
+VA.prototype.gT8=function(receiver){return this.T8}
+function J1(a,b){this.a=a
+this.b=b}J1.builtin$cls="J1"
+if(!"name" in J1)J1.name="J1"
+$desc=$collectedClasses.J1
+if($desc instanceof Array)$desc=$desc[1]
+J1.prototype=$desc
+function fk(kF,bm){this.kF=kF
+this.bm=bm}fk.builtin$cls="fk"
+if(!"name" in fk)fk.name="fk"
+$desc=$collectedClasses.fk
+if($desc instanceof Array)$desc=$desc[1]
+fk.prototype=$desc
+function wL(lR,ex){this.lR=lR
+this.ex=ex}wL.builtin$cls="wL"
+if(!"name" in wL)wL.name="wL"
+$desc=$collectedClasses.wL
+if($desc instanceof Array)$desc=$desc[1]
+wL.prototype=$desc
+function B0(G1){this.G1=G1}B0.builtin$cls="B0"
+if(!"name" in B0)B0.name="B0"
+$desc=$collectedClasses.B0
+if($desc instanceof Array)$desc=$desc[1]
+B0.prototype=$desc
+B0.prototype.gG1=function(receiver){return this.G1}
+function Fq(){}Fq.builtin$cls="Fq"
+if(!"name" in Fq)Fq.name="Fq"
+$desc=$collectedClasses.Fq
+if($desc instanceof Array)$desc=$desc[1]
+Fq.prototype=$desc
+function hw(){}hw.builtin$cls="hw"
+if(!"name" in hw)hw.name="hw"
+$desc=$collectedClasses.hw
+if($desc instanceof Array)$desc=$desc[1]
+hw.prototype=$desc
+function EZ(){}EZ.builtin$cls="EZ"
+if(!"name" in EZ)EZ.name="EZ"
+$desc=$collectedClasses.EZ
+if($desc instanceof Array)$desc=$desc[1]
+EZ.prototype=$desc
+function no(P){this.P=P}no.builtin$cls="no"
+if(!"name" in no)no.name="no"
+$desc=$collectedClasses.no
+if($desc instanceof Array)$desc=$desc[1]
+no.prototype=$desc
+no.prototype.gP=function(receiver){return this.P}
+function kB(Pu){this.Pu=Pu}kB.builtin$cls="kB"
+if(!"name" in kB)kB.name="kB"
+$desc=$collectedClasses.kB
+if($desc instanceof Array)$desc=$desc[1]
+kB.prototype=$desc
+kB.prototype.gPu=function(receiver){return this.Pu}
+function ae(G3,v4){this.G3=G3
+this.v4=v4}ae.builtin$cls="ae"
+if(!"name" in ae)ae.name="ae"
+$desc=$collectedClasses.ae
+if($desc instanceof Array)$desc=$desc[1]
+ae.prototype=$desc
+ae.prototype.gG3=function(receiver){return this.G3}
+ae.prototype.gv4=function(){return this.v4}
+function Iq(wz){this.wz=wz}Iq.builtin$cls="Iq"
+if(!"name" in Iq)Iq.name="Iq"
+$desc=$collectedClasses.Iq
+if($desc instanceof Array)$desc=$desc[1]
+Iq.prototype=$desc
+function w6(P){this.P=P}w6.builtin$cls="w6"
+if(!"name" in w6)w6.name="w6"
+$desc=$collectedClasses.w6
+if($desc instanceof Array)$desc=$desc[1]
+w6.prototype=$desc
+w6.prototype.gP=function(receiver){return this.P}
+function jK(kp,wz){this.kp=kp
+this.wz=wz}jK.builtin$cls="jK"
+if(!"name" in jK)jK.name="jK"
+$desc=$collectedClasses.jK
+if($desc instanceof Array)$desc=$desc[1]
+jK.prototype=$desc
+jK.prototype.gkp=function(receiver){return this.kp}
+jK.prototype.gwz=function(){return this.wz}
+function uk(kp,Bb,T8){this.kp=kp
+this.Bb=Bb
+this.T8=T8}uk.builtin$cls="uk"
+if(!"name" in uk)uk.name="uk"
+$desc=$collectedClasses.uk
+if($desc instanceof Array)$desc=$desc[1]
+uk.prototype=$desc
+uk.prototype.gkp=function(receiver){return this.kp}
+uk.prototype.gBb=function(receiver){return this.Bb}
+uk.prototype.gT8=function(receiver){return this.T8}
+function K9(Bb,T8){this.Bb=Bb
+this.T8=T8}K9.builtin$cls="K9"
+if(!"name" in K9)K9.name="K9"
+$desc=$collectedClasses.K9
+if($desc instanceof Array)$desc=$desc[1]
+K9.prototype=$desc
+K9.prototype.gBb=function(receiver){return this.Bb}
+K9.prototype.gT8=function(receiver){return this.T8}
+function RW(hP,bP,re){this.hP=hP
+this.bP=bP
+this.re=re}RW.builtin$cls="RW"
+if(!"name" in RW)RW.name="RW"
+$desc=$collectedClasses.RW
+if($desc instanceof Array)$desc=$desc[1]
+RW.prototype=$desc
+RW.prototype.ghP=function(){return this.hP}
+RW.prototype.gbP=function(receiver){return this.bP}
+RW.prototype.gre=function(){return this.re}
+function xs(){}xs.builtin$cls="xs"
+if(!"name" in xs)xs.name="xs"
+$desc=$collectedClasses.xs
+if($desc instanceof Array)$desc=$desc[1]
+xs.prototype=$desc
+function FX(Sk,Ix,ku,fL,lQ){this.Sk=Sk
+this.Ix=Ix
+this.ku=ku
+this.fL=fL
+this.lQ=lQ}FX.builtin$cls="FX"
+if(!"name" in FX)FX.name="FX"
+$desc=$collectedClasses.FX
+if($desc instanceof Array)$desc=$desc[1]
+FX.prototype=$desc
+function Ae(vH,P){this.vH=vH
+this.P=P}Ae.builtin$cls="Ae"
+if(!"name" in Ae)Ae.name="Ae"
+$desc=$collectedClasses.Ae
+if($desc instanceof Array)$desc=$desc[1]
+Ae.prototype=$desc
+Ae.prototype.gvH=function(receiver){return this.vH}
+Ae.prototype.gvH.$reflectable=1
+Ae.prototype.gP=function(receiver){return this.P}
+Ae.prototype.gP.$reflectable=1
+function Bt(YR){this.YR=YR}Bt.builtin$cls="Bt"
+if(!"name" in Bt)Bt.name="Bt"
+$desc=$collectedClasses.Bt
+if($desc instanceof Array)$desc=$desc[1]
+Bt.prototype=$desc
+function vR(Ee,wX,CD){this.Ee=Ee
+this.wX=wX
+this.CD=CD}vR.builtin$cls="vR"
+if(!"name" in vR)vR.name="vR"
+$desc=$collectedClasses.vR
+if($desc instanceof Array)$desc=$desc[1]
+vR.prototype=$desc
+function Pn(fY,P,G8){this.fY=fY
+this.P=P
+this.G8=G8}Pn.builtin$cls="Pn"
+if(!"name" in Pn)Pn.name="Pn"
+$desc=$collectedClasses.Pn
+if($desc instanceof Array)$desc=$desc[1]
+Pn.prototype=$desc
+Pn.prototype.gfY=function(receiver){return this.fY}
+Pn.prototype.gP=function(receiver){return this.P}
+Pn.prototype.gG8=function(){return this.G8}
+function hc(MV,wV,jI,x0){this.MV=MV
+this.wV=wV
+this.jI=jI
+this.x0=x0}hc.builtin$cls="hc"
+if(!"name" in hc)hc.name="hc"
+$desc=$collectedClasses.hc
+if($desc instanceof Array)$desc=$desc[1]
+hc.prototype=$desc
+function hA(G1){this.G1=G1}hA.builtin$cls="hA"
+if(!"name" in hA)hA.name="hA"
+$desc=$collectedClasses.hA
+if($desc instanceof Array)$desc=$desc[1]
+hA.prototype=$desc
+hA.prototype.gG1=function(receiver){return this.G1}
+function fr(){}fr.builtin$cls="fr"
+if(!"name" in fr)fr.name="fr"
+$desc=$collectedClasses.fr
+if($desc instanceof Array)$desc=$desc[1]
+fr.prototype=$desc
+function a0(){}a0.builtin$cls="a0"
+if(!"name" in a0)a0.name="a0"
+$desc=$collectedClasses.a0
+if($desc instanceof Array)$desc=$desc[1]
+a0.prototype=$desc
+function NQ(tH,VJ,Ai,VJ,Ai,ZI,uN,z3,TQ,Vk,Ye,mT,KM){this.tH=tH
+this.VJ=VJ
+this.Ai=Ai
+this.VJ=VJ
+this.Ai=Ai
+this.ZI=ZI
+this.uN=uN
+this.z3=z3
+this.TQ=TQ
+this.Vk=Vk
+this.Ye=Ye
+this.mT=mT
+this.KM=KM}NQ.builtin$cls="NQ"
+if(!"name" in NQ)NQ.name="NQ"
+$desc=$collectedClasses.NQ
+if($desc instanceof Array)$desc=$desc[1]
+NQ.prototype=$desc
+function fI(Uz,VJ,Ai,tH,VJ,Ai,VJ,Ai,ZI,uN,z3,TQ,Vk,Ye,mT,KM){this.Uz=Uz
+this.VJ=VJ
+this.Ai=Ai
+this.tH=tH
+this.VJ=VJ
+this.Ai=Ai
+this.VJ=VJ
+this.Ai=Ai
+this.ZI=ZI
+this.uN=uN
+this.z3=z3
+this.TQ=TQ
+this.Vk=Vk
+this.Ye=Ye
+this.mT=mT
+this.KM=KM}fI.builtin$cls="fI"
+if(!"name" in fI)fI.name="fI"
+$desc=$collectedClasses.fI
+if($desc instanceof Array)$desc=$desc[1]
+fI.prototype=$desc
+fI.prototype.gUz=function(receiver){return receiver.Uz}
+fI.prototype.gUz.$reflectable=1
+fI.prototype.sUz=function(receiver,v){return receiver.Uz=v}
+fI.prototype.sUz.$reflectable=1
+function V0(){}V0.builtin$cls="V0"
+if(!"name" in V0)V0.name="V0"
+$desc=$collectedClasses.V0
+if($desc instanceof Array)$desc=$desc[1]
+V0.prototype=$desc
+function kK(vX,VJ,Ai,tH,VJ,Ai,VJ,Ai,ZI,uN,z3,TQ,Vk,Ye,mT,KM){this.vX=vX
+this.VJ=VJ
+this.Ai=Ai
+this.tH=tH
+this.VJ=VJ
+this.Ai=Ai
+this.VJ=VJ
+this.Ai=Ai
+this.ZI=ZI
+this.uN=uN
+this.z3=z3
+this.TQ=TQ
+this.Vk=Vk
+this.Ye=Ye
+this.mT=mT
+this.KM=KM}kK.builtin$cls="kK"
+if(!"name" in kK)kK.name="kK"
+$desc=$collectedClasses.kK
+if($desc instanceof Array)$desc=$desc[1]
+kK.prototype=$desc
+kK.prototype.gvX=function(receiver){return receiver.vX}
+kK.prototype.gvX.$reflectable=1
+kK.prototype.svX=function(receiver,v){return receiver.vX=v}
+kK.prototype.svX.$reflectable=1
+function V4(){}V4.builtin$cls="V4"
+if(!"name" in V4)V4.name="V4"
+$desc=$collectedClasses.V4
+if($desc instanceof Array)$desc=$desc[1]
+V4.prototype=$desc
+function uw(V4,VJ,Ai,tH,VJ,Ai,VJ,Ai,ZI,uN,z3,TQ,Vk,Ye,mT,KM){this.V4=V4
+this.VJ=VJ
+this.Ai=Ai
+this.tH=tH
+this.VJ=VJ
+this.Ai=Ai
+this.VJ=VJ
+this.Ai=Ai
+this.ZI=ZI
+this.uN=uN
+this.z3=z3
+this.TQ=TQ
+this.Vk=Vk
+this.Ye=Ye
+this.mT=mT
+this.KM=KM}uw.builtin$cls="uw"
+if(!"name" in uw)uw.name="uw"
+$desc=$collectedClasses.uw
+if($desc instanceof Array)$desc=$desc[1]
+uw.prototype=$desc
+uw.prototype.gV4=function(receiver){return receiver.V4}
+uw.prototype.gV4.$reflectable=1
+uw.prototype.sV4=function(receiver,v){return receiver.V4=v}
+uw.prototype.sV4.$reflectable=1
+function V6(){}V6.builtin$cls="V6"
+if(!"name" in V6)V6.name="V6"
+$desc=$collectedClasses.V6
+if($desc instanceof Array)$desc=$desc[1]
+V6.prototype=$desc
+function V2(N1,bn,Ck){this.N1=N1
+this.bn=bn
+this.Ck=Ck}V2.builtin$cls="V2"
+if(!"name" in V2)V2.name="V2"
+$desc=$collectedClasses.V2
+if($desc instanceof Array)$desc=$desc[1]
+V2.prototype=$desc
+function D8(Y0,LO,ZY,xS,PB,eS,Ii){this.Y0=Y0
+this.LO=LO
+this.ZY=ZY
+this.xS=xS
+this.PB=PB
+this.eS=eS
+this.Ii=Ii}D8.builtin$cls="D8"
+if(!"name" in D8)D8.name="D8"
+$desc=$collectedClasses.D8
+if($desc instanceof Array)$desc=$desc[1]
+D8.prototype=$desc
+function jY(Ca,LO,ZY,xS,PB,eS,Ii){this.Ca=Ca
+this.LO=LO
+this.ZY=ZY
+this.xS=xS
+this.PB=PB
+this.eS=eS
+this.Ii=Ii}jY.builtin$cls="jY"
+if(!"name" in jY)jY.name="jY"
+$desc=$collectedClasses.jY
+if($desc instanceof Array)$desc=$desc[1]
+jY.prototype=$desc
+function ll(){}ll.builtin$cls="ll"
+if(!"name" in ll)ll.name="ll"
+$desc=$collectedClasses.ll
+if($desc instanceof Array)$desc=$desc[1]
+ll.prototype=$desc
+function Uf(){}Uf.builtin$cls="Uf"
+if(!"name" in Uf)Uf.name="Uf"
+$desc=$collectedClasses.Uf
+if($desc instanceof Array)$desc=$desc[1]
+Uf.prototype=$desc
+function ik(a){this.a=a}ik.builtin$cls="ik"
+if(!"name" in ik)ik.name="ik"
+$desc=$collectedClasses.ik
+if($desc instanceof Array)$desc=$desc[1]
+ik.prototype=$desc
+function LfS(b){this.b=b}LfS.builtin$cls="LfS"
+if(!"name" in LfS)LfS.name="LfS"
+$desc=$collectedClasses.LfS
+if($desc instanceof Array)$desc=$desc[1]
+LfS.prototype=$desc
+function NP(Ca,LO,ZY,xS,PB,eS,Ii){this.Ca=Ca
+this.LO=LO
+this.ZY=ZY
+this.xS=xS
+this.PB=PB
+this.eS=eS
+this.Ii=Ii}NP.builtin$cls="NP"
+if(!"name" in NP)NP.name="NP"
+$desc=$collectedClasses.NP
+if($desc instanceof Array)$desc=$desc[1]
+NP.prototype=$desc
+function Vh(Ca,LO,ZY,xS,PB,eS,Ii){this.Ca=Ca
+this.LO=LO
+this.ZY=ZY
+this.xS=xS
+this.PB=PB
+this.eS=eS
+this.Ii=Ii}Vh.builtin$cls="Vh"
+if(!"name" in Vh)Vh.name="Vh"
+$desc=$collectedClasses.Vh
+if($desc instanceof Array)$desc=$desc[1]
+Vh.prototype=$desc
+function r0(a){this.a=a}r0.builtin$cls="r0"
+if(!"name" in r0)r0.name="r0"
+$desc=$collectedClasses.r0
+if($desc instanceof Array)$desc=$desc[1]
+r0.prototype=$desc
+function jz(b){this.b=b}jz.builtin$cls="jz"
+if(!"name" in jz)jz.name="jz"
+$desc=$collectedClasses.jz
+if($desc instanceof Array)$desc=$desc[1]
+jz.prototype=$desc
+function SA(Ca,LO,ZY,xS,PB,eS,Ii){this.Ca=Ca
+this.LO=LO
+this.ZY=ZY
+this.xS=xS
+this.PB=PB
+this.eS=eS
+this.Ii=Ii}SA.builtin$cls="SA"
+if(!"name" in SA)SA.name="SA"
+$desc=$collectedClasses.SA
+if($desc instanceof Array)$desc=$desc[1]
+SA.prototype=$desc
+function zV(a,b,c){this.a=a
+this.b=b
+this.c=c}zV.builtin$cls="zV"
+if(!"name" in zV)zV.name="zV"
+$desc=$collectedClasses.zV
+if($desc instanceof Array)$desc=$desc[1]
+zV.prototype=$desc
+function nv(){}nv.builtin$cls="nv"
+if(!"name" in nv)nv.name="nv"
+$desc=$collectedClasses.nv
+if($desc instanceof Array)$desc=$desc[1]
+nv.prototype=$desc
+function ee(N1,bn,Ck){this.N1=N1
+this.bn=bn
+this.Ck=Ck}ee.builtin$cls="ee"
+if(!"name" in ee)ee.name="ee"
+$desc=$collectedClasses.ee
+if($desc instanceof Array)$desc=$desc[1]
+ee.prototype=$desc
+function XI(Cd,wd,N2,oA){this.Cd=Cd
+this.wd=wd
+this.N2=N2
+this.oA=oA}XI.builtin$cls="XI"
+if(!"name" in XI)XI.name="XI"
+$desc=$collectedClasses.XI
+if($desc instanceof Array)$desc=$desc[1]
+XI.prototype=$desc
+XI.prototype.gCd=function(receiver){return this.Cd}
+function hs(N1,bn,Ck){this.N1=N1
+this.bn=bn
+this.Ck=Ck}hs.builtin$cls="hs"
+if(!"name" in hs)hs.name="hs"
+$desc=$collectedClasses.hs
+if($desc instanceof Array)$desc=$desc[1]
+hs.prototype=$desc
+hs.prototype.gN1=function(){return this.N1}
+hs.prototype.sCk=function(v){return this.Ck=v}
+function yp(KO,lC,k8){this.KO=KO
+this.lC=lC
+this.k8=k8}yp.builtin$cls="yp"
+if(!"name" in yp)yp.name="yp"
+$desc=$collectedClasses.yp
+if($desc instanceof Array)$desc=$desc[1]
+yp.prototype=$desc
+function ug(N1,bn,Ck){this.N1=N1
+this.bn=bn
+this.Ck=Ck}ug.builtin$cls="ug"
+if(!"name" in ug)ug.name="ug"
+$desc=$collectedClasses.ug
+if($desc instanceof Array)$desc=$desc[1]
+ug.prototype=$desc
+function DT(lr,xT,kr,Ds,QO,jH,mj,zx,N1,bn,Ck){this.lr=lr
+this.xT=xT
+this.kr=kr
+this.Ds=Ds
+this.QO=QO
+this.jH=jH
+this.mj=mj
+this.zx=zx
+this.N1=N1
+this.bn=bn
+this.Ck=Ck}DT.builtin$cls="DT"
+if(!"name" in DT)DT.name="DT"
+$desc=$collectedClasses.DT
+if($desc instanceof Array)$desc=$desc[1]
+DT.prototype=$desc
+DT.prototype.sxT=function(v){return this.xT=v}
+DT.prototype.gkr=function(){return this.kr}
+DT.prototype.sQO=function(v){return this.QO=v}
+DT.prototype.sjH=function(v){return this.jH=v}
+DT.prototype.smj=function(v){return this.mj=v}
+DT.prototype.gzx=function(){return this.zx}
+DT.prototype.szx=function(v){return this.zx=v}
+function OB(){}OB.builtin$cls="OB"
+if(!"name" in OB)OB.name="OB"
+$desc=$collectedClasses.OB
+if($desc instanceof Array)$desc=$desc[1]
+OB.prototype=$desc
+function Ra(){}Ra.builtin$cls="Ra"
+if(!"name" in Ra)Ra.name="Ra"
+$desc=$collectedClasses.Ra
+if($desc instanceof Array)$desc=$desc[1]
+Ra.prototype=$desc
+function N9(ud,lr,eS,Ii){this.ud=ud
+this.lr=lr
+this.eS=eS
+this.Ii=Ii}N9.builtin$cls="N9"
+if(!"name" in N9)N9.name="N9"
+$desc=$collectedClasses.N9
+if($desc instanceof Array)$desc=$desc[1]
+N9.prototype=$desc
+N9.prototype.gIi=function(receiver){return this.Ii}
+function NW(a,b,c,d){this.a=a
+this.b=b
+this.c=c
+this.d=d}NW.builtin$cls="NW"
+if(!"name" in NW)NW.name="NW"
+$desc=$collectedClasses.NW
+if($desc instanceof Array)$desc=$desc[1]
+NW.prototype=$desc
+function HS(EJ,bX){this.EJ=EJ
+this.bX=bX}HS.builtin$cls="HS"
+if(!"name" in HS)HS.name="HS"
+$desc=$collectedClasses.HS
+if($desc instanceof Array)$desc=$desc[1]
+HS.prototype=$desc
+HS.prototype.gEJ=function(){return this.EJ}
+function TG(e9,YC,xG,pq,t9,A7,TU,Q3,JM,d6,rV,yO,XV,eD,FS,IY,U9,DO,Fy){this.e9=e9
+this.YC=YC
+this.xG=xG
+this.pq=pq
+this.t9=t9
+this.A7=A7
+this.TU=TU
+this.Q3=Q3
+this.JM=JM
+this.d6=d6
+this.rV=rV
+this.yO=yO
+this.XV=XV
+this.eD=eD
+this.FS=FS
+this.IY=IY
+this.U9=U9
+this.DO=DO
+this.Fy=Fy}TG.builtin$cls="TG"
+if(!"name" in TG)TG.name="TG"
+$desc=$collectedClasses.TG
+if($desc instanceof Array)$desc=$desc[1]
+TG.prototype=$desc
+function ts(){}ts.builtin$cls="ts"
+if(!"name" in ts)ts.name="ts"
+$desc=$collectedClasses.ts
+if($desc instanceof Array)$desc=$desc[1]
+ts.prototype=$desc
+function Kj(a){this.a=a}Kj.builtin$cls="Kj"
+if(!"name" in Kj)Kj.name="Kj"
+$desc=$collectedClasses.Kj
+if($desc instanceof Array)$desc=$desc[1]
+Kj.prototype=$desc
+function VU(b){this.b=b}VU.builtin$cls="VU"
+if(!"name" in VU)VU.name="VU"
+$desc=$collectedClasses.VU
+if($desc instanceof Array)$desc=$desc[1]
+VU.prototype=$desc
+function Ya(yT,kU){this.yT=yT
+this.kU=kU}Ya.builtin$cls="Ya"
+if(!"name" in Ya)Ya.name="Ya"
+$desc=$collectedClasses.Ya
+if($desc instanceof Array)$desc=$desc[1]
+Ya.prototype=$desc
+Ya.prototype.gyT=function(receiver){return this.yT}
+Ya.prototype.gkU=function(receiver){return this.kU}
+function XT(N1,bn,Ck){this.N1=N1
+this.bn=bn
+this.Ck=Ck}XT.builtin$cls="XT"
+if(!"name" in XT)XT.name="XT"
+$desc=$collectedClasses.XT
+if($desc instanceof Array)$desc=$desc[1]
+XT.prototype=$desc
+function ic(LO,ZY,xS,PB,eS,Ii){this.LO=LO
+this.ZY=ZY
+this.xS=xS
+this.PB=PB
+this.eS=eS
+this.Ii=Ii}ic.builtin$cls="ic"
+if(!"name" in ic)ic.name="ic"
+$desc=$collectedClasses.ic
+if($desc instanceof Array)$desc=$desc[1]
+ic.prototype=$desc
+function VT(N1,bn,Ck){this.N1=N1
+this.bn=bn
+this.Ck=Ck}VT.builtin$cls="VT"
+if(!"name" in VT)VT.name="VT"
+$desc=$collectedClasses.VT
+if($desc instanceof Array)$desc=$desc[1]
+VT.prototype=$desc
+function T4(){}T4.builtin$cls="T4"
+if(!"name" in T4)T4.name="T4"
+$desc=$collectedClasses.T4
+if($desc instanceof Array)$desc=$desc[1]
+T4.prototype=$desc
+function TR(LO,Ii){this.LO=LO
+this.Ii=Ii}TR.builtin$cls="TR"
+if(!"name" in TR)TR.name="TR"
+$desc=$collectedClasses.TR
+if($desc instanceof Array)$desc=$desc[1]
+TR.prototype=$desc
+TR.prototype.gLO=function(){return this.LO}
+TR.prototype.gIi=function(receiver){return this.Ii}
+function VD(a){this.a=a}VD.builtin$cls="VD"
+if(!"name" in VD)VD.name="VD"
+$desc=$collectedClasses.VD
+if($desc instanceof Array)$desc=$desc[1]
+VD.prototype=$desc
+function Oh(Mw){this.Mw=Mw}Oh.builtin$cls="Oh"
+if(!"name" in Oh)Oh.name="Oh"
+$desc=$collectedClasses.Oh
+if($desc instanceof Array)$desc=$desc[1]
+Oh.prototype=$desc
+function zy(call$2,$name){this.call$2=call$2
+this.$name=$name}zy.builtin$cls="zy"
+$desc=$collectedClasses.zy
+if($desc instanceof Array)$desc=$desc[1]
+zy.prototype=$desc
+function Nb(call$1,$name){this.call$1=call$1
+this.$name=$name}Nb.builtin$cls="Nb"
+$desc=$collectedClasses.Nb
+if($desc instanceof Array)$desc=$desc[1]
+Nb.prototype=$desc
+function Fy(call$0,$name){this.call$0=call$0
+this.$name=$name}Fy.builtin$cls="Fy"
+$desc=$collectedClasses.Fy
+if($desc instanceof Array)$desc=$desc[1]
+Fy.prototype=$desc
+function eU(call$7,$name){this.call$7=call$7
+this.$name=$name}eU.builtin$cls="eU"
+$desc=$collectedClasses.eU
+if($desc instanceof Array)$desc=$desc[1]
+eU.prototype=$desc
+function ADW(call$2,$name){this.call$2=call$2
+this.$name=$name}ADW.builtin$cls="ADW"
+$desc=$collectedClasses.ADW
+if($desc instanceof Array)$desc=$desc[1]
+ADW.prototype=$desc
+function Ri(call$5,$name){this.call$5=call$5
+this.$name=$name}Ri.builtin$cls="Ri"
+$desc=$collectedClasses.Ri
+if($desc instanceof Array)$desc=$desc[1]
+Ri.prototype=$desc
+function kq(call$4,$name){this.call$4=call$4
+this.$name=$name}kq.builtin$cls="kq"
+$desc=$collectedClasses.kq
+if($desc instanceof Array)$desc=$desc[1]
+kq.prototype=$desc
+function Ag(call$6,$name){this.call$6=call$6
+this.$name=$name}Ag.builtin$cls="Ag"
+$desc=$collectedClasses.Ag
+if($desc instanceof Array)$desc=$desc[1]
+Ag.prototype=$desc
+function PW(call$3$onError$radix,$name){this.call$3$onError$radix=call$3$onError$radix
+this.$name=$name}PW.builtin$cls="PW"
+$desc=$collectedClasses.PW
+if($desc instanceof Array)$desc=$desc[1]
+PW.prototype=$desc
+return[qE,Yy,Ps,rK,fY,Mr,zx,ct,nB,i3,it,Az,QP,QW,n6,Ny,OM,QQ,MA,y4,d7,na,oJ,DG,mN,vH,hh,Em,Sb,rV,Wy,YN,bA,Wq,rv,BK,wj,cv,Fs,SX,ea,D0,as,T5,Aa,u5,Yu,iG,jP,U2,tA,xn,Vb,QH,ST,X2,fJ,Vi,tX,Sg,pA,Mi,Gt,In,Gx,eP,AL,Og,cS,M6,El,zm,SV,aB,ku,KM,cW,DK,qm,ZY,cx,la,Vn,PG,xe,Hw,bn,Im,oB,Aj,oU,qT,KV,BH,mh,G7,wq,Ql,Xp,bP,mX,SN,HD,ni,p3,qj,qW,KR,ew,fs,bX,BL,MC,Mx,j2,yz,lp,pD,I0,QR,Cp,ua,zD,Ul,G0,wb,fq,h4,qk,GI,Tb,tV,BT,yY,kJ,AE,xV,FH,y6,RH,pU,Lq,Mf,BR,r4,aG,J6,K5,UM,UL,rq,nK,kc,ij,ty,Nf,Nc,rj,rh,Zv,Q7,hF,OF,HB,ZJ,mU,eZ,Fl,y5,nV,Zc,ui,D6,DQ,Sm,dx,es,eG,lv,pf,NV,W1,zo,wf,TU,bb,VE,lc,Xu,qM,tk,me,qN,nh,d4,MI,ca,xX,eW,um,Fu,OE,l6,BA,zp,rE,CC,PQ,uz,Yd,U0,AD,Gr,tc,GH,lo,NJ,nd,vt,rQ,EU,LR,MB,hy,r8,aS,CG,qF,MT,Rk,Eo,Dn,UD,ZD,NE,wD,BD,vRT,Fi,Qr,mj,cB,uY,yR,AX,xJ,l4,Et,NC,nb,By,xt,tG,P0,Jq,Xr,qD,Cf,I2,AS,Kq,oI,mJ,rF,vi,ZX,ycx,nE,zt,F0,Lt,Gv,kn,PE,QI,FP,is,Q,jx,ZC,Jt,P,im,Pp,O,PK,JO,O2,aX,cC,RA,IY,JH,jl,Iy,JM,Ua,JG,ns,wd,TA,YP,yc,I9,Bj,NO,II,aJ,X1,HU,Pm,oo,OW,Dd,AP,yH,FA,Av,oH,LP,c2,WT,p8,XR,LI,A2,F3,u8,Gi,t2,Zr,ZQ,az,vV,Hk,XO,dr,TL,KX,uZ,OQ,Tp,v,Z3,D2,GT,Pe,Eq,cu,Lm,dC,wN,VX,VR,EK,KW,Pb,tQ,aC,Vf,Be,tu,i6,Vc,zO,aL,nH,a7,i1,xy,MH,A8,U5,SO,zs,rR,AM,d5,U1,SJ,SU,Tv,XC,iK,GD,Sn,nI,jU,Lj,mb,am,cw,EE,Uz,uh,Kv,oP,YX,BI,y1,M2,iu,mg,zE,bl,Ef,Oo,Tc,Ax,Wf,Un,Ei,U7,t0,Ld,Sz,Zk,fu,ng,Ar,jB,ye,Gj,Zz,Xh,Ca,Ik,JI,Ip,WV,C7,CQ,dz,tK,OR,Bg,DL,b8,j7,oV,TP,Zf,vs,da,xw,dm,rH,ZL,mi,jb,wB,Pu,qh,QC,Yl,Rv,YJ,jv,LB,DO,lz,Rl,Jb,M4,Jp,h7,pr,eN,B5,PI,j4,i9,VV,Dy,lU,xp,UH,Z5,ii,ib,MO,ms,UO,Bc,vp,lk,Gh,XB,ly,cK,O9,yU,nP,KA,Vo,qB,ez,lx,LV,DS,dp,B3,CR,ny,dR,uR,QX,YR,fB,bq,nO,t3,dq,dX,aY,wJ,e4,JB,Id,fZ,TF,Xz,Cg,Hs,uo,pK,eM,Ue,W5,R8,k6,oi,ce,o2,jG,fG,EQ,YB,iX,ou,S9,ey,xd,v6,db,Cm,N6,jg,YO,oz,b6,ef,zQ,Yp,u3,mW,ar,lD,W0,Sw,o0,a1,jp,Xt,Ba,An,LD,YI,OG,ro,DN,ZM,HW,JC,f1,Uk,wI,ob,Ud,K8,by,dI,QM,Sh,tF,z0,Vx,Rw,GY,jZ,h0,CL,uA,a2,fR,iP,MF,Rq,Hn,Zl,pl,a6,P7,DW,Ge,LK,AT,bJ,mp,ub,ds,lj,UV,VS,t7,HG,aE,kM,EH,cX,eL,L8,c8,a,Od,mE,WU,Rn,wv,uq,iD,hb,XX,Kd,yZ,Gs,pm,Tw,wm,FB,Lk,XZ,qz,hQ,Nw,kZ,JT,d9,rI,dD,QZ,BV,E1,wz,B1,M5,Jn,DM,zL,ec,Kx,iO,bU,e7,nj,rl,RAp,ma,cf,E9,nF,FK,Si,vf,Fc,hD,I4,e0,RO,eu,ie,Ea,pu,i2,b0,Ov,qO,RX,kG,Gm,W9,vZ,dW,PA,H2,O7,HI,E4,r7,Tz,Wk,DV,Hp,Nz,Jd,QS,QF,NL,vr,D4,L9u,Ms,Fw,RS,RY,Ys,vg,xG,Vj,VW,RK,DH,ZK,Th,Vju,KB,RKu,xGn,TkQ,VWk,ZKG,DHb,w6W,Hna,z9g,G8,UZ,Fv,WZ,I3,pv,qr,Vfx,Gk,Dsd,Ds,tuj,aI,rG,yh,wO,Tm,rz,CA,YL,KC,xL,As,GE,pR,Vct,hx,D13,u7,St,WZq,vj,pva,CX,cda,TJ,dG,Ng,HV,Nh,fA,tz,jR,PO,c5,ih,mL,bv,pt,Zd,dY,vY,dS,ZW,dZ,Qe,Nu,pF,Ha,nu,be,Pg,jI,Rb,Zw,Pf,F1,waa,uL,Nr,Pi,yj,qI,J3,E5,o5,b5,zI,Zb,id,iV,W4,Fa,x9,d3,X6,xh,wn,uF,cj,HA,br,zT,D7,qL,C4,l9,lP,km,Qt,Dk,A0,rm,eY,OO,BE,Qb,xI,q1,Zj,XP,q6,CK,BO,ZG,Oc,MX,w12,fTP,yL,dM,Y7,WC,Xi,TV,Mq,Oa,n1,xf,L6,Rs,uJ,hm,Ji,Bf,ir,Sa,GN,k8,HJ,S0,V3,Bl,pM,Mh,Md,Lf,fT,pp,Nq,nl,mf,ej,HK,w13,o8,GL,e9,Dw,Xy,uK,mY,fE,mB,XF,iH,wJY,zOQ,W6o,MdQ,YJG,DOe,lPa,Ufa,Raa,w0,w4,w5,w7,w9,w10,w11,c4,z6,Ay,Ed,G1,Os,Dl,Wh,x5,ev,ID,jV,ek,OC,Xm,Jy,ky,fa,WW,vQ,a9,jh,e3,VA,J1,fk,wL,B0,Fq,hw,EZ,no,kB,ae,Iq,w6,jK,uk,K9,RW,xs,FX,Ae,Bt,vR,Pn,hc,hA,fr,a0,NQ,fI,V0,kK,V4,uw,V6,V2,D8,jY,ll,Uf,ik,LfS,NP,Vh,r0,jz,SA,zV,nv,ee,XI,hs,yp,ug,DT,OB,Ra,N9,NW,HS,TG,ts,Kj,VU,Ya,XT,ic,VT,T4,TR,VD,Oh,zy,Nb,Fy,eU,ADW,Ri,kq,Ag,PW]}
\ No newline at end of file
diff --git a/runtime/bin/vmservice/client/lib/observatory_elements.dart b/runtime/bin/vmservice/client/lib/observatory_elements.dart
index 6847736..0f50949 100644
--- a/runtime/bin/vmservice/client/lib/observatory_elements.dart
+++ b/runtime/bin/vmservice/client/lib/observatory_elements.dart
@@ -1,8 +1,14 @@
library observatory_elements;
// Export elements.
+export 'package:observatory/src/observatory_elements/class_view.dart';
+export 'package:observatory/src/observatory_elements/code_view.dart';
export 'package:observatory/src/observatory_elements/collapsible_content.dart';
export 'package:observatory/src/observatory_elements/error_view.dart';
+export 'package:observatory/src/observatory_elements/field_ref.dart';
+export 'package:observatory/src/observatory_elements/field_view.dart';
+export 'package:observatory/src/observatory_elements/instance_ref.dart';
+export 'package:observatory/src/observatory_elements/instance_view.dart';
export 'package:observatory/src/observatory_elements/isolate_list.dart';
export 'package:observatory/src/observatory_elements/isolate_summary.dart';
export 'package:observatory/src/observatory_elements/json_view.dart';
@@ -15,3 +21,4 @@
export 'package:observatory/src/observatory_elements/script_view.dart';
export 'package:observatory/src/observatory_elements/source_view.dart';
export 'package:observatory/src/observatory_elements/stack_trace.dart';
+
diff --git a/runtime/bin/vmservice/client/lib/observatory_elements.html b/runtime/bin/vmservice/client/lib/observatory_elements.html
index 199998a..ae96d66 100644
--- a/runtime/bin/vmservice/client/lib/observatory_elements.html
+++ b/runtime/bin/vmservice/client/lib/observatory_elements.html
@@ -5,10 +5,13 @@
<link rel="import" href="src/observatory_elements/code_view.html">
<link rel="import" href="src/observatory_elements/collapsible_content.html">
<link rel="import" href="src/observatory_elements/error_view.html">
+ <link rel="import" href="src/observatory_elements/field_ref.html">
<link rel="import" href="src/observatory_elements/field_view.html">
<link rel="import" href="src/observatory_elements/function_view.html">
<link rel="import" href="src/observatory_elements/isolate_list.html">
<link rel="import" href="src/observatory_elements/isolate_summary.html">
+ <link rel="import" href="src/observatory_elements/instance_ref.html">
+ <link rel="import" href="src/observatory_elements/instance_view.html">
<link rel="import" href="src/observatory_elements/json_view.html">
<link rel="import" href="src/observatory_elements/library_view.html">
<link rel="import" href="src/observatory_elements/message_viewer.html">
diff --git a/runtime/bin/vmservice/client/lib/src/observatory/application.dart b/runtime/bin/vmservice/client/lib/src/observatory/application.dart
index f321dbe..46ea631 100644
--- a/runtime/bin/vmservice/client/lib/src/observatory/application.dart
+++ b/runtime/bin/vmservice/client/lib/src/observatory/application.dart
@@ -11,10 +11,7 @@
@observable final RequestManager requestManager;
@observable final IsolateManager isolateManager;
- ObservatoryApplication() :
- locationManager = new LocationManager(),
- requestManager = new HttpRequestManager(),
- isolateManager = new IsolateManager() {
+ void _setup() {
locationManager._application = this;
requestManager._application = this;
isolateManager._application = this;
@@ -22,6 +19,20 @@
locationManager.init();
}
+ ObservatoryApplication.devtools() :
+ locationManager = new LocationManager(),
+ requestManager = new PostMessageRequestManager(),
+ isolateManager = new IsolateManager() {
+ _setup();
+ }
+
+ ObservatoryApplication() :
+ locationManager = new LocationManager(),
+ requestManager = new HttpRequestManager(),
+ isolateManager = new IsolateManager() {
+ _setup();
+ }
+
/// Return the [Isolate] with [id].
Isolate getIsolate(int id) {
return isolateManager.isolates[id];
diff --git a/runtime/bin/vmservice/client/lib/src/observatory/request_manager.dart b/runtime/bin/vmservice/client/lib/src/observatory/request_manager.dart
index 9a26b54..705e067 100644
--- a/runtime/bin/vmservice/client/lib/src/observatory/request_manager.dart
+++ b/runtime/bin/vmservice/client/lib/src/observatory/request_manager.dart
@@ -68,7 +68,11 @@
request(requestString).then((responseString) {
parseResponses(responseString);
}).catchError((e) {
- setResponseError(e.target);
+ if (e is FormatException) {
+ setResponseError(e.message);
+ } else {
+ setResponseError(e.target);
+ }
});
}
}
@@ -102,3 +106,44 @@
return HttpRequest.getString(prefix + requestString);
}
}
+
+class PostMessageRequestManager extends RequestManager {
+ final Map _outstandingRequests = new Map();
+ int _requestSerial = 0;
+ PostMessageRequestManager() {
+ window.onMessage.listen(_messageHandler);
+ }
+
+ void _messageHandler(msg) {
+ var id = msg.data['id'];
+ var name = msg.data['name'];
+ var data = msg.data['data'];
+ if (name != 'observatoryData') {
+ return;
+ }
+ print('Got reply $id $data');
+ var completer = _outstandingRequests[id];
+ if (completer != null) {
+ _outstandingRequests.remove(id);
+ print('Completing $id');
+ completer.complete(data);
+ } else {
+ print('Could not find completer for $id');
+ }
+ }
+
+ Future<String> request(String requestString) {
+ var idString = '$_requestSerial';
+ Map message = {};
+ message['id'] = idString;
+ message['method'] = 'observatoryQuery';
+ message['query'] = requestString;
+ _requestSerial++;
+
+ var completer = new Completer();
+ _outstandingRequests[idString] = completer;
+
+ window.parent.postMessage(JSON.encode(message), '*');
+ return completer.future;
+ }
+}
diff --git a/runtime/bin/vmservice/client/lib/src/observatory_elements/class_view.html b/runtime/bin/vmservice/client/lib/src/observatory_elements/class_view.html
index 525035f..762d1a4 100644
--- a/runtime/bin/vmservice/client/lib/src/observatory_elements/class_view.html
+++ b/runtime/bin/vmservice/client/lib/src/observatory_elements/class_view.html
@@ -1,6 +1,8 @@
<head>
<link rel="import" href="observatory_element.html">
<link rel="import" href="error_view.html">
+ <link rel="import" href="field_ref.html">
+ <link rel="import" href="instance_ref.html">
</head>
<polymer-element name="class-view" extends="observatory-element">
<template>
@@ -8,12 +10,12 @@
<div class="col-md-8 col-md-offset-2">
<div class="panel panel-warning">
<div class="panel-heading">
- {{ cls['user_name'] }} ({{ cls['name'] }})
+ class <strong>{{ cls['user_name'] }}</strong>
<template if="{{ cls['super']['type'] != 'Null' }}">
extends
<a href="{{ app.locationManager.currentIsolateClassLink(cls['super']['id'])}}">
{{ cls['super']['user_name'] }}
- </a>
+ </a>
</template>
<a class="pull-right" href="{{ app.locationManager.currentIsolateObjectLink(cls['library']['id'])}}">
{{ cls['library']['name'] }}
@@ -37,21 +39,18 @@
<tr>
<td>Patch</td><td>{{ cls['patch'] }}</td>
</tr>
+ <tr>
+ <td>VM Name</td><td>{{ cls['name'] }}</td>
+ </tr>
</tbody>
</table>
<template if="{{ cls['error'] == null }}">
<blockquote><strong>Fields</strong></blockquote>
<table class="table table-hover">
- <thead>
- <tr>
- <th>User Name</th>
- <th>VM Name</th>
- </tr>
- </thead>
- <tbody>
+ <tbody>
<tr template repeat="{{ field in cls['fields'] }}">
- <td><a href="{{ app.locationManager.currentIsolateObjectLink(field['id'])}}">{{ field['user_name'] }}</a></td>
- <td><a href="{{ app.locationManager.currentIsolateObjectLink(field['id'])}}">{{ field['name'] }}</a></td>
+ <td><field-ref app="{{ app }}" field="{{ field }}"></field-ref></td>
+ <td><instance-ref app="{{ app }}" instance="{{ field['value'] }}"></instance-ref></td>
</tr>
</tbody>
</table>
diff --git a/runtime/bin/vmservice/client/lib/src/observatory_elements/field_ref.dart b/runtime/bin/vmservice/client/lib/src/observatory_elements/field_ref.dart
new file mode 100644
index 0000000..ddbe8537
--- /dev/null
+++ b/runtime/bin/vmservice/client/lib/src/observatory_elements/field_ref.dart
@@ -0,0 +1,14 @@
+// Copyright (c) 2013, the Dart project authors. Please see the AUTHORS file
+// for details. All rights reserved. Use of this source code is governed by a
+// BSD-style license that can be found in the LICENSE file.
+
+library field_ref_element;
+
+import 'package:polymer/polymer.dart';
+import 'observatory_element.dart';
+
+@CustomTag('field-ref')
+class FieldRefElement extends ObservatoryElement {
+ @published Map field;
+ FieldRefElement.created() : super.created();
+}
\ No newline at end of file
diff --git a/runtime/bin/vmservice/client/lib/src/observatory_elements/field_ref.html b/runtime/bin/vmservice/client/lib/src/observatory_elements/field_ref.html
new file mode 100644
index 0000000..1d6e716
--- /dev/null
+++ b/runtime/bin/vmservice/client/lib/src/observatory_elements/field_ref.html
@@ -0,0 +1,19 @@
+<head>
+<link rel="import" href="observatory_element.html">
+</head>
+<polymer-element name="field-ref" extends="observatory-element">
+<template>
+<div>
+ <template if="{{ field['final'] }}"> final </template>
+ <template if="{{ field['const'] }}"> const </template>
+ <template if="{{ (field['declared_type']['name'] == 'dynamic' && !field['final'] && !field['const']) }}">
+ var
+ </template>
+ <template if="{{ (field['declared_type']['name'] != 'dynamic') }}">
+ <a href="{{ app.locationManager.currentIsolateClassLink(field['declared_type']['id']) }}">
+ {{ field['declared_type']['user_name'] }} </a>
+ </template>
+ <a href="{{ app.locationManager.currentIsolateObjectLink(field['id'])}}">
+ {{ field['user_name'] }} </a>
+</div>
+</template> <script type="application/dart" src="field_ref.dart"></script> </polymer-element>
\ No newline at end of file
diff --git a/runtime/bin/vmservice/client/lib/src/observatory_elements/instance_ref.dart b/runtime/bin/vmservice/client/lib/src/observatory_elements/instance_ref.dart
new file mode 100644
index 0000000..3e8aa78
--- /dev/null
+++ b/runtime/bin/vmservice/client/lib/src/observatory_elements/instance_ref.dart
@@ -0,0 +1,14 @@
+// Copyright (c) 2013, the Dart project authors. Please see the AUTHORS file
+// for details. All rights reserved. Use of this source code is governed by a
+// BSD-style license that can be found in the LICENSE file.
+
+library instance_ref_element;
+
+import 'package:polymer/polymer.dart';
+import 'observatory_element.dart';
+
+@CustomTag('instance-ref')
+class InstanceRefElement extends ObservatoryElement {
+ @published Map instance;
+ InstanceRefElement.created() : super.created();
+}
\ No newline at end of file
diff --git a/runtime/bin/vmservice/client/lib/src/observatory_elements/instance_ref.html b/runtime/bin/vmservice/client/lib/src/observatory_elements/instance_ref.html
new file mode 100644
index 0000000..d9abb4f
--- /dev/null
+++ b/runtime/bin/vmservice/client/lib/src/observatory_elements/instance_ref.html
@@ -0,0 +1,16 @@
+<head>
+<link rel="import" href="observatory_element.html">
+</head>
+<polymer-element name="instance-ref" extends="observatory-element">
+<template>
+<div>
+ <template if="{{ (instance['type'] == 'null') }}">
+ {{ "null" }}
+ </template>
+ <template if="{{ (instance['type'] != 'null') }}">
+ <a href="{{ app.locationManager.currentIsolateObjectLink(instance['id'])}}">
+ {{ instance['preview'] }}
+ </a>
+ </template>
+ </div>
+</template> <script type="application/dart" src="instance_ref.dart"></script> </polymer-element>
\ No newline at end of file
diff --git a/runtime/bin/vmservice/client/lib/src/observatory_elements/instance_view.dart b/runtime/bin/vmservice/client/lib/src/observatory_elements/instance_view.dart
new file mode 100644
index 0000000..fcbeaa8
--- /dev/null
+++ b/runtime/bin/vmservice/client/lib/src/observatory_elements/instance_view.dart
@@ -0,0 +1,14 @@
+// Copyright (c) 2013, the Dart project authors. Please see the AUTHORS file
+// for details. All rights reserved. Use of this source code is governed by a
+// BSD-style license that can be found in the LICENSE file.
+
+library instance_view_element;
+
+import 'package:polymer/polymer.dart';
+import 'observatory_element.dart';
+
+@CustomTag('instance-view')
+class InstanceViewElement extends ObservatoryElement {
+ @published Map instance;
+ InstanceViewElement.created() : super.created();
+}
\ No newline at end of file
diff --git a/runtime/bin/vmservice/client/lib/src/observatory_elements/instance_view.html b/runtime/bin/vmservice/client/lib/src/observatory_elements/instance_view.html
new file mode 100644
index 0000000..c4864c4
--- /dev/null
+++ b/runtime/bin/vmservice/client/lib/src/observatory_elements/instance_view.html
@@ -0,0 +1,47 @@
+<head>
+ <link rel="import" href="observatory_element.html">
+ <link rel="import" href="error_view.html">
+ <link rel="import" href="field_ref.html">
+ <link rel="import" href="instance_ref.html">
+</head>
+<polymer-element name="instance-view" extends="observatory-element">
+ <template>
+ <div class="row">
+ <div class="col-md-8 col-md-offset-2">
+ <div class="panel panel-warning">
+ <div class="panel-heading">
+ Instance of
+ <a href="{{ app.locationManager.currentIsolateClassLink(instance['class']['id'])}}">
+ {{ instance['class']['user_name'] }}
+ </a>
+ </div>
+ <div class="panel-body">
+ <template if="{{ instance['error'] == null }}">
+ <table class="table table-hover">
+ <tbody>
+ <tr>
+ <td>Preview</td><td>{{ instance['preview'] }}</td>
+ </tr>
+ </tbody>
+ </table>
+ <blockquote><strong>Fields</strong></blockquote>
+ <table class="table table-hover">
+ <tbody>
+ <tr template repeat="{{ field in instance['fields'] }}">
+ <td><field-ref app="{{ app }}" field="{{ field }}"></field-ref></td>
+ <td><instance-ref app="{{ app }}" instance="{{ field['value'] }}"></instance-ref></td>
+ </tr>
+ </tbody>
+ </table>
+ </template>
+ <template if="{{ instance['error'] != null }}">
+ <error-view error_obj="{{ instance['error'] }}"></error-view>
+ </template>
+ </div>
+ </div>
+ </div>
+ </div>
+ </template>
+ <script type="application/dart" src="instance_view.dart"></script>
+</polymer-element>
+t>
\ No newline at end of file
diff --git a/runtime/bin/vmservice/client/lib/src/observatory_elements/library_view.dart b/runtime/bin/vmservice/client/lib/src/observatory_elements/library_view.dart
index b2cebf2..befd59e 100644
--- a/runtime/bin/vmservice/client/lib/src/observatory_elements/library_view.dart
+++ b/runtime/bin/vmservice/client/lib/src/observatory_elements/library_view.dart
@@ -4,8 +4,8 @@
library library_view_element;
-import 'observatory_element.dart';
import 'package:polymer/polymer.dart';
+import 'observatory_element.dart';
@CustomTag('library-view')
class LibraryViewElement extends ObservatoryElement {
diff --git a/runtime/bin/vmservice/client/lib/src/observatory_elements/library_view.html b/runtime/bin/vmservice/client/lib/src/observatory_elements/library_view.html
index 93009fb..746592b 100644
--- a/runtime/bin/vmservice/client/lib/src/observatory_elements/library_view.html
+++ b/runtime/bin/vmservice/client/lib/src/observatory_elements/library_view.html
@@ -1,5 +1,7 @@
<head>
<link rel="import" href="observatory_element.html">
+ <link rel="import" href="field_ref.html">
+ <link rel="import" href="instance_ref.html">
</head>
<polymer-element name="library-view" extends="observatory-element">
<template>
@@ -33,35 +35,8 @@
<table class="table table-hover">
<tbody>
<tr template repeat="{{ variable in library['variables'] }}">
- <td>
- <template if="{{ variable['final'] }}">
- final
- </template>
- <template if="{{ variable['const'] }}">
- const
- </template>
- <template if="{{ (variable['declared_type']['name'] == 'dynamic' && !variable['final'] && !variable['const']) }}">
- var
- </template>
- <template if="{{ (variable['declared_type']['name'] != 'dynamic') }}">
- <a href="{{ app.locationManager.currentIsolateClassLink(variable['declared_type']['id']) }}">
- {{ variable['declared_type']['user_name'] }}
- </a>
- </template>
- <a href="{{ app.locationManager.currentIsolateObjectLink(variable['id'])}}">
- {{ variable['user_name'] }}
- </a>
- </td>
- <td>
- <template if="{{ (variable['value']['type'] == 'null') }}">
- {{ "null" }}
- </template>
- <template if="{{ (variable['value']['type'] != 'null') }}">
- <a href="{{ app.locationManager.currentIsolateObjectLink(variable['value']['id'])}}">
- {{ variable['value']['preview'] }}
- </a>
- </template>
- </td>
+ <td><field-ref app="{{ app }}" field="{{ variable }}"></field-ref></td>
+ <td><instance-ref app="{{ app }}" instance="{{ variable['value'] }}"></instance-ref></td>
</tr>
</tbody>
</table>
diff --git a/runtime/bin/vmservice/client/lib/src/observatory_elements/message_viewer.html b/runtime/bin/vmservice/client/lib/src/observatory_elements/message_viewer.html
index 6ed611e..3bd2aff 100644
--- a/runtime/bin/vmservice/client/lib/src/observatory_elements/message_viewer.html
+++ b/runtime/bin/vmservice/client/lib/src/observatory_elements/message_viewer.html
@@ -4,6 +4,7 @@
<link rel="import" href="error_view.html">
<link rel="import" href="field_view.html">
<link rel="import" href="function_view.html">
+ <link rel="import" href="instance_view.html">
<link rel="import" href="isolate_list.html">
<link rel="import" href="library_view.html">
<link rel="import" href="observatory_element.html">
@@ -38,6 +39,24 @@
<template if="{{ messageType == 'Field' }}">
<field-view app="{{ app }}" field="{{ message }}"></field-view>
</template>
+ <template if="{{ messageType == 'Instance' }}">
+ <instance-view app="{{ app }}" instance="{{ message }}"></instance-view>
+ </template>
+ <template if="{{ messageType == 'Array' }}">
+ <instance-view app="{{ app }}" instance="{{ message }}"></instance-view>
+ </template>
+ <template if="{{ messageType == 'GrowableObjectArray' }}">
+ <instance-view app="{{ app }}" instance="{{ message }}"></instance-view>
+ </template>
+ <template if="{{ messageType == 'String' }}">
+ <instance-view app="{{ app }}" instance="{{ message }}"></instance-view>
+ </template>
+ <template if="{{ messageType == 'Bool' }}">
+ <instance-view app="{{ app }}" instance="{{ message }}"></instance-view>
+ </template>
+ <template if="{{ messageType == 'Smi' }}">
+ <instance-view app="{{ app }}" instance="{{ message }}"></instance-view>
+ </template>
<template if="{{ messageType == 'Function' }}">
<function-view app="{{ app }}" function="{{ message }}"></function-view>
</template>
diff --git a/runtime/bin/vmservice/client/lib/src/observatory_elements/observatory_application.dart b/runtime/bin/vmservice/client/lib/src/observatory_elements/observatory_application.dart
index 53dbb0b..affc779 100644
--- a/runtime/bin/vmservice/client/lib/src/observatory_elements/observatory_application.dart
+++ b/runtime/bin/vmservice/client/lib/src/observatory_elements/observatory_application.dart
@@ -13,8 +13,12 @@
/// elements.
@CustomTag('observatory-application')
class ObservatoryApplicationElement extends ObservatoryElement {
-
+ @published bool devtools = false;
ObservatoryApplicationElement.created() : super.created() {
- app = new ObservatoryApplication();
+ if (devtools) {
+ app = new ObservatoryApplication.devtools();
+ } else {
+ app = new ObservatoryApplication();
+ }
}
-}
\ No newline at end of file
+}
diff --git a/runtime/bin/vmservice/client/precommit.sh b/runtime/bin/vmservice/client/precommit.sh
index 3ce83cd..b923d9f 100755
--- a/runtime/bin/vmservice/client/precommit.sh
+++ b/runtime/bin/vmservice/client/precommit.sh
@@ -14,6 +14,7 @@
CUSTOM_ELEMENTS="packages/custom_element/custom-elements.debug.js"
INTEROP="packages/browser/interop.js"
OBSERVATORY="index.html_bootstrap.dart.precompiled.js"
+OBSERVATORY_DEVTOOLS="index_devtools.html_bootstrap.dart.precompiled.js"
# Base directory
BASE="out/web"
@@ -29,3 +30,9 @@
# Rolling
cat $INPUT > $OUTPUT
cp $BASE/index.html $DEPLOYED/index.html
+
+INPUT_DEVTOOLS="$INPUT $BASE/$OBSERVATORY_DEVTOOLS"
+OUTPUT_DEVTOOLS="$DEPLOYED/index_devtools.html_bootstrap.dart.js"
+
+cat $INPUT_DEVTOOLS > $OUTPUT_DEVTOOLS
+cp $BASE/index_devtools.html $DEPLOYED/index_devtools.html
diff --git a/runtime/bin/vmservice/client/pubspec.yaml b/runtime/bin/vmservice/client/pubspec.yaml
index 318643a..21ec1da 100644
--- a/runtime/bin/vmservice/client/pubspec.yaml
+++ b/runtime/bin/vmservice/client/pubspec.yaml
@@ -1,4 +1,4 @@
name: observatory
-version: 0.1.0
+version: 0.1.1
dependencies:
polymer: any
diff --git a/runtime/bin/vmservice/client/web/index_devtools.html b/runtime/bin/vmservice/client/web/index_devtools.html
new file mode 100644
index 0000000..25a8678
--- /dev/null
+++ b/runtime/bin/vmservice/client/web/index_devtools.html
@@ -0,0 +1,13 @@
+<!DOCTYPE html>
+<head>
+ <title>Dart VM Observatory</title>
+ <meta charset="utf-8">
+ <link type="text/css" rel="stylesheet"
+ href="bootstrap_css/css/bootstrap.min.css" />
+ <link rel="import" href="packages/observatory/observatory_elements.html">
+ <script type="application/dart">export 'package:polymer/init.dart';</script>
+ <script src="packages/browser/dart.js"></script>
+</head>
+<body>
+ <observatory-application devtools="true"></observatory-application>
+</body>
diff --git a/runtime/bin/vmservice/running_isolates.dart b/runtime/bin/vmservice/running_isolates.dart
index 0cfa02f..547b9b5 100644
--- a/runtime/bin/vmservice/running_isolates.dart
+++ b/runtime/bin/vmservice/running_isolates.dart
@@ -40,10 +40,12 @@
Future route(ServiceRequest request) {
if (request.pathSegments.length == 0) {
- return null;
+ request.setErrorResponse('No path.');
+ return new Future.value(request);
}
if (request.pathSegments[0] != 'isolates') {
- return null;
+ request.setErrorResponse('Path must begin with /isolates/.');
+ return new Future.value(request);
}
if (request.pathSegments.length == 1) {
// Requesting list of running isolates.
diff --git a/runtime/bin/vmservice/server.dart b/runtime/bin/vmservice/server.dart
index 7992b3b..19490a1 100644
--- a/runtime/bin/vmservice/server.dart
+++ b/runtime/bin/vmservice/server.dart
@@ -12,6 +12,12 @@
Server(this.service, this.port);
+ void _sendResponse(HttpRequest request, String response) {
+ request.response..headers.contentType = jsonContentType
+ ..write(response)
+ ..close();
+ }
+
void _requestHandler(HttpRequest request) {
// Allow cross origin requests.
request.response.headers.add('Access-Control-Allow-Origin', '*');
@@ -31,27 +37,17 @@
var serviceRequest = new ServiceRequest();
var r = serviceRequest.parse(request.uri);
- if (!r) {
- // Did not understand the request uri.
- serviceRequest.setErrorResponse('Invalid request uri: ${request.uri}');
- } else {
+ if (r) {
var f = service.runningIsolates.route(serviceRequest);
- if (f != null) {
- f.then((_) {
- request.response.headers.contentType = jsonContentType;
- request.response.write(serviceRequest.response);
- request.response.close();
- }).catchError((e) { });
- return;
- } else {
- // Nothing responds to this type of request.
- serviceRequest.setErrorResponse('No route for: $path');
- }
+ assert(f != null);
+ f.then((_) {
+ _sendResponse(request, serviceRequest.response);
+ }).catchError((e) {
+ // Error replying over HTTP.
+ });
+ return;
}
-
- request.response.headers.contentType = jsonContentType;
- request.response.write(serviceRequest.response);
- request.response.close();
+ _sendResponse(request, serviceRequest.response);
}
Future startServer() {
diff --git a/runtime/bin/vmservice/service_request.dart b/runtime/bin/vmservice/service_request.dart
index 4724d7c..8d7eb52 100644
--- a/runtime/bin/vmservice/service_request.dart
+++ b/runtime/bin/vmservice/service_request.dart
@@ -16,6 +16,7 @@
var path = uri.path;
var split = path.split('/');
if (split.length == 0) {
+ setErrorResponse('Invalid request uri: ${request.uri}');
return false;
}
for (int i = 0; i < split.length; i++) {
@@ -37,7 +38,7 @@
void setErrorResponse(String error) {
_response = JSON.encode({
- 'type': 'error',
+ 'type': 'Error',
'msg': error,
'pathSegments': pathSegments,
'parameters': parameters
diff --git a/runtime/bin/vmservice/vmservice.dart b/runtime/bin/vmservice/vmservice.dart
index 9c58842fe..309399f 100644
--- a/runtime/bin/vmservice/vmservice.dart
+++ b/runtime/bin/vmservice/vmservice.dart
@@ -53,4 +53,4 @@
}
void sendServiceMessage(SendPort sp, ReceivePort rp, Object m)
- native "SendServiceMessage";
+ native "VMService_SendServiceMessage";
diff --git a/runtime/bin/vmservice/vmservice_dartium.dart b/runtime/bin/vmservice/vmservice_dartium.dart
index c1520ec..249455d 100644
--- a/runtime/bin/vmservice/vmservice_dartium.dart
+++ b/runtime/bin/vmservice/vmservice_dartium.dart
@@ -13,25 +13,20 @@
RawReceivePort _requestPort;
// The native method that is called to post the response back to DevTools.
-void postResponse(String response, int cookie) native "PostResponse";
+void postResponse(String response, int cookie) native "VMService_PostResponse";
void handleRequest(service, String uri, cookie) {
var serviceRequest = new ServiceRequest();
var r = serviceRequest.parse(Uri.parse(uri));
- if (!r) {
- // Did not understand the request uri.
- serviceRequest.setErrorResponse('Invalid request uri: ${uri}');
- } else {
+ if (r) {
var f = service.runningIsolates.route(serviceRequest);
- if (f != null) {
- f.then((_) {
- postResponse(serviceRequest.response, cookie);
- }).catchError((e) { });
- return;
- } else {
- // Nothing responds to this type of request.
- serviceRequest.setErrorResponse('No route for: $uri');
- }
+ assert(f != null);
+ f.then((_) {
+ postResponse(serviceRequest.response, cookie);
+ }).catchError((e) {
+ // Error posting response back to Dartium.
+ });
+ return;
}
postResponse(serviceRequest.response, cookie);
}
diff --git a/runtime/bin/vmservice_impl.cc b/runtime/bin/vmservice_impl.cc
index 24f6f7a..74fb836 100644
--- a/runtime/bin/vmservice_impl.cc
+++ b/runtime/bin/vmservice_impl.cc
@@ -535,7 +535,7 @@
static VmServiceNativeEntry _VmServiceNativeEntries[] = {
- {"SendServiceMessage", 3, SendServiceMessage}
+ {"VMService_SendServiceMessage", 3, SendServiceMessage}
};
diff --git a/runtime/include/dart_debugger_api.h b/runtime/include/dart_debugger_api.h
index 00d9d70..c2c5aaa 100755
--- a/runtime/include/dart_debugger_api.h
+++ b/runtime/include/dart_debugger_api.h
@@ -25,6 +25,14 @@
*/
#define ILLEGAL_ISOLATE_ID ILLEGAL_PORT
+
+/**
+ * Null value for breakpoint id. Guaranteed never to be associated
+ * with a valid breakpoint.
+ */
+#define ILLEGAL_BREAKPOINT_ID 0
+
+
// DEPRECATED -- use Dart_PausedEventHandler
typedef void Dart_BreakpointHandler(Dart_IsolateId isolate_id,
Dart_Breakpoint breakpoint,
@@ -55,6 +63,7 @@
Dart_IsolateEvent kind);
typedef void Dart_PausedEventHandler(Dart_IsolateId isolate_id,
+ intptr_t bp_id,
const Dart_CodeLocation& location);
typedef void Dart_BreakpointResolvedHandler(Dart_IsolateId isolate_id,
diff --git a/runtime/lib/mirrors.cc b/runtime/lib/mirrors.cc
index d67d438..59d95bc 100644
--- a/runtime/lib/mirrors.cc
+++ b/runtime/lib/mirrors.cc
@@ -336,6 +336,7 @@
ASSERT(!cls.IsDynamicClass() && !cls.IsVoidClass());
ASSERT(!type.IsNull());
ASSERT(type.IsFinalized());
+ ASSERT(!type.IsTypeRef());
if (cls.IsSignatureClass()) {
if (cls.IsCanonicalSignatureClass()) {
@@ -382,6 +383,7 @@
static RawInstance* CreateTypeMirror(const AbstractType& type) {
ASSERT(type.IsFinalized());
ASSERT(!type.IsMalformed());
+ ASSERT(!type.IsTypeRef());
if (type.HasResolvedTypeClass()) {
const Class& cls = Class::Handle(type.type_class());
// Handle void and dynamic types.
@@ -1274,6 +1276,7 @@
const intptr_t num_inherited_args = args.Length() - num_params;
for (intptr_t i = 0; i < num_params; i++) {
arg_type ^= args.TypeAt(i + num_inherited_args);
+ arg_type = arg_type.Canonicalize(); // Necessary for recursive types.
type_mirror = CreateTypeMirror(arg_type);
result.SetAt(i, type_mirror);
}
@@ -1326,6 +1329,39 @@
const Array& args_descriptor =
Array::Handle(ArgumentsDescriptor::New(args.Length(), arg_names));
+ if (function.IsNull()) {
+ // Didn't find a method: try to find a getter and invoke call on its result.
+ const String& getter_name =
+ String::Handle(Field::GetterName(function_name));
+ function = Resolver::ResolveDynamicAnyArgs(klass, getter_name);
+ if (!function.IsNull()) {
+ ASSERT(function.kind() != RawFunction::kMethodExtractor);
+ // Invoke the getter.
+ const int kNumArgs = 1;
+ const Array& getter_args = Array::Handle(Array::New(kNumArgs));
+ getter_args.SetAt(0, reflectee);
+ const Array& getter_args_descriptor =
+ Array::Handle(ArgumentsDescriptor::New(getter_args.Length()));
+ const Instance& getter_result = Instance::Handle(
+ InvokeDynamicFunction(reflectee,
+ function,
+ getter_name,
+ getter_args,
+ getter_args_descriptor));
+ // Replace the closure as the receiver in the arguments list.
+ args.SetAt(0, getter_result);
+ // Call the closure.
+ const Object& call_result =
+ Object::Handle(DartEntry::InvokeClosure(args, args_descriptor));
+ if (call_result.IsError()) {
+ ThrowInvokeError(Error::Cast(call_result));
+ UNREACHABLE();
+ }
+ return call_result.raw();
+ }
+ }
+
+ // Found an ordinary method.
return InvokeDynamicFunction(reflectee,
function,
function_name,
@@ -1508,13 +1544,49 @@
GET_NON_NULL_NATIVE_ARGUMENT(Array, args, arguments->NativeArgAt(3));
GET_NON_NULL_NATIVE_ARGUMENT(Array, arg_names, arguments->NativeArgAt(4));
+ Function& function = Function::Handle(
+ klass.LookupStaticFunction(function_name));
+
+ if (function.IsNull()) {
+ // Didn't find a method: try to find a getter and invoke call on its result.
+ const String& getter_name =
+ String::Handle(Field::GetterName(function_name));
+ function = klass.LookupStaticFunction(getter_name);
+ if (!function.IsNull()) {
+ // Invoke the getter.
+ const Object& getter_result = Object::Handle(
+ DartEntry::InvokeFunction(function, Object::empty_array()));
+ if (getter_result.IsError()) {
+ ThrowInvokeError(Error::Cast(getter_result));
+ UNREACHABLE();
+ }
+ // Make room for the closure (receiver) in the argument list.
+ int numArgs = args.Length();
+ const Array& call_args = Array::Handle(Array::New(numArgs + 1));
+ Object& temp = Object::Handle();
+ for (int i = 0; i < numArgs; i++) {
+ temp = args.At(i);
+ call_args.SetAt(i + 1, temp);
+ }
+ call_args.SetAt(0, getter_result);
+ const Array& call_args_descriptor_array =
+ Array::Handle(ArgumentsDescriptor::New(call_args.Length(), arg_names));
+ // Call the closure.
+ const Object& call_result = Object::Handle(
+ DartEntry::InvokeClosure(call_args, call_args_descriptor_array));
+ if (call_result.IsError()) {
+ ThrowInvokeError(Error::Cast(call_result));
+ UNREACHABLE();
+ }
+ return call_result.raw();
+ }
+ }
+
const Array& args_descriptor_array =
Array::Handle(ArgumentsDescriptor::New(args.Length(), arg_names));
- const Function& function = Function::Handle(
- klass.LookupStaticFunction(function_name));
-
ArgumentsDescriptor args_descriptor(args_descriptor_array);
+
if (function.IsNull() ||
!function.AreValidArguments(args_descriptor, NULL) ||
!function.is_visible()) {
@@ -1758,13 +1830,48 @@
GET_NON_NULL_NATIVE_ARGUMENT(Array, args, arguments->NativeArgAt(3));
GET_NON_NULL_NATIVE_ARGUMENT(Array, arg_names, arguments->NativeArgAt(4));
- const Array& args_descriptor_array =
- Array::Handle(ArgumentsDescriptor::New(args.Length(), arg_names));
-
- const Function& function = Function::Handle(
+ Function& function = Function::Handle(
library.LookupLocalFunction(function_name));
+ if (function.IsNull()) {
+ // Didn't find a method: try to find a getter and invoke call on its result.
+ const String& getter_name =
+ String::Handle(Field::GetterName(function_name));
+ function = library.LookupLocalFunction(getter_name);
+ if (!function.IsNull()) {
+ // Invoke getter.
+ const Object& getter_result = Object::Handle(
+ DartEntry::InvokeFunction(function, Object::empty_array()));
+ if (getter_result.IsError()) {
+ ThrowInvokeError(Error::Cast(getter_result));
+ UNREACHABLE();
+ }
+ // Make room for the closure (receiver) in arguments.
+ int numArgs = args.Length();
+ const Array& call_args = Array::Handle(Array::New(numArgs + 1));
+ Object& temp = Object::Handle();
+ for (int i = 0; i < numArgs; i++) {
+ temp = args.At(i);
+ call_args.SetAt(i + 1, temp);
+ }
+ call_args.SetAt(0, getter_result);
+ const Array& call_args_descriptor_array =
+ Array::Handle(ArgumentsDescriptor::New(call_args.Length(), arg_names));
+ // Call closure.
+ const Object& call_result = Object::Handle(
+ DartEntry::InvokeClosure(call_args, call_args_descriptor_array));
+ if (call_result.IsError()) {
+ ThrowInvokeError(Error::Cast(call_result));
+ UNREACHABLE();
+ }
+ return call_result.raw();
+ }
+ }
+
+ const Array& args_descriptor_array =
+ Array::Handle(ArgumentsDescriptor::New(args.Length(), arg_names));
ArgumentsDescriptor args_descriptor(args_descriptor_array);
+
if (function.IsNull() ||
!function.AreValidArguments(args_descriptor, NULL) ||
!function.is_visible()) {
diff --git a/runtime/lib/mirrors_impl.dart b/runtime/lib/mirrors_impl.dart
index ec24d3e..e057fd2 100644
--- a/runtime/lib/mirrors_impl.dart
+++ b/runtime/lib/mirrors_impl.dart
@@ -160,6 +160,70 @@
}
}
+class _SyntheticAccessor implements MethodMirror {
+ final DeclarationMirror owner;
+ final Symbol simpleName;
+ final bool isGetter;
+ final bool isStatic;
+ final bool isTopLevel;
+ final _target;
+
+ _SyntheticAccessor(this.owner,
+ this.simpleName,
+ this.isGetter,
+ this.isStatic,
+ this.isTopLevel,
+ this._target);
+
+ bool get isSynthetic => true;
+ bool get isRegularMethod => false;
+ bool get isOperator => false;
+ bool get isConstructor => false;
+ bool get isConstConstructor => false;
+ bool get isGenerativeConstructor => false;
+ bool get isFactoryConstructor => false;
+ bool get isRedirectingConstructor => false;
+ bool get isAbstract => false;
+
+ bool get isSetter => !isGetter;
+ bool get isPrivate => _n(simpleName).startsWith('_');
+
+ Symbol get qualifiedName => _computeQualifiedName(owner, simpleName);
+ Symbol get constructorName => const Symbol('');
+
+ TypeMirror get returnType => _target.type;
+ List<ParameterMirror> get parameters {
+ if (isGetter) return emptyList;
+ return new UnmodifiableListView(
+ [new _SyntheticSetterParameter(this, this._target)]);
+ }
+
+ List<InstanceMirror> get metadata => emptyList;
+
+ String get source => null;
+}
+
+class _SyntheticSetterParameter implements ParameterMirror {
+ final DeclarationMirror owner;
+ final VariableMirror _target;
+
+ _SyntheticSetterParameter(this.owner, this._target);
+
+ Symbol get simpleName => _target.simpleName;
+ Symbol get qualifiedName => _computeQualifiedName(owner, simpleName);
+ TypeMirror get type => _target.type;
+
+ bool get isOptional => false;
+ bool get isNamed => false;
+ bool get isStatic => false;
+ bool get isTopLevel => false;
+ bool get isConst => false;
+ bool get isFinal => true;
+ bool get isPrivate => false;
+ bool get hasDefaultValue => false;
+ InstanceMirror get defaultValue => null;
+}
+
abstract class _LocalObjectMirror extends _LocalMirror implements ObjectMirror {
final _reflectee; // May be a MirrorReference or an ordinary object.
@@ -492,6 +556,59 @@
return _mixin;
}
+ var _cachedStaticMembers;
+ Map<Symbol, MethodMirror> get staticMembers {
+ if (_cachedStaticMembers == null) {
+ var result = new Map<Symbol, MethodMirror>();
+ declarations.values.forEach((decl) {
+ if (decl is MethodMirror && decl.isStatic &&
+ !decl.isConstructor && !decl.isAbstract) {
+ result[decl.simpleName] = decl;
+ }
+ if (decl is VariableMirror && decl.isStatic) {
+ var getterName = decl.simpleName;
+ result[getterName] =
+ new _SyntheticAccessor(this, getterName, true, true, false, decl);
+ if (!decl.isFinal) {
+ var setterName = _asSetter(decl.simpleName, this.owner);
+ result[setterName] = new _SyntheticAccessor(
+ this, setterName, false, true, false, decl);
+ }
+ }
+ });
+ _cachedStaticMembers = result;
+ }
+ return _cachedStaticMembers;
+ }
+
+ var _cachedInstanceMembers;
+ Map<Symbol, MethodMirror> get instanceMembers {
+ if (_cachedInstanceMembers == null) {
+ var result = new Map<Symbol, MethodMirror>();
+ if (superclass != null) {
+ result.addAll(superclass.instanceMembers);
+ }
+ declarations.values.forEach((decl) {
+ if (decl is MethodMirror && !decl.isStatic &&
+ !decl.isConstructor && !decl.isAbstract) {
+ result[decl.simpleName] = decl;
+ }
+ if (decl is VariableMirror && !decl.isStatic) {
+ var getterName = decl.simpleName;
+ result[getterName] =
+ new _SyntheticAccessor(this, getterName, true, false, false, decl);
+ if (!decl.isFinal) {
+ var setterName = _asSetter(decl.simpleName, this.owner);
+ result[setterName] = new _SyntheticAccessor(
+ this, setterName, false, false, false, decl);
+ }
+ }
+ });
+ _cachedInstanceMembers = result;
+ }
+ return _cachedInstanceMembers;
+ }
+
Map<Symbol, DeclarationMirror> _declarations;
Map<Symbol, DeclarationMirror> get declarations {
if (_declarations != null) return _declarations;
@@ -918,8 +1035,12 @@
native "TypedefMirror_declaration";
}
-class _LocalLibraryMirror extends _LocalObjectMirror
- implements LibraryMirror {
+Symbol _asSetter(Symbol getter, LibraryMirror library) {
+ var unwrapped = MirrorSystem.getName(getter);
+ return MirrorSystem.getSymbol('${unwrapped}=', library);
+}
+
+class _LocalLibraryMirror extends _LocalObjectMirror implements LibraryMirror {
final Symbol simpleName;
final Uri uri;
@@ -951,6 +1072,11 @@
new _UnmodifiableMapView<Symbol, DeclarationMirror>(_members);
}
+ Map<Symbol, MethodMirror> get topLevelMembers {
+ throw new UnimplementedError(
+ 'LibraryMirror.topLevelMembers is not implemented');
+ }
+
Map<Symbol, Mirror> _cachedMembers;
Map<Symbol, Mirror> get _members {
if (_cachedMembers == null) {
@@ -1050,6 +1176,7 @@
_n(constructorName).startsWith('_');
bool get isTopLevel => owner is LibraryMirror;
+ bool get isSynthetic => false;
SourceLocation get location {
throw new UnimplementedError('MethodMirror.location is not implemented');
diff --git a/runtime/lib/type_patch.dart b/runtime/lib/type_patch.dart
index 4f2dee7..67d7db5 100644
--- a/runtime/lib/type_patch.dart
+++ b/runtime/lib/type_patch.dart
@@ -13,6 +13,10 @@
class _Type extends _AbstractType {
}
+// Equivalent of RawTypeRef.
+class _TypeRef extends _AbstractType {
+}
+
// Equivalent of RawTypeParameter.
class _TypeParameter extends _AbstractType {
}
diff --git a/runtime/vm/assembler_arm.h b/runtime/vm/assembler_arm.h
index c5971e5..d2b51b8 100644
--- a/runtime/vm/assembler_arm.h
+++ b/runtime/vm/assembler_arm.h
@@ -323,6 +323,11 @@
return FLAG_use_far_branches || use_far_branches_;
}
+ void set_use_far_branches(bool b) {
+ ASSERT(buffer_.Size() == 0);
+ use_far_branches_ = b;
+ }
+
void FinalizeInstructions(const MemoryRegion& region) {
buffer_.FinalizeInstructions(region);
}
@@ -750,7 +755,7 @@
GrowableObjectArray& object_pool_; // Objects and patchable jump targets.
int32_t prologue_offset_;
- const bool use_far_branches_;
+ bool use_far_branches_;
int32_t AddObject(const Object& obj);
int32_t AddExternalLabel(const ExternalLabel* label);
diff --git a/runtime/vm/assembler_arm_test.cc b/runtime/vm/assembler_arm_test.cc
index a533cc3..58e529e 100644
--- a/runtime/vm/assembler_arm_test.cc
+++ b/runtime/vm/assembler_arm_test.cc
@@ -478,6 +478,49 @@
}
+ASSEMBLER_TEST_GENERATE(Loop2, assembler) {
+ Label loop_entry;
+ __ set_use_far_branches(true);
+ __ mov(R0, ShifterOperand(1));
+ __ mov(R1, ShifterOperand(2));
+ __ Bind(&loop_entry);
+ __ mov(R0, ShifterOperand(R0, LSL, 1));
+ __ movs(R1, ShifterOperand(R1, LSR, 1));
+ __ b(&loop_entry, NE);
+ __ bx(LR);
+}
+
+
+ASSEMBLER_TEST_RUN(Loop2, test) {
+ EXPECT(test != NULL);
+ typedef int (*Loop)();
+ EXPECT_EQ(4, EXECUTE_TEST_CODE_INT32(Loop, test->entry()));
+}
+
+
+ASSEMBLER_TEST_GENERATE(Loop3, assembler) {
+ Label loop_entry;
+ __ set_use_far_branches(true);
+ __ mov(R0, ShifterOperand(1));
+ __ mov(R1, ShifterOperand(2));
+ __ Bind(&loop_entry);
+ for (int i = 0; i < (1 << 22); i++) {
+ __ nop();
+ }
+ __ mov(R0, ShifterOperand(R0, LSL, 1));
+ __ movs(R1, ShifterOperand(R1, LSR, 1));
+ __ b(&loop_entry, NE);
+ __ bx(LR);
+}
+
+
+ASSEMBLER_TEST_RUN(Loop3, test) {
+ EXPECT(test != NULL);
+ typedef int (*Loop)();
+ EXPECT_EQ(4, EXECUTE_TEST_CODE_INT32(Loop, test->entry()));
+}
+
+
ASSEMBLER_TEST_GENERATE(LoadStore, assembler) {
__ mov(R1, ShifterOperand(123));
__ Push(R1);
diff --git a/runtime/vm/assembler_mips.cc b/runtime/vm/assembler_mips.cc
index 61469da..bcedc07 100644
--- a/runtime/vm/assembler_mips.cc
+++ b/runtime/vm/assembler_mips.cc
@@ -185,7 +185,7 @@
const int32_t dest =
label->Position() - (buffer_.Size() + Instr::kInstrSize);
if (use_far_branches() && !CanEncodeBranchOffset(dest)) {
- EmitFarBranch(b, rs, rt, label->Position());
+ EmitFarBranch(OppositeBranchOpcode(b), rs, rt, label->Position());
} else {
const uint16_t dest_off = EncodeBranchOffset(dest, 0);
EmitIType(b, rs, rt, dest_off);
@@ -210,7 +210,7 @@
const int32_t dest =
label->Position() - (buffer_.Size() + Instr::kInstrSize);
if (use_far_branches() && !CanEncodeBranchOffset(dest)) {
- EmitFarRegImmBranch(b, rs, label->Position());
+ EmitFarRegImmBranch(OppositeBranchNoLink(b), rs, label->Position());
} else {
const uint16_t dest_off = EncodeBranchOffset(dest, 0);
EmitRegImmType(REGIMM, rs, b, dest_off);
diff --git a/runtime/vm/assembler_mips.h b/runtime/vm/assembler_mips.h
index d17f05d..d30e8ee 100644
--- a/runtime/vm/assembler_mips.h
+++ b/runtime/vm/assembler_mips.h
@@ -175,6 +175,11 @@
return FLAG_use_far_branches || use_far_branches_;
}
+ void set_use_far_branches(bool b) {
+ ASSERT(buffer_.Size() == 0);
+ use_far_branches_ = b;
+ }
+
void EnterFrame();
void LeaveFrameAndReturn();
@@ -1163,7 +1168,7 @@
GrowableObjectArray& object_pool_; // Objects and patchable jump targets.
intptr_t prologue_offset_;
- const bool use_far_branches_;
+ bool use_far_branches_;
bool delay_slot_available_;
bool in_delay_slot_;
diff --git a/runtime/vm/assembler_mips_test.cc b/runtime/vm/assembler_mips_test.cc
index 620c17d..d293395 100644
--- a/runtime/vm/assembler_mips_test.cc
+++ b/runtime/vm/assembler_mips_test.cc
@@ -693,6 +693,27 @@
}
+ASSEMBLER_TEST_GENERATE(Beq_backward_far, assembler) {
+ Label l;
+
+ __ set_use_far_branches(true);
+
+ __ LoadImmediate(T1, 0);
+ __ LoadImmediate(T2, 1);
+ __ Bind(&l);
+ __ addiu(T1, T1, Immediate(1));
+ __ beq(T1, T2, &l);
+ __ ori(V0, T1, Immediate(0));
+ __ jr(RA);
+}
+
+
+ASSEMBLER_TEST_RUN(Beq_backward_far, test) {
+ typedef int (*SimpleCode)();
+ EXPECT_EQ(2, EXECUTE_TEST_CODE_INT32(SimpleCode, test->entry()));
+}
+
+
ASSEMBLER_TEST_GENERATE(Beq_backward_delay, assembler) {
Label l;
@@ -733,10 +754,12 @@
}
-ASSEMBLER_TEST_GENERATE(Beq_forward_not_taken, assembler) {
+ASSEMBLER_TEST_GENERATE(Beq_forward_taken_far, assembler) {
Label l;
- __ LoadImmediate(T5, 0);
+ __ set_use_far_branches(true);
+
+ __ LoadImmediate(T5, 1);
__ LoadImmediate(T6, 1);
__ LoadImmediate(V0, 42);
@@ -747,12 +770,82 @@
}
+ASSEMBLER_TEST_RUN(Beq_forward_taken_far, test) {
+ typedef int (*SimpleCode)();
+ EXPECT_EQ(42, EXECUTE_TEST_CODE_INT32(SimpleCode, test->entry()));
+}
+
+
+ASSEMBLER_TEST_GENERATE(Beq_forward_not_taken, assembler) {
+ Label l;
+
+ __ LoadImmediate(T5, 0);
+ __ LoadImmediate(T6, 1);
+
+ __ LoadImmediate(V0, 42);
+ __ beq(T5, T6, &l);
+ __ nop();
+ __ LoadImmediate(V0, 0);
+ __ Bind(&l);
+ __ jr(RA);
+}
+
+
ASSEMBLER_TEST_RUN(Beq_forward_not_taken, test) {
typedef int (*SimpleCode)();
EXPECT_EQ(0, EXECUTE_TEST_CODE_INT32(SimpleCode, test->entry()));
}
+ASSEMBLER_TEST_GENERATE(Beq_forward_not_taken_far, assembler) {
+ Label l;
+
+ __ set_use_far_branches(true);
+
+ __ LoadImmediate(T5, 0);
+ __ LoadImmediate(T6, 1);
+
+ __ LoadImmediate(V0, 42);
+ __ beq(T5, T6, &l);
+ __ nop();
+ __ LoadImmediate(V0, 0);
+ __ Bind(&l);
+ __ jr(RA);
+}
+
+
+ASSEMBLER_TEST_RUN(Beq_forward_not_taken_far, test) {
+ typedef int (*SimpleCode)();
+ EXPECT_EQ(0, EXECUTE_TEST_CODE_INT32(SimpleCode, test->entry()));
+}
+
+
+ASSEMBLER_TEST_GENERATE(Beq_forward_not_taken_far2, assembler) {
+ Label l;
+
+ __ set_use_far_branches(true);
+
+ __ LoadImmediate(T5, 0);
+ __ LoadImmediate(T6, 1);
+
+ __ LoadImmediate(V0, 42);
+ __ beq(T5, T6, &l);
+ __ nop();
+ for (int i = 0; i < (1 << 15); i++) {
+ __ nop();
+ }
+ __ LoadImmediate(V0, 0);
+ __ Bind(&l);
+ __ jr(RA);
+}
+
+
+ASSEMBLER_TEST_RUN(Beq_forward_not_taken_far2, test) {
+ typedef int (*SimpleCode)();
+ EXPECT_EQ(0, EXECUTE_TEST_CODE_INT32(SimpleCode, test->entry()));
+}
+
+
ASSEMBLER_TEST_GENERATE(Beq_forward_taken2, assembler) {
Label l;
@@ -775,6 +868,57 @@
}
+ASSEMBLER_TEST_GENERATE(Beq_forward_taken_far2, assembler) {
+ Label l;
+
+ __ set_use_far_branches(true);
+
+ __ LoadImmediate(T5, 1);
+ __ LoadImmediate(T6, 1);
+
+ __ LoadImmediate(V0, 42);
+ __ beq(T5, T6, &l);
+ __ nop();
+ __ nop();
+ __ LoadImmediate(V0, 0);
+ __ Bind(&l);
+ __ jr(RA);
+}
+
+
+ASSEMBLER_TEST_RUN(Beq_forward_taken_far2, test) {
+ typedef int (*SimpleCode)();
+ EXPECT_EQ(42, EXECUTE_TEST_CODE_INT32(SimpleCode, test->entry()));
+}
+
+
+ASSEMBLER_TEST_GENERATE(Beq_forward_taken_far3, assembler) {
+ Label l;
+
+ __ set_use_far_branches(true);
+
+ __ LoadImmediate(T5, 1);
+ __ LoadImmediate(T6, 1);
+
+ __ LoadImmediate(V0, 42);
+ __ beq(T5, T6, &l);
+ __ nop();
+ for (int i = 0; i < (1 << 15); i++) {
+ __ nop();
+ }
+ __ nop();
+ __ LoadImmediate(V0, 0);
+ __ Bind(&l);
+ __ jr(RA);
+}
+
+
+ASSEMBLER_TEST_RUN(Beq_forward_taken_far3, test) {
+ typedef int (*SimpleCode)();
+ EXPECT_EQ(42, EXECUTE_TEST_CODE_INT32(SimpleCode, test->entry()));
+}
+
+
ASSEMBLER_TEST_GENERATE(Beq_forward_taken_delay, assembler) {
Label l;
@@ -855,6 +999,145 @@
}
+ASSEMBLER_TEST_GENERATE(Bgez_far, assembler) {
+ Label l;
+
+ __ set_use_far_branches(true);
+
+ __ LoadImmediate(T5, 3);
+ __ Bind(&l);
+ __ bgez(T5, &l);
+ __ delay_slot()->addiu(T5, T5, Immediate(-1));
+ __ ori(V0, T5, Immediate(0));
+ __ jr(RA);
+}
+
+
+ASSEMBLER_TEST_RUN(Bgez_far, test) {
+ typedef int (*SimpleCode)();
+ EXPECT_EQ(-2, EXECUTE_TEST_CODE_INT32(SimpleCode, test->entry()));
+}
+
+
+ASSEMBLER_TEST_GENERATE(Bgez_far2, assembler) {
+ Label l;
+
+ __ set_use_far_branches(true);
+
+ __ LoadImmediate(T5, 3);
+ __ Bind(&l);
+ for (int i = 0; i < (1 << 15); i++) {
+ __ nop();
+ }
+ __ bgez(T5, &l);
+ __ delay_slot()->addiu(T5, T5, Immediate(-1));
+ __ ori(V0, T5, Immediate(0));
+ __ jr(RA);
+}
+
+
+ASSEMBLER_TEST_RUN(Bgez_far2, test) {
+ typedef int (*SimpleCode)();
+ EXPECT_EQ(-2, EXECUTE_TEST_CODE_INT32(SimpleCode, test->entry()));
+}
+
+
+ASSEMBLER_TEST_GENERATE(Bgez_taken_forward_far, assembler) {
+ Label l;
+
+ __ set_use_far_branches(true);
+
+ __ LoadImmediate(T5, 1);
+
+ __ LoadImmediate(V0, 42);
+ __ bgez(T5, &l);
+ __ nop();
+ __ nop();
+ __ LoadImmediate(V0, 0);
+ __ Bind(&l);
+ __ jr(RA);
+}
+
+
+ASSEMBLER_TEST_RUN(Bgez_taken_forward_far, test) {
+ typedef int (*SimpleCode)();
+ EXPECT_EQ(42, EXECUTE_TEST_CODE_INT32(SimpleCode, test->entry()));
+}
+
+
+ASSEMBLER_TEST_GENERATE(Bgez_taken_forward_far2, assembler) {
+ Label l;
+
+ __ set_use_far_branches(true);
+
+ __ LoadImmediate(T5, 1);
+
+ __ LoadImmediate(V0, 42);
+ __ bgez(T5, &l);
+ __ nop();
+ for (int i = 0; i < (1 << 15); i++) {
+ __ nop();
+ }
+ __ LoadImmediate(V0, 0);
+ __ Bind(&l);
+ __ jr(RA);
+}
+
+
+ASSEMBLER_TEST_RUN(Bgez_taken_forward_far2, test) {
+ typedef int (*SimpleCode)();
+ EXPECT_EQ(42, EXECUTE_TEST_CODE_INT32(SimpleCode, test->entry()));
+}
+
+
+ASSEMBLER_TEST_GENERATE(Bgez_not_taken_forward_far, assembler) {
+ Label l;
+
+ __ set_use_far_branches(true);
+
+ __ LoadImmediate(T5, -1);
+
+ __ LoadImmediate(V0, 42);
+ __ bgez(T5, &l);
+ __ nop();
+ __ nop();
+ __ LoadImmediate(V0, 0);
+ __ Bind(&l);
+ __ jr(RA);
+}
+
+
+ASSEMBLER_TEST_RUN(Bgez_not_taken_forward_far, test) {
+ typedef int (*SimpleCode)();
+ EXPECT_EQ(0, EXECUTE_TEST_CODE_INT32(SimpleCode, test->entry()));
+}
+
+
+ASSEMBLER_TEST_GENERATE(Bgez_not_taken_forward_far2, assembler) {
+ Label l;
+
+ __ set_use_far_branches(true);
+
+ __ LoadImmediate(T5, -1);
+
+ __ LoadImmediate(V0, 42);
+ __ bgez(T5, &l);
+ __ nop();
+ for (int i = 0; i < (1 << 15); i++) {
+ __ nop();
+ }
+ __ LoadImmediate(V0, 0);
+ __ Bind(&l);
+ __ jr(RA);
+}
+
+
+ASSEMBLER_TEST_RUN(Bgez_not_taken_forward_far2, test) {
+ typedef int (*SimpleCode)();
+ EXPECT_EQ(0, EXECUTE_TEST_CODE_INT32(SimpleCode, test->entry()));
+}
+
+
ASSEMBLER_TEST_GENERATE(Bgezl, assembler) {
Label l;
@@ -891,6 +1174,95 @@
}
+ASSEMBLER_TEST_GENERATE(Blez_far, assembler) {
+ Label l;
+
+ __ set_use_far_branches(true);
+
+ __ LoadImmediate(T5, -3);
+ __ Bind(&l);
+ __ blez(T5, &l);
+ __ delay_slot()->addiu(T5, T5, Immediate(1));
+ __ ori(V0, T5, Immediate(0));
+ __ jr(RA);
+}
+
+
+ASSEMBLER_TEST_RUN(Blez_far, test) {
+ typedef int (*SimpleCode)();
+ EXPECT_EQ(2, EXECUTE_TEST_CODE_INT32(SimpleCode, test->entry()));
+}
+
+
+ASSEMBLER_TEST_GENERATE(Blez_far2, assembler) {
+ Label l;
+
+ __ set_use_far_branches(true);
+
+ __ LoadImmediate(T5, -3);
+ __ Bind(&l);
+ for (int i = 0; i < (1 << 15); i++) {
+ __ nop();
+ }
+ __ blez(T5, &l);
+ __ delay_slot()->addiu(T5, T5, Immediate(1));
+ __ ori(V0, T5, Immediate(0));
+ __ jr(RA);
+}
+
+
+ASSEMBLER_TEST_RUN(Blez_far2, test) {
+ typedef int (*SimpleCode)();
+ EXPECT_EQ(2, EXECUTE_TEST_CODE_INT32(SimpleCode, test->entry()));
+}
+
+
+ASSEMBLER_TEST_GENERATE(Blez_taken_forward_far, assembler) {
+ Label l;
+
+ __ set_use_far_branches(true);
+
+ __ LoadImmediate(T5, -1);
+
+ __ LoadImmediate(V0, 42);
+ __ blez(T5, &l);
+ __ nop();
+ __ nop();
+ __ LoadImmediate(V0, 0);
+ __ Bind(&l);
+ __ jr(RA);
+}
+
+
+ASSEMBLER_TEST_RUN(Blez_taken_forward_far, test) {
+ typedef int (*SimpleCode)();
+ EXPECT_EQ(42, EXECUTE_TEST_CODE_INT32(SimpleCode, test->entry()));
+}
+
+
+ASSEMBLER_TEST_GENERATE(Blez_not_taken_forward_far, assembler) {
+ Label l;
+
+ __ set_use_far_branches(true);
+
+ __ LoadImmediate(T5, 1);
+
+ __ LoadImmediate(V0, 42);
+ __ blez(T5, &l);
+ __ nop();
+ __ nop();
+ __ LoadImmediate(V0, 0);
+ __ Bind(&l);
+ __ jr(RA);
+}
+
+
+ASSEMBLER_TEST_RUN(Blez_not_taken_forward_far, test) {
+ typedef int (*SimpleCode)();
+ EXPECT_EQ(0, EXECUTE_TEST_CODE_INT32(SimpleCode, test->entry()));
+}
+
+
ASSEMBLER_TEST_GENERATE(Blezl, assembler) {
Label l;
diff --git a/runtime/vm/ast.h b/runtime/vm/ast.h
index d9f4e91..79cde35 100644
--- a/runtime/vm/ast.h
+++ b/runtime/vm/ast.h
@@ -370,6 +370,10 @@
ASSERT(type_.IsZoneHandle());
ASSERT(!type_.IsNull());
ASSERT(type_.IsFinalized());
+ // A wellformed literal Type must be canonical.
+ ASSERT(!type_.IsType() ||
+ type_.IsMalformedOrMalbounded() ||
+ type_.IsCanonical());
}
const AbstractType& type() const { return type_; }
diff --git a/runtime/vm/class_finalizer.cc b/runtime/vm/class_finalizer.cc
index 01e40a8..b1401e1 100644
--- a/runtime/vm/class_finalizer.cc
+++ b/runtime/vm/class_finalizer.cc
@@ -491,11 +491,13 @@
}
-void ClassFinalizer::FinalizeTypeParameters(const Class& cls) {
+void ClassFinalizer::FinalizeTypeParameters(
+ const Class& cls,
+ GrowableObjectArray* pending_types) {
if (cls.IsMixinApplication()) {
// Setup the type parameters of the mixin application and finalize the
// mixin type.
- ApplyMixinType(cls);
+ ApplyMixinType(cls, pending_types);
}
// The type parameter bounds are not finalized here.
const TypeArguments& type_parameters =
@@ -505,9 +507,8 @@
const intptr_t num_types = type_parameters.Length();
for (intptr_t i = 0; i < num_types; i++) {
type_parameter ^= type_parameters.TypeAt(i);
- type_parameter ^= FinalizeType(cls,
- type_parameter,
- kCanonicalizeWellFormed);
+ type_parameter ^= FinalizeType(
+ cls, type_parameter, kFinalize, pending_types);
type_parameters.SetTypeAt(i, type_parameter);
}
}
@@ -541,50 +542,46 @@
// num_uninitialized_arguments = 1,
// i.e. cls_args = [String, double], offset = 1, length = 2.
// Output: arguments = [int, String, double]
+//
+// It is too early to canonicalize the type arguments of the vector, because
+// several type argument vectors may be mutually recursive and finalized at the
+// same time. Canonicalization happens when pending types are processed.
void ClassFinalizer::FinalizeTypeArguments(
const Class& cls,
const AbstractTypeArguments& arguments,
intptr_t num_uninitialized_arguments,
- FinalizationKind finalization,
- Error* bound_error) {
+ Error* bound_error,
+ GrowableObjectArray* pending_types) {
ASSERT(arguments.Length() >= cls.NumTypeArguments());
if (!cls.is_type_finalized()) {
- FinalizeTypeParameters(cls);
+ FinalizeTypeParameters(cls, pending_types);
ResolveUpperBounds(cls);
}
AbstractType& super_type = AbstractType::Handle(cls.super_type());
if (!super_type.IsNull()) {
const Class& super_class = Class::Handle(super_type.type_class());
- AbstractTypeArguments& super_type_args = AbstractTypeArguments::Handle();
- if (super_type.IsBeingFinalized()) {
- // This type references itself via its type arguments. This is legal, but
- // we must avoid endless recursion. We therefore map the innermost
- // super type to dynamic.
- // Note that a direct self-reference via the super class chain is illegal
- // and reported as an error earlier.
- // Such legal self-references occur with F-bounded quantification.
- // Example 1: class Derived extends Base<Derived>.
- // The type 'Derived' forms a cycle by pointing to itself via its
- // flattened type argument vector: Derived[Derived[...]]
- // We break the cycle as follows: Derived[Derived[dynamic]]
- // Example 2: class Derived extends Base<Middle<Derived>> results in
- // Derived[Middle[Derived[dynamic]]]
- // Example 3: class Derived<T> extends Base<Derived<T>> results in
- // Derived[Derived[dynamic], T].
- ASSERT(super_type_args.IsNull()); // Same as a vector of dynamic.
- } else {
- super_type ^= FinalizeType(cls, super_type, finalization);
- cls.set_super_type(super_type);
- super_type_args = super_type.arguments();
- }
const intptr_t num_super_type_params = super_class.NumTypeParameters();
- const intptr_t offset = super_class.NumTypeArguments();
- const intptr_t super_offset = offset - num_super_type_params;
- ASSERT(offset == (cls.NumTypeArguments() - cls.NumOwnTypeArguments()));
+ const intptr_t num_super_type_args = super_class.NumTypeArguments();
+ ASSERT(num_super_type_args ==
+ (cls.NumTypeArguments() - cls.NumOwnTypeArguments()));
+ if (!super_type.IsFinalized() && !super_type.IsBeingFinalized()) {
+ super_type ^= FinalizeType(
+ cls, super_type, kFinalize, pending_types);
+ cls.set_super_type(super_type);
+ }
+ AbstractTypeArguments& super_type_args = AbstractTypeArguments::Handle(
+ super_type.arguments());
+ // Offset of super type's type parameters in cls' type argument vector.
+ const intptr_t super_offset = num_super_type_args - num_super_type_params;
AbstractType& super_type_arg = AbstractType::Handle(Type::DynamicType());
- for (intptr_t i = 0; super_offset + i < num_uninitialized_arguments; i++) {
+ for (intptr_t i = super_offset; i < num_uninitialized_arguments; i++) {
if (!super_type_args.IsNull()) {
- super_type_arg = super_type_args.TypeAt(super_offset + i);
+ super_type_arg = super_type_args.TypeAt(i);
+ if (!super_type_arg.IsFinalized()) {
+ super_type_arg ^= FinalizeType(
+ cls, super_type_arg, kFinalize, pending_types);
+ super_type_args.SetTypeAt(i, super_type_arg);
+ }
if (!super_type_arg.IsInstantiated()) {
Error& error = Error::Handle();
super_type_arg = super_type_arg.InstantiateFrom(arguments, &error);
@@ -599,14 +596,11 @@
}
}
}
- if (finalization >= kCanonicalize) {
- super_type_arg = super_type_arg.Canonicalize();
- }
}
- arguments.SetTypeAt(super_offset + i, super_type_arg);
+ arguments.SetTypeAt(i, super_type_arg);
}
FinalizeTypeArguments(super_class, arguments, super_offset,
- finalization, bound_error);
+ bound_error, pending_types);
}
}
@@ -647,6 +641,7 @@
if (type_arg.IsDynamicType()) {
continue;
}
+ ASSERT(type_arg.IsFinalized());
cls_type_param = cls_type_params.TypeAt(i);
const TypeParameter& type_param = TypeParameter::Cast(cls_type_param);
ASSERT(type_param.IsFinalized());
@@ -700,9 +695,53 @@
}
-RawAbstractType* ClassFinalizer::FinalizeType(const Class& cls,
- const AbstractType& type,
- FinalizationKind finalization) {
+void ClassFinalizer::CheckTypeBounds(const Class& cls, const Type& type) {
+ ASSERT(type.IsFinalized());
+ AbstractTypeArguments& arguments =
+ AbstractTypeArguments::Handle(type.arguments());
+ if (arguments.IsNull()) {
+ return;
+ }
+ Class& owner_class = Class::Handle();
+ Class& type_class = Class::Handle(type.type_class());
+ if (type_class.IsSignatureClass()) {
+ const Function& signature_fun =
+ Function::Handle(type_class.signature_function());
+ ASSERT(!signature_fun.is_static());
+ owner_class = signature_fun.Owner();
+ } else {
+ owner_class = type_class.raw();
+ }
+ Error& bound_error = Error::Handle();
+ CheckTypeArgumentBounds(owner_class, arguments, &bound_error);
+ type.set_arguments(arguments);
+ // If a bound error occurred, mark the type as malbounded.
+ // The bound error will be ignored in production mode.
+ if (!bound_error.IsNull()) {
+ // No compile-time error during finalization.
+ const String& type_name = String::Handle(type.UserVisibleName());
+ FinalizeMalboundedType(bound_error,
+ Script::Handle(cls.script()),
+ type,
+ "type '%s' has an out of bound type argument",
+ type_name.ToCString());
+ if (FLAG_trace_type_finalization) {
+ OS::Print("Marking type '%s' as malbounded: %s\n",
+ String::Handle(type.Name()).ToCString(),
+ bound_error.ToCString());
+ }
+ }
+}
+
+
+RawAbstractType* ClassFinalizer::FinalizeType(
+ const Class& cls,
+ const AbstractType& type,
+ FinalizationKind finalization,
+ GrowableObjectArray* pending_types) {
+ // Only the 'root' type of the graph can be canonicalized, after all depending
+ // types have been bound checked.
+ ASSERT((pending_types == NULL) || (finalization < kCanonicalize));
if (type.IsFinalized()) {
// Ensure type is canonical if canonicalization is requested, unless type is
// malformed.
@@ -714,6 +753,21 @@
ASSERT(type.IsResolved());
ASSERT(finalization >= kFinalize);
+ if (type.IsTypeRef()) {
+ // The referenced type will be finalized later by the code that set the
+ // is_being_finalized mark bit.
+ return type.raw();
+ }
+
+ if (type.IsBeingFinalized()) {
+ if (FLAG_trace_type_finalization) {
+ OS::Print("Creating TypeRef '%s' for class '%s'\n",
+ String::Handle(type.Name()).ToCString(),
+ cls.ToCString());
+ }
+ return TypeRef::New(type);
+ }
+
if (FLAG_trace_type_finalization) {
OS::Print("Finalizing type '%s' for class '%s'\n",
String::Handle(type.Name()).ToCString(),
@@ -754,11 +808,14 @@
// At this point, we can only have a parameterized_type.
const Type& parameterized_type = Type::Cast(type);
- // Types illegally referring to themselves should have been detected earlier.
- ASSERT(!parameterized_type.IsBeingFinalized());
-
- // Mark type as being finalized in order to detect illegal self reference.
- parameterized_type.set_is_being_finalized();
+ // This type is the root type of the type graph if no pending types queue is
+ // allocated yet.
+ const bool is_root_type = (pending_types == NULL);
+ GrowableObjectArray& types = GrowableObjectArray::Handle();
+ if (is_root_type) {
+ types = GrowableObjectArray::New();
+ pending_types = &types;
+ }
// The type class does not need to be finalized in order to finalize the type,
// however, it must at least be resolved (this was done as part of resolving
@@ -767,28 +824,10 @@
// parameters of the type class must be finalized.
Class& type_class = Class::Handle(parameterized_type.type_class());
if (!type_class.is_type_finalized()) {
- FinalizeTypeParameters(type_class);
+ FinalizeTypeParameters(type_class, pending_types);
ResolveUpperBounds(type_class);
}
- // Finalize the current type arguments of the type, which are still the
- // parsed type arguments.
- AbstractTypeArguments& arguments =
- AbstractTypeArguments::Handle(parameterized_type.arguments());
- if (!arguments.IsNull()) {
- const intptr_t num_arguments = arguments.Length();
- AbstractType& type_argument = AbstractType::Handle();
- for (intptr_t i = 0; i < num_arguments; i++) {
- type_argument = arguments.TypeAt(i);
- type_argument = FinalizeType(cls, type_argument, finalization);
- if (type_argument.IsMalformed()) {
- // Malformed type arguments are mapped to dynamic.
- type_argument = Type::DynamicType();
- }
- arguments.SetTypeAt(i, type_argument);
- }
- }
-
// The finalized type argument vector needs num_type_arguments types.
const intptr_t num_type_arguments = type_class.NumTypeArguments();
// The type class has num_type_parameters type parameters.
@@ -798,6 +837,8 @@
// Check the number of parsed type arguments, if any.
// Specifying no type arguments indicates a raw type, which is not an error.
// However, type parameter bounds are checked below, even for a raw type.
+ AbstractTypeArguments& arguments =
+ AbstractTypeArguments::Handle(parameterized_type.arguments());
if (!arguments.IsNull() && (arguments.Length() != num_type_parameters)) {
// Wrong number of type arguments. The type is mapped to the raw type.
if (FLAG_error_on_bad_type) {
@@ -813,6 +854,7 @@
arguments = AbstractTypeArguments::null();
parameterized_type.set_arguments(arguments);
}
+
// The full type argument vector consists of the type arguments of the
// super types of type_class, which are initialized from the parsed
// type arguments, followed by the parsed type arguments.
@@ -827,6 +869,7 @@
// argument vector.
const intptr_t offset = num_type_arguments - num_type_parameters;
AbstractType& type_arg = AbstractType::Handle(Type::DynamicType());
+ // TODO(regis): Leave the temporary type argument values as null.
for (intptr_t i = 0; i < offset; i++) {
// Temporarily set the type arguments of the super classes to dynamic.
full_arguments.SetTypeAt(i, type_arg);
@@ -836,8 +879,8 @@
// create a vector of dynamic.
if (!arguments.IsNull()) {
type_arg = arguments.TypeAt(i);
+ // The parsed type_arg may or may not be finalized.
}
- ASSERT(type_arg.IsFinalized()); // Index of type parameter is adjusted.
full_arguments.SetTypeAt(offset + i, type_arg);
}
// Replace the compile-time argument vector (of length zero or
@@ -847,6 +890,22 @@
// checking, in which case type arguments of super classes will be seen
// as dynamic.
parameterized_type.set_arguments(full_arguments);
+ // Mark type as being finalized in order to detect self reference.
+ parameterized_type.set_is_being_finalized();
+ // Finalize the current type arguments of the type, which are still the
+ // parsed type arguments.
+ if (!arguments.IsNull()) {
+ for (intptr_t i = 0; i < num_type_parameters; i++) {
+ type_arg = full_arguments.TypeAt(offset + i);
+ ASSERT(!type_arg.IsBeingFinalized());
+ type_arg = FinalizeType(cls, type_arg, kFinalize, pending_types);
+ if (type_arg.IsMalformed()) {
+ // Malformed type arguments are mapped to dynamic.
+ type_arg = Type::DynamicType();
+ }
+ full_arguments.SetTypeAt(offset + i, type_arg);
+ }
+ }
// If the type class is a signature class, the full argument vector
// must include the argument vector of the super type.
// If the signature class is a function type alias, it is also the owner
@@ -855,32 +914,27 @@
// signature function may either be an alias or the enclosing class of a
// local function, in which case the super type of the enclosing class is
// also considered when filling up the argument vector.
+ Class& owner_class = Class::Handle();
if (type_class.IsSignatureClass()) {
const Function& signature_fun =
Function::Handle(type_class.signature_function());
ASSERT(!signature_fun.is_static());
- const Class& sig_fun_owner = Class::Handle(signature_fun.Owner());
- if (offset > 0) {
- FinalizeTypeArguments(sig_fun_owner, full_arguments, offset,
- finalization, &bound_error);
- }
- CheckTypeArgumentBounds(sig_fun_owner, full_arguments, &bound_error);
+ owner_class = signature_fun.Owner();
} else {
- if (offset > 0) {
- FinalizeTypeArguments(type_class, full_arguments, offset,
- finalization, &bound_error);
- }
- CheckTypeArgumentBounds(type_class, full_arguments, &bound_error);
+ owner_class = type_class.raw();
+ }
+ if (offset > 0) {
+ FinalizeTypeArguments(owner_class, full_arguments, offset,
+ &bound_error, pending_types);
}
if (full_arguments.IsRaw(0, num_type_arguments)) {
// The parameterized_type is raw. Set its argument vector to null, which
// is more efficient in type tests.
full_arguments = TypeArguments::null();
- } else if (finalization >= kCanonicalize) {
- // FinalizeTypeArguments can modify 'full_arguments',
- // canonicalize afterwards.
- full_arguments ^= full_arguments.Canonicalize();
- ASSERT(full_arguments.Length() == num_type_arguments);
+ } else {
+ // Postpone bound checking until after all types in the graph of
+ // mutually recursive types are finalized.
+ pending_types->Add(parameterized_type);
}
parameterized_type.set_arguments(full_arguments);
} else {
@@ -890,10 +944,22 @@
// Self referencing types may get finalized indirectly.
if (!parameterized_type.IsFinalized()) {
+ ASSERT(full_arguments.IsNull() ||
+ !full_arguments.IsRaw(0, num_type_arguments));
// Mark the type as finalized.
parameterized_type.SetIsFinalized();
}
+ // If we are done finalizing a graph of mutually recursive types, check their
+ // bounds.
+ if (is_root_type) {
+ Type& type = Type::Handle();
+ for (intptr_t i = 0; i < types.Length(); i++) {
+ type ^= types.At(i);
+ CheckTypeBounds(cls, type);
+ }
+ }
+
// If the type class is a signature class, we are currently finalizing a
// signature type, i.e. finalizing the result type and parameter types of the
// signature function of this signature type.
@@ -905,32 +971,12 @@
FinalizeTypesInClass(type_class);
}
- // If a bound error occurred, mark the type as malbounded.
- // The bound error will be ignored in production mode.
- if (!bound_error.IsNull()) {
- // No compile-time error during finalization.
- const String& parameterized_type_name = String::Handle(
- parameterized_type.UserVisibleName());
- FinalizeMalboundedType(bound_error,
- Script::Handle(cls.script()),
- parameterized_type,
- "type '%s' has an out of bound type argument",
- parameterized_type_name.ToCString());
-
- if (FLAG_trace_type_finalization) {
- OS::Print("Done finalizing malbounded type '%s' with bound error: %s\n",
- String::Handle(parameterized_type.Name()).ToCString(),
- bound_error.ToCString());
- }
-
- return parameterized_type.raw();;
- }
-
if (FLAG_trace_type_finalization) {
- OS::Print("Done finalizing type '%s' with %" Pd " type args\n",
+ OS::Print("Done finalizing type '%s' with %" Pd " type args: %s\n",
String::Handle(parameterized_type.Name()).ToCString(),
parameterized_type.arguments() == AbstractTypeArguments::null() ?
- 0 : num_type_arguments);
+ 0 : num_type_arguments,
+ parameterized_type.ToCString());
}
if (finalization >= kCanonicalize) {
@@ -1689,7 +1735,8 @@
}
-void ClassFinalizer::ApplyMixinType(const Class& mixin_app_class) {
+void ClassFinalizer::ApplyMixinType(const Class& mixin_app_class,
+ GrowableObjectArray* pending_types) {
if (mixin_app_class.is_mixin_type_applied()) {
return;
}
@@ -1760,7 +1807,7 @@
mixin_type = mixin_app_class.mixin();
ASSERT(!mixin_type.IsBeingFinalized());
mixin_type ^=
- FinalizeType(mixin_app_class, mixin_type, kCanonicalizeWellFormed);
+ FinalizeType(mixin_app_class, mixin_type, kFinalize, pending_types);
// TODO(14453): Check for a malbounded mixin_type.
mixin_app_class.set_mixin(mixin_type);
}
diff --git a/runtime/vm/class_finalizer.h b/runtime/vm/class_finalizer.h
index 91ec1ff..9dc56d3 100644
--- a/runtime/vm/class_finalizer.h
+++ b/runtime/vm/class_finalizer.h
@@ -33,19 +33,19 @@
kIgnore, // Type is ignored and replaced by dynamic.
kDoNotResolve, // Type resolution is postponed.
kResolveTypeParameters, // Resolve type parameters only.
- kFinalize, // Type resolution and type finalization are
- // required; replace a malformed type by dynamic.
+ kFinalize, // Type resolution and finalization are required.
kCanonicalize, // Same as kFinalize, but with canonicalization.
kCanonicalizeWellFormed // Error-free resolution, finalization, and
- // canonicalization are required; a malformed
- // type is marked as such.
+ // canonicalization are required.
};
// Finalize given type while parsing class cls.
// Also canonicalize type if applicable.
- static RawAbstractType* FinalizeType(const Class& cls,
- const AbstractType& type,
- FinalizationKind finalization);
+ static RawAbstractType* FinalizeType(
+ const Class& cls,
+ const AbstractType& type,
+ FinalizationKind finalization,
+ GrowableObjectArray* pending_types = NULL);
// Allocate, finalize, and return a new malformed type as if it was declared
// in class cls at the given token position.
@@ -102,7 +102,8 @@
const Function& factory);
// Apply the mixin type to the mixin application class.
- static void ApplyMixinType(const Class& mixin_app_class);
+ static void ApplyMixinType(const Class& mixin_app_class,
+ GrowableObjectArray* pending_types = NULL);
private:
static bool IsSuperCycleFree(const Class& cls);
@@ -133,12 +134,14 @@
const MixinAppType& mixin_app_type);
static void ResolveSuperTypeAndInterfaces(const Class& cls,
GrowableArray<intptr_t>* visited);
- static void FinalizeTypeParameters(const Class& cls);
+ static void FinalizeTypeParameters(const Class& cls,
+ GrowableObjectArray* pending_types = NULL);
static void FinalizeTypeArguments(const Class& cls,
const AbstractTypeArguments& arguments,
intptr_t num_uninitialized_arguments,
- FinalizationKind finalization,
- Error* bound_error);
+ Error* bound_error,
+ GrowableObjectArray* pending_types);
+ static void CheckTypeBounds(const Class& cls, const Type& type);
static void CheckTypeArgumentBounds(const Class& cls,
const AbstractTypeArguments& arguments,
Error* bound_error);
diff --git a/runtime/vm/compiler.cc b/runtime/vm/compiler.cc
index 64fdad3..90f22b4 100644
--- a/runtime/vm/compiler.cc
+++ b/runtime/vm/compiler.cc
@@ -385,6 +385,11 @@
optimizer.ApplyClassIds();
DEBUG_ASSERT(flow_graph->VerifyUseLists());
+ // Propagate types for potentially newly added instructions by
+ // ApplyClassIds(). Must occur before canonicalization.
+ FlowGraphTypePropagator::Propagate(flow_graph);
+ DEBUG_ASSERT(flow_graph->VerifyUseLists());
+
// Do optimizations that depend on the propagated type information.
if (optimizer.Canonicalize()) {
// Invoke Canonicalize twice in order to fully canonicalize patterns
diff --git a/runtime/vm/debugger.cc b/runtime/vm/debugger.cc
index f84dc2e..bd9cbf3 100644
--- a/runtime/vm/debugger.cc
+++ b/runtime/vm/debugger.cc
@@ -155,8 +155,7 @@
if (event_handler_ != NULL) {
Debugger* debugger = Isolate::Current()->debugger();
ASSERT(debugger != NULL);
- DebuggerEvent event;
- event.type = type;
+ DebuggerEvent event(type);
event.isolate_id = debugger->GetIsolateId();
ASSERT(event.isolate_id != ILLEGAL_ISOLATE_ID);
if (type == kIsolateInterrupted) {
@@ -239,7 +238,7 @@
RawLibrary* ActivationFrame::Library() {
- const Class& cls = Class::Handle(function().Owner());
+ const Class& cls = Class::Handle(function().origin());
return cls.library();
}
@@ -1044,8 +1043,7 @@
void Debugger::SignalBpResolved(SourceBreakpoint* bpt) {
if (event_handler_ != NULL) {
- DebuggerEvent event;
- event.type = kBreakpointResolved;
+ DebuggerEvent event(kBreakpointResolved);
event.breakpoint = bpt;
(*event_handler_)(&event);
}
@@ -1390,8 +1388,7 @@
ASSERT(obj_cache_ == NULL);
in_event_notification_ = true;
obj_cache_ = new RemoteObjectCache(64);
- DebuggerEvent event;
- event.type = kExceptionThrown;
+ DebuggerEvent event(kExceptionThrown);
event.exception = &exc;
(*event_handler_)(&event);
in_event_notification_ = false;
@@ -1883,16 +1880,17 @@
}
-void Debugger::SignalPausedEvent(ActivationFrame* top_frame) {
+void Debugger::SignalPausedEvent(ActivationFrame* top_frame,
+ SourceBreakpoint* bpt) {
resume_action_ = kContinue;
isolate_->set_single_step(false);
ASSERT(!in_event_notification_);
ASSERT(obj_cache_ == NULL);
in_event_notification_ = true;
obj_cache_ = new RemoteObjectCache(64);
- DebuggerEvent event;
- event.type = kBreakpointReached;
+ DebuggerEvent event(kBreakpointReached);
event.top_frame = top_frame;
+ event.breakpoint = bpt;
(*event_handler_)(&event);
in_event_notification_ = false;
obj_cache_ = NULL; // Remote object cache is zone allocated.
@@ -1929,7 +1927,7 @@
}
stack_trace_ = CollectStackTrace();
- SignalPausedEvent(frame);
+ SignalPausedEvent(frame, NULL);
RemoveInternalBreakpoints();
if (resume_action_ == kStepOver) {
@@ -1975,7 +1973,7 @@
if (report_bp && (event_handler_ != NULL)) {
stack_trace_ = stack_trace;
- SignalPausedEvent(top_frame);
+ SignalPausedEvent(top_frame, bpt->src_bpt_);
stack_trace_ = NULL;
}
diff --git a/runtime/vm/debugger.h b/runtime/vm/debugger.h
index f68c023..f70debf 100644
--- a/runtime/vm/debugger.h
+++ b/runtime/vm/debugger.h
@@ -254,13 +254,22 @@
kIsolateInterrupted = 6,
};
struct DebuggerEvent {
+ explicit DebuggerEvent(EventType event_type)
+ : type(event_type) {
+ top_frame = NULL;
+ breakpoint = NULL;
+ exception = NULL;
+ isolate_id = 0;
+ }
EventType type;
- union {
- ActivationFrame* top_frame;
- SourceBreakpoint* breakpoint;
- const Object* exception;
- Dart_Port isolate_id;
- };
+ // type == kBreakpointReached.
+ ActivationFrame* top_frame;
+ // type == kBreakpointResolved, kBreakpointReached.
+ SourceBreakpoint* breakpoint;
+ // type == kExceptionThrown.
+ const Object* exception;
+ // type == kIsolate(Created|Shutdown|Interrupted).
+ Dart_Port isolate_id;
};
typedef void EventHandler(DebuggerEvent *event);
@@ -391,7 +400,8 @@
const Code& code);
static DebuggerStackTrace* CollectStackTraceNew();
void SignalBpResolved(SourceBreakpoint *bpt);
- void SignalPausedEvent(ActivationFrame* top_frame);
+ void SignalPausedEvent(ActivationFrame* top_frame,
+ SourceBreakpoint* bpt);
intptr_t nextId() { return next_id_++; }
diff --git a/runtime/vm/debugger_api_impl.cc b/runtime/vm/debugger_api_impl.cc
index dcee7a7..a2ec598 100644
--- a/runtime/vm/debugger_api_impl.cc
+++ b/runtime/vm/debugger_api_impl.cc
@@ -127,7 +127,12 @@
const Library& lib = Library::Handle(top_frame->Library());
location.library_id = lib.index();
location.token_pos = top_frame->TokenPos();
- (*paused_event_handler)(isolate_id, location);
+ intptr_t bp_id = 0;
+ if (event->breakpoint != NULL) {
+ ASSERT(event->breakpoint->id() != ILLEGAL_BREAKPOINT_ID);
+ bp_id = event->breakpoint->id();
+ }
+ (*paused_event_handler)(isolate_id, bp_id, location);
}
} else if (event->type == Debugger::kBreakpointResolved) {
if (bp_resolved_handler != NULL) {
diff --git a/runtime/vm/debugger_api_impl_test.cc b/runtime/vm/debugger_api_impl_test.cc
index 18771f0..9089e5c 100644
--- a/runtime/vm/debugger_api_impl_test.cc
+++ b/runtime/vm/debugger_api_impl_test.cc
@@ -389,6 +389,7 @@
static void InspectOptimizedStack_Breakpoint(Dart_IsolateId isolate_id,
+ intptr_t bp_id,
const Dart_CodeLocation& loc) {
Dart_StackTrace trace;
Dart_GetStackTrace(&trace);
@@ -583,6 +584,7 @@
void TestStepOutHandler(Dart_IsolateId isolate_id,
+ intptr_t bp_id,
const Dart_CodeLocation& location) {
Dart_StackTrace trace;
Dart_GetStackTrace(&trace);
@@ -647,6 +649,7 @@
void TestStepIntoHandler(Dart_IsolateId isolate_id,
+ intptr_t bp_id,
const Dart_CodeLocation& location) {
Dart_StackTrace trace;
Dart_GetStackTrace(&trace);
@@ -728,6 +731,7 @@
static void StepIntoHandler(Dart_IsolateId isolate_id,
+ intptr_t bp_id,
const Dart_CodeLocation& location) {
Dart_StackTrace trace;
Dart_GetStackTrace(&trace);
@@ -810,6 +814,7 @@
void TestSingleStepHandler(Dart_IsolateId isolate_id,
+ intptr_t bp_id,
const Dart_CodeLocation& location) {
Dart_StackTrace trace;
Dart_GetStackTrace(&trace);
@@ -869,6 +874,7 @@
static void ClosureBreakpointHandler(Dart_IsolateId isolate_id,
+ intptr_t bp_id,
const Dart_CodeLocation& location) {
Dart_StackTrace trace;
Dart_GetStackTrace(&trace);
@@ -923,6 +929,7 @@
static void ExprClosureBreakpointHandler(Dart_IsolateId isolate_id,
+ intptr_t bp_id,
const Dart_CodeLocation& location) {
Dart_StackTrace trace;
Dart_GetStackTrace(&trace);
@@ -971,6 +978,7 @@
static intptr_t bp_id_to_be_deleted;
static void DeleteBreakpointHandler(Dart_IsolateId isolate_id,
+ intptr_t bp_id,
const Dart_CodeLocation& location) {
Dart_StackTrace trace;
Dart_GetStackTrace(&trace);
@@ -997,7 +1005,8 @@
// Remove the breakpoint after we've hit it twice
if (breakpoint_hit_counter == 2) {
if (verbose) OS::Print("uninstalling breakpoint\n");
- Dart_Handle res = Dart_RemoveBreakpoint(bp_id_to_be_deleted);
+ EXPECT_EQ(bp_id_to_be_deleted, bp_id);
+ Dart_Handle res = Dart_RemoveBreakpoint(bp_id);
EXPECT_VALID(res);
}
}
@@ -1041,6 +1050,7 @@
static void InspectStaticFieldHandler(Dart_IsolateId isolate_id,
+ intptr_t bp_id,
const Dart_CodeLocation& location) {
Dart_StackTrace trace;
Dart_GetStackTrace(&trace);
@@ -1419,6 +1429,7 @@
static void StackTraceDump1BreakpointHandler(
Dart_IsolateId isolate_id,
+ intptr_t bp_id,
const Dart_CodeLocation& location) {
Dart_StackTrace trace;
Dart_GetStackTrace(&trace);
@@ -1736,6 +1747,7 @@
void TestEvaluateHandler(Dart_IsolateId isolate_id,
+ intptr_t bp_id,
const Dart_CodeLocation& location) {
Dart_StackTrace trace;
Dart_GetStackTrace(&trace);
diff --git a/runtime/vm/flow_graph_optimizer.cc b/runtime/vm/flow_graph_optimizer.cc
index 8c4febc..9e89082 100644
--- a/runtime/vm/flow_graph_optimizer.cc
+++ b/runtime/vm/flow_graph_optimizer.cc
@@ -101,7 +101,6 @@
ASSERT(call->HasICData());
if (call->ic_data()->NumberOfChecks() > 0) {
// This occurs when an instance call has too many checks.
- // TODO(srdjan): Replace IC call with megamorphic call.
return false;
}
GrowableArray<intptr_t> class_ids(call->ic_data()->num_args_tested());
@@ -110,39 +109,45 @@
intptr_t cid = call->PushArgumentAt(i)->value()->Type()->ToCid();
class_ids.Add(cid);
}
- // TODO(srdjan): Test for number of arguments checked greater than 1.
- if (class_ids.length() != 1) {
- return false;
- }
- if (class_ids[0] != kDynamicCid) {
- ArgumentsDescriptor args_desc(
- Array::Handle(ArgumentsDescriptor::New(call->ArgumentCount(),
- call->argument_names())));
- const Class& receiver_class = Class::Handle(
- Isolate::Current()->class_table()->At(class_ids[0]));
- const Function& function = Function::Handle(
- Resolver::ResolveDynamicForReceiverClass(
- receiver_class,
- call->function_name(),
- args_desc));
- if (function.IsNull()) {
+
+ for (intptr_t i = 0; i < class_ids.length(); i++) {
+ if (class_ids[i] == kDynamicCid) {
+ // Not all cid-s known.
return false;
}
- // Create new ICData, do not modify the one attached to the instruction
- // since it is attached to the assembly instruction itself.
- // TODO(srdjan): Prevent modification of ICData object that is
- // referenced in assembly code.
- ICData& ic_data = ICData::ZoneHandle(ICData::New(
- flow_graph_->parsed_function().function(),
- call->function_name(),
- Object::empty_array(), // Dummy argument descriptor.
- call->deopt_id(),
- class_ids.length()));
- ic_data.AddReceiverCheck(class_ids[0], function);
- call->set_ic_data(&ic_data);
- return true;
}
- return false;
+
+ ArgumentsDescriptor args_desc(
+ Array::Handle(ArgumentsDescriptor::New(call->ArgumentCount(),
+ call->argument_names())));
+ const Class& receiver_class = Class::Handle(
+ Isolate::Current()->class_table()->At(class_ids[0]));
+ const Function& function = Function::Handle(
+ Resolver::ResolveDynamicForReceiverClass(
+ receiver_class,
+ call->function_name(),
+ args_desc));
+ if (function.IsNull()) {
+ return false;
+ }
+ // Create new ICData, do not modify the one attached to the instruction
+ // since it is attached to the assembly instruction itself.
+ // TODO(srdjan): Prevent modification of ICData object that is
+ // referenced in assembly code.
+ ICData& ic_data = ICData::ZoneHandle(ICData::New(
+ flow_graph_->parsed_function().function(),
+ call->function_name(),
+ Object::empty_array(), // Dummy argument descriptor.
+ call->deopt_id(),
+ class_ids.length()));
+ if (class_ids.length() > 1) {
+ ic_data.AddCheck(class_ids, function);
+ } else {
+ ASSERT(class_ids.length() == 1);
+ ic_data.AddReceiverCheck(class_ids[0], function);
+ }
+ call->set_ic_data(&ic_data);
+ return true;
}
@@ -6905,20 +6910,17 @@
}
-void ConstantPropagator::VisitBinaryMintOp(
- BinaryMintOpInstr* instr) {
+void ConstantPropagator::VisitBinaryMintOp(BinaryMintOpInstr* instr) {
HandleBinaryOp(instr, instr->op_kind(), *instr->left(), *instr->right());
}
-void ConstantPropagator::VisitShiftMintOp(
- ShiftMintOpInstr* instr) {
+void ConstantPropagator::VisitShiftMintOp(ShiftMintOpInstr* instr) {
HandleBinaryOp(instr, instr->op_kind(), *instr->left(), *instr->right());
}
-void ConstantPropagator::VisitUnaryMintOp(
- UnaryMintOpInstr* instr) {
+void ConstantPropagator::VisitUnaryMintOp(UnaryMintOpInstr* instr) {
// TODO(kmillikin): Handle unary operations.
SetValue(instr, non_constant_);
}
diff --git a/runtime/vm/flow_graph_type_propagator.cc b/runtime/vm/flow_graph_type_propagator.cc
index 6db56c5..249bcf1 100644
--- a/runtime/vm/flow_graph_type_propagator.cc
+++ b/runtime/vm/flow_graph_type_propagator.cc
@@ -1009,7 +1009,8 @@
return CompileType::FromCid(kSmiCid);
}
-
+// Note that MintOp may produce Smi-s as result of an
+// appended BoxIntegerInstr node.
CompileType BinaryMintOpInstr::ComputeType() const {
return CompileType::Int();
}
diff --git a/runtime/vm/json_stream.cc b/runtime/vm/json_stream.cc
index 1b89e24..ae06d19 100644
--- a/runtime/vm/json_stream.cc
+++ b/runtime/vm/json_stream.cc
@@ -114,6 +114,14 @@
}
+void JSONStream::PrintValue(const Field& field,
+ const Instance& instance,
+ bool ref) {
+ PrintCommaIfNeeded();
+ field.PrintToJSONStreamWithInstance(this, instance, ref);
+}
+
+
void JSONStream::PrintPropertyBool(const char* name, bool b) {
PrintPropertyName(name);
PrintValueBool(b);
@@ -211,7 +219,7 @@
void JSONObject::AddPropertyF(const char* name,
- const char* format, ...) const {
+ const char* format, ...) const {
stream_->PrintPropertyName(name);
va_list args;
va_start(args, format);
@@ -247,4 +255,3 @@
}
} // namespace dart
-
diff --git a/runtime/vm/json_stream.h b/runtime/vm/json_stream.h
index 0a544d5..5410314 100644
--- a/runtime/vm/json_stream.h
+++ b/runtime/vm/json_stream.h
@@ -10,9 +10,11 @@
namespace dart {
-class Object;
-class JSONObject;
+class Field;
+class Instance;
class JSONArray;
+class JSONObject;
+class Object;
class JSONStream : ValueObject {
public:
@@ -53,6 +55,7 @@
void PrintValue(const char* s);
void PrintfValue(const char* format, ...) PRINTF_ATTRIBUTE(2, 3);
void PrintValue(const Object& o, bool ref = true);
+ void PrintValue(const Field& f, const Instance& instance, bool ref = true);
void PrintPropertyBool(const char* name, bool b);
void PrintProperty(const char* name, intptr_t i);
@@ -145,6 +148,12 @@
void AddValue(const Object& obj, bool ref = true) const {
stream_->PrintValue(obj, ref);
}
+ // Print a field bound to a value. Value is looked up from 'instance'.
+ void AddValue(const Field& field,
+ const Instance& instance,
+ bool ref = true) const {
+ stream_->PrintValue(field, instance, ref);
+ }
void AddValueF(const char* format, ...) const PRINTF_ATTRIBUTE(2, 3);
private:
diff --git a/runtime/vm/object.cc b/runtime/vm/object.cc
index b138c2a..01c7690 100644
--- a/runtime/vm/object.cc
+++ b/runtime/vm/object.cc
@@ -902,6 +902,9 @@
cls = Class::New<Type>();
object_store->set_type_class(cls);
+ cls = Class::New<TypeRef>();
+ object_store->set_type_ref_class(cls);
+
cls = Class::New<TypeParameter>();
object_store->set_type_parameter_class(cls);
@@ -1033,6 +1036,10 @@
RegisterPrivateClass(cls, Symbols::Type(), core_lib);
pending_classes.Add(cls);
+ cls = object_store->type_ref_class();
+ RegisterPrivateClass(cls, Symbols::TypeRef(), core_lib);
+ pending_classes.Add(cls);
+
cls = object_store->type_parameter_class();
RegisterPrivateClass(cls, Symbols::TypeParameter(), core_lib);
pending_classes.Add(cls);
@@ -1290,6 +1297,9 @@
cls = Class::New<Type>();
object_store->set_type_class(cls);
+ cls = Class::New<TypeRef>();
+ object_store->set_type_ref_class(cls);
+
cls = Class::New<TypeParameter>();
object_store->set_type_parameter_class(cls);
@@ -1991,6 +2001,7 @@
void Class::set_super_type(const AbstractType& value) const {
ASSERT(value.IsNull() ||
(value.IsType() && !value.IsDynamicType()) ||
+ value.IsTypeRef() ||
value.IsBoundedType() ||
value.IsMixinAppType());
StorePointer(&raw_ptr()->super_type_, value.raw());
@@ -3513,9 +3524,6 @@
// the presence of a malformed bound in checked mode).
continue;
}
- ASSERT((!raw_instantiated && type.IsTypeParameter()) ||
- type.IsBoundedType() ||
- type.IsMalformed());
return false;
}
type_class = type.type_class();
@@ -3579,8 +3587,14 @@
void TypeArguments::SetTypeAt(intptr_t index, const AbstractType& value) const {
- ASSERT(!IsCanonical());
- StorePointer(TypeAddr(index), value.raw());
+ const AbstractType& type_arg = AbstractType::Handle(TypeAt(index));
+ if (type_arg.IsTypeRef()) {
+ if (value.raw() != type_arg.raw()) {
+ TypeRef::Cast(type_arg).set_type(value);
+ }
+ } else {
+ StorePointer(TypeAddr(index), value.raw());
+ }
}
@@ -3915,6 +3929,14 @@
TypeArguments& result = TypeArguments::Handle(isolate);
result ^= table.At(index);
if (result.IsNull()) {
+ // Canonicalize each type argument.
+ const intptr_t num_types = Length();
+ AbstractType& type = AbstractType::Handle(isolate);
+ for (intptr_t i = 0; i < num_types; i++) {
+ type = TypeAt(i);
+ type = type.Canonicalize();
+ SetTypeAt(i, type);
+ }
// Make sure we have an old space object and add it to the table.
if (this->IsNew()) {
result ^= Object::Clone(*this, Heap::kOld);
@@ -5896,8 +5918,14 @@
return chars;
}
-
void Field::PrintToJSONStream(JSONStream* stream, bool ref) const {
+ PrintToJSONStreamWithInstance(stream, Object::null_instance(), ref);
+}
+
+
+void Field::PrintToJSONStreamWithInstance(JSONStream* stream,
+ const Instance& instance,
+ bool ref) const {
JSONObject jsobj(stream);
const char* internal_field_name = String::Handle(name()).ToCString();
const char* field_name = String::Handle(UserVisibleName()).ToCString();
@@ -5910,6 +5938,9 @@
if (is_static()) {
const Object& valueObj = Object::Handle(value());
jsobj.AddProperty("value", valueObj);
+ } else if (!instance.IsNull()) {
+ const Object& valueObj = Object::Handle(instance.GetField(*this));
+ jsobj.AddProperty("value", valueObj);
}
Class& cls = Class::Handle(owner());
jsobj.AddProperty("owner", cls);
@@ -11393,7 +11424,7 @@
}
const Type& type =
Type::Handle(Type::New(cls, type_arguments, Scanner::kDummyTokenIndex));
- const String& type_name = String::Handle(type.Name());
+ const String& type_name = String::Handle(type.UserVisibleName());
// Calculate the size of the string.
intptr_t len = OS::SNPrint(NULL, 0, kFormat, type_name.ToCString()) + 1;
char* chars = Isolate::Current()->current_zone()->Alloc<char>(len);
@@ -11403,6 +11434,17 @@
}
+const char* Instance::ToUserCString(intptr_t maxLen) const {
+ if (raw() == Object::sentinel().raw()) {
+ return "<not initialized>";
+ } else if (raw() == Object::transition_sentinel().raw()) {
+ return "<being initialized>";
+ } else {
+ return ToCString();
+ }
+}
+
+
void Instance::PrintToJSONStream(JSONStream* stream, bool ref) const {
ObjectIdRing* ring = Isolate::Current()->object_id_ring();
intptr_t id = ring->GetIdForObject(raw());
@@ -11411,15 +11453,35 @@
jsobj.AddProperty("type", JSONType(ref));
jsobj.AddProperty("id", id);
+ Class& cls = Class::Handle(this->clazz());
+ jsobj.AddProperty("class", cls);
+
// Set the "preview" property for this instance.
if (IsNull()) {
jsobj.AddProperty("preview", "null");
- } else if (raw() == Object::sentinel().raw() ||
- raw() == Object::transition_sentinel().raw()) {
- jsobj.AddProperty("preview", "<uninitialized>");
} else {
- // TODO(turnidge): Handle special characters? Truncate?
- jsobj.AddProperty("preview", ToCString());
+ jsobj.AddProperty("preview", ToUserCString(40));
+ }
+ if (ref) {
+ return;
+ }
+
+ // Walk the superclass chain, adding all instance fields.
+ {
+ JSONArray jsarr(&jsobj, "fields");
+ while (!cls.IsNull()) {
+ const Array& field_array = Array::Handle(cls.fields());
+ Field& field = Field::Handle();
+ if (!field_array.IsNull()) {
+ for (intptr_t i = 0; i < field_array.Length(); i++) {
+ field ^= field_array.At(i);
+ if (!field.is_static()) {
+ jsarr.AddValue(field, *this);
+ }
+ }
+ }
+ cls = cls.SuperClass();
+ }
}
}
@@ -11523,8 +11585,8 @@
bool AbstractType::Equals(const Instance& other) const {
// AbstractType is an abstract class.
- ASSERT(raw() == AbstractType::null());
- return other.IsNull();
+ UNREACHABLE();
+ return false;
}
@@ -11645,7 +11707,8 @@
first_type_param_index = 0;
}
String& type_name = String::Handle();
- if (num_type_params == 0) {
+ if ((num_type_params == 0) ||
+ args.IsRaw(first_type_param_index, num_type_params)) {
type_name = class_name.raw();
} else {
const String& args_name = String::Handle(
@@ -12014,17 +12077,6 @@
}
-RawString* Type::TypeClassName() const {
- if (HasResolvedTypeClass()) {
- const Class& cls = Class::Handle(type_class());
- return cls.Name();
- } else {
- const UnresolvedClass& cls = UnresolvedClass::Handle(unresolved_class());
- return cls.Name();
- }
-}
-
-
RawAbstractTypeArguments* Type::arguments() const {
return raw_ptr()->arguments_;
}
@@ -12046,7 +12098,7 @@
RawAbstractType* Type::InstantiateFrom(
const AbstractTypeArguments& instantiator_type_arguments,
Error* bound_error) const {
- ASSERT(IsResolved());
+ ASSERT(IsFinalized() || IsBeingFinalized());
ASSERT(!IsInstantiated());
// Return the uninstantiated type unchanged if malformed. No copy needed.
if (IsMalformed()) {
@@ -12075,6 +12127,10 @@
if (raw() == other.raw()) {
return true;
}
+ if (other.IsTypeRef()) {
+ // TODO(regis): Use trail. For now, we "unfold" the right hand type.
+ return Equals(AbstractType::Handle(TypeRef::Cast(other).type()));
+ }
if (!other.IsType()) {
return false;
}
@@ -12093,13 +12149,17 @@
return true;
}
const Class& cls = Class::Handle(type_class());
+ const intptr_t num_type_params = cls.NumTypeParameters();
+ if (num_type_params == 0) {
+ // Shortcut unnecessary handle allocation below.
+ return true;
+ }
+ const intptr_t num_type_args = cls.NumTypeArguments();
+ const intptr_t from_index = num_type_args - num_type_params;
const AbstractTypeArguments& type_args = AbstractTypeArguments::Handle(
arguments());
const AbstractTypeArguments& other_type_args = AbstractTypeArguments::Handle(
other_type.arguments());
- const intptr_t num_type_args = cls.NumTypeArguments();
- const intptr_t num_type_params = cls.NumTypeParameters();
- const intptr_t from_index = num_type_args - num_type_params;
if (type_args.IsNull()) {
return other_type_args.IsRaw(from_index, num_type_params);
}
@@ -12306,6 +12366,135 @@
}
+bool TypeRef::IsInstantiated() const {
+ if (is_being_checked()) {
+ return true;
+ }
+ set_is_being_checked(true);
+ const bool result = AbstractType::Handle(type()).IsInstantiated();
+ set_is_being_checked(false);
+ return result;
+}
+
+
+bool TypeRef::Equals(const Instance& other) const {
+ // TODO(regis): Use trail instead of mark bit.
+ if (raw() == other.raw()) {
+ return true;
+ }
+ if (is_being_checked()) {
+ return true;
+ }
+ set_is_being_checked(true);
+ const bool result = AbstractType::Handle(type()).Equals(other);
+ set_is_being_checked(false);
+ return result;
+}
+
+
+RawAbstractType* TypeRef::InstantiateFrom(
+ const AbstractTypeArguments& instantiator_type_arguments,
+ Error* bound_error) const {
+ const AbstractType& ref_type = AbstractType::Handle(type());
+ // TODO(regis): Use trail instead of mark bit plus temporary redirection,
+ // because it could be marked for another reason.
+ if (is_being_checked()) {
+ ASSERT(ref_type.IsTypeRef());
+ return ref_type.raw();
+ }
+ set_is_being_checked(true);
+ ASSERT(!ref_type.IsTypeRef());
+ const TypeRef& instantiated_type_ref = TypeRef::Handle(
+ TypeRef::New(ref_type));
+ // TODO(regis): instantiated_type_ref should be stored in the trail instead.
+ set_type(instantiated_type_ref);
+ const AbstractType& instantiated_ref_type = AbstractType::Handle(
+ ref_type.InstantiateFrom(instantiator_type_arguments, bound_error));
+ instantiated_type_ref.set_type(instantiated_ref_type);
+ set_type(ref_type);
+ set_is_being_checked(false);
+ return instantiated_type_ref.raw();
+}
+
+
+void TypeRef::set_type(const AbstractType& value) const {
+ ASSERT(value.HasResolvedTypeClass());
+ StorePointer(&raw_ptr()->type_, value.raw());
+}
+
+
+void TypeRef::set_is_being_checked(bool value) const {
+ raw_ptr()->is_being_checked_ = value;
+}
+
+
+// This function only canonicalizes the referenced type, but not the TypeRef
+// itself, since it cannot be canonical by definition.
+// Consider the type Derived, where class Derived extends Base<Derived>.
+// The first type argument of its flattened type argument vector is Derived,
+// i.e. itself, but pointer equality is not possible.
+RawAbstractType* TypeRef::Canonicalize() const {
+ // TODO(regis): Use trail, not mark bit.
+ if (is_being_checked()) {
+ return raw();
+ }
+ set_is_being_checked(true);
+ AbstractType& ref_type = AbstractType::Handle(type());
+ ASSERT(!ref_type.IsTypeRef());
+ ref_type = ref_type.Canonicalize();
+ set_type(ref_type);
+ // No need to call SetCanonical(), since a TypeRef cannot be canonical by
+ // definition.
+ set_is_being_checked(false);
+ // We return the referenced type instead of the TypeRef in order to provide
+ // pointer equality in simple cases, e.g. in language/f_bounded_equality_test.
+ return ref_type.raw();
+}
+
+
+intptr_t TypeRef::Hash() const {
+ // TODO(regis): Use trail and hash of referenced type.
+ // Do not calculate the hash of the referenced type to avoid cycles.
+ uword result = Class::Handle(AbstractType::Handle(type()).type_class()).id();
+ return FinalizeHash(result);
+}
+
+
+RawTypeRef* TypeRef::New() {
+ ASSERT(Isolate::Current()->object_store()->type_ref_class() != Class::null());
+ RawObject* raw = Object::Allocate(TypeRef::kClassId,
+ TypeRef::InstanceSize(),
+ Heap::kOld);
+ return reinterpret_cast<RawTypeRef*>(raw);
+}
+
+
+RawTypeRef* TypeRef::New(const AbstractType& type) {
+ const TypeRef& result = TypeRef::Handle(TypeRef::New());
+ result.set_type(type);
+ result.set_is_being_checked(false);
+ return result.raw();
+}
+
+
+const char* TypeRef::ToCString() const {
+ const char* format = "TypeRef: %s%s";
+ const char* type_cstr = String::Handle(Class::Handle(AbstractType::Handle(
+ type()).type_class()).Name()).ToCString();
+ const char* args_cstr = (AbstractType::Handle(
+ type()).arguments() == AbstractTypeArguments::null()) ? "" : "<...>";
+ intptr_t len = OS::SNPrint(NULL, 0, format, type_cstr, args_cstr) + 1;
+ char* chars = Isolate::Current()->current_zone()->Alloc<char>(len);
+ OS::SNPrint(chars, len, format, type_cstr, args_cstr);
+ return chars;
+}
+
+
+void TypeRef::PrintToJSONStream(JSONStream* stream, bool ref) const {
+ JSONObject jsobj(stream);
+}
+
+
void TypeParameter::set_is_finalized() const {
ASSERT(!IsFinalized());
set_type_state(RawTypeParameter::kFinalizedUninstantiated);
@@ -12316,6 +12505,10 @@
if (raw() == other.raw()) {
return true;
}
+ if (other.IsTypeRef()) {
+ // TODO(regis): Use trail. For now, we "unfold" the right hand type.
+ return Equals(AbstractType::Handle(TypeRef::Cast(other).type()));
+ }
if (!other.IsTypeParameter()) {
return false;
}
@@ -12360,7 +12553,24 @@
if (instantiator_type_arguments.IsNull()) {
return Type::DynamicType();
}
- return instantiator_type_arguments.TypeAt(index());
+ const AbstractType& type_arg = AbstractType::Handle(
+ instantiator_type_arguments.TypeAt(index()));
+ // There is no need to canonicalize the instantiated type parameter, since all
+ // type arguments are canonicalized at type finalization time. It would be too
+ // early to canonicalize the returned type argument here, since instantiation
+ // not only happens at run time, but also during type finalization.
+ // However, if the type argument is a reference to a canonical type, we
+ // return the referenced canonical type instead of the type reference to
+ // provide pointer equality in some simple cases, e.g. in
+ // language/f_bounded_equality_test.
+ if (type_arg.IsTypeRef()) {
+ const AbstractType& ref_type = AbstractType::Handle(
+ TypeRef::Cast(type_arg).type());
+ if (ref_type.IsCanonical()) {
+ return ref_type.raw();
+ }
+ }
+ return type_arg.raw();
}
@@ -12425,8 +12635,7 @@
intptr_t TypeParameter::Hash() const {
ASSERT(IsFinalized());
- uword result = 0;
- result += Class::Handle(parameterized_class()).id();
+ uword result = Class::Handle(parameterized_class()).id();
// Do not include the hash of the bound, which could lead to cycles.
result <<= index();
return FinalizeHash(result);
@@ -12517,6 +12726,10 @@
if (raw() == other.raw()) {
return true;
}
+ if (other.IsTypeRef()) {
+ // TODO(regis): Use trail. For now, we "unfold" the right hand type.
+ return Equals(AbstractType::Handle(TypeRef::Cast(other).type()));
+ }
if (!other.IsBoundedType()) {
return false;
}
@@ -12540,7 +12753,7 @@
void BoundedType::set_type(const AbstractType& value) const {
- ASSERT(value.IsFinalized());
+ ASSERT(value.IsFinalized() || value.IsBeingFinalized());
ASSERT(!value.IsMalformed());
StorePointer(&raw_ptr()->type_, value.raw());
}
@@ -12620,13 +12833,9 @@
intptr_t BoundedType::Hash() const {
- uword result = 0;
- result += AbstractType::Handle(type()).Hash();
+ uword result = AbstractType::Handle(type()).Hash();
// Do not include the hash of the bound, which could lead to cycles.
- TypeParameter& type_param = TypeParameter::Handle(type_parameter());
- if (!type_param.IsNull()) {
- result += type_param.Hash();
- }
+ result += TypeParameter::Handle(type_parameter()).Hash();
return FinalizeHash(result);
}
@@ -14224,6 +14433,98 @@
}
+static bool IsAsciiPrintChar(intptr_t codePoint) {
+ return codePoint >= ' ' && codePoint <= '~';
+}
+
+
+// Does not null-terminate.
+intptr_t String::EscapedString(char* buffer, int maxLen) const {
+ int pos = 0;
+
+ CodePointIterator cpi(*this);
+ while (cpi.Next()) {
+ int32_t codePoint = cpi.Current();
+ if (IsSpecialCharacter(codePoint)) {
+ if (pos + 2 > maxLen) {
+ return pos;
+ }
+ buffer[pos++] = '\\';
+ buffer[pos++] = SpecialCharacter(codePoint);
+ } else if (IsAsciiPrintChar(codePoint)) {
+ buffer[pos++] = codePoint;
+ } else {
+ if (pos + 6 > maxLen) {
+ return pos;
+ }
+ pos += OS::SNPrint((buffer + pos), (maxLen - pos), "\\u%04x", codePoint);
+ }
+ if (pos == maxLen) {
+ return pos;
+ }
+ }
+ return pos;
+}
+
+
+intptr_t String::EscapedStringLen(intptr_t tooLong) const {
+ intptr_t len = 0;
+
+ CodePointIterator cpi(*this);
+ while (cpi.Next()) {
+ int32_t codePoint = cpi.Current();
+ if (IsSpecialCharacter(codePoint)) {
+ len += 2; // e.g. "\n"
+ } else if (IsAsciiPrintChar(codePoint)) {
+ len += 1;
+ } else {
+ len += 6; // e.g. "\u0000".
+ }
+ if (len > tooLong) {
+ // No point going further.
+ break;
+ }
+ }
+ return len;
+}
+
+
+const char* String::ToUserCString(intptr_t maxLen) const {
+ // Compute the needed length for the buffer.
+ const intptr_t escapedLen = EscapedStringLen(maxLen);
+ intptr_t printLen = escapedLen;
+ intptr_t bufferLen = escapedLen + 2; // +2 for quotes.
+ if (bufferLen > maxLen) {
+ bufferLen = maxLen; // Truncate.
+ printLen = maxLen - 5; // -2 for quotes, -3 for elipsis.
+ }
+
+ // Allocate the buffer.
+ Zone* zone = Isolate::Current()->current_zone();
+ char* buffer = zone->Alloc<char>(bufferLen + 1);
+
+ // Leading quote.
+ intptr_t pos = 0;
+ buffer[pos++] = '\"';
+
+ // Print escaped string.
+ pos += EscapedString((buffer + pos), printLen);
+
+ // Trailing quote.
+ buffer[pos++] = '\"';
+
+ if (printLen < escapedLen) {
+ buffer[pos++] = '.';
+ buffer[pos++] = '.';
+ buffer[pos++] = '.';
+ }
+ ASSERT(pos <= bufferLen);
+ buffer[pos++] = '\0';
+
+ return buffer;
+}
+
+
void String::PrintToJSONStream(JSONStream* stream, bool ref) const {
Instance::PrintToJSONStream(stream, ref);
}
@@ -15272,7 +15573,7 @@
if (IsNull()) {
return "_GrowableList NULL";
}
- const char* format = "_GrowableList len:%" Pd "";
+ const char* format = "Instance(length:%" Pd ") of '_GrowableList'";
intptr_t len = OS::SNPrint(NULL, 0, format, Length()) + 1;
char* chars = Isolate::Current()->current_zone()->Alloc<char>(len);
OS::SNPrint(chars, len, format, Length());
diff --git a/runtime/vm/object.h b/runtime/vm/object.h
index d41ba4c..51d6418 100644
--- a/runtime/vm/object.h
+++ b/runtime/vm/object.h
@@ -2194,6 +2194,12 @@
static bool IsGetterName(const String& function_name);
static bool IsSetterName(const String& function_name);
+ // When we print a field to a JSON stream, we want to make it appear
+ // that the value is a property of the field, so we allow the actual
+ // instance to be supplied here.
+ virtual void PrintToJSONStreamWithInstance(
+ JSONStream* stream, const Instance& instance, bool ref) const;
+
private:
enum {
kConstBit = 1,
@@ -3962,6 +3968,10 @@
// error object if evaluating the expression fails.
RawObject* Evaluate(const String& expr) const;
+ // Returns a string representation of this instance in a form
+ // that is suitable for an end user.
+ virtual const char* ToUserCString(intptr_t maxLen = 40) const;
+
static intptr_t InstanceSize() {
return RoundedAllocationSize(sizeof(RawInstance));
}
@@ -4158,7 +4168,6 @@
virtual RawClass* type_class() const;
void set_type_class(const Object& value) const;
virtual RawUnresolvedClass* unresolved_class() const;
- RawString* TypeClassName() const;
virtual RawAbstractTypeArguments* arguments() const;
void set_arguments(const AbstractTypeArguments& value) const;
virtual intptr_t token_pos() const { return raw_ptr()->token_pos_; }
@@ -4240,6 +4249,67 @@
};
+// A TypeRef is used to break cycles in the representation of recursive types.
+// Its only field is the recursive AbstractType it refers to.
+// Note that the cycle always involves type arguments.
+class TypeRef : public AbstractType {
+ public:
+ virtual bool IsFinalized() const {
+ return AbstractType::Handle(type()).IsFinalized();
+ }
+ virtual bool IsBeingFinalized() const {
+ return AbstractType::Handle(type()).IsBeingFinalized();
+ }
+ virtual bool IsMalformed() const {
+ return AbstractType::Handle(type()).IsMalformed();
+ }
+ virtual bool IsMalbounded() const {
+ return AbstractType::Handle(type()).IsMalbounded();
+ }
+ virtual bool IsMalformedOrMalbounded() const {
+ return AbstractType::Handle(type()).IsMalformedOrMalbounded();
+ }
+ virtual bool IsResolved() const { return true; }
+ virtual bool HasResolvedTypeClass() const { return true; }
+ RawAbstractType* type() const { return raw_ptr()->type_; }
+ void set_type(const AbstractType& value) const;
+ virtual RawClass* type_class() const {
+ return AbstractType::Handle(type()).type_class();
+ }
+ virtual RawAbstractTypeArguments* arguments() const {
+ return AbstractType::Handle(type()).arguments();
+ }
+ virtual intptr_t token_pos() const {
+ return AbstractType::Handle(type()).token_pos();
+ }
+ virtual bool IsInstantiated() const;
+ virtual bool Equals(const Instance& other) const;
+ virtual RawAbstractType* InstantiateFrom(
+ const AbstractTypeArguments& instantiator_type_arguments,
+ Error* bound_error) const;
+ virtual RawAbstractType* Canonicalize() const;
+
+ virtual intptr_t Hash() const;
+
+ static intptr_t InstanceSize() {
+ return RoundedAllocationSize(sizeof(RawTypeRef));
+ }
+
+ static RawTypeRef* New(const AbstractType& type);
+
+ private:
+ bool is_being_checked() const {
+ return raw_ptr()->is_being_checked_;
+ }
+ void set_is_being_checked(bool value) const;
+
+ static RawTypeRef* New();
+
+ FINAL_HEAP_OBJECT_IMPLEMENTATION(TypeRef, AbstractType);
+ friend class Class;
+};
+
+
// A TypeParameter represents a type parameter of a parameterized class.
// It specifies its index (and its name for debugging purposes), as well as its
// upper bound.
@@ -4894,6 +4964,9 @@
void* peer,
Dart_PeerFinalizer cback) const;
+ // Produces a quoted, escaped, (possibly) truncated string.
+ const char* ToUserCString(intptr_t maxLen = 40) const;
+
// Creates a new String object from a C string that is assumed to contain
// UTF-8 encoded characters and '\0' is considered a termination character.
// TODO(7123) - Rename this to FromCString(....).
@@ -5018,6 +5091,9 @@
CallbackType new_symbol,
Snapshot::Kind kind);
+ intptr_t EscapedString(char* buffer, int maxLen) const;
+ intptr_t EscapedStringLen(intptr_t tooLong) const;
+
FINAL_HEAP_OBJECT_IMPLEMENTATION(String, Instance);
friend class Class;
diff --git a/runtime/vm/object_store.h b/runtime/vm/object_store.h
index 9e75cc4..866f62c 100644
--- a/runtime/vm/object_store.h
+++ b/runtime/vm/object_store.h
@@ -72,6 +72,9 @@
RawClass* type_class() const { return type_class_; }
void set_type_class(const Class& value) { type_class_ = value.raw(); }
+ RawClass* type_ref_class() const { return type_ref_class_; }
+ void set_type_ref_class(const Class& value) { type_ref_class_ = value.raw(); }
+
RawClass* type_parameter_class() const { return type_parameter_class_; }
void set_type_parameter_class(const Class& value) {
type_parameter_class_ = value.raw();
@@ -421,6 +424,7 @@
RawType* function_type_;
RawType* function_impl_type_;
RawClass* type_class_;
+ RawClass* type_ref_class_;
RawClass* type_parameter_class_;
RawClass* bounded_type_class_;
RawClass* mixin_app_type_class_;
diff --git a/runtime/vm/object_test.cc b/runtime/vm/object_test.cc
index 7a017b5..ec1fc42 100644
--- a/runtime/vm/object_test.cc
+++ b/runtime/vm/object_test.cc
@@ -3627,4 +3627,99 @@
EXPECT(array.IsArray());
}
+
+TEST_CASE(ToUserCString) {
+ const char* kScriptChars =
+ "var simple = 'simple';\n"
+ "var escapes = 'stuff\\n\\r\\f\\b\\t\\v\\'\"\\$stuff';\n"
+ "var uescapes = 'stuff\\u0001\\u0002stuff';\n"
+ "var toolong = "
+ "'01234567890123456789012345678901234567890123456789howdy';\n"
+ "var toolong2 = "
+ "'0123456789012345678901234567890123\\t567890123456789howdy';\n"
+ "var toolong3 = "
+ "'012345678901234567890123456789\\u0001567890123456789howdy';\n"
+ "\n"
+ "class _Cobra { }\n"
+ "var instance = new _Cobra();\n"
+ "\n"
+ "var simple_list = [1,2,'otter'];\n"
+ "\n"
+ "var simple_map = {1: 2, 2: 'otter'};\n";
+ Dart_Handle lib = TestCase::LoadTestScript(kScriptChars, NULL);
+ EXPECT_VALID(lib);
+
+ Instance& obj = Instance::Handle();
+ Dart_Handle result;
+
+ // Simple string.
+ result = Dart_GetField(lib, NewString("simple"));
+ EXPECT_VALID(result);
+ obj ^= Api::UnwrapHandle(result);
+ EXPECT_STREQ("\"simple\"", obj.ToUserCString());
+
+ // Escaped chars.
+ result = Dart_GetField(lib, NewString("escapes"));
+ EXPECT_VALID(result);
+ obj ^= Api::UnwrapHandle(result);
+ EXPECT_STREQ("\"stuff\\n\\r\\f\\b\\t\\v'\\\"\\$stuff\"",
+ obj.ToUserCString());
+
+ // U-escaped chars.
+ result = Dart_GetField(lib, NewString("uescapes"));
+ EXPECT_VALID(result);
+ obj ^= Api::UnwrapHandle(result);
+ EXPECT_STREQ("\"stuff\\u0001\\u0002stuff\"", obj.ToUserCString());
+
+ // Truncation.
+ result = Dart_GetField(lib, NewString("toolong"));
+ EXPECT_VALID(result);
+ obj ^= Api::UnwrapHandle(result);
+ EXPECT_STREQ("\"01234567890123456789012345678901234\"...",
+ obj.ToUserCString());
+
+ // Truncation. Custom limit.
+ result = Dart_GetField(lib, NewString("toolong"));
+ EXPECT_VALID(result);
+ obj ^= Api::UnwrapHandle(result);
+ EXPECT_STREQ("\"01234\"...", obj.ToUserCString(10));
+
+ // Truncation, limit is in escape.
+ result = Dart_GetField(lib, NewString("toolong2"));
+ EXPECT_VALID(result);
+ obj ^= Api::UnwrapHandle(result);
+ EXPECT_STREQ("\"0123456789012345678901234567890123\"...",
+ obj.ToUserCString());
+
+ // Truncation, limit is in u-escape
+ result = Dart_GetField(lib, NewString("toolong3"));
+ EXPECT_VALID(result);
+ obj ^= Api::UnwrapHandle(result);
+ EXPECT_STREQ("\"012345678901234567890123456789\"...",
+ obj.ToUserCString());
+
+ // Instance of a class.
+ result = Dart_GetField(lib, NewString("instance"));
+ EXPECT_VALID(result);
+ obj ^= Api::UnwrapHandle(result);
+ EXPECT_STREQ("Instance of '_Cobra'", obj.ToUserCString());
+
+ // Simple list.
+ //
+ // TODO(turnidge): Consider showing something like: [1, 2, 'otter'].
+ result = Dart_GetField(lib, NewString("simple_list"));
+ EXPECT_VALID(result);
+ obj ^= Api::UnwrapHandle(result);
+ EXPECT_STREQ("Instance(length:3) of '_GrowableList'",
+ obj.ToUserCString());
+
+ // Simple map.
+ //
+ // TODO(turnidge): Consider showing something like: {1: 2, 2: 'otter'}
+ result = Dart_GetField(lib, NewString("simple_map"));
+ EXPECT_VALID(result);
+ obj ^= Api::UnwrapHandle(result);
+ EXPECT_STREQ("Instance of '_LinkedHashMap'", obj.ToUserCString());
+}
+
} // namespace dart
diff --git a/runtime/vm/parser.cc b/runtime/vm/parser.cc
index 66d3e48..7ffa22e 100644
--- a/runtime/vm/parser.cc
+++ b/runtime/vm/parser.cc
@@ -8361,7 +8361,7 @@
type_parameter ^= ClassFinalizer::FinalizeType(
current_class(),
TypeParameter::Cast(left->AsPrimaryNode()->primary()),
- ClassFinalizer::kFinalize);
+ ClassFinalizer::kCanonicalize);
ASSERT(!type_parameter.IsMalformed());
left = new TypeNode(primary->token_pos(), type_parameter);
} else {
@@ -8438,7 +8438,7 @@
type_parameter ^= ClassFinalizer::FinalizeType(
current_class(),
TypeParameter::Cast(primary->primary()),
- ClassFinalizer::kFinalize);
+ ClassFinalizer::kCanonicalize);
ASSERT(!type_parameter.IsMalformed());
array = new TypeNode(primary->token_pos(), type_parameter);
} else {
@@ -8503,9 +8503,8 @@
NULL); // No existing function.
} else if (primary->primary().IsClass()) {
const Class& type_class = Class::Cast(primary->primary());
- AbstractType& type = Type::ZoneHandle(
- Type::New(type_class, TypeArguments::Handle(),
- primary->token_pos(), Heap::kOld));
+ AbstractType& type = Type::ZoneHandle(Type::New(
+ type_class, TypeArguments::Handle(), primary->token_pos()));
type ^= ClassFinalizer::FinalizeType(
current_class(), type, ClassFinalizer::kCanonicalize);
// Type may be malbounded, but not malformed.
@@ -8529,9 +8528,8 @@
left = LoadClosure(primary);
} else if (primary->primary().IsClass()) {
const Class& type_class = Class::Cast(primary->primary());
- AbstractType& type = Type::ZoneHandle(
- Type::New(type_class, TypeArguments::Handle(),
- primary->token_pos(), Heap::kOld));
+ AbstractType& type = Type::ZoneHandle(Type::New(
+ type_class, TypeArguments::Handle(), primary->token_pos()));
type = ClassFinalizer::FinalizeType(
current_class(), type, ClassFinalizer::kCanonicalize);
// Type may be malbounded, but not malformed.
@@ -8546,7 +8544,7 @@
type_parameter ^= ClassFinalizer::FinalizeType(
current_class(),
TypeParameter::Cast(primary->primary()),
- ClassFinalizer::kFinalize);
+ ClassFinalizer::kCanonicalize);
ASSERT(!type_parameter.IsMalformed());
left = new TypeNode(primary->token_pos(), type_parameter);
} else if (primary->IsSuper()) {
@@ -9220,7 +9218,7 @@
CaptureInstantiator();
}
type_parameter ^= ClassFinalizer::FinalizeType(
- current_class(), type_parameter, ClassFinalizer::kFinalize);
+ current_class(), type_parameter, ClassFinalizer::kCanonicalize);
ASSERT(!type_parameter.IsMalformed());
return new TypeNode(ident_pos, type_parameter);
}
@@ -9260,8 +9258,7 @@
} else if (primary->primary().IsClass()) {
const Class& type_class = Class::Cast(primary->primary());
AbstractType& type = Type::ZoneHandle(
- Type::New(type_class, TypeArguments::Handle(),
- primary->token_pos(), Heap::kOld));
+ Type::New(type_class, TypeArguments::Handle(), primary->token_pos()));
type ^= ClassFinalizer::FinalizeType(
current_class(), type, ClassFinalizer::kCanonicalize);
// Type may be malbounded, but not malformed.
diff --git a/runtime/vm/raw_object.cc b/runtime/vm/raw_object.cc
index c425df7..edcc39f 100644
--- a/runtime/vm/raw_object.cc
+++ b/runtime/vm/raw_object.cc
@@ -301,6 +301,13 @@
}
+intptr_t RawTypeRef::VisitTypeRefPointers(
+ RawTypeRef* raw_obj, ObjectPointerVisitor* visitor) {
+ visitor->VisitPointers(raw_obj->from(), raw_obj->to());
+ return TypeRef::InstanceSize();
+}
+
+
intptr_t RawTypeParameter::VisitTypeParameterPointers(
RawTypeParameter* raw_obj, ObjectPointerVisitor* visitor) {
visitor->VisitPointers(raw_obj->from(), raw_obj->to());
diff --git a/runtime/vm/raw_object.h b/runtime/vm/raw_object.h
index dce7cbf..b5514df 100644
--- a/runtime/vm/raw_object.h
+++ b/runtime/vm/raw_object.h
@@ -50,6 +50,7 @@
V(Instance) \
V(AbstractType) \
V(Type) \
+ V(TypeRef) \
V(TypeParameter) \
V(BoundedType) \
V(MixinAppType) \
@@ -1178,6 +1179,21 @@
};
+class RawTypeRef : public RawAbstractType {
+ private:
+ RAW_HEAP_OBJECT_IMPLEMENTATION(TypeRef);
+
+ RawObject** from() {
+ return reinterpret_cast<RawObject**>(&ptr()->type_);
+ }
+ RawAbstractType* type_; // The referenced type.
+ RawObject** to() {
+ return reinterpret_cast<RawObject**>(&ptr()->type_);
+ }
+ bool is_being_checked_; // Transient field, not snapshotted.
+};
+
+
class RawTypeParameter : public RawAbstractType {
private:
RAW_HEAP_OBJECT_IMPLEMENTATION(TypeParameter);
@@ -1208,7 +1224,7 @@
RawObject** to() {
return reinterpret_cast<RawObject**>(&ptr()->type_parameter_);
}
- bool is_being_checked_;
+ bool is_being_checked_; // Transient field, not snapshotted.
};
diff --git a/runtime/vm/raw_object_snapshot.cc b/runtime/vm/raw_object_snapshot.cc
index e8874af..9c73a1c 100644
--- a/runtime/vm/raw_object_snapshot.cc
+++ b/runtime/vm/raw_object_snapshot.cc
@@ -307,6 +307,54 @@
}
+RawTypeRef* TypeRef::ReadFrom(SnapshotReader* reader,
+ intptr_t object_id,
+ intptr_t tags,
+ Snapshot::Kind kind) {
+ ASSERT(reader != NULL);
+
+ // Allocate type ref object.
+ TypeRef& type_ref = TypeRef::ZoneHandle(
+ reader->isolate(), NEW_OBJECT(TypeRef));
+ reader->AddBackRef(object_id, &type_ref, kIsDeserialized);
+
+ // Set the object tags.
+ type_ref.set_tags(tags);
+
+ // Set all the object fields.
+ // TODO(5411462): Need to assert No GC can happen here, even though
+ // allocations may happen.
+ intptr_t num_flds = (type_ref.raw()->to() - type_ref.raw()->from());
+ for (intptr_t i = 0; i <= num_flds; i++) {
+ (*reader->ObjectHandle()) = reader->ReadObjectRef();
+ type_ref.StorePointer((type_ref.raw()->from() + i),
+ reader->ObjectHandle()->raw());
+ }
+
+ type_ref.set_is_being_checked(false);
+
+ return type_ref.raw();
+}
+
+
+void RawTypeRef::WriteTo(SnapshotWriter* writer,
+ intptr_t object_id,
+ Snapshot::Kind kind) {
+ ASSERT(writer != NULL);
+
+ // Write out the serialization header value for this object.
+ writer->WriteInlinedObjectHeader(object_id);
+
+ // Write out the class and tags information.
+ writer->WriteIndexedObject(kTypeRefCid);
+ writer->WriteIntptrValue(writer->GetObjectTags(this));
+
+ // Write out all the object pointer fields.
+ SnapshotWriterVisitor visitor(writer);
+ visitor.VisitPointers(from(), to());
+}
+
+
RawTypeParameter* TypeParameter::ReadFrom(SnapshotReader* reader,
intptr_t object_id,
intptr_t tags,
diff --git a/runtime/vm/snapshot.cc b/runtime/vm/snapshot.cc
index c05a8fa..04c2196 100644
--- a/runtime/vm/snapshot.cc
+++ b/runtime/vm/snapshot.cc
@@ -536,6 +536,11 @@
}
+RawTypeRef* SnapshotReader::NewTypeRef() {
+ ALLOC_NEW_OBJECT(TypeRef, object_store()->type_ref_class());
+}
+
+
RawTypeParameter* SnapshotReader::NewTypeParameter() {
ALLOC_NEW_OBJECT(TypeParameter, object_store()->type_parameter_class());
}
diff --git a/runtime/vm/snapshot.h b/runtime/vm/snapshot.h
index 4288f1d..b15d249 100644
--- a/runtime/vm/snapshot.h
+++ b/runtime/vm/snapshot.h
@@ -61,6 +61,7 @@
class RawStacktrace;
class RawTokenStream;
class RawType;
+class RawTypeRef;
class RawTypeParameter;
class RawTypeArguments;
class RawTwoByteString;
@@ -256,6 +257,7 @@
RawDouble* NewDouble(double value);
RawUnresolvedClass* NewUnresolvedClass();
RawType* NewType();
+ RawTypeRef* NewTypeRef();
RawTypeParameter* NewTypeParameter();
RawBoundedType* NewBoundedType();
RawMixinAppType* NewMixinAppType();
@@ -359,6 +361,7 @@
friend class Type;
friend class TypeArguments;
friend class TypeParameter;
+ friend class TypeRef;
friend class UnresolvedClass;
friend class WeakProperty;
friend class MirrorReference;
diff --git a/runtime/vm/symbols.h b/runtime/vm/symbols.h
index ac7b0d9..4527379 100644
--- a/runtime/vm/symbols.h
+++ b/runtime/vm/symbols.h
@@ -75,6 +75,7 @@
V(Void, "void") \
V(UnresolvedClass, "UnresolvedClass") \
V(Type, "_Type") \
+ V(TypeRef, "_TypeRef") \
V(TypeParameter, "_TypeParameter") \
V(BoundedType, "_BoundedType") \
V(MixinAppType, "_MixinAppType") \
diff --git a/sdk/lib/_internal/compiler/implementation/apiimpl.dart b/sdk/lib/_internal/compiler/implementation/apiimpl.dart
index f16cabe..0afeed4 100644
--- a/sdk/lib/_internal/compiler/implementation/apiimpl.dart
+++ b/sdk/lib/_internal/compiler/implementation/apiimpl.dart
@@ -58,6 +58,7 @@
verbose: hasOption(options, '--verbose'),
sourceMapUri: extractSourceMapUri(options),
terseDiagnostics: hasOption(options, '--terse'),
+ dumpInfo: hasOption(options, '--dump-info'),
buildId: extractStringOption(
options, '--build-id=',
"build number could not be determined")) {
diff --git a/sdk/lib/_internal/compiler/implementation/closure.dart b/sdk/lib/_internal/compiler/implementation/closure.dart
index 2b08494..66325f7 100644
--- a/sdk/lib/_internal/compiler/implementation/closure.dart
+++ b/sdk/lib/_internal/compiler/implementation/closure.dart
@@ -700,6 +700,8 @@
new FunctionElementX.from(Compiler.CALL_OPERATOR_NAME,
element,
globalizedElement);
+ ClosureContainer enclosing = element.enclosingElement;
+ enclosing.nestedClosures.add(callElement);
globalizedElement.addMember(callElement, compiler);
// The nested function's 'this' is the same as the one for the outer
// function. It could be [null] if we are inside a static method.
diff --git a/sdk/lib/_internal/compiler/implementation/compiler.dart b/sdk/lib/_internal/compiler/implementation/compiler.dart
index c49df9d..7846c9a 100644
--- a/sdk/lib/_internal/compiler/implementation/compiler.dart
+++ b/sdk/lib/_internal/compiler/implementation/compiler.dart
@@ -11,11 +11,6 @@
const bool REPORT_EXCESS_RESOLUTION = false;
/**
- * If true, dump the inferred types after compilation.
- */
-const bool DUMP_INFERRED_TYPES = false;
-
-/**
* Contains backend-specific data that is used throughout the compilation of
* one work item.
*/
@@ -85,6 +80,10 @@
[ConstantSystem constantSystem = DART_CONSTANT_SYSTEM])
: this.constantSystem = constantSystem;
+ // Given a [FunctionElement], return a buffer with the code generated for it
+ // or null if no code was generated.
+ CodeBuffer codeOf(Element element) => null;
+
void initializeHelperClasses() {}
void enqueueHelpers(ResolutionEnqueuer world, TreeElements elements);
@@ -104,9 +103,6 @@
void onResolutionComplete() {}
- // TODO(ahe,karlklose): rename this?
- void dumpInferredTypes() {}
-
ItemCompilationContext createItemCompilationContext() {
return new ItemCompilationContext();
}
@@ -362,6 +358,7 @@
final bool trustTypeAnnotations;
final bool enableConcreteTypeInference;
final bool disableTypeInferenceFlag;
+ final bool dumpInfo;
/**
* The maximum size of a concrete type before it widens to dynamic during
@@ -440,6 +437,9 @@
ClassElement stackTraceClass;
ClassElement typedDataClass;
+ /// The constant for the [proxy] variable defined in dart:core.
+ Constant proxyConstant;
+
// Initialized after symbolClass has been resolved.
FunctionElement symbolConstructor;
@@ -543,6 +543,7 @@
EnqueueTask enqueuer;
DeferredLoadTask deferredLoadTask;
MirrorUsageAnalyzerTask mirrorUsageAnalyzerTask;
+ DumpInfoTask dumpInfoTask;
String buildId;
static const String MAIN = 'main';
@@ -616,6 +617,7 @@
this.sourceMapUri: null,
this.buildId: UNDETERMINED_BUILD_ID,
this.terseDiagnostics: false,
+ this.dumpInfo: false,
outputProvider,
List<String> strips: const []})
: this.analyzeOnly = analyzeOnly || analyzeSignaturesOnly,
@@ -653,7 +655,8 @@
constantHandler = new ConstantHandler(this, backend.constantSystem),
deferredLoadTask = new DeferredLoadTask(this),
mirrorUsageAnalyzerTask = new MirrorUsageAnalyzerTask(this),
- enqueuer = new EnqueueTask(this)];
+ enqueuer = new EnqueueTask(this),
+ dumpInfoTask = new DumpInfoTask(this)];
tasks.addAll(backend.tasks);
}
@@ -671,10 +674,6 @@
int getNextFreeClassId() => nextFreeClassId++;
- void ensure(bool condition) {
- if (!condition) cancel('failed assertion in leg');
- }
-
void unimplemented(String methodName,
{Node node, Token token, HInstruction instruction,
Element element}) {
@@ -916,6 +915,9 @@
backend.initializeHelperClasses();
dynamicClass.ensureResolved(this);
+
+ proxyConstant = constantHandler.compileVariable(
+ coreLibrary.find('proxy'), isConst: true);
}
Element _unnamedListConstructor;
@@ -1130,6 +1132,10 @@
backend.assembleProgram();
+ if (dumpInfo) {
+ dumpInfoTask.dumpInfo();
+ }
+
checkQueues();
if (compilationFailed) {
@@ -1189,9 +1195,6 @@
world.queueIsClosed = true;
if (compilationFailed) return;
assert(world.checkNoEnqueuedInvokedInstanceMethods());
- if (DUMP_INFERRED_TYPES && phase == PHASE_COMPILING) {
- backend.dumpInferredTypes();
- }
}
/**
diff --git a/sdk/lib/_internal/compiler/implementation/dart2js.dart b/sdk/lib/_internal/compiler/implementation/dart2js.dart
index 1ab6de7..f51abf5 100644
--- a/sdk/lib/_internal/compiler/implementation/dart2js.dart
+++ b/sdk/lib/_internal/compiler/implementation/dart2js.dart
@@ -276,6 +276,7 @@
new OptionHandler('--categories=.*', setCategories),
new OptionHandler('--disable-type-inference', passThrough),
new OptionHandler('--terse', passThrough),
+ new OptionHandler('--dump-info', passThrough),
new OptionHandler('--disallow-unsafe-eval',
(_) => hasDisallowUnsafeEval = true),
new OptionHandler('-D.+=.*', addInEnvironment),
@@ -360,6 +361,9 @@
" \"Content-Security-Policy: script-src 'self'\"");
} else if (extension == 'js.map' || extension == 'dart.map') {
uri = sourceMapOut;
+ } else if (extension == 'info.html') {
+ String outName = out.path.substring(out.path.lastIndexOf('/') + 1);
+ uri = out.resolve('${outName}.$extension');
} else {
fail('Error: Unknown extension: $extension');
}
@@ -566,6 +570,8 @@
unsupported category, for example, --categories=help. To enable
all categories, use --categories=all.
+ --dump-info
+ Generates an out.info.html file with information about the generated code.
'''.trim());
}
diff --git a/sdk/lib/_internal/compiler/implementation/dart2jslib.dart b/sdk/lib/_internal/compiler/implementation/dart2jslib.dart
index ca186dc..1465f3d 100644
--- a/sdk/lib/_internal/compiler/implementation/dart2jslib.dart
+++ b/sdk/lib/_internal/compiler/implementation/dart2jslib.dart
@@ -35,6 +35,7 @@
import 'js/js.dart' as js;
import 'deferred_load.dart' show DeferredLoadTask;
import 'mirrors_used.dart' show MirrorUsageAnalyzerTask;
+import 'dump_info.dart';
export 'resolution/resolution.dart' show TreeElements, TreeElementMapping;
export 'scanner/scannerlib.dart' show isUserDefinableOperator,
diff --git a/sdk/lib/_internal/compiler/implementation/dump_info.dart b/sdk/lib/_internal/compiler/implementation/dump_info.dart
new file mode 100644
index 0000000..727095f
--- /dev/null
+++ b/sdk/lib/_internal/compiler/implementation/dump_info.dart
@@ -0,0 +1,501 @@
+// Copyright (c) 2013, the Dart project authors. Please see the AUTHORS file
+// for details. All rights reserved. Use of this source code is governed by a
+// BSD-style license that can be found in the LICENSE file.
+
+library dump_info;
+
+import 'elements/elements.dart';
+import 'elements/visitor.dart';
+import 'dart:convert' show HtmlEscape;
+import 'dart2jslib.dart' show
+ Compiler,
+ CompilerTask,
+ CodeBuffer;
+import 'dart_types.dart' show DartType;
+import 'types/types.dart' show TypeMask;
+
+// TODO (sigurdm): A search function.
+// TODO (sigurdm): Output size of classes.
+// TODO (sigurdm): Print that we dumped the HTML-file.
+// TODO (sigurdm): Include why a given element was included in the output.
+// TODO (sigurdm): Include how much output grew because of mirror support.
+// TODO (sigurdm): Write each function with parameter names.
+// TODO (sigurdm): Write how much space the boilerplate takes.
+// TODO (sigurdm): Include javascript names of entities in the output.
+
+class CodeSizeCounter {
+ final Map<Element, int> generatedSize = new Map<Element, int>();
+
+ int getGeneratedSizeOf(Element element) {
+ int result = generatedSize[element];
+ return result == null ? 0 : result;
+ }
+
+ void countCode(Element element, int added) {
+ int before = generatedSize.putIfAbsent(element, () => 0);
+ generatedSize[element] = before + added;
+ }
+}
+
+tag(String element) {
+ return (String content, {String cls}) {
+ String classString = cls == null ? '' : ' class="$cls"';
+ return '<$element$classString>$content</$element>';
+ };
+}
+
+var div = tag('div');
+var span = tag('span');
+var code = tag('code');
+var h2 = tag('h2');
+
+var esc = const HtmlEscape().convert;
+
+String sizeDescription(int size, ProgramInfo programInfo) {
+ return size == null
+ ? ''
+ : span('${size} bytes '
+ '(${size * 100 ~/ programInfo.size}%)', cls: "size");
+}
+
+/// An [InfoNode] holds information about a part the program.
+abstract class InfoNode {
+ String get name;
+
+ int get size;
+
+ void emitHtml(ProgramInfo programInfo, StringSink buffer);
+}
+
+/// An [ElementNode] holds information about an [Element]
+class ElementInfoNode implements InfoNode {
+ /// The name of the represented [Element].
+ final String name;
+
+ /// The kind of the [Element] represented. This is presented to the
+ /// user, so it might be more specific than [element.kind].
+ final String kind;
+
+ /// The static type of the represented [Element].
+ /// [null] if this kind of element has no type.
+ final String type;
+
+ /// Any extra information to display about the represented [Element].
+ final String extra;
+
+ /// A textual description of the modifiers (such as "static", "abstract") of
+ /// the represented [Element].
+ final String modifiers;
+
+ /// Describes how many bytes the code for the represented [Element] takes up
+ /// in the output.
+ final int size;
+
+ /// Subnodes containing more detailed information about the represented
+ /// [Element], and its members.
+ List<InfoNode> contents;
+
+ ElementInfoNode({this.name: "",
+ this.kind: "",
+ this.type,
+ this.modifiers: "",
+ this.size,
+ this.contents,
+ this.extra: ""});
+
+ void emitHtml(ProgramInfo programInfo, StringSink buffer) {
+ String kindString = span(esc(kind), cls: 'kind');
+ String modifiersString = span(esc(modifiers), cls: "modifiers");
+
+ String nameString = span(esc(name), cls: 'name');
+ String typeString = type == null
+ ? ''
+ : span('/* ' + esc(type) + ' */', cls: 'type');
+ String extraString = span(esc(extra), cls: 'type');
+ String describe = [
+ kindString,
+ typeString,
+ modifiersString,
+ nameString,
+ sizeDescription(size, programInfo),
+ extraString].join(' ');
+
+ if (contents != null) {
+ buffer.write(div("+$describe", cls: "container"));
+ buffer.write('<div class="contained">');
+ if (contents.isEmpty) {
+ buffer.writeln("No members");
+ }
+ for (InfoNode subElementDescription in contents) {
+ subElementDescription.emitHtml(programInfo, buffer);
+ }
+ buffer.write("</div>");
+ } else {
+ buffer.writeln(describe);
+ }
+ }
+}
+
+/// A [CodeInfoNode] holds information about a piece of code.
+class CodeInfoNode implements InfoNode {
+ /// A short description of the code.
+ final String description;
+
+ final String generatedCode;
+
+ get size => generatedCode.length;
+
+ get name => "";
+
+ CodeInfoNode({this.description: "", this.generatedCode});
+
+ void emitHtml(ProgramInfo programInfo, StringBuffer buffer) {
+ buffer.write(div(description + ' ' +
+ sizeDescription(generatedCode.length, programInfo),
+ cls: 'kind') +
+ code(esc(generatedCode)));
+ }
+}
+
+/// Instances represent information inferred about the program such as
+/// inferred type information or inferred side effects.
+class InferredInfoNode implements InfoNode {
+ /// Text describing the represented information.
+ final String description;
+
+ /// The name of the entity this information is inferred about (for example the
+ /// name of a parameter).
+ final String name;
+
+ /// The inferred type/side effect.
+ final String type;
+
+ get size => 0;
+
+ InferredInfoNode({this.name: "", this.description, this.type});
+
+ void emitHtml(ProgramInfo programInfo, StringSink buffer) {
+ buffer.write(div('${span("Inferred " + description, cls: "kind")} '
+ '${span(esc(name),
+ cls: "name")} '
+ '${span(esc(type), cls: 'type')} '));
+ }
+}
+
+/// Instances represent information about a program.
+class ProgramInfo {
+ /// A list of all the libraries in the program to show information about.
+ final List<InfoNode> libraries;
+
+ /// The size of the whole program in bytes.
+ final int size;
+
+ /// The time the compilation took place.
+ final DateTime compilationMoment;
+
+ /// The time the compilation took to complete.
+ final Duration compilationDuration;
+
+ /// The version of dart2js used to compile the program.
+ final String dart2jsVersion;
+
+ ProgramInfo({this.libraries,
+ this.size,
+ this.compilationMoment,
+ this.compilationDuration,
+ this.dart2jsVersion});
+}
+
+class InfoDumpVisitor extends ElementVisitor<InfoNode> {
+ final Compiler compiler;
+
+ /// Contains the elements visited on the path from the library to here.
+ List<Element> stack = new List<Element>();
+
+ Element get currentElement => stack.last;
+
+ InfoDumpVisitor(Compiler this.compiler);
+
+ InfoNode visitElement(Element element) {
+ compiler.internalError("This element of kind ${element.kind} "
+ "does not support --dump-info",
+ token: element.position());
+ }
+
+ InfoNode visitLibraryElement(LibraryElement element) {
+ List<InfoNode> contents = new List<InfoNode>();
+ int size = compiler.dumpInfoTask.codeSizeCounter
+ .getGeneratedSizeOf(element);
+ if (size == 0) return null;
+ stack.add(element);
+ element.forEachLocalMember((Element member) {
+ InfoNode info = member.accept(this);
+ if (info != null) {
+ contents.add(info);
+ }
+ });
+ stack.removeLast();
+ String nameString = element.getLibraryName() == ""
+ ? "<unnamed>"
+ : element.getLibraryName();
+ contents.sort((InfoNode e1, InfoNode e2) {
+ return e1.name.compareTo(e2.name);
+ });
+ return new ElementInfoNode(
+ extra: "${element.canonicalUri}",
+ kind: "library",
+ name: nameString,
+ size: size,
+ modifiers: "",
+ contents: contents);
+ }
+
+ InfoNode visitTypedefElement(TypedefElement element) {
+ return element.alias == null
+ ? null
+ : new ElementInfoNode(
+ type: element.alias.toString(),
+ kind: "typedef",
+ name: element.name);
+ }
+
+ InfoNode visitFieldElement(FieldElement element) {
+ CodeBuffer emittedCode = compiler.backend.codeOf(element);
+ int size = 0;
+ DartType type = element.computeType(compiler);
+ TypeMask inferredType = compiler.typesTask
+ .getGuaranteedTypeOfElement(element);
+ // If a field has an empty inferred type it is never used.
+ if ((inferredType == null || inferredType.isEmpty) && emittedCode == null) {
+ return null;
+ }
+ List<InfoNode> contents = new List<InfoNode>();
+ if (emittedCode != null) {
+ contents.add(new CodeInfoNode(
+ description: "Generated initializer",
+ generatedCode: emittedCode.getText()));
+ size = emittedCode.length;
+ }
+ if (inferredType != null) {
+ contents.add(new InferredInfoNode(
+ description: "type",
+ type: inferredType.toString()));
+ stack.add(element);
+ }
+ for (Element closure in element.nestedClosures) {
+ InfoNode info = closure.accept(this);
+ if (info != null) {
+ contents.add(info);
+ size += info.size;
+ }
+ }
+ stack.removeLast();
+
+ return new ElementInfoNode(
+ kind: "field",
+ type: "$type",
+ name: element.name,
+ size: size,
+ modifiers: "${element.modifiers}",
+ contents: contents);
+ }
+
+ InfoNode visitClassElement(ClassElement element) {
+ // If the element is not resolved it is not used in the program, and we omit
+ // it from the output.
+ if (!element.isResolved) return null;
+ String modifiersString = "${element.modifiers}";
+ String supersString = element.allSupertypes == null ? "" :
+ "implements ${element.allSupertypes}";
+ List contents = [];
+ stack.add(element);
+ element.forEachLocalMember((Element member) {
+ InfoNode info = member.accept(this);
+ if (info != null) {
+ contents.add(info);
+ }
+ });
+ stack.removeLast();
+ if (contents.isEmpty) {
+ // TODO (sigurdm): Only return here if the class is never used in type
+ // checks.
+ return null;
+ }
+ contents.sort((InfoNode n1, InfoNode n2) {
+ return n1.name.compareTo(n2.name);
+ });
+ return new ElementInfoNode(
+ kind: "class",
+ name: element.name,
+ extra: supersString,
+ modifiers: modifiersString,
+ contents: contents);
+ }
+
+ InfoNode visitFunctionElement(FunctionElement element) {
+ CodeBuffer emittedCode = compiler.backend.codeOf(element);
+ int size = 0;
+ String nameString = element.name;
+ String modifiersString = "${element.modifiers}";
+ String kindString = "function";
+ if (currentElement.isClass()) {
+ kindString = "method";
+ } else if (currentElement.isField() ||
+ currentElement.isFunction() ||
+ currentElement.isConstructor()) {
+ kindString = "closure";
+ nameString = "<unnamed>";
+ }
+ if (element.isConstructor()) {
+ nameString = element.name == ""
+ ? "${element.enclosingElement.name}"
+ : "${element.enclosingElement.name}.${element.name}";
+ kindString = "constructor";
+ }
+ List contents = [];
+ if (emittedCode != null) {
+ FunctionSignature signature = element.computeSignature(compiler);
+ signature.forEachParameter((parameter) {
+ contents.add(new InferredInfoNode(
+ description: "parameter",
+ name: parameter.name,
+ type: compiler.typesTask
+ .getGuaranteedTypeOfElement(parameter).toString()));
+ });
+ contents.add(new InferredInfoNode(
+ description: "return type",
+ type: compiler.typesTask
+ .getGuaranteedReturnTypeOfElement(element).toString()));
+ contents.add(new InferredInfoNode(
+ description: "side effects",
+ type: compiler.world
+ .getSideEffectsOfElement(element).toString()));
+ contents.add(new CodeInfoNode(
+ description: "Generated code",
+ generatedCode: emittedCode.getText()));
+ size += emittedCode.length;
+ }
+ stack.add(element);
+ for (Element closure in element.nestedClosures) {
+ InfoNode info = closure.accept(this);
+ if (info != null) {
+ contents.add(info);
+ size += info.size;
+ }
+ }
+ stack.removeLast();
+ if (size == 0) {
+ return null;
+ }
+ return new ElementInfoNode(
+ type: element.type.toString(),
+ kind: kindString,
+ name: nameString,
+ size: size,
+ modifiers: modifiersString,
+ contents: contents);
+ }
+}
+
+class DumpInfoTask extends CompilerTask {
+ DumpInfoTask(Compiler compiler)
+ : infoDumpVisitor = new InfoDumpVisitor(compiler),
+ super(compiler);
+
+ String name = "Dump Info";
+
+ final CodeSizeCounter codeSizeCounter = new CodeSizeCounter();
+
+ final InfoDumpVisitor infoDumpVisitor;
+
+ void dumpInfo() {
+ measure(() {
+ ProgramInfo info = collectDumpInfo();
+ StringBuffer buffer = new StringBuffer();
+ dumpInfoHtml(info, buffer);
+ compiler.outputProvider('', 'info.html')
+ ..add(buffer.toString())
+ ..close();
+ });
+ }
+
+ ProgramInfo collectDumpInfo() {
+ List<LibraryElement> sortedLibraries = compiler.libraries.values.toList();
+ sortedLibraries.sort((LibraryElement l1, LibraryElement l2) {
+ if (l1.isPlatformLibrary && !l2.isPlatformLibrary) {
+ return 1;
+ } else if (!l1.isPlatformLibrary && l2.isPlatformLibrary) {
+ return -1;
+ }
+ return l1.getLibraryName().compareTo(l2.getLibraryName());
+ });
+
+ List<InfoNode> libraryInfos = new List<InfoNode>();
+ libraryInfos.addAll(sortedLibraries
+ .map((library) => infoDumpVisitor.visit(library))
+ .where((info) => info != null));
+
+ return new ProgramInfo(
+ compilationDuration: compiler.totalCompileTime.elapsed,
+ // TODO (sigurdm): Also count the size of deferred code
+ size: compiler.assembledCode.length,
+ libraries: libraryInfos,
+ compilationMoment: new DateTime.now(),
+ dart2jsVersion: compiler.hasBuildId ? compiler.buildId : null);
+ }
+
+ void dumpInfoHtml(ProgramInfo info, StringSink buffer) {
+ int totalSize = info.size;
+
+ buffer.writeln("""
+<html>
+ <head>
+ <title>Dart2JS compilation information</title>
+ <style>
+ code {margin-left: 20px; display: block;}
+ div.contained {margin-left: 20px;}
+ div {margin-top:0px;
+ margin-bottom: 0px;
+ white-space: pre; /*border: 1px solid;*/}
+ span.kind {}
+ span.modifiers {font-weight:bold;}
+ span.name {font-weight:bold; font-family: monospace;}
+ span.type {font-family: monospace; color:blue;}
+ </style>
+ </head>
+ <body>
+ <h1>Dart2js compilation information</h1>""");
+ buffer.writeln(h2('Compilation took place: '
+ '${info.compilationMoment}'));
+ buffer.writeln(h2('Compilation took: '
+ '${info.compilationDuration.inSeconds} seconds'));
+ buffer.writeln(h2('Output size: ${info.size} bytes'));
+ if (info.dart2jsVersion != null) {
+ buffer.writeln(h2('Dart2js version: ${info.dart2jsVersion}'));
+ }
+
+ info.libraries.forEach((InfoNode node) {
+ node.emitHtml(info, buffer);
+ });
+
+
+ // TODO (sigurdm): This script should be written in dart
+ buffer.writeln(r"""
+ <script type="text/javascript">
+ function toggler(element) {
+ return function(e) {
+ element.hidden = !element.hidden;
+ };
+ }
+ var containers = document.getElementsByClassName('container');
+ for (var i = 0; i < containers.length; i++) {
+ var container = containers[i];
+ container.addEventListener('click',
+ toggler(container.nextElementSibling), false);
+ container.nextElementSibling.hidden = true;
+ };
+ </script>
+ </body>
+</html>""");
+ }
+}
diff --git a/sdk/lib/_internal/compiler/implementation/elements/elements.dart b/sdk/lib/_internal/compiler/implementation/elements/elements.dart
index f06f740..693e4af 100644
--- a/sdk/lib/_internal/compiler/implementation/elements/elements.dart
+++ b/sdk/lib/_internal/compiler/implementation/elements/elements.dart
@@ -627,6 +627,10 @@
void forEachLocalMember(f(Element element));
}
+abstract class ClosureContainer implements Element {
+ List<FunctionElement> get nestedClosures;
+}
+
abstract class CompilationUnitElement extends Element {
Script get script;
PartOf get partTag;
@@ -739,6 +743,9 @@
Expression get cachedNode;
}
+abstract class FieldElement extends VariableElement
+ implements ClosureContainer {}
+
abstract class FieldParameterElement extends VariableElement {
VariableElement get fieldElement;
}
@@ -785,7 +792,7 @@
bool isCompatibleWith(FunctionSignature constructorSignature);
}
-abstract class FunctionElement extends Element {
+abstract class FunctionElement extends Element implements ClosureContainer {
FunctionExpression get cachedNode;
DartType get type;
FunctionSignature get functionSignature;
@@ -887,6 +894,9 @@
bool implementsInterface(ClassElement intrface);
bool hasFieldShadowedBy(Element fieldMember);
+ /// Returns `true` if this class has a @proxy annotation.
+ bool get isProxy;
+
ClassElement ensureResolved(Compiler compiler);
void addMember(Element element, DiagnosticListener listener);
@@ -918,7 +928,8 @@
{bool includeBackendMembers: false,
bool includeSuperAndInjectedMembers: false});
- void forEachInstanceField(void f(ClassElement enclosingClass, Element field),
+ void forEachInstanceField(void f(ClassElement enclosingClass,
+ FieldElement field),
{bool includeSuperAndInjectedMembers: false});
/// Similar to [forEachInstanceField] but visits static fields.
diff --git a/sdk/lib/_internal/compiler/implementation/elements/modelx.dart b/sdk/lib/_internal/compiler/implementation/elements/modelx.dart
index 215b989..f72260c 100644
--- a/sdk/lib/_internal/compiler/implementation/elements/modelx.dart
+++ b/sdk/lib/_internal/compiler/implementation/elements/modelx.dart
@@ -333,6 +333,7 @@
get patch => null;
get origin => this;
get defaultImplementation => unsupported();
+ get nestedClosures => unsupported();
bool get isRedirectingFactory => unsupported();
@@ -1164,6 +1165,17 @@
accept(ElementVisitor visitor) => visitor.visitVariableElement(this);
}
+class FieldElementX extends VariableElementX implements FieldElement {
+ List<FunctionElement> nestedClosures = new List<FunctionElement>();
+
+ FieldElementX(String name,
+ VariableListElement variables,
+ Expression cachedNode)
+ : super(name, variables, ElementKind.FIELD, cachedNode);
+
+ accept(ElementVisitor visitor) => visitor.visitFieldElement(this);
+}
+
/**
* Parameters in constructors that directly initialize fields. For example:
* [:A(this.field):].
@@ -1420,6 +1432,8 @@
DartType type;
final Modifiers modifiers;
+ List<FunctionElement> nestedClosures = new List<FunctionElement>();
+
FunctionSignature functionSignature;
/**
@@ -1744,6 +1758,7 @@
int supertypeLoadState;
int resolutionState;
bool get isResolved => resolutionState == STATE_DONE;
+ bool isProxy = false;
// backendMembers are members that have been added by the backend to simplify
// compilation. They don't have any user-side counter-part.
@@ -2067,7 +2082,8 @@
* When called on the implementation element both the fields declared in the
* origin and in the patch are included.
*/
- void forEachInstanceField(void f(ClassElement enclosingClass, Element field),
+ void forEachInstanceField(void f(ClassElement enclosingClass,
+ FieldElement field),
{bool includeSuperAndInjectedMembers: false}) {
// Filters so that [f] is only invoked with instance fields.
void fieldFilter(ClassElement enclosingClass, Element member) {
diff --git a/sdk/lib/_internal/compiler/implementation/elements/visitor.dart b/sdk/lib/_internal/compiler/implementation/elements/visitor.dart
index f8f1377..38d88b3 100644
--- a/sdk/lib/_internal/compiler/implementation/elements/visitor.dart
+++ b/sdk/lib/_internal/compiler/implementation/elements/visitor.dart
@@ -27,6 +27,7 @@
R visitPrefixElement(PrefixElement e) => visitElement(e);
R visitTypedefElement(TypedefElement e) => visitElement(e);
R visitVariableElement(VariableElement e) => visitElement(e);
+ R visitFieldElement(FieldElement e) => visitVariableElement(e);
R visitFieldParameterElement(FieldParameterElement e) => visitElement(e);
R visitVariableListElement(VariableListElement e) => visitElement(e);
R visitAbstractFieldElement(AbstractFieldElement e) => visitElement(e);
@@ -35,7 +36,7 @@
R visitClassElement(ClassElement e) => visitScopeContainerElement(e);
R visitTypeDeclarationElement(TypeDeclarationElement e) => visitElement(e);
R visitMixinApplicationElement(MixinApplicationElement e) {
- visitClassElement(e);
+ return visitClassElement(e);
}
R visitVoidElement(VoidElement e) => visitElement(e);
R visitLabelElement(LabelElement e) => visitElement(e);
diff --git a/sdk/lib/_internal/compiler/implementation/inferrer/container_tracer.dart b/sdk/lib/_internal/compiler/implementation/inferrer/container_tracer.dart
index cb204ae..bc1dc7f 100644
--- a/sdk/lib/_internal/compiler/implementation/inferrer/container_tracer.dart
+++ b/sdk/lib/_internal/compiler/implementation/inferrer/container_tracer.dart
@@ -125,21 +125,67 @@
'checkGrowable',
]);
+// A set of selectors we know do not escape the elements inside the
+// list.
+Set<String> doesNotEscapeElementSet = new Set<String>.from(
+ const <String>[
+ // From Object.
+ '==',
+ 'hashCode',
+ 'toString',
+ 'noSuchMethod',
+ 'runtimeType',
+
+ // From Iterable.
+ 'isEmpty',
+ 'isNotEmpty',
+ 'length',
+ 'any',
+ 'contains',
+ 'every',
+ 'join',
+
+ // From List.
+ 'add',
+ 'addAll',
+ 'clear',
+ 'fillRange',
+ 'indexOf',
+ 'insert',
+ 'insertAll',
+ 'lastIndexOf',
+ 'remove',
+ 'removeRange',
+ 'replaceRange',
+ 'setAll',
+ 'setRange',
+ 'shuffle',
+ '[]=',
+
+ // From JSArray.
+ 'checkMutable',
+ 'checkGrowable',
+ ]);
+
bool _VERBOSE = false;
class ContainerTracerVisitor implements TypeInformationVisitor {
- final ContainerTypeInformation container;
+ final ListTypeInformation container;
final TypeGraphInferrerEngine inferrer;
final Compiler compiler;
- // The set of [TypeInformation] where the traced container could
- // flow in, and operations done on them.
- final Setlet<TypeInformation> flowsInto = new Setlet<TypeInformation>();
// Work list that gets populated with [TypeInformation] that could
// contain the container.
final List<TypeInformation> workList = <TypeInformation>[];
+ // Work list of containers to analyze after analyzing the users of a
+ // [TypeInformation] that may be [container]. We know [container]
+ // has been stored in these containers and we must check how
+ // [container] escapes from these containers.
+ final List<ListTypeInformation> containersToAnalyze =
+ <ListTypeInformation>[];
+
// The current [TypeInformation] in the analysis.
TypeInformation currentUser;
@@ -156,8 +202,8 @@
: this.inferrer = inferrer, this.compiler = inferrer.compiler;
void addNewEscapeInformation(TypeInformation info) {
- if (flowsInto.contains(info)) return;
- flowsInto.add(info);
+ if (container.flowsInto.contains(info)) return;
+ container.flowsInto.add(info);
workList.add(info);
}
@@ -171,6 +217,9 @@
analyzedElements.add(info.owner);
info.accept(this);
});
+ while (!containersToAnalyze.isEmpty) {
+ analyzeStoredIntoContainer(containersToAnalyze.removeLast());
+ }
if (!continueAnalyzing) break;
if (analyzedElements.length > MAX_ANALYSIS_COUNT) {
bailout('Too many users');
@@ -210,10 +259,12 @@
addNewEscapeInformation(info);
}
- visitContainerTypeInformation(ContainerTypeInformation info) {
- if (container != info) {
- bailout('Stored in a container');
- }
+ visitListTypeInformation(ListTypeInformation info) {
+ containersToAnalyze.add(info);
+ }
+
+ visitMapTypeInformation(MapTypeInformation info) {
+ bailout('Stored in a map');
}
visitConcreteTypeInformation(ConcreteTypeInformation info) {}
@@ -232,6 +283,35 @@
}
}
+ void analyzeStoredIntoContainer(ListTypeInformation container) {
+ inferrer.analyzeContainer(container);
+ if (container.bailedOut) {
+ bailout('Stored in a container that bailed out');
+ } else {
+ container.flowsInto.forEach((flow) {
+ flow.users.forEach((user) {
+ if (user is !DynamicCallSiteTypeInformation) return;
+ if (user.receiver != flow) return;
+ if (returnsElementTypeSet.contains(user.selector)) {
+ addNewEscapeInformation(user);
+ } else if (!doesNotEscapeElementSet.contains(user.selector.name)) {
+ bailout('Escape from a container');
+ }
+ });
+ });
+ }
+ }
+
+ bool isAddedToContainer(DynamicCallSiteTypeInformation info) {
+ var receiverType = info.receiver.type;
+ if (!receiverType.isContainer) return false;
+ String selectorName = info.selector.name;
+ List<TypeInformation> arguments = info.arguments.positional;
+ return (selectorName == '[]=' && currentUser == arguments[1])
+ || (selectorName == 'insert' && currentUser == arguments[0])
+ || (selectorName == 'add' && currentUser == arguments[0]);
+ }
+
visitDynamicCallSiteTypeInformation(DynamicCallSiteTypeInformation info) {
Selector selector = info.selector;
String selectorName = selector.name;
@@ -269,6 +349,18 @@
&& !info.targets.every((element) => element.isFunction())) {
bailout('Passed to a closure');
return;
+ } else if (isAddedToContainer(info)) {
+ ContainerTypeMask mask = info.receiver.type;
+ if (mask.allocationNode != null) {
+ ListTypeInformation container =
+ inferrer.types.allocatedLists[mask.allocationNode];
+ containersToAnalyze.add(container);
+ } else {
+ // The [ContainerTypeMask] is a union of two containers, and
+ // we lose track of where these containers have been allocated
+ // at this point.
+ bailout('Stored in too many containers');
+ }
}
if (info.targets
@@ -276,7 +368,6 @@
.any((other) => other == currentUser)) {
addNewEscapeInformation(info);
}
-
}
bool isClosure(Element element) {
@@ -285,6 +376,17 @@
return outermost.declaration != element.declaration;
}
+ bool isParameterOfListAddingMethod(Element element) {
+ if (!element.isParameter()) return false;
+ if (element.getEnclosingClass() != compiler.backend.listImplementation) {
+ return false;
+ }
+ Element method = element.enclosingElement;
+ return (method.name == '[]=')
+ || (method.name == 'add')
+ || (method.name == 'insert');
+ }
+
visitElementTypeInformation(ElementTypeInformation info) {
if (isClosure(info.element)) {
bailout('Returned from a closure');
@@ -292,6 +394,11 @@
if (compiler.backend.isNeededForReflection(info.element)) {
bailout('Escape in reflection');
}
+ if (isParameterOfListAddingMethod(info.element)) {
+ // These elements are being handled in
+ // [visitDynamicCallSiteTypeInformation].
+ return;
+ }
addNewEscapeInformation(info);
}
}
diff --git a/sdk/lib/_internal/compiler/implementation/inferrer/inferrer_visitor.dart b/sdk/lib/_internal/compiler/implementation/inferrer/inferrer_visitor.dart
index 6eb5bb5..7db8c95 100644
--- a/sdk/lib/_internal/compiler/implementation/inferrer/inferrer_visitor.dart
+++ b/sdk/lib/_internal/compiler/implementation/inferrer/inferrer_visitor.dart
@@ -42,10 +42,12 @@
bool isNull(T type);
Selector newTypedSelector(T receiver, Selector selector);
- T allocateContainer(T type,
- Node node,
- Element enclosing,
- [T elementType, int length]);
+ T allocateList(T type,
+ Node node,
+ Element enclosing,
+ [T elementType, int length]);
+
+ T allocateMap(T keyType, T valueType, T type);
/**
* Returns the least upper bound between [firstType] and
diff --git a/sdk/lib/_internal/compiler/implementation/inferrer/ir_type_inferrer.dart b/sdk/lib/_internal/compiler/implementation/inferrer/ir_type_inferrer.dart
index 5591f68..bae7c29 100644
--- a/sdk/lib/_internal/compiler/implementation/inferrer/ir_type_inferrer.dart
+++ b/sdk/lib/_internal/compiler/implementation/inferrer/ir_type_inferrer.dart
@@ -5,56 +5,64 @@
library dart2js.ir_type_inferrer;
import '../ir/ir_nodes.dart';
-import 'inferrer_visitor.dart' show TypeSystem;
+import 'inferrer_visitor.dart' show TypeSystem, ArgumentsTypes;
import 'simple_types_inferrer.dart' show InferrerEngine;
import '../elements/elements.dart' show
- Element, FunctionElement, FunctionSignature;
+ Elements, Element, FunctionElement, FunctionSignature;
import '../dart2jslib.dart' show Compiler, Constant, ConstantSystem;
import 'type_graph_inferrer.dart' show TypeInformation;
+import '../universe/universe.dart' show Selector, SideEffects;
+
class IrTypeInferrerVisitor extends IrNodesVisitor {
final Compiler compiler;
final Element analyzedElement;
- final TypeSystem<TypeInformation> types;
+ final Element outermostElement;
final InferrerEngine<TypeInformation, TypeSystem<TypeInformation>> inferrer;
+ final TypeSystem<TypeInformation> types;
IrTypeInferrerVisitor(this.compiler,
- this.analyzedElement,
+ Element analyzedElement,
InferrerEngine<TypeInformation,
TypeSystem<TypeInformation>> inferrer)
- : inferrer = inferrer,
+ : this.analyzedElement = analyzedElement,
+ outermostElement = _outermostElement(analyzedElement),
+ this.inferrer = inferrer,
types = inferrer.types;
+ final SideEffects sideEffects = new SideEffects.empty();
+ bool inLoop = false;
+
+ static Element _outermostElement(Element analyzedElememnt) {
+ Element outermostElement =
+ analyzedElememnt.getOutermostEnclosingMemberOrTopLevel().implementation;
+ assert(outermostElement != null);
+ return outermostElement;
+ }
+
final Map<IrNode, TypeInformation> analyzed = <IrNode, TypeInformation>{};
TypeInformation returnType;
TypeInformation run() {
- if (analyzedElement.isField()) {
- // TODO(lry): handle fields.
- throw "Type infer from IR for field $analyzedElement";
- }
+ // TODO(lry): handle fields.
+ assert(!analyzedElement.isField());
+
FunctionElement function = analyzedElement;
FunctionSignature signature = function.computeSignature(compiler);
IrFunction node = compiler.irBuilder.getIr(function);
+
// TODO(lry): handle parameters.
-
- if (function.isNative()) {
- // TODO(lry): handle native.
- throw "Type infer from IR for native $analyzedElement";
- }
-
- if (analyzedElement.isGenerativeConstructor()) {
- // TODO(lry): handle constructors.
- throw "Type infer from IR for constructor $analyzedElement";
- }
-
- if (analyzedElement.isSynthesized) {
- // TODO(lry): handle synthethics.
- throw "Type infer from IR for synthetic $analyzedElement";
- }
+ assert(function.computeSignature(compiler).parameterCount == 0);
+ // TODO(lry): handle native.
+ assert(!function.isNative());
+ // TODO(lry): handle constructors.
+ assert(!analyzedElement.isGenerativeConstructor());
+ // TODO(lry): handle synthethics.
+ assert(!analyzedElement.isSynthesized);
visitAll(node.statements);
+ compiler.world.registerSideEffects(analyzedElement, sideEffects);
return returnType;
}
@@ -62,6 +70,25 @@
return inferrer.types.getConcreteTypeFor(constant.computeMask(compiler));
}
+ TypeInformation handleStaticSend(IrNode node,
+ Selector selector,
+ Element element,
+ ArgumentsTypes arguments) {
+ return inferrer.registerCalledElement(
+ node, selector, outermostElement, element, arguments,
+ sideEffects, inLoop);
+ }
+
+ ArgumentsTypes<TypeInformation> analyzeArguments(
+ Selector selector, List<IrNode> arguments) {
+ // TODO(lry): support named arguments, necessary information should be
+ // in [selector].
+ assert(selector.namedArgumentCount == 0);
+ List<TypeInformation> positional =
+ arguments.map((e) => analyzed[e]).toList(growable: false);
+ return new ArgumentsTypes<TypeInformation>(positional, null);
+ }
+
void visitIrConstant(IrConstant node) {
analyzed[node] = typeOfConstant(node.value);
}
@@ -71,7 +98,22 @@
returnType = inferrer.addReturnTypeFor(analyzedElement, returnType, type);
}
- void visitNode(IrNode node) {
+ void visitIrInvokeStatic(IrInvokeStatic node) {
+ FunctionElement element = node.target;
+ Selector selector = node.selector;
+ // TODO(lry): handle foreign functions.
+ assert(!element.isForeign(compiler));
+ // In erroneous code the number of arguments in the selector might not
+ // match the function element.
+ if (!selector.applies(element, compiler)) {
+ analyzed[node] = types.dynamicType;
+ } else {
+ ArgumentsTypes arguments = analyzeArguments(selector, node.arguments);
+ analyzed[node] = handleStaticSend(node, selector, element, arguments);
+ }
+ }
+
+ void visitIrNode(IrNode node) {
compiler.internalError('Unexpected IrNode $node');
}
}
diff --git a/sdk/lib/_internal/compiler/implementation/inferrer/simple_types_inferrer.dart b/sdk/lib/_internal/compiler/implementation/inferrer/simple_types_inferrer.dart
index 85f9ed5..29c46fa 100644
--- a/sdk/lib/_internal/compiler/implementation/inferrer/simple_types_inferrer.dart
+++ b/sdk/lib/_internal/compiler/implementation/inferrer/simple_types_inferrer.dart
@@ -10,6 +10,7 @@
import '../elements/elements.dart';
import '../native_handler.dart' as native;
import '../tree/tree.dart';
+import '../ir/ir_nodes.dart' show IrNode;
import '../util/util.dart' show Link, Spannable, Setlet;
import '../types/types.dart'
show TypesInferrer, FlatTypeMask, TypeMask, ContainerTypeMask,
@@ -99,13 +100,17 @@
=> new TypeMask.nonNullExact(type.declaration);
TypeMask nonNullEmpty() => new TypeMask.nonNullEmpty();
- TypeMask allocateContainer(TypeMask type,
- Node node,
- Element enclosing,
- [TypeMask elementType, int length]) {
+ TypeMask allocateList(TypeMask type,
+ Node node,
+ Element enclosing,
+ [TypeMask elementType, int length]) {
return new ContainerTypeMask(type, node, enclosing, elementType, length);
}
+ TypeMask allocateMap(TypeMask keys, TypeMask values, TypeMask type) {
+ return type;
+ }
+
Selector newTypedSelector(TypeMask receiver, Selector selector) {
return new TypedSelector(receiver, selector);
}
@@ -341,9 +346,15 @@
return returnType;
}
- void updateSelectorInTree(Element owner, Node node, Selector selector) {
+ void updateSelectorInTree(
+ Element owner, Spannable node, Selector selector) {
+ if (node is IrNode) {
+ // TODO(lry): update selector for IrInvokeDynamic.
+ throw "updateSelector for IR node $node";
+ }
+ Node astNode = node;
var elements = compiler.enqueuer.resolution.getCachedElements(owner);
- if (node.asSendSet() != null) {
+ if (astNode.asSendSet() != null) {
if (selector.isSetter() || selector.isIndexSet()) {
elements.setSelector(node, selector);
} else if (selector.isGetter() || selector.isIndex()) {
@@ -352,10 +363,10 @@
assert(selector.isOperator());
elements.setOperatorSelectorInComplexSendSet(node, selector);
}
- } else if (node.asSend() != null) {
+ } else if (astNode.asSend() != null) {
elements.setSelector(node, selector);
} else {
- assert(node.asForIn() != null);
+ assert(astNode.asForIn() != null);
if (selector.asUntyped == compiler.iteratorSelector) {
elements.setIteratorSelector(node, selector);
} else if (selector.asUntyped == compiler.currentSelector) {
@@ -595,7 +606,7 @@
T containerType = node.isConst()
? types.constListType
: types.growableListType;
- return types.allocateContainer(
+ return types.allocateList(
containerType,
node,
outermostElement,
@@ -604,6 +615,30 @@
});
}
+ T visitLiteralMap(LiteralMap node) {
+ NodeList entries = node.entries;
+ T keyType;
+ T valueType;
+ if (entries.isEmpty) {
+ keyType = types.nonNullEmpty();
+ valueType = types.nonNullEmpty();
+ } else {
+ for (LiteralMapEntry entry in entries) {
+ T key = visit(entry.key);
+ keyType = keyType == null
+ ? types.allocatePhi(null, null, key)
+ : types.addPhiInput(null, keyType, key);
+
+ T value = visit(entry.value);
+ valueType = valueType == null
+ ? types.allocatePhi(null, null, value)
+ : types.addPhiInput(null, valueType, value);
+ }
+ }
+ T type = node.isConst() ? types.constMapType : types.mapType;
+ return types.allocateMap(keyType, valueType, type);
+ }
+
bool isThisOrSuper(Node node) => node.isThis() || node.isSuper();
bool isInClassOrSubclass(Element element) {
@@ -904,12 +939,14 @@
}
Selector selector = elements.getSelector(node);
ArgumentsTypes arguments = analyzeArguments(node.arguments);
+ // In erroneous code the number of arguments in the selector might not
+ // match the function element.
if (!selector.applies(element, compiler)) return types.dynamicType;
T returnType = handleStaticSend(node, selector, element, arguments);
if (Elements.isGrowableListConstructorCall(element, node, compiler)) {
return inferrer.concreteTypes.putIfAbsent(
- node, () => types.allocateContainer(
+ node, () => types.allocateList(
types.growableListType, node, outermostElement,
types.nonNullEmpty(), 0));
} else if (Elements.isFixedListConstructorCall(element, node, compiler)
@@ -922,7 +959,7 @@
: arguments.positional[1];
return inferrer.concreteTypes.putIfAbsent(
- node, () => types.allocateContainer(
+ node, () => types.allocateList(
types.fixedListType, node, outermostElement,
elementType, length));
} else if (Elements.isConstructorOfTypedArraySubclass(element, compiler)) {
@@ -930,7 +967,7 @@
T elementType = inferrer.returnTypeOfElement(
element.getEnclosingClass().lookupMember('[]'));
return inferrer.concreteTypes.putIfAbsent(
- node, () => types.allocateContainer(
+ node, () => types.allocateList(
types.nonNullExact(element.getEnclosingClass()), node,
outermostElement, elementType, length));
} else if (element.isFunction() || element.isConstructor()) {
@@ -1028,6 +1065,7 @@
Selector selector,
Element element,
ArgumentsTypes arguments) {
+ // Erroneous elements may be unresolved, for example missing getters.
if (Elements.isUnresolved(element)) return types.dynamicType;
return inferrer.registerCalledElement(
node, selector, outermostElement, element, arguments,
diff --git a/sdk/lib/_internal/compiler/implementation/inferrer/type_graph_inferrer.dart b/sdk/lib/_internal/compiler/implementation/inferrer/type_graph_inferrer.dart
index 0cd9be4..c31b2c0 100644
--- a/sdk/lib/_internal/compiler/implementation/inferrer/type_graph_inferrer.dart
+++ b/sdk/lib/_internal/compiler/implementation/inferrer/type_graph_inferrer.dart
@@ -8,6 +8,7 @@
import '../dart_types.dart' show DartType, InterfaceType, TypeKind;
import '../elements/elements.dart';
import '../tree/tree.dart' show LiteralList, Node;
+import '../ir/ir_nodes.dart' show IrNode;
import '../types/types.dart' show TypeMask, ContainerTypeMask, TypesInferrer;
import '../universe/universe.dart' show Selector, TypedSelector, SideEffects;
import '../dart2jslib.dart' show Compiler, TreeElementMapping;
@@ -50,8 +51,8 @@
final Map<Element, TypeInformation> typeInformations =
new Map<Element, TypeInformation>();
- /// [ContainerTypeInformation] for allocated containers.
- final Map<Node, TypeInformation> allocatedContainers =
+ /// [ListTypeInformation] for allocated lists.
+ final Map<Node, TypeInformation> allocatedLists =
new Map<Node, TypeInformation>();
/// Cache of [ConcreteTypeInformation].
@@ -270,10 +271,10 @@
return type == nullType;
}
- TypeInformation allocateContainer(TypeInformation type,
- Node node,
- Element enclosing,
- [TypeInformation elementType, int length]) {
+ TypeInformation allocateList(TypeInformation type,
+ Node node,
+ Element enclosing,
+ [TypeInformation elementType, int length]) {
bool isTypedArray = (compiler.typedDataClass != null)
&& type.type.satisfies(compiler.typedDataClass, compiler);
bool isConst = (type.type == compiler.typesTask.constListType);
@@ -293,8 +294,17 @@
element.inferred = isElementInferred;
allocatedTypes.add(element);
- return allocatedContainers[node] =
- new ContainerTypeInformation(mask, element, length);
+ return allocatedLists[node] =
+ new ListTypeInformation(mask, element, length);
+ }
+
+ TypeInformation allocateMap(TypeInformation keyType,
+ TypeInformation valueType,
+ ConcreteTypeInformation type) {
+ MapTypeInformation map =
+ new MapTypeInformation(keyType, valueType, type.type);
+ allocatedTypes.add(map);
+ return map;
}
Selector newTypedSelector(TypeInformation info, Selector selector) {
@@ -416,7 +426,7 @@
/// The maximum number of times we allow a node in the graph to
/// change types. If a node reaches that limit, we give up
/// inferencing on it and give it the dynamic type.
- final int MAX_CHANGE_COUNT = 5;
+ final int MAX_CHANGE_COUNT = 6;
int overallRefineCount = 0;
int addedInGraph = 0;
@@ -424,6 +434,23 @@
TypeGraphInferrerEngine(Compiler compiler, this.mainElement)
: super(compiler, new TypeInformationSystem(compiler));
+ void analyzeContainer(ListTypeInformation info) {
+ if (info.analyzed) return;
+ info.analyzed = true;
+ ContainerTracerVisitor tracer = new ContainerTracerVisitor(info, this);
+ List<TypeInformation> newAssignments = tracer.run();
+ if (newAssignments == null) {
+ return;
+ }
+ info.bailedOut = false;
+ info.elementType.inferred = true;
+ TypeMask fixedListType = compiler.typesTask.fixedListType;
+ if (info.originalContainerType.forwardTo == fixedListType) {
+ info.checksGrowable = tracer.callsGrowableMethod;
+ }
+ newAssignments.forEach(info.elementType.addAssignment);
+ }
+
void runOverAllElements() {
if (compiler.disableTypeInference) return;
compiler.progress.reset();
@@ -444,18 +471,10 @@
refine();
// Try to infer element types of lists.
- types.allocatedContainers.values.forEach((ContainerTypeInformation info) {
+ types.allocatedLists.values.forEach((ListTypeInformation info) {
if (info.elementType.inferred) return;
- ContainerTracerVisitor tracer = new ContainerTracerVisitor(info, this);
- List<TypeInformation> newAssignments = tracer.run();
- if (newAssignments == null) return;
-
- info.elementType.inferred = true;
- TypeMask fixedListType = compiler.typesTask.fixedListType;
- if (info.originalContainerType.forwardTo == fixedListType) {
- info.checksGrowable = tracer.callsGrowableMethod;
- }
- newAssignments.forEach(info.elementType.addAssignment);
+ analyzeContainer(info);
+ if (info.bailedOut) return;
workQueue.add(info);
workQueue.add(info.elementType);
});
@@ -476,7 +495,7 @@
refine();
if (_VERBOSE) {
- types.allocatedContainers.values.forEach((ContainerTypeInformation info) {
+ types.allocatedLists.values.forEach((ListTypeInformation info) {
print('${info.type} '
'for ${info.originalContainerType.allocationNode} '
'at ${info.originalContainerType.allocationElement}');
@@ -493,12 +512,12 @@
if (analyzedElements.contains(element)) return;
analyzedElements.add(element);
- var visitor;
- if (compiler.irBuilder.hasIr(element)) {
- visitor = new IrTypeInferrerVisitor(compiler, element, this);
- } else {
- visitor = new SimpleTypeInferrerVisitor(element, compiler, this);
- }
+ var visitor;
+ if (compiler.irBuilder.hasIr(element)) {
+ visitor = new IrTypeInferrerVisitor(compiler, element, this);
+ } else {
+ visitor = new SimpleTypeInferrerVisitor(element, compiler, this);
+ }
TypeInformation type;
compiler.withCurrentElement(element, () {
type = visitor.run();
@@ -511,7 +530,7 @@
// If [element] is final and has an initializer, we record
// the inferred type.
if (node.asSendSet() != null) {
- if (type is! ContainerTypeInformation) {
+ if (type is! ListTypeInformation) {
// For non-container types, the constant handler does
// constant folding that could give more precise results.
Constant value =
@@ -846,7 +865,7 @@
throw new UnsupportedError(
"Cannot query the type inferrer when type inference is disabled.");
}
- return types.getInferredTypeOf(element).callers.keys;
+ return types.getInferredTypeOf(element).callers;
}
/**
@@ -911,12 +930,12 @@
TypeMask getTypeOfNode(Element owner, Node node) {
if (compiler.disableTypeInference) return compiler.typesTask.dynamicType;
- return inferrer.types.allocatedContainers[node].type;
+ return inferrer.types.allocatedLists[node].type;
}
bool isFixedArrayCheckedForGrowable(Node node) {
if (compiler.disableTypeInference) return true;
- ContainerTypeInformation info = inferrer.types.allocatedContainers[node];
+ ListTypeInformation info = inferrer.types.allocatedLists[node];
return info.checksGrowable;
}
@@ -944,14 +963,6 @@
return result;
}
- Iterable<TypeMask> get containerTypes {
- if (compiler.disableTypeInference) {
- throw new UnsupportedError(
- "Cannot query the type inferrer when type inference is disabled.");
- }
- return inferrer.types.allocatedContainers.values.map((info) => info.type);
- }
-
Iterable<Element> getCallersOf(Element element) {
if (compiler.disableTypeInference) {
throw new UnsupportedError(
@@ -962,14 +973,8 @@
bool isCalledOnce(Element element) {
if (compiler.disableTypeInference) return false;
-
- int count = 0;
ElementTypeInformation info = inferrer.types.getInferredTypeOf(element);
- for (var set in info.callers.values) {
- count += set.length;
- if (count > 1) return false;
- }
- return count == 1;
+ return info.isCalledOnce();
}
void clear() {
diff --git a/sdk/lib/_internal/compiler/implementation/inferrer/type_graph_nodes.dart b/sdk/lib/_internal/compiler/implementation/inferrer/type_graph_nodes.dart
index 06d0b06..3f4dc37 100644
--- a/sdk/lib/_internal/compiler/implementation/inferrer/type_graph_nodes.dart
+++ b/sdk/lib/_internal/compiler/implementation/inferrer/type_graph_nodes.dart
@@ -208,8 +208,16 @@
*/
class ElementTypeInformation extends TypeInformation {
final Element element;
- final Map<Element, Setlet<Spannable>> callers =
- new Map<Element, Setlet<Spannable>>();
+
+ /**
+ * This map contains the callers of [element]. It stores all unique call sites
+ * to enable counting the global number of call sites of [element].
+ *
+ * A call site is either an AST [Node], an [IrNode] or in the case of
+ * synthesized calls, an [Element] (see uses of [synthesizeForwardingCall]
+ * in [SimpleTypeInferrerVisitor]).
+ */
+ final Map<Element, Setlet<Spannable>> _callers = new Map<Element, Setlet>();
ElementTypeInformation.internal(this.element, assignments)
: super(null, assignments);
@@ -224,18 +232,30 @@
}
void addCall(Element caller, Spannable node) {
- callers.putIfAbsent(caller, () => new Setlet<Spannable>()).add(node);
+ assert(node is Node || node is IrNode || node is Element);
+ _callers.putIfAbsent(caller, () => new Setlet()).add(node);
}
- void removeCall(Element caller, Spannable node) {
- Setlet<Spannable> calls = callers[caller];
+ void removeCall(Element caller, node) {
+ Setlet calls = _callers[caller];
if (calls == null) return;
calls.remove(node);
if (calls.isEmpty) {
- callers.remove(caller);
+ _callers.remove(caller);
}
}
+ Iterable<Element> get callers => _callers.keys;
+
+ bool isCalledOnce() {
+ int count = 0;
+ for (var set in _callers.values) {
+ count += set.length;
+ if (count > 1) return false;
+ }
+ return count == 1;
+ }
+
TypeMask handleSpecialCases(TypeGraphInferrerEngine inferrer) {
if (abandonInferencing) {
return type;
@@ -816,10 +836,10 @@
}
/**
- * A [ContainerTypeInformation] is a [TypeInformation] created
+ * A [ListTypeInformation] is a [TypeInformation] created
* for each `List` instantiations.
*/
-class ContainerTypeInformation extends TypeInformation {
+class ListTypeInformation extends TypeInformation {
final ElementInContainerTypeInformation elementType;
/** The container type before it is inferred. */
@@ -832,23 +852,30 @@
int inferredLength;
/**
- * Whether this container goes through a growable check.
+ * Whether this list goes through a growable check.
* We conservatively assume it does.
*/
bool checksGrowable = true;
- ContainerTypeInformation(this.originalContainerType,
- this.elementType,
- this.originalLength) {
+ // The set of [TypeInformation] where the traced container could
+ // flow in.
+ final Setlet<TypeInformation> flowsInto = new Setlet<TypeInformation>();
+
+ bool bailedOut = true;
+ bool analyzed = false;
+
+ ListTypeInformation(this.originalContainerType,
+ this.elementType,
+ this.originalLength) {
type = originalContainerType;
inferredLength = originalContainerType.length;
elementType.addUser(this);
}
- String toString() => 'Container type $type';
+ String toString() => 'List type $type';
accept(TypeInformationVisitor visitor) {
- return visitor.visitContainerTypeInformation(this);
+ return visitor.visitListTypeInformation(this);
}
bool hasStableType(TypeGraphInferrerEngine inferrer) {
@@ -872,7 +899,7 @@
/**
* An [ElementInContainerTypeInformation] holds the common type of the
- * elements in a [ContainerTypeInformation].
+ * elements in a [ListTypeInformation].
*/
class ElementInContainerTypeInformation extends TypeInformation {
/** Whether the element type in that container has been inferred. */
@@ -901,6 +928,32 @@
}
/**
+ * A [MapTypeInformation] is a [TypeInformation] created
+ * for maps.
+ */
+class MapTypeInformation extends TypeInformation {
+ final TypeInformation keyType;
+ final TypeInformation valueType;
+ final TypeMask initialType;
+
+ MapTypeInformation(this.keyType, this.valueType, this.initialType) {
+ keyType.addUser(this);
+ valueType.addUser(this);
+ type = initialType;
+ }
+
+ accept(TypeInformationVisitor visitor) {
+ return visitor.visitMapTypeInformation(this);
+ }
+
+ TypeMask refine(TypeGraphInferrerEngine inferrer) {
+ return initialType;
+ }
+
+ String toString() => 'Map $type';
+}
+
+/**
* A [PhiElementTypeInformation] is an union of
* [ElementTypeInformation], that is local to a method.
*/
@@ -927,7 +980,8 @@
T visitPhiElementTypeInformation(PhiElementTypeInformation info);
T visitElementInContainerTypeInformation(
ElementInContainerTypeInformation info);
- T visitContainerTypeInformation(ContainerTypeInformation info);
+ T visitListTypeInformation(ListTypeInformation info);
+ T visitMapTypeInformation(MapTypeInformation info);
T visitConcreteTypeInformation(ConcreteTypeInformation info);
T visitClosureCallSiteTypeInformation(ClosureCallSiteTypeInformation info);
T visitStaticCallSiteTypeInformation(StaticCallSiteTypeInformation info);
diff --git a/sdk/lib/_internal/compiler/implementation/ir/ir_builder.dart b/sdk/lib/_internal/compiler/implementation/ir/ir_builder.dart
index 86cdabd..0a747e5 100644
--- a/sdk/lib/_internal/compiler/implementation/ir/ir_builder.dart
+++ b/sdk/lib/_internal/compiler/implementation/ir/ir_builder.dart
@@ -6,12 +6,13 @@
import 'ir_nodes.dart';
import '../elements/elements.dart';
+import '../elements/modelx.dart' show FunctionElementX;
import '../dart2jslib.dart';
import '../source_file.dart';
import '../tree/tree.dart';
import '../scanner/scannerlib.dart' show Token;
import '../js_backend/js_backend.dart' show JavaScriptBackend;
-import 'ir_pickler.dart' show Unpickler;
+import 'ir_pickler.dart' show Unpickler, IrConstantPool;
/**
* This task iterates through all resolved elements and builds [IrNode]s. The
@@ -72,8 +73,10 @@
if (irNode != null) {
assert(() {
// In host-checked mode, serialize and de-serialize the IrNode.
- List<int> data = irNode.pickle();
- irNode = new Unpickler(compiler).unpickle(data);
+ LibraryElement library = element.declaration.getLibrary();
+ IrConstantPool constantPool = IrConstantPool.forLibrary(library);
+ List<int> data = irNode.pickle(constantPool);
+ irNode = new Unpickler(compiler, constantPool).unpickle(data);
return true;
});
nodes[element] = irNode;
@@ -115,8 +118,11 @@
}
void unlinkTreeAndToken(element) {
+ // Ensure the funciton signature has been computed (requires the AST).
+ assert(element is !FunctionElementX || element.functionSignature != null);
element.beginToken.next = null;
- element.cachedNode = null;
+ // TODO(lry): Mark [element] so that parseNode will fail an assertion.
+ // element.cachedNode = null;
}
SourceFile elementSourceFile(Element element) {
@@ -211,9 +217,9 @@
IrNode visitReturn(Return node) {
assert(!blockReturns);
- IrNode value;
+ IrExpression value;
// TODO(lry): support native returns.
- if (node.beginToken.value == 'native') return giveup();
+ if (node.beginToken.value == 'native') giveup();
if (node.expression == null) {
value = builder.addConstant(constantSystem.createNull(), node);
} else {
@@ -251,35 +257,63 @@
// IrNode visitLiteralSymbol(LiteralSymbol node) => visitExpression(node);
IrNode visitAssert(Send node) {
- return giveup();
+ giveup();
}
IrNode visitClosureSend(Send node) {
- return giveup();
+ giveup();
}
IrNode visitDynamicSend(Send node) {
- return giveup();
+ giveup();
}
IrNode visitGetterSend(Send node) {
- return giveup();
+ giveup();
}
IrNode visitOperatorSend(Send node) {
- return giveup();
+ giveup();
}
IrNode visitStaticSend(Send node) {
- return giveup();
+ Selector selector = elements.getSelector(node);
+ Element element = elements[node];
+
+ // TODO(lry): support static fields. (separate IR instruction?)
+ if (element.isField() || element.isGetter()) giveup();
+ // TODO(lry): support constructors / factory calls.
+ if (element.isConstructor()) giveup();
+ // TODO(lry): support foreign functions.
+ if (element.isForeign(compiler)) giveup();
+ // TODO(lry): for elements that could not be resolved emit code to throw a
+ // [NoSuchMethodError].
+ if (element.isErroneous()) giveup();
+ // TODO(lry): support named arguments
+ if (selector.namedArgumentCount != 0) giveup();
+
+ List<IrExpression> arguments = <IrExpression>[];
+ // TODO(lry): support default arguments, need support for locals.
+ bool succeeded = selector.addArgumentsToList(
+ node.arguments, arguments, element.implementation,
+ (node) => node.accept(this), (node) => giveup(), compiler);
+ if (!succeeded) {
+ // TODO(lry): generate code to throw a [WrongArgumentCountError].
+ giveup();
+ }
+ // TODO(lry): generate IR for object identicality.
+ if (element == compiler.identicalFunction) giveup();
+ IrInvokeStatic result = builder.addStatement(
+ new IrInvokeStatic(nodePosition(node), element, selector, arguments));
+ return result;
}
IrNode visitSuperSend(Send node) {
- return giveup();
+ giveup();
}
IrNode visitTypeReferenceSend(Send node) {
- return giveup();
+ giveup();
}
static final String ABORT_IRNODE_BUILDER = "IrNode builder aborted";
diff --git a/sdk/lib/_internal/compiler/implementation/ir/ir_nodes.dart b/sdk/lib/_internal/compiler/implementation/ir/ir_nodes.dart
index 5a0672c..1aeeca8 100644
--- a/sdk/lib/_internal/compiler/implementation/ir/ir_nodes.dart
+++ b/sdk/lib/_internal/compiler/implementation/ir/ir_nodes.dart
@@ -7,7 +7,10 @@
library dart2js.ir_nodes;
import '../dart2jslib.dart' show Constant;
-import 'ir_pickler.dart' show Pickler;
+import '../elements/elements.dart' show FunctionElement, LibraryElement;
+import 'ir_pickler.dart' show Pickler, IrConstantPool;
+import '../universe/universe.dart' show Selector, SelectorKind;
+import '../util/util.dart' show Spannable;
/**
* A pair of source offset and an identifier name. Identifier names are used in
@@ -19,7 +22,7 @@
PositionWithIdentifierName(this.offset, this.sourceName);
}
-abstract class IrNode {
+abstract class IrNode implements Spannable {
static int hashCount = 0;
final int hashCode = hashCount = (hashCount + 1) & 0x3fffffff;
@@ -31,12 +34,18 @@
String get sourceName => (position is int) ? null : position.sourceName;
- List<int> pickle() => new Pickler().pickle(this);
+ List<int> pickle(IrConstantPool constantPool) {
+ return new Pickler(constantPool).pickle(this);
+ }
accept(IrNodesVisitor visitor);
}
-class IrFunction extends IrNode {
+abstract class IrExpression extends IrNode {
+ IrExpression(position) : super(position);
+}
+
+class IrFunction extends IrExpression {
final List<IrNode> statements;
final int endOffset;
@@ -49,14 +58,14 @@
}
class IrReturn extends IrNode {
- final IrNode value;
+ final IrExpression value;
IrReturn(position, this.value) : super(position);
accept(IrNodesVisitor visitor) => visitor.visitIrReturn(this);
}
-class IrConstant extends IrNode {
+class IrConstant extends IrExpression {
final Constant value;
IrConstant(position, this.value) : super(position);
@@ -64,6 +73,27 @@
accept(IrNodesVisitor visitor) => visitor.visitIrConstant(this);
}
+class IrInvokeStatic extends IrExpression {
+ final FunctionElement target;
+
+ final List<IrExpression> arguments;
+
+ /**
+ * The selector encodes how the function is invoked: number of positional
+ * arguments, names used in named arguments. This information is required
+ * to build the [StaticCallSiteTypeInformation] for the inference graph.
+ */
+ final Selector selector;
+
+ IrInvokeStatic(position, this.target, this.selector, this.arguments)
+ : super(position) {
+ assert(selector.kind == SelectorKind.CALL);
+ assert(selector.name == target.name);
+ }
+
+ accept(IrNodesVisitor visitor) => visitor.visitIrInvokeStatic(this);
+}
+
abstract class IrNodesVisitor<T> {
T visit(IrNode node) => node.accept(this);
@@ -72,9 +102,11 @@
for (IrNode n in nodes) visit(n);
}
- T visitNode(IrNode node);
+ T visitIrNode(IrNode node);
- T visitIrFunction(IrFunction node) => visitNode(node);
- T visitIrReturn(IrReturn node) => visitNode(node);
- T visitIrConstant(IrConstant node) => visitNode(node);
+ T visitIrExpression(IrExpression node) => visitIrNode(node);
+ T visitIrFunction(IrFunction node) => visitIrExpression(node);
+ T visitIrReturn(IrReturn node) => visitIrNode(node);
+ T visitIrConstant(IrConstant node) => visitIrExpression(node);
+ T visitIrInvokeStatic(IrInvokeStatic node) => visitIrExpression(node);
}
diff --git a/sdk/lib/_internal/compiler/implementation/ir/ir_pickler.dart b/sdk/lib/_internal/compiler/implementation/ir/ir_pickler.dart
index ff43852..317940c 100644
--- a/sdk/lib/_internal/compiler/implementation/ir/ir_pickler.dart
+++ b/sdk/lib/_internal/compiler/implementation/ir/ir_pickler.dart
@@ -16,24 +16,30 @@
import '../tree/tree.dart' show
DartString, LiteralDartString, RawSourceDartString, EscapedSourceDartString,
ConsDartString;
+import '../elements/elements.dart' show
+ Element, LibraryElement, FunctionElement;
+import '../universe/universe.dart' show Selector;
part 'ir_unpickler.dart';
-/* The elementCount only includes elements that might potentially be referred
- * to in back reference, for example nodes.
+/* The int(entries) counts expression nodes, which might potentially be
+ * referred to in a back reference.
*
- * pickle ::= int(elementCount) node(function)
+ * pickle ::= int(entries) node(function)
*
* int ::= see [writeInt] for number encoding
*
* string ::= byte(STRING_ASCII) int(length) {byte(ascii)}
* | byte(STRING_UTF8) int(length) {byte(utf8)}
*
- * node ::= byte(BACK_REFERENCE) int(index)
- * | byte(NODE_FUNCTION) position int(endSourceOffset)
+ * node ::= byte(NODE_FUNCTION) position int(endSourceOffset)
* int(namePosition) int(statements) {node(statement)}
- * | byte(NODE_RETURN) position node(value)
+ * | byte(NODE_RETURN) position reference(value)
* | byte(NODE_CONST) position constant
+ * | byte(NODE_INVOKE_STATIC) position element int(arguments)
+ * {reference(argument)}
+ *
+ * reference ::= int(indexDelta)
*
* position ::= byte(POSITION_WITH_ID) string(sourceName) int(sourceOffset)
* | byte(POSITION_OFFSET) int(sourceOffset)
@@ -46,20 +52,24 @@
* | byte(CONST_STRING_ESCAPED) string int(length)
* | byte(CONST_STRING_CONS) constant(left) constant(right)
* | byte(CONST_NULL)
+ *
+ * element ::= int(constantPoolIndex)
*/
class Pickles {
- static const int BACK_REFERENCE = 1;
-
- static const int STRING_ASCII = BACK_REFERENCE + 1;
+ static const int STRING_ASCII = 1;
static const int STRING_UTF8 = STRING_ASCII + 1;
- static const int BEGIN_NODE = STRING_UTF8 + 1;
- static const int NODE_FUNCTION = BEGIN_NODE;
- static const int NODE_RETURN = NODE_FUNCTION + 1;
- static const int NODE_CONST = NODE_RETURN + 1;
- static const int END_NODE = NODE_CONST;
+ static const int BEGIN_STATEMENT_NODE = STRING_UTF8 + 1;
+ static const int NODE_RETURN = BEGIN_STATEMENT_NODE;
+ static const int END_STATEMENT_NODE = NODE_RETURN;
- static const int BEGIN_POSITION = END_NODE + 1;
+ static const int BEGIN_EXPRESSION_NODE = END_STATEMENT_NODE + 1;
+ static const int NODE_FUNCTION = BEGIN_EXPRESSION_NODE;
+ static const int NODE_CONST = NODE_FUNCTION + 1;
+ static const int NODE_INVOKE_STATIC = NODE_CONST + 1;
+ static const int END_EXPRESSION_NODE = NODE_INVOKE_STATIC;
+
+ static const int BEGIN_POSITION = END_EXPRESSION_NODE + 1;
static const int POSITION_OFFSET = BEGIN_POSITION;
static const int POSITION_WITH_ID = POSITION_OFFSET + 1;
static const int END_POSITION = POSITION_WITH_ID;
@@ -76,6 +86,39 @@
static const int END_CONST = CONST_NULL;
static const int END_TAG = END_CONST;
+
+ static bool isExpressionTag(int tag) {
+ return BEGIN_EXPRESSION_NODE <= tag && tag <= END_EXPRESSION_NODE;
+ }
+}
+
+class IrConstantPool {
+ static Map<LibraryElement, IrConstantPool> _constantPools =
+ <LibraryElement, IrConstantPool>{};
+
+ static IrConstantPool forLibrary(LibraryElement library) {
+ return _constantPools.putIfAbsent(library, () => new IrConstantPool());
+ }
+
+ /**
+ * The entries of the constant pool. Method [add] ensures that an object
+ * is only added once to this list.
+ */
+ List<Object> entries = <Object>[];
+
+ /**
+ * This map is the inverse of [entries], it stores the index of each object.
+ */
+ Map<Object, int> entryIndex = <Object, int>{};
+
+ int add(Object o) {
+ return entryIndex.putIfAbsent(o, () {
+ entries.add(o);
+ return entries.length - 1;
+ });
+ }
+
+ Object get(int index) => entries[index];
}
/**
@@ -84,7 +127,9 @@
class Pickler extends IrNodesVisitor {
ConstantPickler constantPickler;
- Pickler() {
+ IrConstantPool constantPool;
+
+ Pickler(this.constantPool) {
assert(Pickles.END_TAG <= 0xff);
constantPickler = new ConstantPickler(this);
}
@@ -97,10 +142,10 @@
/** Offset of the next byte that will be written. */
int offset;
- /** Stores the intex for emitted elements that might be back-referenced. */
+ /** Stores the index for emitted entries that might be back-referenced. */
Map<Object, int> emitted;
- /** A counter for emitted elements. */
+ /** A counter for entries in the [emitted] map. */
int index;
/**
@@ -122,7 +167,7 @@
// The array is longer than necessary, create a copy with the actual size.
Uint8List result = new Uint8List(offset);
- // Emit the number or elements in the beginning.
+ // Emit the number or entries in the beginning.
for (int i = 0, j = sizeOffset; i < sizeBytes; i++, j++) {
result[i] = data[j];
}
@@ -209,19 +254,24 @@
}
/**
- * If [element] has already been emitted, this function writes a back
- * reference to the buffer and returns [:true:]. Otherwise, it registers the
- * element in the [emitted] map and the [:false:].
+ * This function records [IrExpression] nodes in the [emitted] table. It
+ * needs to be invoked for each visited expression node to enable pickling
+ * back references to the node in [writeBackReference].
*/
- bool writeBackrefIfEmitted(Object element) {
- int elementIndex = emitted[element];
- if (elementIndex != null) {
- writeByte(Pickles.BACK_REFERENCE);
- writeInt(elementIndex);
- return true;
- } else {
- emitted[element] = index++;
- return false;
+ void recordForBackReference(IrExpression entry) {
+ assert(emitted[entry] == null);
+ emitted[entry] = index++;
+ }
+
+ void writeBackReference(IrExpression entry) {
+ int entryIndex = emitted[entry];
+ writeInt(index - entryIndex);
+ }
+
+ void writeBackReferenceList(List<IrExpression> entries) {
+ writeInt(entries.length);
+ for (int i = 0; i < entries.length; i++) {
+ writeBackReference(entries[i]);
}
}
@@ -280,33 +330,55 @@
writeByte(Pickles.CONST_NULL);
}
+ void writeElement(Element element) {
+ writeInt(constantPool.add(element));
+ }
+
+ void writeSelector(Selector selector) {
+ writeInt(constantPool.add(selector));
+ }
+
+ void writeNodeList(List<IrNode> nodes) {
+ writeInt(nodes.length);
+ for (int i = 0; i < nodes.length; i++) {
+ nodes[i].accept(this);
+ }
+ }
+
void visitIrFunction(IrFunction node) {
- if (writeBackrefIfEmitted(node)) return;
+ recordForBackReference(node);
writeByte(Pickles.NODE_FUNCTION);
writePosition(node.position);
writeInt(node.endOffset);
writeInt(node.namePosition);
- writeInt(node.statements.length);
- for (int i = 0; i < node.statements.length; i++) {
- node.statements[i].accept(this);
- }
+ writeNodeList(node.statements);
}
void visitIrReturn(IrReturn node) {
- if (writeBackrefIfEmitted(node)) return;
writeByte(Pickles.NODE_RETURN);
writePosition(node.position);
- node.value.accept(this);
+ writeBackReference(node.value);
}
void visitIrConstant(IrConstant node) {
- if (writeBackrefIfEmitted(node)) return;
+ recordForBackReference(node);
writeByte(Pickles.NODE_CONST);
writePosition(node.position);
node.value.accept(constantPickler);
}
- void visitNode(IrNode node) {
+ void visitIrInvokeStatic(IrInvokeStatic node) {
+ recordForBackReference(node);
+ writeByte(Pickles.NODE_INVOKE_STATIC);
+ writePosition(node.position);
+ writeElement(node.target);
+ writeSelector(node.selector);
+ // TODO(lry): compact encoding when the arity of the selector and the
+ // arguments list are the same
+ writeBackReferenceList(node.arguments);
+ }
+
+ void visitIrNode(IrNode node) {
throw "Unexpected $node in pickler.";
}
}
diff --git a/sdk/lib/_internal/compiler/implementation/ir/ir_unpickler.dart b/sdk/lib/_internal/compiler/implementation/ir/ir_unpickler.dart
index c1b9f21..6f70d59 100644
--- a/sdk/lib/_internal/compiler/implementation/ir/ir_unpickler.dart
+++ b/sdk/lib/_internal/compiler/implementation/ir/ir_unpickler.dart
@@ -7,16 +7,18 @@
class Unpickler {
final Compiler compiler;
- Unpickler(this.compiler);
+ final IrConstantPool constantPool;
+
+ Unpickler(this.compiler, this.constantPool);
List<int> data;
int offset;
- /** For each element index, the corresponding unpickled element. */
+ /** For each entry index, the corresponding unpickled object. */
List<Object> unpickled;
- /** Counter for elements in [unpickled]. */
+ /** Counter for entries in [unpickled]. */
int index;
/**
@@ -30,10 +32,10 @@
IrFunction unpickle(List<int> data) {
this.data = data;
offset = 0;
- int numElements = readInt();
- unpickled = new List<Object>(numElements);
+ int numEntries = readInt();
+ unpickled = new List<Object>(numEntries);
index = 0;
- return readElement();
+ return readEntry();
}
int readByte() {
@@ -69,43 +71,76 @@
}
}
+ Element readElement() {
+ int elementIndex = readInt();
+ return constantPool.get(elementIndex);
+ }
+
+ Selector readSelector() {
+ int elementIndex = readInt();
+ return constantPool.get(elementIndex);
+ }
+
/**
- * Read an element that might be a back reference, or that might be used
+ * Read an entry that might be a back reference, or that might be used
* in a back reference.
*/
- Object readElement() {
- // Obtain the index of the element before reading its content to ensure
- // that elements are placed in consecutive order in [unpickled].
- int elementIndex = index++;
+ IrNode readEntry() {
int tag = readByte();
- if (tag == Pickles.BACK_REFERENCE) {
- int backIndex = readInt();
- assert(unpickled[backIndex] != null);
- return unpickled[backIndex];
+ if (Pickles.isExpressionTag(tag)) {
+ return readExpressionEntry(tag);
+ } else if (tag == Pickles.NODE_RETURN) {
+ return readReturnNode();
+ } else {
+ compiler.internalError("Unexpected entry tag: $tag");
}
- Object result;
+ }
+
+ IrExpression readExpressionEntry(int tag) {
+ int entryIndex = index++;
+ IrExpression result;
if (tag == Pickles.NODE_CONST) {
result = readConstantNode();
} else if (tag == Pickles.NODE_FUNCTION) {
result = readFunctionNode();
- } else if (tag == Pickles.NODE_RETURN) {
- result = readReturnNode();
+ } else if (tag == Pickles.NODE_INVOKE_STATIC) {
+ result = readInvokeStaticNode();
} else {
- compiler.internalError("Unexpected element tag: $tag");
+ compiler.internalError("Unexpected expression entry tag: $tag");
}
- unpickled[elementIndex] = result;
+ return unpickled[entryIndex] = result;
+ }
+
+ IrExpression readBackReference() {
+ int indexDelta = readInt();
+ int entryIndex = index - indexDelta;
+ assert(unpickled[entryIndex] != null);
+ return unpickled[entryIndex];
+ }
+
+ List<IrExpression> readBackReferenceList() {
+ int length = readInt();
+ List<IrExpression> result = new List<IrExpression>(length);
+ for (int i = 0; i < length; i++) {
+ result[i] = readBackReference();
+ }
return result;
}
+ List<IrNode> readNodeList() {
+ int length = readInt();
+ List nodes = new List<IrNode>(length);
+ for (int i = 0; i < length; i++) {
+ nodes[i] = readEntry();
+ }
+ return nodes;
+ }
+
IrFunction readFunctionNode() {
var position = readPosition();
int endOffset = readInt();
int namePosition = readInt();
- int numStatements = readInt();
- List<IrNode> statements = new List<IrNode>(numStatements);
- for (int i = 0; i < numStatements; i++) {
- statements[i] = readElement();
- }
+ List<IrNode> statements = readNodeList();
return new IrFunction(position, endOffset, namePosition, statements);
}
@@ -117,10 +152,18 @@
IrReturn readReturnNode() {
var position = readPosition();
- IrNode value = readElement();
+ IrExpression value = readBackReference();
return new IrReturn(position, value);
}
+ IrInvokeStatic readInvokeStaticNode() {
+ var position = readPosition();
+ FunctionElement functionElement = readElement();
+ Selector selector = readSelector();
+ List<IrExpression> arguments = readBackReferenceList();
+ return new IrInvokeStatic(position, functionElement, selector, arguments);
+ }
+
/* int | PositionWithIdentifierName */ readPosition() {
if (readByte() == Pickles.POSITION_OFFSET) {
return readInt();
diff --git a/sdk/lib/_internal/compiler/implementation/js/nodes.dart b/sdk/lib/_internal/compiler/implementation/js/nodes.dart
index e6268a3..5d18972 100644
--- a/sdk/lib/_internal/compiler/implementation/js/nodes.dart
+++ b/sdk/lib/_internal/compiler/implementation/js/nodes.dart
@@ -453,8 +453,6 @@
Call callWith(List<Expression> arguments) => new Call(this, arguments);
- New newWith(List<Expression> arguments) => new New(this, arguments);
-
PropertyAccess operator [](expression) {
if (expression is Expression) {
return new PropertyAccess(this, expression);
diff --git a/sdk/lib/_internal/compiler/implementation/js_backend/backend.dart b/sdk/lib/_internal/compiler/implementation/js_backend/backend.dart
index 384ca4e..9151b71 100644
--- a/sdk/lib/_internal/compiler/implementation/js_backend/backend.dart
+++ b/sdk/lib/_internal/compiler/implementation/js_backend/backend.dart
@@ -11,114 +11,6 @@
final Set<HInstruction> allocatedFixedLists = new Set<HInstruction>();
}
-class CheckedModeHelper {
- final String name;
-
- const CheckedModeHelper(String this.name);
-
- Element getElement(Compiler compiler) => compiler.findHelper(name);
-
- jsAst.Expression generateCall(SsaCodeGenerator codegen,
- HTypeConversion node) {
- Element helperElement = getElement(codegen.compiler);
- codegen.world.registerStaticUse(helperElement);
- List<jsAst.Expression> arguments = <jsAst.Expression>[];
- codegen.use(node.checkedInput);
- arguments.add(codegen.pop());
- generateAdditionalArguments(codegen, node, arguments);
- String helperName = codegen.backend.namer.isolateAccess(helperElement);
- return new jsAst.Call(new jsAst.VariableUse(helperName), arguments);
- }
-
- void generateAdditionalArguments(SsaCodeGenerator codegen,
- HTypeConversion node,
- List<jsAst.Expression> arguments) {
- // No additional arguments needed.
- }
-}
-
-class MalformedCheckedModeHelper extends CheckedModeHelper {
- const MalformedCheckedModeHelper(String name) : super(name);
-
- void generateAdditionalArguments(SsaCodeGenerator codegen,
- HTypeConversion node,
- List<jsAst.Expression> arguments) {
- ErroneousElement element = node.typeExpression.element;
- arguments.add(js.string(element.message));
- }
-}
-
-class PropertyCheckedModeHelper extends CheckedModeHelper {
- const PropertyCheckedModeHelper(String name) : super(name);
-
- void generateAdditionalArguments(SsaCodeGenerator codegen,
- HTypeConversion node,
- List<jsAst.Expression> arguments) {
- DartType type = node.typeExpression;
- String additionalArgument = codegen.backend.namer.operatorIsType(type);
- arguments.add(js.string(additionalArgument));
- }
-}
-
-class TypeVariableCheckedModeHelper extends CheckedModeHelper {
- const TypeVariableCheckedModeHelper(String name) : super(name);
-
- void generateAdditionalArguments(SsaCodeGenerator codegen,
- HTypeConversion node,
- List<jsAst.Expression> arguments) {
- assert(node.typeExpression.kind == TypeKind.TYPE_VARIABLE);
- codegen.use(node.typeRepresentation);
- arguments.add(codegen.pop());
- }
-}
-
-class SubtypeCheckedModeHelper extends CheckedModeHelper {
- const SubtypeCheckedModeHelper(String name) : super(name);
-
- void generateAdditionalArguments(SsaCodeGenerator codegen,
- HTypeConversion node,
- List<jsAst.Expression> arguments) {
- DartType type = node.typeExpression;
- Element element = type.element;
- String isField = codegen.backend.namer.operatorIs(element);
- arguments.add(js.string(isField));
- codegen.use(node.typeRepresentation);
- arguments.add(codegen.pop());
- String asField = codegen.backend.namer.substitutionName(element);
- arguments.add(js.string(asField));
- }
-}
-
-class FunctionTypeCheckedModeHelper extends CheckedModeHelper {
- const FunctionTypeCheckedModeHelper(String name) : super(name);
-
- void generateAdditionalArguments(SsaCodeGenerator codegen,
- HTypeConversion node,
- List<jsAst.Expression> arguments) {
- DartType type = node.typeExpression;
- String signatureName = codegen.backend.namer.getFunctionTypeName(type);
- arguments.add(js.string(signatureName));
-
- if (type.containsTypeVariables) {
- ClassElement contextClass = Types.getClassContext(type);
- // TODO(ahe): Creating a string here is unfortunate. It is slow (due to
- // string concatenation in the implementation), and may prevent
- // segmentation of '$'.
- String contextName = codegen.backend.namer.getNameForRti(contextClass);
- arguments.add(js.string(contextName));
-
- if (node.contextIsTypeArguments) {
- arguments.add(new jsAst.LiteralNull());
- codegen.use(node.context);
- arguments.add(codegen.pop());
- } else {
- codegen.use(node.context);
- arguments.add(codegen.pop());
- }
- }
- }
-}
-
/*
* Invariants:
* canInline(function) implies canInline(function, insideLoop:true)
@@ -364,43 +256,7 @@
final Set<TypedefElement> typedefTypeLiterals = new Set<TypedefElement>();
/// All the checked mode helpers.
- static const checkedModeHelpers = const [
- const MalformedCheckedModeHelper('checkMalformedType'),
- const CheckedModeHelper('voidTypeCheck'),
- const CheckedModeHelper('stringTypeCast'),
- const CheckedModeHelper('stringTypeCheck'),
- const CheckedModeHelper('doubleTypeCast'),
- const CheckedModeHelper('doubleTypeCheck'),
- const CheckedModeHelper('numTypeCast'),
- const CheckedModeHelper('numTypeCheck'),
- const CheckedModeHelper('boolTypeCast'),
- const CheckedModeHelper('boolTypeCheck'),
- const CheckedModeHelper('intTypeCast'),
- const CheckedModeHelper('intTypeCheck'),
- const PropertyCheckedModeHelper('numberOrStringSuperNativeTypeCast'),
- const PropertyCheckedModeHelper('numberOrStringSuperNativeTypeCheck'),
- const PropertyCheckedModeHelper('numberOrStringSuperTypeCast'),
- const PropertyCheckedModeHelper('numberOrStringSuperTypeCheck'),
- const PropertyCheckedModeHelper('stringSuperNativeTypeCast'),
- const PropertyCheckedModeHelper('stringSuperNativeTypeCheck'),
- const PropertyCheckedModeHelper('stringSuperTypeCast'),
- const PropertyCheckedModeHelper('stringSuperTypeCheck'),
- const CheckedModeHelper('listTypeCast'),
- const CheckedModeHelper('listTypeCheck'),
- const PropertyCheckedModeHelper('listSuperNativeTypeCast'),
- const PropertyCheckedModeHelper('listSuperNativeTypeCheck'),
- const PropertyCheckedModeHelper('listSuperTypeCast'),
- const PropertyCheckedModeHelper('listSuperTypeCheck'),
- const PropertyCheckedModeHelper('interceptedTypeCast'),
- const PropertyCheckedModeHelper('interceptedTypeCheck'),
- const SubtypeCheckedModeHelper('subtypeCast'),
- const SubtypeCheckedModeHelper('assertSubtype'),
- const TypeVariableCheckedModeHelper('subtypeOfRuntimeTypeCast'),
- const TypeVariableCheckedModeHelper('assertSubtypeOfRuntimeType'),
- const FunctionTypeCheckedModeHelper('functionSubtypeCast'),
- const FunctionTypeCheckedModeHelper('assertFunctionSubtype'),
- const PropertyCheckedModeHelper('propertyTypeCast'),
- const PropertyCheckedModeHelper('propertyTypeCheck') ];
+ static const checkedModeHelpers = CheckedModeHelper.helpers;
// Checked mode helpers indexed by name.
Map<String, CheckedModeHelper> checkedModeHelperByName =
@@ -426,7 +282,7 @@
super(compiler, JAVA_SCRIPT_CONSTANT_SYSTEM) {
emitter = new CodeEmitterTask(compiler, namer, generateSourceMap);
builder = new SsaBuilderTask(this);
- fromIrBuilder = new SsaFromIrBuilderTask(compiler);
+ fromIrBuilder = new SsaFromIrBuilderTask(this);
optimizer = new SsaOptimizerTask(this);
generator = new SsaCodeGeneratorTask(this);
typeVariableHandler = new TypeVariableHandler(this);
@@ -843,6 +699,11 @@
enqueueClass(enqueuer, jsPlainJavaScriptObjectClass, elements);
}
}
+ if (cls == compiler.closureClass) {
+ enqueue(enqueuer,
+ compiler.findHelper('closureFromTearOff'),
+ elements);
+ }
ClassElement result = null;
if (cls == compiler.stringClass || cls == jsStringClass) {
addInterceptors(jsStringClass, enqueuer, elements);
@@ -1023,6 +884,7 @@
}
void registerIsCheck(DartType type, Enqueuer world, TreeElements elements) {
+ enqueueInResolution(getThrowRuntimeError(), elements);
type = type.unalias(compiler);
enqueueClass(world, compiler.boolClass, elements);
bool inCheckedMode = compiler.enableTypeAssertions;
@@ -1066,7 +928,8 @@
enqueueClass(world, compiler.listClass, elements);
}
if (type is FunctionType) {
- enqueueInResolution(getCheckFunctionSubtype(), elements);
+ enqueueInResolution(
+ compiler.findHelper('functionTypeTestMetaHelper'), elements);
}
if (type.element.isNative()) {
// We will neeed to add the "$is" and "$as" properties on the
@@ -1079,6 +942,7 @@
}
void registerAsCheck(DartType type, Enqueuer world, TreeElements elements) {
+ enqueueInResolution(getThrowRuntimeError(), elements);
type = type.unalias(compiler);
if (!world.isResolutionQueue) {
// All helpers are added to resolution queue in enqueueHelpers. These
@@ -1484,9 +1348,7 @@
? 'subtypeOfRuntimeTypeCast'
: 'assertSubtypeOfRuntimeType';
} else if (type.kind == TypeKind.FUNCTION) {
- return typeCast
- ? 'functionSubtypeCast'
- : 'assertFunctionSubtype';
+ return null;
} else {
if (nativeCheck) {
// TODO(karlklose): can we get rid of this branch when we use
@@ -1621,10 +1483,6 @@
return compiler.findHelper('assertSubtypeOfRuntimeType');
}
- Element getCheckFunctionSubtype() {
- return compiler.findHelper('checkFunctionSubtype');
- }
-
Element getThrowNoSuchMethod() {
return compiler.findHelper('throwNoSuchMethod');
}
@@ -1773,6 +1631,8 @@
* system.
*/
bool isAccessibleByReflection(Element element) {
+ // TODO(ahe): This isn't sufficient: simply importing dart:mirrors
+ // causes hasInsufficientMirrorsUsed to become true.
if (hasInsufficientMirrorsUsed) return true;
return isNeededForReflection(element);
}
@@ -1945,6 +1805,12 @@
element, "@NoSideEffects() should always be combined with @NoInline");
}
}
+
+ CodeBuffer codeOf(Element element) {
+ return generatedCode.containsKey(element)
+ ? jsAst.prettyPrint(generatedCode[element], compiler)
+ : null;
+ }
}
/// Records that [constant] is used by [user.element].
diff --git a/sdk/lib/_internal/compiler/implementation/js_backend/checked_mode_helpers.dart b/sdk/lib/_internal/compiler/implementation/js_backend/checked_mode_helpers.dart
new file mode 100644
index 0000000..254f270
--- /dev/null
+++ b/sdk/lib/_internal/compiler/implementation/js_backend/checked_mode_helpers.dart
@@ -0,0 +1,119 @@
+// Copyright (c) 2013, the Dart project authors. Please see the AUTHORS file
+// for details. All rights reserved. Use of this source code is governed by a
+// BSD-style license that can be found in the LICENSE file.
+
+part of js_backend;
+
+class CheckedModeHelper {
+ final String name;
+
+ const CheckedModeHelper(String this.name);
+
+ Element getElement(Compiler compiler) => compiler.findHelper(name);
+
+ jsAst.Expression generateCall(SsaCodeGenerator codegen,
+ HTypeConversion node) {
+ Element helperElement = getElement(codegen.compiler);
+ codegen.world.registerStaticUse(helperElement);
+ List<jsAst.Expression> arguments = <jsAst.Expression>[];
+ codegen.use(node.checkedInput);
+ arguments.add(codegen.pop());
+ generateAdditionalArguments(codegen, node, arguments);
+ String helperName = codegen.backend.namer.isolateAccess(helperElement);
+ return new jsAst.Call(new jsAst.VariableUse(helperName), arguments);
+ }
+
+ void generateAdditionalArguments(SsaCodeGenerator codegen,
+ HTypeConversion node,
+ List<jsAst.Expression> arguments) {
+ // No additional arguments needed.
+ }
+
+ static const List<CheckedModeHelper> helpers = const <CheckedModeHelper> [
+ const MalformedCheckedModeHelper('checkMalformedType'),
+ const CheckedModeHelper('voidTypeCheck'),
+ const CheckedModeHelper('stringTypeCast'),
+ const CheckedModeHelper('stringTypeCheck'),
+ const CheckedModeHelper('doubleTypeCast'),
+ const CheckedModeHelper('doubleTypeCheck'),
+ const CheckedModeHelper('numTypeCast'),
+ const CheckedModeHelper('numTypeCheck'),
+ const CheckedModeHelper('boolTypeCast'),
+ const CheckedModeHelper('boolTypeCheck'),
+ const CheckedModeHelper('intTypeCast'),
+ const CheckedModeHelper('intTypeCheck'),
+ const PropertyCheckedModeHelper('numberOrStringSuperNativeTypeCast'),
+ const PropertyCheckedModeHelper('numberOrStringSuperNativeTypeCheck'),
+ const PropertyCheckedModeHelper('numberOrStringSuperTypeCast'),
+ const PropertyCheckedModeHelper('numberOrStringSuperTypeCheck'),
+ const PropertyCheckedModeHelper('stringSuperNativeTypeCast'),
+ const PropertyCheckedModeHelper('stringSuperNativeTypeCheck'),
+ const PropertyCheckedModeHelper('stringSuperTypeCast'),
+ const PropertyCheckedModeHelper('stringSuperTypeCheck'),
+ const CheckedModeHelper('listTypeCast'),
+ const CheckedModeHelper('listTypeCheck'),
+ const PropertyCheckedModeHelper('listSuperNativeTypeCast'),
+ const PropertyCheckedModeHelper('listSuperNativeTypeCheck'),
+ const PropertyCheckedModeHelper('listSuperTypeCast'),
+ const PropertyCheckedModeHelper('listSuperTypeCheck'),
+ const PropertyCheckedModeHelper('interceptedTypeCast'),
+ const PropertyCheckedModeHelper('interceptedTypeCheck'),
+ const SubtypeCheckedModeHelper('subtypeCast'),
+ const SubtypeCheckedModeHelper('assertSubtype'),
+ const TypeVariableCheckedModeHelper('subtypeOfRuntimeTypeCast'),
+ const TypeVariableCheckedModeHelper('assertSubtypeOfRuntimeType'),
+ const PropertyCheckedModeHelper('propertyTypeCast'),
+ const PropertyCheckedModeHelper('propertyTypeCheck')];
+}
+
+class MalformedCheckedModeHelper extends CheckedModeHelper {
+ const MalformedCheckedModeHelper(String name) : super(name);
+
+ void generateAdditionalArguments(SsaCodeGenerator codegen,
+ HTypeConversion node,
+ List<jsAst.Expression> arguments) {
+ ErroneousElement element = node.typeExpression.element;
+ arguments.add(js.string(element.message));
+ }
+}
+
+class PropertyCheckedModeHelper extends CheckedModeHelper {
+ const PropertyCheckedModeHelper(String name) : super(name);
+
+ void generateAdditionalArguments(SsaCodeGenerator codegen,
+ HTypeConversion node,
+ List<jsAst.Expression> arguments) {
+ DartType type = node.typeExpression;
+ String additionalArgument = codegen.backend.namer.operatorIsType(type);
+ arguments.add(js.string(additionalArgument));
+ }
+}
+
+class TypeVariableCheckedModeHelper extends CheckedModeHelper {
+ const TypeVariableCheckedModeHelper(String name) : super(name);
+
+ void generateAdditionalArguments(SsaCodeGenerator codegen,
+ HTypeConversion node,
+ List<jsAst.Expression> arguments) {
+ assert(node.typeExpression.kind == TypeKind.TYPE_VARIABLE);
+ codegen.use(node.typeRepresentation);
+ arguments.add(codegen.pop());
+ }
+}
+
+class SubtypeCheckedModeHelper extends CheckedModeHelper {
+ const SubtypeCheckedModeHelper(String name) : super(name);
+
+ void generateAdditionalArguments(SsaCodeGenerator codegen,
+ HTypeConversion node,
+ List<jsAst.Expression> arguments) {
+ DartType type = node.typeExpression;
+ Element element = type.element;
+ String isField = codegen.backend.namer.operatorIs(element);
+ arguments.add(js.string(isField));
+ codegen.use(node.typeRepresentation);
+ arguments.add(codegen.pop());
+ String asField = codegen.backend.namer.substitutionName(element);
+ arguments.add(js.string(asField));
+ }
+}
diff --git a/sdk/lib/_internal/compiler/implementation/js_backend/js_backend.dart b/sdk/lib/_internal/compiler/implementation/js_backend/js_backend.dart
index 9598af7..6ca4fc7 100644
--- a/sdk/lib/_internal/compiler/implementation/js_backend/js_backend.dart
+++ b/sdk/lib/_internal/compiler/implementation/js_backend/js_backend.dart
@@ -25,6 +25,7 @@
import '../util/util.dart';
part 'backend.dart';
+part 'checked_mode_helpers.dart';
part 'constant_emitter.dart';
part 'constant_system_javascript.dart';
part 'minify_namer.dart';
diff --git a/sdk/lib/_internal/compiler/implementation/js_backend/namer.dart b/sdk/lib/_internal/compiler/implementation/js_backend/namer.dart
index 25f86da..9b18a37 100644
--- a/sdk/lib/_internal/compiler/implementation/js_backend/namer.dart
+++ b/sdk/lib/_internal/compiler/implementation/js_backend/namer.dart
@@ -369,6 +369,8 @@
}
String instanceMethodName(FunctionElement element) {
+ // TODO(ahe): Could this be: return invocationName(new
+ // Selector.fromElement(element))?
String elementName = element.name;
String name = operatorNameToIdentifier(elementName);
if (name != elementName) return getMappedOperatorName(name);
@@ -472,6 +474,10 @@
return getMappedInstanceName(proposedName);
}
+ String readTypeVariableName(TypeVariableElement element) {
+ return '\$tv_${instanceFieldAccessorName(element)}';
+ }
+
/**
* Returns name of the JavaScript property used to store an instance field.
*/
@@ -877,7 +883,7 @@
}
String isolateStaticClosureAccess(Element element) {
- return "${globalObjectFor(element)}.${getStaticClosureName(element)}";
+ return "${globalObjectFor(element)}.${getStaticClosureName(element)}()";
}
String globalObjectForConstant(Constant constant) => 'C';
diff --git a/sdk/lib/_internal/compiler/implementation/js_emitter/class_builder.dart b/sdk/lib/_internal/compiler/implementation/js_emitter/class_builder.dart
index 86befd2..53e32d8 100644
--- a/sdk/lib/_internal/compiler/implementation/js_emitter/class_builder.dart
+++ b/sdk/lib/_internal/compiler/implementation/js_emitter/class_builder.dart
@@ -8,9 +8,13 @@
* A data structure for collecting fragments of a class definition.
*/
class ClassBuilder {
- // TODO (sigurdm) this is just a bag of properties, rename this class
-
final List<jsAst.Property> properties = <jsAst.Property>[];
+ final List<String> fields = <String>[];
+
+ String superName;
+ String nativeName;
+ String functionType;
+ List<jsAst.Node> fieldMetadata;
/// Set to true by user if class is indistinguishable from its superclass.
bool isTrivial = false;
@@ -20,8 +24,35 @@
properties.add(new jsAst.Property(js.string(name), value));
}
- jsAst.Expression toObjectInitializer() {
- return new jsAst.ObjectInitializer(properties, isOneLiner: false);
+ void addField(String field) {
+ fields.add(field);
+ }
+
+ jsAst.ObjectInitializer toObjectInitializer() {
+ StringBuffer buffer = new StringBuffer();
+ if (superName != null) {
+ if (nativeName != null) {
+ buffer.write('$nativeName/');
+ }
+ buffer.write('$superName');
+ if (functionType != null) {
+ buffer.write(':$functionType');
+ }
+ buffer.write(';');
+ }
+ buffer.writeAll(fields, ',');
+ var classData = js.string('$buffer');
+ if (fieldMetadata != null) {
+ // If we need to store fieldMetadata, classData is turned into an array,
+ // and the field metadata is appended. So if classData is just a string,
+ // there is no field metadata.
+ classData =
+ new jsAst.ArrayInitializer.from([classData]..addAll(fieldMetadata));
+ }
+ var fieldsAndProperties =
+ [new jsAst.Property(js.string(''), classData)]
+ ..addAll(properties);
+ return new jsAst.ObjectInitializer(fieldsAndProperties, isOneLiner: false);
}
}
diff --git a/sdk/lib/_internal/compiler/implementation/js_emitter/class_emitter.dart b/sdk/lib/_internal/compiler/implementation/js_emitter/class_emitter.dart
index 97caf52..9d9a89b 100644
--- a/sdk/lib/_internal/compiler/implementation/js_emitter/class_emitter.dart
+++ b/sdk/lib/_internal/compiler/implementation/js_emitter/class_emitter.dart
@@ -47,6 +47,8 @@
additionalProperties.forEach(builder.addProperty);
}
+ emitTypeVariableReaders(classElement, builder);
+
emitClassBuilderWithReflectionData(
className, classElement, builder, properties);
}
@@ -106,7 +108,6 @@
throw new SpannableAssertionFailure(
element, 'Must be a ClassElement or a LibraryElement');
}
- StringBuffer buffer = new StringBuffer();
if (emitStatics) {
assert(invariant(element, superName == null, message: superName));
} else {
@@ -114,16 +115,13 @@
String nativeName =
namer.getPrimitiveInterceptorRuntimeName(element);
if (nativeName != null) {
- buffer.write('$nativeName/');
+ builder.nativeName = nativeName;
}
- buffer.write('$superName;');
+ builder.superName = superName;
}
- int bufferClassLength = buffer.length;
-
- String separator = '';
-
var fieldMetadata = [];
bool hasMetadata = false;
+ bool fieldsAdded = false;
if (!onlyForRti) {
visitFields(element, emitStatics,
@@ -140,8 +138,6 @@
// constructors, so we don't need the fields unless we are generating
// accessors at runtime.
if (!classIsNative || needsAccessor) {
- buffer.write(separator);
- separator = ',';
var metadata = task.metadataEmitter.buildMetadataFunction(field);
if (metadata != null) {
hasMetadata = true;
@@ -150,16 +146,17 @@
}
fieldMetadata.add(metadata);
recordMangledField(field, accessorName, field.name);
+ String fieldName = name;
+ String fieldCode = '';
+ String reflectionMarker = '';
if (!needsAccessor) {
// Emit field for constructor generation.
assert(!classIsNative);
- buffer.write(name);
} else {
// Emit (possibly renaming) field name so we can add accessors at
// runtime.
- buffer.write(accessorName);
if (name != accessorName) {
- buffer.write(':$name');
+ fieldName = '$accessorName:$name';
}
int getterCode = 0;
@@ -206,28 +203,25 @@
compiler.reportInternalError(
field, 'Internal error: code is 0 ($element/$field)');
} else {
- buffer.write(FIELD_CODE_CHARACTERS[code - FIRST_FIELD_CODE]);
+ fieldCode = FIELD_CODE_CHARACTERS[code - FIRST_FIELD_CODE];
}
}
if (backend.isAccessibleByReflection(field)) {
- buffer.write('-');
+ reflectionMarker = '-';
if (backend.isNeededForReflection(field)) {
DartType type = field.computeType(compiler);
- buffer.write('${task.metadataEmitter.reifyType(type)}');
+ reflectionMarker = '-${task.metadataEmitter.reifyType(type)}';
}
}
+ builder.addField('$fieldName$fieldCode$reflectionMarker');
+ fieldsAdded = true;
}
});
}
- bool fieldsAdded = buffer.length > bufferClassLength;
- String compactClassData = buffer.toString();
- jsAst.Expression classDataNode = js.string(compactClassData);
if (hasMetadata) {
- fieldMetadata.insert(0, classDataNode);
- classDataNode = new jsAst.ArrayInitializer.from(fieldMetadata);
+ builder.fieldMetadata = fieldMetadata;
}
- builder.addProperty('', classDataNode);
return fieldsAdded;
}
@@ -319,7 +313,7 @@
List<jsAst.Property> statics = new List<jsAst.Property>();
ClassBuilder staticsBuilder = new ClassBuilder();
if (emitFields(classElement, staticsBuilder, null, emitStatics: true)) {
- statics.add(staticsBuilder.properties.single);
+ statics.add(staticsBuilder.toObjectInitializer().properties.single);
}
Map<String, ClassBuilder> classPropertyLists =
@@ -563,4 +557,45 @@
builder.addProperty('+$reflectionName', reflectable);
}
}
+
+ void emitTypeVariableReaders(ClassElement cls, ClassBuilder builder) {
+ List typeVariables = [];
+ ClassElement superclass = cls;
+ while (superclass != null) {
+ for (TypeVariableType parameter in superclass.typeVariables) {
+ if (task.readTypeVariables.contains(parameter.element)) {
+ emitTypeVariableReader(cls, builder, parameter.element);
+ }
+ }
+ superclass = superclass.superclass;
+ }
+ }
+
+ void emitTypeVariableReader(ClassElement cls,
+ ClassBuilder builder,
+ TypeVariableElement element) {
+ String name = namer.readTypeVariableName(element);
+ jsAst.Expression index =
+ js.toExpression(RuntimeTypes.getTypeVariableIndex(element));
+ jsAst.Expression computeTypeVariable;
+
+ Substitution substitution =
+ backend.rti.computeSubstitution(
+ cls, element.enclosingElement, alwaysGenerateFunction: true);
+ if (substitution != null) {
+ jsAst.Expression typeArguments =
+ substitution.getCode(backend.rti, true)['apply'](
+ ['null', r'this.$builtinTypeInfo']);
+ computeTypeVariable = typeArguments[index];
+ } else {
+ // TODO(ahe): These can be generated dynamically.
+ computeTypeVariable =
+ js(r'this.$builtinTypeInfo && this.$builtinTypeInfo[#]', index);
+ }
+ jsAst.Expression convertRtiToRuntimeType =
+ namer.elementAccess(compiler.findHelper('convertRtiToRuntimeType'));
+ builder.addProperty(
+ name, js.fun(
+ [], [js.return_(convertRtiToRuntimeType(computeTypeVariable))]));
+ }
}
diff --git a/sdk/lib/_internal/compiler/implementation/js_emitter/closure_invocation_element.dart b/sdk/lib/_internal/compiler/implementation/js_emitter/closure_invocation_element.dart
deleted file mode 100644
index 0b891d0..0000000
--- a/sdk/lib/_internal/compiler/implementation/js_emitter/closure_invocation_element.dart
+++ /dev/null
@@ -1,25 +0,0 @@
-// Copyright (c) 2013, the Dart project authors. Please see the AUTHORS file
-// for details. All rights reserved. Use of this source code is governed by a
-// BSD-style license that can be found in the LICENSE file.
-
-part of dart2js.js_emitter;
-
-/**
- * A function element that represents a closure call. The signature is copied
- * from the given element.
- */
-class ClosureInvocationElement extends FunctionElementX {
- ClosureInvocationElement(String name,
- FunctionElement other)
- : super.from(name, other, other.enclosingElement),
- methodElement = other;
-
- isInstanceMember() => true;
-
- Element getOutermostEnclosingMemberOrTopLevel() => methodElement;
-
- /**
- * The [member] this invocation refers to.
- */
- Element methodElement;
-}
diff --git a/sdk/lib/_internal/compiler/implementation/js_emitter/code_emitter_task.dart b/sdk/lib/_internal/compiler/implementation/js_emitter/code_emitter_task.dart
index ac52424..835a673 100644
--- a/sdk/lib/_internal/compiler/implementation/js_emitter/code_emitter_task.dart
+++ b/sdk/lib/_internal/compiler/implementation/js_emitter/code_emitter_task.dart
@@ -42,6 +42,10 @@
final Map<ClassElement, Map<String, jsAst.Expression>> additionalProperties =
new Map<ClassElement, Map<String, jsAst.Expression>>();
+ /// Records if a type variable is read dynamically for type tests.
+ final Set<TypeVariableElement> readTypeVariables =
+ new Set<TypeVariableElement>();
+
// TODO(ngeoffray): remove this field.
Set<ClassElement> instantiatedClasses;
@@ -349,6 +353,16 @@
js('var s = fields.split(";")'),
js('fields = s[1] == "" ? [] : s[1].split(",")'),
js('supr = s[0]'),
+ js('split = supr.split(":")'),
+ js.if_('split.length == 2', [
+ js('supr = split[0]'),
+ js('var functionSignature = split[1]'),
+ js.if_('functionSignature',
+ js('desc.\$signature = #',
+ js.fun('s',
+ js.return_(js.fun([], js.return_('init.metadata[s]'))))(
+ js('functionSignature'))))
+ ]),
optional(needsMixinSupport, js.if_('supr && supr.indexOf("+") > 0', [
js('s = supr.split("+")'),
@@ -744,8 +758,10 @@
}
void generateClass(ClassElement classElement, ClassBuilder properties) {
- classEmitter.generateClass(
- classElement, properties, additionalProperties[classElement]);
+ compiler.withCurrentElement(classElement, () {
+ classEmitter.generateClass(
+ classElement, properties, additionalProperties[classElement]);
+ });
}
/**
@@ -1163,6 +1179,7 @@
jsAst.ObjectInitializer initializers =
descriptor.toObjectInitializer();
+ int sizeBefore = outputBuffers[outputUnit].length;
outputBuffers[outputUnit]
..write('["${library.getLibraryName()}",$_')
..write('"${uri}",$_')
@@ -1174,6 +1191,9 @@
..write(jsAst.prettyPrint(initializers, compiler))
..write(library == compiler.mainApp ? ',${n}1' : "")
..write('],$n');
+ int sizeAfter = outputBuffers[outputUnit].length;
+ compiler.dumpInfoTask.codeSizeCounter
+ .countCode(library, sizeAfter - sizeBefore);
}
}
@@ -1192,6 +1212,9 @@
mainBuffer.add('(function(${namer.currentIsolate})$_{$n');
}
+ // Using a named function here produces easier to read stack traces in
+ // Chrome/V8.
+ mainBuffer.add('function dart() {}');
for (String globalObject in Namer.reservedGlobalObjectNames) {
// The global objects start as so-called "slow objects". For V8, this
// means that it won't try to make map transitions as we add properties
@@ -1199,7 +1222,7 @@
// fast objects by calling "convertToFastObject" (see
// [emitConvertToFastObjectFunction]).
mainBuffer
- ..write('var ${globalObject}$_=$_{}$N')
+ ..write('var ${globalObject}$_=${_}new dart$N')
..write('delete ${globalObject}.x$N');
}
@@ -1246,26 +1269,12 @@
nativeEmitter.finishGenerateNativeClasses();
nativeEmitter.assembleCode(nativeBuffer);
- // Might create methodClosures.
if (!deferredClasses.isEmpty) {
for (ClassElement element in deferredClasses) {
generateClass(element, getElementDecriptor(element));
}
}
- containerBuilder.emitStaticFunctionClosures();
-
- addComment('Method closures', mainBuffer);
- // Now that we have emitted all classes, we know all the method
- // closures that will be needed.
- containerBuilder.methodClosures.forEach((String code, Element closure) {
- // TODO(ahe): Some of these can be deferred.
- String mangledName = namer.getNameOfClass(closure);
- mainBuffer.add('$classesCollector.$mangledName$_=$_'
- '[${namer.globalObjectFor(closure)},$_$code]');
- mainBuffer.add("$N$n");
- });
-
// After this assignment we will produce invalid JavaScript code if we use
// the classesCollector variable.
classesCollector = 'classesCollector should not be used from now on';
@@ -1286,7 +1295,7 @@
if (classEmitter.emitFields(
library, builder, null, emitStatics: true)) {
getElementDescriptorForOutputUnit(library, "main")
- .properties.addAll(builder.properties);
+ .properties.addAll(builder.toObjectInitializer().properties);
}
}
}
@@ -1325,7 +1334,7 @@
}
}
mainBuffer
- ..write(getReflectionDataParser(classesCollector, namer))
+ ..write(getReflectionDataParser(classesCollector, backend))
..write('([$n');
List<Element> sortedElements =
@@ -1355,8 +1364,6 @@
classesCollector = oldClassesCollector;
}
- containerBuilder.emitStaticFunctionGetters(mainBuffer);
-
typeTestEmitter.emitRuntimeTypeSupport(mainBuffer);
interceptorEmitter.emitGetInterceptorMethods(mainBuffer);
interceptorEmitter.emitOneShotInterceptors(mainBuffer);
@@ -1531,7 +1538,7 @@
'$_${namer.isolateName}.prototype$N$n'
// The classesCollector object ($$).
'$classesCollector$_=$_{};$n')
- ..write(getReflectionDataParser(classesCollector, namer))
+ ..write(getReflectionDataParser(classesCollector, backend))
..write('([$n')
..addBuffer(deferredLibrariesBuffer)
..write('])$N');
@@ -1592,4 +1599,8 @@
bool get areAnyElementsDeferred {
return compiler.deferredLoadTask.areAnyElementsDeferred;
}
+
+ void registerReadTypeVariable(TypeVariableElement element) {
+ readTypeVariables.add(element);
+ }
}
diff --git a/sdk/lib/_internal/compiler/implementation/js_emitter/container_builder.dart b/sdk/lib/_internal/compiler/implementation/js_emitter/container_builder.dart
index 276d339..f55026a 100644
--- a/sdk/lib/_internal/compiler/implementation/js_emitter/container_builder.dart
+++ b/sdk/lib/_internal/compiler/implementation/js_emitter/container_builder.dart
@@ -25,7 +25,7 @@
*/
void addParameterStub(FunctionElement member,
Selector selector,
- DefineStubFunction defineStub,
+ AddStubFunction addStub,
Set<String> alreadyGenerated) {
FunctionSignature parameters = member.computeSignature(compiler);
int positionalArgumentCount = selector.positionalArgumentCount;
@@ -81,10 +81,7 @@
int parameterIndex = 0;
parameters.orderedForEachParameter((Element element) {
- // Use generic names for closures to facilitate code sharing.
- String jsName = member is ClosureInvocationElement
- ? 'p${parameterIndex++}'
- : backend.namer.safeName(element.name);
+ String jsName = backend.namer.safeName(element.name);
assert(jsName != receiverArgumentName);
if (count < optionalParameterStart) {
parametersBuffer[count] = new jsAst.Parameter(jsName);
@@ -121,25 +118,30 @@
member, isInterceptedMethod, invocationName,
parametersBuffer, argumentsBuffer,
indexOfLastOptionalArgumentInParameters);
- } else {
+ } else if (member.isInstanceMember()) {
body = [js.return_(
js('this')[namer.getNameOfInstanceMember(member)](argumentsBuffer))];
+ } else {
+ body = [js.return_(namer.elementAccess(member)(argumentsBuffer))];
}
jsAst.Fun function = js.fun(parametersBuffer, body);
- defineStub(invocationName, function);
-
- String reflectionName = task.getReflectionName(selector, invocationName);
- if (reflectionName != null) {
- var reflectable =
- js(backend.isAccessibleByReflection(member) ? '1' : '0');
- defineStub('+$reflectionName', reflectable);
- }
+ addStub(selector, function);
}
- void addParameterStubs(FunctionElement member,
- DefineStubFunction defineStub) {
+ void addParameterStubs(FunctionElement member, AddStubFunction defineStub,
+ [bool canTearOff = false]) {
+ if (member.enclosingElement.isClosure()) {
+ ClosureClassElement cls = member.enclosingElement;
+ if (cls.supertype.element == compiler.boundClosureClass) {
+ compiler.internalErrorOnElement(cls.methodElement, 'Bound closure1.');
+ }
+ if (cls.methodElement.isInstanceMember()) {
+ compiler.internalErrorOnElement(cls.methodElement, 'Bound closure2.');
+ }
+ }
+
// We fill the lists depending on the selector. For example,
// take method foo:
// foo(a, b, {c, d});
@@ -165,340 +167,57 @@
// (4) No stub generated, call is direct.
// (5) No stub generated, call is direct.
- // Keep a cache of which stubs have already been generated, to
- // avoid duplicates. Note that even if selectors are
- // canonicalized, we would still need this cache: a typed selector
- // on A and a typed selector on B could yield the same stub.
- Set<String> generatedStubNames = new Set<String>();
- bool isClosureInvocation =
- member.name == namer.closureInvocationSelectorName;
- if (backend.isNeededForReflection(member) ||
- (compiler.enabledFunctionApply && isClosureInvocation)) {
- // If [Function.apply] is called, we pessimistically compile all
- // possible stubs for this closure.
- FunctionSignature signature = member.computeSignature(compiler);
- Set<Selector> selectors = signature.optionalParametersAreNamed
- ? computeSeenNamedSelectors(member)
- : computeOptionalSelectors(signature, member);
- for (Selector selector in selectors) {
- addParameterStub(member, selector, defineStub, generatedStubNames);
- }
- if (signature.optionalParametersAreNamed && isClosureInvocation) {
- addCatchAllParameterStub(member, signature, defineStub);
- }
- } else {
- Set<Selector> selectors = compiler.codegenWorld.invokedNames[member.name];
+ Set<Selector> selectors = member.isInstanceMember()
+ ? compiler.codegenWorld.invokedNames[member.name]
+ : null; // No stubs needed for static methods.
+
+ /// Returns all closure call selectors renamed to match this member.
+ Set<Selector> callSelectorsAsNamed() {
+ if (!canTearOff) return null;
+ Set<Selector> callSelectors = compiler.codegenWorld.invokedNames[
+ namer.closureInvocationSelectorName];
+ if (callSelectors == null) return null;
+ return callSelectors.map((Selector callSelector) {
+ return new Selector.call(
+ member.name, member.getLibrary(),
+ callSelector.argumentCount, callSelector.namedArguments);
+ }).toSet();
+ }
+ if (selectors == null) {
+ selectors = callSelectorsAsNamed();
if (selectors == null) return;
- for (Selector selector in selectors) {
- if (!selector.applies(member, compiler)) continue;
- addParameterStub(member, selector, defineStub, generatedStubNames);
- }
- }
- }
-
- Set<Selector> computeSeenNamedSelectors(FunctionElement element) {
- Set<Selector> selectors = compiler.codegenWorld.invokedNames[element.name];
- Set<Selector> result = new Set<Selector>();
- if (selectors == null) return result;
- for (Selector selector in selectors) {
- if (!selector.applies(element, compiler)) continue;
- result.add(selector);
- }
- return result;
- }
-
- void addCatchAllParameterStub(FunctionElement member,
- FunctionSignature signature,
- DefineStubFunction defineStub) {
- // See Primities.applyFunction in js_helper.dart for details.
- List<jsAst.Property> properties = <jsAst.Property>[];
- for (Element element in signature.orderedOptionalParameters) {
- String jsName = backend.namer.safeName(element.name);
- Constant value = compiler.constantHandler.initialVariableValues[element];
- jsAst.Expression reference = null;
- if (value == null) {
- reference = new jsAst.LiteralNull();
- } else {
- reference = task.constantReference(value);
- }
- properties.add(new jsAst.Property(js.string(jsName), reference));
- }
- defineStub(
- backend.namer.callCatchAllName,
- js.fun([], js.return_(new jsAst.ObjectInitializer(properties))));
- }
-
- /**
- * Compute the set of possible selectors in the presence of optional
- * non-named parameters.
- */
- Set<Selector> computeOptionalSelectors(FunctionSignature signature,
- FunctionElement element) {
- Set<Selector> selectors = new Set<Selector>();
- // Add the selector that does not have any optional argument.
- selectors.add(new Selector(SelectorKind.CALL,
- element.name,
- element.getLibrary(),
- signature.requiredParameterCount,
- <String>[]));
-
- // For each optional parameter, we increment the number of passed
- // argument.
- for (int i = 1; i <= signature.optionalParameterCount; i++) {
- selectors.add(new Selector(SelectorKind.CALL,
- element.name,
- element.getLibrary(),
- signature.requiredParameterCount + i,
- <String>[]));
- }
- return selectors;
- }
-
- void emitStaticFunctionGetters(CodeBuffer eagerBuffer) {
- task.addComment('Static function getters', task.mainBuffer);
- for (FunctionElement element in
- Elements.sortedByPosition(staticGetters.keys)) {
- Element closure = staticGetters[element];
- CodeBuffer buffer =
- task.isDeferred(element) ? task.deferredConstants : eagerBuffer;
- String closureClass = namer.isolateAccess(closure);
- String name = namer.getStaticClosureName(element);
-
- String closureName = namer.getStaticClosureName(element);
- jsAst.Node assignment = js(
- 'init.globalFunctions["$closureName"] ='
- ' ${namer.globalObjectFor(element)}.$name ='
- ' new $closureClass(#, "$closureName")',
- namer.elementAccess(element));
- buffer.write(jsAst.prettyPrint(assignment, compiler));
- buffer.write('$N');
- }
- }
-
- void emitStaticFunctionClosures() {
- Set<FunctionElement> functionsNeedingGetter =
- compiler.codegenWorld.staticFunctionsNeedingGetter;
- for (FunctionElement element in
- Elements.sortedByPosition(functionsNeedingGetter)) {
- String superName = namer.getNameOfClass(compiler.closureClass);
- int parameterCount = element.functionSignature.parameterCount;
- String name = 'Closure\$$parameterCount';
- assert(task.instantiatedClasses.contains(compiler.closureClass));
-
- ClassElement closureClassElement = new ClosureClassElement(
- null, name, compiler, element,
- element.getCompilationUnit());
- // Now add the methods on the closure class. The instance method does not
- // have the correct name. Since [addParameterStubs] use the name to create
- // its stubs we simply create a fake element with the correct name.
- // Note: the callElement will not have any enclosingElement.
- FunctionElement callElement =
- new ClosureInvocationElement(namer.closureInvocationSelectorName,
- element);
-
- String invocationName = namer.instanceMethodName(callElement);
- String mangledName = namer.getNameOfClass(closureClassElement);
-
- // Define the constructor with a name so that Object.toString can
- // find the class name of the closure class.
- ClassBuilder closureBuilder = new ClassBuilder();
- // If a static function is used as a closure we need to add its name
- // in case it is used in spawnFunction.
- String methodName = namer.STATIC_CLOSURE_NAME_NAME;
- List<String> fieldNames = <String>[invocationName, methodName];
- closureBuilder.addProperty('',
- js.string("$superName;${fieldNames.join(',')}"));
-
- addParameterStubs(callElement, closureBuilder.addProperty);
-
- void emitFunctionTypeSignature(Element method, FunctionType methodType) {
- RuntimeTypes rti = backend.rti;
- // [:() => null:] is dummy encoding of [this] which is never needed for
- // the encoding of the type of the static [method].
- jsAst.Expression encoding =
- rti.getSignatureEncoding(methodType, js('null'));
- String operatorSignature = namer.operatorSignature();
- // TODO(johnniwinther): Make MiniJsParser support function expressions.
- closureBuilder.addProperty(operatorSignature, encoding);
- }
-
- void emitIsFunctionTypeTest(FunctionType functionType) {
- String operator = namer.operatorIsType(functionType);
- closureBuilder.addProperty(operator, js('true'));
- }
-
- FunctionType methodType = element.computeType(compiler);
- Map<FunctionType, bool> functionTypeChecks =
- task.typeTestEmitter.getFunctionTypeChecksOn(methodType);
- task.typeTestEmitter.generateFunctionTypeTests(
- element, methodType, functionTypeChecks,
- emitFunctionTypeSignature, emitIsFunctionTypeTest);
-
- closureClassElement =
- addClosureIfNew(closureBuilder, closureClassElement, fieldNames);
- staticGetters[element] = closureClassElement;
-
- }
- }
-
- ClassElement addClosureIfNew(ClassBuilder builder,
- ClassElement closure,
- List<String> fieldNames) {
- String key =
- jsAst.prettyPrint(builder.toObjectInitializer(), compiler).getText();
- return methodClosures.putIfAbsent(key, () {
- String mangledName = namer.getNameOfClass(closure);
- emitClosureInPrecompiledFunction(mangledName, fieldNames);
- return closure;
- });
- }
-
- void emitClosureInPrecompiledFunction(String mangledName,
- List<String> fieldNames) {
- List<String> fields = fieldNames;
- String constructorName = mangledName;
- task.precompiledFunction.add(new jsAst.FunctionDeclaration(
- new jsAst.VariableDeclaration(constructorName),
- js.fun(fields, fields.map(
- (name) => js('this.$name = $name')).toList())));
- task.precompiledFunction.addAll([
- js('$constructorName.builtin\$cls = "$constructorName"'),
- js('\$desc=\$collectedClasses.$constructorName'),
- js.if_('\$desc instanceof Array', js('\$desc = \$desc[1]')),
- js('$constructorName.prototype = \$desc'),
- ]);
-
- task.precompiledConstructorNames.add(js(constructorName));
- }
-
- /**
- * Documentation wanted -- johnniwinther
- *
- * Invariant: [member] must be a declaration element.
- */
- void emitDynamicFunctionGetter(FunctionElement member,
- DefineStubFunction defineStub) {
- assert(invariant(member, member.isDeclaration));
- assert(task.instantiatedClasses.contains(compiler.boundClosureClass));
- // For every method that has the same name as a property-get we create a
- // getter that returns a bound closure. Say we have a class 'A' with method
- // 'foo' and somewhere in the code there is a dynamic property get of
- // 'foo'. Then we generate the following code (in pseudo Dart/JavaScript):
- //
- // class A {
- // foo(x, y, z) { ... } // Original function.
- // get foo { return new BoundClosure499(this, "foo"); }
- // }
- // class BoundClosure499 extends BoundClosure {
- // BoundClosure499(this.self, this.name);
- // $call3(x, y, z) { return self[name](x, y, z); }
- // }
-
- bool hasOptionalParameters = member.optionalParameterCount(compiler) != 0;
- int parameterCount = member.parameterCount(compiler);
-
- // Intercepted methods take an extra parameter, which is the
- // receiver of the call.
- bool inInterceptor = backend.isInterceptedMethod(member);
- List<String> fieldNames = <String>[];
- compiler.boundClosureClass.forEachInstanceField((_, Element field) {
- fieldNames.add(namer.instanceFieldPropertyName(field));
- });
-
- ClassElement classElement = member.getEnclosingClass();
- String name = inInterceptor
- ? 'BoundClosure\$i${parameterCount}'
- : 'BoundClosure\$${parameterCount}';
-
- ClassElement closureClassElement = new ClosureClassElement(
- null, name, compiler, member,
- member.getCompilationUnit());
- String superName = namer.getNameOfClass(closureClassElement.superclass);
-
- // Define the constructor with a name so that Object.toString can
- // find the class name of the closure class.
- ClassBuilder boundClosureBuilder = new ClassBuilder();
- boundClosureBuilder.addProperty('',
- js.string("$superName;${fieldNames.join(',')}"));
- // Now add the methods on the closure class. The instance method does not
- // have the correct name. Since [addParameterStubs] use the name to create
- // its stubs we simply create a fake element with the correct name.
- // Note: the callElement will not have any enclosingElement.
- FunctionElement callElement = new ClosureInvocationElement(
- namer.closureInvocationSelectorName, member);
-
- String invocationName = namer.instanceMethodName(callElement);
-
- List<String> parameters = <String>[];
- List<jsAst.Expression> arguments =
- <jsAst.Expression>[js('this')[fieldNames[0]]];
- if (inInterceptor) {
- arguments.add(js('this')[fieldNames[2]]);
- }
- for (int i = 0; i < parameterCount; i++) {
- String name = 'p$i';
- parameters.add(name);
- arguments.add(js(name));
- }
-
- jsAst.Expression fun = js.fun(
- parameters,
- js.return_(
- js('this')[fieldNames[1]]['call'](arguments)));
- boundClosureBuilder.addProperty(invocationName, fun);
-
- addParameterStubs(callElement, boundClosureBuilder.addProperty);
-
- void emitFunctionTypeSignature(Element method, FunctionType methodType) {
- jsAst.Expression encoding = backend.rti.getSignatureEncoding(
- methodType, js('this')[fieldNames[0]]);
- String operatorSignature = namer.operatorSignature();
- boundClosureBuilder.addProperty(operatorSignature, encoding);
- }
-
- void emitIsFunctionTypeTest(FunctionType functionType) {
- String operator = namer.operatorIsType(functionType);
- boundClosureBuilder.addProperty(operator,
- new jsAst.LiteralBool(true));
- }
-
- DartType memberType = member.computeType(compiler);
- Map<FunctionType, bool> functionTypeChecks =
- task.typeTestEmitter.getFunctionTypeChecksOn(memberType);
-
- task.typeTestEmitter.generateFunctionTypeTests(
- member, memberType, functionTypeChecks,
- emitFunctionTypeSignature, emitIsFunctionTypeTest);
-
- closureClassElement =
- addClosureIfNew(boundClosureBuilder, closureClassElement, fieldNames);
-
- String closureClass = namer.isolateAccess(closureClassElement);
-
- // And finally the getter.
- String getterName = namer.getterName(member);
- String targetName = namer.instanceMethodName(member);
-
- parameters = <String>[];
- jsAst.PropertyAccess method =
- backend.namer.elementAccess(classElement)['prototype'][targetName];
- arguments = <jsAst.Expression>[js('this'), method];
-
- if (inInterceptor) {
- String receiverArg = fieldNames[2];
- parameters.add(receiverArg);
- arguments.add(js(receiverArg));
} else {
- // Put null in the intercepted receiver field.
- arguments.add(new jsAst.LiteralNull());
+ Set<Selector> callSelectors = callSelectorsAsNamed();
+ if (callSelectors != null) {
+ selectors = selectors.union(callSelectors);
+ }
}
-
- arguments.add(js.string(targetName));
-
- jsAst.Expression getterFunction = js.fun(
- parameters, js.return_(js(closureClass).newWith(arguments)));
-
- defineStub(getterName, getterFunction);
+ Set<Selector> untypedSelectors = new Set<Selector>();
+ if (selectors != null) {
+ for (Selector selector in selectors) {
+ if (!selector.appliesUnnamed(member, compiler)) continue;
+ if (untypedSelectors.add(selector.asUntyped)) {
+ // TODO(ahe): Is the last argument to [addParameterStub] needed?
+ addParameterStub(member, selector, defineStub, new Set<String>());
+ }
+ }
+ }
+ if (canTearOff) {
+ selectors = compiler.codegenWorld.invokedNames[
+ namer.closureInvocationSelectorName];
+ if (selectors != null) {
+ for (Selector selector in selectors) {
+ selector = new Selector.call(
+ member.name, member.getLibrary(),
+ selector.argumentCount, selector.namedArguments);
+ if (!selector.appliesUnnamed(member, compiler)) continue;
+ if (untypedSelectors.add(selector)) {
+ // TODO(ahe): Is the last argument to [addParameterStub] needed?
+ addParameterStub(member, selector, defineStub, new Set<String>());
+ }
+ }
+ }
+ }
}
/**
@@ -508,7 +227,7 @@
*/
void emitCallStubForGetter(Element member,
Set<Selector> selectors,
- DefineStubFunction defineStub) {
+ AddPropertyFunction addProperty) {
assert(invariant(member, member.isDeclaration));
LibraryElement memberLibrary = member.getLibrary();
// If the method is intercepted, the stub gets the
@@ -560,7 +279,7 @@
parameters,
js.return_(buildGetter()[closureCallName](arguments)));
- defineStub(invocationName, function);
+ addProperty(invocationName, function);
}
}
}
@@ -577,10 +296,6 @@
if (selectors != null && !selectors.isEmpty) {
emitCallStubForGetter(member, selectors, builder.addProperty);
}
- } else if (member.isFunction()) {
- if (compiler.codegenWorld.hasInvokedGetter(member, compiler)) {
- emitDynamicFunctionGetter(member, builder.addProperty);
- }
}
}
@@ -606,30 +321,189 @@
jsAst.Expression code = backend.generatedCode[member];
if (code == null) return;
String name = namer.getNameOfMember(member);
- if (backend.isInterceptedMethod(member)) {
- task.interceptorEmitter.interceptorInvocationNames.add(name);
- }
- code = task.metadataEmitter.extendWithMetadata(member, code);
- builder.addProperty(name, code);
- String reflectionName = task.getReflectionName(member, name);
- if (reflectionName != null) {
- var reflectable =
- js(backend.isAccessibleByReflection(member) ? '1' : '0');
- builder.addProperty('+$reflectionName', reflectable);
- jsAst.Node defaultValues =
- task.metadataEmitter.reifyDefaultArguments(member);
- if (defaultValues != null) {
- String unmangledName = member.name;
- builder.addProperty('*$unmangledName', defaultValues);
+ task.interceptorEmitter.recordMangledNameOfMemberMethod(member, name);
+ FunctionSignature parameters = member.computeSignature(compiler);
+ bool needsStubs = !parameters.optionalParameters.isEmpty;
+ bool canTearOff = false;
+ bool isClosure = false;
+ bool canBeApplied = compiler.enabledFunctionApply;
+ String tearOffName;
+ if (!member.isFunction() || member.isConstructor() || member.isAccessor()) {
+ canTearOff = false;
+ canBeApplied = false;
+ } else if (member.isInstanceMember()) {
+ if (member.getEnclosingClass().isClosure()) {
+ canTearOff = false;
+ isClosure = true;
+ } else {
+ // Careful with operators.
+ canTearOff = compiler.codegenWorld.hasInvokedGetter(member, compiler);
+ tearOffName = namer.getterName(member);
}
+ } else {
+ canTearOff =
+ compiler.codegenWorld.staticFunctionsNeedingGetter.contains(member);
+ tearOffName = namer.getStaticClosureName(member);
}
- if (member.isInstanceMember()) {
- // TODO(ahe): Where is this done for static/top-level methods?
- FunctionSignature parameters = member.computeSignature(compiler);
- if (!parameters.optionalParameters.isEmpty) {
- addParameterStubs(member, builder.addProperty);
+
+ bool canBeReflected = backend.isAccessibleByReflection(member);
+ bool needStructuredInfo =
+ canTearOff || canBeReflected || canBeApplied;
+ if (!needStructuredInfo) {
+ builder.addProperty(name, code);
+ if (needsStubs) {
+ addParameterStubs(
+ member,
+ (Selector selector, jsAst.Fun function) {
+ builder.addProperty(namer.invocationName(selector), function);
+ });
}
+ return;
}
+
+ if (canTearOff) {
+ assert(invariant(member, !member.isGenerativeConstructor()));
+ assert(invariant(member, !member.isGenerativeConstructorBody()));
+ assert(invariant(member, !member.isConstructor()));
+ }
+
+ // This element is needed for reflection or needs additional stubs. So we
+ // need to retain additional information.
+
+ // The information is stored in an array with this format:
+ //
+ // 1. The JS function for this member.
+ // 2. First stub.
+ // 3. Name of first stub.
+ // ...
+ // M. Call name of this member.
+ // M+1. Call name of first stub.
+ // ...
+ // N. Getter name for tearOff.
+ // N+1. (Required parameter count << 1) + (member.isAccessor() ? 1 : 0).
+ // N+2. (Optional parameter count << 1) +
+ // (parameters.optionalParametersAreNamed ? 1 : 0).
+ // N+3. Index to function type in constant pool.
+ // N+4. First default argument.
+ // ...
+ // O. First parameter name (if needed for reflection or Function.apply).
+ // ...
+ // P. Unmangled name (if reflectable).
+ // P+1. First metadata (if reflectable).
+ // ...
+
+ List expressions = [];
+
+ String callSelectorString = 'null';
+ if (member.isFunction()) {
+ Selector callSelector =
+ new Selector.fromElement(member, compiler).toCallSelector();
+ callSelectorString = '"${namer.invocationName(callSelector)}"';
+ }
+
+ // On [requiredParameterCount], the lower bit is set if this method can be
+ // called reflectively.
+ int requiredParameterCount = parameters.requiredParameterCount << 1;
+ if (member.isAccessor()) requiredParameterCount++;
+
+ int optionalParameterCount = parameters.optionalParameterCount << 1;
+ if (parameters.optionalParametersAreNamed) optionalParameterCount++;
+
+ expressions.add(code);
+
+ // TODO(ahe): Remove comments from output.
+ List tearOffInfo =
+ [new jsAst.LiteralString('$callSelectorString /* tearOffInfo */')];
+
+ if (needsStubs || canTearOff) {
+ addParameterStubs(member, (Selector selector, jsAst.Fun function) {
+ expressions.add(function);
+ if (member.isInstanceMember()) {
+ Set invokedSelectors =
+ compiler.codegenWorld.invokedNames[member.name];
+ if (invokedSelectors != null && invokedSelectors.contains(selector)) {
+ expressions.add(js.string(namer.invocationName(selector)));
+ } else {
+ // Don't add a stub for calling this as a regular instance method,
+ // we only need the "call" stub for implicit closures of this
+ // method.
+ expressions.add("null");
+ }
+ } else {
+ // Static methods don't need "named" stubs as the default arguments
+ // are inlined at call sites. But static methods might need "call"
+ // stubs for implicit closures.
+ expressions.add("null");
+ // TOOD(ahe): Since we know when reading static data versus instance
+ // data, we can eliminate this element.
+ }
+ Set<Selector> callSelectors = compiler.codegenWorld.invokedNames[
+ namer.closureInvocationSelectorName];
+ Selector callSelector = selector.toCallSelector();
+ String callSelectorString = 'null';
+ if (canTearOff && callSelectors != null &&
+ callSelectors.contains(callSelector)) {
+ callSelectorString = '"${namer.invocationName(callSelector)}"';
+ }
+ tearOffInfo.add(
+ new jsAst.LiteralString('$callSelectorString /* tearOffInfo */'));
+ }, canTearOff);
+ }
+
+ jsAst.Expression memberTypeExpression;
+ if (canTearOff || canBeReflected) {
+ DartType memberType;
+ if (member.isGenerativeConstructorBody()) {
+ var body = member;
+ memberType = body.constructor.computeType(compiler);
+ } else {
+ memberType = member.computeType(compiler);
+ }
+ if (memberType.containsTypeVariables) {
+ jsAst.Expression thisAccess = js(r'this.$receiver');
+ memberTypeExpression =
+ backend.rti.getSignatureEncoding(memberType, thisAccess);
+ } else {
+ memberTypeExpression =
+ js.toExpression(task.metadataEmitter.reifyType(memberType));
+ }
+ } else {
+ memberTypeExpression = js('null');
+ }
+
+ expressions
+ ..addAll(tearOffInfo)
+ ..add((tearOffName == null || member.isAccessor())
+ ? js("null") : js.string(tearOffName))
+ ..add(requiredParameterCount)
+ ..add(optionalParameterCount)
+ ..add(memberTypeExpression)
+ ..addAll(task.metadataEmitter.reifyDefaultArguments(member));
+
+ if (canBeReflected || canBeApplied) {
+ parameters.orderedForEachParameter((Element parameter) {
+ expressions.add(task.metadataEmitter.reifyName(parameter.name));
+ });
+ }
+ if (canBeReflected) {
+ jsAst.LiteralString reflectionName;
+ if (member.isConstructor()) {
+ String reflectionNameString = task.getReflectionName(member, name);
+ reflectionName =
+ new jsAst.LiteralString(
+ '"new ${Elements.reconstructConstructorName(member)}"'
+ ' /* $reflectionNameString */');
+ } else {
+ reflectionName = js.string(member.name);
+ }
+ expressions
+ ..add(reflectionName)
+ ..addAll(task.metadataEmitter.computeMetadata(member));
+ } else if (isClosure && canBeApplied) {
+ expressions.add(js.string(member.name));
+ }
+
+ builder.addProperty(name, js.toExpression(expressions));
}
void addMemberField(VariableElement member, ClassBuilder builder) {
diff --git a/sdk/lib/_internal/compiler/implementation/js_emitter/declarations.dart b/sdk/lib/_internal/compiler/implementation/js_emitter/declarations.dart
index fb2cf01..8ca7b9b 100644
--- a/sdk/lib/_internal/compiler/implementation/js_emitter/declarations.dart
+++ b/sdk/lib/_internal/compiler/implementation/js_emitter/declarations.dart
@@ -8,9 +8,14 @@
const DEBUG_FAST_OBJECTS = false;
/**
- * A convenient type alias for some functions that emit keyed values.
+ * Call-back for adding stub [function] for [selector].
*/
-typedef void DefineStubFunction(String invocationName, jsAst.Expression value);
+typedef void AddStubFunction(Selector selector, jsAst.Fun function);
+
+/**
+ * Call-back for adding property with [name] and [value].
+ */
+typedef void AddPropertyFunction(String name, jsAst.Expression value);
/**
* [member] is a field (instance, static, or top level).
diff --git a/sdk/lib/_internal/compiler/implementation/js_emitter/interceptor_emitter.dart b/sdk/lib/_internal/compiler/implementation/js_emitter/interceptor_emitter.dart
index 0a458e4..94fe5e4 100644
--- a/sdk/lib/_internal/compiler/implementation/js_emitter/interceptor_emitter.dart
+++ b/sdk/lib/_internal/compiler/implementation/js_emitter/interceptor_emitter.dart
@@ -7,6 +7,12 @@
class InterceptorEmitter extends CodeEmitterHelper {
final Set<String> interceptorInvocationNames = new Set<String>();
+ void recordMangledNameOfMemberMethod(FunctionElement member, String name) {
+ if (backend.isInterceptedMethod(member)) {
+ interceptorInvocationNames.add(name);
+ }
+ }
+
Set<ClassElement> interceptorsReferencedFromConstants() {
Set<ClassElement> classes = new Set<ClassElement>();
ConstantHandler handler = compiler.constantHandler;
diff --git a/sdk/lib/_internal/compiler/implementation/js_emitter/js_emitter.dart b/sdk/lib/_internal/compiler/implementation/js_emitter/js_emitter.dart
index cf261ca..c84e44e 100644
--- a/sdk/lib/_internal/compiler/implementation/js_emitter/js_emitter.dart
+++ b/sdk/lib/_internal/compiler/implementation/js_emitter/js_emitter.dart
@@ -18,8 +18,8 @@
import '../dart2jslib.dart' show
CodeBuffer;
-import '../elements/modelx.dart' show
- FunctionElementX;
+import '../elements/elements.dart' show
+ TypeVariableElement;
import '../js/js.dart' show
js;
@@ -58,9 +58,10 @@
import '../util/uri_extras.dart' show
relativize;
+import '../dump_info.dart' as dumpInfo;
+
part 'class_builder.dart';
part 'class_emitter.dart';
-part 'closure_invocation_element.dart';
part 'code_emitter_helper.dart';
part 'code_emitter_task.dart';
part 'container_builder.dart';
diff --git a/sdk/lib/_internal/compiler/implementation/js_emitter/metadata_emitter.dart b/sdk/lib/_internal/compiler/implementation/js_emitter/metadata_emitter.dart
index 6fb21d3..85570b2 100644
--- a/sdk/lib/_internal/compiler/implementation/js_emitter/metadata_emitter.dart
+++ b/sdk/lib/_internal/compiler/implementation/js_emitter/metadata_emitter.dart
@@ -42,9 +42,9 @@
});
}
- jsAst.Node reifyDefaultArguments(FunctionElement function) {
+ List<int> reifyDefaultArguments(FunctionElement function) {
FunctionSignature signature = function.computeSignature(compiler);
- if (signature.optionalParameterCount == 0) return null;
+ if (signature.optionalParameterCount == 0) return const [];
List<int> defaultValues = <int>[];
for (Element element in signature.orderedOptionalParameters) {
Constant value =
@@ -55,7 +55,7 @@
.getText();
defaultValues.add(addGlobalMetadata(stringRepresentation));
}
- return js.toExpression(defaultValues);
+ return defaultValues;
}
int reifyMetadata(MetadataAnnotation annotation) {
@@ -118,21 +118,10 @@
buffer.write('];$n');
}
- jsAst.Fun extendWithMetadata(FunctionElement element, jsAst.Fun code) {
- if (!backend.retainMetadataOf(element)) return code;
+ List<int> computeMetadata(FunctionElement element) {
return compiler.withCurrentElement(element, () {
+ if (!backend.retainMetadataOf(element)) return const <int>[];
List<int> metadata = <int>[];
- FunctionSignature signature = element.functionSignature;
- if (element.isConstructor()) {
- metadata.add(reifyType(element.getEnclosingClass().thisType));
- } else {
- metadata.add(reifyType(signature.returnType));
- }
- signature.forEachParameter((Element parameter) {
- metadata
- ..add(reifyName(parameter.name))
- ..add(reifyType(parameter.computeType(compiler)));
- });
Link link = element.metadata;
// TODO(ahe): Why is metadata sometimes null?
if (link != null) {
@@ -140,8 +129,7 @@
metadata.add(reifyMetadata(link.head));
}
}
- code.body.statements.add(js.string(metadata.join(',')).toStatement());
- return code;
+ return metadata;
});
}
}
diff --git a/sdk/lib/_internal/compiler/implementation/js_emitter/nsm_emitter.dart b/sdk/lib/_internal/compiler/implementation/js_emitter/nsm_emitter.dart
index 4e61cd7..5fabe21 100644
--- a/sdk/lib/_internal/compiler/implementation/js_emitter/nsm_emitter.dart
+++ b/sdk/lib/_internal/compiler/implementation/js_emitter/nsm_emitter.dart
@@ -18,7 +18,7 @@
static const MAX_MINIFIED_LENGTH_FOR_DIFF_ENCODING = 4;
- void emitNoSuchMethodHandlers(DefineStubFunction defineStub) {
+ void emitNoSuchMethodHandlers(AddPropertyFunction addProperty) {
// Do not generate no such method handlers if there is no class.
if (compiler.codegenWorld.instantiatedClasses.isEmpty) return;
@@ -55,8 +55,8 @@
compiler.codegenWorld.invokedSetters.forEach(addNoSuchMethodHandlers);
// Set flag used by generateMethod helper below. If we have very few
- // handlers we use defineStub for them all, rather than try to generate them
- // at runtime.
+ // handlers we use addProperty for them all, rather than try to generate
+ // them at runtime.
bool haveVeryFewNoSuchMemberHandlers =
(addedJsNames.length < VERY_FEW_NO_SUCH_METHOD_HANDLERS);
@@ -104,12 +104,12 @@
Selector selector = addedJsNames[jsName];
jsAst.Expression method = generateMethod(jsName, selector);
if (method != null) {
- defineStub(jsName, method);
+ addProperty(jsName, method);
String reflectionName = task.getReflectionName(selector, jsName);
if (reflectionName != null) {
bool accessible = compiler.world.allFunctions.filter(selector).any(
(Element e) => backend.isAccessibleByReflection(e));
- defineStub('+$reflectionName', js(accessible ? '1' : '0'));
+ addProperty('+$reflectionName', js(accessible ? '1' : '0'));
}
}
}
diff --git a/sdk/lib/_internal/compiler/implementation/js_emitter/reflection_data_parser.dart b/sdk/lib/_internal/compiler/implementation/js_emitter/reflection_data_parser.dart
index 864f130..1076afe 100644
--- a/sdk/lib/_internal/compiler/implementation/js_emitter/reflection_data_parser.dart
+++ b/sdk/lib/_internal/compiler/implementation/js_emitter/reflection_data_parser.dart
@@ -4,21 +4,140 @@
part of dart2js.js_emitter;
+// TODO(ahe): Share these with js_helper.dart.
+const FUNCTION_INDEX = 0;
+const NAME_INDEX = 1;
+const CALL_NAME_INDEX = 2;
+const REQUIRED_PARAMETER_INDEX = 3;
+const OPTIONAL_PARAMETER_INDEX = 4;
+const DEFAULT_ARGUMENTS_INDEX = 5;
+
// TODO(ahe): This code should be integrated in CodeEmitterTask.finishClasses.
-String getReflectionDataParser(String classesCollector, Namer namer) {
+String getReflectionDataParser(String classesCollector,
+ JavaScriptBackend backend) {
+ Namer namer = backend.namer;
+ Compiler compiler = backend.compiler;
+ Element closureFromTearOff = compiler.findHelper('closureFromTearOff');
+ String tearOffAccess =
+ // Default value for mocked-up test libraries.
+ 'function () { throw "Helper \'closureFromTearOff\' missing." }';
+ if (closureFromTearOff != null) {
+ tearOffAccess = namer.isolateAccess(closureFromTearOff);
+ }
String metadataField = '"${namer.metadataField}"';
String reflectableField = namer.reflectableField;
+
+ // TODO(ahe): Move this string constants to namer.
+ String reflectionInfoField = r'$reflectionInfo';
+ String reflectionNameField = r'$reflectionName';
+ String metadataIndexField = r'$metadataIndex';
+
String defaultValuesField = namer.defaultValuesField;
String methodsWithOptionalArgumentsField =
namer.methodsWithOptionalArgumentsField;
- return '''
+
+ String header = '''
(function (reflectionData) {
+ "use strict";
'''
// [map] returns an object literal that V8 shouldn't try to optimize with a
// hidden class. This prevents a potential performance problem where V8 tries
// to build a hidden class for an object used as a hashMap.
'''
function map(x){x={x:x};delete x.x;return x}
+''';
+
+
+ /**
+ * See [dart2js.js_emitter.ContainerBuilder.addMemberMethod] for format of
+ * [array].
+ */
+ String addStubs = '''
+ function addStubs(descriptor, array, name, isStatic,''' // Break long line.
+ ''' originalDescriptor, functions) {
+ var f, funcs =''' // Break long line.
+ ''' [originalDescriptor[name] =''' // Break long line.
+ ''' descriptor[name] = f = ${readFunction("array", "$FUNCTION_INDEX")}];
+ f.\$stubName = name;
+ functions.push(name);
+ for (var index = $FUNCTION_INDEX; index < array.length; index += 2) {
+ f = array[index + 1];
+ if (typeof f != "function") break;
+ f.\$stubName = ${readString("array", "index + 2")};
+ funcs.push(f);
+ if (f.\$stubName) {
+ originalDescriptor[f.\$stubName] = descriptor[f.\$stubName] = f;
+ functions.push(f.\$stubName);
+ }
+ }
+ for (var i = 0; i < funcs.length; index++, i++) {
+ funcs[i].\$callName = ${readString("array", "index + 1")};
+ }
+ var getterStubName = ${readString("array", "++index")};
+ array = array.slice(++index);
+ var requiredParameterInfo = ${readInt("array", "0")};
+ var requiredParameterCount = requiredParameterInfo >> 1;
+ var isAccessor = (requiredParameterInfo & 1) === 1;
+ var isSetter = requiredParameterInfo === 3;
+ var isGetter = requiredParameterInfo === 1;
+ var optionalParameterInfo = ${readInt("array", "1")};
+ var optionalParameterCount = optionalParameterInfo >> 1;
+ var optionalParametersAreNamed = (optionalParameterInfo & 1) === 1;
+ var functionTypeIndex = ${readFunctionType("array", "2")};
+ var isReflectable =''' // Break long line.
+ ''' array.length > requiredParameterCount + optionalParameterCount + 3;
+ if (getterStubName) {
+ f = tearOff(funcs, array, isStatic, name);
+'''
+ /* Used to create an isolate using spawnFunction.*/
+'''
+ if (isStatic) init.globalFunctions[name] = f;
+ originalDescriptor[getterStubName] = descriptor[getterStubName] = f;
+ funcs.push(f);
+ if (getterStubName) functions.push(getterStubName);
+ f.\$stubName = getterStubName;
+ f.\$callName = null;
+ }
+ if (isReflectable) {
+ for (var i = 0; i < funcs.length; i++) {
+ funcs[i].$reflectableField = 1;
+ funcs[i].$reflectionInfoField = array;
+ }
+ }
+ if (isReflectable) {
+ var unmangledNameIndex =''' // Break long line.
+ ''' optionalParameterCount * 2 + requiredParameterCount + 3;
+ var unmangledName = ${readString("array", "unmangledNameIndex")};
+ var reflectionName =''' // Break long line.
+ ''' unmangledName + ":" + requiredParameterCount +''' // Break long line.
+ ''' ":" + optionalParameterCount;
+ if (isGetter) {
+ reflectionName = unmangledName;
+ } else if (isSetter) {
+ reflectionName = unmangledName + "=";
+ }
+ if (isStatic) {
+ init.mangledGlobalNames[name] = reflectionName;
+ } else {
+ init.mangledNames[name] = reflectionName;
+ }
+ funcs[0].$reflectionNameField = reflectionName;
+ funcs[0].$metadataIndexField = unmangledNameIndex + 1;
+ if (optionalParameterCount) descriptor[unmangledName + "*"] = funcs[0];
+ }
+ }
+''';
+
+ String tearOff = '''
+ function tearOff(funcs, reflectionInfo, isStatic, name) {
+ return function() {
+ return $tearOffAccess(''' // Break long line.
+ '''this, funcs, reflectionInfo, isStatic, arguments, name);
+ }
+ }
+''';
+
+ String init = '''
if (!init.libraries) init.libraries = [];
if (!init.mangledNames) init.mangledNames = map();
if (!init.mangledGlobalNames) init.mangledGlobalNames = map();
@@ -53,6 +172,9 @@
var fields = descriptor && descriptor[""];
var classes = [];
var functions = [];
+''';
+
+ String processStatics = '''
function processStatics(descriptor) {
for (var property in descriptor) {
if (!hasOwnProperty.call(descriptor, property)) continue;
@@ -63,9 +185,9 @@
if (firstChar === "+") {
mangledGlobalNames[previousProperty] = property.substring(1);
if (descriptor[property] == 1) ''' // Break long line.
-'''descriptor[previousProperty].$reflectableField = 1;
+ '''descriptor[previousProperty].$reflectableField = 1;
if (element && element.length) ''' // Break long line.
-'''init.typeInformation[previousProperty] = element;
+ '''init.typeInformation[previousProperty] = element;
} else if (firstChar === "@") {
property = property.substring(1);
${namer.currentIsolate}[property][$metadataField] = element;
@@ -80,6 +202,9 @@
globalObject[previousProperty = property] = element;
functions.push(property);
init.globalFunctions[property] = element;
+ } else if (element.constructor === Array) {
+ addStubs(globalObject, element, property, ''' // Break long line.
+ '''true, descriptor, functions);
} else {
previousProperty = property;
var newDesc = {};
@@ -92,7 +217,7 @@
} else if (firstChar === "+") {
mangledNames[previousProp] = prop.substring(1);
if (element[prop] == 1) ''' // Break long line.
-'''element[previousProp].$reflectableField = 1;
+ '''element[previousProp].$reflectableField = 1;
} else if (firstChar === "@" && prop !== "@") {
newDesc[prop.substring(1)][$metadataField] = element[prop];
} else if (firstChar === "*") {
@@ -103,7 +228,14 @@
}
optionalMethods[prop] = previousProp;
} else {
- newDesc[previousProp = prop] = element[prop];
+ var elem = element[prop];
+ if (prop && elem != null &&''' // Break long line.
+ ''' elem.constructor === Array &&''' // Break long line.
+ ''' prop !== "<>") {
+ addStubs(newDesc, elem, prop, false, element, []);
+ } else {
+ newDesc[previousProp = prop] = elem;
+ }
}
}
$classesCollector[property] = [globalObject, newDesc];
@@ -111,9 +243,55 @@
}
}
}
+''';
+
+String footer = '''
processStatics(descriptor);
libraries.push([name, uri, classes, functions, metadata, fields, isRoot,
globalObject]);
}
-})''';
+})
+''';
+
+ return '$header$processStatics$addStubs$tearOff$init$footer';
+}
+
+String readString(String array, String index) {
+ return readChecked(
+ array, index, 'result != null && typeof result != "string"', 'string');
+}
+
+String readInt(String array, String index) {
+ return readChecked(
+ array, index,
+ 'result != null && (typeof result != "number" || (result|0) !== result)',
+ 'int');
+}
+
+String readFunction(String array, String index) {
+ return readChecked(
+ array, index, 'result != null && typeof result != "function"',
+ 'function');
+}
+
+String readFunctionType(String array, String index) {
+ return readChecked(
+ array, index,
+ 'result != null && '
+ '(typeof result != "number" || (result|0) !== result) && '
+ 'typeof result != "function"',
+ 'function or int');
+}
+
+String readChecked(String array, String index, String check, String type) {
+ return '''
+(function() {
+ var result = $array[$index];
+ if ($check) {
+ throw new Error(
+ name + ": expected value of type \'$type\' at index " + ($index) +
+ " but got " + (typeof result));
+ }
+ return result;
+})()''';
}
diff --git a/sdk/lib/_internal/compiler/implementation/js_emitter/type_test_emitter.dart b/sdk/lib/_internal/compiler/implementation/js_emitter/type_test_emitter.dart
index 0d521bb..92e4f63 100644
--- a/sdk/lib/_internal/compiler/implementation/js_emitter/type_test_emitter.dart
+++ b/sdk/lib/_internal/compiler/implementation/js_emitter/type_test_emitter.dart
@@ -53,11 +53,6 @@
builder.addProperty(namer.operatorIs(other), js('true'));
}
- void generateIsFunctionTypeTest(FunctionType type) {
- String operator = namer.operatorIsType(type);
- builder.addProperty(operator, new jsAst.LiteralBool(true));
- }
-
void generateFunctionTypeSignature(Element method, FunctionType type) {
assert(method.isImplementation);
jsAst.Expression thisAccess = new jsAst.This();
@@ -75,7 +70,11 @@
RuntimeTypes rti = backend.rti;
jsAst.Expression encoding = rti.getSignatureEncoding(type, thisAccess);
String operatorSignature = namer.operatorSignature();
- builder.addProperty(operatorSignature, encoding);
+ if (!type.containsTypeVariables) {
+ builder.functionType = '${task.metadataEmitter.reifyType(type)}';
+ } else {
+ builder.addProperty(operatorSignature, encoding);
+ }
}
void generateSubstitution(ClassElement cls, {bool emitNull: false}) {
@@ -94,7 +93,7 @@
}
generateIsTestsOn(classElement, generateIsTest,
- generateIsFunctionTypeTest, generateFunctionTypeSignature,
+ generateFunctionTypeSignature,
generateSubstitution);
}
@@ -107,7 +106,6 @@
*/
void generateIsTestsOn(ClassElement cls,
void emitIsTest(Element element),
- FunctionTypeTestEmitter emitIsFunctionTypeTest,
FunctionTypeSignatureEmitter emitFunctionTypeSignature,
SubstitutionEmitter emitSubstitution) {
if (checkedClasses.contains(cls)) {
@@ -176,7 +174,7 @@
getFunctionTypeChecksOn(callType);
generateFunctionTypeTests(
call, callType, functionTypeChecks,
- emitFunctionTypeSignature, emitIsFunctionTypeTest);
+ emitFunctionTypeSignature);
}
}
@@ -250,38 +248,14 @@
Element method,
FunctionType methodType,
Map<FunctionType, bool> functionTypeChecks,
- FunctionTypeSignatureEmitter emitFunctionTypeSignature,
- FunctionTypeTestEmitter emitIsFunctionTypeTest) {
- bool hasDynamicFunctionTypeCheck = false;
- int neededPredicates = 0;
+ FunctionTypeSignatureEmitter emitFunctionTypeSignature) {
+
+ // TODO(ahe): We should be able to remove this forEach loop.
functionTypeChecks.forEach((FunctionType functionType, bool knownSubtype) {
- if (!knownSubtype) {
- registerDynamicFunctionTypeCheck(functionType);
- hasDynamicFunctionTypeCheck = true;
- } else if (!backend.rti.isSimpleFunctionType(functionType)) {
- // Simple function types are always checked using predicates and should
- // not provoke generation of signatures.
- neededPredicates++;
- }
+ registerDynamicFunctionTypeCheck(functionType);
});
- bool alwaysUseSignature = false;
- if (hasDynamicFunctionTypeCheck ||
- neededPredicates > MAX_FUNCTION_TYPE_PREDICATES) {
- emitFunctionTypeSignature(method, methodType);
- alwaysUseSignature = true;
- }
- functionTypeChecks.forEach((FunctionType functionType, bool knownSubtype) {
- if (knownSubtype) {
- if (backend.rti.isSimpleFunctionType(functionType)) {
- // Simple function types are always checked using predicates.
- emitIsFunctionTypeTest(functionType);
- } else if (alwaysUseSignature) {
- registerDynamicFunctionTypeCheck(functionType);
- } else {
- emitIsFunctionTypeTest(functionType);
- }
- }
- });
+
+ emitFunctionTypeSignature(method, methodType);
}
void registerDynamicFunctionTypeCheck(FunctionType functionType) {
diff --git a/sdk/lib/_internal/compiler/implementation/ordered_typeset.dart b/sdk/lib/_internal/compiler/implementation/ordered_typeset.dart
index 26a9e9f..d7b62de 100644
--- a/sdk/lib/_internal/compiler/implementation/ordered_typeset.dart
+++ b/sdk/lib/_internal/compiler/implementation/ordered_typeset.dart
@@ -1,10 +1,10 @@
-// Copyright (c) 2012, the Dart project authors. Please see the AUTHORS file
+// Copyright (c) 2013, the Dart project authors. Please see the AUTHORS file
// for details. All rights reserved. Use of this source code is governed by a
// BSD-style license that can be found in the LICENSE file.
-library resolution.ordered_typeset_builder;
+library ordered_typeset;
-import 'dart2jslib.dart' show Compiler, MessageKind;
+import 'dart2jslib.dart' show Compiler, MessageKind, invariant;
import 'dart_types.dart';
import 'elements/elements.dart' show ClassElement;
import 'util/util.dart' show Link, LinkBuilder;
@@ -48,7 +48,9 @@
/// class which this set represents. This is for instance used to create the
/// type set for [ClosureClassElement] which extends [Closure].
OrderedTypeSet extendClass(InterfaceType type) {
- assert(type.treatAsRaw);
+ assert(invariant(type.element, types.head.treatAsRaw,
+ message: 'Cannot extend generic class ${types.head} using '
+ 'OrderedTypeSet.extendClass'));
Link<DartType> extendedTypes =
new LinkEntry<DartType>(type, types);
List<Link<DartType>> list = new List<Link<DartType>>(levels + 1);
diff --git a/sdk/lib/_internal/compiler/implementation/resolution/members.dart b/sdk/lib/_internal/compiler/implementation/resolution/members.dart
index c29501b..9f58576 100644
--- a/sdk/lib/_internal/compiler/implementation/resolution/members.dart
+++ b/sdk/lib/_internal/compiler/implementation/resolution/members.dart
@@ -324,7 +324,10 @@
originParameter.parseNode(compiler).toString();
String patchParameterText =
patchParameter.parseNode(compiler).toString();
- if (originParameterText != patchParameterText) {
+ if (originParameterText != patchParameterText
+ // We special case the list constructor because of the
+ // optional parameter.
+ && origin != compiler.unnamedListConstructor) {
compiler.reportError(
originParameter.parseNode(compiler),
MessageKind.PATCH_PARAMETER_MISMATCH,
@@ -758,6 +761,9 @@
}
for (MetadataAnnotation metadata in element.metadata) {
metadata.ensureResolved(compiler);
+ if (!element.isProxy && metadata.value == compiler.proxyConstant) {
+ element.isProxy = true;
+ }
}
// Force resolution of metadata on non-instance members since they may be
@@ -1907,7 +1913,7 @@
Element defineElement(Node node, Element element,
{bool doAddToScope: true}) {
- compiler.ensure(element != null);
+ invariant(node, element != null);
mapping[node] = element;
if (doAddToScope) {
Element existing = scope.add(element);
@@ -3804,8 +3810,9 @@
: super(compiler, classElement, mapping);
DartType visitClassNode(ClassNode node) {
- compiler.ensure(element != null);
- compiler.ensure(element.resolutionState == STATE_STARTED);
+ invariant(node, element != null);
+ invariant(element, element.resolutionState == STATE_STARTED,
+ message: () => 'cyclic resolution of class $element');
InterfaceType type = element.computeType(compiler);
scope = new TypeDeclarationScope(scope, element);
@@ -3890,8 +3897,9 @@
}
DartType visitNamedMixinApplication(NamedMixinApplication node) {
- compiler.ensure(element != null);
- compiler.ensure(element.resolutionState == STATE_STARTED);
+ invariant(node, element != null);
+ invariant(element, element.resolutionState == STATE_STARTED,
+ message: () => 'cyclic resolution of class $element');
if (identical(node.classKeyword.stringValue, 'typedef')) {
// TODO(aprelev@gmail.com): Remove this deprecation diagnostic
diff --git a/sdk/lib/_internal/compiler/implementation/scanner/class_element_parser.dart b/sdk/lib/_internal/compiler/implementation/scanner/class_element_parser.dart
index 69a62ef..1d17df3 100644
--- a/sdk/lib/_internal/compiler/implementation/scanner/class_element_parser.dart
+++ b/sdk/lib/_internal/compiler/implementation/scanner/class_element_parser.dart
@@ -165,7 +165,7 @@
pushNode(null);
void buildFieldElement(String name, Element fields) {
Element element =
- new VariableElementX(name, fields, ElementKind.FIELD, null);
+ new FieldElementX(name, fields, null);
addMember(element);
}
buildFieldElements(modifiers, variableDefinitions.definitions,
diff --git a/sdk/lib/_internal/compiler/implementation/scanner/listener.dart b/sdk/lib/_internal/compiler/implementation/scanner/listener.dart
index 71992fa..1be0e2a 100644
--- a/sdk/lib/_internal/compiler/implementation/scanner/listener.dart
+++ b/sdk/lib/_internal/compiler/implementation/scanner/listener.dart
@@ -858,7 +858,7 @@
void endTopLevelFields(int count, Token beginToken, Token endToken) {
void buildFieldElement(String name, Element fields) {
- pushElement(new VariableElementX(name, fields, ElementKind.FIELD, null));
+ pushElement(new FieldElementX(name, fields, null));
}
NodeList variables = makeNodeList(count, null, null, ",");
TypeAnnotation type = popNode();
diff --git a/sdk/lib/_internal/compiler/implementation/scanner/scannerlib.dart b/sdk/lib/_internal/compiler/implementation/scanner/scannerlib.dart
index f5592f4..5813730 100644
--- a/sdk/lib/_internal/compiler/implementation/scanner/scannerlib.dart
+++ b/sdk/lib/_internal/compiler/implementation/scanner/scannerlib.dart
@@ -12,6 +12,7 @@
FunctionElementX,
TypedefElementX,
VariableElementX,
+ FieldElementX,
VariableListElementX,
ClassElementX,
MetadataAnnotationX,
diff --git a/sdk/lib/_internal/compiler/implementation/ssa/builder.dart b/sdk/lib/_internal/compiler/implementation/ssa/builder.dart
index b70c2de..9bf573c 100644
--- a/sdk/lib/_internal/compiler/implementation/ssa/builder.dart
+++ b/sdk/lib/_internal/compiler/implementation/ssa/builder.dart
@@ -649,7 +649,7 @@
// Remove locals that are not in all handlers.
directLocals = new Map<Element, HInstruction>();
joinedLocals.forEach((element, instruction) {
- if (instruction is HPhi
+ if (element != closureData.thisElement
&& instruction.inputs.length != localsHandlers.length) {
joinBlock.removePhi(instruction);
} else {
@@ -884,37 +884,72 @@
/**
* This mixin implements functionality that is shared between the [SsaBuilder]
* and the [SsaFromIrBuilder] classes.
+ *
+ * The type parameter [N] represents the node type from which the SSA form is
+ * built, either [IrNode] or [Node].
+ *
+ * This class does not define any fields because [SsaFromIrInliner], one of its
+ * subclasses, is implemented using delegation and does not need fields. The two
+ * other subclasses, [SsaBuilder] and [SsaFromIrBuilder], implement most of the
+ * properties as fields. To avoid copy-pasting these definitions, the mixin
+ * [SsaGraphBuilderFields] is inserted in between.
*/
-class SsaGraphBuilderMixin {
- final HGraph graph = new HGraph();
+abstract class SsaGraphBuilderMixin<N> {
+ Compiler get compiler;
+
+ JavaScriptBackend get backend;
+
+ HGraph get graph;
/**
* The current block to add instructions to. Might be null, if we are
* visiting dead code, but see [isReachable].
*/
- HBasicBlock _current;
+ HBasicBlock get current;
+
+ void set current(HBasicBlock block);
/**
- * The most recently opened block. Has the same value as [_current] while
- * the block is open, but unlike [_current], it isn't cleared when the
+ * The most recently opened block. Has the same value as [current] while
+ * the block is open, but unlike [current], it isn't cleared when the
* current block is closed.
*/
- HBasicBlock lastOpenedBlock;
+ HBasicBlock get lastOpenedBlock;
+
+ void set lastOpenedBlock(HBasicBlock block);
/**
* Indicates whether the current block is dead (because it has a throw or a
- * return further up). If this is false, then [_current] may be null. If the
+ * return further up). If this is false, then [current] may be null. If the
* block is dead then it may also be aborted, but for simplicity we only
- * abort on statement boundaries, not in the middle of expressions. See
+ * abort on statement boundaries, not in the middle of expressions. See
* isAborted.
*/
- bool isReachable = true;
+ bool get isReachable;
- HBasicBlock get current => _current;
- void set current(c) {
- isReachable = c != null;
- _current = c;
- }
+ void set isReachable(bool value);
+
+ /**
+ * True if we are visiting the expression of a throw statement.
+ */
+ bool get inThrowExpression;
+
+ /**
+ * The loop nesting is consulted when inlining a function invocation in
+ * [tryInlineMethod]. The inlining heuristics take this information into
+ * account.
+ */
+ int get loopNesting;
+
+ List<InliningState> get inliningStack;
+
+ /**
+ * This stack contains declaration elements of the functions being built
+ * or inlined by this builder.
+ */
+ List<Element> get sourceElementStack;
+
+ Element get sourceElement => sourceElementStack.last;
HBasicBlock addNewBlock() {
HBasicBlock block = graph.addNewBlock();
@@ -950,7 +985,7 @@
}
bool isAborted() {
- return _current == null;
+ return current == null;
}
/**
@@ -967,9 +1002,349 @@
void add(HInstruction instruction) {
current.add(instruction);
}
+
+ void addWithPosition(HInstruction instruction, N node) {
+ add(attachPosition(instruction, node));
+ }
+
+ HInstruction attachPosition(HInstruction instruction, N node);
+
+ SourceFile currentSourceFile() {
+ Element element = sourceElement;
+ // TODO(johnniwinther): remove the 'element.patch' hack.
+ if (element is FunctionElement) {
+ FunctionElement functionElement = element;
+ if (functionElement.patch != null) element = functionElement.patch;
+ }
+ Script script = element.getCompilationUnit().script;
+ return script.file;
+ }
+
+ void checkValidSourceFileLocation(
+ SourceFileLocation location, SourceFile sourceFile, int offset) {
+ if (!location.isValid()) {
+ throw MessageKind.INVALID_SOURCE_FILE_LOCATION.message(
+ {'offset': offset,
+ 'fileName': sourceFile.filename,
+ 'length': sourceFile.length});
+ }
+ }
+
+ /**
+ * Prepares the state of the builder for inlining an invocaiton of [function].
+ */
+ void enterInlinedMethod(FunctionElement function,
+ Selector selector,
+ List<HInstruction> providedArguments,
+ N currentNode) {
+ assert(invariant(function, function.isImplementation));
+ assert(providedArguments != null);
+
+ List<HInstruction> compiledArguments;
+ bool isInstanceMember = function.isInstanceMember();
+ // For static calls, [providedArguments] is complete, default arguments
+ // have been included if necessary, see [addStaticSendArgumentsToList].
+ if (!isInstanceMember
+ || currentNode == null // In erroneous code, currentNode can be null.
+ || providedArgumentsKnownToBeComplete(currentNode)
+ || function.isGenerativeConstructorBody()
+ || selector.isGetter()) {
+ // For these cases, the provided argument list is known to be complete.
+ compiledArguments = providedArguments;
+ } else {
+ compiledArguments = completeDynamicSendArgumentsList(
+ selector, function, providedArguments);
+ }
+ setupInliningState(function, compiledArguments);
+ }
+
+ /**
+ * Returns a complete argument list for a dynamic call of [function]. The
+ * initial argument list [providedArguments], created by
+ * [addDynamicSendArgumentsToList], does not include values for default
+ * arguments used in the call. The reason is that the target function (which
+ * defines the defaults) is not known.
+ *
+ * However, inlining can only be performed when the target function can be
+ * resolved statically. The defaults can therefore be included at this point.
+ *
+ * The [providedArguments] list contains first all positional arguments, then
+ * the provided named arguments (the named arguments that are defined in the
+ * [selector]) in a specific order (see [addDynamicSendArgumentsToList]).
+ */
+ List<HInstruction> completeDynamicSendArgumentsList(
+ Selector selector,
+ FunctionElement function,
+ List<HInstruction> providedArguments) {
+ assert(selector.applies(function, compiler));
+ FunctionSignature signature = function.computeSignature(compiler);
+ List<HInstruction> compiledArguments = new List<HInstruction>(
+ signature.parameterCount + 1); // Plus one for receiver.
+
+ compiledArguments[0] = providedArguments[0]; // Receiver.
+ int index = 1;
+ for (; index <= signature.requiredParameterCount; index++) {
+ compiledArguments[index] = providedArguments[index];
+ }
+ if (!signature.optionalParametersAreNamed) {
+ signature.forEachOptionalParameter((element) {
+ if (index < providedArguments.length) {
+ compiledArguments[index] = providedArguments[index];
+ } else {
+ compiledArguments[index] =
+ handleConstantForOptionalParameter(element);
+ }
+ index++;
+ });
+ } else {
+ /* Example:
+ * void foo(a, {b, d, c})
+ * foo(0, d = 1, b = 2)
+ *
+ * providedArguments = [0, 2, 1]
+ * selectorArgumentNames = [b, d]
+ * signature.orderedOptionalParameters = [b, c, d]
+ *
+ * For each parameter name in the signature, if the argument name matches
+ * we use the next provided argument, otherwise we get the default.
+ */
+ List<String> selectorArgumentNames = selector.getOrderedNamedArguments();
+ int namedArgumentIndex = 0;
+ int firstProvidedNamedArgument = index;
+ signature.orderedOptionalParameters.forEach((element) {
+ if (namedArgumentIndex < selectorArgumentNames.length &&
+ element.name == selectorArgumentNames[namedArgumentIndex]) {
+ // The named argument was provided in the function invocation.
+ compiledArguments[index] = providedArguments[
+ firstProvidedNamedArgument + namedArgumentIndex++];
+ } else {
+ compiledArguments[index] =
+ handleConstantForOptionalParameter(element);
+ }
+ index++;
+ });
+ }
+ return compiledArguments;
+ }
+
+ void setupInliningState(FunctionElement function,
+ List<HInstruction> compiledArguments);
+
+ void leaveInlinedMethod();
+
+ /**
+ * Try to inline [element] within the currect context of the builder. The
+ * insertion point is the state of the builder.
+ */
+ bool tryInlineMethod(Element element,
+ Selector selector,
+ List<HInstruction> providedArguments,
+ N currentNode) {
+ backend.registerStaticUse(element, compiler.enqueuer.codegen);
+
+ // Ensure that [element] is an implementation element.
+ element = element.implementation;
+ FunctionElement function = element;
+ bool hasIr = compiler.irBuilder.hasIr(function);
+
+ bool insideLoop = loopNesting > 0 || graph.calledInLoop;
+
+ // Bail out early if the inlining decision is in the cache and we can't
+ // inline (no need to check the hard constraints).
+ bool cachedCanBeInlined =
+ backend.inlineCache.canInline(function, insideLoop: insideLoop);
+ if (cachedCanBeInlined == false) return false;
+
+ bool meetsHardConstraints() {
+ // We cannot inline a method from a deferred library into a method
+ // which isn't deferred.
+ // TODO(ahe): But we should still inline into the same
+ // connected-component of the deferred library.
+ if (compiler.deferredLoadTask.isDeferred(element)) return false;
+ if (compiler.disableInlining) return false;
+
+ assert(selector != null
+ || Elements.isStaticOrTopLevel(element)
+ || element.isGenerativeConstructorBody());
+ if (selector != null && !selector.applies(function, compiler)) {
+ return false;
+ }
+
+ // Don't inline operator== methods if the parameter can be null.
+ if (element.name == '==') {
+ if (element.getEnclosingClass() != compiler.objectClass
+ && providedArguments[1].canBeNull()) {
+ return false;
+ }
+ }
+
+ // Generative constructors of native classes should not be called directly
+ // and have an extra argument that causes problems with inlining.
+ if (element.isGenerativeConstructor()
+ && Elements.isNativeOrExtendsNative(element.getEnclosingClass())) {
+ return false;
+ }
+
+ // A generative constructor body is not seen by global analysis,
+ // so we should not query for its type.
+ if (!element.isGenerativeConstructorBody()) {
+ // Don't inline if the return type was inferred to be non-null empty.
+ // This means that the function always throws an exception.
+ TypeMask returnType =
+ compiler.typesTask.getGuaranteedReturnTypeOfElement(element);
+ if (returnType != null
+ && returnType.isEmpty
+ && !returnType.isNullable) {
+ isReachable = false;
+ return false;
+ }
+ }
+
+ return true;
+ }
+
+ bool heuristicSayGoodToGo() {
+ // Don't inline recursivly
+ if (inliningStack.any((entry) => entry.function == function)) {
+ return false;
+ }
+
+ if (element.isSynthesized) return true;
+
+ if (cachedCanBeInlined == true) return cachedCanBeInlined;
+
+ if (inThrowExpression) return false;
+
+ int numParameters = function.functionSignature.parameterCount;
+ int maxInliningNodes;
+ bool useMaxInliningNodes = true;
+ if (insideLoop) {
+ maxInliningNodes = InlineWeeder.INLINING_NODES_INSIDE_LOOP +
+ InlineWeeder.INLINING_NODES_INSIDE_LOOP_ARG_FACTOR * numParameters;
+ } else {
+ maxInliningNodes = InlineWeeder.INLINING_NODES_OUTSIDE_LOOP +
+ InlineWeeder.INLINING_NODES_OUTSIDE_LOOP_ARG_FACTOR * numParameters;
+ }
+
+ // If a method is called only once, and all the methods in the
+ // inlining stack are called only once as well, we know we will
+ // save on output size by inlining this method.
+ TypesInferrer inferrer = compiler.typesTask.typesInferrer;
+ if (inferrer.isCalledOnce(element)
+ && (inliningStack.every(
+ (entry) => inferrer.isCalledOnce(entry.function)))) {
+ useMaxInliningNodes = false;
+ }
+ bool canInline;
+ if (hasIr) {
+ IrFunction irFunction = compiler.irBuilder.getIr(function);
+ canInline = IrInlineWeeder.canBeInlined(
+ irFunction, maxInliningNodes, useMaxInliningNodes);
+ } else {
+ FunctionExpression functionNode = function.parseNode(compiler);
+ canInline = InlineWeeder.canBeInlined(
+ functionNode, maxInliningNodes, useMaxInliningNodes);
+ }
+ if (canInline) {
+ backend.inlineCache.markAsInlinable(element, insideLoop: insideLoop);
+ } else {
+ backend.inlineCache.markAsNonInlinable(element, insideLoop: insideLoop);
+ }
+ return canInline;
+ }
+
+ void doInlining() {
+ // Add an explicit null check on the receiver before doing the
+ // inlining. We use [element] to get the same name in the
+ // NoSuchMethodError message as if we had called it.
+ if (element.isInstanceMember()
+ && !element.isGenerativeConstructorBody()
+ && (selector.mask == null || selector.mask.isNullable)) {
+ addWithPosition(
+ new HFieldGet(null, providedArguments[0], backend.dynamicType,
+ isAssignable: false),
+ currentNode);
+ }
+ enterInlinedMethod(function, selector, providedArguments, currentNode);
+ inlinedFrom(function, () {
+ potentiallyCheckInlinedParameterTypes(element);
+ doInline(function);
+ });
+ leaveInlinedMethod();
+ }
+
+ if (meetsHardConstraints() && heuristicSayGoodToGo()) {
+ doInlining();
+ return true;
+ }
+
+ return false;
+ }
+
+ void doInline(Element element);
+
+ inlinedFrom(Element element, f()) {
+ assert(element is FunctionElement || element is VariableElement);
+ return compiler.withCurrentElement(element, () {
+ // The [sourceElementStack] contains declaration elements.
+ sourceElementStack.add(element.declaration);
+ var result = f();
+ sourceElementStack.removeLast();
+ return result;
+ });
+ }
+
+ HInstruction handleConstantForOptionalParameter(Element parameter) {
+ Constant constant =
+ compiler.constantHandler.getConstantForVariable(parameter);
+ assert(invariant(parameter, constant != null,
+ message: 'No constant computed for $parameter'));
+ return graph.addConstant(constant, compiler);
+ }
+
+ /**
+ * In checked mode, generate type tests for the parameters of the inlined
+ * function.
+ */
+ void potentiallyCheckInlinedParameterTypes(FunctionElement function);
+
+ /**
+ * Some dynamic invocations are known to not use default arguments.
+ */
+ bool providedArgumentsKnownToBeComplete(N currentNode);
}
-class SsaBuilder extends ResolvedVisitor with SsaGraphBuilderMixin {
+/**
+ * This class defines the abstract properties of [SsaGraphBuilderMixin] as
+ * fields. It is shared between the [SsaBuilder] and the [SsaFromIrBuilder].
+ */
+abstract class SsaGraphBuilderFields<N> implements SsaGraphBuilderMixin<N> {
+ final HGraph graph = new HGraph();
+
+ HBasicBlock _current;
+
+ HBasicBlock get current => _current;
+
+ void set current(c) {
+ isReachable = c != null;
+ _current = c;
+ }
+
+ HBasicBlock lastOpenedBlock;
+
+ bool isReachable = true;
+
+ bool inThrowExpression = false;
+
+ int loopNesting = 0;
+
+ final List<InliningState> inliningStack = <InliningState>[];
+
+ final List<Element> sourceElementStack = <Element>[];
+}
+
+class SsaBuilder extends ResolvedVisitor
+ with SsaGraphBuilderMixin<Node>, SsaGraphBuilderFields<Node> {
final SsaBuilderTask builder;
final JavaScriptBackend backend;
final CodegenWorkItem work;
@@ -992,16 +1367,8 @@
// We build the Ssa graph by simulating a stack machine.
List<HInstruction> stack;
- /**
- * True if we are visiting the expression of a throw expression.
- */
- bool inThrowExpression = false;
-
- final List<Element> sourceElementStack;
-
- Element get currentElement => sourceElementStack.last.declaration;
Element get currentNonClosureClass {
- ClassElement cls = currentElement.getEnclosingClass();
+ ClassElement cls = sourceElement.getEnclosingClass();
if (cls != null && cls.isClosure()) {
var closureClass = cls;
return closureClass.methodElement.getEnclosingClass();
@@ -1036,20 +1403,16 @@
activationVariables = new Map<Element, HLocalValue>(),
jumpTargets = new Map<TargetElement, JumpHandler>(),
parameters = new Map<Element, HInstruction>(),
- sourceElementStack = <Element>[work.element],
- inliningStack = <InliningState>[],
rti = builder.backend.rti,
super(work.resolutionTree, builder.compiler) {
localsHandler = new LocalsHandler(this);
+ sourceElementStack.add(work.element);
}
- List<InliningState> inliningStack;
-
Element returnElement;
DartType returnType;
bool inTryStatement = false;
- int loopNesting = 0;
Constant getConstantForNode(Node node) {
ConstantHandler handler = compiler.constantHandler;
@@ -1219,65 +1582,24 @@
return result;
}
- /**
- * Documentation wanted -- johnniwinther
- *
- * Invariant: [function] must be an implementation element.
- */
- InliningState enterInlinedMethod(FunctionElement function,
- Selector selector,
- List<HInstruction> providedArguments,
- Node currentNode) {
- assert(invariant(function, function.isImplementation));
-
- List<HInstruction> compiledArguments;
- bool isInstanceMember = function.isInstanceMember();
-
- if (currentNode == null
- || currentNode.asForIn() != null
- || !isInstanceMember
- || function.isGenerativeConstructorBody()) {
- // For these cases, the provided arguments must match the
- // expected parameters.
- assert(providedArguments != null);
- compiledArguments = providedArguments;
- } else {
- Send send = currentNode.asSend();
- assert(providedArguments != null);
- compiledArguments = new List<HInstruction>();
- compiledArguments.add(providedArguments[0]);
- // [providedArguments] contains the arguments given in our
- // internal order (see [addDynamicSendArgumentsToList]). So we
- // call [Selector.addArgumentsToList] only for getting the
- // default values of the optional parameters.
- bool succeeded = selector.addArgumentsToList(
- send.isPropertyAccess ? null : send.arguments,
- compiledArguments,
- function,
- (node) => null,
- handleConstantForOptionalParameter,
- compiler);
- int argumentIndex = 1; // Skip receiver.
- // [compiledArguments] now only contains the default values of
- // the optional parameters that were not provided by
- // [argumentsNodes]. So we iterate over [providedArguments] to fill
- // in all the arguments.
- for (int i = 1; i < compiledArguments.length; i++) {
- if (compiledArguments[i] == null) {
- compiledArguments[i] = providedArguments[argumentIndex++];
- }
- }
- // The caller of [enterInlinedMethod] has ensured the selector
- // matches the element.
- assert(succeeded);
+ addInlinedInstantiation(DartType type) {
+ if (type != null) {
+ currentInlinedInstantiations.add(type);
}
+ }
- // Create the inlining state after evaluating the arguments, that
- // may have an impact on the state of the current method.
+ removeInlinedInstantiation(DartType type) {
+ if (type != null) {
+ currentInlinedInstantiations.removeLast();
+ }
+ }
+
+ void setupInliningState(FunctionElement function,
+ List<HInstruction> compiledArguments) {
InliningState state = new InliningState(
function, returnElement, returnType, elements, stack,
localsHandler, inTryStatement);
- inTryStatement = false;
+ inTryStatement = false; // TODO(lry): why? Document.
LocalsHandler newLocalsHandler = new LocalsHandler(this);
if (compiler.irBuilder.hasIr(function)) {
// TODO(lry): handle ir functions with nested closure definitions.
@@ -1288,8 +1610,9 @@
compiler.closureToClassMapper.computeClosureToClassMapping(
function, function.parseNode(compiler), elements);
}
+
int argumentIndex = 0;
- if (isInstanceMember) {
+ if (function.isInstanceMember()) {
newLocalsHandler.updateLocal(newLocalsHandler.closureData.thisElement,
compiledArguments[argumentIndex++]);
}
@@ -1321,12 +1644,10 @@
stack = <HInstruction>[];
inliningStack.add(state);
localsHandler = newLocalsHandler;
- return state;
}
- void leaveInlinedMethod(InliningState state) {
- InliningState poppedState = inliningStack.removeLast();
- assert(state == poppedState);
+ void leaveInlinedMethod() {
+ InliningState state = inliningStack.removeLast();
elements = state.oldElements;
stack.add(localsHandler.readLocal(returnElement));
returnElement = state.oldReturnElement;
@@ -1338,196 +1659,40 @@
inTryStatement = state.inTryStatement;
}
- /**
- * Try to inline [element] within the currect context of the
- * builder. The insertion point is the state of the builder.
- */
- bool tryInlineMethod(Element element,
- Selector selector,
- List<HInstruction> providedArguments,
- Node currentNode,
- [DartType instantiatedType]) {
- backend.registerStaticUse(element, compiler.enqueuer.codegen);
-
- // Ensure that [element] is an implementation element.
- element = element.implementation;
- FunctionElement function = element;
-
- bool insideLoop = loopNesting > 0 || graph.calledInLoop;
-
- // Bail out early if the inlining decision is in the cache and we can't
- // inline (no need to check the hard constraints).
- bool cachedCanBeInlined =
- backend.inlineCache.canInline(function, insideLoop: insideLoop);
- if (cachedCanBeInlined == false) return false;
-
- bool meetsHardConstraints() {
- // We cannot inline a method from a deferred library into a method
- // which isn't deferred.
- // TODO(ahe): But we should still inline into the same
- // connected-component of the deferred library.
- if (compiler.deferredLoadTask.isDeferred(element)) return false;
- if (compiler.disableInlining) return false;
-
- assert(selector != null
- || Elements.isStaticOrTopLevel(element)
- || element.isGenerativeConstructorBody());
- if (selector != null && !selector.applies(function, compiler)) {
- return false;
- }
-
- // Don't inline operator== methods if the parameter can be null.
- if (element.name == '==') {
- if (element.getEnclosingClass() != compiler.objectClass
- && providedArguments[1].canBeNull()) {
- return false;
- }
- }
-
- // Generative constructors of native classes should not be called directly
- // and have an extra argument that causes problems with inlining.
- if (element.isGenerativeConstructor()
- && Elements.isNativeOrExtendsNative(element.getEnclosingClass())) {
- return false;
- }
-
- // A generative constructor body is not seen by global analysis,
- // so we should not query for its type.
- if (!element.isGenerativeConstructorBody()) {
- // Don't inline if the return type was inferred to be non-null empty.
- // This means that the function always throws an exception.
- TypeMask returnType =
- compiler.typesTask.getGuaranteedReturnTypeOfElement(element);
- if (returnType != null
- && returnType.isEmpty
- && !returnType.isNullable) {
- isReachable = false;
- return false;
- }
- }
-
- return true;
- }
-
- bool heuristicSayGoodToGo(bool canBeInlined(int maxNodes, bool useMax)) {
- // Don't inline recursivly
- if (inliningStack.any((entry) => entry.function == function)) {
- return false;
- }
-
- if (element.isSynthesized) return true;
-
- if (cachedCanBeInlined == true) return cachedCanBeInlined;
-
- if (inThrowExpression) return false;
-
- int numParameters = function.functionSignature.parameterCount;
- int maxInliningNodes;
- bool useMaxInliningNodes = true;
- if (insideLoop) {
- maxInliningNodes = InlineWeeder.INLINING_NODES_INSIDE_LOOP +
- InlineWeeder.INLINING_NODES_INSIDE_LOOP_ARG_FACTOR * numParameters;
- } else {
- maxInliningNodes = InlineWeeder.INLINING_NODES_OUTSIDE_LOOP +
- InlineWeeder.INLINING_NODES_OUTSIDE_LOOP_ARG_FACTOR * numParameters;
- }
-
- // If a method is called only once, and all the methods in the
- // inlining stack are called only once as well, we know we will
- // save on output size by inlining this method.
- TypesInferrer inferrer = compiler.typesTask.typesInferrer;
- if (inferrer.isCalledOnce(element)
- && (inliningStack.every(
- (entry) => inferrer.isCalledOnce(entry.function)))) {
- useMaxInliningNodes = false;
- }
- bool canInline = canBeInlined(maxInliningNodes, useMaxInliningNodes);
- if (canInline) {
- backend.inlineCache.markAsInlinable(element, insideLoop: insideLoop);
- } else {
- backend.inlineCache.markAsNonInlinable(element, insideLoop: insideLoop);
- }
- return canInline;
- }
-
- void doInlining(void visitBody()) {
- // Add an explicit null check on the receiver before doing the
- // inlining. We use [element] to get the same name in the
- // NoSuchMethodError message as if we had called it.
- if (element.isInstanceMember()
- && !element.isGenerativeConstructorBody()
- && (selector.mask == null || selector.mask.isNullable)) {
- addWithPosition(
- new HFieldGet(null, providedArguments[0], backend.dynamicType,
- isAssignable: false),
- currentNode);
- }
- InliningState state = enterInlinedMethod(
- function, selector, providedArguments, currentNode);
-
- inlinedFrom(element, () {
- FunctionElement function = element;
- FunctionSignature signature = function.computeSignature(compiler);
- signature.orderedForEachParameter((Element parameter) {
- HInstruction argument = localsHandler.readLocal(parameter);
- potentiallyCheckType(argument, parameter.computeType(compiler));
- });
- addInlinedInstantiation(instantiatedType);
- if (element.isGenerativeConstructor()) {
- buildFactory(element);
- } else {
- visitBody();
- }
- removeInlinedInstantiation(instantiatedType);
- });
- leaveInlinedMethod(state);
- }
-
- if (meetsHardConstraints()) {
- if (compiler.irBuilder.hasIr(function)) {
- IrFunction irFunction = compiler.irBuilder.getIr(function);
- bool canInline(int n, bool b) {
- return IrInlineWeeder.canBeInlined(irFunction, n, b);
- }
- if (heuristicSayGoodToGo(canInline)) {
- SsaFromIrInliner irInliner = new SsaFromIrInliner(this);
- doInlining(() => irInliner.visitAll(irFunction.statements));
- return true;
- }
- } else {
- FunctionExpression functionNode = function.parseNode(compiler);
- bool canInline(int n, bool b) {
- return InlineWeeder.canBeInlined(functionNode, n, b);
- }
- if (heuristicSayGoodToGo(canInline)) {
- doInlining(() => functionNode.body.accept(this));
- return true;
- }
- }
- }
-
- return false;
- }
-
- addInlinedInstantiation(DartType type) {
- if (type != null) {
- currentInlinedInstantiations.add(type);
+ void doInline(FunctionElement function) {
+ if (function.isGenerativeConstructor()) {
+ // TODO(lry): inline constructors in IR.
+ assert(!compiler.irBuilder.hasIr(function));
+ buildFactory(function);
+ } else if (compiler.irBuilder.hasIr(function)) {
+ IrFunction irFunction = compiler.irBuilder.getIr(function);
+ SsaFromIrInliner irInliner = new SsaFromIrInliner(this);
+ irInliner.visitAll(irFunction.statements);
+ // The [IrInliner] does not push the final instruction on the [stack].
+ // In a way, this violates the invariant of the [SsaBuilder], however
+ // it works just fine because [leaveInlinedMethod] will restore the
+ // stack of the callee and push the value of the [returnElement].
+ } else {
+ FunctionExpression functionNode = function.parseNode(compiler);
+ functionNode.body.accept(this);
}
}
- removeInlinedInstantiation(DartType type) {
- if (type != null) {
- currentInlinedInstantiations.removeLast();
- }
+ bool providedArgumentsKnownToBeComplete(Node currentNode) {
+ /* When inlining the iterator methods generated for a [:for-in:] loop, the
+ * [currentNode] is the [ForIn] tree. The compiler-generated iterator
+ * invocations are known to have fully specified argument lists, no default
+ * arguments are used. See invocations of [pushInvokeDynamic] in
+ * [visitForIn].
+ */
+ return currentNode.asForIn() != null;
}
- inlinedFrom(Element element, f()) {
- assert(element is FunctionElement || element is VariableElement);
- return compiler.withCurrentElement(element, () {
- sourceElementStack.add(element);
- var result = f();
- sourceElementStack.removeLast();
- return result;
+ void potentiallyCheckInlinedParameterTypes(FunctionElement function) {
+ FunctionSignature signature = function.computeSignature(compiler);
+ signature.orderedForEachParameter((Element parameter) {
+ HInstruction argument = localsHandler.readLocal(parameter);
+ potentiallyCheckType(argument, parameter.computeType(compiler));
});
}
@@ -2073,27 +2238,16 @@
return new HTypeConversion.withTypeRepresentation(type, kind, subtype,
original, typeVariable);
} else if (type.kind == TypeKind.FUNCTION) {
- if (backend.rti.isSimpleFunctionType(type)) {
- return original.convertType(compiler, type, kind);
- }
- TypeMask subtype = original.instructionType;
- if (type.containsTypeVariables) {
- bool contextIsTypeArguments = false;
- HInstruction context;
- if (!currentElement.enclosingElement.isClosure()
- && currentElement.isInstanceMember()) {
- context = localsHandler.readThis();
- } else {
- ClassElement contextClass = Types.getClassContext(type);
- context = buildTypeVariableList(contextClass);
- add(context);
- contextIsTypeArguments = true;
- }
- return new HTypeConversion.withContext(type, kind, subtype,
- original, context, contextIsTypeArguments: contextIsTypeArguments);
- } else {
- return new HTypeConversion(type, kind, subtype, original);
- }
+ String name = kind == HTypeConversion.CAST_TYPE_CHECK
+ ? '_asCheck' : '_assertCheck';
+
+ List arguments = [buildFunctionType(type), original];
+ pushInvokeDynamic(
+ null,
+ new Selector.call(name, compiler.jsHelperLibrary, 1),
+ arguments);
+
+ return new HTypeConversion(type, kind, original.instructionType, pop());
} else {
return original.convertType(compiler, type, kind);
}
@@ -2130,10 +2284,6 @@
return graph;
}
- void addWithPosition(HInstruction instruction, Node node) {
- add(attachPosition(instruction, node));
- }
-
void push(HInstruction instruction) {
add(instruction);
stack.add(instruction);
@@ -2165,7 +2315,9 @@
}
HInstruction attachPosition(HInstruction target, Node node) {
- target.sourcePosition = sourceFileLocationForBeginToken(node);
+ if (node != null) {
+ target.sourcePosition = sourceFileLocationForBeginToken(node);
+ }
return target;
}
@@ -2176,22 +2328,10 @@
sourceFileLocationForToken(node, node.getEndToken());
SourceFileLocation sourceFileLocationForToken(Node node, Token token) {
- Element element = sourceElementStack.last;
- // TODO(johnniwinther): remove the 'element.patch' hack.
- if (element is FunctionElement) {
- FunctionElement functionElement = element;
- if (functionElement.patch != null) element = functionElement.patch;
- }
- Script script = element.getCompilationUnit().script;
- SourceFile sourceFile = script.file;
+ SourceFile sourceFile = currentSourceFile();
SourceFileLocation location =
new TokenSourceFileLocation(sourceFile, token);
- if (!location.isValid()) {
- throw MessageKind.INVALID_SOURCE_FILE_LOCATION.message(
- {'offset': token.charOffset,
- 'fileName': sourceFile.filename,
- 'length': sourceFile.length});
- }
+ checkValidSourceFileLocation(location, sourceFile, token.charOffset);
return location;
}
@@ -3058,61 +3198,14 @@
push(instruction);
}
- HLiteralList buildTypeVariableList(ClassElement contextClass) {
- List<HInstruction> inputs = <HInstruction>[];
- for (Link<DartType> link = contextClass.typeVariables;
- !link.isEmpty;
- link = link.tail) {
- inputs.add(addTypeVariableReference(link.head));
- }
- return buildLiteralList(inputs);
- }
-
HInstruction buildIsNode(Node node, DartType type, HInstruction expression) {
type = type.unalias(compiler);
if (type.kind == TypeKind.FUNCTION) {
- if (backend.rti.isSimpleFunctionType(type)) {
- // TODO(johnniwinther): Avoid interceptor if unneeded.
- return new HIs.raw(
- type, expression, invokeInterceptor(expression), backend.boolType);
- }
- Element checkFunctionSubtype = backend.getCheckFunctionSubtype();
-
- HInstruction signatureName = graph.addConstantString(
- new DartString.literal(backend.namer.getFunctionTypeName(type)),
- compiler);
-
- HInstruction contextName;
- HInstruction context;
- HInstruction typeArguments;
- if (type.containsTypeVariables) {
- ClassElement contextClass = Types.getClassContext(type);
- contextName = graph.addConstantString(
- new DartString.literal(backend.namer.getNameOfClass(contextClass)),
- compiler);
- if (!currentElement.enclosingElement.isClosure()
- && currentElement.isInstanceMember()) {
- context = localsHandler.readThis();
- typeArguments = graph.addConstantNull(compiler);
- } else {
- context = graph.addConstantNull(compiler);
- typeArguments = buildTypeVariableList(contextClass);
- add(typeArguments);
- }
- } else {
- contextName = graph.addConstantNull(compiler);
- context = graph.addConstantNull(compiler);
- typeArguments = graph.addConstantNull(compiler);
- }
-
- List<HInstruction> inputs = <HInstruction>[expression,
- signatureName,
- contextName,
- context,
- typeArguments];
- pushInvokeStatic(node, checkFunctionSubtype, inputs, backend.boolType);
- HInstruction call = pop();
- return new HIs.compound(type, expression, call, backend.boolType);
+ List arguments = [buildFunctionType(type), expression];
+ pushInvokeDynamic(
+ node, new Selector.call('_isTest', compiler.jsHelperLibrary, 1),
+ arguments);
+ return new HIs.compound(type, expression, pop(), backend.boolType);
} else if (type.kind == TypeKind.TYPE_VARIABLE) {
HInstruction runtimeType = addTypeVariableReference(type);
Element helper = backend.getCheckSubtypeOfRuntimeType();
@@ -3154,6 +3247,11 @@
}
}
+ HInstruction buildFunctionType(FunctionType type) {
+ type.accept(new TypeBuilder(), this);
+ return pop();
+ }
+
void addDynamicSendArgumentsToList(Send node, List<HInstruction> list) {
Selector selector = elements.getSelector(node);
if (selector.namedArgumentCount == 0) {
@@ -3189,14 +3287,6 @@
}
}
- HInstruction handleConstantForOptionalParameter(Element parameter) {
- Constant constant =
- compiler.constantHandler.getConstantForVariable(parameter);
- assert(invariant(parameter, constant != null,
- message: 'No constant computed for $parameter'));
- return graph.addConstant(constant, compiler);
- }
-
/**
* Returns true if the arguments were compatible with the function signature.
*
@@ -3598,7 +3688,7 @@
visitSend(Send node) {
Element element = elements[node];
- if (element != null && identical(element, currentElement)) {
+ if (element != null && identical(element, sourceElement)) {
graph.isRecursiveMethod = true;
}
super.visitSend(node);
@@ -3659,7 +3749,7 @@
*/
HInstruction readTypeVariable(ClassElement cls,
TypeVariableElement variable) {
- assert(currentElement.isInstanceMember());
+ assert(sourceElement.isInstanceMember());
HInstruction target = localsHandler.readThis();
HConstant index = graph.addConstantInt(
@@ -3697,7 +3787,7 @@
* Helper to create an instruction that gets the value of a type variable.
*/
HInstruction addTypeVariableReference(TypeVariableType type) {
- Element member = currentElement;
+ Element member = sourceElement;
bool isClosure = member.enclosingElement.isClosure();
if (isClosure) {
ClosureClassElement closureClass = member.enclosingElement;
@@ -3778,6 +3868,8 @@
type.typeArguments.forEach((DartType argument) {
inputs.add(analyzeTypeArgument(argument));
});
+ // TODO(15489): Register at codegen.
+ compiler.enqueuer.codegen.registerInstantiatedType(type, elements);
return callSetRuntimeTypeInfo(type.element, inputs, newObject);
}
@@ -3823,13 +3915,13 @@
originalElement, send, compiler)) {
isFixedList = true;
TypeMask inferred =
- TypeMaskFactory.inferredForNode(currentElement, send, compiler);
+ TypeMaskFactory.inferredForNode(sourceElement, send, compiler);
return inferred.containsAll(compiler)
? backend.fixedArrayType
: inferred;
} else if (isGrowableListConstructorCall) {
TypeMask inferred =
- TypeMaskFactory.inferredForNode(currentElement, send, compiler);
+ TypeMaskFactory.inferredForNode(sourceElement, send, compiler);
return inferred.containsAll(compiler)
? backend.extendableArrayType
: inferred;
@@ -3837,7 +3929,7 @@
originalElement, compiler)) {
isFixedList = true;
TypeMask inferred =
- TypeMaskFactory.inferredForNode(currentElement, send, compiler);
+ TypeMaskFactory.inferredForNode(sourceElement, send, compiler);
ClassElement cls = element.getEnclosingClass();
return inferred.containsAll(compiler)
? new TypeMask.nonNullExact(cls.thisType.element)
@@ -3929,10 +4021,8 @@
code, backend.nullType, [stack.last], canThrow: true));
}
} else if (isGrowableListConstructorCall) {
- js.Expression code = js.js.parseForeignJS('Array()');
- var behavior = new native.NativeBehavior();
- behavior.typesReturned.add(expectedType);
- push(new HForeign(code, elementType, inputs, nativeBehavior: behavior));
+ push(buildLiteralList(<HInstruction>[]));
+ stack.last.instructionType = elementType;
} else {
ClassElement cls = constructor.getEnclosingClass();
if (cls.isAbstract && constructor.isGenerativeConstructor()) {
@@ -4054,12 +4144,14 @@
return;
}
if (element.isErroneous()) {
+ // An erroneous element indicates that the funciton could not be resolved
+ // (a warning has been issued).
generateThrowNoSuchMethod(node,
getTargetName(element),
argumentNodes: node.arguments);
return;
}
- compiler.ensure(!element.isGenerativeConstructor());
+ invariant(element, !element.isGenerativeConstructor());
if (element.isFunction()) {
var inputs = <HInstruction>[];
// TODO(5347): Try to avoid the need for calling [implementation] before
@@ -4636,7 +4728,7 @@
HInstruction value;
if (node.isRedirectingFactoryBody) {
FunctionElement element = elements[node.expression].implementation;
- FunctionElement function = currentElement;
+ FunctionElement function = sourceElement;
List<HInstruction> inputs = <HInstruction>[];
FunctionSignature calleeSignature = element.functionSignature;
FunctionSignature callerSignature = function.functionSignature;
@@ -4724,6 +4816,7 @@
for (DartType argument in type.typeArguments) {
arguments.add(analyzeTypeArgument(argument));
}
+ // TODO(15489): Register at codegen.
compiler.enqueuer.codegen.registerInstantiatedType(type, elements);
return callSetRuntimeTypeInfo(type.element, arguments, object);
}
@@ -4747,7 +4840,7 @@
}
TypeMask type =
- TypeMaskFactory.inferredForNode(currentElement, node, compiler);
+ TypeMaskFactory.inferredForNode(sourceElement, node, compiler);
if (!type.containsAll(compiler)) instruction.instructionType = type;
stack.add(instruction);
}
@@ -5360,7 +5453,7 @@
// TODO(kasperl): Bad smell. We shouldn't be constructing elements here.
// Note that the name of this element is irrelevant.
Element element = new VariableElementX.synthetic('exception',
- ElementKind.PARAMETER, currentElement);
+ ElementKind.PARAMETER, sourceElement);
exception = new HLocalValue(element, backend.nonNullType);
add(exception);
HInstruction oldRethrowableException = rethrowableException;
@@ -5954,3 +6047,96 @@
branch.blockInformation = conditionStartBlock.blockFlow;
}
}
+
+class TypeBuilder implements DartTypeVisitor<dynamic, SsaBuilder> {
+ void visitType(DartType type, _) {
+ throw 'Internal error $type';
+ }
+
+ void visitVoidType(VoidType type, SsaBuilder builder) {
+ ClassElement cls = builder.compiler.findHelper('VoidRuntimeType');
+ builder.push(new HVoidType(type, new TypeMask.exact(cls)));
+ }
+
+ void visitTypeVariableType(TypeVariableType type,
+ SsaBuilder builder) {
+ ClassElement cls = builder.compiler.findHelper('RuntimeType');
+ TypeMask instructionType = new TypeMask.subclass(cls);
+ if (!builder.sourceElement.enclosingElement.isClosure() &&
+ builder.sourceElement.isInstanceMember()) {
+ HInstruction receiver = builder.localsHandler.readThis();
+ builder.push(new HReadTypeVariable(type, receiver, instructionType));
+ } else {
+ builder.push(
+ new HReadTypeVariable.noReceiver(
+ type, builder.addTypeVariableReference(type), instructionType));
+ }
+ }
+
+ void visitFunctionType(FunctionType type, SsaBuilder builder) {
+ type.returnType.accept(this, builder);
+ HInstruction returnType = builder.pop();
+ List<HInstruction> inputs = <HInstruction>[returnType];
+
+ for (DartType parameter in type.parameterTypes) {
+ parameter.accept(this, builder);
+ inputs.add(builder.pop());
+ }
+
+ for (DartType parameter in type.optionalParameterTypes) {
+ parameter.accept(this, builder);
+ inputs.add(builder.pop());
+ }
+
+ Link<DartType> namedParameterTypes = type.namedParameterTypes;
+ for (String name in type.namedParameters) {
+ DartString dartString = new DartString.literal(name);
+ inputs.add(
+ builder.graph.addConstantString(dartString, builder.compiler));
+ namedParameterTypes.head.accept(this, builder);
+ inputs.add(builder.pop());
+ namedParameterTypes = namedParameterTypes.tail;
+ }
+
+ ClassElement cls = builder.compiler.findHelper('RuntimeFunctionType');
+ builder.push(new HFunctionType(inputs, type, new TypeMask.exact(cls)));
+ }
+
+ void visitMalformedType(MalformedType type, SsaBuilder builder) {
+ visitDynamicType(builder.compiler.types.dynamicType, builder);
+ }
+
+ void visitStatementType(StatementType type, SsaBuilder builder) {
+ throw 'not implemented visitStatementType($type)';
+ }
+
+ void visitGenericType(GenericType type, SsaBuilder builder) {
+ throw 'not implemented visitGenericType($type)';
+ }
+
+ void visitInterfaceType(InterfaceType type, SsaBuilder builder) {
+ List<HInstruction> inputs = <HInstruction>[];
+ for (DartType typeArgument in type.typeArguments) {
+ typeArgument.accept(this, builder);
+ inputs.add(builder.pop());
+ }
+ ClassElement cls;
+ if (type.typeArguments.isEmpty) {
+ cls = builder.compiler.findHelper('RuntimeTypePlain');
+ } else {
+ cls = builder.compiler.findHelper('RuntimeTypeGeneric');
+ }
+ builder.push(new HInterfaceType(inputs, type, new TypeMask.exact(cls)));
+ }
+
+ void visitTypedefType(TypedefType type, SsaBuilder builder) {
+ DartType unaliased = type.unalias(builder.compiler);
+ if (unaliased is TypedefType) throw 'unable to unalias $type';
+ unaliased.accept(this, builder);
+ }
+
+ void visitDynamicType(DynamicType type, SsaBuilder builder) {
+ ClassElement cls = builder.compiler.findHelper('DynamicRuntimeType');
+ builder.push(new HDynamicType(type, new TypeMask.exact(cls)));
+ }
+}
diff --git a/sdk/lib/_internal/compiler/implementation/ssa/codegen.dart b/sdk/lib/_internal/compiler/implementation/ssa/codegen.dart
index 50aabfc..4792747 100644
--- a/sdk/lib/_internal/compiler/implementation/ssa/codegen.dart
+++ b/sdk/lib/_internal/compiler/implementation/ssa/codegen.dart
@@ -1249,6 +1249,16 @@
visitShiftLeft(HShiftLeft node) => visitBitInvokeBinary(node, '<<');
visitShiftRight(HShiftRight node) => visitBitInvokeBinary(node, '>>>');
+ visitTruncatingDivide(HTruncatingDivide node) {
+ assert(node.left.isUInt31(compiler));
+ assert(node.right.isPositiveInteger(compiler));
+ use(node.left);
+ js.Expression jsLeft = pop();
+ use(node.right);
+ push(new js.Binary('/', jsLeft, pop()), node);
+ push(new js.Binary('|', pop(), new js.LiteralNumber("0")), node);
+ }
+
visitNegate(HNegate node) => visitInvokeUnary(node, '-');
visitLess(HLess node) => visitRelational(node, '<');
@@ -2524,7 +2534,6 @@
world.registerIsCheck(type, work.resolutionTree);
CheckedModeHelper helper;
- FunctionElement helperElement;
if (node.isBooleanConversionCheck) {
helper =
const CheckedModeHelper('boolConversionCheck');
@@ -2533,13 +2542,121 @@
backend.getCheckedModeHelper(type, typeCast: node.isCastTypeCheck);
}
- push(helper.generateCall(this, node));
+ if (helper == null) {
+ assert(type.kind == TypeKind.FUNCTION);
+ use(node.inputs[0]);
+ } else {
+ push(helper.generateCall(this, node));
+ }
}
void visitTypeKnown(HTypeKnown node) {
// [HTypeKnown] instructions are removed before generating code.
assert(false);
}
+
+ void visitFunctionType(HFunctionType node) {
+ FunctionType type = node.dartType;
+ int inputCount = 0;
+ use(node.inputs[inputCount++]);
+ js.Expression returnType = pop();
+
+ List<js.Expression> parameterTypes = <js.Expression>[];
+ for (var _ in type.parameterTypes) {
+ use(node.inputs[inputCount++]);
+ parameterTypes.add(pop());
+ }
+
+ List<js.Expression> optionalParameterTypes = <js.Expression>[];
+ for (var _ in type.optionalParameterTypes) {
+ use(node.inputs[inputCount++]);
+ optionalParameterTypes.add(pop());
+ }
+
+ List<js.Property> namedParameters = <js.Property>[];
+ for (var _ in type.namedParameters) {
+ use(node.inputs[inputCount++]);
+ js.Expression name = pop();
+ use(node.inputs[inputCount++]);
+ namedParameters.add(new js.Property(name, pop()));
+ }
+
+ if (namedParameters.isEmpty) {
+ var arguments = [returnType];
+ if (!parameterTypes.isEmpty || !optionalParameterTypes.isEmpty) {
+ arguments.add(new js.ArrayInitializer.from(parameterTypes));
+ }
+ if (!optionalParameterTypes.isEmpty) {
+ arguments.add(new js.ArrayInitializer.from(optionalParameterTypes));
+ }
+ push(accessHelper('buildFunctionType')(arguments));
+ } else {
+ var arguments = [
+ returnType,
+ new js.ArrayInitializer.from(parameterTypes),
+ new js.ObjectInitializer(namedParameters)];
+ push(accessHelper('buildNamedFunctionType')(arguments));
+ }
+ }
+
+ void visitReadTypeVariable(HReadTypeVariable node) {
+ TypeVariableElement element = node.dartType.element;
+ Element helperElement = compiler.findHelper('convertRtiToRuntimeType');
+ world.registerStaticUse(helperElement);
+
+ use(node.inputs[0]);
+ if (node.hasReceiver) {
+ if (backend.isInterceptorClass(element.getEnclosingClass())) {
+ int index = RuntimeTypes.getTypeVariableIndex(element);
+ js.Expression receiver = pop();
+ js.Expression helper = backend.namer.elementAccess(helperElement);
+ push(helper(js.js(r'#.$builtinTypeInfo && #.$builtinTypeInfo[#]',
+ [receiver, receiver, js.js.toExpression(index)])));
+ } else {
+ backend.emitter.registerReadTypeVariable(element);
+ push(
+ js.js('#.${backend.namer.readTypeVariableName(element)}()', pop()));
+ }
+ } else {
+ push(
+ backend.namer.elementAccess(
+ compiler.findHelper('convertRtiToRuntimeType'))(pop()));
+ }
+ }
+
+ void visitInterfaceType(HInterfaceType node) {
+ List<js.Expression> typeArguments = <js.Expression>[];
+ for (HInstruction type in node.inputs) {
+ use(type);
+ typeArguments.add(pop());
+ }
+
+ ClassElement cls = node.dartType.element;
+ var arguments = [
+ backend.namer.elementAccess(backend.getImplementationClass(cls))];
+ if (!typeArguments.isEmpty) {
+ arguments.add(new js.ArrayInitializer.from(typeArguments));
+ }
+ push(accessHelper('buildInterfaceType')(arguments));
+ }
+
+ void visitVoidType(HVoidType node) {
+ push(accessHelper('getVoidRuntimeType')());
+ }
+
+ void visitDynamicType(HDynamicType node) {
+ push(accessHelper('getDynamicRuntimeType')());
+ }
+
+ js.PropertyAccess accessHelper(String name) {
+ Element helper = compiler.findHelper(name);
+ if (helper == null) {
+ // For mocked-up tests.
+ return js.js('(void 0).$name');
+ }
+ world.registerStaticUse(helper);
+ return backend.namer.elementAccess(helper);
+ }
}
String singleIdentityComparison(HInstruction left,
diff --git a/sdk/lib/_internal/compiler/implementation/ssa/from_ir_builder.dart b/sdk/lib/_internal/compiler/implementation/ssa/from_ir_builder.dart
index 4d97830..84b6a6c 100644
--- a/sdk/lib/_internal/compiler/implementation/ssa/from_ir_builder.dart
+++ b/sdk/lib/_internal/compiler/implementation/ssa/from_ir_builder.dart
@@ -5,14 +5,19 @@
part of ssa;
class SsaFromIrBuilderTask extends CompilerTask {
- SsaFromIrBuilderTask(Compiler compiler) : super(compiler);
+ final JavaScriptBackend backend;
+
+ SsaFromIrBuilderTask(JavaScriptBackend backend)
+ : this.backend = backend,
+ super(backend.compiler);
HGraph build(CodegenWorkItem work) {
return measure(() {
Element element = work.element.implementation;
return compiler.withCurrentElement(element, () {
HInstruction.idCounter = 0;
- SsaFromIrBuilder builder = new SsaFromIrBuilder(compiler, element);
+
+ SsaFromIrBuilder builder = new SsaFromIrBuilder(backend, work);
HGraph graph;
ElementKind kind = element.kind;
@@ -42,28 +47,26 @@
}
/**
- * This builder generates SSA nodes for elements that have an IR representation.
- * It mixes in [SsaGraphBuilderMixin] to share functionality with the
- * [SsaBuilder] that creates SSA nodes from trees.
+ * This class contains code that is shared between [SsaFromIrBuilder] and
+ * [SsaFromIrInliner].
*/
-class SsaFromIrBuilder
- extends IrNodesVisitor<HInstruction> with SsaGraphBuilderMixin {
- final Compiler compiler;
-
- final Element sourceElement;
-
- SsaFromIrBuilder(this.compiler, this.sourceElement);
-
+abstract class SsaFromIrMixin implements SsaGraphBuilderMixin<IrNode> {
/**
- * Maps IR nodes ot the generated [HInstruction]. Because the IR is itself
+ * Maps IR expressions to the generated [HInstruction]. Because the IR is
* in an SSA form, the arguments of an [IrNode] have already been visited
* prior to the node. This map is used to obtain the corresponding generated
* SSA node.
*/
- final Map<IrNode, HInstruction> generated = new Map<IrNode, HInstruction>();
+ final Map<IrExpression, HInstruction> emitted =
+ new Map<IrExpression, HInstruction>();
- HInstruction recordGenerated(IrNode irNode, HInstruction ssaNode) {
- return generated[irNode] = ssaNode;
+ Compiler get compiler;
+
+ void emitReturn(HInstruction value, IrReturn node);
+
+ HInstruction addExpression(IrExpression irNode, HInstruction ssaNode) {
+ current.add(emitted[irNode] = ssaNode);
+ return ssaNode;
}
HInstruction attachPosition(HInstruction target, IrNode node) {
@@ -72,57 +75,122 @@
}
SourceFileLocation sourceFileLocation(IrNode node) {
- Element element = sourceElement;
- // TODO(johnniwinther): remove the 'element.patch' hack.
- if (element is FunctionElement) {
- FunctionElement functionElement = element;
- if (functionElement.patch != null) element = functionElement.patch;
- }
- Script script = element.getCompilationUnit().script;
- SourceFile sourceFile = script.file;
+ SourceFile sourceFile = currentSourceFile();
SourceFileLocation location =
new OffsetSourceFileLocation(sourceFile, node.offset, node.sourceName);
- if (!location.isValid()) {
- throw MessageKind.INVALID_SOURCE_FILE_LOCATION.message(
- {'offset': node.offset,
- 'fileName': sourceFile.filename,
- 'length': sourceFile.length});
- }
+ checkValidSourceFileLocation(location, sourceFile, node.offset);
return location;
}
+ void potentiallyCheckInlinedParameterTypes(FunctionElement function) {
+ // TODO(lry): in checked mode, generate code for parameter type checks.
+ assert(!compiler.enableTypeAssertions);
+ }
+
+ bool providedArgumentsKnownToBeComplete(IrNode currentNode) {
+ // See comment in [SsaBuilder.providedArgumentsKnownToBeComplete].
+ return false;
+ }
+
+ List<HInstruction> toInstructionList(List<IrNode> nodes) {
+ return nodes.map((e) => emitted[e]).toList(growable: false);
+ }
+
+ HInstruction createInvokeStatic(IrNode node,
+ Element element,
+ List<HInstruction> arguments,
+ [TypeMask type]) {
+// TODO(lry): enable inlining when building from IR.
+// if (tryInlineMethod(element, null, arguments, node)) {
+// return emitted[node];
+// }
+ if (type == null) {
+ type = TypeMaskFactory.inferredReturnTypeForElement(element, compiler);
+ }
+ bool targetCanThrow = !compiler.world.getCannotThrow(element);
+ HInvokeStatic instruction = new HInvokeStatic(
+ element.declaration, arguments, type, targetCanThrow: targetCanThrow);
+ instruction.sideEffects = compiler.world.getSideEffectsOfElement(element);
+ return attachPosition(instruction, node);
+ }
+
+ void visitIrConstant(IrConstant node) {
+ emitted[node] = graph.addConstant(node.value, compiler);
+ }
+
+ void visitIrInvokeStatic(IrInvokeStatic node) {
+ Element element = node.target;
+ assert(element.isFunction());
+ List<HInstruction> arguments = toInstructionList(node.arguments);
+ HInstruction instruction = createInvokeStatic(node, element, arguments);
+ addExpression(node, instruction);
+ }
+
+ void visitIrNode(IrNode node) {
+ compiler.internalError('Cannot build SSA from IR for $node');
+ }
+
+ void visitIrReturn(IrReturn node) {
+ assert(isReachable);
+ HInstruction value = emitted[node.value];
+ // TODO(lry): add code for dynamic type check.
+ // value = potentiallyCheckType(value, returnType);
+ emitReturn(value, node);
+ }
+}
+
+/**
+ * This builder generates SSA nodes for elements that have an IR representation.
+ * It mixes in [SsaGraphBuilderMixin] to share functionality with the
+ * [SsaBuilder] that creates SSA nodes from trees.
+ */
+class SsaFromIrBuilder extends IrNodesVisitor with
+ SsaGraphBuilderMixin<IrNode>,
+ SsaFromIrMixin,
+ SsaGraphBuilderFields<IrNode> {
+ final Compiler compiler;
+
+ final JavaScriptBackend backend;
+
+ SsaFromIrBuilder(JavaScriptBackend backend, CodegenWorkItem work)
+ : this.backend = backend,
+ this.compiler = backend.compiler {
+ sourceElementStack.add(work.element);
+ }
+
HGraph buildMethod() {
- graph.calledInLoop = compiler.world.isCalledInLoop(sourceElement);
+ FunctionElement functionElement = sourceElement.implementation;
+ graph.calledInLoop = compiler.world.isCalledInLoop(functionElement);
open(graph.entry);
HBasicBlock block = graph.addNewBlock();
close(new HGoto()).addSuccessor(block);
open(block);
- IrFunction function = compiler.irBuilder.getIr(sourceElement);
+ IrFunction function = compiler.irBuilder.getIr(functionElement);
visitAll(function.statements);
if (!isAborted()) closeAndGotoExit(new HGoto());
graph.finalize();
return graph;
}
- HInstruction visitIrConstant(IrConstant node) {
- return recordGenerated(node, graph.addConstant(node.value, compiler));
- }
-
- HInstruction visitIrReturn(IrReturn node) {
- assert(isReachable);
- HInstruction value = generated[node.value];
- // TODO(lry): add code for dynamic type check.
- // value = potentiallyCheckType(value, returnType);
+ void emitReturn(HInstruction value, IrReturn node) {
closeAndGotoExit(attachPosition(new HReturn(value), node));
}
- HInstruction visitNode(IrNode node) {
- abort(node);
+ void setupInliningState(FunctionElement function,
+ List<HInstruction> compiledArguments) {
+ // TODO(lry): inlining when building from IR.
+ throw "setup inlining for $function";
}
- void abort(IrNode node) {
- throw 'Cannot build SSA from IR for $node';
+ void leaveInlinedMethod() {
+ // TODO(lry): inlining when building from IR.
+ throw "leave inlining in ir";
+ }
+
+ void doInline(Element element) {
+ // TODO(lry): inlining when building from IR.
+ throw "inline ir in ir for $element";
}
}
diff --git a/sdk/lib/_internal/compiler/implementation/ssa/from_ir_inliner.dart b/sdk/lib/_internal/compiler/implementation/ssa/from_ir_inliner.dart
index 9a67f39..d802603 100644
--- a/sdk/lib/_internal/compiler/implementation/ssa/from_ir_inliner.dart
+++ b/sdk/lib/_internal/compiler/implementation/ssa/from_ir_inliner.dart
@@ -4,27 +4,65 @@
part of ssa;
-class SsaFromIrInliner extends IrNodesVisitor {
-
+/**
+ * This class implements an [IrNodesVisitor] that inlines a function represented
+ * as IR into an [SsaBuilder].
+ */
+class SsaFromIrInliner
+ extends IrNodesVisitor with SsaGraphBuilderMixin<IrNode>, SsaFromIrMixin {
final SsaBuilder builder;
SsaFromIrInliner(this.builder);
- final Map<IrNode, HInstruction> emitted = new Map<IrNode, HInstruction>();
-
Compiler get compiler => builder.compiler;
- void visitIrReturn(IrReturn node) {
- HInstruction hValue = emitted[node.value];
- builder.localsHandler.updateLocal(builder.returnElement, hValue);
+ JavaScriptBackend get backend => builder.backend;
+
+ Element get sourceElement => builder.sourceElementStack.last;
+
+ HGraph get graph => builder.graph;
+
+ HBasicBlock get current => builder.current;
+
+ void set current(HBasicBlock block) {
+ builder.current = block;
}
- void visitIrConstant(IrConstant node) {
- emitted[node] = builder.graph.addConstant(node.value, compiler);
+ HBasicBlock get lastOpenedBlock => builder.lastOpenedBlock;
+
+ void set lastOpenedBlock(HBasicBlock block) {
+ builder.lastOpenedBlock = block;
}
- void visitNode(IrNode node) {
- compiler.internalError('Unexpected IrNode $node');
+ bool get isReachable => builder.isReachable;
+
+ void set isReachable(bool value) {
+ builder.isReachable = value;
+ }
+
+ bool get inThrowExpression => builder.inThrowExpression;
+
+ int get loopNesting => builder.loopNesting;
+
+ List<InliningState> get inliningStack => builder.inliningStack;
+
+ List<Element> get sourceElementStack => builder.sourceElementStack;
+
+ void setupInliningState(FunctionElement function,
+ List<HInstruction> compiledArguments) {
+ builder.setupInliningState(function, compiledArguments);
+ }
+
+ void leaveInlinedMethod() {
+ builder.leaveInlinedMethod();
+ }
+
+ void doInline(Element element) {
+ builder.doInline(element);
+ }
+
+ void emitReturn(HInstruction value, IrReturn node) {
+ builder.localsHandler.updateLocal(builder.returnElement, value);
}
}
@@ -57,7 +95,7 @@
}
}
- void visitNode(IrNode node) {
+ void visitIrNode(IrNode node) {
if (!registerNode()) return;
if (seenReturn) {
tooDifficult = true;
@@ -65,12 +103,11 @@
}
void visitIrReturn(IrReturn node) {
- visitNode(node);
+ visitIrNode(node);
seenReturn = true;
}
void visitIrFunction(IrFunction node) {
tooDifficult = true;
}
-
}
\ No newline at end of file
diff --git a/sdk/lib/_internal/compiler/implementation/ssa/invoke_dynamic_specializers.dart b/sdk/lib/_internal/compiler/implementation/ssa/invoke_dynamic_specializers.dart
index 54827a9..daf4f1e 100644
--- a/sdk/lib/_internal/compiler/implementation/ssa/invoke_dynamic_specializers.dart
+++ b/sdk/lib/_internal/compiler/implementation/ssa/invoke_dynamic_specializers.dart
@@ -229,6 +229,18 @@
}
HInstruction newBuiltinVariant(HInvokeDynamic instruction, Compiler compiler);
+
+ Selector renameToOptimizedSelector(String name,
+ Selector selector,
+ Compiler compiler) {
+ if (selector.name == name) return selector;
+ return new TypedSelector(
+ selector.mask,
+ new Selector(SelectorKind.CALL,
+ name,
+ compiler.interceptorsLibrary,
+ selector.argumentCount));
+ }
}
class AddSpecializer extends BinaryArithmeticSpecializer {
@@ -359,10 +371,38 @@
return super.computeTypeFromInputTypes(instruction, compiler);
}
+ bool isNotZero(HInstruction instruction, Compiler compiler) {
+ if (!instruction.isConstantInteger()) return false;
+ HConstant rightConstant = instruction;
+ IntConstant intConstant = rightConstant.constant;
+ int count = intConstant.value;
+ return count != 0;
+ }
+
+ HInstruction tryConvertToBuiltin(HInvokeDynamic instruction,
+ Compiler compiler) {
+ HInstruction left = instruction.inputs[1];
+ HInstruction right = instruction.inputs[2];
+ if (isBuiltin(instruction, compiler)) {
+ if (right.isPositiveInteger(compiler) && isNotZero(right, compiler)) {
+ if (left.isUInt31(compiler)) {
+ return newBuiltinVariant(instruction, compiler);
+ }
+ clearAllSideEffects(instruction);
+ // We can call _tdivFast because the rhs is a 32bit integer
+ // and not 0, nor -1.
+ instruction.selector = renameToOptimizedSelector(
+ '_tdivFast', instruction.selector, compiler);
+ }
+ }
+ return null;
+ }
+
HInstruction newBuiltinVariant(HInvokeDynamic instruction,
Compiler compiler) {
- // Truncating divide does not have a JS equivalent.
- return null;
+ return new HTruncatingDivide(
+ instruction.inputs[1], instruction.inputs[2],
+ instruction.selector, computeTypeFromInputTypes(instruction, compiler));
}
}
@@ -415,6 +455,11 @@
// the instruction does not have any side effect, and that it
// can be GVN'ed.
clearAllSideEffects(instruction);
+ Selector selector = instruction.selector;
+ if (isPositive(right, compiler)) {
+ instruction.selector = renameToOptimizedSelector(
+ '_shlPositive', instruction.selector, compiler);
+ }
}
return null;
}
@@ -452,6 +497,16 @@
// the instruction does not have any side effect, and that it
// can be GVN'ed.
clearAllSideEffects(instruction);
+ if (isPositive(right, compiler) && isPositive(left, compiler)) {
+ instruction.selector = renameToOptimizedSelector(
+ '_shrBothPositive', instruction.selector, compiler);
+ } else if (isPositive(left, compiler) && right.isNumber(compiler)) {
+ instruction.selector = renameToOptimizedSelector(
+ '_shrReceiverPositive', instruction.selector, compiler);
+ } else if (isPositive(right, compiler)) {
+ instruction.selector = renameToOptimizedSelector(
+ '_shrOtherPositive', instruction.selector, compiler);
+ }
}
return null;
}
diff --git a/sdk/lib/_internal/compiler/implementation/ssa/nodes.dart b/sdk/lib/_internal/compiler/implementation/ssa/nodes.dart
index e13b16d..64b666c 100644
--- a/sdk/lib/_internal/compiler/implementation/ssa/nodes.dart
+++ b/sdk/lib/_internal/compiler/implementation/ssa/nodes.dart
@@ -65,9 +65,15 @@
R visitThis(HThis node);
R visitThrow(HThrow node);
R visitThrowExpression(HThrowExpression node);
+ R visitTruncatingDivide(HTruncatingDivide node);
R visitTry(HTry node);
R visitTypeConversion(HTypeConversion node);
R visitTypeKnown(HTypeKnown node);
+ R visitReadTypeVariable(HReadTypeVariable node);
+ R visitFunctionType(HFunctionType node);
+ R visitVoidType(HVoidType node);
+ R visitInterfaceType(HInterfaceType node);
+ R visitDynamicType(HDynamicType node);
}
abstract class HGraphVisitor {
@@ -326,10 +332,16 @@
visitThis(HThis node) => visitParameterValue(node);
visitThrow(HThrow node) => visitControlFlow(node);
visitThrowExpression(HThrowExpression node) => visitInstruction(node);
+ visitTruncatingDivide(HTruncatingDivide node) => visitBinaryArithmetic(node);
visitTry(HTry node) => visitControlFlow(node);
visitIs(HIs node) => visitInstruction(node);
visitTypeConversion(HTypeConversion node) => visitCheck(node);
visitTypeKnown(HTypeKnown node) => visitCheck(node);
+ visitReadTypeVariable(HReadTypeVariable node) => visitInstruction(node);
+ visitFunctionType(HFunctionType node) => visitInstruction(node);
+ visitVoidType(HVoidType node) => visitInstruction(node);
+ visitInterfaceType(HInterfaceType node) => visitInstruction(node);
+ visitDynamicType(HDynamicType node) => visitInstruction(node);
}
class SubGraph {
@@ -783,6 +795,12 @@
static const int IS_TYPECODE = 28;
static const int INVOKE_DYNAMIC_TYPECODE = 29;
static const int SHIFT_RIGHT_TYPECODE = 30;
+ static const int READ_TYPE_VARIABLE_TYPECODE = 31;
+ static const int FUNCTION_TYPE_TYPECODE = 32;
+ static const int VOID_TYPE_TYPECODE = 33;
+ static const int INTERFACE_TYPE_TYPECODE = 34;
+ static const int DYNAMIC_TYPE_TYPECODE = 35;
+ static const int TRUNCATING_DIVIDE_TYPECODE = 36;
HInstruction(this.inputs, this.instructionType)
: id = idCounter++, usedBy = <HInstruction>[] {
@@ -966,7 +984,7 @@
}
/**
- * Type of the unstruction.
+ * Type of the instruction.
*/
TypeMask instructionType;
@@ -1664,6 +1682,18 @@
bool dataEquals(HInstruction other) => true;
}
+class HTruncatingDivide extends HBinaryArithmetic {
+ HTruncatingDivide(left, right, selector, type)
+ : super(left, right, selector, type);
+ accept(HVisitor visitor) => visitor.visitTruncatingDivide(this);
+
+ BinaryOperation operation(ConstantSystem constantSystem)
+ => constantSystem.truncatingDivide;
+ int typeCode() => HInstruction.TRUNCATING_DIVIDE_TYPECODE;
+ bool typeEquals(other) => other is HTruncatingDivide;
+ bool dataEquals(HInstruction other) => true;
+}
+
/**
* An [HSwitch] instruction has one input for the incoming
* value, and one input per constant that it can switch on.
@@ -2747,8 +2777,6 @@
visitor.visitTryInfo(this);
}
-
-
class HSwitchBlockInformation implements HStatementInformation {
final HExpressionInformation expression;
final List<HStatementInformation> statements;
@@ -2770,3 +2798,111 @@
bool accept(HStatementInformationVisitor visitor) =>
visitor.visitSwitchInfo(this);
}
+
+class HReadTypeVariable extends HInstruction {
+ /// The type variable being read.
+ final TypeVariableType dartType;
+
+ final bool hasReceiver;
+
+ HReadTypeVariable(this.dartType,
+ HInstruction receiver,
+ TypeMask instructionType)
+ : hasReceiver = true,
+ super(<HInstruction>[receiver], instructionType) {
+ setUseGvn();
+ }
+
+ HReadTypeVariable.noReceiver(this.dartType,
+ HInstruction typeArgument,
+ TypeMask instructionType)
+ : hasReceiver = false,
+ super(<HInstruction>[typeArgument], instructionType) {
+ setUseGvn();
+ }
+
+ accept(HVisitor visitor) => visitor.visitReadTypeVariable(this);
+
+ bool canThrow() => false;
+
+ int typeCode() => HInstruction.READ_TYPE_VARIABLE_TYPECODE;
+ bool typeEquals(HInstruction other) => other is HReadTypeVariable;
+
+ bool dataEquals(HReadTypeVariable other) {
+ return dartType.element == other.dartType.element
+ && hasReceiver == other.hasReceiver;
+ }
+}
+
+abstract class HRuntimeType extends HInstruction {
+ final DartType dartType;
+
+ HRuntimeType(List<HInstruction> inputs,
+ this.dartType,
+ TypeMask instructionType)
+ : super(inputs, instructionType) {
+ setUseGvn();
+ }
+
+ bool canThrow() => false;
+
+ int typeCode() {
+ throw 'abstract method';
+ }
+
+ bool typeEquals(HInstruction other) {
+ throw 'abstract method';
+ }
+
+ bool dataEquals(HRuntimeType other) {
+ return dartType == other.dartType;
+ }
+}
+
+class HFunctionType extends HRuntimeType {
+ HFunctionType(List<HInstruction> inputs,
+ FunctionType dartType,
+ TypeMask instructionType)
+ : super(inputs, dartType, instructionType);
+
+ accept(HVisitor visitor) => visitor.visitFunctionType(this);
+
+ int typeCode() => HInstruction.FUNCTION_TYPE_TYPECODE;
+
+ bool typeEquals(HInstruction other) => other is HFunctionType;
+}
+
+class HVoidType extends HRuntimeType {
+ HVoidType(VoidType dartType, TypeMask instructionType)
+ : super(const <HInstruction>[], dartType, instructionType);
+
+ accept(HVisitor visitor) => visitor.visitVoidType(this);
+
+ int typeCode() => HInstruction.VOID_TYPE_TYPECODE;
+
+ bool typeEquals(HInstruction other) => other is HVoidType;
+}
+
+class HInterfaceType extends HRuntimeType {
+ HInterfaceType(List<HInstruction> inputs,
+ InterfaceType dartType,
+ TypeMask instructionType)
+ : super(inputs, dartType, instructionType);
+
+ accept(HVisitor visitor) => visitor.visitInterfaceType(this);
+
+ int typeCode() => HInstruction.INTERFACE_TYPE_TYPECODE;
+
+ bool typeEquals(HInstruction other) => other is HInterfaceType;
+}
+
+class HDynamicType extends HRuntimeType {
+ HDynamicType(DynamicType dartType, TypeMask instructionType)
+ : super(const <HInstruction>[], dartType, instructionType);
+
+ accept(HVisitor visitor) => visitor.visitDynamicType(this);
+
+ int typeCode() => HInstruction.DYNAMIC_TYPE_TYPECODE;
+
+ bool typeEquals(HInstruction other) => other is HDynamicType;
+}
diff --git a/sdk/lib/_internal/compiler/implementation/ssa/optimize.dart b/sdk/lib/_internal/compiler/implementation/ssa/optimize.dart
index 89ec2e7..6b8eaaf 100644
--- a/sdk/lib/_internal/compiler/implementation/ssa/optimize.dart
+++ b/sdk/lib/_internal/compiler/implementation/ssa/optimize.dart
@@ -1448,9 +1448,13 @@
}
if (!canBeMoved) continue;
- // This is safe because we are running after GVN.
- // TODO(ngeoffray): ensure GVN has been run.
- set_.add(current);
+ HInstruction existing = set_.lookup(current);
+ if (existing == null) {
+ set_.add(current);
+ } else {
+ block.rewriteWithBetterUser(current, existing);
+ block.remove(current);
+ }
}
}
}
@@ -1533,12 +1537,24 @@
SsaLoadElimination(this.compiler);
- visitGraph(HGraph graph) {
+ void visitGraph(HGraph graph) {
memories = new List<MemorySet>(graph.blocks.length);
- visitDominatorTree(graph);
+ List<HBasicBlock> blocks = graph.blocks;
+ for (int i = 0; i < blocks.length; i++) {
+ HBasicBlock block = blocks[i];
+ visitBasicBlock(block);
+ if (block.successors.isNotEmpty && block.successors[0].isLoopHeader()) {
+ // We've reached the ending block of a loop. Iterate over the
+ // blocks of the loop again to take values that flow from that
+ // ending block into account.
+ for (int j = block.successors[0].id; j <= block.id; j++) {
+ visitBasicBlock(blocks[j]);
+ }
+ }
+ }
}
- visitBasicBlock(HBasicBlock block) {
+ void visitBasicBlock(HBasicBlock block) {
if (block.predecessors.length == 0) {
// Entry block.
memorySet = new MemorySet(compiler);
@@ -1550,9 +1566,6 @@
// `block.predecessors[0]` again, we can just re-use its
// [memorySet].
memorySet = memories[block.predecessors[0].id];
- } else if (block.isLoopHeader()) {
- // We currently do not handle loops.
- memorySet = new MemorySet(compiler);
} else if (block.predecessors.length == 1) {
// Clone the memorySet of the predecessor, because it is also used
// by other successors of it.
@@ -1565,6 +1578,7 @@
memories[block.predecessors[i].id], block, i);
}
}
+
memories[block.id] = memorySet;
HInstruction instruction = block.first;
while (instruction != null) {
@@ -1880,6 +1894,8 @@
HBasicBlock block,
int predecessorIndex) {
MemorySet result = new MemorySet(compiler);
+ if (other == null) return result;
+
fieldValues.forEach((element, values) {
var otherValues = other.fieldValues[element];
if (otherValues == null) return;
diff --git a/sdk/lib/_internal/compiler/implementation/ssa/tracer.dart b/sdk/lib/_internal/compiler/implementation/ssa/tracer.dart
index b56cd35..7b85b8c 100644
--- a/sdk/lib/_internal/compiler/implementation/ssa/tracer.dart
+++ b/sdk/lib/_internal/compiler/implementation/ssa/tracer.dart
@@ -478,6 +478,10 @@
return "ThrowExpression ${temporaryId(node.inputs[0])}";
}
+ String visitTruncatingDivide(HTruncatingDivide node) {
+ return handleInvokeBinary(node, '~/');
+ }
+
String visitExitTry(HExitTry node) {
return "Exit try";
}
@@ -521,4 +525,24 @@
String visitRangeConversion(HRangeConversion node) {
return "RangeConversion: ${node.checkedInput}";
}
+
+ String visitReadTypeVariable(HReadTypeVariable node) {
+ return "ReadTypeVariable: ${node.dartType} ${node.hasReceiver}";
+ }
+
+ String visitFunctionType(HFunctionType node) {
+ return "FunctionType: ${node.dartType}";
+ }
+
+ String visitVoidType(HVoidType node) {
+ return "VoidType";
+ }
+
+ String visitInterfaceType(HInterfaceType node) {
+ return "InterfaceType: ${node.dartType}";
+ }
+
+ String visitDynamicType(HDynamicType node) {
+ return "DynamicType";
+ }
}
diff --git a/sdk/lib/_internal/compiler/implementation/typechecker.dart b/sdk/lib/_internal/compiler/implementation/typechecker.dart
index a14859b..5dd026a 100644
--- a/sdk/lib/_internal/compiler/implementation/typechecker.dart
+++ b/sdk/lib/_internal/compiler/implementation/typechecker.dart
@@ -623,7 +623,7 @@
if (receiverType.treatAsDynamic) {
return const DynamicAccess();
}
- Member getMember(DartType type) {
+ InterfaceType computeInterfaceType(DartType type) {
DartType originalType = type;
while (identical(type.kind, TypeKind.TYPE_VARIABLE)) {
TypeVariableType variable = type;
@@ -639,7 +639,10 @@
}
assert(invariant(node, type.kind == TypeKind.INTERFACE,
message: "unexpected type kind ${type.kind}."));
- InterfaceType interface = type;
+ return type;
+ }
+ Member getMember(DartType type) {
+ InterfaceType interface = computeInterfaceType(type);
return interface.lookupMember(name,
isSetter: identical(memberKind, MemberKind.SETTER));
}
@@ -663,23 +666,26 @@
}
}
}
- switch (memberKind) {
- case MemberKind.METHOD:
- reportTypeWarning(node, MessageKind.METHOD_NOT_FOUND,
- {'className': receiverType.name, 'memberName': name});
- break;
- case MemberKind.OPERATOR:
- reportTypeWarning(node, MessageKind.OPERATOR_NOT_FOUND,
- {'className': receiverType.name, 'memberName': name});
- break;
- case MemberKind.GETTER:
- reportTypeWarning(node, MessageKind.MEMBER_NOT_FOUND.warning,
- {'className': receiverType.name, 'memberName': name});
- break;
- case MemberKind.SETTER:
- reportTypeWarning(node, MessageKind.PROPERTY_NOT_FOUND,
- {'className': receiverType.name, 'memberName': name});
- break;
+ InterfaceType interface = computeInterfaceType(receiverType);
+ if (!interface.element.isProxy) {
+ switch (memberKind) {
+ case MemberKind.METHOD:
+ reportTypeWarning(node, MessageKind.METHOD_NOT_FOUND,
+ {'className': receiverType.name, 'memberName': name});
+ break;
+ case MemberKind.OPERATOR:
+ reportTypeWarning(node, MessageKind.OPERATOR_NOT_FOUND,
+ {'className': receiverType.name, 'memberName': name});
+ break;
+ case MemberKind.GETTER:
+ reportTypeWarning(node, MessageKind.MEMBER_NOT_FOUND.warning,
+ {'className': receiverType.name, 'memberName': name});
+ break;
+ case MemberKind.SETTER:
+ reportTypeWarning(node, MessageKind.PROPERTY_NOT_FOUND,
+ {'className': receiverType.name, 'memberName': name});
+ break;
+ }
}
return const DynamicAccess();
}
@@ -1447,7 +1453,8 @@
for (Link<Node> link = node.definitions.nodes; !link.isEmpty;
link = link.tail) {
Node definition = link.head;
- compiler.ensure(definition is Identifier || definition is SendSet);
+ invariant(definition, definition is Identifier || definition is SendSet,
+ message: 'expected identifier or initialization');
if (definition is SendSet) {
SendSet initialization = definition;
DartType initializer = analyzeNonVoid(initialization.arguments.head);
diff --git a/sdk/lib/_internal/compiler/implementation/types/concrete_types_inferrer.dart b/sdk/lib/_internal/compiler/implementation/types/concrete_types_inferrer.dart
index 5e55fb5..5e3e8e3 100644
--- a/sdk/lib/_internal/compiler/implementation/types/concrete_types_inferrer.dart
+++ b/sdk/lib/_internal/compiler/implementation/types/concrete_types_inferrer.dart
@@ -1026,10 +1026,6 @@
return result == const DynamicTypeMask() ? null : result;
}
- Iterable<TypeMask> get containerTypes {
- throw new UnsupportedError("");
- }
-
void clear() {}
bool isCalledOnce(Element element) {
diff --git a/sdk/lib/_internal/compiler/implementation/types/types.dart b/sdk/lib/_internal/compiler/implementation/types/types.dart
index 175f92f..a5c9a9a 100644
--- a/sdk/lib/_internal/compiler/implementation/types/types.dart
+++ b/sdk/lib/_internal/compiler/implementation/types/types.dart
@@ -28,7 +28,6 @@
TypeMask getTypeOfElement(Element element);
TypeMask getTypeOfNode(Element owner, Node node);
TypeMask getTypeOfSelector(Selector selector);
- Iterable<TypeMask> get containerTypes;
void clear();
bool isCalledOnce(Element element);
bool isFixedArrayCheckedForGrowable(Node node);
@@ -400,7 +399,6 @@
/**
* Return the (inferred) guaranteed type of [selector] or null.
- * [node] must be an AST node of [owner].
*/
TypeMask getGuaranteedTypeOfSelector(Selector selector) {
return measure(() {
diff --git a/sdk/lib/_internal/compiler/implementation/universe/universe.dart b/sdk/lib/_internal/compiler/implementation/universe/universe.dart
index 8e9d506..eed40c8 100644
--- a/sdk/lib/_internal/compiler/implementation/universe/universe.dart
+++ b/sdk/lib/_internal/compiler/implementation/universe/universe.dart
@@ -124,7 +124,7 @@
// The numbers of arguments of the selector. Includes named arguments.
final int argumentCount;
final List<String> namedArguments;
- final List<String> orderedNamedArguments;
+ final List<String> _orderedNamedArguments;
final int hashCode;
static const String INDEX_NAME ="[]";
@@ -136,7 +136,7 @@
this.library,
this.argumentCount,
this.namedArguments,
- this.orderedNamedArguments,
+ this._orderedNamedArguments,
this.hashCode) {
assert(kind == SelectorKind.INDEX
|| (name != INDEX_NAME && name != INDEX_SET_NAME));
@@ -186,15 +186,27 @@
factory Selector.fromElement(Element element, Compiler compiler) {
String name = element.name;
if (element.isFunction()) {
- int arity = element.asFunctionElement().requiredParameterCount(compiler);
if (name == '[]') {
return new Selector.index();
} else if (name == '[]=') {
return new Selector.indexSet();
- } else if (Elements.operatorNameToIdentifier(name) != name) {
- return new Selector(SelectorKind.OPERATOR, name, null, arity);
+ }
+ FunctionSignature signature =
+ element.asFunctionElement().computeSignature(compiler);
+ int arity = signature.parameterCount;
+ List<String> namedArguments = null;
+ if (signature.optionalParametersAreNamed) {
+ namedArguments =
+ signature.orderedOptionalParameters.map((e) => e.name).toList();
+ }
+ if (Elements.operatorNameToIdentifier(name) != name) {
+ // Operators cannot have named arguments, however, that doesn't prevent
+ // a user from declaring such an operator.
+ return new Selector(
+ SelectorKind.OPERATOR, name, null, arity, namedArguments);
} else {
- return new Selector.call(name, element.getLibrary(), arity);
+ return new Selector.call(
+ name, element.getLibrary(), arity, namedArguments);
}
} else if (element.isSetter()) {
return new Selector.setter(name, element.getLibrary());
@@ -202,6 +214,9 @@
return new Selector.getter(name, element.getLibrary());
} else if (element.isField()) {
return new Selector.getter(name, element.getLibrary());
+ } else {
+ throw new SpannableAssertionFailure(
+ element, "Can't get selector from $element");
}
}
@@ -557,13 +572,13 @@
List<String> getOrderedNamedArguments() {
if (namedArguments.isEmpty) return namedArguments;
- if (!orderedNamedArguments.isEmpty) return orderedNamedArguments;
+ if (!_orderedNamedArguments.isEmpty) return _orderedNamedArguments;
- orderedNamedArguments.addAll(namedArguments);
- orderedNamedArguments.sort((String first, String second) {
+ _orderedNamedArguments.addAll(namedArguments);
+ _orderedNamedArguments.sort((String first, String second) {
return first.compareTo(second);
});
- return orderedNamedArguments;
+ return _orderedNamedArguments;
}
String namedArgumentsToString() {
@@ -590,6 +605,8 @@
Selector extendIfReachesAll(Compiler compiler) {
return new TypedSelector(compiler.typesTask.dynamicType, this);
}
+
+ Selector toCallSelector() => new Selector.callClosureFrom(this);
}
class TypedSelector extends Selector {
@@ -603,7 +620,7 @@
selector.library,
selector.argumentCount,
selector.namedArguments,
- selector.orderedNamedArguments,
+ selector._orderedNamedArguments,
hashCode) {
assert(mask != null);
assert(asUntyped.mask == null);
diff --git a/sdk/lib/_internal/lib/core_patch.dart b/sdk/lib/_internal/lib/core_patch.dart
index de1c0c0..b4a7bd2 100644
--- a/sdk/lib/_internal/lib/core_patch.dart
+++ b/sdk/lib/_internal/lib/core_patch.dart
@@ -186,11 +186,16 @@
patch static int _now() => Primitives.numMicroseconds();
}
+class _ListConstructorSentinel extends JSInt {
+ const _ListConstructorSentinel();
+}
// Patch for List implementation.
patch class List<E> {
- patch factory List([int length]) {
- if (length == null) return new JSArray<E>.emptyGrowable();
+ patch factory List([int length = const _ListConstructorSentinel()]) {
+ if (length == const _ListConstructorSentinel()) {
+ return new JSArray<E>.emptyGrowable();
+ }
return new JSArray<E>.fixed(length);
}
diff --git a/sdk/lib/_internal/lib/io_patch.dart b/sdk/lib/_internal/lib/io_patch.dart
index bc87e41..2f3db18 100644
--- a/sdk/lib/_internal/lib/io_patch.dart
+++ b/sdk/lib/_internal/lib/io_patch.dart
@@ -293,6 +293,13 @@
}
}
+patch class RawDatagramSocket {
+ patch static Future<RawDatagramSocket> bind(
+ host, int port, {bool reuseAddress: true}) {
+ throw new UnsupportedError("RawDatagramSocket.bind");
+ }
+}
+
patch class _SecureFilter {
patch factory _SecureFilter() {
throw new UnsupportedError("_SecureFilter._SecureFilter");
@@ -336,9 +343,15 @@
patch int readByteSync() {
throw new UnsupportedError("Stdin.readByteSync");
}
+ patch bool get echoMode {
+ throw new UnsupportedError("Stdin.echoMode");
+ }
patch void set echoMode(bool enabled) {
throw new UnsupportedError("Stdin.echoMode");
}
+ patch bool get lineMode {
+ throw new UnsupportedError("Stdin.lineMode");
+ }
patch void set lineMode(bool enabled) {
throw new UnsupportedError("Stdin.lineMode");
}
diff --git a/sdk/lib/_internal/lib/isolate_helper.dart b/sdk/lib/_internal/lib/isolate_helper.dart
index 0ff3096..af5c9d5 100644
--- a/sdk/lib/_internal/lib/isolate_helper.dart
+++ b/sdk/lib/_internal/lib/isolate_helper.dart
@@ -8,6 +8,7 @@
import 'dart:collection' show Queue, HashMap;
import 'dart:isolate';
import 'dart:_js_helper' show
+ Closure,
Null,
Primitives,
convertDartClosureToJS;
@@ -20,7 +21,7 @@
IsolateContext;
import 'dart:_interceptors' show JSExtendableArray;
-ReceivePort lazyPort;
+ReceivePort controlPort;
/**
* Called by the compiler to support switching
@@ -222,19 +223,17 @@
/** Context information tracked for each isolate. */
class _IsolateContext implements IsolateContext {
/** Current isolate id. */
- int id;
+ final int id = _globalState.nextIsolateId++;
/** Registry of receive ports currently active on this isolate. */
- Map<int, RawReceivePortImpl> ports;
+ final Map<int, RawReceivePortImpl> ports = new Map<int, RawReceivePortImpl>();
+
+ /** Registry of weak receive ports currently active on this isolate. */
+ final Set<int> weakPorts = new Set<int>();
/** Holds isolate globals (statics and top-level properties). */
- var isolateStatics; // native object containing all globals of an isolate.
-
- _IsolateContext() {
- id = _globalState.nextIsolateId++;
- ports = new Map<int, RawReceivePortImpl>();
- isolateStatics = JS_CREATE_ISOLATE();
- }
+ // native object containing all globals of an isolate.
+ final isolateStatics = JS_CREATE_ISOLATE();
/**
* Run [code] in the context of the isolate represented by [this].
@@ -257,24 +256,41 @@
JS_SET_CURRENT_ISOLATE(isolateStatics);
}
- /** Lookup a port registered for this isolate. */
+ /** Looks up a port registered for this isolate. */
RawReceivePortImpl lookup(int portId) => ports[portId];
- /** Register a port on this isolate. */
+ /** Registers a port on this isolate. */
void register(int portId, RawReceivePortImpl port) {
if (ports.containsKey(portId)) {
throw new Exception("Registry: ports must be registered only once.");
}
ports[portId] = port;
- _globalState.isolates[id] = this; // indicate this isolate is active
+ _updateGlobalState();
+ }
+
+ /**
+ * Registers a weak port on this isolate.
+ *
+ * The port does not keep the isolate active.
+ */
+ void registerWeak(int portId, RawReceivePortImpl port) {
+ weakPorts.add(portId);
+ // 'register' updates the global state.
+ register(portId, port);
+ }
+
+ _updateGlobalState() {
+ if (ports.length - weakPorts.length > 0) {
+ _globalState.isolates[id] = this; // indicate this isolate is active
+ } else {
+ _globalState.isolates.remove(id); // indicate this isolate is not active
+ }
}
/** Unregister a port on this isolate. */
void unregister(int portId) {
ports.remove(portId);
- if (ports.isEmpty) {
- _globalState.isolates.remove(id); // indicate this isolate is not active
- }
+ _updateGlobalState();
}
}
@@ -548,7 +564,7 @@
}
static _getJSFunctionFromName(String functionName) {
- return JS("", "init.globalFunctions[#]", functionName);
+ return JS("", "init.globalFunctions[#]()", functionName);
}
/**
@@ -557,7 +573,7 @@
* but you should probably not count on this.
*/
static String _getJSFunctionName(Function f) {
- return JS("String|Null", r"(#['$name'] || #)", f, null);
+ return (f is Closure) ? JS("String|Null", r'#.$name', f) : null;
}
/** Create a new JavaScript object instance given its constructor. */
@@ -565,7 +581,8 @@
return JS("", "new #()", ctor);
}
- static SendPort spawnFunction(void topLevelFunction(message), message) {
+ static Future<SendPort> spawnFunction(void topLevelFunction(message),
+ message) {
final name = _getJSFunctionName(topLevelFunction);
if (name == null) {
throw new UnsupportedError(
@@ -574,27 +591,25 @@
return spawn(name, null, null, message, false, false);
}
- static SendPort spawnUri(Uri uri, List<String> args, message) {
+ static Future<SendPort> spawnUri(Uri uri, List<String> args, message) {
return spawn(null, uri.toString(), args, message, false, true);
}
// TODO(sigmund): clean up above, after we make the new API the default:
/// If [uri] is `null` it is replaced with the current script.
- static SendPort spawn(String functionName, String uri,
- List<String> args, message,
- bool isLight, bool isSpawnUri) {
+ static Future<SendPort> spawn(String functionName, String uri,
+ List<String> args, message,
+ bool isLight, bool isSpawnUri) {
// Assume that the compiled version of the Dart file lives just next to the
// dart file.
// TODO(floitsch): support precompiled version of dart2js output.
if (uri != null && uri.endsWith(".dart")) uri += ".js";
- Completer<SendPort> completer = new Completer<SendPort>.sync();
ReceivePort port = new ReceivePort();
- port.listen((msg) {
- port.close();
+ Future<SendPort> result = port.first.then((msg) {
assert(msg[0] == _SPAWNED_SIGNAL);
- completer.complete(msg[1]);
+ return msg[1];
});
SendPort signalReply = port.sendPort;
@@ -605,8 +620,7 @@
_startNonWorker(
functionName, uri, args, message, isSpawnUri, signalReply);
}
- return new _BufferingSendPort(
- _globalState.currentContext.id, completer.future);
+ return result;
}
static void _startWorker(
@@ -650,8 +664,9 @@
SendPort replyTo) {
_IsolateContext context = JS_CURRENT_ISOLATE_CONTEXT();
Primitives.initializeStatics(context.id);
- lazyPort = new ReceivePort();
- replyTo.send([_SPAWNED_SIGNAL, lazyPort.sendPort]);
+ // The isolate's port does not keep the isolate open.
+ controlPort = new ReceivePortImpl.weak();
+ replyTo.send([_SPAWNED_SIGNAL, controlPort.sendPort]);
if (!isSpawnUri) {
topLevel(message);
} else if (topLevel is _MainFunctionArgsMessage) {
@@ -712,8 +727,7 @@
void _checkReplyTo(SendPort replyTo) {
if (replyTo != null
&& replyTo is! _NativeJsSendPort
- && replyTo is! _WorkerSendPort
- && replyTo is! _BufferingSendPort) {
+ && replyTo is! _WorkerSendPort) {
throw new Exception("SendPort.send: Illegal replyTo port type");
}
}
@@ -730,34 +744,32 @@
const _NativeJsSendPort(this._receivePort, int isolateId) : super(isolateId);
void send(var message) {
- _waitForPendingPorts(message, () {
- // Check that the isolate still runs and the port is still open
- final isolate = _globalState.isolates[_isolateId];
- if (isolate == null) return;
- if (_receivePort._isClosed) return;
+ // Check that the isolate still runs and the port is still open
+ final isolate = _globalState.isolates[_isolateId];
+ if (isolate == null) return;
+ if (_receivePort._isClosed) return;
- // We force serialization/deserialization as a simple way to ensure
- // isolate communication restrictions are respected between isolates that
- // live in the same worker. [_NativeJsSendPort] delivers both messages
- // from the same worker and messages from other workers. In particular,
- // messages sent from a worker via a [_WorkerSendPort] are received at
- // [_processWorkerMessage] and forwarded to a native port. In such cases,
- // here we'll see [_globalState.currentContext == null].
- final shouldSerialize = _globalState.currentContext != null
- && _globalState.currentContext.id != _isolateId;
- var msg = message;
- if (shouldSerialize) {
- msg = _serializeMessage(msg);
- }
- _globalState.topEventLoop.enqueue(isolate, () {
- if (!_receivePort._isClosed) {
- if (shouldSerialize) {
- msg = _deserializeMessage(msg);
- }
- _receivePort._add(msg);
+ // We force serialization/deserialization as a simple way to ensure
+ // isolate communication restrictions are respected between isolates that
+ // live in the same worker. [_NativeJsSendPort] delivers both messages
+ // from the same worker and messages from other workers. In particular,
+ // messages sent from a worker via a [_WorkerSendPort] are received at
+ // [_processWorkerMessage] and forwarded to a native port. In such cases,
+ // here we'll see [_globalState.currentContext == null].
+ final shouldSerialize = _globalState.currentContext != null
+ && _globalState.currentContext.id != _isolateId;
+ var msg = message;
+ if (shouldSerialize) {
+ msg = _serializeMessage(msg);
+ }
+ _globalState.topEventLoop.enqueue(isolate, () {
+ if (!_receivePort._isClosed) {
+ if (shouldSerialize) {
+ msg = _deserializeMessage(msg);
}
- }, 'receive $message');
- });
+ _receivePort._add(msg);
+ }
+ }, 'receive $message');
}
bool operator ==(var other) => (other is _NativeJsSendPort) &&
@@ -776,24 +788,22 @@
: super(isolateId);
void send(var message) {
- _waitForPendingPorts(message, () {
- final workerMessage = _serializeMessage({
- 'command': 'message',
- 'port': this,
- 'msg': message});
+ final workerMessage = _serializeMessage({
+ 'command': 'message',
+ 'port': this,
+ 'msg': message});
- if (_globalState.isWorker) {
- // Communication from one worker to another go through the
- // main worker.
- _globalState.mainManager.postMessage(workerMessage);
- } else {
- // Deliver the message only if the worker is still alive.
- /* Worker */ var manager = _globalState.managers[_workerId];
- if (manager != null) {
- JS('void', '#.postMessage(#)', manager, workerMessage);
- }
+ if (_globalState.isWorker) {
+ // Communication from one worker to another go through the
+ // main worker.
+ _globalState.mainManager.postMessage(workerMessage);
+ } else {
+ // Deliver the message only if the worker is still alive.
+ /* Worker */ var manager = _globalState.managers[_workerId];
+ if (manager != null) {
+ JS('void', '#.postMessage(#)', manager, workerMessage);
}
- });
+ }
}
bool operator ==(var other) {
@@ -809,56 +819,6 @@
}
}
-/** A port that buffers messages until an underlying port gets resolved. */
-class _BufferingSendPort extends _BaseSendPort implements SendPort {
- /** Internal counter to assign unique ids to each port. */
- static int _idCount = 0;
-
- /** For implementing equals and hashcode. */
- final int _id;
-
- /** Underlying port, when resolved. */
- SendPort _port;
-
- /**
- * Future.sync the underlying port, so that we can detect when this port can be
- * sent on messages.
- */
- Future<SendPort> _futurePort;
-
- /** Pending messages (and reply ports). */
- List pending;
-
- _BufferingSendPort(isolateId, this._futurePort)
- : super(isolateId), _id = _idCount, pending = [] {
- _idCount++;
- _futurePort.then((p) {
- _port = p;
- for (final item in pending) {
- p.send(item);
- }
- pending = null;
- });
- }
-
- _BufferingSendPort.fromPort(isolateId, this._port)
- : super(isolateId), _id = _idCount {
- _idCount++;
- }
-
- void send(var message) {
- if (_port != null) {
- _port.send(message);
- } else {
- pending.add(message);
- }
- }
-
- bool operator ==(var other) =>
- other is _BufferingSendPort && _id == other._id;
- int get hashCode => _id;
-}
-
class RawReceivePortImpl implements RawReceivePort {
static int _nextFreeId = 1;
@@ -870,6 +830,10 @@
_globalState.currentContext.register(_id, this);
}
+ RawReceivePortImpl.weak(this._handler) {
+ _globalState.currentContext.registerWeak(_id, this);
+ }
+
void set handler(Function newHandler) {
_handler = newHandler;
}
@@ -897,6 +861,9 @@
ReceivePortImpl() : this.fromRawReceivePort(new RawReceivePortImpl(null));
+ ReceivePortImpl.weak()
+ : this.fromRawReceivePort(new RawReceivePortImpl.weak(null));
+
ReceivePortImpl.fromRawReceivePort(this._rawPort) {
_controller = new StreamController(onCancel: close, sync: true);
_rawPort.handler = _controller.add;
@@ -919,45 +886,6 @@
}
-/** Wait until all ports in a message are resolved. */
-_waitForPendingPorts(var message, void callback()) {
- final finder = new _PendingSendPortFinder();
- finder.traverse(message);
- Future.wait(finder.ports).then((_) => callback());
-}
-
-
-/** Visitor that finds all unresolved [SendPort]s in a message. */
-class _PendingSendPortFinder extends _MessageTraverser {
- List<Future<SendPort>> ports;
- _PendingSendPortFinder() : super(), ports = [] {
- _visited = new _JsVisitedMap();
- }
-
- visitPrimitive(x) {}
-
- visitList(List list) {
- final seen = _visited[list];
- if (seen != null) return;
- _visited[list] = true;
- list.forEach(_dispatch);
- }
-
- visitMap(Map map) {
- final seen = _visited[map];
- if (seen != null) return;
-
- _visited[map] = true;
- map.values.forEach(_dispatch);
- }
-
- visitSendPort(var port) {
- if (port is _BufferingSendPort && port._port == null) {
- ports.add(port._futurePort);
- }
- }
-}
-
/********************************************************
Inserted from lib/isolate/dart2js/messages.dart
********************************************************/
@@ -990,7 +918,6 @@
visitSendPort(SendPort x) {
if (x is _NativeJsSendPort) return visitNativeJsSendPort(x);
if (x is _WorkerSendPort) return visitWorkerSendPort(x);
- if (x is _BufferingSendPort) return visitBufferingSendPort(x);
throw "Illegal underlying port $x";
}
@@ -1002,17 +929,6 @@
visitWorkerSendPort(_WorkerSendPort port) {
return ['sendport', port._workerId, port._isolateId, port._receivePortId];
}
-
- visitBufferingSendPort(_BufferingSendPort port) {
- if (port._port != null) {
- return visitSendPort(port._port);
- } else {
- // TODO(floitsch): Use real exception (which one?).
- throw
- "internal error: must call _waitForPendingPorts to ensure all"
- " ports are resolved at this point.";
- }
- }
}
@@ -1023,7 +939,6 @@
visitSendPort(SendPort x) {
if (x is _NativeJsSendPort) return visitNativeJsSendPort(x);
if (x is _WorkerSendPort) return visitWorkerSendPort(x);
- if (x is _BufferingSendPort) return visitBufferingSendPort(x);
throw "Illegal underlying port $x";
}
@@ -1035,17 +950,6 @@
return new _WorkerSendPort(
port._workerId, port._isolateId, port._receivePortId);
}
-
- SendPort visitBufferingSendPort(_BufferingSendPort port) {
- if (port._port != null) {
- return visitSendPort(port._port);
- } else {
- // TODO(floitsch): Use real exception (which one?).
- throw
- "internal error: must call _waitForPendingPorts to ensure all"
- " ports are resolved at this point.";
- }
- }
}
class _JsDeserializer extends _Deserializer {
diff --git a/sdk/lib/_internal/lib/isolate_patch.dart b/sdk/lib/_internal/lib/isolate_patch.dart
index 69fa23e..560fb1f 100644
--- a/sdk/lib/_internal/lib/isolate_patch.dart
+++ b/sdk/lib/_internal/lib/isolate_patch.dart
@@ -5,7 +5,6 @@
// Patch file for the dart:isolate library.
import 'dart:_isolate_helper' show IsolateNatives,
- lazyPort,
ReceivePortImpl,
RawReceivePortImpl,
CloseToken,
@@ -13,8 +12,8 @@
patch class Isolate {
patch static Future<Isolate> spawn(void entryPoint(message), var message) {
- SendPort controlPort = IsolateNatives.spawnFunction(entryPoint, message);
- return new Future<Isolate>.value(new Isolate._fromControlPort(controlPort));
+ return IsolateNatives.spawnFunction(entryPoint, message)
+ .then((controlPort) => new Isolate._fromControlPort(controlPort));
}
patch static Future<Isolate> spawnUri(
@@ -28,8 +27,8 @@
} else if (args != null) {
throw new ArgumentError("Args must be a list of Strings $args");
}
- SendPort controlPort = IsolateNatives.spawnUri(uri, args, message);
- return new Future<Isolate>.value(new Isolate._fromControlPort(controlPort));
+ return IsolateNatives.spawnUri(uri, args, message)
+ .then((controlPort) => new Isolate._fromControlPort(controlPort));
}
}
diff --git a/sdk/lib/_internal/lib/js_helper.dart b/sdk/lib/_internal/lib/js_helper.dart
index 7e753ef..ba5cf5b 100644
--- a/sdk/lib/_internal/lib/js_helper.dart
+++ b/sdk/lib/_internal/lib/js_helper.dart
@@ -33,6 +33,7 @@
import 'dart:_collection-dev' show MappedIterable;
import 'dart:_js_names' show
+ extractKeys,
mangledNames,
unmangleGlobalNameIfPreservedAnyways;
@@ -179,12 +180,32 @@
} else {
interceptor = null;
}
+ bool isCatchAll = false;
var method = JS('var', '#[#]', receiver, name);
- if (JS('String', 'typeof #', method) == 'function') {
+ if (JS('bool', 'typeof # != "function"', method) ) {
+ String baseName = _symbol_dev.Symbol.getName(memberName);
+ method = JS('', '#[# + "*"]', receiver, baseName);
+ if (method == null) {
+ interceptor = getInterceptor(object);
+ method = JS('', '#[# + "*"]', interceptor, baseName);
+ if (method != null) {
+ isIntercepted = true;
+ receiver = interceptor;
+ } else {
+ interceptor = null;
+ }
+ }
+ isCatchAll = true;
+ }
+ if (JS('bool', 'typeof # == "function"', method)) {
if (!hasReflectableProperty(method)) {
throwInvalidReflectionError(_symbol_dev.Symbol.getName(memberName));
}
- return new CachedInvocation(method, isIntercepted, interceptor);
+ if (isCatchAll) {
+ return new CachedCatchAllInvocation(method, isIntercepted, interceptor);
+ } else {
+ return new CachedInvocation(method, isIntercepted, interceptor);
+ }
} else {
// In this case, receiver doesn't implement name. So we should
// invoke noSuchMethod instead (which will often throw a
@@ -223,7 +244,7 @@
bool get isNoSuchMethod => false;
- /// Applies [jsFunction] to object with [arguments].
+ /// Applies [jsFunction] to [victim] with [arguments].
/// Users of this class must take care to check the arguments first.
invokeOn(Object victim, List arguments) {
var receiver = victim;
@@ -237,6 +258,49 @@
}
}
+class CachedCatchAllInvocation extends CachedInvocation {
+ final ReflectionInfo info;
+
+ CachedCatchAllInvocation(jsFunction,
+ bool isIntercepted,
+ Interceptor cachedInterceptor)
+ : info = new ReflectionInfo(jsFunction),
+ super(jsFunction, isIntercepted, cachedInterceptor);
+
+ invokeOn(Object victim, List arguments) {
+ var receiver = victim;
+ int providedArgumentCount;
+ if (!isIntercepted) {
+ if (arguments is! JSArray) arguments = new List.from(arguments);
+ providedArgumentCount = arguments.length;
+ } else {
+ arguments = [victim]..addAll(arguments);
+ if (cachedInterceptor != null) receiver = cachedInterceptor;
+ providedArgumentCount = arguments.length - 1;
+ }
+ int fullParameterCount =
+ info.requiredParameterCount + info.optionalParameterCount;
+ if (info.areOptionalParametersNamed &&
+ (providedArgumentCount > info.requiredParameterCount)) {
+ throw new UnimplementedNoSuchMethodError(
+ "Invocation of unstubbed method '${info.reflectionName}'"
+ " with ${arguments.length} arguments.");
+ } else if (providedArgumentCount < info.requiredParameterCount) {
+ throw new UnimplementedNoSuchMethodError(
+ "Invocation of unstubbed method '${info.reflectionName}'"
+ " with $providedArgumentCount arguments (too few).");
+ } else if (providedArgumentCount > fullParameterCount) {
+ throw new UnimplementedNoSuchMethodError(
+ "Invocation of unstubbed method '${info.reflectionName}'"
+ " with $providedArgumentCount arguments (too many).");
+ }
+ for (int i = providedArgumentCount; i < fullParameterCount; i++) {
+ arguments.add(getMetadata(info.defaultValue(i)));
+ }
+ return JS("var", "#.apply(#, #)", jsFunction, receiver, arguments);
+ }
+}
+
class CachedNoSuchMethodInvocation {
/// Non-null interceptor if this is an intercepted call through an
/// [Interceptor].
@@ -252,6 +316,96 @@
}
}
+class ReflectionInfo {
+ static const int REQUIRED_PARAMETERS_INFO = 0;
+ static const int OPTIONAL_PARAMETERS_INFO = 1;
+ static const int FUNCTION_TYPE_INDEX = 2;
+ static const int FIRST_DEFAULT_ARGUMENT = 3;
+
+ /// A JavaScript function object.
+ final jsFunction;
+
+ /// Raw reflection information.
+ final List data;
+
+ /// Is this a getter or a setter.
+ final bool isAccessor;
+
+ /// Number of required parameters.
+ final int requiredParameterCount;
+
+ /// Number of optional parameters.
+ final int optionalParameterCount;
+
+ /// Are optional parameters named.
+ final bool areOptionalParametersNamed;
+
+ /// Either an index to the function type in [:init.metadata:] or a JavaScript
+ /// function object which can compute such a type (presumably due to free
+ /// type variables).
+ final functionType;
+
+ ReflectionInfo.internal(this.jsFunction,
+ this.data,
+ this.isAccessor,
+ this.requiredParameterCount,
+ this.optionalParameterCount,
+ this.areOptionalParametersNamed,
+ this.functionType);
+
+ factory ReflectionInfo(jsFunction) {
+ List data = JS('JSExtendableArray|Null', r'#.$reflectionInfo', jsFunction);
+ if (data == null) return null;
+ data = JSArray.markFixedList(data);
+
+ int requiredParametersInfo =
+ JS('int', '#[#]', data, REQUIRED_PARAMETERS_INFO);
+ int requiredParameterCount = JS('int', '# >> 1', requiredParametersInfo);
+ bool isAccessor = (requiredParametersInfo & 1) == 1;
+
+ int optionalParametersInfo =
+ JS('int', '#[#]', data, OPTIONAL_PARAMETERS_INFO);
+ int optionalParameterCount = JS('int', '# >> 1', optionalParametersInfo);
+ bool areOptionalParametersNamed = (optionalParametersInfo & 1) == 1;
+
+ var functionType = JS('', '#[#]', data, FUNCTION_TYPE_INDEX);
+ return new ReflectionInfo.internal(
+ jsFunction, data, isAccessor, requiredParameterCount,
+ optionalParameterCount, areOptionalParametersNamed, functionType);
+ }
+
+ String parameterName(int parameter) {
+ int metadataIndex = JS('int', '#[# + # + #]', data, parameter,
+ optionalParameterCount, FIRST_DEFAULT_ARGUMENT);
+ return JS('String', 'init.metadata[#]', metadataIndex);
+ }
+
+ int defaultValue(int parameter) {
+ if (parameter < requiredParameterCount) return null;
+ return JS('int', '#[# + # - #]', data,
+ FIRST_DEFAULT_ARGUMENT, parameter, requiredParameterCount);
+ }
+
+ @NoInline
+ computeFunctionRti(jsConstructor) {
+ if (JS('bool', 'typeof # == "number"', functionType)) {
+ return getMetadata(functionType);
+ } else if (JS('bool', 'typeof # == "function"', functionType)) {
+ var fakeInstance = JS('', 'new #()', jsConstructor);
+ setRuntimeTypeInfo(
+ fakeInstance, JS('JSExtendableArray', '#["<>"]', fakeInstance));
+ return JS('=Object|Null', r'#.apply({$receiver:#})',
+ functionType, fakeInstance);
+ } else {
+ throw new RuntimeError('Unexpected function type');
+ }
+ }
+
+ String get reflectionName => JS('String', r'#.$reflectionName', jsFunction);
+}
+
+getMetadata(int index) => JS('', 'init.metadata[#]', index);
+
class Primitives {
/// Isolate-unique ID for caching [JsClosureMirror.function].
/// Note the initial value is used by the first isolate (or if there are no
@@ -679,11 +833,93 @@
JS('void', '#[#] = #', object, key, value);
}
+ static functionNoSuchMethod(function,
+ List positionalArguments,
+ Map<String, dynamic> namedArguments) {
+ int argumentCount = 0;
+ List arguments = [];
+ List namedArgumentList = [];
+
+ if (positionalArguments != null) {
+ argumentCount += positionalArguments.length;
+ arguments.addAll(positionalArguments);
+ }
+
+ String names = '';
+ if (namedArguments != null && !namedArguments.isEmpty) {
+ namedArguments.forEach((String name, argument) {
+ names = '$names\$$name';
+ namedArgumentList.add(name);
+ arguments.add(argument);
+ argumentCount++;
+ });
+ }
+
+ String selectorName = 'call\$$argumentCount$names';
+
+ return function.noSuchMethod(
+ createUnmangledInvocationMirror(
+ #call,
+ selectorName,
+ JSInvocationMirror.METHOD,
+ arguments,
+ namedArgumentList));
+ }
+
static applyFunction(Function function,
List positionalArguments,
Map<String, dynamic> namedArguments) {
+ if (namedArguments != null && !namedArguments.isEmpty) {
+ // TODO(ahe): The following code can be shared with
+ // JsInstanceMirror.invoke.
+ var interceptor = getInterceptor(function);
+ var jsFunction = JS('', '#["call*"]', interceptor);
+
+ if (jsFunction == null) {
+ return functionNoSuchMethod(
+ function, positionalArguments, namedArguments);
+ }
+ ReflectionInfo info = new ReflectionInfo(jsFunction);
+ if (info == null || !info.areOptionalParametersNamed) {
+ return functionNoSuchMethod(
+ function, positionalArguments, namedArguments);
+ }
+
+ if (positionalArguments != null) {
+ positionalArguments = new List.from(positionalArguments);
+ } else {
+ positionalArguments = [];
+ }
+ // Check the number of positional arguments is valid.
+ if (info.requiredParameterCount != positionalArguments.length) {
+ return functionNoSuchMethod(
+ function, positionalArguments, namedArguments);
+ }
+ var defaultArguments = new Map();
+ for (int i = 0; i < info.optionalParameterCount; i++) {
+ var parameterName = info.parameterName(i + info.requiredParameterCount);
+ var defaultValue =
+ getMetadata(info.defaultValue(i + info.requiredParameterCount));
+ defaultArguments[parameterName] = defaultValue;
+ }
+ bool bad = false;
+ namedArguments.forEach((String parameter, value) {
+ if (defaultArguments.containsKey(parameter)) {
+ defaultArguments[parameter] = value;
+ } else {
+ // Extraneous named argument.
+ bad = true;
+ }
+ });
+ if (bad) {
+ return functionNoSuchMethod(
+ function, positionalArguments, namedArguments);
+ }
+ positionalArguments.addAll(defaultArguments.values);
+ return JS('', '#.apply(#, #)', jsFunction, function, positionalArguments);
+ }
+
int argumentCount = 0;
- StringBuffer buffer = new StringBuffer();
List arguments = [];
if (positionalArguments != null) {
@@ -691,50 +927,15 @@
arguments.addAll(positionalArguments);
}
- if (JS('bool', r'# in #', JS_GET_NAME('CALL_CATCH_ALL'), function)) {
- // We expect the closure to have a "call$catchAll" (the value of
- // JS_GET_NAME('CALL_CATCH_ALL')) function that returns all the expected
- // named parameters as a (new) JavaScript object literal. The keys in
- // the object literal correspond to the argument names, and the values
- // are the default values. The compiler emits the properties sorted by
- // keys, and this order is preserved in JavaScript, so we don't need to
- // sort the keys. Since a new object is returned each time we call
- // call$catchAll, we can simply overwrite default entries with the
- // provided named arguments. If there are incorrectly named arguments in
- // [namedArguments], noSuchMethod will be called as expected.
- var allNamedArguments =
- JS('var', r'#[#]()', function, JS_GET_NAME('CALL_CATCH_ALL'));
- if (namedArguments != null && !namedArguments.isEmpty) {
- namedArguments.forEach((String key, argument) {
- JS('void', '#[#] = #', allNamedArguments, key, argument);
- });
- }
- List<String> listOfNamedArguments =
- JS('List', 'Object.getOwnPropertyNames(#)', allNamedArguments);
- argumentCount += listOfNamedArguments.length;
- listOfNamedArguments.forEach((String name) {
- buffer.write('\$$name');
- arguments.add(JS('', '#[#]', allNamedArguments, name));
- });
- } else {
- if (namedArguments != null && !namedArguments.isEmpty) {
- namedArguments.forEach((String name, argument) {
- buffer.write('\$$name');
- arguments.add(argument);
- argumentCount++;
- });
- }
- }
-
- String selectorName = 'call\$$argumentCount$buffer';
+ String selectorName = 'call\$$argumentCount';
var jsFunction = JS('var', '#[#]', function, selectorName);
if (jsFunction == null) {
- return function.noSuchMethod(createUnmangledInvocationMirror(
- const Symbol('call'),
- selectorName,
- JSInvocationMirror.METHOD,
- arguments,
- namedArguments == null ? [] : namedArguments.keys.toList()));
+
+ // TODO(ahe): This might occur for optional arguments if there is no call
+ // selector with that many arguments.
+
+ return
+ functionNoSuchMethod(function, positionalArguments, namedArguments);
}
// We bound 'this' to [function] because of how we compile
// closures: escaped local variables are stored and accessed through
@@ -1530,13 +1731,149 @@
/**
* Super class for Dart closures.
*/
-class Closure implements Function {
+abstract class Closure implements Function {
+ // TODO(ahe): These constants must be in sync with
+ // reflection_data_parser.dart.
+ static const FUNCTION_INDEX = 0;
+ static const NAME_INDEX = 1;
+ static const CALL_NAME_INDEX = 2;
+ static const REQUIRED_PARAMETER_INDEX = 3;
+ static const OPTIONAL_PARAMETER_INDEX = 4;
+ static const DEFAULT_ARGUMENTS_INDEX = 5;
+
+ Closure();
+
+ /**
+ * Creates a closure for use by implicit getters associated with a method.
+ *
+ * In other words, creates a tear-off closure.
+ *
+ * Called from [closureFromTearOff] as well as from reflection when tearing
+ * of a method via [:getField:].
+ *
+ * This method assumes that [functions] was created by the JavaScript function
+ * `addStubs` in `reflection_data_parser.dart`. That is, a list of JavaScript
+ * function objects with properties `$stubName` and `$callName`.
+ *
+ * Further assumes that [reflectionInfo] is the end of the array created by
+ * [dart2js.js_emitter.ContainerBuilder.addMemberMethod] starting with
+ * required parameter count.
+ *
+ * Caution: this function may be called when building constants.
+ * TODO(ahe): Don't call this function when building constants.
+ */
+ factory Closure.fromTearOff(receiver,
+ List functions,
+ List reflectionInfo,
+ bool isStatic,
+ jsArguments,
+ String propertyName) {
+ // TODO(ahe): All the place below using \$ should be rewritten to go
+ // through the namer.
+ var function = JS('', '#[#]', functions, 0);
+ // TODO(ahe): Try fetching the property directly instead of using "in".
+ if (isStatic && JS('bool', '"\$tearOff" in #', function)) {
+ // The implicit closure of a static function is always the same.
+ return JS('Closure', '#.\$tearOff', function);
+ }
+
+ String name = JS('String|Null', '#.\$stubName', function);
+ String callName = JS('String|Null', '#.\$callName', function);
+
+ JS('', r'#.$reflectionInfo = #', function, reflectionInfo);
+ ReflectionInfo info = new ReflectionInfo(function);
+
+ var functionType = info.functionType;
+
+ // Create a closure and "monkey" patch it with call stubs.
+ Closure closure;
+ var trampoline = function;
+ if (!isStatic) {
+ if (JS('bool', '#.length == 1', jsArguments)) {
+ // Intercepted call.
+ var argument = JS('', '#[0]', jsArguments);
+ trampoline = forwardInterceptedCallTo(argument, receiver, function);
+ closure = new BoundClosure(receiver, function, argument, name);
+ } else {
+ trampoline = forwardTo(receiver, function);
+ closure = new BoundClosure(receiver, function, null, name);
+ }
+ } else {
+ closure = new TearOffClosure();
+ JS('', '#.\$tearOff = #', function, closure);
+ JS('', r'#.$name = #', closure, propertyName);
+ }
+
+ var signatureFunction;
+ if (JS('bool', 'typeof # == "number"', functionType)) {
+ signatureFunction =
+ JS('', '(function(s){return function(){return init.metadata[s]}})(#)',
+ functionType);
+ } else if (!isStatic
+ && JS('bool', 'typeof # == "function"', functionType)) {
+ signatureFunction = functionType;
+ JS('', r'#.$receiver = #', closure, receiver);
+ } else {
+ throw 'Error in reflectionInfo.';
+ }
+
+ JS('', '#.\$signature = #', closure, signatureFunction);
+
+ JS('', '#[#] = #', closure, callName, trampoline);
+ for (int i = 1; i < functions.length; i++) {
+ var stub = functions[i];
+ var stubCallName = JS('String|Null', '#.\$callName', stub);
+ // TODO(ahe): Support interceptors here.
+ JS('', '#[#] = #', closure, stubCallName,
+ isStatic ? stub : forwardTo(receiver, stub));
+ }
+
+ JS('', '#["call*"] = #', closure, function);
+
+ return closure;
+ }
+
+ static forwardTo(receiver, function) {
+ return JS(
+ '',
+ 'function(r,f){return function(){return f.apply(r,arguments)}}(#,#)',
+ receiver, function);
+ }
+
+ static forwardInterceptedCallTo(self, interceptor, function) {
+ return JS(
+ '',
+ 'function(i,s,f){return function(){'
+ 'return f.call.bind(f,i,s).apply(i,arguments)}}(#,#,#)',
+ interceptor, self, function);
+ }
+
String toString() => "Closure";
}
+/// Called from implicit method getter (aka tear-off).
+Closure closureFromTearOff(receiver,
+ functions,
+ reflectionInfo,
+ isStatic,
+ jsArguments,
+ name) {
+ return new Closure.fromTearOff(
+ receiver,
+ JSArray.markFixedList(functions),
+ JSArray.markFixedList(reflectionInfo),
+ JS('bool', '!!#', isStatic),
+ jsArguments,
+ JS('String', '#', name));
+}
+
+/// Represents an implicit closure of a function.
+class TearOffClosure extends Closure {
+}
+
/// Represents a 'tear-off' closure, that is an instance method bound
/// to a specific receiver (instance).
-class BoundClosure extends Closure {
+class BoundClosure extends TearOffClosure {
/// The receiver or interceptor.
// TODO(ahe): This could just be the interceptor, we always know if
// we need the interceptor when generating the call method.
@@ -1551,6 +1888,8 @@
/// The name of the function. Only used by the mirror system.
final String _name;
+ BoundClosure(this._self, this._target, this._receiver, this._name);
+
bool operator==(other) {
if (identical(this, other)) return true;
if (other is! BoundClosure) return false;
@@ -2027,3 +2366,386 @@
RuntimeError(this.message);
String toString() => "RuntimeError: $message";
}
+
+abstract class RuntimeType {
+ const RuntimeType();
+
+ toRti();
+}
+
+class RuntimeFunctionType extends RuntimeType {
+ final RuntimeType returnType;
+ final List<RuntimeType> parameterTypes;
+ final List<RuntimeType> optionalParameterTypes;
+ final namedParameters;
+
+ static var /* bool */ inAssert = false;
+
+ RuntimeFunctionType(this.returnType,
+ this.parameterTypes,
+ this.optionalParameterTypes,
+ this.namedParameters);
+
+ bool get isVoid => returnType is VoidRuntimeType;
+
+ /// Called from generated code. [expression] is a Dart object and this method
+ /// returns true if [this] is a supertype of [expression].
+ @NoInline() @NoSideEffects()
+ bool _isTest(expression) {
+ var functionTypeObject = _extractFunctionTypeObjectFrom(expression);
+ return functionTypeObject == null
+ ? false
+ : isFunctionSubtype(functionTypeObject, toRti());
+ }
+
+ @NoInline() @NoSideEffects()
+ _asCheck(expression) {
+ // Type inferrer doesn't think this is called with dynamic arguments.
+ return _check(JS('', '#', expression), true);
+ }
+
+ @NoInline() @NoSideEffects()
+ _assertCheck(expression) {
+ if (inAssert) return;
+ inAssert = true; // Don't try to check this library itself.
+ try {
+ // Type inferrer don't think this is called with dynamic arguments.
+ return _check(JS('', '#', expression), false);
+ } finally {
+ inAssert = false;
+ }
+ }
+
+ _check(expression, bool isCast) {
+ if (expression == null) return null;
+ if (_isTest(expression)) return expression;
+
+ var self = new FunctionTypeInfoDecoderRing(toRti()).toString();
+ if (isCast) {
+ var functionTypeObject = _extractFunctionTypeObjectFrom(expression);
+ var pretty;
+ if (functionTypeObject != null) {
+ pretty = new FunctionTypeInfoDecoderRing(functionTypeObject).toString();
+ } else {
+ pretty = Primitives.objectTypeName(expression);
+ }
+ throw new CastErrorImplementation(pretty, self);
+ } else {
+ // TODO(ahe): Pass "pretty" function-type to TypeErrorImplementation?
+ throw new TypeErrorImplementation(expression, self);
+ }
+ }
+
+ _extractFunctionTypeObjectFrom(o) {
+ var interceptor = getInterceptor(o);
+ return JS('bool', '# in #', JS_SIGNATURE_NAME(), interceptor)
+ ? JS('', '#[#]()', interceptor, JS_SIGNATURE_NAME())
+ : null;
+ }
+
+ toRti() {
+ var result = JS('=Object', '{ #: "dynafunc" }', JS_FUNCTION_TYPE_TAG());
+ if (isVoid) {
+ JS('', '#[#] = true', result, JS_FUNCTION_TYPE_VOID_RETURN_TAG());
+ } else {
+ if (returnType is! DynamicRuntimeType) {
+ JS('', '#[#] = #', result, JS_FUNCTION_TYPE_RETURN_TYPE_TAG(),
+ returnType.toRti());
+ }
+ }
+ if (parameterTypes != null && !parameterTypes.isEmpty) {
+ JS('', '#[#] = #', result, JS_FUNCTION_TYPE_REQUIRED_PARAMETERS_TAG(),
+ listToRti(parameterTypes));
+ }
+
+ if (optionalParameterTypes != null && !optionalParameterTypes.isEmpty) {
+ JS('', '#[#] = #', result, JS_FUNCTION_TYPE_OPTIONAL_PARAMETERS_TAG(),
+ listToRti(optionalParameterTypes));
+ }
+
+ if (namedParameters != null) {
+ var namedRti = JS('=Object', '{}');
+ var keys = extractKeys(namedParameters);
+ for (var i = 0; i < keys.length; i++) {
+ var name = keys[i];
+ var rti = JS('', '#[#]', namedParameters, name).toRti();
+ JS('', '#[#] = #', namedRti, name, rti);
+ }
+ JS('', '#[#] = #', result, JS_FUNCTION_TYPE_NAMED_PARAMETERS_TAG(),
+ namedRti);
+ }
+
+ return result;
+ }
+
+ static listToRti(list) {
+ list = JS('JSFixedArray', '#', list);
+ var result = JS('JSExtendableArray', '[]');
+ for (var i = 0; i < list.length; i++) {
+ JS('', '#.push(#)', result, list[i].toRti());
+ }
+ return result;
+ }
+
+ String toString() {
+ String result = '(';
+ bool needsComma = false;
+ if (parameterTypes != null) {
+ for (var i = 0; i < parameterTypes.length; i++) {
+ RuntimeType type = parameterTypes[i];
+ if (needsComma) result += ', ';
+ result += '$type';
+ needsComma = true;
+ }
+ }
+ if (optionalParameterTypes != null && !optionalParameterTypes.isEmpty) {
+ if (needsComma) result += ', ';
+ needsComma = false;
+ result += '[';
+ for (var i = 0; i < optionalParameterTypes.length; i++) {
+ RuntimeType type = optionalParameterTypes[i];
+ if (needsComma) result += ', ';
+ result += '$type';
+ needsComma = true;
+ }
+ result += ']';
+ } else if (namedParameters != null) {
+ if (needsComma) result += ', ';
+ needsComma = false;
+ result += '{';
+ var keys = extractKeys(namedParameters);
+ for (var i = 0; i < keys.length; i++) {
+ var name = keys[i];
+ if (needsComma) result += ', ';
+ var rti = JS('', '#[#]', namedParameters, name).toRti();
+ result += '$rti ${JS("String", "#", name)}';
+ needsComma = true;
+ }
+ result += '}';
+ }
+
+ result += ') -> $returnType';
+ return result;
+ }
+}
+
+RuntimeFunctionType buildFunctionType(returnType,
+ parameterTypes,
+ optionalParameterTypes) {
+ return new RuntimeFunctionType(
+ returnType,
+ parameterTypes,
+ optionalParameterTypes,
+ null);
+}
+
+RuntimeFunctionType buildNamedFunctionType(returnType,
+ parameterTypes,
+ namedParameters) {
+ return new RuntimeFunctionType(
+ returnType,
+ parameterTypes,
+ null,
+ namedParameters);
+}
+
+RuntimeType buildInterfaceType(rti, typeArguments) {
+ String name = JS('String|Null', r'#.name', rti);
+ if (typeArguments == null || typeArguments.isEmpty) {
+ return new RuntimeTypePlain(name);
+ }
+ return new RuntimeTypeGeneric(name, typeArguments, null);
+}
+
+class DynamicRuntimeType extends RuntimeType {
+ const DynamicRuntimeType();
+
+ String toString() => 'dynamic';
+
+ toRti() => null;
+}
+
+RuntimeType getDynamicRuntimeType() => const DynamicRuntimeType();
+
+class VoidRuntimeType extends RuntimeType {
+ const VoidRuntimeType();
+
+ String toString() => 'void';
+
+ toRti() => throw 'internal error';
+}
+
+RuntimeType getVoidRuntimeType() => const VoidRuntimeType();
+
+/**
+ * Meta helper for function type tests.
+ *
+ * A "meta helper" is a helper function that is never called but simulates how
+ * generated code behaves as far as resolution and type inference is concerned.
+ */
+functionTypeTestMetaHelper() {
+ var dyn = JS('', 'x');
+ var dyn2 = JS('', 'x');
+ List fixedListOrNull = JS('JSFixedArray|Null', 'x');
+ List fixedListOrNull2 = JS('JSFixedArray|Null', 'x');
+ List fixedList = JS('JSFixedArray', 'x');
+ // TODO(ahe): Can we use [UnknownJavaScriptObject] below?
+ var /* UnknownJavaScriptObject */ jsObject = JS('=Object', 'x');
+
+ buildFunctionType(dyn, fixedListOrNull, fixedListOrNull2);
+ buildNamedFunctionType(dyn, fixedList, jsObject);
+ buildInterfaceType(dyn, fixedListOrNull);
+ getDynamicRuntimeType();
+ getVoidRuntimeType();
+ convertRtiToRuntimeType(dyn);
+ dyn._isTest(dyn2);
+ dyn._asCheck(dyn2);
+ dyn._assertCheck(dyn2);
+}
+
+RuntimeType convertRtiToRuntimeType(rti) {
+ if (rti == null) {
+ return getDynamicRuntimeType();
+ } else if (JS('bool', 'typeof # == "function"', rti)) {
+ return new RuntimeTypePlain(JS('String', r'rti.name'));
+ } else if (JS('bool', '#.constructor == Array', rti)) {
+ List list = JS('JSFixedArray', '#', rti);
+ String name = JS('String', r'#.name', list[0]);
+ List arguments = [];
+ for (int i = 1; i < list.length; i++) {
+ arguments.add(convertRtiToRuntimeType(list[i]));
+ }
+ return new RuntimeTypeGeneric(name, arguments, rti);
+ } else if (JS('bool', '"func" in #', rti)) {
+ return new FunctionTypeInfoDecoderRing(rti).toRuntimeType();
+ } else {
+ throw new RuntimeError(
+ "Cannot convert "
+ "'${JS('String', 'JSON.stringify(#)', rti)}' to RuntimeType.");
+ }
+}
+
+class RuntimeTypePlain extends RuntimeType {
+ final String name;
+
+ RuntimeTypePlain(this.name);
+
+ toRti() {
+ var rti = JS('', 'init.allClasses[#]', name);
+ if (rti == null) throw "no type for '$name'";
+ return rti;
+ }
+
+ String toString() => name;
+}
+
+class RuntimeTypeGeneric extends RuntimeType {
+ final String name;
+ final List<RuntimeType> arguments;
+ var rti;
+
+ RuntimeTypeGeneric(this.name, this.arguments, this.rti);
+
+ toRti() {
+ if (rti != null) return rti;
+ var result = JS('JSExtendableArray', '[init.allClasses[#]]', name);
+ if (result[0] == null) {
+ throw "no type for '$name<...>'";
+ }
+ for (RuntimeType argument in arguments) {
+ JS('', '#.push(#)', result, argument.toRti());
+ }
+ return rti = result;
+ }
+
+ String toString() => '$name<${arguments.join(", ")}>';
+}
+
+class FunctionTypeInfoDecoderRing {
+ final _typeData;
+ String _cachedToString;
+
+ FunctionTypeInfoDecoderRing(this._typeData);
+
+ bool get _hasReturnType => JS('bool', '"ret" in #', _typeData);
+ get _returnType => JS('', '#.ret', _typeData);
+
+ bool get _isVoid => JS('bool', '!!#.void', _typeData);
+
+ bool get _hasArguments => JS('bool', '"args" in #', _typeData);
+ List get _arguments => JS('JSExtendableArray', '#.args', _typeData);
+
+ bool get _hasOptionalArguments => JS('bool', '"opt" in #', _typeData);
+ List get _optionalArguments => JS('JSExtendableArray', '#.opt', _typeData);
+
+ bool get _hasNamedArguments => JS('bool', '"named" in #', _typeData);
+ get _namedArguments => JS('=Object', '#.named', _typeData);
+
+ RuntimeType toRuntimeType() {
+ // TODO(ahe): Implement this (and update return type).
+ return const DynamicRuntimeType();
+ }
+
+ String _convert(type) {
+ String result = runtimeTypeToString(type);
+ if (result != null) return result;
+ if (JS('bool', '"func" in #', type)) {
+ return new FunctionTypeInfoDecoderRing(type).toString();
+ } else {
+ throw 'bad type';
+ }
+ }
+
+ String toString() {
+ if (_cachedToString != null) return _cachedToString;
+ var s = "(";
+ var sep = '';
+ if (_hasArguments) {
+ for (var argument in _arguments) {
+ s += sep;
+ s += _convert(argument);
+ sep = ', ';
+ }
+ }
+ if (_hasOptionalArguments) {
+ s += '$sep[';
+ sep = '';
+ for (var argument in _optionalArguments) {
+ s += sep;
+ s += _convert(argument);
+ sep = ', ';
+ }
+ s += ']';
+ }
+ if (_hasNamedArguments) {
+ s += '$sep{';
+ sep = '';
+ for (var name in extractKeys(_namedArguments)) {
+ s += sep;
+ s += '$name: ';
+ s += _convert(JS('', '#[#]', _namedArguments, name));
+ sep = ', ';
+ }
+ s += '}';
+ }
+ s += ') -> ';
+ if (_isVoid) {
+ s += 'void';
+ } else if (_hasReturnType) {
+ s += _convert(_returnType);
+ } else {
+ s += 'dynamic';
+ }
+ return _cachedToString = "$s";
+ }
+}
+
+// TODO(ahe): Remove this class and call noSuchMethod instead.
+class UnimplementedNoSuchMethodError extends Error
+ implements NoSuchMethodError {
+ final String _message;
+
+ UnimplementedNoSuchMethodError(this._message);
+
+ String toString() => "Unsupported operation: $_message";
+}
diff --git a/sdk/lib/_internal/lib/js_mirrors.dart b/sdk/lib/_internal/lib/js_mirrors.dart
index b1fb4c4..f27c8cc 100644
--- a/sdk/lib/_internal/lib/js_mirrors.dart
+++ b/sdk/lib/_internal/lib/js_mirrors.dart
@@ -5,7 +5,10 @@
library dart._js_mirrors;
import 'dart:async';
-import 'dart:collection' show UnmodifiableListView;
+
+import 'dart:collection' show
+ UnmodifiableListView;
+
import 'dart:mirrors';
import 'dart:_foreign_helper' show
@@ -13,7 +16,9 @@
JS_CURRENT_ISOLATE,
JS_CURRENT_ISOLATE_CONTEXT,
JS_GET_NAME;
+
import 'dart:_collection-dev' as _symbol_dev;
+
import 'dart:_js_helper' show
BoundClosure,
Closure,
@@ -21,17 +26,25 @@
JsCache,
Null,
Primitives,
+ ReflectionInfo,
RuntimeError,
+ TypeVariable,
+ UnimplementedNoSuchMethodError,
createRuntimeType,
createUnmangledInvocationMirror,
getMangledTypeName,
- throwInvalidReflectionError,
+ getMetadata,
hasReflectableProperty,
runtimeTypeToString,
- TypeVariable;
+ setRuntimeTypeInfo,
+ throwInvalidReflectionError;
+
import 'dart:_interceptors' show
Interceptor,
- JSExtendableArray;
+ JSArray,
+ JSExtendableArray,
+ getInterceptor;
+
import 'dart:_js_names';
const String METHODS_WITH_OPTIONAL_ARGUMENTS = r'$methodsWithOptionalArguments';
@@ -771,35 +784,34 @@
String name = n(memberName);
String reflectiveName;
if (namedArguments != null && !namedArguments.isEmpty) {
- var methodsWithOptionalArguments =
- JS('=Object', '#.\$methodsWithOptionalArguments', reflectee);
- String mangledName =
- JS('String|Null', '#[#]', methodsWithOptionalArguments, '*$name');
- if (mangledName == null) {
+ var interceptor = getInterceptor(reflectee);
+
+ var jsFunction = JS('', '#[# + "*"]', interceptor, name);
+ if (jsFunction == null) {
// TODO(ahe): Invoke noSuchMethod.
throw new UnimplementedNoSuchMethodError(
'Invoking noSuchMethod with named arguments not implemented');
}
- var defaultValueIndices =
- JS('List|Null', '#[#].\$defaultValues', reflectee, mangledName);
- var defaultValues =
- defaultValueIndices.map((int i) => getMetadata(i))
- .iterator;
- var defaultArguments = new Map();
- reflectiveName = mangledNames[mangledName];
- var reflectiveNames = reflectiveName.split(':');
- int requiredPositionalArgumentCount =
- int.parse(reflectiveNames.elementAt(1));
+ ReflectionInfo info = new ReflectionInfo(jsFunction);
+ if (jsFunction == null) {
+ // TODO(ahe): Invoke noSuchMethod.
+ throw new UnimplementedNoSuchMethodError(
+ 'Invoking noSuchMethod with named arguments not implemented');
+ }
+
positionalArguments = new List.from(positionalArguments);
// Check the number of positional arguments is valid.
- if (requiredPositionalArgumentCount != positionalArguments.length) {
+ if (info.requiredParameterCount != positionalArguments.length) {
// TODO(ahe): Invoke noSuchMethod.
throw new UnimplementedNoSuchMethodError(
'Invoking noSuchMethod with named arguments not implemented');
}
- for (String parameter in reflectiveNames.skip(3)) {
- defaultValues.moveNext();
- defaultArguments[parameter] = defaultValues.current;
+ var defaultArguments = new Map();
+ for (int i = 0; i < info.optionalParameterCount; i++) {
+ var parameterName = info.parameterName(i + info.requiredParameterCount);
+ var defaultValue =
+ getMetadata(info.defaultValue(i + info.requiredParameterCount));
+ defaultArguments[parameterName] = defaultValue;
}
namedArguments.forEach((Symbol symbol, value) {
String parameter = n(symbol);
@@ -813,6 +825,9 @@
}
});
positionalArguments.addAll(defaultArguments.values);
+ // TODO(ahe): Handle intercepted methods.
+ return reflect(
+ JS('', '#.apply(#, #)', jsFunction, reflectee, positionalArguments));
} else {
reflectiveName =
JS('String', '# + ":" + # + ":0"', name, positionalArguments.length);
@@ -1201,25 +1216,23 @@
}
keys = extractKeys(JS('', 'init.statics[#]', _mangledName));
- int length = keys.length;
- for (int i = 0; i < length; i++) {
- String mangledName = keys[i];
+ for (String mangledName in keys) {
if (isReflectiveDataInPrototype(mangledName)) continue;
String unmangledName = mangledName;
var jsFunction = JS('', '#[#]', owner._globalObject, mangledName);
bool isConstructor = false;
- if (i + 1 < length) {
- String reflectionName = keys[i + 1];
- if (reflectionName.startsWith('+')) {
- i++;
- reflectionName = reflectionName.substring(1);
- isConstructor = reflectionName.startsWith('new ');
- if (isConstructor) {
- reflectionName = reflectionName.substring(4).replaceAll(r'$', '.');
- }
+ if (hasReflectableProperty(jsFunction)) {
+ String reflectionName =
+ JS('String|Null', r'#.$reflectionName', jsFunction);
+ if (reflectionName == null) continue;
+ isConstructor = reflectionName.startsWith('new ');
+ if (isConstructor) {
+ reflectionName = reflectionName.substring(4).replaceAll(r'$', '.');
}
unmangledName = reflectionName;
+ } else {
+ continue;
}
bool isStatic = !isConstructor; // Constructors are not static.
JsMethodMirror mirror =
@@ -1357,7 +1370,7 @@
(m) => m.constructorName == constructorName,
orElse: () {
// TODO(ahe): What receiver to use?
- throw new NoSuchMethodError(
+ throw new NoSuchStaticMethodError.missingConstructor(
this, constructorName, positionalArguments, namedArguments);
});
JsCache.update(_jsConstructorCache, n(constructorName), mirror);
@@ -1617,8 +1630,9 @@
MethodMirror get function {
String cacheName = Primitives.mirrorFunctionCacheName;
- JsMethodMirror cachedFunction =
- JS('JsMethodMirror|Null', r'#.constructor[#]', reflectee, cacheName);
+ JsMethodMirror cachedFunction;
+ // TODO(ahe): Restore caching.
+ //= JS('JsMethodMirror|Null', r'#.constructor[#]', reflectee, cacheName);
if (cachedFunction != null) return cachedFunction;
disableTreeShaking();
// TODO(ahe): What about optional parameters (named or not).
@@ -1685,7 +1699,7 @@
final bool isOperator;
DeclarationMirror _owner;
List _metadata;
- var _returnType;
+ TypeMirror _returnType;
UnmodifiableListView<ParameterMirror> _parameters;
JsMethodMirror(Symbol simpleName,
@@ -1741,26 +1755,51 @@
TypeMirror get returnType {
metadata; // Compute _returnType as a side-effect of extracting metadata.
- return typeMirrorFromRuntimeTypeRepresentation(owner, _returnType);
+ return _returnType;
}
List<InstanceMirror> get metadata {
if (_metadata == null) {
var raw = extractMetadata(_jsFunction);
var formals = new List(_parameterCount);
- if (!raw.isEmpty) {
- _returnType = raw[0];
- int parameterLength = 1 + _parameterCount * 2;
- int formalsCount = 0;
- for (int i = 1; i < parameterLength; i += 2) {
- var name = raw[i];
- var type = raw[i + 1];
- formals[formalsCount++] = new JsParameterMirror(name, this, type);
+ ReflectionInfo info = new ReflectionInfo(_jsFunction);
+ if (info != null) {
+ assert(_parameterCount
+ == info.requiredParameterCount + info.optionalParameterCount);
+ var functionType = info.functionType;
+ var type;
+ if (functionType is int) {
+ type = new JsFunctionTypeMirror(info.computeFunctionRti(null), this);
+ assert(_parameterCount == type.parameters.length);
+ } else if (isTopLevel) {
+ type = new JsFunctionTypeMirror(info.computeFunctionRti(null), owner);
+ } else {
+ TypeMirror ownerType = owner;
+ JsClassMirror ownerClass = ownerType.originalDeclaration;
+ type = new JsFunctionTypeMirror(
+ info.computeFunctionRti(ownerClass._jsConstructorOrInterceptor),
+ owner);
}
- raw = raw.sublist(parameterLength);
- } else {
- for (int i = 0; i < _parameterCount; i++) {
- formals[i] = new JsParameterMirror('argument$i', this, null);
+ // Constructors aren't reified with their return type.
+ if (isConstructor) {
+ _returnType = owner;
+ } else {
+ _returnType = type.returnType;
+ }
+ int i = 0;
+ bool isNamed = info.areOptionalParametersNamed;
+ for (JsParameterMirror parameter in type.parameters) {
+ var name = info.parameterName(i);
+ var p;
+ if (i < info.requiredParameterCount) {
+ p = new JsParameterMirror(name, this, parameter._type);
+ } else {
+ var defaultValue = info.defaultValue(i);
+ p = new JsParameterMirror(
+ name, this, parameter._type,
+ isOptional: true, isNamed: isNamed, defaultValue: defaultValue);
+ }
+ formals[i++] = p;
}
}
_parameters = new UnmodifiableListView<ParameterMirror>(formals);
@@ -1819,6 +1858,9 @@
// Abstract methods are tree-shaken away.
bool get isAbstract => false;
+ // TODO(ahe, 14633): This might not be true for all cases.
+ bool get isSynthetic => false;
+
// TODO(ahe): Test this.
bool get isRegularMethod => !isGetter && !isSetter && !isConstructor;
@@ -1843,8 +1885,20 @@
// A JS object representing the type.
final _type;
- JsParameterMirror(String unmangledName, this.owner, this._type)
- : super(s(unmangledName));
+ final bool isOptional;
+
+ final bool isNamed;
+
+ final int _defaultValue;
+
+ JsParameterMirror(String unmangledName,
+ this.owner,
+ this._type,
+ {this.isOptional: false,
+ this.isNamed: false,
+ defaultValue})
+ : _defaultValue = defaultValue,
+ super(s(unmangledName));
String get _prettyName => 'ParameterMirror';
@@ -1858,19 +1912,14 @@
// TODO(ahe): Implement this.
bool get isFinal => false;
+ // TODO(ahe): Implement this.
bool get isConst => false;
- // TODO(ahe): Implement this.
- bool get isOptional => false;
+ bool get hasDefaultValue => _defaultValue != null;
- // TODO(ahe): Implement this.
- bool get isNamed => false;
-
- // TODO(ahe): Implement this.
- bool get hasDefaultValue => false;
-
- // TODO(ahe): Implement this.
- get defaultValue => null;
+ get defaultValue {
+ return hasDefaultValue ? reflect(getMetadata(_defaultValue)) : null;
+ }
// TODO(ahe): Implement this.
List<InstanceMirror> get metadata => throw new UnimplementedError();
@@ -1973,7 +2022,7 @@
if (_isVoid) return _cachedReturnType = JsMirrorSystem._voidType;
if (!_hasReturnType) return _cachedReturnType = JsMirrorSystem._dynamicType;
return _cachedReturnType =
- typeMirrorFromRuntimeTypeRepresentation(this, _returnType);
+ typeMirrorFromRuntimeTypeRepresentation(owner, _returnType);
}
List<ParameterMirror> get parameters {
@@ -2058,23 +2107,25 @@
throw new ArgumentError('Type variable not present in list.');
}
-getMetadata(int index) => JS('', 'init.metadata[#]', index);
-
TypeMirror typeMirrorFromRuntimeTypeRepresentation(
DeclarationMirror owner,
var /*int|List|JsFunction*/ type) {
+ // TODO(ahe): This method might benefit from using convertRtiToRuntimeType
+ // instead of working on strings.
ClassMirror ownerClass;
DeclarationMirror context = owner;
- while(context != null) {
+ while (context != null) {
if (context is ClassMirror) {
ownerClass = context;
break;
}
+ // TODO(ahe): Get type parameters and arguments from typedefs.
+ if (context is TypedefMirror) break;
context = context.owner;
}
String representation;
- if (type == null){
+ if (type == null) {
return JsMirrorSystem._dynamicType;
} else if (ownerClass == null) {
representation = runtimeTypeToString(type);
@@ -2134,7 +2185,13 @@
preserveMetadata();
var metadataFunction = JS('', '#["@"]', victim);
if (metadataFunction != null) return JS('', '#()', metadataFunction);
- if (JS('String', 'typeof #', victim) != 'function') return const [];
+ if (JS('bool', 'typeof # != "function"', victim)) return const [];
+ if (JS('bool', '# in #', r'$metadataIndex', victim)) {
+ return JSArray.markFixedList(
+ JS('JSExtendableArray',
+ r'#.$reflectionInfo.splice(#.$metadataIndex)', victim, victim))
+ .map((int i) => getMetadata(i)).toList();
+ }
String source = JS('String', 'Function.prototype.toString.call(#)', victim);
int index = source.lastIndexOf(new RegExp('"[0-9,]*";?[ \n\r]*}'));
if (index == -1) return const [];
@@ -2214,6 +2271,33 @@
return firstChar == '*' || firstChar == '+';
}
+class NoSuchStaticMethodError extends Error implements NoSuchMethodError {
+ static const int MISSING_CONSTRUCTOR = 0;
+ final ClassMirror _cls;
+ final Symbol _name;
+ final List _positionalArguments;
+ final Map<Symbol, dynamic> _namedArguments;
+ final int _kind;
+
+ NoSuchStaticMethodError.missingConstructor(
+ this._cls,
+ this._name,
+ this._positionalArguments,
+ this._namedArguments)
+ : _kind = MISSING_CONSTRUCTOR;
+
+ String toString() {
+ switch(_kind) {
+ case MISSING_CONSTRUCTOR:
+ return
+ "NoSuchMethodError: No constructor named '${n(_name)}' in class"
+ " '${n(_cls.qualifiedName)}'.";
+ default:
+ return 'NoSuchMethodError';
+ }
+ }
+}
+
// Copied from package "unmodifiable_collection".
// TODO(14314): Move to dart:collection.
class UnmodifiableMapView<K, V> implements Map<K, V> {
@@ -2253,13 +2337,3 @@
void clear() => _throw();
}
-
-// TODO(ahe): Remove this class and call noSuchMethod instead.
-class UnimplementedNoSuchMethodError extends Error
- implements NoSuchMethodError {
- final String _message;
-
- UnimplementedNoSuchMethodError(this._message);
-
- String toString() => "Unsupported operation: $_message";
-}
diff --git a/sdk/lib/_internal/lib/js_names.dart b/sdk/lib/_internal/lib/js_names.dart
index 90ad3cf..6aa3632 100644
--- a/sdk/lib/_internal/lib/js_names.dart
+++ b/sdk/lib/_internal/lib/js_names.dart
@@ -4,9 +4,13 @@
library dart._js_names;
-import 'dart:_foreign_helper' show JS, JS_GET_NAME;
+import 'dart:_foreign_helper' show
+ JS,
+ JS_GET_NAME;
-import 'dart:_js_helper' show JsCache;
+import 'dart:_js_helper' show
+ JsCache,
+ NoInline;
import 'dart:_interceptors' show JSArray;
@@ -65,6 +69,7 @@
return result;
}
+@NoInline()
List extractKeys(victim) {
var result = JS('', '''
(function(victim, hasOwnProperty) {
diff --git a/sdk/lib/_internal/lib/js_number.dart b/sdk/lib/_internal/lib/js_number.dart
index d389a93..b6606f0 100644
--- a/sdk/lib/_internal/lib/js_number.dart
+++ b/sdk/lib/_internal/lib/js_number.dart
@@ -201,14 +201,21 @@
bool _isInt32(value) => JS('bool', '(# | 0) === #', value, value);
num operator ~/(num other) {
+ if (false) _tdivFast(other); // Ensure resolution.
if (_isInt32(this) && _isInt32(other) && 0 != other && -1 != other) {
return JS('num', r'(# / #) | 0', this, other);
} else {
- return _slowTdiv(other);
+ return _tdivSlow(other);
}
}
- num _slowTdiv(num other) {
+ num _tdivFast(num other) {
+ return _isInt32(this)
+ ? JS('num', r'(# / #) | 0', this, other)
+ : (JS('num', r'# / #', this, other)).toInt();
+ }
+
+ num _tdivSlow(num other) {
if (other is !num) throw new ArgumentError(other);
return (JS('num', r'# / #', this, other)).toInt();
}
@@ -221,30 +228,49 @@
num operator <<(num other) {
if (other is !num) throw new ArgumentError(other);
if (JS('num', '#', other) < 0) throw new ArgumentError(other);
+ return _shlPositive(other);
+ }
+
+ num _shlPositive(num other) {
// JavaScript only looks at the last 5 bits of the shift-amount. Shifting
// by 33 is hence equivalent to a shift by 1.
- if (JS('bool', r'# > 31', other)) return 0;
- return JS('JSUInt32', r'(# << #) >>> 0', this, other);
+ return JS('bool', r'# > 31', other)
+ ? 0
+ : JS('JSUInt32', r'(# << #) >>> 0', this, other);
}
num operator >>(num other) {
+ if (false) _shrReceiverPositive(other);
if (other is !num) throw new ArgumentError(other);
if (JS('num', '#', other) < 0) throw new ArgumentError(other);
- if (JS('num', '#', this) > 0) {
- // JavaScript only looks at the last 5 bits of the shift-amount. In JS
- // shifting by 33 is hence equivalent to a shift by 1. Shortcut the
- // computation when that happens.
- if (JS('bool', r'# > 31', other)) return 0;
- // Given that 'a' is positive we must not use '>>'. Otherwise a number
- // that has the 31st bit set would be treated as negative and shift in
- // ones.
- return JS('JSUInt32', r'# >>> #', this, other);
- }
- // For negative numbers we just clamp the shift-by amount. 'a' could be
- // negative but not have its 31st bit set. The ">>" would then shift in
- // 0s instead of 1s. Therefore we cannot simply return 0xFFFFFFFF.
- if (JS('num', '#', other) > 31) other = 31;
- return JS('JSUInt32', r'(# >> #) >>> 0', this, other);
+ return _shrOtherPositive(other);
+ }
+
+ num _shrOtherPositive(num other) {
+ return JS('num', '#', this) > 0
+ ? _shrBothPositive(other)
+ // For negative numbers we just clamp the shift-by amount.
+ // `this` could be negative but not have its 31st bit set.
+ // The ">>" would then shift in 0s instead of 1s. Therefore
+ // we cannot simply return 0xFFFFFFFF.
+ : JS('JSUInt32', r'(# >> #) >>> 0', this, other > 31 ? 31 : other);
+ }
+
+ num _shrReceiverPositive(num other) {
+ if (JS('num', '#', other) < 0) throw new ArgumentError(other);
+ return _shrBothPositive(other);
+ }
+
+ num _shrBothPositive(num other) {
+ return JS('bool', r'# > 31', other)
+ // JavaScript only looks at the last 5 bits of the shift-amount. In JS
+ // shifting by 33 is hence equivalent to a shift by 1. Shortcut the
+ // computation when that happens.
+ ? 0
+ // Given that `this` is positive we must not use '>>'. Otherwise a
+ // number that has the 31st bit set would be treated as negative and
+ // shift in ones.
+ : JS('JSUInt32', r'# >>> #', this, other);
}
num operator &(num other) {
diff --git a/sdk/lib/_internal/lib/js_rti.dart b/sdk/lib/_internal/lib/js_rti.dart
index d090dea..3c4da5a 100644
--- a/sdk/lib/_internal/lib/js_rti.dart
+++ b/sdk/lib/_internal/lib/js_rti.dart
@@ -177,6 +177,7 @@
return onTypeVariable(type);
}
} else {
+ // TODO(ahe): Handle function types, and be sure to always return a string.
return null;
}
}
@@ -355,73 +356,6 @@
return true;
}
-Object functionSubtypeCast(Object object, String signatureName,
- String contextName, var context,
- var typeArguments) {
- if (!checkFunctionSubtype(object, signatureName,
- contextName, context, typeArguments)) {
- String actualType = Primitives.objectTypeName(object);
- // TODO(johnniwinther): Provide better function type naming.
- String typeName = signatureName;
- throw new CastErrorImplementation(actualType, typeName);
- }
- return object;
-}
-
-Object assertFunctionSubtype(Object object, String signatureName,
- String contextName, var context,
- var typeArguments) {
- if (!checkFunctionSubtype(object, signatureName,
- contextName, context, typeArguments)) {
- // TODO(johnniwinther): Provide better function type naming.
- String typeName = signatureName;
- throw new TypeErrorImplementation(object, typeName);
- }
- return object;
-}
-
-/**
- * Checks that the type of [target] is a subtype of the function type denoted by
- * [signatureName]. If the type contains type variables, [contextName] holds the
- * name of the class where these were declared and either [context] holds the
- * object in which the runtime values of these can be found or [typeArguments]
- * contains these values as a list of runtime type information.
- */
-bool checkFunctionSubtype(var target, String signatureName,
- String contextName, var context,
- var typeArguments) {
- if (isNull(target)) return true;
- var interceptor = getInterceptor(target);
- if (hasField(interceptor, '${JS_OPERATOR_IS_PREFIX()}_$signatureName')) {
- return true;
- }
- var signatureLocation = JS_CURRENT_ISOLATE();
- if (isNotNull(contextName)) {
- signatureLocation = getField(JS('=Object', 'init.allClasses'), contextName);
- }
- var typeSignature =
- getField(signatureLocation, '${JS_SIGNATURE_NAME()}_$signatureName');
- if (isNull(typeSignature)) {
- // All checks can be determined statically so the type signature has not
- // been computed.
- return false;
- }
- var targetSignatureFunction = getField(interceptor, '${JS_SIGNATURE_NAME()}');
- if (isNull(targetSignatureFunction)) return false;
- var targetSignature = invokeOn(targetSignatureFunction, interceptor, null);
- if (isJsFunction(typeSignature)) {
- if (isNotNull(typeArguments)) {
- typeSignature = invoke(typeSignature, typeArguments);
- } else if (isNotNull(context)) {
- typeSignature =
- invoke(typeSignature, getRuntimeTypeArguments(context, contextName));
- } else {
- typeSignature = invoke(typeSignature, null);
- }
- }
- return isFunctionSubtype(targetSignature, typeSignature);
-}
-
/**
* Computes the signature by applying the type arguments of [context] as an
* instance of [contextName] to the signature function [signature].
@@ -448,7 +382,7 @@
* See the comment in the beginning of this file for a description of type
* representations.
*/
-bool checkSubtypeOfRuntimeType(Object o, var t) {
+bool checkSubtypeOfRuntimeType(o, t) {
if (isNull(o)) return isSupertypeOfNull(t);
if (isNull(t)) return true;
// Get the runtime type information from the object here, because we may
@@ -529,11 +463,11 @@
var typeOfT = isJsArray(t) ? getIndex(t, 0) : t;
// Check for a subtyping flag.
var name = runtimeTypeToString(typeOfT);
- var test = '${JS_OPERATOR_IS_PREFIX()}${name}';
- if (hasNoField(typeOfS, test)) return false;
// Get the necessary substitution of the type arguments, if there is one.
var substitution;
if (isNotIdentical(typeOfT, typeOfS)) {
+ var test = '${JS_OPERATOR_IS_PREFIX()}${name}';
+ if (hasNoField(typeOfS, test)) return false;
var field = '${JS_OPERATOR_AS_PREFIX()}${runtimeTypeToString(typeOfT)}';
substitution = getField(typeOfS, field);
}
diff --git a/sdk/lib/_internal/lib/js_string.dart b/sdk/lib/_internal/lib/js_string.dart
index 0dd8066..6693821 100644
--- a/sdk/lib/_internal/lib/js_string.dart
+++ b/sdk/lib/_internal/lib/js_string.dart
@@ -17,7 +17,7 @@
if (index is !int) throw new ArgumentError(index);
if (index < 0) throw new RangeError.value(index);
if (index >= length) throw new RangeError.value(index);
- return JS('int', r'#.charCodeAt(#)', this, index);
+ return JS('JSUInt31', r'#.charCodeAt(#)', this, index);
}
Iterable<Match> allMatches(String str) {
diff --git a/sdk/lib/_internal/pub/lib/src/barback.dart b/sdk/lib/_internal/pub/lib/src/barback.dart
index bd06b66..6f14935 100644
--- a/sdk/lib/_internal/pub/lib/src/barback.dart
+++ b/sdk/lib/_internal/pub/lib/src/barback.dart
@@ -40,7 +40,7 @@
///
/// Whenever a new non-patch version of barback is published, this *must* be
/// incremented to synchronize with that.
-final supportedVersion = new Version(0, 10, 0);
+final supportedVersion = new Version(0, 11, 0);
/// An identifier for a transformer and the configuration that will be passed to
/// it.
diff --git a/sdk/lib/_internal/pub/lib/src/command/lish.dart b/sdk/lib/_internal/pub/lib/src/command/lish.dart
index 1cc95ac..6d75814 100644
--- a/sdk/lib/_internal/pub/lib/src/command/lish.dart
+++ b/sdk/lib/_internal/pub/lib/src/command/lish.dart
@@ -94,15 +94,6 @@
}
Future onRun() {
- // Sanity check. Don't push to the production server when running tests or
- // developing on pub.
- if (sdk.isBleedingEdge &&
- server.toString() == HostedSource.defaultUrl &&
- !dryRun) {
- log.error('Cannot publish to $server from bleeding edge pub!');
- return null;
- }
-
if (force && dryRun) {
log.error('Cannot use both --force and --dry-run.');
this.printUsage();
diff --git a/sdk/lib/_internal/pub/lib/src/io.dart b/sdk/lib/_internal/pub/lib/src/io.dart
index 533790c..bc6ffd1 100644
--- a/sdk/lib/_internal/pub/lib/src/io.dart
+++ b/sdk/lib/_internal/pub/lib/src/io.dart
@@ -187,17 +187,10 @@
/// at that path. Completes when the file is done being written.
Future<String> createFileFromStream(Stream<List<int>> stream, String file) {
// TODO(nweiz): remove extra logging when we figure out the windows bot issue.
- log.io("Creating $file from stream (is the stream broadcast? "
- "${stream.isBroadcast}).");
-
- var pair = tee(stream);
- pair.first.listen(
- (data) => log.io("stream emitted ${data.length} bytes"),
- onError: (error, st) => log.io("stream emitted $error\n$st"),
- onDone: () => log.io("stream is done"));
+ log.io("Creating $file from stream.");
return _descriptorPool.withResource(() {
- return pair.last.pipe(new File(file).openWrite()).then((_) {
+ return stream.pipe(new File(file).openWrite()).then((_) {
log.fine("Created $file from stream.");
return file;
});
diff --git a/sdk/lib/_internal/pub/lib/src/log.dart b/sdk/lib/_internal/pub/lib/src/log.dart
index 10f220d..86c2b7f 100644
--- a/sdk/lib/_internal/pub/lib/src/log.dart
+++ b/sdk/lib/_internal/pub/lib/src/log.dart
@@ -5,18 +5,28 @@
/// Message logging.
library pub.log;
-import 'dart:io';
import 'dart:async';
+import 'dart:collection';
+import 'dart:io';
import 'io.dart';
+import 'transcript.dart';
import 'utils.dart';
typedef LogFn(Entry entry);
final Map<Level, LogFn> _loggers = new Map<Level, LogFn>();
+/// In cases where there's a ton of log spew, make sure we don't eat infinite
+/// memory.
+///
+/// This can occur when the backtracking solver stumbles into a pathological
+/// dependency graph. It generally will find a solution, but it may log
+/// thousands and thousands of entries to get there.
+const _MAX_TRANSCRIPT = 10000;
+
/// The list of recorded log messages. Will only be recorded if
/// [recordTranscript()] is called.
-List<Entry> _transcript;
+Transcript<Entry> _transcript;
/// The timer used to write "..." during a progress log.
Timer _progressTimer;
@@ -176,7 +186,7 @@
/// Enables recording of log entries.
void recordTranscript() {
- _transcript = <Entry>[];
+ _transcript = new Transcript<Entry>(_MAX_TRANSCRIPT);
}
/// If [recordTranscript()] was called, then prints the previously recorded log
@@ -185,9 +195,9 @@
if (_transcript == null) return;
stderr.writeln('---- Log transcript ----');
- for (var entry in _transcript) {
- _logToStderrWithLabel(entry);
- }
+ _transcript.forEach(_logToStderrWithLabel, (discarded) {
+ stderr.writeln('---- ($discarded discarded) ----');
+ });
stderr.writeln('---- End log transcript ----');
}
diff --git a/sdk/lib/_internal/pub/lib/src/sdk.dart b/sdk/lib/_internal/pub/lib/src/sdk.dart
index c99f516..bd8314b 100644
--- a/sdk/lib/_internal/pub/lib/src/sdk.dart
+++ b/sdk/lib/_internal/pub/lib/src/sdk.dart
@@ -12,11 +12,6 @@
import 'io.dart';
import 'version.dart';
-/// Matches an Eclipse-style SDK version number. This is four dotted numbers
-/// (major, minor, patch, build) with an optional suffix attached to the build
-/// number.
-final _versionPattern = new RegExp(r'^(\d+)\.(\d+)\.(\d+)\.(\d+.*)$');
-
/// Gets the path to the root directory of the SDK.
String get rootDirectory {
// Assume the Dart executable is always coming from the SDK.
@@ -29,30 +24,6 @@
/// different SDK versions.
Version version = _getVersion();
-/// Is `true` if the current SDK is an unreleased bleeding edge version.
-bool get isBleedingEdge {
- // The live build is locked to the magical old number "0.1.2+<stuff>".
- return version.major == 0 && version.minor == 1 && version.patch == 2;
-}
-
-/// Parse an Eclipse-style version number using the SDK's versioning convention.
-Version parseVersion(String version) {
- // Given a version file like: 0.1.2.0_r17495
- // We create a semver like: 0.1.2+0.r17495
- var match = _versionPattern.firstMatch(version);
- if (match == null) {
- throw new FormatException("The Dart SDK's 'version' file was not in a "
- "format pub could recognize. Found: $version");
- }
-
- // Semantic versions cannot use "_".
- var build = match[4].replaceAll('_', '.');
-
- return new Version(
- int.parse(match[1]), int.parse(match[2]), int.parse(match[3]),
- build: build);
-}
-
/// Determine the SDK's version number.
Version _getVersion() {
// Some of the pub integration tests require an SDK version number, but the
@@ -64,5 +35,5 @@
// Read the "version" file.
var revisionPath = path.join(rootDirectory, "version");
var version = readTextFile(revisionPath).trim();
- return parseVersion(version);
+ return new Version.parse(version);
}
diff --git a/sdk/lib/_internal/pub/lib/src/solver/backtracking_solver.dart b/sdk/lib/_internal/pub/lib/src/solver/backtracking_solver.dart
index 5ff0d08..882ef36 100644
--- a/sdk/lib/_internal/pub/lib/src/solver/backtracking_solver.dart
+++ b/sdk/lib/_internal/pub/lib/src/solver/backtracking_solver.dart
@@ -298,19 +298,23 @@
// Generate a reverse dependency graph. For each package, create edges to
// each package that depends on it.
var dependers = new Map<String, Set<String>>();
+
+ addDependencies(name, deps) {
+ dependers.putIfAbsent(name, () => new Set<String>());
+ for (var dep in deps) {
+ dependers.putIfAbsent(dep.name, () => new Set<String>()).add(name);
+ }
+ }
+
for (var i = 0; i < _selected.length; i++) {
var id = _selected[i].current;
var pubspec = cache.getCachedPubspec(id);
- if (pubspec == null) continue;
- dependers.putIfAbsent(id.name, () => new Set<String>());
-
- for (var dep in pubspec.dependencies) {
- var depender = dependers.putIfAbsent(dep.name,
- () => new Set<String>());
- depender.add(id.name);
- }
+ if (pubspec != null) addDependencies(id.name, pubspec.dependencies);
}
+ // Include the root package's dependencies.
+ addDependencies(root.name, root.immediateDependencies);
+
// Now walk the depending graph to see which packages transitively depend
// on [dependency].
var visited = new Set<String>();
@@ -473,7 +477,7 @@
// See if it's possible for a package to match that constraint.
if (constraint.isEmpty) {
- _solver.logSolve('disjoint constraints on ${dep.name}}');
+ _solver.logSolve('disjoint constraints on ${dep.name}');
throw new DisjointConstraintException(depender, dependencies);
}
@@ -646,12 +650,6 @@
/// Ensures that if [pubspec] has an SDK constraint, then it is compatible
/// with the current SDK. Throws a [SolveFailure] if not.
void _validateSdkConstraint(Pubspec pubspec) {
- // If the user is running a continouous build of the SDK, just disable SDK
- // constraint checking entirely. The actual version number you get is
- // impossibly old and not correct. We'll just assume users on continuous
- // know what they're doing.
- if (sdk.isBleedingEdge) return;
-
if (pubspec.environment.sdkVersion.allows(sdk.version)) return;
throw new BadSdkVersionException(pubspec.name,
diff --git a/sdk/lib/_internal/pub/lib/src/solver/dependency_queue.dart b/sdk/lib/_internal/pub/lib/src/solver/dependency_queue.dart
index 3c64e53..c462120 100644
--- a/sdk/lib/_internal/pub/lib/src/solver/dependency_queue.dart
+++ b/sdk/lib/_internal/pub/lib/src/solver/dependency_queue.dart
@@ -65,6 +65,10 @@
}
}
+ // Sort the selected/locked packages by name just to ensure the solver is
+ // deterministic.
+ presorted.sort((a, b) => a.name.compareTo(b.name));
+
return new DependencyQueue._(solver, new Queue<PackageDep>.from(presorted),
remaining);
}
diff --git a/sdk/lib/_internal/pub/lib/src/transcript.dart b/sdk/lib/_internal/pub/lib/src/transcript.dart
new file mode 100644
index 0000000..ce3aab6
--- /dev/null
+++ b/sdk/lib/_internal/pub/lib/src/transcript.dart
@@ -0,0 +1,73 @@
+// Copyright (c) 2012, the Dart project authors. Please see the AUTHORS file
+// for details. All rights reserved. Use of this source code is governed by a
+// BSD-style license that can be found in the LICENSE file.
+
+library pub.transcript;
+
+import 'dart:collection';
+
+/// A rolling transcript of entries of type [T].
+///
+/// It has a maximum number of entries. If entries are added that exceed that
+/// it discards entries from the *middle* of the transcript. Generally, in logs,
+/// the first and last entries are the most important, so it maintains those.
+class Transcript<T> {
+ /// The maximum number of transcript entries.
+ final int max;
+
+ /// The number of entries that were discarded after reaching [max].
+ int get discarded => _discarded;
+ int _discarded = 0;
+
+ /// The earliest half of the entries.
+ ///
+ /// This will be empty until the maximum number of entries is hit at which
+ /// point the oldest half of the entries will be moved from [_newest] to
+ /// here.
+ final _oldest = new List<T>();
+
+ /// The most recent half of the entries.
+ final _newest = new Queue<T>();
+
+ /// Creates a new [Transcript] that can hold up to [max] entries.
+ Transcript(this.max);
+
+ /// Adds [entry] to the transcript.
+ ///
+ /// If the transcript already has the maximum number of entries, discards one
+ /// from the middle.
+ void add(T entry) {
+ if (discarded > 0) {
+ // We're already in "rolling" mode.
+ _newest.removeFirst();
+ _discarded++;
+ } else if (_newest.length == max) {
+ // We are crossing the threshold where we have to discard items. Copy
+ // the first half over to the oldest list.
+ while (_newest.length > max ~/ 2) {
+ _oldest.add(_newest.removeFirst());
+ }
+
+ // Discard the middle item.
+ _newest.removeFirst();
+ _discarded++;
+ }
+
+ _newest.add(entry);
+ }
+
+ /// Traverses the entries in the transcript from oldest to newest.
+ ///
+ /// Invokes [onEntry] for each item. When it reaches the point in the middle
+ /// where excess entries where dropped, invokes [onGap] with the number of
+ /// dropped entries. If no more than [max] entries were added, does not
+ /// invoke [onGap].
+ void forEach(void onEntry(T entry), [void onGap(int)]) {
+ if (_oldest.isNotEmpty) {
+ _oldest.forEach(onEntry);
+ if (onGap != null) onGap(discarded);
+ }
+
+ _newest.forEach(onEntry);
+ }
+}
\ No newline at end of file
diff --git a/sdk/lib/_internal/pub/test/sdk_test.dart b/sdk/lib/_internal/pub/test/sdk_test.dart
deleted file mode 100644
index 6cec3e9..0000000
--- a/sdk/lib/_internal/pub/test/sdk_test.dart
+++ /dev/null
@@ -1,26 +0,0 @@
-// Copyright (c) 2012, the Dart project authors. Please see the AUTHORS file
-// for details. All rights reserved. Use of this source code is governed by a
-// BSD-style license that can be found in the LICENSE file.
-
-library pub_tests;
-
-import 'package:unittest/unittest.dart';
-
-import '../lib/src/sdk.dart' as sdk;
-import '../lib/src/version.dart';
-
-main() {
- group("parseVersion()", () {
- test("parses a release-style version", () {
- expect(sdk.parseVersion("0.1.2.0_r17645"),
- equals(new Version.parse("0.1.2+0.r17645")));
- });
-
- test("parses a dev-only style version", () {
- // The "version" file generated on developer builds is a little funky and
- // we need to make sure we don't choke on it.
- expect(sdk.parseVersion("0.1.2.0_r16279_bobross"),
- equals(new Version.parse("0.1.2+0.r16279.bobross")));
- });
- });
-}
diff --git a/sdk/lib/_internal/pub/test/transcript_test.dart b/sdk/lib/_internal/pub/test/transcript_test.dart
new file mode 100644
index 0000000..34ea130
--- /dev/null
+++ b/sdk/lib/_internal/pub/test/transcript_test.dart
@@ -0,0 +1,60 @@
+// Copyright (c) 2012, the Dart project authors. Please see the AUTHORS file
+// for details. All rights reserved. Use of this source code is governed by a
+// BSD-style license that can be found in the LICENSE file.
+
+library version_test;
+
+import 'package:unittest/unittest.dart';
+import 'test_pub.dart';
+import '../lib/src/transcript.dart';
+
+main() {
+ initConfig();
+
+ test("discards from the middle once it reaches the maximum", () {
+ var transcript = new Transcript<String>(4);
+ forEachToString() {
+ var result = "";
+ transcript.forEach((entry) => result += entry, (n) => result += "[$n]");
+ return result;
+ }
+
+ expect(forEachToString(), equals(""));
+ transcript.add("a");
+ expect(forEachToString(), equals("a"));
+ transcript.add("b");
+ expect(forEachToString(), equals("ab"));
+ transcript.add("c");
+ expect(forEachToString(), equals("abc"));
+ transcript.add("d");
+ expect(forEachToString(), equals("abcd"));
+ transcript.add("e");
+ expect(forEachToString(), equals("ab[1]de"));
+ transcript.add("f");
+ expect(forEachToString(), equals("ab[2]ef"));
+ });
+
+ test("does not discard if it doesn't reach the maximum", () {
+ var transcript = new Transcript<String>(40);
+ forEachToString() {
+ var result = "";
+ transcript.forEach((entry) => result += entry, (n) => result += "[$n]");
+ return result;
+ }
+
+ expect(forEachToString(), equals(""));
+ transcript.add("a");
+ expect(forEachToString(), equals("a"));
+ transcript.add("b");
+ expect(forEachToString(), equals("ab"));
+ transcript.add("c");
+ expect(forEachToString(), equals("abc"));
+ transcript.add("d");
+ expect(forEachToString(), equals("abcd"));
+ transcript.add("e");
+ expect(forEachToString(), equals("abcde"));
+ transcript.add("f");
+ expect(forEachToString(), equals("abcdef"));
+ });
+
+}
diff --git a/sdk/lib/_internal/pub/test/version_solver_test.dart b/sdk/lib/_internal/pub/test/version_solver_test.dart
index 83551b1..4200480 100644
--- a/sdk/lib/_internal/pub/test/version_solver_test.dart
+++ b/sdk/lib/_internal/pub/test/version_solver_test.dart
@@ -402,6 +402,16 @@
'a': '1.0.0'
}
}, error: couldNotSolve, maxTries: 4);
+
+ // This is a regression test for #15550.
+ testResolve('no version that matches while backtracking', {
+ 'myapp 0.0.0': {
+ 'a': 'any',
+ 'b': '>1.0.0'
+ },
+ 'a 1.0.0': {},
+ 'b 1.0.0': {}
+ }, error: noVersion(['myapp']), maxTries: 1);
}
badSource() {
@@ -794,12 +804,6 @@
'foo': '2.0.0',
'bar': '2.0.0'
}, maxTries: 3);
-
- testResolve('ignores SDK constraints on bleeding edge', {
- 'myapp 0.0.0': {'sdk': badVersion }
- }, result: {
- 'myapp from root': '0.0.0'
- }, useBleedingEdgeSdkVersion: true);
}
void prerelease() {
@@ -989,27 +993,24 @@
testResolve(String description, Map packages, {
Map lockfile, Map overrides, Map result, FailMatcherBuilder error,
- int maxTries, bool useBleedingEdgeSdkVersion}) {
+ int maxTries}) {
_testResolve(test, description, packages, lockfile: lockfile,
- overrides: overrides, result: result, error: error, maxTries: maxTries,
- useBleedingEdgeSdkVersion: useBleedingEdgeSdkVersion);
+ overrides: overrides, result: result, error: error, maxTries: maxTries);
}
solo_testResolve(String description, Map packages, {
Map lockfile, Map overrides, Map result, FailMatcherBuilder error,
- int maxTries, bool useBleedingEdgeSdkVersion}) {
+ int maxTries}) {
log.showSolver();
_testResolve(solo_test, description, packages, lockfile: lockfile,
- overrides: overrides, result: result, error: error, maxTries: maxTries,
- useBleedingEdgeSdkVersion: useBleedingEdgeSdkVersion);
+ overrides: overrides, result: result, error: error, maxTries: maxTries);
}
_testResolve(void testFn(String description, Function body),
String description, Map packages, {
Map lockfile, Map overrides, Map result, FailMatcherBuilder error,
- int maxTries, bool useBleedingEdgeSdkVersion}) {
+ int maxTries}) {
if (maxTries == null) maxTries = 1;
- if (useBleedingEdgeSdkVersion == null) useBleedingEdgeSdkVersion = false;
testFn(description, () {
var cache = new SystemCache('.');
@@ -1056,12 +1057,6 @@
});
}
- // Make a version number like the continuous build's version.
- var previousVersion = sdk.version;
- if (useBleedingEdgeSdkVersion) {
- sdk.version = new Version(0, 1, 2, build: '0_r12345_juser');
- }
-
// Resolve the versions.
var future = resolveVersions(cache.sources, root, lockFile: realLockFile);
@@ -1072,12 +1067,6 @@
matcher = error(maxTries);
}
- future = future.whenComplete(() {
- if (useBleedingEdgeSdkVersion) {
- sdk.version = previousVersion;
- }
- });
-
expect(future, completion(matcher));
});
}
diff --git a/sdk/lib/core/date_time.dart b/sdk/lib/core/date_time.dart
index c96c76f..2bd120e 100644
--- a/sdk/lib/core/date_time.dart
+++ b/sdk/lib/core/date_time.dart
@@ -37,7 +37,7 @@
* You can use these constants to improve code readibility:
*
* DateTime berlinWallFell = new DateTime(1989, DateTime.NOVEMBER, 9);
- * assert(berlinWallFell.month == DateTime.SATURDAY);
+ * assert(berlinWallFell.weekday == DateTime.THURSDAY);
*
* Day and month values begin at 1, and the week starts on Monday.
* That is, the constants [JANUARY] and [MONDAY] are both 1.
@@ -79,8 +79,8 @@
* To find out how much time is between two DateTime objects use
* [difference], which returns a [Duration] object:
*
- * Duration difference = berlinWallFell.difference(dDay);
- * assert(difference.inDays == 16592);
+ * Duration difference = berlinWallFell.difference(moonLanding)
+ * assert(difference.inDays == 7416);
*
* ## Other resources
*
diff --git a/sdk/lib/html/dart2js/html_dart2js.dart b/sdk/lib/html/dart2js/html_dart2js.dart
index a5c5443..5bbd141 100644
--- a/sdk/lib/html/dart2js/html_dart2js.dart
+++ b/sdk/lib/html/dart2js/html_dart2js.dart
@@ -6473,7 +6473,7 @@
@Experimental()
Entry getAsEntry() native;
}
-// Copyright (c) 2012, the Dart project authors. Please see the AUTHORS file
+// Copyright (c) 2013, the Dart project authors. Please see the AUTHORS file
// for details. All rights reserved. Use of this source code is governed by a
// BSD-style license that can be found in the LICENSE file.
@@ -6517,6 +6517,12 @@
@DocsEditable()
@Experimental() // untriaged
void remove(int index) native;
+
+
+ DataTransferItem operator[] (int index) {
+ return JS('DataTransferItem', '#[#]', this, index);
+ }
+
}
// Copyright (c) 2012, the Dart project authors. Please see the AUTHORS file
// for details. All rights reserved. Use of this source code is governed by a
@@ -24079,6 +24085,10 @@
class Storage extends Interceptor
implements Map<String, String> native "Storage" {
+ void addAll(Map<String, String> other) {
+ other.forEach((k, v) { this[k] = v; });
+ }
+
// TODO(nweiz): update this when maps support lazy iteration
bool containsValue(String value) => values.any((e) => e == value);
@@ -28727,25 +28737,29 @@
// From WindowTimers
+ @JSName('clearInterval')
@DomName('WorkerGlobalScope.clearInterval')
@DocsEditable()
@Experimental() // untriaged
- void clearInterval(int handle) native;
+ void _clearInterval(int handle) native;
+ @JSName('clearTimeout')
@DomName('WorkerGlobalScope.clearTimeout')
@DocsEditable()
@Experimental() // untriaged
- void clearTimeout(int handle) native;
+ void _clearTimeout(int handle) native;
+ @JSName('setInterval')
@DomName('WorkerGlobalScope.setInterval')
@DocsEditable()
@Experimental() // untriaged
- int setInterval(Object handler, int timeout) native;
+ int _setInterval(Object handler, int timeout) native;
+ @JSName('setTimeout')
@DomName('WorkerGlobalScope.setTimeout')
@DocsEditable()
@Experimental() // untriaged
- int setTimeout(Object handler, int timeout) native;
+ int _setTimeout(Object handler, int timeout) native;
/// Stream of `error` events handled by this [WorkerGlobalScope].
@DomName('WorkerGlobalScope.onerror')
@@ -30375,13 +30389,13 @@
// To suppress missing implicit constructor warnings.
factory _WindowTimers._() { throw new UnsupportedError("Not supported"); }
- void clearInterval(int handle);
+ void _clearInterval(int handle);
- void clearTimeout(int handle);
+ void _clearTimeout(int handle);
- int setInterval(Object handler, int timeout);
+ int _setInterval(Object handler, int timeout);
- int setTimeout(Object handler, int timeout);
+ int _setTimeout(Object handler, int timeout);
}
// Copyright (c) 2012, the Dart project authors. Please see the AUTHORS file
// for details. All rights reserved. Use of this source code is governed by a
@@ -30435,6 +30449,10 @@
_AttributeMap(this._element);
+ void addAll(Map<String, String> other) {
+ other.forEach((k, v) { this[k] = v; });
+ }
+
bool containsValue(String value) {
for (var v in this.values) {
if (value == v) {
@@ -30591,6 +30609,10 @@
// interface Map
+ void addAll(Map<String, String> other) {
+ other.forEach((k, v) { this[k] = v; });
+ }
+
// TODO: Use lazy iterator when it is available on Map.
bool containsValue(String value) => values.any((v) => v == value);
diff --git a/sdk/lib/html/dartium/html_dartium.dart b/sdk/lib/html/dartium/html_dartium.dart
index 29a417a..be4fb4f 100644
--- a/sdk/lib/html/dartium/html_dartium.dart
+++ b/sdk/lib/html/dartium/html_dartium.dart
@@ -6894,12 +6894,10 @@
Entry getAsEntry() native "DataTransferItem_webkitGetAsEntry_Callback";
}
-// Copyright (c) 2012, the Dart project authors. Please see the AUTHORS file
+// Copyright (c) 2013, the Dart project authors. Please see the AUTHORS file
// for details. All rights reserved. Use of this source code is governed by a
// BSD-style license that can be found in the LICENSE file.
-// WARNING: Do not edit - generated code.
-
@DocsEditable()
@DomName('DataTransferItemList')
@@ -6949,6 +6947,11 @@
@Experimental() // untriaged
void remove(int index) native "DataTransferItemList_remove_Callback";
+
+ DataTransferItem operator[] (int index) {
+ return __getter__(index);
+ }
+
}
// Copyright (c) 2012, the Dart project authors. Please see the AUTHORS file
// for details. All rights reserved. Use of this source code is governed by a
@@ -25763,6 +25766,10 @@
class Storage extends NativeFieldWrapperClass2
implements Map<String, String> {
+ void addAll(Map<String, String> other) {
+ other.forEach((k, v) { this[k] = v; });
+ }
+
// TODO(nweiz): update this when maps support lazy iteration
bool containsValue(String value) => values.any((e) => e == value);
@@ -27945,13 +27952,13 @@
if ((blob_OR_source_OR_stream is Blob || blob_OR_source_OR_stream == null)) {
return _createObjectURL_1(blob_OR_source_OR_stream);
}
- if ((blob_OR_source_OR_stream is MediaStream || blob_OR_source_OR_stream == null)) {
+ if ((blob_OR_source_OR_stream is MediaSource || blob_OR_source_OR_stream == null)) {
return _createObjectURL_2(blob_OR_source_OR_stream);
}
- if ((blob_OR_source_OR_stream is MediaSource || blob_OR_source_OR_stream == null)) {
+ if ((blob_OR_source_OR_stream is _WebKitMediaSource || blob_OR_source_OR_stream == null)) {
return _createObjectURL_3(blob_OR_source_OR_stream);
}
- if ((blob_OR_source_OR_stream is _WebKitMediaSource || blob_OR_source_OR_stream == null)) {
+ if ((blob_OR_source_OR_stream is MediaStream || blob_OR_source_OR_stream == null)) {
return _createObjectURL_4(blob_OR_source_OR_stream);
}
throw new ArgumentError("Incorrect number or type of arguments");
@@ -30350,22 +30357,22 @@
@DomName('WorkerGlobalScope.clearInterval')
@DocsEditable()
@Experimental() // untriaged
- void clearInterval(int handle) native "WorkerGlobalScope_clearInterval_Callback";
+ void _clearInterval(int handle) native "WorkerGlobalScope_clearInterval_Callback";
@DomName('WorkerGlobalScope.clearTimeout')
@DocsEditable()
@Experimental() // untriaged
- void clearTimeout(int handle) native "WorkerGlobalScope_clearTimeout_Callback";
+ void _clearTimeout(int handle) native "WorkerGlobalScope_clearTimeout_Callback";
@DomName('WorkerGlobalScope.setInterval')
@DocsEditable()
@Experimental() // untriaged
- int setInterval(Object handler, int timeout) native "WorkerGlobalScope_setInterval_Callback";
+ int _setInterval(Object handler, int timeout) native "WorkerGlobalScope_setInterval_Callback";
@DomName('WorkerGlobalScope.setTimeout')
@DocsEditable()
@Experimental() // untriaged
- int setTimeout(Object handler, int timeout) native "WorkerGlobalScope_setTimeout_Callback";
+ int _setTimeout(Object handler, int timeout) native "WorkerGlobalScope_setTimeout_Callback";
/// Stream of `error` events handled by this [WorkerGlobalScope].
@DomName('WorkerGlobalScope.onerror')
@@ -32186,22 +32193,22 @@
@DomName('WindowTimers.clearInterval')
@DocsEditable()
@Experimental() // untriaged
- void clearInterval(int handle) native "WindowTimers_clearInterval_Callback";
+ void _clearInterval(int handle) native "WindowTimers_clearInterval_Callback";
@DomName('WindowTimers.clearTimeout')
@DocsEditable()
@Experimental() // untriaged
- void clearTimeout(int handle) native "WindowTimers_clearTimeout_Callback";
+ void _clearTimeout(int handle) native "WindowTimers_clearTimeout_Callback";
@DomName('WindowTimers.setInterval')
@DocsEditable()
@Experimental() // untriaged
- int setInterval(Object handler, int timeout) native "WindowTimers_setInterval_Callback";
+ int _setInterval(Object handler, int timeout) native "WindowTimers_setInterval_Callback";
@DomName('WindowTimers.setTimeout')
@DocsEditable()
@Experimental() // untriaged
- int setTimeout(Object handler, int timeout) native "WindowTimers_setTimeout_Callback";
+ int _setTimeout(Object handler, int timeout) native "WindowTimers_setTimeout_Callback";
}
// Copyright (c) 2012, the Dart project authors. Please see the AUTHORS file
@@ -32309,6 +32316,10 @@
_AttributeMap(this._element);
+ void addAll(Map<String, String> other) {
+ other.forEach((k, v) { this[k] = v; });
+ }
+
bool containsValue(String value) {
for (var v in this.values) {
if (value == v) {
@@ -32465,6 +32476,10 @@
// interface Map
+ void addAll(Map<String, String> other) {
+ other.forEach((k, v) { this[k] = v; });
+ }
+
// TODO: Use lazy iterator when it is available on Map.
bool containsValue(String value) => values.any((v) => v == value);
@@ -37039,33 +37054,36 @@
"is not supported in the browser");
};
- class _Timer implements Timer {
- var _canceler;
+class _Timer implements Timer {
+ const int _STATE_TIMEOUT = 0;
+ const int _STATE_INTERVAL = 1;
+ var _state;
_Timer(int milliSeconds, void callback(Timer timer), bool repeating) {
-
if (repeating) {
- int id = window._setInterval(() {
+ _state = window._setInterval(() {
callback(this);
- }, milliSeconds);
- _canceler = () => window._clearInterval(id);
+ }, milliSeconds) * 2 + _STATE_INTERVAL;
} else {
- int id = window._setTimeout(() {
- _canceler = null;
+ _state = window._setTimeout(() {
+ _state = null;
callback(this);
- }, milliSeconds);
- _canceler = () => window._clearTimeout(id);
+ }, milliSeconds) * 2 + _STATE_TIMEOUT;
}
}
void cancel() {
- if (_canceler != null) {
- _canceler();
+ if (_state == null) return;
+ int id = _state ~/ 2;
+ if ((_state & 1) == _STATE_TIMEOUT) {
+ window._clearTimeout(id);
+ } else {
+ window._clearInterval(id);
}
- _canceler = null;
+ _state = null;
}
- bool get isActive => _canceler != null;
+ bool get isActive => _state != null;
}
get _timerFactoryClosure =>
diff --git a/sdk/lib/io/bytes_builder.dart b/sdk/lib/io/bytes_builder.dart
index 7e64f33..e26ae89 100644
--- a/sdk/lib/io/bytes_builder.dart
+++ b/sdk/lib/io/bytes_builder.dart
@@ -98,7 +98,7 @@
bool get isEmpty => _length == 0;
/**
- * Returns `true` if the buffer is empty.
+ * Returns `true` if the buffer is not empty.
*/
bool get isNotEmpty => _length != 0;
diff --git a/sdk/lib/io/http_impl.dart b/sdk/lib/io/http_impl.dart
index 756db60..4c6e74b 100644
--- a/sdk/lib/io/http_impl.dart
+++ b/sdk/lib/io/http_impl.dart
@@ -586,7 +586,8 @@
}
bool _ignoreError(error)
- => error is SocketException && _outbound is HttpResponse;
+ => (error is SocketException || error is TlsException) &&
+ _outbound is HttpResponse;
_ensureController() {
if (_controller != null) return;
@@ -2055,7 +2056,13 @@
_HttpConnection connection = new _HttpConnection(socket, this);
_connections.add(connection);
},
- onError: _controller.addError,
+ onError: (error) {
+ // Ignore HandshakeExceptions as they are bound to a single request,
+ // and are not fatal for the server.
+ if (error is! HandshakeException) {
+ _controller.addError(error);
+ }
+ },
onDone: _controller.close);
return _controller.stream.listen(onData,
onError: onError,
diff --git a/sdk/lib/io/socket.dart b/sdk/lib/io/socket.dart
index 2f78958..b619fec 100644
--- a/sdk/lib/io/socket.dart
+++ b/sdk/lib/io/socket.dart
@@ -323,6 +323,11 @@
*/
static const SocketOption TCP_NODELAY = const SocketOption._(0);
+ static const SocketOption _IP_MULTICAST_LOOP = const SocketOption._(1);
+ static const SocketOption _IP_MULTICAST_HOPS = const SocketOption._(2);
+ static const SocketOption _IP_MULTICAST_IF = const SocketOption._(3);
+ static const SocketOption _IP_BROADCAST = const SocketOption._(4);
+
const SocketOption._(this._value);
final _value;
}
@@ -506,6 +511,136 @@
}
+/**
+ * Datagram package. Data send to and received from datagram sockets
+ * contains the internet address and port of the destination or source
+ * togeter with the data.
+ */
+class Datagram {
+ List<int> data;
+ InternetAddress address;
+ int port;
+
+ Datagram(this.data, this.address, this.port);
+}
+
+
+/**
+ * The [RawDatagramSocket] is a low-level interface to an UDP socket,
+ * exposing the raw events signaled by the system. It's a [Stream] of
+ * [RawSocketEvent]s.
+ *
+ * Note that the event [RawSocketEvent.READ_CLOSED] will never be
+ * received as an UDP socket cannot be closed by a remote peer.
+ */
+abstract class RawDatagramSocket extends Stream<RawSocketEvent> {
+ /**
+ * Creates a new raw datagram socket binding it to an address and
+ * port.
+ */
+ external static Future<RawDatagramSocket> bind(
+ host, int port, {bool reuseAddress: true});
+
+ /**
+ * Returns the port used by this socket.
+ */
+ int get port;
+
+ /**
+ * Returns the address used by this socket.
+ */
+ InternetAddress get address;
+
+ /**
+ * Close the datagram socket.
+ */
+ void close();
+
+ /**
+ * Send a datagram.
+ *
+ * Returns the number of bytes written. This will always be either
+ * the size of [buffer] or `0`.
+ */
+ int send(List<int> buffer, InternetAddress address, int port);
+
+ /**
+ * Receive a datagram. If there are no datagrams available `null` is
+ * returned.
+ */
+ Datagram receive();
+
+ /**
+ * Join a multicast group.
+ *
+ * If an error occur when trying to join the multicast group an
+ * exception is thrown.
+ */
+ void joinMulticast(InternetAddress group, {NetworkInterface interface});
+
+ /**
+ * Leave a multicast group.
+ *
+ * If an error occur when trying to join the multicase group an
+ * exception is thrown.
+ */
+ void leaveMulticast(InternetAddress group, {NetworkInterface interface});
+
+ /**
+ * Set or get, if the [RawDatagramSocket] should listen for
+ * [RawSocketEvent.READ] events. Default is [true].
+ */
+ bool readEventsEnabled;
+
+ /**
+ * Set or get, if the [RawDatagramSocket] should listen for
+ * [RawSocketEvent.WRITE] events. Default is [true]. This is a
+ * one-shot listener, and writeEventsEnabled must be set to true
+ * again to receive another write event.
+ */
+ bool writeEventsEnabled;
+
+ /**
+ * Set or get, whether multicast traffic is looped back to the host.
+ *
+ * By default multicast loopback is enabled.
+ */
+ bool multicastLoopback;
+
+ /**
+ * Set or get, the maximum network hops for multicast packages
+ * originating from this socket.
+ *
+ * For IPv4 this is referred to as TTL (time to live).
+ *
+ * By default this value is 1 causing multicast traffic to stay on
+ * the local network.
+ */
+ int multicastHops;
+
+ /**
+ * Set or get, the network interface used for outgoing multicast packages.
+ *
+ * A value of `null`indicate that the system chooses the network
+ * interface to use.
+ *
+ * By default this value is `null`
+ */
+ NetworkInterface multicastInterface;
+
+ /**
+ * Set or get, whether IPv4 broadcast is enabled.
+ *
+ * IPv4 broadcast needs to be enabled by the sender for sending IPv4
+ * broadcast packages. By default IPv4 broadcast is disabled.
+ *
+ * For IPv6 there is no general broadcast mechanism. Use multicast
+ * instead.
+ */
+ bool broadcastEnabled;
+}
+
+
class SocketException implements IOException {
final String message;
final OSError osError;
diff --git a/sdk/lib/io/stdio.dart b/sdk/lib/io/stdio.dart
index b0e246d..ab2f03a 100644
--- a/sdk/lib/io/stdio.dart
+++ b/sdk/lib/io/stdio.dart
@@ -121,7 +121,12 @@
}
/**
- * Enable or disable echo mode on the [Stdin].
+ * Check if echo mode is enabled on [stdin].
+ */
+ external bool get echoMode;
+
+ /**
+ * Enable or disable echo mode on [stdin].
*
* If disabled, input from to console will not be echoed.
*
@@ -130,7 +135,12 @@
external void set echoMode(bool enabled);
/**
- * Enable or disable line mode on the [Stdin].
+ * Check if line mode is enabled on [stdin].
+ */
+ external bool get lineMode;
+
+ /**
+ * Enable or disable line mode on [stdin].
*
* If enabled, characters are delayed until a new-line character is entered.
* If disabled, characters will be available as typed.
diff --git a/sdk/lib/io/timer_impl.dart b/sdk/lib/io/timer_impl.dart
index f03b618..883d09e 100644
--- a/sdk/lib/io/timer_impl.dart
+++ b/sdk/lib/io/timer_impl.dart
@@ -24,8 +24,12 @@
_Timer timer = new _Timer._internal();
timer._callback = callback;
if (milliSeconds > 0) {
+ // Add one because DateTime.now() is assumed to round down
+ // to nearest millisecond, not up, so that time + duration is before
+ // duration milliseconds from now. Using micosecond timers like
+ // Stopwatch allows detecting that the timer fires early.
timer._wakeupTime =
- new DateTime.now().millisecondsSinceEpoch + milliSeconds;
+ new DateTime.now().millisecondsSinceEpoch + 1 + milliSeconds;
}
timer._milliSeconds = repeating ? milliSeconds : -1;
timer._addTimerToList();
@@ -79,6 +83,12 @@
// enqueued in order and notified in FIFO order.
void _addTimerToList() {
_Timer entry = _timers.isEmpty ? null : _timers.first;
+ // If timer is last, add to end.
+ if (entry == null || _timers.last._wakeupTime <= _wakeupTime) {
+ _timers.add(this);
+ return;
+ }
+ // Otherwise scan through and find the right position.
while (entry != null) {
if (_wakeupTime < entry._wakeupTime) {
entry.insertBefore(this);
diff --git a/sdk/lib/mirrors/mirrors.dart b/sdk/lib/mirrors/mirrors.dart
index 28d7174..f96525a 100644
--- a/sdk/lib/mirrors/mirrors.dart
+++ b/sdk/lib/mirrors/mirrors.dart
@@ -920,6 +920,15 @@
bool get isAbstract;
/**
+ * Returns true if the reflectee is synthetic, and returns false otherwise.
+ *
+ * A reflectee is synthetic if it is a getter or setter implicitly introduced
+ * for a field or Type, or if it is a constructor that was implicitly
+ * introduced as a default constructor or as part of a mixin application.
+ */
+ bool get isSynthetic;
+
+ /**
* Is the reflectee a regular function or method?
*
* A function or method is regular if it is not a getter, setter, or
diff --git a/tests/co19/co19-analyzer.status b/tests/co19/co19-analyzer.status
index 8196b61..28c3b88 100644
--- a/tests/co19/co19-analyzer.status
+++ b/tests/co19/co19-analyzer.status
@@ -72,7 +72,7 @@
LibTest/isolate/SendPort/call_A01_t01: Fail
LibTest/isolate/SendPort/hashCode_A01_t01: Fail
LibTest/isolate/SendPort/operator_equality_A01_t01: Fail
-LibTest/isolate/SendPort/send_A01_t01: Pass
+LibTest/isolate/SendPort/send_A01_t01: StaticWarning
LibTest/isolate/SendPort/send_A02_t01: Fail
LibTest/isolate/SendPort/send_A02_t04: Fail
LibTest/isolate/SendPort/send_A02_t05: Fail
@@ -83,7 +83,6 @@
LibTest/isolate/IsolateStream/contains_A02_t01: Fail
LibTest/isolate/ReceivePort/receive_A01_t02: Fail
LibTest/isolate/ReceivePort/toSendPort_A01_t02: Fail
-LibTest/isolate/SendPort/send_A01_t01: Fail
LibTest/isolate/SendPort/send_A02_t02: Fail
LibTest/isolate/SendPort/send_A02_t03: Fail
@@ -130,13 +129,9 @@
Language/07_Classes/10_Superinterfaces_A07_t05: StaticWarning # co19-roll r667: Please triage this failure
LibTest/convert/JsonEncoder/JsonEncoder_A01_t01: StaticWarning # co19-roll r667: Please triage this failure
-LibTest/isolate/Isolate/spawnFunction_A02_t02: CompileTimeError # co19-roll r667: Please triage this failure
LibTest/async/Zone/operator_subscript_A01_t01: StaticWarning # co19-roll r672: Please triage this failure
# co19 issue 656
-LibTest/typed_data/Uint32x4/*: Skip # co19 issue 656
-LibTest/typed_data/Float32x4/Float32x4.fromUint32x4Bits_A01_t01: Skip # co19 issue 656
-LibTest/typed_data/Float32x4/Float32x4.fromUint32x4Bits_A01_t02: Skip # co19 issue 656
LibTest/typed_data/Float32x4/equal_A01_t01: Skip # co19 issue 656
LibTest/typed_data/Float32x4/notEqual_A01_t01: Skip # co19 issue 656
LibTest/typed_data/Float32x4/greaterThan_A01_t01: Skip # co19 issue 656
diff --git a/tests/co19/co19-analyzer2.status b/tests/co19/co19-analyzer2.status
index 184d3aa..5c77349 100644
--- a/tests/co19/co19-analyzer2.status
+++ b/tests/co19/co19-analyzer2.status
@@ -130,13 +130,9 @@
Language/07_Classes/10_Superinterfaces_A07_t05: StaticWarning # co19-roll r667: Please triage this failure
LibTest/convert/JsonEncoder/JsonEncoder_A01_t01: StaticWarning # co19-roll r667: Please triage this failure
-LibTest/isolate/Isolate/spawnFunction_A02_t02: CompileTimeError # co19-roll r667: Please triage this failure
LibTest/async/Zone/operator_subscript_A01_t01: StaticWarning # co19-roll r672: Please triage this failure
# co19 issue 656
-LibTest/typed_data/Uint32x4/*: Skip # co19 issue 656
-LibTest/typed_data/Float32x4/Float32x4.fromUint32x4Bits_A01_t01: Skip # co19 issue 656
-LibTest/typed_data/Float32x4/Float32x4.fromUint32x4Bits_A01_t02: Skip # co19 issue 656
LibTest/typed_data/Float32x4/equal_A01_t01: Skip # co19 issue 656
LibTest/typed_data/Float32x4/notEqual_A01_t01: Skip # co19 issue 656
LibTest/typed_data/Float32x4/greaterThan_A01_t01: Skip # co19 issue 656
diff --git a/tests/co19/co19-co19.status b/tests/co19/co19-co19.status
index dfadfa8..bd7e326 100644
--- a/tests/co19/co19-co19.status
+++ b/tests/co19/co19-co19.status
@@ -15,18 +15,9 @@
LibTest/core/Stopwatch/start_A01_t02: PASS, FAIL, OK # co19 issue 657
LibTest/core/Stopwatch/elapsedTicks_A01_t01: PASS, FAIL, OK # co19 issue 657
-LibTest/isolate/Isolate/spawnFunction_A02_t01: Fail, OK # co19 issue 639
-LibTest/isolate/Isolate/spawnFunction_A03_t01: Fail, OK # co19 issue 639
-LibTest/isolate/Isolate/spawnFunction_A04_t01: Fail, OK # co19 issue 639
-LibTest/isolate/Isolate/spawnFunction_A04_t02: Fail, OK # co19 issue 639
-LibTest/isolate/Isolate/spawnFunction_A04_t03: Fail, OK # co19 issue 639
-
[ $runtime == vm || $runtime == dartium || $compiler == dart2dart || $compiler == dart2js ]
Language/12_Expressions/30_Identifier_Reference_A02_t01: fail, pass, ok # co19 issue 649
-Language/05_Variables/05_Variables_A06_t01: fail, pass, ok # co19 issue 624
-Language/05_Variables/05_Variables_A06_t02: fail, pass, ok # co19 issue 624
-Language/05_Variables/05_Variables_A06_t03: fail, pass, ok # co19 issue 624
Language/07_Classes/6_Constructors/1_Generative_Constructors_A12_t02: fail # co19-roll r587: Please triage this failure
Language/07_Classes/6_Constructors/1_Generative_Constructors_A20_t02: fail # co19-roll r587: Please triage this failure
@@ -49,7 +40,7 @@
LibTest/collection/ListBase/ListBase_class_A01_t01: Skip, OK # co19 issue 661
LibTest/collection/ListMixin/ListMixin_class_A01_t01: Skip, OK # co19 issue 661
-LibTest/isolate/Isolate/spawnUri_A02_t04: Timeout, Fail # co19-roll r672: Please triage this failure
+LibTest/isolate/Isolate/spawnUri_A02_t04: Fail # co19-roll r672: Please triage this failure
[ $runtime == vm || $runtime == dartium || $compiler == dart2js ]
LibTest/math/acos_A01_t01: PASS, FAIL, OK # co19 issue 44
@@ -66,7 +57,9 @@
LibTest/core/double/round_A01_t02: FAIL, OK # co19 issue 389
LibTest/core/double/round_A01_t04: FAIL, OK # co19 issue 389
-LibTest/async/Stream/Stream.periodic_A01_t01: TIMEOUT, PASS, FAIL, OK # co19 issue 538
+LibTest/async/Future/Future.delayed_A01_t02: Pass, Fail # Issue 15524
+
+LibTest/async/Stream/Stream.periodic_A01_t01: PASS, FAIL, OK # co19 issue 538
LibTest/isolate/SendPort/send_A02_t02: SKIP # co19 issue 493
LibTest/isolate/SendPort/send_A02_t03: SKIP # co19 issue 495
@@ -85,9 +78,8 @@
LibTest/async/Timer/Timer_A02_t01: PASS, FAIL, OK # co19 issue 538
LibTest/async/Timer/Timer.periodic_A01_t01: PASS, FAIL, OK # co19 issue 537
LibTest/async/Timer/Timer.periodic_A02_t01: PASS, FAIL, OK # co19 issue 538
-LibTest/async/Future/Future.delayed_A01_t02: PASS, FAIL, OK # co19 issue 536
-LibTest/isolate/IsolateStream/contains_A02_t01: PASS, FAIL, OK # co19 issue 540
+LibTest/isolate/IsolateStream/contains_A02_t01: FAIL, OK # co19 issue 540
[ $runtime == vm || $compiler == none || $compiler == dart2js ]
@@ -131,7 +123,3 @@
Language/13_Statements/09_Switch_A09_t01: PASS, FAIL, OK # co19 issue 633
LibTest/collection/DoubleLinkedQueue/removeFirst_A01_t01: RuntimeError # co19-roll r607: Please triage this failure
LibTest/collection/LinkedList/LinkedList_A01_t01: RuntimeError # co19-roll r623: Please triage this failure
-
-[ ($runtime == vm || $compiler == dart2js) && $checked]
-Language/14_Libraries_and_Scripts/1_Imports_A03_t46: PASS, FAIL, OK # co19 issue 560
-Language/14_Libraries_and_Scripts/1_Imports_A03_t66: PASS, FAIL, OK # co19 issue 560
diff --git a/tests/co19/co19-dart2dart.status b/tests/co19/co19-dart2dart.status
index 74fd8a5..c3e7ab4 100644
--- a/tests/co19/co19-dart2dart.status
+++ b/tests/co19/co19-dart2dart.status
@@ -68,9 +68,6 @@
LibTest/math/exp_A01_t01: Fail # Issue co19 - 44
LibTest/math/sin_A01_t01: Fail # Inherited from VM.
LibTest/math/tan_A01_t01: Fail # Issue co19 - 44
-LibTest/typed_data/Uint32x4/*: Skip # co19 issue 656
-LibTest/typed_data/Float32x4/Float32x4.fromUint32x4Bits_A01_t01: Skip # co19 issue 656
-LibTest/typed_data/Float32x4/Float32x4.fromUint32x4Bits_A01_t02: Skip # co19 issue 656
LibTest/typed_data/Float32x4/equal_A01_t01: Skip # co19 issue 656
LibTest/typed_data/Float32x4/notEqual_A01_t01: Skip # co19 issue 656
LibTest/typed_data/Float32x4/greaterThan_A01_t01: Skip # co19 issue 656
diff --git a/tests/co19/co19-dart2js.status b/tests/co19/co19-dart2js.status
index 6a983cd..ec96ae9 100644
--- a/tests/co19/co19-dart2js.status
+++ b/tests/co19/co19-dart2js.status
@@ -7,9 +7,9 @@
LibTest/core/RegExp/Pattern_semantics/splitQueryString_A02_t01: RuntimeError # co19-roll r607: Please triage this failure
[ $compiler == dart2js && $checked && $runtime == ie9 ]
-LibTest/core/Uri/encodeComponent_A01_t02: Pass, Slow
-LibTest/core/Uri/encodeFull_A01_t02: Pass, Slow
-LibTest/core/Uri/encodeQueryComponent_A01_t02: Pass, Timeout # co19-roll r576: Please triage this failure
+LibTest/core/Uri/encodeComponent_A01_t02: Skip
+LibTest/core/Uri/encodeFull_A01_t02: Skip
+LibTest/core/Uri/encodeQueryComponent_A01_t02: Skip
# Crashes first, please. Then untriaged bugs. There is a section below
@@ -55,9 +55,6 @@
LibTest/typed_data/Uint32List/Uint32List_A02_t01: fail # co19-roll r576: Please triage this failure
LibTest/typed_data/Uint8ClampedList/Uint8ClampedList_A02_t01: fail # co19-roll r576: Please triage this failure
LibTest/typed_data/Uint8List/Uint8List_A02_t01: fail # co19-roll r576: Please triage this failure
-LibTest/typed_data/Uint32x4/*: Skip # co19 issue 656
-LibTest/typed_data/Float32x4/Float32x4.fromUint32x4Bits_A01_t01: Skip # co19 issue 656
-LibTest/typed_data/Float32x4/Float32x4.fromUint32x4Bits_A01_t02: Skip # co19 issue 656
LibTest/typed_data/Float32x4/equal_A01_t01: Skip # co19 issue 656
LibTest/typed_data/Float32x4/notEqual_A01_t01: Skip # co19 issue 656
LibTest/typed_data/Float32x4/greaterThan_A01_t01: Skip # co19 issue 656
@@ -69,8 +66,8 @@
LibTest/typed_data/ByteData/ByteData_A02_t01: fail # co19-roll r576: Please triage this failure
[ $compiler == dart2js && $runtime == jsshell ]
-LibTest/isolate/SendPort/send_A02_t05: Fail, Pass # TODO(ahe): Please triage this failure.
-LibTest/isolate/SendPort/send_A02_t06: Fail, Pass # TODO(ahe): Please triage this failure.
+LibTest/isolate/SendPort/send_A02_t05: RuntimeError # TODO(ahe): Please triage this failure.
+LibTest/isolate/SendPort/send_A02_t06: RuntimeError # TODO(ahe): Please triage this failure.
LibTest/core/Uri/Uri_A06_t03: Pass, Slow
[ $compiler == dart2js ]
@@ -80,8 +77,6 @@
LibTest/isolate/ReceivePort/receive_A01_t02: RuntimeError # Issue 6750
[ $compiler == dart2js && $runtime == ie9 ]
-LibTest/async/Completer/completeError_A02_t01: Pass, Fail # Issue 8920
-LibTest/async/Stream/listen_A04_t01: Pass, Timeout # Issue: 8920
LibTest/core/double/round_A01_t01: Fail # Issue: 8920
LibTest/core/double/toStringAsExponential_A01_t04: Fail # Issue: 8920
LibTest/core/double/toStringAsPrecision_A01_t04: Fail # Issue: 8920
@@ -98,15 +93,13 @@
LibTest/core/RegExp/Pattern_semantics/firstMatch_NonEmptyClassRanges_A01_t01: Fail # Issue: 8920
LibTest/core/RegExp/Pattern_semantics/firstMatch_NonEmptyClassRanges_A01_t05: Fail # Issue: 8920
LibTest/core/RegExp/Pattern_semantics/firstMatch_NonEmptyClassRanges_A01_t06: Fail # Issue: 8920
-LibTest/isolate/ReceivePort/toSendPort_A01_t01: Pass, Fail # Issue: 8920
-LibTest/isolate/ReceivePort/toSendPort_A01_t02: Pass, Fail # Issue: 8920
+LibTest/isolate/ReceivePort/toSendPort_A01_t01: RuntimeError # Issue: 8920
LibTest/async/DeferredLibrary/DeferredLibrary_A01_t01: Skip # http://dartbug.com/12635
LibTest/collection/DoubleLinkedQueue/DoubleLinkedQueue_class_A01_t01: Pass, Timeout # co19-roll r651: Please triage this failure
[ $compiler == dart2js && $runtime == jsshell ]
LibTest/core/Map/Map_class_A01_t04: Pass, Slow # Issue 8096
LibTest/core/double/round_A01_t01: Fail # TODO(ngeoaffray): Please triage these failure.
-LibTest/core/int/operator_truncating_division_A01_t01: Fail # TODO(ngeoaffray): Please triage these failure.
LibTest/core/RegExp/Pattern_semantics/firstMatch_CharacterClassEscape_A03_t01: Fail # TODO(ngeoaffray): Please triage these failure.
[ $compiler == dart2js && $checked ]
@@ -115,6 +108,8 @@
Language/15_Types/2_Dynamic_Type_System_A01_t02: RuntimeError # co19-roll r607: Please triage this failure
Language/15_Types/8_Parameterized_Types_A03_t07: RuntimeError # co19-roll r607: Please triage this failure
Language/15_Types/1_Static_Types_A03_t01: RuntimeError # co19-roll r623: Please triage this failure
+LibTest/core/Map/Map_class_A01_t04: Slow, Pass
+LibTest/core/Uri/Uri_A06_t03: Slow, Pass
[ $compiler == dart2js ]
LibTest/core/int/operator_GT_A01_t01: RuntimeError, OK # co19 issue 200
@@ -128,7 +123,7 @@
Language/07_Classes/6_Constructors/1_Generative_Constructors_A13_t01: RuntimeError, OK # These tests need to be updated for new optional parameter syntax and semantics, co19 issue 258:
-LibTest/isolate/SendPort/send_A02_t04: RuntimeError, Pass, OK # co19 issue 293 Passes on IE
+LibTest/isolate/SendPort/send_A02_t04: RuntimeError, OK # co19 issue 293 Passes on IE
LibTest/core/RegExp/firstMatch_A01_t01: RuntimeError, OK # co19 issue 294
LibTest/core/RegExp/Pattern_semantics/firstMatch_Term_A04_t01: RuntimeError, OK # co19 issue 294
@@ -239,7 +234,6 @@
LibTest/core/int/isOdd_A01_t01: RuntimeError, OK # Not in API.
LibTest/core/int/operator_left_shift_A01_t01: RuntimeError, OK # Requires big int.
LibTest/core/int/operator_remainder_A01_t03: RuntimeError, OK # Leg only has double.
-LibTest/core/int/operator_truncating_division_A01_t01: Fail, Pass # Requires big int unless type inference fools us.
LibTest/core/int/operator_truncating_division_A01_t02: RuntimeError, OK # Leg only has double.
LibTest/core/int/remainder_A01_t01: RuntimeError, OK # Requires big int.
LibTest/core/int/remainder_A01_t03: RuntimeError, OK # Leg only has double.
@@ -250,12 +244,9 @@
Language/12_Expressions/00_Object_Identity/1_Object_Identity_A05_t02: RuntimeError # co19-roll r607: Please triage this failure
Language/12_Expressions/17_Getter_Invocation_A07_t02: RuntimeError # co19-roll r607: Please triage this failure
LibTest/collection/LinkedList/add_A01_t01: Pass, Timeout # co19-roll r607: Please triage this failure
-LibTest/core/Uri/Uri_A06_t03: Pass, Timeout # Issue 13511
+LibTest/core/Uri/Uri_A06_t03: Timeout # Issue 13511
LibTest/math/cos_A01_t01: Fail # co19 issue 44
-[ $compiler == dart2js && $runtime == ie9 && $checked ]
-LibTest/async/Future/catchError_A03_t05: Pass, RuntimeError # Issue 14712
-
#
# The following tests are failing. Please add the error message
# (either a compiler error or exception message). The error messages
@@ -272,27 +263,46 @@
[ $compiler == dart2js && $runtime == chromeOnAndroid ]
-Language/12_Expressions/05_Strings_A06_t01: Pass, Slow # TODO(kasperl): Please triage.
-LibTest/core/Set/removeAll_A01_t02: Pass, Slow # TODO(kasperl): Please triage.
-LibTest/typed_data/Float64List/join_A01_t01: Pass, Slow # TODO(kasperl): Please triage.
-LibTest/typed_data/Int8List/sublist_A02_t01: Pass, Slow # TODO(kasperl): Please triage.
-LibTest/typed_data/Int16List/single_A01_t02: Pass, Slow # TODO(kasperl): Please triage.
-LibTest/typed_data/Uint8ClampedList/map_A02_t01: Pass, Slow # TODO(kasperl): Please triage.
+Language/12_Expressions/00_Object_Identity/1_Object_Identity_A05_t02: RuntimeError # TODO(dart2js-team): Please triage this failure.
+Language/12_Expressions/05_Strings_A06_t01: Pass, Slow # TODO(dart2js-team): Please triage this failure.
+Language/12_Expressions/05_Strings_A06_t01: Pass, Slow # TODO(dart2js-team): Please triage this failure.
+Language/12_Expressions/17_Getter_Invocation_A07_t02: RuntimeError # TODO(dart2js-team): Please triage this failure.
-LibTest/core/int/compareTo_A01_t01: Fail # TODO(kasperl): Please triage.
-LibTest/core/int/operator_left_shift_A01_t01: Fail # TODO(kasperl): Please triage.
-LibTest/core/int/operator_remainder_A01_t03: Fail # TODO(kasperl): Please triage.
-LibTest/core/int/operator_truncating_division_A01_t02: Fail # TODO(kasperl): Please triage.
-LibTest/core/int/remainder_A01_t01: Fail # TODO(kasperl): Please triage.
-LibTest/core/int/remainder_A01_t03: Fail # TODO(kasperl): Please triage.
-LibTest/core/int/toRadixString_A01_t01: Fail # TODO(kasperl): Please triage.
-LibTest/core/RegExp/Pattern_semantics/firstMatch_CharacterEscape_A06_t02: Fail # TODO(kasperl): Please triage.
-LibTest/core/RegExp/Pattern_semantics/firstMatch_DecimalEscape_A01_t02: Fail # TODO(kasperl): Please triage.
-LibTest/core/RegExp/Pattern_semantics/firstMatch_NonEmptyClassRanges_A01_t01: Fail # TODO(kasperl): Please triage.
-LibTest/core/RegExp/Pattern_semantics/firstMatch_NonEmptyClassRanges_A01_t05: Fail # TODO(kasperl): Please triage.
-LibTest/core/RegExp/Pattern_semantics/firstMatch_NonEmptyClassRanges_A01_t06: Fail # TODO(kasperl): Please triage.
-LibTest/isolate/ReceivePort/toSendPort_A01_t02: Fail # TODO(kasperl): Please triage.
-LibTest/math/log_A01_t01: Fail # TODO(kasperl): Please triage.
+LibTest/typed_data/Float64List/join_A01_t01: Pass, Slow # TODO(dart2js-team): Please triage this failure.
+LibTest/typed_data/Int8List/sublist_A02_t01: Pass, Slow # TODO(dart2js-team): Please triage this failure.
+LibTest/typed_data/Int16List/single_A01_t02: Pass, Slow # TODO(dart2js-team): Please triage this failure.
+LibTest/typed_data/Uint8ClampedList/map_A02_t01: Pass, Slow # TODO(dart2js-team): Please triage this failure.
+LibTest/typed_data/Int32x4/operator_OR_A01_t01: RuntimeError # TODO(dart2js-team): Please triage this failure.
+LibTest/typed_data/Float32x4List/Float32x4List.view_A01_t02: RuntimeError # TODO(dart2js-team): Please triage this failure.
+LibTest/typed_data/Float32x4List/Float32x4List.view_A06_t01: RuntimeError # TODO(dart2js-team): Please triage this failure.
+
+
+LibTest/isolate/Isolate/spawnUri_A02_t01: RuntimeError # TODO(dart2js-team): Please triage this failure.
+LibTest/isolate/Isolate/spawn_A01_t04: RuntimeError # TODO(dart2js-team): Please triage this failure.
+
+# These tests are marked failing on all platforms, but they timeout here instead
+LibTest/isolate/Isolate/spawnUri_A01_t01: Skip # TODO(dart2js-team): Please triage this failure.
+LibTest/isolate/Isolate/spawnUri_A01_t02: Skip # TODO(dart2js-team): Please triage this failure.
+LibTest/isolate/Isolate/spawnUri_A01_t03: Skip # TODO(dart2js-team): Please triage this failure.
+LibTest/isolate/Isolate/spawnUri_A02_t02: Skip # TODO(dart2js-team): Please triage this failure.
+LibTest/isolate/Isolate/spawnUri_A02_t03: Skip # TODO(dart2js-team): Please triage this failure.
+LibTest/isolate/Isolate/spawnUri_A02_t04: Skip # TODO(dart2js-team): Please triage this failure.
+
+LibTest/core/Set/removeAll_A01_t02: Pass, Slow # TODO(dart2js-team): Please triage this failure.
+LibTest/core/int/compareTo_A01_t01: Fail # TODO(dart2js-team): Please triage this failure.
+LibTest/core/int/operator_left_shift_A01_t01: Fail # TODO(dart2js-team): Please triage this failure.
+LibTest/core/int/operator_remainder_A01_t03: Fail # TODO(dart2js-team): Please triage this failure.
+LibTest/core/int/operator_truncating_division_A01_t02: Fail # TODO(dart2js-team): Please triage this failure.
+LibTest/core/int/remainder_A01_t01: Fail # TODO(dart2js-team): Please triage this failure.
+LibTest/core/int/remainder_A01_t03: Fail # TODO(dart2js-team): Please triage this failure.
+LibTest/core/int/toRadixString_A01_t01: Fail # TODO(dart2js-team): Please triage this failure.
+
+LibTest/core/RegExp/Pattern_semantics/firstMatch_CharacterEscape_A06_t02: Fail # TODO(dart2js-team): Please triage this failure.
+LibTest/core/RegExp/Pattern_semantics/firstMatch_DecimalEscape_A01_t02: Fail # TODO(dart2js-team): Please triage this failure.
+LibTest/core/RegExp/Pattern_semantics/firstMatch_NonEmptyClassRanges_A01_t01: Fail # TODO(dart2js-team): Please triage this failure.
+LibTest/core/RegExp/Pattern_semantics/firstMatch_NonEmptyClassRanges_A01_t05: Fail # TODO(dart2js-team): Please triage this failure.
+LibTest/core/RegExp/Pattern_semantics/firstMatch_NonEmptyClassRanges_A01_t06: Fail # TODO(dart2js-team): Please triage this failure.
+LibTest/math/log_A01_t01: Fail # TODO(dart2js-team): Please triage this failure.
[ $compiler == dart2js && ($runtime == ie10 || $runtime == ff || $runtime == chrome || $runtime == drt || $runtime == safari || $runtime == opera) ]
@@ -335,7 +345,6 @@
LibTest/typed_data/Uint8List/*: fail, crash # co19-roll r559: Please triage this failure
LibTest/typed_data/Uint16List/*: fail, crash # co19-roll r559: Please triage this failure
LibTest/typed_data/Uint32List/*: fail, crash # co19-roll r559: Please triage this failure
-LibTest/typed_data/Uint32x4/*: fail, crash # co19-roll r559: Please triage this failure
LibTest/typed_data/Uint64List/*: fail, crash # co19-roll r559: Please triage this failure
LibTest/typed_data/Float32List/Float32List_A02_t01: pass # co19-roll r559: Please triage this failure
LibTest/typed_data/Float32x4List/Float32x4List_A02_t01: pass # co19-roll r559: Please triage this failure
@@ -536,7 +545,7 @@
LibTest/typed_data/Float64List/toList_A01_t01: fail, timeout # co19-roll r559: Please triage this failure
LibTest/typed_data/Int16List/hashCode_A01_t01: fail # co19-roll r559: Please triage this failure
LibTest/typed_data/Int16List/Int16List.view_A06_t01: fail # co19-roll r587: Please triage this failure
-LibTest/typed_data/Int16List/toList_A01_t01: pass, fail # co19-roll r559: Please triage this failure
+LibTest/typed_data/Int16List/toList_A01_t01: fail # co19-roll r559: Please triage this failure
LibTest/typed_data/Int16List/toList_A01_t01: timeout # co19-roll r559: Please triage this failure
LibTest/typed_data/Int32List/hashCode_A01_t01: fail # co19-roll r559: Please triage this failure
LibTest/typed_data/Int32List/Int32List.view_A06_t01: fail # co19-roll r587: Please triage this failure
diff --git a/tests/co19/co19-dartium.status b/tests/co19/co19-dartium.status
index c60ac8c..1dabd9c 100644
--- a/tests/co19/co19-dartium.status
+++ b/tests/co19/co19-dartium.status
@@ -22,6 +22,7 @@
LibTest/isolate/Isolate/spawnUri_A01_t04: RuntimeError # co19-roll r672: Please triage this failure
LibTest/isolate/Isolate/spawnUri_A01_t05: RuntimeError # co19-roll r672: Please triage this failure
LibTest/isolate/Isolate/spawnUri_A02_t01: RuntimeError # co19-roll r672: Please triage this failure
+LibTest/isolate/Isolate/spawnUri_A02_t04: Pass, Timeout # Please triage this failure
LibTest/isolate/RawReceivePort/RawReceivePort_A01_t01: RuntimeError # co19-roll r672: Please triage this failure
LibTest/isolate/RawReceivePort/RawReceivePort_A01_t02: RuntimeError # co19-roll r672: Please triage this failure
LibTest/isolate/RawReceivePort/close_A01_t01: RuntimeError # co19-roll r672: Please triage this failure
diff --git a/tests/co19/co19-runtime.status b/tests/co19/co19-runtime.status
index 1e73cf2..16f1123 100644
--- a/tests/co19/co19-runtime.status
+++ b/tests/co19/co19-runtime.status
@@ -18,8 +18,6 @@
LibTest/core/RegExp/firstMatch_A01_t01: Fail # Issue 12508
LibTest/core/int/toRadixString_A01_t01: Fail # co19 issue 492
-LibTest/async/Timer/Timer.periodic_A02_t01: Pass, Fail # co19 issue 537
-
Language/05_Variables/05_Variables_A05_t01: fail # Dart issue 12539
Language/05_Variables/05_Variables_A05_t02: fail # Dart issue 12539
Language/13_Statements/06_For_A01_t11: fail # Dart issue 5675
@@ -32,9 +30,8 @@
# All isolate are being ignored at the moment as the library will go through some changes.
LibTest/isolate/IsolateStream/any_A02_t01: fail # co19-roll r546: Please triage this failure
-LibTest/isolate/IsolateStream/contains_A02_t01: fail, pass # co19-roll r546: Please triage this failure
+LibTest/isolate/IsolateStream/contains_A02_t01: fail # co19-roll r546: Please triage this failure
LibTest/isolate/ReceivePort/receive_A01_t02: Fail # VM triage, check spec.
-LibTest/isolate/SendPort/send_A01_t01: fail # co19-roll r546: Please triage this failure
LibTest/isolate/Isolate/spawnUri_A02_t02: Timeout # co19-roll r672: Please triage this failure
LibTest/isolate/Isolate/spawnUri_A02_t03: Timeout # co19-roll r672: Please triage this failure
@@ -43,10 +40,6 @@
LibTest/core/RegExp/Pattern_semantics/splitQueryString_A02_t01: RuntimeError # co19-roll r607: Please triage this failure
LibTest/core/Symbol/Symbol_A01_t03: RuntimeError # co19-roll r607: Please triage this failure
LibTest/core/Symbol/Symbol_A01_t05: RuntimeError # co19-roll r607: Please triage this failure
-LibTest/typed_data/Float32x4/clamp_A01_t01: Pass, Fail # co19 issue 636
-LibTest/typed_data/Uint32x4/*: Skip # co19 issue 656
-LibTest/typed_data/Float32x4/Float32x4.fromUint32x4Bits_A01_t01: Skip # co19 issue 656
-LibTest/typed_data/Float32x4/Float32x4.fromUint32x4Bits_A01_t02: Skip # co19 issue 656
LibTest/typed_data/Float32x4/equal_A01_t01: Skip # co19 issue 656
LibTest/typed_data/Float32x4/notEqual_A01_t01: Skip # co19 issue 656
LibTest/typed_data/Float32x4/greaterThan_A01_t01: Skip # co19 issue 656
@@ -59,7 +52,6 @@
LibTest/typed_data/Float32x4/reciprocal_A01_t01: Pass, Fail # Issue 13398
[ $compiler == none && $runtime == vm && $checked ]
-LibTest/async/Future/catchError_A01_t01: Fail # Future constructors have changed # issue 408
LibTest/core/List/removeAt_A02_t01: Fail # co19-roll r641: Please triage this failure
# Passing for the wrong reasons:
@@ -71,7 +63,6 @@
#end [ $compiler == none && $runtime == vm && $checked ]
[ $compiler == none && $runtime == vm && $mode == debug ]
-LibTest/async/Stream/Stream.periodic_A03_t01: Fail # co19-roll r546: Please triage this failure
LibTest/isolate/IsolateStream/contains_A02_t01: Fail # co19-roll r546: Please triage this failure
Language/15_Types/4_Interface_Types_A11_t01: Pass, Slow
LibTest/core/List/List_class_A01_t01: Pass, Slow
@@ -89,9 +80,5 @@
[ $compiler == none && $checked && ($runtime == vm || $runtime == dartium) ]
Language/15_Types/1_Static_Types_A03_t01: RuntimeError # co19-roll r667: Please triage this failure
-[ $compiler == none && $runtime == vm && $system == windows && $mode == debug ]
-Language/15_Types/4_Interface_Types_A11_t01: pass, timeout # Issue 13349
-Language/15_Types/4_Interface_Types_A11_t02: pass, timeout # Issue 13349
-
[ $runtime == vm ]
LibTest/isolate/Isolate/spawn_A02_t01: Timeout # co19-roll r672: Please triage this failure
diff --git a/tests/compiler/dart2js/analyze_api_test.dart b/tests/compiler/dart2js/analyze_api_test.dart
index 8965a92..de48a2e 100644
--- a/tests/compiler/dart2js/analyze_api_test.dart
+++ b/tests/compiler/dart2js/analyze_api_test.dart
@@ -20,29 +20,6 @@
// TODO(johnniwinther): Support canonical URIs as keys and message kinds as
// values.
const Map<String, List<String>> WHITE_LIST = const {
- // The following notices go away when bugs 15417 is fixed.
- "sdk/lib/core/map.dart": const [
- "Info: This is the method declaration."],
-
- // Bug 15417.
- "sdk/lib/html/dart2js/html_dart2js.dart": const ["""
-Warning: '_DataAttributeMap' doesn't implement 'addAll'.
-Try adding an implementation of 'addAll'.""", """
-Warning: '_NamespacedAttributeMap' doesn't implement 'addAll'.
-Try adding an implementation of 'addAll'.""", """
-Warning: '_ElementAttributeMap' doesn't implement 'addAll'.
-Try adding an implementation of 'addAll'.""", """
-Warning: 'Window' doesn't implement 'clearInterval'.
-Try adding an implementation of 'clearInterval'.""", """
-Warning: 'Window' doesn't implement 'clearTimeout'.
-Try adding an implementation of 'clearTimeout'.""", """
-Warning: 'Window' doesn't implement 'setInterval'.
-Try adding an implementation of 'setInterval'.""", """
-Warning: 'Window' doesn't implement 'setTimeout'.
-Try adding an implementation of 'setTimeout'.""", """
-Warning: 'Storage' doesn't implement 'addAll'.
-Try adding an implementation of 'addAll'.""",
-"Info: This is the method declaration."],
};
void main() {
diff --git a/tests/compiler/dart2js/cpa_inference_test.dart b/tests/compiler/dart2js/cpa_inference_test.dart
index 2160670..e522a35 100644
--- a/tests/compiler/dart2js/cpa_inference_test.dart
+++ b/tests/compiler/dart2js/cpa_inference_test.dart
@@ -174,7 +174,8 @@
class Type {}
class StackTrace {}
class Dynamic_ {}
- bool identical(Object a, Object b) {}''';
+ bool identical(Object a, Object b) {}
+ const proxy = 0;''';
Future<AnalysisResult> analyze(String code, {int maxConcreteTypeSize: 1000}) {
Uri uri = new Uri(scheme: 'source');
diff --git a/tests/compiler/dart2js/dart2js.status b/tests/compiler/dart2js/dart2js.status
index 1b73d2e..2751baf 100644
--- a/tests/compiler/dart2js/dart2js.status
+++ b/tests/compiler/dart2js/dart2js.status
@@ -9,5 +9,11 @@
analyze_api_test: Pass, Slow
analyze_dart2js_test: Pass, Slow
+# simple_function_subtype_test is temporarily(?) disabled due to new method for
+# building function type tests.
+simple_function_subtype_test: Fail
+
+mirror_final_field_inferrer2_test: Crash, Pass # dartbug.com/15581
+
[ $jscl || $runtime == drt || $runtime == dartium || $runtime == ff || $runtime == firefox || $runtime == chrome || $runtime == safari || $runtime == ie9 || $runtime == opera ]
*: Skip # dart2js uses #import('dart:io'); and it is not self-hosted (yet).
diff --git a/tests/compiler/dart2js/dart_backend_test.dart b/tests/compiler/dart2js/dart_backend_test.dart
index c57dfb3..98595af 100644
--- a/tests/compiler/dart2js/dart_backend_test.dart
+++ b/tests/compiler/dart2js/dart_backend_test.dart
@@ -39,6 +39,7 @@
}
print(x) {}
identical(a, b) => true;
+const proxy = 0;
''';
const ioLib = r'''
diff --git a/tests/compiler/dart2js/dump_info_test.dart b/tests/compiler/dart2js/dump_info_test.dart
new file mode 100644
index 0000000..e34e828
--- /dev/null
+++ b/tests/compiler/dart2js/dump_info_test.dart
@@ -0,0 +1,50 @@
+// Copyright (c) 2012, the Dart project authors. Please see the AUTHORS file
+// for details. All rights reserved. Use of this source code is governed by a
+// BSD-style license that can be found in the LICENSE file.
+// Test that parameters keep their names in the output.
+
+import 'dart:async';
+import "package:expect/expect.dart";
+import "package:async_helper/async_helper.dart";
+import 'memory_compiler.dart';
+
+const String TEST_ONE = r"""
+library main;
+
+int a = 2;
+
+class c {
+ final int m;
+ c(this.m);
+}
+
+void f() {
+ () {} (); // TODO (sigurdm): Empty closure, hack to avoid inlining.
+ a = 2;
+}
+
+main() {
+ f();
+ new c(2);
+}
+""";
+
+main() {
+ var compiler = compilerFor({'main.dart': TEST_ONE});
+ asyncTest(() => compiler.runCompiler(Uri.parse('memory:main.dart')).then((_) {
+ var info = compiler.dumpInfoTask.collectDumpInfo();
+ var mainlib = info.libraries[0];
+ Expect.stringEquals("main", mainlib.name);
+ var contents = mainlib.contents;
+ Expect.stringEquals("main", mainlib.name);
+ Expect.stringEquals("a", contents[0].name);
+ Expect.stringEquals("c", contents[1].name);
+ Expect.stringEquals("f", contents[2].name);
+ Expect.stringEquals("main", contents[3].name);
+ Expect.stringEquals("library", mainlib.kind);
+ Expect.stringEquals("field", contents[0].kind);
+ Expect.stringEquals("class", contents[1].kind);
+ Expect.stringEquals("function", contents[2].kind);
+ Expect.stringEquals("function", contents[3].kind);
+ }));
+}
diff --git a/tests/compiler/dart2js/list_tracer_test.dart b/tests/compiler/dart2js/list_tracer_test.dart
index e599732..738c48c 100644
--- a/tests/compiler/dart2js/list_tracer_test.dart
+++ b/tests/compiler/dart2js/list_tracer_test.dart
@@ -87,6 +87,8 @@
var listPassedAsNamedParameter = $listAllocation;
var listSetInNonFinalField = $listAllocation;
var listWithChangedLength = $listAllocation;
+var listStoredInList = $listAllocation;
+var listStoredInListButEscapes = $listAllocation;
foo(list) {
list[0] = aDouble;
@@ -175,6 +177,13 @@
listWithChangedLength[0] = anInt;
listWithChangedLength.length = 54;
+
+ a = [listStoredInList];
+ a[0][0] = 42;
+
+ a = [listStoredInListButEscapes];
+ a[0][0] = 42;
+ a.forEach((e) => print(e));
}
""";
}
@@ -224,6 +233,8 @@
checkType('listUsedWithNonOkSelector', typesTask.dynamicType);
checkType('listPassedAsOptionalParameter', typesTask.numType);
checkType('listPassedAsNamedParameter', typesTask.numType);
+ checkType('listStoredInList', typesTask.uint31Type);
+ checkType('listStoredInListButEscapes', typesTask.dynamicType);
if (!allocation.contains('filled')) {
checkType('listUnset', new TypeMask.nonNullEmpty());
diff --git a/tests/compiler/dart2js/mirrors_used_test.dart b/tests/compiler/dart2js/mirrors_used_test.dart
index 1eb5892..50ca509 100644
--- a/tests/compiler/dart2js/mirrors_used_test.dart
+++ b/tests/compiler/dart2js/mirrors_used_test.dart
@@ -58,7 +58,7 @@
// 2. Some code was refactored, and there are more methods.
// Either situation could be problematic, but in situation 2, it is often
// acceptable to increase [expectedMethodCount] a little.
- int expectedMethodCount = 346;
+ int expectedMethodCount = 351;
Expect.isTrue(
generatedCode.length <= expectedMethodCount,
'Too many compiled methods: '
@@ -68,8 +68,11 @@
List expectedNames = [
'Foo', // The name of class Foo.
r'Foo$', // The name of class Foo's constructor.
+ r'get$field']; // The (getter) name of Foo.field.
+ // TODO(ahe): Check for the following names, currently they are not being
+ // recorded correctly, but are being emitted.
+ [
'Foo_staticMethod', // The name of Foo.staticMethod.
- r'get$field', // The (getter) name of Foo.field.
r'instanceMethod$0']; // The name of Foo.instanceMethod.
Set recordedNames = new Set()
..addAll(compiler.backend.emitter.recordedMangledNames)
diff --git a/tests/compiler/dart2js/mock_compiler.dart b/tests/compiler/dart2js/mock_compiler.dart
index b24b0f2..1214f30 100644
--- a/tests/compiler/dart2js/mock_compiler.dart
+++ b/tests/compiler/dart2js/mock_compiler.dart
@@ -131,12 +131,15 @@
operator-() => (this is JSInt) ? 42 : 42.2;
operator +(other) => (this is JSInt) ? 42 : 42.2;
operator -(other) => (this is JSInt) ? 42 : 42.2;
- operator ~/(other) => 42;
+ operator ~/(other) => _tdivFast(other);
operator /(other) => (this is JSInt) ? 42 : 42.2;
operator *(other) => (this is JSInt) ? 42 : 42.2;
operator %(other) => (this is JSInt) ? 42 : 42.2;
- operator <<(other) => 42;
- operator >>(other) => 42;
+ operator <<(other) => _shlPositive(other);
+ operator >>(other) {
+ return _shrBothPositive(other) + _shrReceiverPositive(other) +
+ _shrOtherPositive(other);
+ }
operator |(other) => 42;
operator &(other) => 42;
operator ^(other) => 42;
@@ -148,6 +151,12 @@
operator ==(other) => true;
get hashCode => throw "JSNumber.hashCode not implemented.";
+ _tdivFast(other) => 42;
+ _shlPositive(other) => 42;
+ _shrBothPositive(other) => 42;
+ _shrReceiverPositive(other) => 42;
+ _shrOtherPositive(other) => 42;
+
abs() => (this is JSInt) ? 42 : 42.2;
remainder(other) => (this is JSInt) ? 42 : 42.2;
truncate() => 42;
@@ -207,7 +216,8 @@
DateTime.utc(year);
}
abstract class Pattern {}
- bool identical(Object a, Object b) { return true; }''';
+ bool identical(Object a, Object b) { return true; }
+ const proxy = 0;''';
const String DEFAULT_ISOLATE_HELPERLIB = r'''
var startRootIsolate;
diff --git a/tests/compiler/dart2js/proxy_test.dart b/tests/compiler/dart2js/proxy_test.dart
new file mode 100644
index 0000000..c558350
--- /dev/null
+++ b/tests/compiler/dart2js/proxy_test.dart
@@ -0,0 +1,22 @@
+// Copyright (c) 2013, the Dart project authors. Please see the AUTHORS file
+// for details. All rights reserved. Use of this source code is governed by a
+// BSD-style license that can be found in the LICENSE file.
+
+// Test that dart2js produces the expected static type warnings for proxy
+// language tests. This ensures that the analyzer and dart2js agrees on these
+// tests.
+
+import 'warnings_checker.dart';
+
+/// Map from test files to a map of their expected status. If the status map is
+/// `null` no warnings must be missing or unexpected, otherwise the status map
+/// can contain a list of line numbers for keys 'missing' and 'unexpected' for
+/// the warnings of each category.
+const Map<String, dynamic> TESTS = const {
+ 'language/proxy_test.dart': null,
+ 'language/proxy2_test.dart': null,
+};
+
+void main() {
+ checkWarnings(TESTS);
+}
diff --git a/tests/compiler/dart2js/resolver_test.dart b/tests/compiler/dart2js/resolver_test.dart
index 72277c8..fd1534a 100644
--- a/tests/compiler/dart2js/resolver_test.dart
+++ b/tests/compiler/dart2js/resolver_test.dart
@@ -839,7 +839,8 @@
class StackTrace {}
class Dynamic_ {}
class Type {}
- class Object { Object() : super(); }''';
+ class Object { Object() : super(); }
+ const proxy = 0;''';
resolveConstructor(script, "Object o = new Object();", "Object", "", 1,
expectedWarnings: [],
expectedErrors: [MessageKind.SUPER_INITIALIZER_IN_OBJECT],
diff --git a/tests/compiler/dart2js/size_test.dart b/tests/compiler/dart2js/size_test.dart
index 96b5276..d15f924 100644
--- a/tests/compiler/dart2js/size_test.dart
+++ b/tests/compiler/dart2js/size_test.dart
@@ -23,6 +23,7 @@
class Map {}
class StackTrace {}
identical(a, b) => true;
+ const proxy = 0;
''';
main() {
diff --git a/tests/compiler/dart2js/static_closure_test.dart b/tests/compiler/dart2js/static_closure_test.dart
index d08c9f0..9581ac9 100644
--- a/tests/compiler/dart2js/static_closure_test.dart
+++ b/tests/compiler/dart2js/static_closure_test.dart
@@ -18,6 +18,6 @@
// If this test fail, please take a look at the use of
// toStringWrapper in captureStackTrace in js_helper.dart.
Expect.isTrue(code.contains(
- new RegExp(r'print\([$A-Z]+\.main\$closure\);')));
+ new RegExp(r'print\([$A-Z]+\.main\$closure\(\)\);')), code);
}));
}
diff --git a/tests/compiler/dart2js/types_of_captured_variables_test.dart b/tests/compiler/dart2js/types_of_captured_variables_test.dart
index 9e802bd..32f61e3 100644
--- a/tests/compiler/dart2js/types_of_captured_variables_test.dart
+++ b/tests/compiler/dart2js/types_of_captured_variables_test.dart
@@ -9,7 +9,7 @@
const String TEST1 = r"""
main() {
var a = 52;
- var f = () => a + 3;
+ var f = () => a + 87;
f();
}
""";
@@ -18,7 +18,7 @@
main() {
var a = 52;
var g = () { a = 48; };
- var f = () => a + 3;
+ var f = () => a + 87;
f();
g();
}
@@ -28,7 +28,7 @@
main() {
var a = 52;
var g = () { a = 'foo'; };
- var f = () => a + 3;
+ var f = () => a + 87;
f();
g();
}
@@ -37,17 +37,17 @@
main() {
// Test that we know the type of captured, non-mutated variables.
asyncTest(() => compileAll(TEST1).then((generated) {
- Expect.isTrue(generated.contains('+ 3'));
+ Expect.isTrue(generated.contains('+ 87'));
}));
// Test that we know the type of captured, mutated variables.
asyncTest(() => compileAll(TEST2).then((generated) {
- Expect.isTrue(generated.contains('+ 3'));
+ Expect.isTrue(generated.contains('+ 87'));
}));
// Test that we know when types of a captured, mutated variable
// conflict.
asyncTest(() => compileAll(TEST3).then((generated) {
- Expect.isFalse(generated.contains('+ 3'));
+ Expect.isFalse(generated.contains('+ 87'));
}));
}
diff --git a/tests/compiler/dart2js/value_range_test.dart b/tests/compiler/dart2js/value_range_test.dart
index 92ae4c4..89dfabc 100644
--- a/tests/compiler/dart2js/value_range_test.dart
+++ b/tests/compiler/dart2js/value_range_test.dart
@@ -279,7 +279,8 @@
class Null {}
class Dynamic_ {}
class StackTrace {}
- bool identical(Object a, Object b) {}''';
+ bool identical(Object a, Object b) {}
+ const proxy = 0;''';
const String INTERCEPTORSLIB_WITH_MEMBERS = r'''
class Interceptor {
diff --git a/tests/compiler/dart2js_extra/dart2js_extra.status b/tests/compiler/dart2js_extra/dart2js_extra.status
index 5ad5f46..c694332 100644
--- a/tests/compiler/dart2js_extra/dart2js_extra.status
+++ b/tests/compiler/dart2js_extra/dart2js_extra.status
@@ -32,7 +32,7 @@
to_string_test: Fail # Issue 7179.
runtime_type_test: Fail, OK # Tests extected output of Type.toString().
-[ $compiler == dart2js && ($runtime == drt || $runtime == ff || $runtime == safari || $runtime == chrome) ]
+[ $compiler == dart2js && ($runtime == drt || $runtime == ff || $runtime == safari || $runtime == chrome || $runtime == chromeOnAndroid) ]
isolate2_test/01: Fail # Issue 14458.
[ $jscl ]
diff --git a/tests/compiler/dart2js_extra/deferred/deferred_function_test.dart b/tests/compiler/dart2js_extra/deferred/deferred_function_test.dart
index fb4c282..406eb4a 100644
--- a/tests/compiler/dart2js_extra/deferred/deferred_function_test.dart
+++ b/tests/compiler/dart2js_extra/deferred/deferred_function_test.dart
@@ -25,7 +25,7 @@
main() {
Expect.throws(() { foo('a'); }, isNoSuchMethodError);
- Expect.isNull(readFoo());
+ Expect.throws(readFoo, isNoSuchMethodError);
int counter = 0;
asyncStart();
lazy.load().then((bool didLoad) {
@@ -48,5 +48,5 @@
});
Expect.equals(0, counter);
Expect.throws(() { foo('a'); }, isNoSuchMethodError);
- Expect.isNull(readFoo());
+ Expect.throws(readFoo, isNoSuchMethodError);
}
diff --git a/tests/compiler/dart2js_extra/mirror_invalid_field_access4_test.dart b/tests/compiler/dart2js_extra/mirror_invalid_field_access4_test.dart
index cdd562e..7c0f972 100644
--- a/tests/compiler/dart2js_extra/mirror_invalid_field_access4_test.dart
+++ b/tests/compiler/dart2js_extra/mirror_invalid_field_access4_test.dart
@@ -34,7 +34,7 @@
Expect.equals(1, mirror.setField(const Symbol('foo'), 1).reflectee);
Expect.equals(1, mirror.getField(const Symbol('foo')).reflectee);
Expect.throws(() => mirror.setField(const Symbol('bar'), 2),
- (e) => e is UnsupportedError);
+ (e) => e is NoSuchMethodError);
Expect.throws(() => mirror.getField(const Symbol('bar')),
- (e) => e is UnsupportedError);
+ (e) => e is NoSuchMethodError);
}
diff --git a/tests/compiler/dart2js_extra/mirror_invalid_invoke2_test.dart b/tests/compiler/dart2js_extra/mirror_invalid_invoke2_test.dart
index 5955594..9b6d8d2 100644
--- a/tests/compiler/dart2js_extra/mirror_invalid_invoke2_test.dart
+++ b/tests/compiler/dart2js_extra/mirror_invalid_invoke2_test.dart
@@ -29,5 +29,5 @@
var mirror = reflect(c);
Expect.equals(1, mirror.invoke(const Symbol('foo'), []).reflectee);
Expect.throws(() => mirror.invoke(const Symbol('bar'), []),
- (e) => e is UnsupportedError);
+ (e) => e is NoSuchMethodError);
}
diff --git a/tests/compiler/dart2js_extra/mirror_invalid_invoke3_test.dart b/tests/compiler/dart2js_extra/mirror_invalid_invoke3_test.dart
index 0783c70..e142253 100644
--- a/tests/compiler/dart2js_extra/mirror_invalid_invoke3_test.dart
+++ b/tests/compiler/dart2js_extra/mirror_invalid_invoke3_test.dart
@@ -28,5 +28,5 @@
var mirror = reflect(new C()).type; // Workaround bug 12799.
Expect.equals(1, mirror.invoke(const Symbol('foo'), []).reflectee);
Expect.throws(() => mirror.invoke(const Symbol('bar'), []),
- (e) => e is UnsupportedError);
+ (e) => e is NoSuchMethodError);
}
diff --git a/tests/compiler/dart2js_native/internal_library_test.dart b/tests/compiler/dart2js_native/internal_library_test.dart
index d42f826..9645f55 100644
--- a/tests/compiler/dart2js_native/internal_library_test.dart
+++ b/tests/compiler/dart2js_native/internal_library_test.dart
@@ -8,5 +8,5 @@
import 'dart:_isolate_helper';
void main() {
- print(lazyPort);
+ print(controlPort);
}
\ No newline at end of file
diff --git a/tests/corelib/corelib.status b/tests/corelib/corelib.status
index 944143f..e97e429 100644
--- a/tests/corelib/corelib.status
+++ b/tests/corelib/corelib.status
@@ -47,8 +47,10 @@
compare_to2_test: Fail # Bug 4018
symbol_test/01: Fail, Pass # bug 11669
-symbol_test/02: Fail, Pass # bug 11669
-symbol_test/03: Fail, Pass # bug 11669
+
+[ $compiler == none && $runtime != dartium && $runtime != drt ]
+symbol_test/02: MissingCompileTimeError # bug 11669
+symbol_test/03: MissingCompileTimeError # bug 11669
[ $compiler == none || $compiler == dart2dart ]
symbol_test/none: Fail # bug 11669
@@ -122,24 +124,12 @@
list_removeat_test: fail
symbol_test/01: fail # test issue 13730; It is static type warning if "const" instance creation argument type is not compatible with parameter type
-[ $arch == arm ]
-collection_to_string_test: Pass, Crash # Issue: 11207
-
-[ $arch == simarm && $mode == debug ]
-collection_to_string_test: Pass, Crash # Issue: 11207
-
[ $arch == simmips ]
int_parse_radix_test: Skip # Timeout
-[ $arch == simmips && $checked ]
-collection_length_test: Pass, Timeout
-
[ $arch == simarm && $checked ]
num_parse_test: Pass, Timeout
-[ $arch == simmips && $mode == debug ]
-collection_to_string_test: Pass, Crash # Issue: 11207
-
[ $compiler == dartanalyzer || $compiler == dart2analyzer ]
error_stack_trace_test: StaticWarning, OK # Test generates errors on purpose.
iterable_element_at_test: StaticWarning, OK # Test generates errors on purpose.
diff --git a/tests/html/fileapi_test.dart b/tests/html/fileapi_test.dart
index 47f0695..b276e76 100644
--- a/tests/html/fileapi_test.dart
+++ b/tests/html/fileapi_test.dart
@@ -92,12 +92,12 @@
// Do the boilerplate to get several files and directories created to then
// test the functions that use those items.
- Future doDirSetup() {
+ Future doDirSetup(String testName) {
return fs.root.createFile(
- 'file4')
+ 'file_$testName')
.then((FileEntry file) {
return fs.root.createDirectory(
- 'directory3')
+ 'dir_$testName')
.then((DirectoryEntry dir) {
return new Future.value(new FileAndDir(file, dir));
});
@@ -109,7 +109,7 @@
test('getFileSystem', getFileSystem);
test('readEntries', () {
- return doDirSetup()
+ return doDirSetup('readEntries')
.then((fileAndDir) {
var reader = fileAndDir.dir.createReader();
return reader.readEntries();
@@ -125,7 +125,7 @@
test('getFileSystem', getFileSystem);
test('copyTo', () {
- return doDirSetup()
+ return doDirSetup('copyTo')
.then((fileAndDir) {
return fileAndDir.file.copyTo(fileAndDir.dir, name: 'copiedFile');
}).then((entry) {
@@ -135,7 +135,7 @@
});
test('getParent', () {
- return doDirSetup()
+ return doDirSetup('getParent')
.then((fileAndDir) {
return fileAndDir.file.getParent();
}).then((entry) {
@@ -145,12 +145,12 @@
});
test('moveTo', () {
- return doDirSetup()
+ return doDirSetup('moveTo')
.then((fileAndDir) {
return fileAndDir.file.moveTo(fileAndDir.dir, name: 'movedFile');
}).then((entry) {
expect(entry.name, 'movedFile');
- expect(entry.fullPath, '/directory3/movedFile');
+ expect(entry.fullPath, '/dir_moveTo/movedFile');
return fs.root.getFile('file4');
}).catchError((error) {
expect(error.code, equals(FileError.NOT_FOUND_ERR));
@@ -158,7 +158,7 @@
});
test('remove', () {
- return doDirSetup()
+ return doDirSetup('remove')
.then((fileAndDir) {
return fileAndDir.file.remove().then((_) {});
});
@@ -171,7 +171,7 @@
test('getFileSystem', getFileSystem);
test('createWriter', () {
- return doDirSetup()
+ return doDirSetup('createWriter')
.then((fileAndDir) {
return fileAndDir.file.createWriter();
}).then((writer) {
@@ -182,7 +182,7 @@
});
test('file', () {
- return doDirSetup()
+ return doDirSetup('file')
.then((fileAndDir) {
return fileAndDir.file.file()
.then((fileObj) {
diff --git a/tests/html/html.status b/tests/html/html.status
index bda8941..9eaefff 100644
--- a/tests/html/html.status
+++ b/tests/html/html.status
@@ -6,6 +6,9 @@
interactive_test: Skip # Must be run manually.
dromaeo_smoke_test: Skip # Issue 14521, 8257
+[ $compiler == dart2js && $csp && $runtime == drt ]
+mutationobserver_test: Skip # http://dartbug.com/15497
+
[ $compiler == dart2js && $csp ]
custom/js_custom_test: Fail # Issue 14643
@@ -15,7 +18,6 @@
[ $compiler == dart2js && $runtime != drt && $browser ]
custom/document_register_type_extensions_test/namespaces: Fail # Polyfill does not support createElementNS
-custom/document_register_basic_test: Fail # Polyfill is not case-sensitive
custom/entered_left_view_test/viewless_document: Fail # Polyfill does not handle this
custom/attribute_changed_callback_test/unsupported_on_polyfill: Fail # Polyfill does not support
@@ -42,25 +44,26 @@
[ $compiler == dart2js && $runtime == chromeOnAndroid ]
-crypto_test/functional: Pass, Slow # TODO(kasperl): Please triage.
-input_element_test/supported_datetime-local: Pass, Slow # TODO(kasperl): Please triage.
+crypto_test/functional: Pass, Slow # TODO(dart2js-team): Please triage this failure.
+input_element_test/supported_datetime-local: Pass, Slow # TODO(dart2js-team): Please triage this failure.
-fileapi_test/entry: Fail, Pass # TODO(kasperl): Please triage.
-fileapi_test/fileEntry: Fail, Pass # TODO(kasperl): Please triage.
-fileapi_test/getDirectory: Fail, Pass # TODO(kasperl): Please triage.
-fileapi_test/getFile: Fail, Pass # TODO(kasperl): Please triage.
+fileapi_test/entry: Fail, Pass # TODO(dart2js-team): Please triage this failure.
+fileapi_test/fileEntry: Fail, Pass # TODO(dart2js-team): Please triage this failure.
+fileapi_test/getDirectory: Fail, Pass # TODO(dart2js-team): Please triage this failure.
+fileapi_test/getFile: Fail, Pass # TODO(dart2js-team): Please triage this failure.
-audiobuffersourcenode_test/supported: Fail # TODO(kasperl): Please triage.
-canvasrenderingcontext2d_test/drawImage_video_element: Fail # TODO(kasperl): Please triage.
-canvasrenderingcontext2d_test/drawImage_video_element_dataUrl: Fail # TODO(kasperl): Please triage.
-element_types_test/supported_datalist: Fail # TODO(kasperl): Please triage.
-fileapi_test/directoryReader: Fail # TODO(kasperl): Please triage.
-input_element_test/supported_week: Fail # TODO(kasperl): Please triage.
-media_stream_test/supported_media: Fail # TODO(kasperl): Please triage.
-rtc_test/supported: Fail # TODO(kasperl): Please triage.
-speechrecognition_test/supported: Fail # TODO(kasperl): Please triage.
-speechrecognition_test/types: Fail # TODO(kasperl): Please triage.
-xhr_test/json: Fail # TODO(kasperl): Please triage.
+audiocontext_test/supported: RuntimeError # TODO(dart2js-team): Please triage this failure.
+audiobuffersourcenode_test/supported: Fail # TODO(dart2js-team): Please triage this failure.
+canvasrenderingcontext2d_test/drawImage_video_element: Fail # TODO(dart2js-team): Please triage this failure.
+canvasrenderingcontext2d_test/drawImage_video_element_dataUrl: Fail # TODO(dart2js-team): Please triage this failure.
+canvasrenderingcontext2d_test/fillText: Fail # TODO(dart2js-team): Please triage this failure.
+element_types_test/supported_datalist: Fail # TODO(dart2js-team): Please triage this failure.
+input_element_test/supported_week: Fail # TODO(dart2js-team): Please triage this failure.
+media_stream_test/supported_media: Fail # TODO(dart2js-team): Please triage this failure.
+rtc_test/supported: Fail # TODO(dart2js-team): Please triage this failure.
+speechrecognition_test/supported: Fail # TODO(dart2js-team): Please triage this failure.
+speechrecognition_test/types: Fail # TODO(dart2js-team): Please triage this failure.
+xhr_test/json: Fail # TODO(dart2js-team): Please triage this failure.
[ $compiler == dart2js && $runtime == ie10 ]
@@ -71,14 +74,13 @@
[ $compiler == dart2js && ( $runtime == ie9 || $runtime == ie10 ) ]
worker_api_test: Fail # IE does not support URL.createObjectURL in web workers.
-[ $compiler == dart2js && $runtime == safari ]
-audiobuffersourcenode_test/supported: Pass, Timeout # Issue 12772
-
-
[ $compiler == dart2js && $browser && $checked ]
postmessage_structured_test/typed_arrays: Fail # Issue 10097
postmessage_structured_test/primitives: Fail # Issue 10097
+[ $compiler == dart2js && $runtime == chrome ]
+selectelement_test: Skip # http://dartbug.com/15516
+
[ $runtime == chrome ]
canvasrenderingcontext2d_test/drawImage_video_element: Pass,Fail # Issue 11836
canvasrenderingcontext2d_test/drawImage_video_element_dataUrl: Pass,Fail # Issue 11836
@@ -88,8 +90,6 @@
xhr_test: Pass, Fail # Issue 11884
xhr_cross_origin_test: Pass, Fail # Issue 11884
-fileapi_test/fileEntry: Pass, Fail # Issue 15355
-
[$runtime == drt || $runtime == dartium || $runtime == chrome || $runtime == chromeOnAndroid]
webgl_1_test: Pass, Fail # Issue 8219
@@ -171,7 +171,6 @@
isolates_test: Timeout # Issue 13027
blob_constructor_test: Fail
custom/document_register_type_extensions_test/namespaces: Fail # Issue 13193
-document_test/document: Pass, Fail # BUG(9654) need per-instance patching
dom_constructors_test: Fail
element_test/click: Fail # IE does not support firing this event.
form_element_test: Fail # Issue 4793.
@@ -273,14 +272,14 @@
worker_test: Skip # Issue 13221
worker_api_test: Skip # Issue 13221
element_types_test/supported_track: Pass, Fail
-input_element_test/supported_month: Fail, Crash
-input_element_test/supported_time: Fail, Crash
-input_element_test/supported_week: Fail, Crash
+input_element_test/supported_month: RuntimeError
+input_element_test/supported_time: RuntimeError
+input_element_test/supported_week: RuntimeError
webgl_1_test: Pass, Fail # Issue 8219
canvasrenderingcontext2d_test/drawImage_video_element: Fail # Safari does not support drawImage w/ video element
canvasrenderingcontext2d_test/drawImage_video_element_dataUrl: Fail # Safari does not support drawImage w/ video element
audiocontext_test/functional: Fail # Issue 14354
-websql_test/functional: Pass, Fail # Issue 14523
+websql_test/functional: RuntimeError # Issue 14523
# Safari Feature support statuses-
diff --git a/tests/isolate/isolate.status b/tests/isolate/isolate.status
index 4338e96..0df05ed2 100644
--- a/tests/isolate/isolate.status
+++ b/tests/isolate/isolate.status
@@ -50,12 +50,11 @@
[ $compiler == dart2dart ]
*: Skip # Issue 12629
-[ $compiler == dart2js && $runtime == ff && ($system == windows || $system == linux) ]
-mandel_isolate_test: Pass, Fail, Timeout # Issue 7952
-
-[ $compiler == dart2js && ( $runtime == ff || $runtime == safari || $runtime == drt || $runtime == chrome ) ]
+[ $compiler == dart2js && ( $runtime == ff || $runtime == safari || $runtime == drt || $runtime == chrome || $runtime == chromeOnAndroid) ]
isolate_stress_test: Pass, Slow # Issue 10697
-isolate_stress_test: Timeout # Issue 14461
+
+[ $compiler == dart2js && $runtime == chromeOnAndroid ]
+unresolved_ports_test: Pass, Timeout # Issue 15610
[ $compiler == none && $runtime == drt ]
isolate_stress_test: Skip # Issue 14463
diff --git a/tests/language/code_motion_crash_test.dart b/tests/language/code_motion_crash_test.dart
new file mode 100644
index 0000000..315d9a3
--- /dev/null
+++ b/tests/language/code_motion_crash_test.dart
@@ -0,0 +1,43 @@
+// Copyright (c) 2013, the Dart project authors. Please see the AUTHORS file
+// for details. All rights reserved. Use of this source code is governed by a
+// BSD-style license that can be found in the LICENSE file.
+
+// Regression test for dart2js that used to crash during the
+// [SsaCodeMotion] phase on this code.
+
+class A {
+ final finalField;
+ var field = 2;
+ foo() {
+ new A().field = 42;
+ }
+ A._() : finalField = 42;
+ A() : finalField = [new A._(), new B(), new Object()][1];
+}
+
+class B {
+ foo() {}
+ bar() {}
+}
+
+main() {
+ var a = new A();
+ // Create a new block for SsaCodeMotion: the phase will want to move
+ // field access on [a] to this block.
+ if (true) {
+ var b = a.finalField;
+ var d = a.field;
+ b.bar();
+
+ // [c] gets GVN'ed with [b]. As a consequence, the type propagator
+ // that runs after GVN sees that [c] can only be a [B] because of
+ // the call to [bar].
+ var c = a.finalField;
+ c.foo();
+
+ // [e] does not get GVN'ed because the GVN phase sees [c.foo()] as
+ // having side effects.
+ var e = a.field;
+ if (d + e != 4) throw 'Test failed';
+ }
+}
diff --git a/tests/language/cyclic_type_test.dart b/tests/language/cyclic_type_test.dart
new file mode 100644
index 0000000..4c5820c
--- /dev/null
+++ b/tests/language/cyclic_type_test.dart
@@ -0,0 +1,32 @@
+// Copyright (c) 2013, the Dart project authors. Please see the AUTHORS file
+// for details. All rights reserved. Use of this source code is governed by a
+// BSD-style license that can be found in the LICENSE file.
+
+// Tests self referencing types.
+
+import "package:expect/expect.dart";
+
+class Base<T> {
+ get t => T;
+}
+
+class Derived<T> extends Base<Derived<Derived<T>>> {}
+
+class Derived1<T> extends Base<Derived2<T>> {}
+
+class Derived2<T> extends Base<Derived1<Derived2<T>>> {}
+
+main() {
+ var d = new Derived();
+ Expect.equals("Derived<Derived>", d.t.toString());
+ d = new Derived<bool>();
+ Expect.equals("Derived<Derived<bool>>", d.t.toString());
+ d = new Derived<Derived>();
+ Expect.equals("Derived<Derived<Derived>>", d.t.toString());
+ d = new Derived1();
+ Expect.equals("Derived2", d.t.toString());
+ d = new Derived2();
+ Expect.equals("Derived1<Derived2>", d.t.toString());
+ d = new Derived2<Derived1<int>>();
+ Expect.equals("Derived1<Derived2<Derived1<int>>>", d.t.toString());
+}
diff --git a/tests/language/language.status b/tests/language/language.status
index 198b732..3fadd70 100644
--- a/tests/language/language.status
+++ b/tests/language/language.status
@@ -6,11 +6,9 @@
# current state of the language.
[ $compiler == none ]
-mixin_regress_13688_test: RuntimeError # Issue 15244
mixin_super_constructor_named_test: Fail # Issue 12631
mixin_super_constructor_positionals_test: Fail # Issue 12631
built_in_identifier_prefix_test: Fail # Issue 6970
-f_bounded_equality_test: RuntimeError # Issue 14000
# These bugs refer currently ongoing language discussions.
constructor_initializer_test/none: Fail # Issue 12633
@@ -83,5 +81,3 @@
typed_message_test: Crash, Fail # Issue 13921, 14400
vm/optimized_guarded_field_isolates_test: Fail # Issue 13921.
-[ $arch == simarm || $arch == simmips ]
-vm/optimized_identical_test: Pass, Crash # http://dartbug.com/15235
diff --git a/tests/language/language_analyzer.status b/tests/language/language_analyzer.status
index 98fc880..bcdd6cf 100644
--- a/tests/language/language_analyzer.status
+++ b/tests/language/language_analyzer.status
@@ -149,9 +149,6 @@
# test issue 14228
black_listed_test/none: fail # test issue 14228, warnings are required but not expected
-# test issue 14363, "if ((a is B))" has the same effect as "if (a is B)", so no static warning expected
-type_promotion_parameter_test/53: Fail
-
# test issue 14410, "typedef C = " is now really illegal syntax
mixin_illegal_syntax_test/none: fail
@@ -175,6 +172,10 @@
least_upper_bound_expansive_test/11: MissingStaticWarning # Issue 15060
least_upper_bound_expansive_test/12: MissingStaticWarning # Issue 15060
+# test issue 15467
+proxy_test/05: StaticWarning # Issue 15467
+proxy_test/06: StaticWarning # Issue 15467
+
abstract_exact_selector_test: StaticWarning
abstract_getter_test: StaticWarning
abstract_object_method_test: StaticWarning
diff --git a/tests/language/language_analyzer2.status b/tests/language/language_analyzer2.status
index 7f9c48b..e7da090 100644
--- a/tests/language/language_analyzer2.status
+++ b/tests/language/language_analyzer2.status
@@ -18,6 +18,12 @@
override_field_test/03: fail
method_override7_test/03: Fail # Issue 11496
+assignable_expression_test/02: Fail # Issue 15471
+assignable_expression_test/12: Fail # Issue 15471
+assignable_expression_test/22: Fail # Issue 15471
+assignable_expression_test/32: Fail # Issue 15471
+assignable_expression_test/42: Fail # Issue 15471
+
# Please add new failing tests before this line.
# Section below is for invalid tests.
#
@@ -143,9 +149,6 @@
# test issue 14228
black_listed_test/none: fail # test issue 14228, warnings are required but not expected
-# test issue 14363, "if ((a is B))" has the same effect as "if (a is B)", so no static warning expected
-type_promotion_parameter_test/53: Fail
-
# test issue 14410, "typedef C = " is now really illegal syntax
mixin_illegal_syntax_test/none: fail
@@ -169,6 +172,10 @@
least_upper_bound_expansive_test/11: MissingStaticWarning # Issue 15060
least_upper_bound_expansive_test/12: MissingStaticWarning # Issue 15060
+# test issue 15467
+proxy_test/05: StaticWarning # Issue 15467
+proxy_test/06: StaticWarning # Issue 15467
+
abstract_exact_selector_test: StaticWarning
abstract_getter_test: StaticWarning
abstract_object_method_test: StaticWarning
@@ -454,4 +461,3 @@
vm/type_cast_vm_test: StaticWarning
vm/type_vm_test: StaticWarning
void_type_test: StaticWarning
-
diff --git a/tests/language/language_dart2js.status b/tests/language/language_dart2js.status
index 70f90358..8b873d9 100644
--- a/tests/language/language_dart2js.status
+++ b/tests/language/language_dart2js.status
@@ -82,6 +82,7 @@
issue13474_test: RuntimeError, OK
[ $compiler == dart2js && $minified ]
+cyclic_type_test: Fail # Issue 12605.
f_bounded_quantification4_test: Fail # Issue 12605.
f_bounded_quantification5_test: Fail # Issue 12605.
mixin_generic_test: Fail # Issue 12605.
@@ -92,6 +93,7 @@
mixin_mixin6_test: Fail # Issue 12605.
[ $compiler == dart2js ]
+function_type_alias9_test/00: Crash
malformed_test/none: RuntimeError # Issue 12695
branch_canonicalization_test: RuntimeError # Issue 638.
identical_closure2_test: RuntimeError # Issue 1533, Issue 12596
@@ -197,7 +199,6 @@
[ $compiler == dart2dart ]
regress_13494_test: Fail # Issue 13494
malformed_test/none: CompileTimeError # Issue 12695
-mixin_regress_13688_test: RuntimeError # Issue 15244
mixin_super_constructor_named_test: Fail # Issue 12631
mixin_super_constructor_positionals_test: Fail # Issue 12631
@@ -245,7 +246,7 @@
not_enough_positional_arguments_test/05: Fail # Issue 12839
metadata_test: Fail # Issue 12762
-const_var_test: Pass, Fail # Issue 12794
+const_var_test: CompileTimeError # Issue 12794
map_literal3_test: Fail # Issue 12794
external_test/13: Fail # Issue 12888
built_in_identifier_test/01: Fail # Issue 13022
@@ -265,7 +266,6 @@
constructor5_test: Fail
constructor6_test: Fail
closure_in_initializer_test: Fail
-f_bounded_equality_test: RuntimeError # Issue 14000
# Minified mode failures.
@@ -296,6 +296,7 @@
malbounded_instantiation_test/01: Fail # Issue 14132
[ $compiler == dart2dart && $minified ]
+cyclic_type_test: Fail # Issue 12605.
super_getter_setter_test: Fail # Issue 11065.
f_bounded_quantification4_test: Fail # Issue 12605.
f_bounded_quantification5_test: Fail # Issue 12605.
@@ -313,3 +314,6 @@
[ $runtime == ie9 ]
stack_trace_test: Fail, OK # Stack traces not available in IE9.
+
+[ $compiler == dart2js && $host_checked ]
+const_factory_with_body_test/01: Crash
diff --git a/tests/language/list_tracer_in_map_test.dart b/tests/language/list_tracer_in_map_test.dart
new file mode 100644
index 0000000..95290a0
--- /dev/null
+++ b/tests/language/list_tracer_in_map_test.dart
@@ -0,0 +1,14 @@
+// Copyright (c) 2013, the Dart project authors. Please see the AUTHORS file
+// for details. All rights reserved. Use of this source code is governed by a
+// BSD-style license that can be found in the LICENSE file.
+
+// Regression test for dart2js, whose type inferrer used to not see
+// literal maps as places where a list could escape.
+
+var b = [42];
+var a = {'foo': b};
+
+main() {
+ a['foo'].clear();
+ if (b.length != 0) throw 'Test failed';
+}
diff --git a/tests/language/phi_merge_test.dart b/tests/language/phi_merge_test.dart
new file mode 100644
index 0000000..8001011
--- /dev/null
+++ b/tests/language/phi_merge_test.dart
@@ -0,0 +1,30 @@
+// Copyright (c) 2013, the Dart project authors. Please see the AUTHORS file
+// for details. All rights reserved. Use of this source code is governed by a
+// BSD-style license that can be found in the LICENSE file.
+
+// Regression test for dart2js that used to crash on this code.
+
+class A {
+ operator[]=(index, value) {
+ switch (value) {
+ case 42: break;
+ case 43: break;
+ }
+ }
+}
+
+main() {
+ // Make [a] a phi.
+ var a;
+ if (true) {
+ a = new A();
+ } else {
+ a = new A();
+ }
+ // `A[]=` being inlined, the compiler was confused when merging the
+ // phis after the switch.
+ a[0] = 42;
+
+ // Use [a] to provoke the crash.
+ print(a);
+}
diff --git a/tests/language/proxy2_test.dart b/tests/language/proxy2_test.dart
new file mode 100644
index 0000000..ad69472
--- /dev/null
+++ b/tests/language/proxy2_test.dart
@@ -0,0 +1,27 @@
+// Copyright (c) 2013, the Dart project authors. Please see the AUTHORS file
+// for details. All rights reserved. Use of this source code is governed by a
+// BSD-style license that can be found in the LICENSE file.
+
+// Test for static warnings for member access on classes with @proxy annotation.
+
+import 'dart:core' as core;
+
+class Fake {
+ const Fake();
+}
+
+const proxy = const Fake();
+
+@proxy
+class WrongProxy {}
+
+@core.proxy
+class PrefixProxy {}
+
+main() {
+ try { new WrongProxy().foo; } catch (e) {} /// 01: static type warning
+ try { new WrongProxy().foo(); } catch (e) {} /// 02: static type warning
+
+ try { new PrefixProxy().foo; } catch (e) {} /// 03: ok
+ try { new PrefixProxy().foo(); } catch (e) {} /// 04: ok
+}
diff --git a/tests/language/proxy_test.dart b/tests/language/proxy_test.dart
new file mode 100644
index 0000000..4d4c1c7
--- /dev/null
+++ b/tests/language/proxy_test.dart
@@ -0,0 +1,26 @@
+// Copyright (c) 2013, the Dart project authors. Please see the AUTHORS file
+// for details. All rights reserved. Use of this source code is governed by a
+// BSD-style license that can be found in the LICENSE file.
+
+// Test for static warnings for member access on classes with @proxy annotation.
+
+class NonProxy {}
+
+@proxy
+class Proxy {}
+
+const alias = proxy;
+
+@alias
+class AliasProxy {}
+
+main() {
+ try { new NonProxy().foo; } catch (e) {} /// 01: static type warning
+ try { new NonProxy().foo(); } catch (e) {} /// 02: static type warning
+
+ try { new Proxy().foo; } catch (e) {} /// 03: ok
+ try { new Proxy().foo(); } catch (e) {} /// 04: ok
+
+ try { new AliasProxy().foo; } catch (e) {} /// 05: ok
+ try { new AliasProxy().foo(); } catch (e) {} /// 06: ok
+}
\ No newline at end of file
diff --git a/tests/language/truncdiv_uint32_test.dart b/tests/language/truncdiv_uint32_test.dart
new file mode 100644
index 0000000..46930a4
--- /dev/null
+++ b/tests/language/truncdiv_uint32_test.dart
@@ -0,0 +1,9 @@
+// Copyright (c) 2013, the Dart project authors. Please see the AUTHORS file
+// for details. All rights reserved. Use of this source code is governed by a
+// BSD-style license that can be found in the LICENSE file.
+
+var a = [0xFFFFFFFF];
+
+main() {
+ if (a[0] ~/ 1 != 0xFFFFFFFF) throw 'Test failed';
+}
diff --git a/tests/language/type_variable_function_type_test.dart b/tests/language/type_variable_function_type_test.dart
new file mode 100644
index 0000000..6c2d515
--- /dev/null
+++ b/tests/language/type_variable_function_type_test.dart
@@ -0,0 +1,25 @@
+// Copyright (c) 2013, the Dart project authors. Please see the AUTHORS file
+// for details. All rights reserved. Use of this source code is governed by a
+// BSD-style license that can be found in the LICENSE file.
+
+import 'package:expect/expect.dart';
+
+typedef T Func<T>();
+
+class Foo<S> {
+ m(x) => x is Func<S>;
+}
+
+class Bar<T> {
+ f() {
+ T local() {}
+ return local;
+ }
+}
+
+void main() {
+ var x = new Foo<List<String>>();
+ if (new DateTime.now().millisecondsSinceEpoch == 42) x = new Foo<int>();
+ Expect.isFalse(x.m(new Bar<String>().f()));
+ Expect.isTrue(x.m(new Bar<List<String>>().f()));
+}
diff --git a/tests/lib/analyzer/analyze_library.status b/tests/lib/analyzer/analyze_library.status
index d05992f..5a398f4 100644
--- a/tests/lib/analyzer/analyze_library.status
+++ b/tests/lib/analyzer/analyze_library.status
@@ -11,7 +11,6 @@
lib/html/dartium/html_dartium: CompileTimeError
lib/html/html_common/html_common: CompileTimeError
lib/html/html_common/html_common_dart2js: CompileTimeError
-lib/html/html_common/lists: Pass, CompileTimeError
lib/indexed_db/dart2js/indexed_db_dart2js: CompileTimeError
lib/indexed_db/dartium/indexed_db_dartium: CompileTimeError
lib/_internal/compiler/samples/compile_loop/compile_loop: CompileTimeError
@@ -27,18 +26,7 @@
lib/_internal/dartdoc/lib/src/client/search: CompileTimeError
lib/_internal/dartdoc/lib/universe_serializer: CompileTimeError
lib/_internal/pub/lib/src/barback: Pass, CompileTimeError # Pass necessary, since CompileTimeError is valid for everything in that directory (not only for src/barback.dart)
-lib/_internal/pub/lib/src/barback/dart2js_transformer: CompileTimeError
-lib/_internal/pub/lib/src/barback/dart_forwarding_transformer: CompileTimeError
-lib/_internal/pub/lib/src/barback/load_all_transformers: CompileTimeError
-lib/_internal/pub/lib/src/barback/load_transformers: CompileTimeError
-lib/_internal/pub/lib/src/barback/pub_package_provider: CompileTimeError
-lib/_internal/pub/lib/src/barback/server: CompileTimeError
-lib/_internal/pub/lib/src/barback/sources: CompileTimeError
-lib/_internal/pub/lib/src/command/build: CompileTimeError
-lib/_internal/pub/lib/src/command/lish: CompileTimeError
-lib/_internal/pub/lib/src/command/list_package_dirs: CompileTimeError
lib/_internal/pub/lib/src/command: Pass, CompileTimeError # Pass necessary, since CompileTimeError is valid for everything in that directory (not only for src/command.dart)
-lib/_internal/pub/lib/src/command/uploader: CompileTimeError
lib/_internal/pub/test/descriptor: Pass, CompileTimeError # Pass necessary, since CompileTimeError is valid for everything in that directory (not only for test/descriptor.dart)
lib/_internal/pub/test/lish/utils: CompileTimeError
lib/_internal/pub/test/oauth2/utils: CompileTimeError
diff --git a/tests/lib/async/multiple_timer_test.dart b/tests/lib/async/multiple_timer_test.dart
index 0a57ef0..6310813 100644
--- a/tests/lib/async/multiple_timer_test.dart
+++ b/tests/lib/async/multiple_timer_test.dart
@@ -12,13 +12,11 @@
const Duration TIMEOUT3 = const Duration(milliseconds: 500);
const Duration TIMEOUT4 = const Duration(milliseconds: 1500);
-// The stopwatch is more precise than the Timer. It can happen that
-// the TIMEOUT triggers *slightly* too early on the VM. So we add a millisecond
-// as safetymargin.
+// The stopwatch is more precise than the Timer.
// Some browsers (Firefox and IE so far) can trigger too early. So we add more
// margin. We use identical(1, 1.0) as an easy way to know if the test is
// compiled by dart2js.
-int get safetyMargin => identical(1, 1.0) ? 100 : 1;
+int get safetyMargin => identical(1, 1.0) ? 100 : 0;
main() {
test("multiple timer test", () {
diff --git a/tests/lib/async/stream_periodic3_test.dart b/tests/lib/async/stream_periodic3_test.dart
index 7f31d75..a82e556 100644
--- a/tests/lib/async/stream_periodic3_test.dart
+++ b/tests/lib/async/stream_periodic3_test.dart
@@ -8,13 +8,11 @@
import "dart:async";
import '../../../pkg/unittest/lib/unittest.dart';
-// The stopwatch is more precise than the Timer. It can happen that
-// the TIMEOUT triggers *slightly* too early on the VM. So we add a millisecond
-// as safetymargin.
+// The stopwatch is more precise than the Timer.
// Some browsers (Firefox and IE so far) can trigger too early. So we add more
// margin. We use identical(1, 1.0) as an easy way to know if the test is
// compiled by dart2js.
-int get safetyMargin => identical(1, 1.0) ? 5 : 1;
+int get safetyMargin => identical(1, 1.0) ? 5 : 0;
main() {
test("stream-periodic3", () {
diff --git a/tests/lib/async/timer_isolate_test.dart b/tests/lib/async/timer_isolate_test.dart
index 8c6c5fb..1e0cb9b 100644
--- a/tests/lib/async/timer_isolate_test.dart
+++ b/tests/lib/async/timer_isolate_test.dart
@@ -13,7 +13,7 @@
// Some browsers (Firefox and IE so far) can trigger too early. Add a safety
// margin. We use identical(1, 1.0) as an easy way to know if the test is
// compiled by dart2js.
-int get safetyMargin => identical(1, 1.0) ? 100 : 1;
+int get safetyMargin => identical(1, 1.0) ? 100 : 0;
createTimer(replyTo) {
new Timer(TIMEOUT, () {
diff --git a/tests/lib/async/timer_test.dart b/tests/lib/async/timer_test.dart
index cbb317c..057d3a7 100644
--- a/tests/lib/async/timer_test.dart
+++ b/tests/lib/async/timer_test.dart
@@ -18,7 +18,7 @@
// Some browsers (Firefox and IE so far) can trigger too early. Add a safety
// margin. We use identical(1, 1.0) as an easy way to know if the test is
// compiled by dart2js.
-int get safetyMargin => identical(1, 1.0) ? 100 : 1;
+int get safetyMargin => identical(1, 1.0) ? 100 : 0;
void timeoutHandler() {
int endTime = (new DateTime.now()).millisecondsSinceEpoch;
diff --git a/tests/lib/lib.status b/tests/lib/lib.status
index 7567494..789712d 100644
--- a/tests/lib/lib.status
+++ b/tests/lib/lib.status
@@ -2,6 +2,11 @@
# for details. All rights reserved. Use of this source code is governed by a
# BSD-style license that can be found in the LICENSE file.
+[ $compiler == dart2js && $checked && $runtime == ie9 ]
+convert/ascii_test: Skip # http://dartbug.com/15498
+convert/streamed_conversion_json_utf8_encode_test: Skip # http://dartbug.com/15498
+convert/streamed_conversion_utf8_encode_test: Skip # http://dartbug.com/15498
+
[ $csp ]
mirrors/delegate_test: RuntimeError # Issue 13864
@@ -38,6 +43,7 @@
mirrors/instance_members_unimplemented_interface_test: RuntimeError # Issue 14633
mirrors/intercepted_superclass_test: RuntimeError # Issue 13644
mirrors/invoke_test: RuntimeError # Issue 11954
+mirrors/invoke_call_through_getter_test: RuntimeError # Issue 15138
mirrors/invoke_closurization_test: RuntimeError # Issue 13002
mirrors/invoke_named_test/none: RuntimeError # Issue 12863
mirrors/invoke_private_test: CompileTimeError # Issue 12164
@@ -54,7 +60,6 @@
mirrors/metadata_allowed_values_test/14: MissingCompileTimeError # Issue 14548
mirrors/method_mirror_name_test: RuntimeError # Issue 6335
mirrors/method_mirror_properties_test: RuntimeError # Issue 11861
-mirrors/method_mirror_returntype_test : RuntimeError # Issue 11928
mirrors/method_mirror_source_test : RuntimeError # Issue 6490
mirrors/mirrors_test: RuntimeError # TODO(ahe): I'm working on fixing this.
mirrors/mixin_test: RuntimeError # Issue 12464
@@ -69,21 +74,27 @@
mirrors/redirecting_factory_test/02: RuntimeError # Issue 6490
mirrors/reflected_type_test: RuntimeError # Issue 12607
mirrors/repeated_private_anon_mixin_app_test: RuntimeError # Issue 14670
-mirrors/static_members_test: CompileTimeError # Issue 14633, Issue 12164
mirrors/symbol_validation_test: RuntimeError # Issue 13597
-mirrors/toplevel_members_test: CompileTimeError # Issue 14633, Issue 12164
+mirrors/static_members_test: RuntimeError # Issue 14633, Issue 12164
+mirrors/synthetic_accessor_properties_test: RuntimeError # Issue 14633
+mirrors/toplevel_members_test: RuntimeError # Issue 14633, Issue 12164
mirrors/typedef_test/none: RuntimeError # http://dartbug.com/6490
mirrors/typedef_metadata_test: RuntimeError # Issue 12785
mirrors/typevariable_mirror_metadata_test: CompileTimeError # Issue 10905
mirrors/type_variable_owner_test/01: RuntimeError # Issue 12785
mirrors/variable_is_const_test/none: RuntimeError # Issue 14671
mirrors/variable_is_const_test/01: MissingCompileTimeError # Issue 5519
+mirrors/list_constructor_test/01: RuntimeError # Issue 13523
[ $runtime == safari ]
-mirrors/return_type_test: Pass, Timeout # Issue 12858
typed_data/setRange_2_test: Fail # Safari doesn't fully implement spec for TypedArray.set
typed_data/setRange_3_test: Fail # Safari doesn't fully implement spec for TypedArray.set
+[ $compiler == dart2js && $runtime == chromeOnAndroid ]
+typed_data/setRange_2_test: RuntimeError # TODO(dart2js-team): Please triage this failure.
+typed_data/setRange_3_test: RuntimeError # TODO(dart2js-team): Please triage this failure.
+mirrors/invoke_subscript_test: RuntimeError, Timeout # Issue 15610
+
[ $compiler == dart2js && $runtime != jsshell && $runtime != safari && $runtime != ff && $runtime != ie9 && $runtime != ie10]
math/math_test: RuntimeError
math/math2_test: RuntimeError
@@ -131,6 +142,11 @@
[ $compiler == dart2js && $checked ]
convert/utf85_test: Pass, Slow # Issue 12029.
+[ $compiler == dart2js ]
+convert/chunked_conversion_utf88_test: Slow, Pass
+convert/utf85_test: Slow, Pass
+
+
[ $compiler == dart2js && $browser ]
async/timer_not_available_test: Fail, OK # only meant to test when there is no way to
# implement timer (currently only in d8)
@@ -144,13 +160,13 @@
[ $compiler == dart2js && $minified ]
mirrors/typedef_test/01: Fail # http://dartbug.com/6490
+mirrors/list_constructor_test/none: Fail # http://dartbug.com/15555
[ $runtime == ff ]
# FF setTimeout can fire early: https://bugzilla.mozilla.org/show_bug.cgi?id=291386
async/multiple_timer_test: Pass, Fail # Issue 14734
async/timer_isolate_test: Pass, Fail # Issue 14734
async/timer_test: Pass, Fail # Issue 14734
-convert/chunked_conversion_utf88_test: Pass, Timeout # Issue 12029
convert/streamed_conversion_utf8_encode_test: Pass, Timeout # Issue 12029
convert/streamed_conversion_utf8_decode_test: Pass, Slow # Issue 12029
@@ -188,17 +204,10 @@
mirrors/intercepted_object_test: Fail, OK # TODO(ahe): Slight broken test to ensure test coverage on dart2js.
mirrors/typedef_test/01: Fail, OK # Incorrect dart2js behavior.
-mirrors/generics_double_substitution_test/01: RuntimeError # Issue 14869
-
mirrors/generic_local_function_test: RuntimeError # Issue 14913
-
mirrors/symbol_validation_test: RuntimeError # Issue 13596
-
-mirrors/static_members_test: RuntimeError # Issue 14632
+mirrors/synthetic_accessor_properties_test/none: RuntimeError # Issue 14632
mirrors/toplevel_members_test: RuntimeError # Issue 14632
-mirrors/instance_members_test: RuntimeError # Issue 14632
-mirrors/instance_members_with_override_test: RuntimeError # Issue 14632
-mirrors/instance_members_unimplemented_interface_test: RuntimeError # Issue 14632
async/timer_not_available_test: SkipByDesign # only meant to test when there is no way to implement timer (currently only in d8)
@@ -211,6 +220,12 @@
typed_data/setRange_2_test: Fail # Issue 15413
typed_data/setRange_3_test: Fail # Issue 15413
+[ $compiler == none && ( $runtime == drt || $runtime == dartium ) ]
+async/timer_test: Fail, Pass # Issue 15487
+async/multiple_timer_test: Fail, Pass # Issue 15487
+async/stream_periodic3_test: Fail, Pass # Issue 15487
+async/timer_isolate_test: Fail, Pass # Issue 15487
+
[ $compiler == none && $runtime == drt && $system == windows ]
async/multiple_timer_test: Fail, Pass # See Issue 10982
async/timer_test: Fail, Pass # See Issue 10982
diff --git a/tests/lib/mirrors/instance_members_test.dart b/tests/lib/mirrors/instance_members_test.dart
index cf223d5..8f2f477 100644
--- a/tests/lib/mirrors/instance_members_test.dart
+++ b/tests/lib/mirrors/instance_members_test.dart
@@ -50,5 +50,5 @@
const Symbol('inheritedInstanceVariable='),
#mixinInstanceVariable,
const Symbol('mixinInstanceVariable=')],
- selectKeys(cm.instanceMembers, (dm) => dm.isSynthetic));
+ selectKeys(cm.instanceMembers, (dm) => !dm.isPrivate && dm.isSynthetic));
}
diff --git a/tests/lib/mirrors/invoke_call_through_getter_test.dart b/tests/lib/mirrors/invoke_call_through_getter_test.dart
new file mode 100644
index 0000000..71dca68
--- /dev/null
+++ b/tests/lib/mirrors/invoke_call_through_getter_test.dart
@@ -0,0 +1,139 @@
+// Copyright (c) 2013, the Dart project authors. Please see the AUTHORS file
+// for details. All rights reserved. Use of this source code is governed by a
+// BSD-style license that can be found in the LICENSE file.
+
+library test.invoke_call_through_getter;
+
+import 'dart:mirrors';
+
+import 'package:expect/expect.dart';
+
+class FakeFunctionCall {
+ call(x, y) => '1 $x $y';
+}
+class FakeFunctionNSM {
+ noSuchMethod(msg) => msg.positionalArguments.join(', ');
+}
+
+class C {
+ get fakeFunctionCall => new FakeFunctionCall();
+ get fakeFunctionNSM => new FakeFunctionNSM();
+ get closure => (x, y) => '2 $this $x $y';
+ get closureOpt => (x, y, [z, w]) => '3 $this $x $y $z $w';
+ get closureNamed => (x, y, {z, w}) => '4 $this $x $y $z $w';
+ get notAClosure => 'Not a closure';
+ noSuchMethod(msg) => 'DNU';
+
+ toString() => 'C';
+}
+
+testInstanceBase() {
+ var c = new C();
+
+ Expect.equals('1 5 6', c.fakeFunctionCall(5, 6));
+ Expect.equals('7, 8', c.fakeFunctionNSM(7, 8));
+ Expect.equals('2 C 9 10', c.closure(9, 10));
+ Expect.equals('3 C 11 12 13 null', c.closureOpt(11, 12, 13));
+ Expect.equals('4 C 14 15 null 16', c.closureNamed(14, 15, w: 16));
+ Expect.equals('DNU', c.doesNotExist(17, 18));
+ Expect.throws(() => c.closure('wrong arity'), (e) => e is NoSuchMethodError);
+ Expect.throws(() => c.notAClosure(), (e) => e is NoSuchMethodError);
+}
+
+testInstanceReflective() {
+ InstanceMirror im = reflect(new C());
+
+ Expect.equals('1 5 6',
+ im.invoke(#fakeFunctionCall, [5, 6]).reflectee);
+ Expect.equals('7, 8',
+ im.invoke(#fakeFunctionNSM, [7, 8]).reflectee);
+ Expect.equals('2 C 9 10',
+ im.invoke(#closure, [9, 10]).reflectee);
+ Expect.equals('3 C 11 12 13 null',
+ im.invoke(#closureOpt, [11, 12, 13]).reflectee);
+ Expect.equals('4 C 14 15 null 16',
+ im.invoke(#closureNamed, [14, 15], {#w: 16}).reflectee);
+ Expect.equals('DNU',
+ im.invoke(#doesNotExist, [17, 18]).reflectee);
+ Expect.throws(() => im.invoke(#closure, ['wrong arity']),
+ (e) => e is NoSuchMethodError);
+ Expect.throws(() => im.invoke(#notAClosure, []),
+ (e) => e is NoSuchMethodError);
+}
+
+class D {
+ static get fakeFunctionCall => new FakeFunctionCall();
+ static get fakeFunctionNSM => new FakeFunctionNSM();
+ static get closure => (x, y) => '2 $x $y';
+ static get closureOpt => (x, y, [z, w]) => '3 $x $y $z $w';
+ static get closureNamed => (x, y, {z, w}) => '4 $x $y $z $w';
+ static get notAClosure => 'Not a closure';
+}
+
+testClassBase() {
+ Expect.equals('1 5 6', D.fakeFunctionCall(5, 6));
+ Expect.equals('7, 8', D.fakeFunctionNSM(7, 8));
+ Expect.equals('2 9 10', D.closure(9, 10));
+ Expect.equals('3 11 12 13 null', D.closureOpt(11, 12, 13));
+ Expect.equals('4 14 15 null 16', D.closureNamed(14, 15, w: 16));
+ Expect.throws(() => D.closure('wrong arity'), (e) => e is NoSuchMethodError);
+}
+
+testClassReflective() {
+ ClassMirror cm = reflectClass(D);
+
+ Expect.equals('1 5 6',
+ cm.invoke(#fakeFunctionCall, [5, 6]).reflectee);
+ Expect.equals('7, 8',
+ cm.invoke(#fakeFunctionNSM, [7, 8]).reflectee);
+ Expect.equals('2 9 10',
+ cm.invoke(#closure, [9, 10]).reflectee);
+ Expect.equals('3 11 12 13 null',
+ cm.invoke(#closureOpt, [11, 12, 13]).reflectee);
+ Expect.equals('4 14 15 null 16',
+ cm.invoke(#closureNamed, [14, 15], {#w: 16}).reflectee);
+ Expect.throws(() => cm.invoke(#closure, ['wrong arity']),
+ (e) => e is NoSuchMethodError);
+}
+
+get fakeFunctionCall => new FakeFunctionCall();
+get fakeFunctionNSM => new FakeFunctionNSM();
+get closure => (x, y) => '2 $x $y';
+get closureOpt => (x, y, [z, w]) => '3 $x $y $z $w';
+get closureNamed => (x, y, {z, w}) => '4 $x $y $z $w';
+get notAClosure => 'Not a closure';
+
+testLibraryBase() {
+ Expect.equals('1 5 6', fakeFunctionCall(5, 6));
+ Expect.equals('7, 8', fakeFunctionNSM(7, 8));
+ Expect.equals('2 9 10', closure(9, 10));
+ Expect.equals('3 11 12 13 null', closureOpt(11, 12, 13));
+ Expect.equals('4 14 15 null 16', closureNamed(14, 15, w: 16));
+ Expect.throws(() => closure('wrong arity'), (e) => e is NoSuchMethodError);
+}
+
+testLibraryReflective() {
+ LibraryMirror lm = reflectClass(D).owner;
+
+ Expect.equals('1 5 6',
+ lm.invoke(#fakeFunctionCall, [5, 6]).reflectee);
+ Expect.equals('7, 8',
+ lm.invoke(#fakeFunctionNSM, [7, 8]).reflectee);
+ Expect.equals('2 9 10',
+ lm.invoke(#closure, [9, 10]).reflectee);
+ Expect.equals('3 11 12 13 null',
+ lm.invoke(#closureOpt, [11, 12, 13]).reflectee);
+ Expect.equals('4 14 15 null 16',
+ lm.invoke(#closureNamed, [14, 15], {#w: 16}).reflectee);
+ Expect.throws(() => lm.invoke(#closure, ['wrong arity']),
+ (e) => e is NoSuchMethodError);
+}
+
+main() {
+ testInstanceBase();
+ testInstanceReflective();
+ testClassBase();
+ testClassReflective();
+ testLibraryBase();
+ testLibraryReflective();
+}
diff --git a/tests/lib/mirrors/list_constructor_test.dart b/tests/lib/mirrors/list_constructor_test.dart
new file mode 100644
index 0000000..c25d038
--- /dev/null
+++ b/tests/lib/mirrors/list_constructor_test.dart
@@ -0,0 +1,31 @@
+// Copyright (c) 2013, the Dart project authors. Please see the AUTHORS file
+// for details. All rights reserved. Use of this source code is governed by a
+// BSD-style license that can be found in the LICENSE file.
+
+import "package:expect/expect.dart";
+
+import 'dart:mirrors';
+
+main() {
+ var cls = reflectClass(List);
+ Expect.throws(() => cls.newInstance(const Symbol(''), [null]),
+ (e) => e is ArgumentError);
+
+ var list = cls.newInstance(const Symbol(''), [42]).reflectee;
+ // Check that the list is fixed.
+ Expect.equals(42, list.length);
+ Expect.throws(() => list.add(2), (e) => e is UnsupportedError);
+ list[0] = 1;
+ Expect.equals(1, list[0]);
+
+ testGrowableList(); /// 01: ok
+}
+
+testGrowableList() {
+ var cls = reflectClass(List);
+ var list = cls.newInstance(const Symbol(''), []).reflectee;
+ // Check that the list is growable.
+ Expect.equals(0, list.length);
+ list.add(42);
+ Expect.equals(1, list.length);
+}
diff --git a/tests/lib/mirrors/static_members_test.dart b/tests/lib/mirrors/static_members_test.dart
index 0bc9e20..a4551cc 100644
--- a/tests/lib/mirrors/static_members_test.dart
+++ b/tests/lib/mirrors/static_members_test.dart
@@ -16,6 +16,7 @@
main() {
ClassMirror cm = reflectClass(declarations_model.Class);
+ LibraryMirror lm = cm.owner;
Expect.setEquals(
[#staticVariable,
@@ -23,17 +24,18 @@
#staticGetter,
const Symbol('staticSetter='),
#staticMethod,
- #_staticVariable,
- const Symbol('_staticVariable='),
- #_staticGetter,
- const Symbol('_staticSetter='),
- #_staticMethod],
+ MirrorSystem.getSymbol('_staticVariable', lm),
+ MirrorSystem.getSymbol('_staticVariable=', lm),
+ MirrorSystem.getSymbol('_staticGetter', lm),
+ MirrorSystem.getSymbol('_staticSetter=', lm),
+ MirrorSystem.getSymbol('_staticMethod', lm),
+ ],
selectKeys(cm.staticMembers, (dm) => true));
Expect.setEquals(
[#staticVariable,
const Symbol('staticVariable='),
- #_staticVariable,
- const Symbol('_staticVariable=')],
+ MirrorSystem.getSymbol('_staticVariable', lm),
+ MirrorSystem.getSymbol('_staticVariable=', lm)],
selectKeys(cm.staticMembers, (dm) => dm.isSynthetic));
}
diff --git a/tests/lib/mirrors/stringify.dart b/tests/lib/mirrors/stringify.dart
index 364bdcf..c848f93 100644
--- a/tests/lib/mirrors/stringify.dart
+++ b/tests/lib/mirrors/stringify.dart
@@ -106,6 +106,7 @@
var buffer = new StringBuffer();
writeDeclarationOn(method, buffer);
if (method.isAbstract) buffer.write(', abstract');
+ if (method.isSynthetic) buffer.write(', synthetic');
if (method.isStatic) buffer.write(', static');
if (method.isGetter) buffer.write(', getter');
if (method.isSetter) buffer.write(', setter');
diff --git a/tests/lib/mirrors/synthetic_accessor_properties_test.dart b/tests/lib/mirrors/synthetic_accessor_properties_test.dart
new file mode 100644
index 0000000..fc96b6d
--- /dev/null
+++ b/tests/lib/mirrors/synthetic_accessor_properties_test.dart
@@ -0,0 +1,104 @@
+// Copyright (c) 2013, the Dart project authors. Please see the AUTHORS file
+// for details. All rights reserved. Use of this source code is governed by a
+// BSD-style license that can be found in the LICENSE file.
+
+library test.synthetic_accessor_properties;
+
+import 'dart:mirrors';
+import 'package:expect/expect.dart';
+
+import 'stringify.dart';
+
+class C {
+ String instanceField;
+ final num finalInstanceField = 2;
+
+ static bool staticField;
+ static final int finalStaticField = 4;
+}
+
+String topLevelField;
+final double finalTopLevelField = 6.0;
+
+
+main() {
+ ClassMirror cm = reflectClass(C);
+ LibraryMirror lm = cm.owner;
+ MethodMirror mm;
+ ParameterMirror pm;
+
+ mm = cm.instanceMembers[#instanceField];
+ expect('Method(s(instanceField) in s(C), synthetic, getter)', mm);
+ Expect.equals(reflectClass(String), mm.returnType);
+ Expect.listEquals([], mm.parameters);
+
+ mm = cm.instanceMembers[const Symbol('instanceField=')];
+ expect('Method(s(instanceField=) in s(C), synthetic, setter)', mm);
+ Expect.equals(reflectClass(String), mm.returnType);
+ pm = mm.parameters.single;
+ expect('Parameter(s(instanceField) in s(instanceField=), final,'
+ ' type = Class(s(String) in s(dart.core), top-level))', pm);
+
+ mm = cm.instanceMembers[#finalInstanceField];
+ expect('Method(s(finalInstanceField) in s(C), synthetic, getter)', mm);
+ Expect.equals(reflectClass(num), mm.returnType);
+ Expect.listEquals([], mm.parameters);
+
+ mm = cm.instanceMembers[const Symbol('finalInstanceField=')];
+ Expect.isNull(mm);
+
+
+ mm = cm.staticMembers[#staticField];
+ expect('Method(s(staticField) in s(C), synthetic, static, getter)', mm);
+ Expect.equals(reflectClass(bool), mm.returnType);
+ Expect.listEquals([], mm.parameters);
+
+ mm = cm.staticMembers[const Symbol('staticField=')];
+ expect('Method(s(staticField=) in s(C), synthetic, static, setter)', mm);
+ Expect.equals(reflectClass(bool), mm.returnType);
+ pm = mm.parameters.single;
+ expect('Parameter(s(staticField) in s(staticField=), final,'
+ ' type = Class(s(bool) in s(dart.core), top-level))', pm);
+
+ mm = cm.staticMembers[#finalStaticField];
+ expect('Method(s(finalStaticField) in s(C), synthetic, static, getter)', mm);
+ Expect.equals(reflectClass(int), mm.returnType);
+ Expect.listEquals([], mm.parameters);
+
+ mm = cm.staticMembers[const Symbol('finalStaticField=')];
+ Expect.isNull(mm);
+
+ return; /// 01: ok
+
+ mm = lm.topLevelMembers[#topLevelField];
+ expect('Method(s(topLevelField) in s(test.synthetic_accessor_properties),'
+ ' top-level, synthetic, static, getter)', mm);
+ Expect.equals(reflectClass(String), mm.returnType);
+ Expect.listEquals([], mm.parameters);
+
+ mm = lm.topLevelMembers[const Symbol('topLevelField=')];
+ expect('Method(s(topLevelField=) in s(test.synthetic_accessor_properties),'
+ ' top-level, synthetic, static, setter)', mm);
+ Expect.equals(reflectClass(String), mm.returnType);
+ pm = mm.parameters.single;
+ expect('Parameter(s(topLevelField) in s(topLevelField=), final,'
+ ' type = Class(s(String) in s(dart.core), top-level))', pm);
+
+ mm = lm.topLevelMembers[#finalTopLevelField];
+ expect('Method(s(finalTopLevelField) in s(test.synthetic_accessor_properties)'
+ ', top-level, synthetic, static, getter)', mm);
+ Expect.equals(reflectClass(double), mm.returnType);
+ Expect.listEquals([], mm.parameters);
+
+ mm = lm.topLevelMembers[const Symbol('finalTopLevelField=')];
+ Expect.isNull(mm);
+
+ mm = lm.topLevelMembers[#C];
+ expect('Method(s(C) in s(test.synthetic_accessor_properties),'
+ ' top-level, synthetic, static, getter)', mm);
+ Expect.equals(reflectClass(Type), mm.returnType);
+ Expect.listEquals([], mm.parameters);
+
+ mm = lm.topLevelMembers[const Symbol('C=')];
+ Expect.isNull(mm);
+}
diff --git a/tests/lib/mirrors/toplevel_members_test.dart b/tests/lib/mirrors/toplevel_members_test.dart
index f79bfc0..1fe613b 100644
--- a/tests/lib/mirrors/toplevel_members_test.dart
+++ b/tests/lib/mirrors/toplevel_members_test.dart
@@ -24,29 +24,31 @@
#libraryGetter,
const Symbol('librarySetter='),
#libraryMethod,
- #_libraryVariable,
- const Symbol('_libraryVariable='),
- #_libraryGetter,
- const Symbol('_librarySetter='),
- #_libraryMethod,
+ MirrorSystem.getSymbol('_libraryVariable', lm),
+ MirrorSystem.getSymbol('_libraryVariable=', lm),
+ MirrorSystem.getSymbol('_libraryGetter', lm),
+ MirrorSystem.getSymbol('_librarySetter=', lm),
+ MirrorSystem.getSymbol('_libraryMethod', lm),
#Predicate,
#Superclass,
#Interface,
#Mixin,
- #_PrivateClass,
+ #Class,
+ MirrorSystem.getSymbol('_PrivateClass', lm),
#ConcreteClass],
selectKeys(lm.topLevelMembers, (dm) => true));
Expect.setEquals(
[#libraryVariable,
const Symbol('libraryVariable='),
- #_libraryVariable,
- const Symbol('_libraryVariable='),
+ MirrorSystem.getSymbol('_libraryVariable', lm),
+ MirrorSystem.getSymbol('_libraryVariable=', lm),
#Predicate,
#Superclass,
#Interface,
#Mixin,
- #_PrivateClass,
+ #Class,
+ MirrorSystem.getSymbol('_PrivateClass', lm),
#ConcreteClass],
selectKeys(lm.topLevelMembers, (dm) => dm.isSynthetic));
}
diff --git a/tests/standalone/io/https_server_test.dart b/tests/standalone/io/https_server_test.dart
index 082950e..559a4d1 100644
--- a/tests/standalone/io/https_server_test.dart
+++ b/tests/standalone/io/https_server_test.dart
@@ -63,7 +63,39 @@
password: 'dartdart');
}
+void testEarlyClientClose() {
+ HttpServer.bindSecure(HOST_NAME,
+ 0,
+ certificateName: 'localhost_cert').then((server) {
+ server.listen(
+ (request) {
+ String name = Platform.script.toFilePath();
+ new File(name).openRead().pipe(request.response)
+ .catchError((e) { /* ignore */ });
+ });
+
+ var count = 0;
+ makeRequest() {
+ Socket.connect(HOST_NAME, server.port).then((socket) {
+ var data = "Invalid TLS handshake";
+ socket.write(data);
+ socket.close();
+ socket.done.then((_) {
+ socket.destroy();
+ if (++count < 10) {
+ makeRequest();
+ } else {
+ server.close();
+ }
+ });
+ });
+ }
+ makeRequest();
+ });
+}
+
void main() {
InitializeSSL();
testListenOn();
+ testEarlyClientClose();
}
diff --git a/tests/standalone/io/raw_datagram_socket_test.dart b/tests/standalone/io/raw_datagram_socket_test.dart
new file mode 100644
index 0000000..6f3ebef
--- /dev/null
+++ b/tests/standalone/io/raw_datagram_socket_test.dart
@@ -0,0 +1,305 @@
+// Copyright (c) 2013, the Dart project authors. Please see the AUTHORS file
+// for details. All rights reserved. Use of this source code is governed by a
+// BSD-style license that can be found in the LICENSE file.
+
+import "dart:async";
+import "dart:io";
+import "dart:typed_data";
+
+import "package:async_helper/async_helper.dart";
+import "package:expect/expect.dart";
+
+class FutureExpect {
+ static Future check(Future result, check) =>
+ result.then((value) => check(value));
+ static Future throws(Future result) =>
+ result.then((value) {
+ throw new ExpectException(
+ "FutureExpect.throws received $value instead of an exception");
+ }, onError: (_) => null);
+}
+
+testDatagramBroadcastOptions() {
+ test(address) {
+ asyncStart();
+ RawDatagramSocket.bind(address, 0).then((socket) {
+ Expect.isFalse(socket.broadcastEnabled);
+ socket.broadcastEnabled = true;
+ Expect.isTrue(socket.broadcastEnabled);
+ socket.broadcastEnabled = false;
+ Expect.isFalse(socket.broadcastEnabled);
+ asyncEnd();
+ });
+ }
+
+ test(InternetAddress.LOOPBACK_IP_V4);
+ test(InternetAddress.ANY_IP_V4);
+}
+
+testDatagramMulticastOptions() {
+ test(address) {
+ asyncStart();
+ RawDatagramSocket.bind(address, 0).then((socket) {
+ Expect.isTrue(socket.multicastLoopback);
+ Expect.equals(1, socket.multicastHops);
+ Expect.throws(() => socket.multicastInterface);
+
+ socket.multicastLoopback = false;
+ socket.multicastHops = 4;
+ Expect.isFalse(socket.multicastLoopback);
+ Expect.equals(4, socket.multicastHops);
+ Expect.throws(() => socket.multicastInterface = null);
+
+ socket.multicastLoopback = true;
+ socket.multicastHops = 1;
+ Expect.isTrue(socket.multicastLoopback);
+ Expect.equals(1, socket.multicastHops);
+ Expect.throws(() => socket.multicastInterface);
+
+ asyncEnd();
+ });
+ }
+
+ test(InternetAddress.LOOPBACK_IP_V4);
+ test(InternetAddress.ANY_IP_V4);
+ test(InternetAddress.LOOPBACK_IP_V6);
+ test(InternetAddress.ANY_IP_V6);
+}
+
+testDatagramSocketReuseAddress() {
+ test(address, reuseAddress) {
+ asyncStart();
+ RawDatagramSocket.bind(
+ address, 0, reuseAddress: reuseAddress).then((socket) {
+ if (reuseAddress) {
+ RawDatagramSocket.bind(address, socket.port)
+ .then((s) => Expect.isTrue(s is RawDatagramSocket))
+ .then(asyncSuccess);
+ } else {
+ FutureExpect.throws(RawDatagramSocket.bind(address, socket.port))
+ .then(asyncSuccess);
+ }
+ });
+ }
+
+ test(InternetAddress.LOOPBACK_IP_V4, true);
+ test(InternetAddress.LOOPBACK_IP_V4, false);
+ test(InternetAddress.LOOPBACK_IP_V6, true);
+ test(InternetAddress.LOOPBACK_IP_V6, false);
+}
+
+testBroadcast() {
+ test(bindAddress, broadcastAddress, enabled) {
+ asyncStart();
+ Future.wait([RawDatagramSocket.bind(bindAddress, 0),
+ RawDatagramSocket.bind(bindAddress, 0)]).then((values) {
+ var broadcastTimer;
+ var sender = values[0];
+ var receiver = values[1];
+ // On Windows at least the receiver needs to have broadcast
+ // enabled whereas on Linux at least the sender needs to.
+ receiver.broadcastEnabled = enabled;
+ sender.broadcastEnabled = enabled;
+ receiver.listen((event) {
+ if (event == RawSocketEvent.READ) {
+ Expect.isTrue(enabled);
+ sender.close();
+ receiver.close();
+ broadcastTimer.cancel();
+ asyncEnd();
+ }
+ });
+
+ int sendCount = 0;
+ send(_) {
+ int bytes =
+ sender.send(new Uint8List(1), broadcastAddress, receiver.port);
+ Expect.isTrue(bytes == 0 || bytes == 1);
+ sendCount++;
+ if (!enabled && sendCount == 50) {
+ sender.close();
+ receiver.close();
+ broadcastTimer.cancel();
+ asyncEnd();
+ }
+ }
+ broadcastTimer = new Timer.periodic(new Duration(milliseconds: 10), send);
+ });
+ }
+
+ var broadcast = new InternetAddress("255.255.255.255");
+ test(InternetAddress.ANY_IP_V4, broadcast, false);
+ test(InternetAddress.ANY_IP_V4, broadcast, true);
+}
+
+testLoopbackMulticast() {
+ test(bindAddress, multicastAddress, enabled) {
+ asyncStart();
+ Future.wait([RawDatagramSocket.bind(bindAddress, 0),
+ RawDatagramSocket.bind(bindAddress, 0)]).then((values) {
+ var senderTimer;
+ var sender = values[0];
+ var receiver = values[1];
+
+ sender.joinMulticast(multicastAddress);
+ receiver.joinMulticast(multicastAddress);
+ // On Windows at least the receiver needs to have multicast
+ // loop enabled whereas on Linux at least the sender needs to.
+ receiver.multicastLoopback = enabled;
+ sender.multicastLoopback = enabled;
+
+ receiver.listen((event) {
+ if (event == RawSocketEvent.READ) {
+ Expect.isTrue(enabled);
+ sender.close();
+ receiver.close();
+ senderTimer.cancel();
+ asyncEnd();
+ }
+ });
+
+ int sendCount = 0;
+ send(_) {
+ int bytes =
+ sender.send(new Uint8List(1), multicastAddress, receiver.port);
+ Expect.isTrue(bytes == 0 || bytes == 1);
+ sendCount++;
+ if (!enabled && sendCount == 50) {
+ sender.close();
+ receiver.close();
+ senderTimer.cancel();
+ asyncEnd();
+ }
+ }
+ senderTimer = new Timer.periodic(new Duration(milliseconds: 10), send);
+ });
+ }
+
+ test(InternetAddress.ANY_IP_V4, new InternetAddress("228.0.0.4"), true);
+ test(InternetAddress.ANY_IP_V4, new InternetAddress("224.0.0.0"), false);
+ test(InternetAddress.ANY_IP_V6, new InternetAddress("ff11::0"), true);
+ test(InternetAddress.ANY_IP_V6, new InternetAddress("ff11::0"), false);
+}
+
+testSendReceive(InternetAddress bindAddress) {
+ asyncStart();
+
+ var total = 1000;
+
+ int receivedSeq = 0;
+
+ var ackSeq = 0;
+ Timer ackTimer;
+
+ Future.wait([RawDatagramSocket.bind(bindAddress, 0),
+ RawDatagramSocket.bind(bindAddress, 0)]).then((values) {
+ var sender = values[0];
+ var receiver = values[1];
+ if (bindAddress.isMulticast) {
+ sender.multicastLoopback = true;
+ receiver.multicastLoopback = true;
+ sender.joinMulticast(bindAddress);
+ receiver.joinMulticast(bindAddress);
+ }
+
+ Uint8List createDataPackage(int seq) {
+ var data = new Uint8List(1000);
+ (new ByteData.view(data.buffer, 0, 4)).setUint32(0, seq);
+ return data;
+ }
+
+ Uint8List createAckPackage(int seq) {
+ var data = new Uint8List(4);
+ new ByteData.view(data.buffer, 0, 4).setUint32(0, seq);
+ return data;
+ }
+
+ int packageSeq(Datagram datagram) =>
+ new ByteData.view((datagram.data as Uint8List).buffer).getUint32(0);
+
+ void sendData(int seq) {
+ // Send a datagram acknowledging the received sequence.
+ int bytes = sender.send(createDataPackage(seq), bindAddress, receiver.port);
+ Expect.isTrue(bytes == 0 || bytes == 1000);
+ }
+
+ void sendAck(address, port) {
+ // Send a datagram acknowledging the received sequence.
+ int bytes = receiver.send(createAckPackage(receivedSeq), address, port);
+ Expect.isTrue(bytes == 0 || bytes == 4);
+ // Start a "long" timer for more data.
+ if (ackTimer != null) ackTimer.cancel();
+ ackTimer = new Timer.periodic(
+ new Duration(milliseconds: 100), (_) => sendAck(address, port));
+ }
+
+ sender.listen((event) {
+ switch (event) {
+ case RawSocketEvent.READ:
+ var datagram = sender.receive();
+ if (datagram != null) {
+ Expect.equals(datagram.port, receiver.port);
+ if (!bindAddress.isMulticast) {
+ Expect.equals(receiver.address, datagram.address);
+ }
+ ackSeq = packageSeq(datagram);
+ if (ackSeq < total) {
+ sender.writeEventsEnabled = true;
+ } else {
+ sender.close();
+ receiver.close();
+ ackTimer.cancel();
+ asyncEnd();
+ }
+ }
+ break;
+ case RawSocketEvent.WRITE:
+ // Send the next package.
+ sendData(ackSeq + 1);
+ break;
+ case RawSocketEvent.CLOSED:
+ break;
+ default:
+ throw "Unexpected event $event";
+ }
+ });
+
+ receiver.writeEventsEnabled = false;
+ receiver.listen((event) {
+ switch (event) {
+ case RawSocketEvent.READ:
+ var datagram = receiver.receive();
+ if (datagram != null) {
+ Expect.equals(datagram.port, sender.port);
+ if (!bindAddress.isMulticast) {
+ Expect.equals(receiver.address, datagram.address);
+ }
+ var seq = packageSeq(datagram);
+ if (seq == receivedSeq + 1) {
+ receivedSeq = seq;
+ sendAck(bindAddress, sender.port);
+ }
+ }
+ break;
+ case RawSocketEvent.WRITE:
+ throw "Unexpected WRITE";
+ break;
+ case RawSocketEvent.CLOSED:
+ break;
+ default:
+ throw "Unexpected event $event";
+ }
+ });
+ });
+}
+
+
+main() {
+ testDatagramBroadcastOptions();
+ testDatagramMulticastOptions();
+ testDatagramSocketReuseAddress();
+ testBroadcast();
+ testLoopbackMulticast();
+ testSendReceive(InternetAddress.LOOPBACK_IP_V4);
+ testSendReceive(InternetAddress.LOOPBACK_IP_V6);
+}
diff --git a/tests/standalone/io/stdin_sync_test.dart b/tests/standalone/io/stdin_sync_test.dart
index 63e4f1d..03e794c 100644
--- a/tests/standalone/io/stdin_sync_test.dart
+++ b/tests/standalone/io/stdin_sync_test.dart
@@ -6,6 +6,7 @@
import "dart:io";
import "package:path/path.dart";
+import "package:expect/expect.dart";
void testReadByte() {
void test(String line, List<String> expected) {
@@ -44,7 +45,10 @@
}
void testEchoMode() {
+ stdin.echoMode = true;
+ Expect.isTrue(stdin.echoMode);
stdin.echoMode = false;
+ Expect.isFalse(stdin.echoMode);
var line;
while ((line = stdin.readLineSync()) != null) {
print("You typed: $line");
@@ -52,7 +56,10 @@
}
void testLineMode() {
+ stdin.lineMode = true;
+ Expect.isTrue(stdin.lineMode);
stdin.lineMode = false;
+ Expect.isFalse(stdin.lineMode);
var char;
while ((char = stdin.readByteSync()) != -1) {
print("You typed: $char");
diff --git a/tests/standalone/standalone.status b/tests/standalone/standalone.status
index 570c988..fcab8b1 100644
--- a/tests/standalone/standalone.status
+++ b/tests/standalone/standalone.status
@@ -9,7 +9,7 @@
package/invalid_uri_test: Fail, OK # CompileTimeErrors intentionally
-issue14236_test: Pass, Fail, Crash # Issue 14516.
+issue14236_test: Crash # Issue 14516.
[ $runtime == vm ]
package/package_isolate_test: Fail # Issue 12474
@@ -31,17 +31,9 @@
# This is expected as MacOS by default runs with a very low number
# of allowed open files ('ulimit -n' says something like 256).
io/socket_many_connections_test: Skip
-
-# These tests pass on MacOS 10.8.2 but fails on the buildbot machines
-# that are running an earlier version of MacOS. The issue is that the
-# old version of MacOS does not expand the precomposed utf-8 it gets
-# from the VM before comparing it to the decomposed utf-8 used for the
-# file system.
-io/file_non_ascii_sync_test: Pass, Fail
-io/file_non_ascii_test: Pass, Fail
-io/directory_non_ascii_sync_test: Pass, Fail
-io/directory_non_ascii_test: Pass, Fail
-io/process_non_ascii_test: Pass, Fail
+# The UDP tests are currently skipped on Mac OS as multicast configuration
+# needs to be resolved.
+io/raw_datagram_socket_test: Skip # Issue 1975
[ $compiler == none && ($runtime == drt || $runtime == dartium) ]
typed_array_test: Fail # Issue 13921
@@ -117,13 +109,8 @@
[ $arch == simarm ]
out_of_memory_test: Skip # passes on Mac, crashes on Linux
oom_error_stacktrace_test: Skip # Fails on Linux
-io/test_runner_test: Pass, Fail # Issue 12413
-
-[ $arch == simmips ]
-io/test_runner_test: Pass, Fail # Issue 12413
[ $arch == simmips || $arch == mips ]
-io/file_fuzz_test: Pass, Timeout
io/web_socket_test: Pass, Slow
io/http_server_response_test: Pass, Slow
out_of_memory_test: Skip # passes on Mac, crashes on Linux
diff --git a/tests/standalone/vmservice/unknown_command_test.dart b/tests/standalone/vmservice/unknown_command_test.dart
index 2ab54f8..1c503a6 100644
--- a/tests/standalone/vmservice/unknown_command_test.dart
+++ b/tests/standalone/vmservice/unknown_command_test.dart
@@ -11,7 +11,7 @@
UnknownCommandTest(port) : super('http://127.0.0.1:$port/badcommand');
onRequestCompleted(Map reply) {
- Expect.equals('error', reply['type']);
+ Expect.equals('Error', reply['type']);
}
}
diff --git a/tests/utils/dummy_compiler_test.dart b/tests/utils/dummy_compiler_test.dart
index c9a30bc..2c3e81c 100644
--- a/tests/utils/dummy_compiler_test.dart
+++ b/tests/utils/dummy_compiler_test.dart
@@ -44,7 +44,8 @@
getRuntimeTypeInfo(o) {}
setRuntimeTypeInfo(o, i) {}
eqNull(a) {}
-eqNullB(a) {}""";
+eqNullB(a) {}
+const proxy = 0;""";
} else if (uri.path.endsWith('_patch.dart')) {
source = '';
} else if (uri.path.endsWith('interceptors.dart')) {
diff --git a/tests/utils/recursive_import_test.dart b/tests/utils/recursive_import_test.dart
index 2c5cb00..64bfee0 100644
--- a/tests/utils/recursive_import_test.dart
+++ b/tests/utils/recursive_import_test.dart
@@ -12,7 +12,7 @@
const CORE_LIB = """
library core;
class Object {
- Object();
+ const Object();
operator==(other) {}
}
class bool {}
@@ -35,6 +35,8 @@
eqNull(a) {}
eqNullB(a) {}
class JSInvocationMirror {} // Should be in helper.
+class _Proxy { const _Proxy(); }
+const proxy = const _Proxy();
""";
const INTERCEPTORS_LIB = """
diff --git a/tools/VERSION b/tools/VERSION
index 0795e2b..575e350 100644
--- a/tools/VERSION
+++ b/tools/VERSION
@@ -1,5 +1,31 @@
+# This file is used by tools/utils.py to generate version strings.
+# The numbers are changed as follows:
+#
+# * New release cycle has begun (i.e. stable release was just made):
+# - increase MINOR by 1
+# - set "PATCH 0"
+# - set "PRERELEASE 0"
+# - set "PRERELEASE_PATCH 0"
+#
+# * Doing a push-to-trunk from bleeding_edge:
+# (The first push-to-trunk in the release cycle will set PRERELEASE to 1)
+# - increase PRERELEASE by 1
+# - set "PRERELEASE_PATCH 0"
+#
+# * Doing a cherry-pick to trunk:
+# - increase PRERELEASE_PATCH by 1
+#
+# * Making a stable release (i.e. new stable branch):
+# - set "PRERELEASE 0"
+# - set "PRERELEASE_PATCH 0"
+# The new stable release version will sort higher than the prereleases.
+#
+# * Making cherry-picks to stable channel
+# - increase PATCH by 1
+#
CHANNEL dev
MAJOR 1
-MINOR 0
-BUILD 3
+MINOR 1
PATCH 0
+PRERELEASE 4
+PRERELEASE_PATCH 0
diff --git a/tools/bots/bot.py b/tools/bots/bot.py
index f9fcd0d..53af19d3 100644
--- a/tools/bots/bot.py
+++ b/tools/bots/bot.py
@@ -38,11 +38,13 @@
- test_set: Specification of a non standard test set or None.
- csp: This is using csp when running
- arch: The architecture to build on.
+ - dart2js_full: Boolean indicating whether this builder will run dart2js
+ on several different runtimes.
"""
def __init__(self, compiler, runtime, mode, system, checked=False,
host_checked=False, minified=False, shard_index=None,
total_shards=None, is_buildbot=False, test_set=None,
- csp=None, arch=None):
+ csp=None, arch=None, dart2js_full=False):
self.compiler = compiler
self.runtime = runtime
self.mode = mode
@@ -55,6 +57,7 @@
self.is_buildbot = is_buildbot
self.test_set = test_set
self.csp = csp
+ self.dart2js_full = dart2js_full
if (arch == None):
self.arch = 'ia32'
else:
diff --git a/tools/bots/compiler.py b/tools/bots/compiler.py
index f54685e..7087a31 100644
--- a/tools/bots/compiler.py
+++ b/tools/bots/compiler.py
@@ -23,9 +23,19 @@
DARTIUM_BUILDER = r'none-dartium-(linux|mac|windows)'
DART2JS_BUILDER = (
r'dart2js-(linux|mac|windows)(-(jsshell))?-(debug|release)(-(checked|host-checked))?(-(host-checked))?(-(minified))?(-(x64))?-?(\d*)-?(\d*)')
+DART2JS_FULL_BUILDER = r'dart2js-full-(linux|mac|windows)(-checked)?(-minified)?-(\d+)-(\d+)'
WEB_BUILDER = (
r'dart2js-(ie9|ie10|ff|safari|chrome|chromeOnAndroid|opera|drt)-(win7|win8|mac10\.8|mac10\.7|linux)(-(all|html))?(-(csp))?(-(\d+)-(\d+))?')
+DART2JS_FULL_CONFIGURATIONS = {
+ 'linux' : [ ],
+ 'mac' : [ ],
+ 'windows' : [
+ {'runtime' : 'ie9'},
+ {'runtime' : 'ie9', 'additional_flags' : ['--checked']},
+ ],
+}
+
def GetBuildInfo(builder_name, is_buildbot):
"""Returns a BuildInfo object for the current buildbot based on the
@@ -43,8 +53,10 @@
test_set = None
csp = None
arch = None
+ dart2js_full = False
dart2js_pattern = re.match(DART2JS_BUILDER, builder_name)
+ dart2js_full_pattern = re.match(DART2JS_FULL_BUILDER, builder_name)
web_pattern = re.match(WEB_BUILDER, builder_name)
dartium_pattern = re.match(DARTIUM_BUILDER, builder_name)
@@ -58,6 +70,17 @@
csp = True
shard_index = web_pattern.group(8)
total_shards = web_pattern.group(9)
+ elif dart2js_full_pattern:
+ mode = 'release'
+ compiler = 'dart2js'
+ dart2js_full = True
+ system = dart2js_full_pattern.group(1)
+ if dart2js_full_pattern.group(2):
+ checked = True
+ if dart2js_full_pattern.group(3):
+ minified = True
+ shard_index = dart2js_full_pattern.group(4)
+ total_shards = dart2js_full_pattern.group(5)
elif dart2js_pattern:
compiler = 'dart2js'
system = dart2js_pattern.group(1)
@@ -107,7 +130,7 @@
return None
return bot.BuildInfo(compiler, runtime, mode, system, checked, host_checked,
minified, shard_index, total_shards, is_buildbot,
- test_set, csp, arch)
+ test_set, csp, arch, dart2js_full)
def NeedsXterm(compiler, runtime):
@@ -170,8 +193,8 @@
bot.RunProcess(cmd)
-def TestCompiler(runtime, mode, system, flags, is_buildbot, test_set, arch,
- compiler=None):
+def TestCompiler(runtime, mode, system, flags, is_buildbot, arch,
+ compiler=None, dart2js_full=False):
""" test the compiler.
Args:
- runtime: either 'd8', 'jsshell', or one of the browsers, see GetBuildInfo
@@ -180,7 +203,6 @@
- flags: extra flags to pass to test.dart
- is_buildbot: true if we are running on a real buildbot instead of
emulating one.
- - test_set: Specification of a non standard test set, default None
- arch: The architecture to run on.
- compiler: The compiler to use for test.py (default is 'dart2js').
"""
@@ -298,31 +320,40 @@
if build_info.shard_index:
test_flags = ['--shards=%s' % build_info.total_shards,
'--shard=%s' % build_info.shard_index]
-
if build_info.checked: test_flags += ['--checked']
-
+ if build_info.minified: test_flags += ['--minified']
if build_info.host_checked: test_flags += ['--host-checked']
- if build_info.minified: test_flags += ['--minified']
+ if build_info.dart2js_full:
+ compiler = build_info.compiler
+ assert compiler == 'dart2js'
+ system = build_info.system
+ arch = build_info.arch
+ mode = build_info.mode
+ is_buildbot = build_info.is_buildbot
+ for configuration in DART2JS_FULL_CONFIGURATIONS[system]:
+ additional_flags = configuration.get('additional_flags', [])
+ TestCompiler(configuration['runtime'], mode, system,
+ test_flags + additional_flags, is_buildbot, arch,
+ compiler=compiler, dart2js_full=True)
+ else:
+ if build_info.csp: test_flags += ['--csp']
- if build_info.csp: test_flags += ['--csp']
+ if build_info.runtime == 'chromeOnAndroid':
+ test_flags.append('--local_ip=%s' % GetLocalIPAddress())
+ # test.py expects the android tools directories to be in PATH
+ # (they contain for example 'adb')
+ AddAndroidToolsToPath()
- if build_info.runtime == 'chromeOnAndroid':
- test_flags.append('--local_ip=%s' % GetLocalIPAddress())
- # test.py expects the android tools directories to be in PATH
- # (they contain for example 'adb')
- AddAndroidToolsToPath()
-
- TestCompiler(build_info.runtime, build_info.mode, build_info.system,
- list(test_flags), build_info.is_buildbot, build_info.test_set,
- build_info.arch, compiler=build_info.compiler)
-
- # See comment in GetHasHardCodedCheckedMode, this is a hack.
- if (GetHasHardCodedCheckedMode(build_info)):
TestCompiler(build_info.runtime, build_info.mode, build_info.system,
- test_flags + ['--checked'], build_info.is_buildbot,
- build_info.test_set, build_info.arch,
- compiler=build_info.compiler)
+ list(test_flags), build_info.is_buildbot,
+ build_info.arch, compiler=build_info.compiler)
+
+ # See comment in GetHasHardCodedCheckedMode, this is a hack.
+ if (GetHasHardCodedCheckedMode(build_info)):
+ TestCompiler(build_info.runtime, build_info.mode, build_info.system,
+ test_flags + ['--checked'], build_info.is_buildbot,
+ build_info.arch, compiler=build_info.compiler)
def BuildCompiler(build_info):
@@ -332,7 +363,7 @@
- build_info: the buildInfo object, containing information about what sort of
build and test to be run.
"""
- with bot.BuildStep('Build SDK and d8'):
+ with bot.BuildStep('Build SDK'):
args = [sys.executable, './tools/build.py', '--mode=' + build_info.mode,
'--arch=' + build_info.arch, 'dart2js_bot']
print 'Build SDK and d8: %s' % (' '.join(args))
diff --git a/tools/create_editor.py b/tools/create_editor.py
index 086c119..ba4f4fa5 100644
--- a/tools/create_editor.py
+++ b/tools/create_editor.py
@@ -187,14 +187,15 @@
join('third_party', 'bzip2', 'bzip2.jar'),
'-Dbuild.out=' + OUTPUT,
'-Dbuild.configs=' + buildConfig,
- '-Dbuild.revision=' + utils.GetSVNRevision(),
- '-Ddart.version.full=' + utils.GetVersion(),
'-Dbuild.root=' + GetEclipseBuildRoot(),
'-Dbuild.downloads=' + GetDownloadCache(),
'-Dbuild.source=' + os.path.abspath('editor'),
'-Dbuild.dart.sdk=' + GetSdkPath(),
'-Dbuild.no.properties=true',
'-Dbuild.channel=' + utils.GetChannel(),
+ '-Dbuild.revision=' + utils.GetSVNRevision(),
+ '-Dbuild.version.qualifier=' + utils.GetEclipseVersionQualifier(),
+ '-Ddart.version.full=' + utils.GetVersion(),
'-buildfile',
buildScript]
print build_cmd
diff --git a/tools/create_windows_installer.py b/tools/create_windows_installer.py
index 6566a5b..04df575 100644
--- a/tools/create_windows_installer.py
+++ b/tools/create_windows_installer.py
@@ -83,24 +83,29 @@
# In addition to that, the limits on the size are:
# Major: 256
# Minor: 256
-# Build: 65536
+# Patch: 65536
# To circumvent this we create the version like this:
# Major.Minor.X
-# where X is Build<<9 + Patch
-# Example version 1.2.4.14 will go to 1.2.2062
+# from "major.minor.patch-prerelease.prerelease_patch"
+# where X is "patch<<10 + prerelease<<5 + prerelease_patch"
+# Example version 1.2.4-dev.2.3 will go to 1.2.4163
def GetMicrosoftProductVersion(version):
version_parts = version.split('.')
- if len(version_parts) is not 4:
+ if len(version_parts) is not 5:
raise Exception(
"Version string (%s) does not follow specification" % version)
- (major, minor, build, patch) = map(int, version_parts)
+ (major, minor, patch, prerelease, prerelease_patch) = map(int, version_parts)
- if build > 127 or patch > 511:
- raise Exception('Build/Patch can not be above 127/511')
if major > 255 or minor > 255:
raise Exception('Major/Minor can not be above 256')
+ if patch > 63:
+ raise Exception('Patch can not be above 63')
+ if prerelease > 31:
+ raise Exception('Prerelease can not be above 31')
+ if prerelease_patch > 31:
+ raise Exception('PrereleasePatch can not be above 31')
- combined = (build << 9) + patch
+ combined = (patch << 10) + (prerelease << 5) + prerelease_patch
return '%s.%s.%s' % (major, minor, combined)
# Append using the current indentation level
diff --git a/tools/ddbg.dart b/tools/ddbg.dart
index 918218f..7e53ab6 100644
--- a/tools/ddbg.dart
+++ b/tools/ddbg.dart
@@ -12,6 +12,18 @@
import "ddbg/lib/commando.dart";
+class TargetScript {
+ // The text of a script.
+ String source = null;
+
+ // A mapping from line number to source text.
+ List<String> lineToSource = null;
+
+ // A mapping from token offset to line number.
+ Map<int,int> tokenToLine = null;
+}
+
+
class TargetIsolate {
int id;
// The location of the last paused event.
@@ -19,6 +31,8 @@
TargetIsolate(this.id);
bool get isPaused => pausedLocation != null;
+
+ Map<String, TargetScript> scripts = {};
}
Map<int, TargetIsolate> targetIsolates= new Map<int, TargetIsolate>();
@@ -85,9 +99,13 @@
// The current values for all settings.
var settings = new Map();
-// Generates a string of 'count' spaces.
-String _spaces(int count) {
- return new List.filled(count, ' ').join('');
+String _leftJustify(text, int width) {
+ StringBuffer buffer = new StringBuffer();
+ buffer.write(text);
+ while (buffer.length < width) {
+ buffer.write(' ');
+ }
+ return buffer.toString();
}
// TODO(turnidge): Move all commands here.
@@ -102,7 +120,7 @@
new ShowCommand() ];
-Command matchCommand(String commandName, bool exactMatchWins) {
+List<Command> matchCommand(String commandName, bool exactMatchWins) {
List matches = [];
for (var command in commandList) {
if (command.name.startsWith(commandName)) {
@@ -138,9 +156,7 @@
if (args.length == 1) {
print("Debugger commands:\n");
for (var command in commandList) {
- const tabStop = 12;
- var spaces = _spaces(max(1, (tabStop - command.name.length)));
- print(' ${command.name}${spaces}${command.helpShort}');
+ print(' ${_leftJustify(command.name, 11)} ${command.helpShort}');
}
// TODO(turnidge): Convert all commands to use the Command class.
@@ -336,7 +352,7 @@
isDebugging = true;
cmdo.hide();
- return Process.start(vm, processArgs).then((Process process) {
+ return Process.start(vm, processArgs).then((process) {
print("Started process ${process.pid} '$vm ${processArgs.join(' ')}'");
targetProcess = process;
process.stdin.close();
@@ -494,7 +510,6 @@
}
void processCommand(String cmdLine) {
-
void huh() {
print("'$cmdLine' not understood, try 'help' for help.");
}
@@ -909,7 +924,7 @@
void printStackFrame(frame_num, Map frame) {
var fname = frame["functionName"];
var loc = formatLocation(frame["location"]);
- print("$frame_num $fname ($loc)");
+ print("#${_leftJustify(frame_num,2)} $fname at $loc");
List locals = frame["locals"];
for (int i = 0; i < locals.length; i++) {
printNamedObject(locals[i]);
@@ -924,7 +939,85 @@
}
-void handlePausedEvent(msg) {
+Map<int, int> parseLineNumberTable(List<List<int>> table) {
+ Map tokenToLine = {};
+ for (var line in table) {
+ // Each entry begins with a line number...
+ var lineNumber = line[0];
+ for (var pos = 1; pos < line.length; pos += 2) {
+ // ...and is followed by (token offset, col number) pairs.
+ // We ignore the column numbers.
+ var tokenOffset = line[pos];
+ tokenToLine[tokenOffset] = lineNumber;
+ }
+ }
+ return tokenToLine;
+}
+
+
+Future<TargetScript> getTargetScript(Map location) {
+ var isolate = targetIsolates[currentIsolate.id];
+ var url = location['url'];
+ var script = isolate.scripts[url];
+ if (script != null) {
+ return new Future.value(script);
+ }
+ script = new TargetScript();
+
+ // Ask the vm for the source and line number table.
+ var sourceCmd = {
+ "id": seqNum++,
+ "command": "getScriptSource",
+ "params": { "isolateId": currentIsolate.id,
+ "libraryId": location['libraryId'],
+ "url": url } };
+
+ var lineNumberCmd = {
+ "id": seqNum++,
+ "command": "getLineNumberTable",
+ "params": { "isolateId": currentIsolate.id,
+ "libraryId": location['libraryId'],
+ "url": url } };
+
+ // Send the source command
+ var sourceResponse = sendCmd(sourceCmd).then((response) {
+ Map result = response["result"];
+ script.source = result['text'];
+ // Line numbers are 1-based so add a dummy for line 0.
+ script.lineToSource = [''];
+ script.lineToSource.addAll(script.source.split('\n'));
+ });
+
+ // Send the line numbers command
+ var lineNumberResponse = sendCmd(lineNumberCmd).then((response) {
+ Map result = response["result"];
+ script.tokenToLine = parseLineNumberTable(result['lines']);
+ });
+
+ return Future.wait([sourceResponse, lineNumberResponse]).then((_) {
+ // When both commands complete, cache the result.
+ isolate.scripts[url] = script;
+ return script;
+ });
+}
+
+
+Future printLocation(String label, Map location) {
+ // Figure out the line number.
+ return getTargetScript(location).then((script) {
+ var lineNumber = script.tokenToLine[location['tokenOffset']];
+ var text = script.lineToSource[lineNumber];
+ if (label != null) {
+ var fileName = location['url'].split("/").last;
+ print("$label \n"
+ " at $fileName:$lineNumber");
+ }
+ print("${_leftJustify(lineNumber, 8)}$text");
+ });
+}
+
+
+Future handlePausedEvent(msg) {
assert(msg["params"] != null);
var reason = msg["params"]["reason"];
int isolateId = msg["params"]["isolateId"];
@@ -936,16 +1029,17 @@
assert(location != null);
isolate.pausedLocation = location;
if (reason == "breakpoint") {
- print("Isolate $isolateId paused on breakpoint");
- print("location: ${formatLocation(location)}");
+ var bpId = (msg["params"]["breakpointId"]);
+ var label = (bpId != null) ? "Breakpoint $bpId" : null;
+ return printLocation(label, location);
} else if (reason == "interrupted") {
- print("Isolate $isolateId paused due to an interrupt");
- print("location: ${formatLocation(location)}");
+ return printLocation("Interrupted", location);
} else {
assert(reason == "exception");
var excObj = msg["params"]["exception"];
print("Isolate $isolateId paused on exception");
print(remoteObject(excObj));
+ return new Future.value();
}
}
@@ -1001,8 +1095,9 @@
}
if (event == "paused") {
cmdo.hide();
- handlePausedEvent(msg);
- cmdo.show();
+ handlePausedEvent(msg).then((_) {
+ cmdo.show();
+ });
return;
}
if (event == "breakpointResolved") {
@@ -1011,7 +1106,7 @@
var isolateId = params["isolateId"];
var location = formatLocation(params["location"]);
cmdo.hide();
- print("BP ${params["breakpointId"]} resolved in isolate $isolateId"
+ print("Breakpoint ${params["breakpointId"]} resolved in isolate $isolateId"
" at $location.");
cmdo.show();
return;
@@ -1042,7 +1137,7 @@
}
if (i >= vmData.length) {
return false;
- } else {
+ } else {
return char != "{";
}
}
@@ -1230,7 +1325,6 @@
print('Timed out waiting for debugger to start.\nError: $e');
return closeVmSocket();
}
-
// Wait and retry.
return new Future.delayed(delay, () {
openVmSocket(attempt + 1);
@@ -1263,10 +1357,15 @@
vmSubscription = null;
vmSock = null;
outstandingCommands = null;
-
return Future.wait(cleanupFutures);
}
+void debuggerError(self, parent, zone, error, StackTrace trace) {
+ print('\n--------\nExiting due to unexpected error:\n'
+ ' $error\n$trace\n');
+ debuggerQuit();
+}
+
Future debuggerQuit() {
// Kill target process, if any.
if (targetProcess != null) {
@@ -1299,10 +1398,16 @@
}
void main(List<String> args) {
- parseArgs(args);
+ // Setup a zone which will exit the debugger cleanly on any uncaught
+ // exception.
+ var zone = Zone.ROOT.fork(specification:new ZoneSpecification(
+ handleUncaughtError: debuggerError));
- cmdo = new Commando(completer: debuggerCommandCompleter);
- cmdSubscription = cmdo.commands.listen(processCommand,
- onError: processError,
- onDone: processDone);
+ zone.run(() {
+ parseArgs(args);
+ cmdo = new Commando(completer: debuggerCommandCompleter);
+ cmdSubscription = cmdo.commands.listen(processCommand,
+ onError: processError,
+ onDone: processDone);
+ });
}
diff --git a/tools/dom/scripts/htmlrenamer.py b/tools/dom/scripts/htmlrenamer.py
index 125dbc8..077a3a1 100644
--- a/tools/dom/scripts/htmlrenamer.py
+++ b/tools/dom/scripts/htmlrenamer.py
@@ -332,6 +332,10 @@
'Window.getComputedStyle',
'Window.clearInterval',
'Window.clearTimeout',
+ 'WindowTimers.clearInterval',
+ 'WindowTimers.clearTimeout',
+ 'WindowTimers.setInterval',
+ 'WindowTimers.setTimeout',
'Window.moveTo',
'Window.requestAnimationFrame',
'Window.setInterval',
diff --git a/tools/dom/scripts/systemhtml.py b/tools/dom/scripts/systemhtml.py
index 833fb23..ab790a1 100644
--- a/tools/dom/scripts/systemhtml.py
+++ b/tools/dom/scripts/systemhtml.py
@@ -1081,7 +1081,7 @@
'\n'
' $TYPE $NAME($PARAMS);\n',
TYPE=self.SecureOutputType(info.type_name, False, True),
- NAME=info.name,
+ NAME=html_name,
PARAMS=info.ParametersDeclaration(self._NarrowInputType))
diff --git a/tools/dom/scripts/systemnative.py b/tools/dom/scripts/systemnative.py
index fdc48bd..6871269 100644
--- a/tools/dom/scripts/systemnative.py
+++ b/tools/dom/scripts/systemnative.py
@@ -423,10 +423,10 @@
' return Dart_Null();\n'
' DartDOMData* domData = DartDOMData::current();\n'
' Dart_WeakPersistentHandle result =\n'
- ' DartDOMWrapper::lookupWrapper(domData, isNode, value);\n'
+ ' DartDOMWrapper::lookupWrapper<Dart$(INTERFACE)>(domData, value);\n'
' if (result)\n'
' return Dart_HandleFromWeakPersistent(result);\n'
- ' return createWrapper(value);\n'
+ ' return createWrapper(domData, value);\n'
' }\n'
' static void returnToDart(Dart_NativeArguments args,\n'
' NativeType* value)\n'
@@ -435,26 +435,25 @@
' DartDOMData* domData = static_cast<DartDOMData*>(\n'
' Dart_GetNativeIsolateData(args));\n'
' Dart_WeakPersistentHandle result =\n'
- ' DartDOMWrapper::lookupWrapper(domData, isNode, value);\n'
+ ' DartDOMWrapper::lookupWrapper<Dart$(INTERFACE)>(domData, value);\n'
' if (result)\n'
' Dart_SetWeakHandleReturnValue(args, result);\n'
' else\n'
- ' Dart_SetReturnValue(args, createWrapper(value));\n'
+ ' Dart_SetReturnValue(args, createWrapper(domData, value));\n'
' }\n'
' }\n',
- )
+ INTERFACE=self._interface.id)
if ('CustomToV8' in ext_attrs or
'PureInterface' in ext_attrs or
'CPPPureInterface' in ext_attrs or
self._interface_type_info.custom_to_dart()):
to_dart_emitter.Emit(
- ' static Dart_Handle createWrapper(NativeType* value);\n')
+ ' static Dart_Handle createWrapper(DartDOMData* domData, NativeType* value);\n')
else:
to_dart_emitter.Emit(
- ' static Dart_Handle createWrapper(NativeType* value)\n'
+ ' static Dart_Handle createWrapper(DartDOMData* domData, NativeType* value)\n'
' {\n'
- ' DartDOMData* domData = DartDOMData::current();\n'
' return DartDOMWrapper::createWrapper<Dart$(INTERFACE)>(domData, value);\n'
' }\n',
INTERFACE=self._interface.id)
diff --git a/tools/dom/src/AttributeMap.dart b/tools/dom/src/AttributeMap.dart
index b74110b..c212a23 100644
--- a/tools/dom/src/AttributeMap.dart
+++ b/tools/dom/src/AttributeMap.dart
@@ -9,6 +9,10 @@
_AttributeMap(this._element);
+ void addAll(Map<String, String> other) {
+ other.forEach((k, v) { this[k] = v; });
+ }
+
bool containsValue(String value) {
for (var v in this.values) {
if (value == v) {
@@ -165,6 +169,10 @@
// interface Map
+ void addAll(Map<String, String> other) {
+ other.forEach((k, v) { this[k] = v; });
+ }
+
// TODO: Use lazy iterator when it is available on Map.
bool containsValue(String value) => values.any((v) => v == value);
diff --git a/tools/dom/src/native_DOMImplementation.dart b/tools/dom/src/native_DOMImplementation.dart
index e54cc11..23d9931 100644
--- a/tools/dom/src/native_DOMImplementation.dart
+++ b/tools/dom/src/native_DOMImplementation.dart
@@ -530,33 +530,36 @@
"is not supported in the browser");
};
- class _Timer implements Timer {
- var _canceler;
+class _Timer implements Timer {
+ static const int _STATE_TIMEOUT = 0;
+ static const int _STATE_INTERVAL = 1;
+ int _state;
_Timer(int milliSeconds, void callback(Timer timer), bool repeating) {
-
if (repeating) {
- int id = window._setInterval(() {
+ _state = (window._setInterval(() {
callback(this);
- }, milliSeconds);
- _canceler = () => window._clearInterval(id);
+ }, milliSeconds) << 1) | _STATE_INTERVAL;
} else {
- int id = window._setTimeout(() {
- _canceler = null;
+ _state = (window._setTimeout(() {
+ _state = null;
callback(this);
- }, milliSeconds);
- _canceler = () => window._clearTimeout(id);
+ }, milliSeconds) << 1) | _STATE_TIMEOUT;
}
}
void cancel() {
- if (_canceler != null) {
- _canceler();
+ if (_state == null) return;
+ int id = _state >> 1;
+ if ((_state & 1) == _STATE_TIMEOUT) {
+ window._clearTimeout(id);
+ } else {
+ window._clearInterval(id);
}
- _canceler = null;
+ _state = null;
}
- bool get isActive => _canceler != null;
+ bool get isActive => _state != null;
}
get _timerFactoryClosure =>
diff --git a/tools/dom/templates/html/impl/impl_DataTransferItemList.darttemplate b/tools/dom/templates/html/impl/impl_DataTransferItemList.darttemplate
new file mode 100644
index 0000000..b43806f
--- /dev/null
+++ b/tools/dom/templates/html/impl/impl_DataTransferItemList.darttemplate
@@ -0,0 +1,19 @@
+// Copyright (c) 2013, the Dart project authors. Please see the AUTHORS file
+// for details. All rights reserved. Use of this source code is governed by a
+// BSD-style license that can be found in the LICENSE file.
+
+part of $LIBRARYNAME;
+
+@DocsEditable()
+$(ANNOTATIONS)$(CLASS_MODIFIERS)class $CLASSNAME$EXTENDS$MIXINS$IMPLEMENTS$NATIVESPEC {
+$!MEMBERS
+
+ DataTransferItem operator[] (int index) {
+$if DART2JS
+ return JS('DataTransferItem', '#[#]', this, index);
+$else
+ return __getter__(index);
+$endif
+ }
+
+}
diff --git a/tools/dom/templates/html/impl/impl_Storage.darttemplate b/tools/dom/templates/html/impl/impl_Storage.darttemplate
index d9b0e1a..82d1f0c 100644
--- a/tools/dom/templates/html/impl/impl_Storage.darttemplate
+++ b/tools/dom/templates/html/impl/impl_Storage.darttemplate
@@ -32,6 +32,10 @@
$(ANNOTATIONS)$(CLASS_MODIFIERS)class $CLASSNAME$EXTENDS
implements Map<String, String> $NATIVESPEC {
+ void addAll(Map<String, String> other) {
+ other.forEach((k, v) { this[k] = v; });
+ }
+
// TODO(nweiz): update this when maps support lazy iteration
bool containsValue(String value) => values.any((e) => e == value);
diff --git a/tools/testing/dart/browser_controller.dart b/tools/testing/dart/browser_controller.dart
index 501f765..b25c992 100644
--- a/tools/testing/dart/browser_controller.dart
+++ b/tools/testing/dart/browser_controller.dart
@@ -1273,7 +1273,7 @@
// Until we have the next task we set the current_id to a specific
// negative value.
contactBrowserController(
- 'GET', '$nextTestPath/$browserId', newTaskHandler, "", false);
+ 'GET', '$nextTestPath/$browserId', newTaskHandler, "", false);
}
function run(url) {
@@ -1308,7 +1308,7 @@
}
}
contactBrowserController(
- 'POST', '$errorReportingUrl?test=1', handleReady, msg, true);
+ 'POST', '$errorReportingUrl?test=1', handleReady, msg, true);
}
function reportMessage(msg, isFirstMessage, isStatusUpdate) {
@@ -1324,8 +1324,15 @@
function() {}, msg, true);
} else {
var is_double_report = test_completed;
+ var retry = 0;
test_completed = true;
+ function reportDoneMessage() {
+ contactBrowserController(
+ 'POST', '$reportPath/${browserId}?id=' + current_id,
+ handleReady, msg, true);
+ }
+
function handleReady() {
if (this.readyState == this.DONE) {
if (this.status == 200) {
@@ -1333,13 +1340,17 @@
getNextTask();
}
} else {
- reportError('Error sending result to server');
+ reportError('Error sending result to server. Status: ' +
+ this.status + ' Retry: ' + retry);
+ retry++;
+ if (retry < 3) {
+ setTimeout(reportDoneMessage, 1000);
+ }
}
}
}
- contactBrowserController(
- 'POST', '$reportPath/${browserId}?id=' + current_id, handleReady,
- msg, true);
+
+ reportDoneMessage();
}
}
@@ -1354,7 +1365,7 @@
function messageHandler(e) {
var msg = e.data;
if (typeof msg != 'string') return;
-
+
var parsedData = parseResult(msg);
if (parsedData) {
// Only if the JSON was valid, we'll post it back.
diff --git a/tools/testing/dart/browser_test.dart b/tools/testing/dart/browser_test.dart
index fa3c48b..42aa821 100644
--- a/tools/testing/dart/browser_test.dart
+++ b/tools/testing/dart/browser_test.dart
@@ -6,12 +6,7 @@
String getHtmlContents(String title,
String scriptType,
- Path sourceScript,
- {bool use_unittest_controller: false}) {
- var testControllerJs = '/root_dart/tools/testing/dart/test_controller.js';
- if (use_unittest_controller) {
- testControllerJs = '/root_dart/pkg/unittest/lib/test_controller.js';
- }
+ Path sourceScript) {
return """
<!DOCTYPE html>
<html>
@@ -29,7 +24,7 @@
<body>
<h1> Running $title </h1>
<script type="text/javascript"
- src="$testControllerJs">
+ src="/root_dart/tools/testing/dart/test_controller.js">
</script>
<script type="$scriptType" src="$sourceScript"
onerror="scriptTagOnErrorCallback(null)"
diff --git a/tools/utils.py b/tools/utils.py
index 89da10f..de2425c 100644
--- a/tools/utils.py
+++ b/tools/utils.py
@@ -14,6 +14,15 @@
import sys
import tempfile
+class Version(object):
+ def __init__(self, channel, major, minor, patch, prerelease,
+ prerelease_patch):
+ self.channel = channel
+ self.major = major
+ self.minor = minor
+ self.patch = patch
+ self.prerelease = prerelease
+ self.prerelease_patch = prerelease_patch
# Try to guess the host operating system.
def GuessOS():
@@ -231,40 +240,47 @@
def GetBaseDir():
return BASE_DIR
-# Return the base part of the version, Major.Minor.Build.Patch,
-# without the _revision addition
def GetShortVersion():
- (channel, major, minor, build, patch) = ReadVersionFile()
- # TODO(kustermann/ricow): Add the channel to the version string.
- return '%s.%s.%s.%s' % (major, minor, build, patch)
+ version = ReadVersionFile()
+ return ('%s.%s.%s.%s.%s' % (
+ version.major, version.minor, version.patch, version.prerelease,
+ version.prerelease_patch))
-
-def GetVersion():
- version_tuple = ReadVersionFile()
- if not version_tuple:
+def GetSemanticSDKVersion():
+ version = ReadVersionFile()
+ if not version:
return None
- (channel, major, minor, build, patch) = version_tuple
- revision = GetSVNRevision()
- user = GetUserName()
- # We don't add username to release builds (or any builds on the bots)
- if user == 'chrome-bot':
- user = ''
+ if version.channel == 'be':
+ postfix = '-edge.%s' % GetSVNRevision()
+ elif version.channel == 'dev':
+ postfix = '-dev.%s.%s' % (version.prerelease, version.prerelease_patch)
+ else:
+ assert version.channel == 'stable'
+ postfix = ''
- user_string = ''
- revision_string = ''
- if user:
- user_string = '_%s' % user
- if revision:
- revision_string = '_r%s' % revision
+ return '%s.%s.%s%s' % (version.major, version.minor, version.patch, postfix)
- # TODO(kustermann/ricow): Add the channel to the version string.
- return ("%s.%s.%s.%s%s%s" %
- (major, minor, build, patch, revision_string, user_string))
+def GetEclipseVersionQualifier():
+ def pad(number, num_digits):
+ number_str = str(number)
+ return '0' * max(0, num_digits - len(number_str)) + number_str
+
+ version = ReadVersionFile()
+ if version.channel == 'be':
+ return 'edge_%s' % pad(GetSVNRevision(), 6)
+ elif version.channel == 'dev':
+ return 'dev_%s_%s' % (pad(version.prerelease, 2),
+ pad(version.prerelease_patch, 2))
+ else:
+ return 'release'
+
+def GetVersion():
+ return GetSemanticSDKVersion()
def GetChannel():
- (channel, _, _, _, _) = ReadVersionFile()
- return channel
+ version = ReadVersionFile()
+ return version.channel
def GetUserName():
key = 'USER'
@@ -273,6 +289,12 @@
return os.environ.get(key, '')
def ReadVersionFile():
+ def match_against(pattern, content):
+ match = re.search(pattern, content, flags=re.MULTILINE)
+ if match:
+ return match.group(1)
+ return None
+
version_file = os.path.join(DART_DIR, 'tools', 'VERSION')
try:
fd = open(version_file)
@@ -281,19 +303,17 @@
except:
print "Warning: Couldn't read VERSION file (%s)" % version_file
return None
- channel_match = re.search(
- '^CHANNEL ([A-Za-z0-9]+)$', content, flags=re.MULTILINE)
- major_match = re.search('^MAJOR (\d+)$', content, flags=re.MULTILINE)
- minor_match = re.search('^MINOR (\d+)$', content, flags=re.MULTILINE)
- build_match = re.search('^BUILD (\d+)$', content, flags=re.MULTILINE)
- patch_match = re.search('^PATCH (\d+)$', content, flags=re.MULTILINE)
- if (channel_match and
- major_match and
- minor_match and
- build_match and
- patch_match):
- return (channel_match.group(1), major_match.group(1), minor_match.group(1),
- build_match.group(1), patch_match.group(1))
+
+ channel = match_against('^CHANNEL ([A-Za-z0-9]+)$', content)
+ major = match_against('^MAJOR (\d+)$', content)
+ minor = match_against('^MINOR (\d+)$', content)
+ patch = match_against('^PATCH (\d+)$', content)
+ prerelease = match_against('^PRERELEASE (\d+)$', content)
+ prerelease_patch = match_against('^PRERELEASE_PATCH (\d+)$', content)
+
+ if channel and major and minor and prerelease and prerelease_patch:
+ return Version(
+ channel, major, minor, patch, prerelease, prerelease_patch)
else:
print "Warning: VERSION file (%s) has wrong format" % version_file
return None