diff --git a/RetailCoder.VBE/App.cs b/RetailCoder.VBE/App.cs index 7b19f37fa4..01869df036 100644 --- a/RetailCoder.VBE/App.cs +++ b/RetailCoder.VBE/App.cs @@ -122,7 +122,9 @@ private void RefreshSelection() private bool ShouldEvaluateCanExecute(Declaration selectedDeclaration, ParserState currentStatus) { - return _lastStatus != currentStatus || (selectedDeclaration != null && !selectedDeclaration.Equals(_lastSelectedDeclaration)); + return _lastStatus != currentStatus || + (selectedDeclaration != null && !selectedDeclaration.Equals(_lastSelectedDeclaration)) || + (selectedDeclaration == null && _lastSelectedDeclaration != null); } private void _configService_SettingsChanged(object sender, EventArgs e) diff --git a/RetailCoder.VBE/Inspections/InspectionsUI.de.resx b/RetailCoder.VBE/Inspections/InspectionsUI.de.resx index 3aae6ab9ab..c8ba43fbcf 100644 --- a/RetailCoder.VBE/Inspections/InspectionsUI.de.resx +++ b/RetailCoder.VBE/Inspections/InspectionsUI.de.resx @@ -1,4 +1,4 @@ - + - + @@ -453,7 +453,7 @@ Übergebe Parameter als Wert - Ändere '{0}$' zu '{0}' + Ändere '{0}' zu '{1}' Verarbeite alle Vorkommen im Modul @@ -521,4 +521,4 @@ Zuweisung in eine Objektvariable benötigt das 'Set'-Schlüsselwort. - + \ No newline at end of file diff --git a/RetailCoder.VBE/Inspections/InspectionsUI.resx b/RetailCoder.VBE/Inspections/InspectionsUI.resx index ddcebc7a36..26ecd74f9f 100644 --- a/RetailCoder.VBE/Inspections/InspectionsUI.resx +++ b/RetailCoder.VBE/Inspections/InspectionsUI.resx @@ -1,4 +1,4 @@ - + - + @@ -453,7 +453,7 @@ Pass parameter by value - Change '{0}' to '{0}$' + Change '{0}' to '{1}' Fix all occurrences in module @@ -522,4 +522,4 @@ Object variable assignment requires 'Set' keyword - + \ No newline at end of file diff --git a/RetailCoder.VBE/Inspections/ObjectVariableNotSetInspection.cs b/RetailCoder.VBE/Inspections/ObjectVariableNotSetInspection.cs index cf1b5884b9..5b65ffc092 100644 --- a/RetailCoder.VBE/Inspections/ObjectVariableNotSetInspection.cs +++ b/RetailCoder.VBE/Inspections/ObjectVariableNotSetInspection.cs @@ -80,7 +80,8 @@ public ObjectVariableNotSetInspection(RubberduckParserState state) Tokens.Long, Tokens.LongLong, Tokens.Single, - Tokens.String + Tokens.String, + Tokens.Variant }; public override IEnumerable GetInspectionResults() @@ -97,8 +98,6 @@ public override IEnumerable GetInspectionResults() return setStmtContext != null && setStmtContext.LET() == null; })) .Select(reference => new ObjectVariableNotSetInspectionResult(this, reference)); - - } } } \ No newline at end of file diff --git a/RetailCoder.VBE/Inspections/UntypedFunctionUsageInspectionResult.cs b/RetailCoder.VBE/Inspections/UntypedFunctionUsageInspectionResult.cs index 00e8b094bf..2137af96ff 100644 --- a/RetailCoder.VBE/Inspections/UntypedFunctionUsageInspectionResult.cs +++ b/RetailCoder.VBE/Inspections/UntypedFunctionUsageInspectionResult.cs @@ -34,7 +34,7 @@ public override string Description public class UntypedFunctionUsageQuickFix : CodeInspectionQuickFix { public UntypedFunctionUsageQuickFix(ParserRuleContext context, QualifiedSelection selection) - : base(context, selection, string.Format(InspectionsUI.QuickFixUseTypedFunction_, context.GetText())) + : base(context, selection, string.Format(InspectionsUI.QuickFixUseTypedFunction_, context.GetText(), context.GetText() + "$")) { } @@ -49,6 +49,7 @@ public override void Fix() var result = lines.Replace(originalInstruction, newInstruction); module.ReplaceLine(selection.StartLine, result); + // FIXME trigger reparse } } } \ No newline at end of file diff --git a/RetailCoder.VBE/Refactorings/EncapsulateField/EncapsulateFieldRefactoring.cs b/RetailCoder.VBE/Refactorings/EncapsulateField/EncapsulateFieldRefactoring.cs index d171b0c78d..805f85d6fd 100644 --- a/RetailCoder.VBE/Refactorings/EncapsulateField/EncapsulateFieldRefactoring.cs +++ b/RetailCoder.VBE/Refactorings/EncapsulateField/EncapsulateFieldRefactoring.cs @@ -20,11 +20,6 @@ public EncapsulateFieldRefactoring(VBE vbe, IRefactoringPresenterFactory _declarations; private readonly VBE _vbe; - private readonly RubberduckParserState _parserState; private readonly IMessageBox _messageBox; - private IList _declarations; - private Declaration _target; - public IntroduceFieldRefactoring(VBE vbe, RubberduckParserState parserState, IMessageBox messageBox) { + _declarations = + parserState.AllDeclarations.Where(i => !i.IsBuiltIn && i.DeclarationType == DeclarationType.Variable) + .ToList(); _vbe = vbe; - _parserState = parserState; _messageBox = messageBox; } - public bool CanExecute(QualifiedSelection selection) - { - _declarations = _parserState.AllUserDeclarations.ToList(); - - _target = _declarations.FindVariable(selection); - return _target != null; - } - public void Refactor() { var selection = _vbe.ActiveCodePane.GetQualifiedSelection(); - + if (!selection.HasValue) { _messageBox.Show(RubberduckUI.PromoteVariable_InvalidSelection, RubberduckUI.IntroduceField_Caption, @@ -52,14 +43,16 @@ public void Refactor() public void Refactor(QualifiedSelection selection) { - if (!CanExecute(selection)) + var target = _declarations.FindVariable(selection); + + if (target == null) { _messageBox.Show(RubberduckUI.PromoteVariable_InvalidSelection, RubberduckUI.IntroduceParameter_Caption, MessageBoxButtons.OK, MessageBoxIcon.Exclamation); return; } - PromoteVariable(_target); + PromoteVariable(target); } public void Refactor(Declaration target) @@ -85,35 +78,33 @@ private void PromoteVariable(Declaration target) return; } - _target = target; - - RemoveVariable(); - AddField(); + RemoveVariable(target); + AddField(target); } - private void AddField() + private void AddField(Declaration target) { - var module = _target.QualifiedName.QualifiedModuleName.Component.CodeModule; - module.InsertLines(module.CountOfDeclarationLines + 1, GetFieldDefinition()); + var module = target.QualifiedName.QualifiedModuleName.Component.CodeModule; + module.InsertLines(module.CountOfDeclarationLines + 1, GetFieldDefinition(target)); } - private void RemoveVariable() + private void RemoveVariable(Declaration target) { Selection selection; - var declarationText = _target.Context.GetText(); - var multipleDeclarations = _target.HasMultipleDeclarationsInStatement(); + var declarationText = target.Context.GetText(); + var multipleDeclarations = target.HasMultipleDeclarationsInStatement(); - var variableStmtContext = _target.GetVariableStmtContext(); + var variableStmtContext = target.GetVariableStmtContext(); if (!multipleDeclarations) { declarationText = variableStmtContext.GetText(); - selection = _target.GetVariableStmtContextSelection(); + selection = target.GetVariableStmtContextSelection(); } else { - selection = new Selection(_target.Context.Start.Line, _target.Context.Start.Column, - _target.Context.Stop.Line, _target.Context.Stop.Column); + selection = new Selection(target.Context.Start.Line, target.Context.Start.Column, + target.Context.Stop.Line, target.Context.Stop.Column); } var oldLines = _vbe.ActiveCodePane.CodeModule.GetLines(selection); @@ -123,9 +114,9 @@ private void RemoveVariable() if (multipleDeclarations) { - selection = _target.GetVariableStmtContextSelection(); + selection = target.GetVariableStmtContextSelection(); newLines = RemoveExtraComma(_vbe.ActiveCodePane.CodeModule.GetLines(selection).Replace(oldLines, newLines), - _target.CountOfDeclarationsInStatement(), _target.IndexOfVariableDeclarationInStatement()); + target.CountOfDeclarationsInStatement(), target.IndexOfVariableDeclarationInStatement()); } var newLinesWithoutExcessSpaces = newLines.Split(new[] { Environment.NewLine }, StringSplitOptions.None); @@ -189,9 +180,9 @@ private string RemoveExtraComma(string str, int numParams, int indexRemoved) return str.Remove(str.NthIndexOf(',', commaToRemove), 1); } - private string GetFieldDefinition() + private string GetFieldDefinition(Declaration target) { - return "Private " + _target.IdentifierName + " As " + _target.AsTypeName; + return "Private " + target.IdentifierName + " As " + target.AsTypeName; } } } diff --git a/RetailCoder.VBE/Refactorings/IntroduceParameter/IntroduceParameterRefactoring.cs b/RetailCoder.VBE/Refactorings/IntroduceParameter/IntroduceParameterRefactoring.cs index 008f196af6..fb02593c9d 100644 --- a/RetailCoder.VBE/Refactorings/IntroduceParameter/IntroduceParameterRefactoring.cs +++ b/RetailCoder.VBE/Refactorings/IntroduceParameter/IntroduceParameterRefactoring.cs @@ -18,11 +18,10 @@ namespace Rubberduck.Refactorings.IntroduceParameter public class IntroduceParameterRefactoring : IRefactoring { private readonly VBE _vbe; - private readonly RubberduckParserState _parserState; + private readonly RubberduckParserState _parseResult; + private readonly IList _declarations; private readonly IMessageBox _messageBox; - private IList _declarations; - private static readonly DeclarationType[] ValidDeclarationTypes = { DeclarationType.Function, @@ -32,23 +31,14 @@ public class IntroduceParameterRefactoring : IRefactoring DeclarationType.PropertySet }; - private Declaration _target; - - public IntroduceParameterRefactoring(VBE vbe, RubberduckParserState parserState, IMessageBox messageBox) + public IntroduceParameterRefactoring(VBE vbe, RubberduckParserState parseResult, IMessageBox messageBox) { _vbe = vbe; - _parserState = parserState; + _parseResult = parseResult; + _declarations = parseResult.AllDeclarations.ToList(); _messageBox = messageBox; } - public bool CanExecute(QualifiedSelection selection) - { - _declarations = _parserState.AllUserDeclarations.ToList(); - - _target = _declarations.FindVariable(selection); - return _target != null; - } - public void Refactor() { var selection = _vbe.ActiveCodePane.CodeModule.GetSelection(); @@ -65,14 +55,16 @@ public void Refactor() public void Refactor(QualifiedSelection selection) { - if (!CanExecute(selection)) + var target = _declarations.FindVariable(selection); + + if (target == null) { _messageBox.Show(RubberduckUI.PromoteVariable_InvalidSelection, RubberduckUI.IntroduceParameter_Caption, MessageBoxButtons.OK, MessageBoxIcon.Exclamation); return; } - PromoteVariable(); + PromoteVariable(target); } public void Refactor(Declaration target) @@ -86,33 +78,30 @@ public void Refactor(Declaration target) throw new ArgumentException("Invalid declaration type", "target"); } - _declarations = _parserState.AllUserDeclarations.ToList(); - _target = target; - - PromoteVariable(); + PromoteVariable(target); } - private void PromoteVariable() + private void PromoteVariable(Declaration target) { - if (!PromptIfMethodImplementsInterface()) + if (!PromptIfMethodImplementsInterface(target)) { return; } - if (new[] { DeclarationType.ClassModule, DeclarationType.ProceduralModule }.Contains(_target.ParentDeclaration.DeclarationType)) + if (new[] { DeclarationType.ClassModule, DeclarationType.ProceduralModule }.Contains(target.ParentDeclaration.DeclarationType)) { _messageBox.Show(RubberduckUI.PromoteVariable_InvalidSelection, RubberduckUI.IntroduceParameter_Caption, MessageBoxButtons.OK, MessageBoxIcon.Exclamation); return; } - RemoveVariable(); - UpdateSignature(); + RemoveVariable(target); + UpdateSignature(target); } - private bool PromptIfMethodImplementsInterface() + private bool PromptIfMethodImplementsInterface(Declaration targetVariable) { - var functionDeclaration = _declarations.FindTarget(_target.QualifiedSelection, ValidDeclarationTypes); + var functionDeclaration = _declarations.FindTarget(targetVariable.QualifiedSelection, ValidDeclarationTypes); var interfaceImplementation = GetInterfaceImplementation(functionDeclaration); if (interfaceImplementation == null) @@ -129,9 +118,9 @@ private bool PromptIfMethodImplementsInterface() return introduceParamToInterface != DialogResult.No; } - private void UpdateSignature() + private void UpdateSignature(Declaration targetVariable) { - var functionDeclaration = _declarations.FindTarget(_target.QualifiedSelection, ValidDeclarationTypes); + var functionDeclaration = _declarations.FindTarget(targetVariable.QualifiedSelection, ValidDeclarationTypes); var proc = (dynamic)functionDeclaration.Context; var paramList = (VBAParser.ArgListContext)proc.argList(); @@ -143,7 +132,7 @@ private void UpdateSignature() functionDeclaration.DeclarationType != DeclarationType.PropertyLet && functionDeclaration.DeclarationType != DeclarationType.PropertySet) { - AddParameter(functionDeclaration, paramList, module); + AddParameter(functionDeclaration, targetVariable, paramList, module); if (interfaceImplementation == null) { return; } } @@ -152,12 +141,12 @@ private void UpdateSignature() functionDeclaration.DeclarationType == DeclarationType.PropertyLet || functionDeclaration.DeclarationType == DeclarationType.PropertySet) { - UpdateProperties(functionDeclaration); + UpdateProperties(functionDeclaration, targetVariable); } if (interfaceImplementation == null) { return; } - UpdateSignature(interfaceImplementation); + UpdateSignature(interfaceImplementation, targetVariable); var interfaceImplementations = _declarations.FindInterfaceImplementationMembers() .Where(item => item.ProjectId == interfaceImplementation.ProjectId @@ -166,20 +155,20 @@ private void UpdateSignature() foreach (var implementation in interfaceImplementations) { - UpdateSignature(implementation); + UpdateSignature(implementation, targetVariable); } } - private void UpdateSignature(Declaration targetMethod) + private void UpdateSignature(Declaration targetMethod, Declaration targetVariable) { var proc = (dynamic)targetMethod.Context; var paramList = (VBAParser.ArgListContext)proc.argList(); var module = targetMethod.QualifiedName.QualifiedModuleName.Component.CodeModule; - AddParameter(targetMethod, paramList, module); + AddParameter(targetMethod, targetVariable, paramList, module); } - private void AddParameter(Declaration targetMethod, VBAParser.ArgListContext paramList, CodeModule module) + private void AddParameter(Declaration targetMethod, Declaration targetVariable, VBAParser.ArgListContext paramList, CodeModule module) { var argList = paramList.arg(); var lastParam = argList.LastOrDefault(); @@ -189,25 +178,25 @@ private void AddParameter(Declaration targetMethod, VBAParser.ArgListContext par if (lastParam == null) { // Increase index by one because VBA is dumb enough to use 1-based indexing - newContent = newContent.Insert(newContent.IndexOf('(') + 1, GetParameterDefinition()); + newContent = newContent.Insert(newContent.IndexOf('(') + 1, GetParameterDefinition(targetVariable)); } else if (targetMethod.DeclarationType != DeclarationType.PropertyLet && targetMethod.DeclarationType != DeclarationType.PropertySet) { newContent = newContent.Replace(argList.Last().GetText(), - argList.Last().GetText() + ", " + GetParameterDefinition()); + argList.Last().GetText() + ", " + GetParameterDefinition(targetVariable)); } else { newContent = newContent.Replace(argList.Last().GetText(), - GetParameterDefinition() + ", " + argList.Last().GetText()); + GetParameterDefinition(targetVariable) + ", " + argList.Last().GetText()); } module.ReplaceLine(paramList.Start.Line, newContent); module.DeleteLines(paramList.Start.Line + 1, paramList.GetSelection().LineCount - 1); } - private void UpdateProperties(Declaration knownProperty) + private void UpdateProperties(Declaration knownProperty, Declaration targetVariable) { var propertyGet = _declarations.FirstOrDefault(d => d.DeclarationType == DeclarationType.PropertyGet && @@ -245,27 +234,27 @@ private void UpdateProperties(Declaration knownProperty) properties.OrderByDescending(o => o.Selection.StartLine) .ThenByDescending(t => t.Selection.StartColumn)) { - UpdateSignature(property); + UpdateSignature(property, targetVariable); } } - private void RemoveVariable() + private void RemoveVariable(Declaration target) { Selection selection; - var declarationText = _target.Context.GetText(); - var multipleDeclarations = _target.HasMultipleDeclarationsInStatement(); + var declarationText = target.Context.GetText(); + var multipleDeclarations = target.HasMultipleDeclarationsInStatement(); - var variableStmtContext = _target.GetVariableStmtContext(); + var variableStmtContext = target.GetVariableStmtContext(); if (!multipleDeclarations) { declarationText = variableStmtContext.GetText(); - selection = _target.GetVariableStmtContextSelection(); + selection = target.GetVariableStmtContextSelection(); } else { - selection = new Selection(_target.Context.Start.Line, _target.Context.Start.Column, - _target.Context.Stop.Line, _target.Context.Stop.Column); + selection = new Selection(target.Context.Start.Line, target.Context.Start.Column, + target.Context.Stop.Line, target.Context.Stop.Column); } var oldLines = _vbe.ActiveCodePane.CodeModule.GetLines(selection); @@ -275,12 +264,12 @@ private void RemoveVariable() if (multipleDeclarations) { - selection = _target.GetVariableStmtContextSelection(); + selection = target.GetVariableStmtContextSelection(); newLines = RemoveExtraComma(_vbe.ActiveCodePane.CodeModule.GetLines(selection).Replace(oldLines, newLines), - _target.CountOfDeclarationsInStatement(), _target.IndexOfVariableDeclarationInStatement()); + target.CountOfDeclarationsInStatement(), target.IndexOfVariableDeclarationInStatement()); } - var newLinesWithoutExcessSpaces = newLines.Split(new[] {Environment.NewLine}, StringSplitOptions.None); + var newLinesWithoutExcessSpaces = newLines.Split(new[] { Environment.NewLine }, StringSplitOptions.None); for (var i = 0; i < newLinesWithoutExcessSpaces.Length; i++) { newLinesWithoutExcessSpaces[i] = newLinesWithoutExcessSpaces[i].RemoveExtraSpacesLeavingIndentation(); @@ -307,7 +296,7 @@ private void RemoveVariable() private string GetOldSignature(Declaration target) { - var rewriter = _parserState.GetRewriter(target.QualifiedName.QualifiedModuleName.Component); + var rewriter = _parseResult.GetRewriter(target.QualifiedName.QualifiedModuleName.Component); var context = target.Context; var firstTokenIndex = context.Start.TokenIndex; @@ -396,9 +385,9 @@ private string RemoveExtraComma(string str, int numParams, int indexRemoved) return str.Remove(str.NthIndexOf(',', commaToRemove), 1); } - private string GetParameterDefinition() + private string GetParameterDefinition(Declaration target) { - return "ByVal " + _target.IdentifierName + " As " + _target.AsTypeName; + return "ByVal " + target.IdentifierName + " As " + target.AsTypeName; } } } diff --git a/RetailCoder.VBE/UI/Command/MenuItems/CodeExplorerCommandMenuItem.cs b/RetailCoder.VBE/UI/Command/MenuItems/CodeExplorerCommandMenuItem.cs index 67af7e21d5..42d95d9b9e 100644 --- a/RetailCoder.VBE/UI/Command/MenuItems/CodeExplorerCommandMenuItem.cs +++ b/RetailCoder.VBE/UI/Command/MenuItems/CodeExplorerCommandMenuItem.cs @@ -1,5 +1,4 @@ using System.Windows.Input; -using Rubberduck.Parsing.VBA; using Rubberduck.UI.Command.MenuItems.ParentMenus; namespace Rubberduck.UI.Command.MenuItems @@ -13,11 +12,5 @@ public CodeExplorerCommandMenuItem(ICommand command) public override string Key { get { return "RubberduckMenu_CodeExplorer"; } } public override int DisplayOrder { get { return (int)NavigationMenuItemDisplayOrder.CodeExplorer; } } - - public override bool EvaluateCanExecute(RubberduckParserState state) - { - return state.Status == ParserState.Ready || - state.Status == ParserState.Resolving; - } } } \ No newline at end of file diff --git a/RetailCoder.VBE/UI/Command/MenuItems/InspectionResultsCommandMenuItem.cs b/RetailCoder.VBE/UI/Command/MenuItems/InspectionResultsCommandMenuItem.cs index 30e9ee4294..82d41d61b9 100644 --- a/RetailCoder.VBE/UI/Command/MenuItems/InspectionResultsCommandMenuItem.cs +++ b/RetailCoder.VBE/UI/Command/MenuItems/InspectionResultsCommandMenuItem.cs @@ -1,5 +1,4 @@ using System.Windows.Input; -using Rubberduck.Parsing.VBA; using Rubberduck.UI.Command.MenuItems.ParentMenus; namespace Rubberduck.UI.Command.MenuItems @@ -13,10 +12,5 @@ public InspectionResultsCommandMenuItem(ICommand command) public override string Key { get { return "RubberduckMenu_CodeInspections"; } } public override int DisplayOrder { get { return (int)RubberduckMenuItemDisplayOrder.CodeInspections; } } - - public override bool EvaluateCanExecute(RubberduckParserState state) - { - return state.Status == ParserState.Ready; - } } } \ No newline at end of file diff --git a/RetailCoder.VBE/UI/Command/MenuItems/ToDoExplorerCommandMenuItem.cs b/RetailCoder.VBE/UI/Command/MenuItems/ToDoExplorerCommandMenuItem.cs index 947e959b4a..e52a073f00 100644 --- a/RetailCoder.VBE/UI/Command/MenuItems/ToDoExplorerCommandMenuItem.cs +++ b/RetailCoder.VBE/UI/Command/MenuItems/ToDoExplorerCommandMenuItem.cs @@ -1,5 +1,4 @@ using System.Windows.Input; -using Rubberduck.Parsing.VBA; using Rubberduck.UI.Command.MenuItems.ParentMenus; namespace Rubberduck.UI.Command.MenuItems @@ -13,11 +12,5 @@ public ToDoExplorerCommandMenuItem(ICommand command) public override string Key { get { return "RubberduckMenu_TodoItems"; } } public override int DisplayOrder { get { return (int)NavigationMenuItemDisplayOrder.ToDoExplorer; } } - - public override bool EvaluateCanExecute(RubberduckParserState state) - { - return state.Status == ParserState.Ready || - state.Status == ParserState.Resolving; - } } } \ No newline at end of file diff --git a/RetailCoder.VBE/UI/Command/Refactorings/RefactorIntroduceFieldCommand.cs b/RetailCoder.VBE/UI/Command/Refactorings/RefactorIntroduceFieldCommand.cs index f637f8d8d5..623dba360b 100644 --- a/RetailCoder.VBE/UI/Command/Refactorings/RefactorIntroduceFieldCommand.cs +++ b/RetailCoder.VBE/UI/Command/Refactorings/RefactorIntroduceFieldCommand.cs @@ -4,22 +4,17 @@ using Rubberduck.Parsing.Symbols; using Rubberduck.Parsing.VBA; using Rubberduck.Refactorings.IntroduceField; -using Rubberduck.VBEditor; -using Rubberduck.VBEditor.VBEInterfaces.RubberduckCodePane; namespace Rubberduck.UI.Command.Refactorings { public class RefactorIntroduceFieldCommand : RefactorCommandBase { private readonly RubberduckParserState _state; - private readonly IntroduceFieldRefactoring _refactoring; - private QualifiedSelection _qualifiedSelection; public RefactorIntroduceFieldCommand (VBE vbe, RubberduckParserState state) :base(vbe) { _state = state; - _refactoring = new IntroduceFieldRefactoring(Vbe, _state, new MessageBox()); } public override bool CanExecute(object parameter) @@ -29,21 +24,30 @@ public override bool CanExecute(object parameter) return false; } - var qualifiedSelection = Vbe.ActiveCodePane.GetQualifiedSelection(); - - if (qualifiedSelection == null) + var selection = Vbe.ActiveCodePane.GetQualifiedSelection(); + if (!selection.HasValue) { return false; } - _qualifiedSelection = qualifiedSelection.Value; + var target = _state.AllUserDeclarations.FindVariable(selection.Value); + + var canExecute = target != null && target.ParentScopeDeclaration.DeclarationType.HasFlag(DeclarationType.Member); - return _refactoring.CanExecute(_qualifiedSelection); + Debug.WriteLine("{0}.CanExecute evaluates to {1}", GetType().Name, canExecute); + return canExecute; } public override void Execute(object parameter) { - _refactoring.Refactor(_qualifiedSelection); + var selection = Vbe.ActiveCodePane.GetQualifiedSelection(); + if (!selection.HasValue) + { + return; + } + + var refactoring = new IntroduceFieldRefactoring(Vbe, _state, new MessageBox()); + refactoring.Refactor(selection.Value); } } } \ No newline at end of file diff --git a/RetailCoder.VBE/UI/Command/Refactorings/RefactorIntroduceParameterCommand.cs b/RetailCoder.VBE/UI/Command/Refactorings/RefactorIntroduceParameterCommand.cs index 4da887cbab..e70a8eb769 100644 --- a/RetailCoder.VBE/UI/Command/Refactorings/RefactorIntroduceParameterCommand.cs +++ b/RetailCoder.VBE/UI/Command/Refactorings/RefactorIntroduceParameterCommand.cs @@ -1,4 +1,7 @@ -using Microsoft.Vbe.Interop; +using System.Diagnostics; +using Microsoft.Vbe.Interop; +using Rubberduck.Common; +using Rubberduck.Parsing.Symbols; using Rubberduck.Parsing.VBA; using Rubberduck.Refactorings.IntroduceParameter; using Rubberduck.VBEditor; @@ -8,14 +11,11 @@ namespace Rubberduck.UI.Command.Refactorings public class RefactorIntroduceParameterCommand : RefactorCommandBase { private readonly RubberduckParserState _state; - private readonly IntroduceParameterRefactoring _refactoring; - private QualifiedSelection _qualifiedSelection; public RefactorIntroduceParameterCommand (VBE vbe, RubberduckParserState state) :base(vbe) { _state = state; - _refactoring = new IntroduceParameterRefactoring(Vbe, _state, new MessageBox()); } public override bool CanExecute(object parameter) @@ -25,21 +25,30 @@ public override bool CanExecute(object parameter) return false; } - var qualifiedSelection = Vbe.ActiveCodePane.GetQualifiedSelection(); - - if (qualifiedSelection == null) + var selection = Vbe.ActiveCodePane.GetQualifiedSelection(); + if (!selection.HasValue) { return false; } - _qualifiedSelection = qualifiedSelection.Value; + var target = _state.AllUserDeclarations.FindVariable(selection.Value); + + var canExecute = target != null && target.ParentScopeDeclaration.DeclarationType.HasFlag(DeclarationType.Member); - return _refactoring.CanExecute(_qualifiedSelection); + Debug.WriteLine("{0}.CanExecute evaluates to {1}", GetType().Name, canExecute); + return canExecute; } public override void Execute(object parameter) { - _refactoring.Refactor(_qualifiedSelection); + var selection = Vbe.ActiveCodePane.GetQualifiedSelection(); + if (!selection.HasValue) + { + return; + } + + var refactoring = new IntroduceParameterRefactoring(Vbe, _state, new MessageBox()); + refactoring.Refactor(selection.Value); } } } \ No newline at end of file diff --git a/RetailCoder.VBE/UI/FindSymbol/FindSymbolViewModel.cs b/RetailCoder.VBE/UI/FindSymbol/FindSymbolViewModel.cs index f05039b6e3..bf19cddc66 100644 --- a/RetailCoder.VBE/UI/FindSymbol/FindSymbolViewModel.cs +++ b/RetailCoder.VBE/UI/FindSymbol/FindSymbolViewModel.cs @@ -15,7 +15,8 @@ public class FindSymbolViewModel : INotifyPropertyChanged private static readonly DeclarationType[] ExcludedTypes = { DeclarationType.Control, - DeclarationType.ModuleOption + DeclarationType.ModuleOption, + DeclarationType.Project }; public FindSymbolViewModel(IEnumerable declarations, DeclarationIconCache cache) diff --git a/Rubberduck.Parsing/Grammar/VBALexer.cs b/Rubberduck.Parsing/Grammar/VBALexer.cs index 49d426373a..e5ebd1e5c7 100644 --- a/Rubberduck.Parsing/Grammar/VBALexer.cs +++ b/Rubberduck.Parsing/Grammar/VBALexer.cs @@ -177,7 +177,7 @@ public VBALexer(ICharStream input) public override string SerializedAtn { get { return _serializedATN; } } public static readonly string _serializedATN = - "\x3\xAF6F\x8320\x479D\xB75C\x4880\x1605\x191C\xAB37\x2\x104\xAB0\b\x1"+ + "\x3\xAF6F\x8320\x479D\xB75C\x4880\x1605\x191C\xAB37\x2\x104\xAB3\b\x1"+ "\x4\x2\t\x2\x4\x3\t\x3\x4\x4\t\x4\x4\x5\t\x5\x4\x6\t\x6\x4\a\t\a\x4\b"+ "\t\b\x4\t\t\t\x4\n\t\n\x4\v\t\v\x4\f\t\f\x4\r\t\r\x4\xE\t\xE\x4\xF\t\xF"+ "\x4\x10\t\x10\x4\x11\t\x11\x4\x12\t\x12\x4\x13\t\x13\x4\x14\t\x14\x4\x15"+ @@ -412,337 +412,337 @@ public VBALexer(ICharStream input) "\x3\x11F\x3\x11F\x3\x11F\x3\x11F\x3\x120\x3\x120\x3\x120\x3\x120\x3\x121"+ "\x3\x121\x3\x121\x3\x121\x3\x122\x3\x122\x3\x122\x5\x122\xA15\n\x122\x3"+ "\x123\x5\x123\xA18\n\x123\x3\x123\x3\x123\x3\x123\x3\x123\a\x123\xA1E"+ - "\n\x123\f\x123\xE\x123\xA21\v\x123\x3\x124\x3\x124\x3\x124\x3\x124\a\x124"+ - "\xA27\n\x124\f\x124\xE\x124\xA2A\v\x124\x3\x125\x3\x125\x3\x126\x3\x126"+ - "\x3\x127\x3\x127\x3\x128\x3\x128\a\x128\xA34\n\x128\f\x128\xE\x128\xA37"+ - "\v\x128\x3\x128\x3\x128\x6\x128\xA3B\n\x128\r\x128\xE\x128\xA3C\x3\x128"+ - "\x3\x128\x5\x128\xA41\n\x128\x3\x129\a\x129\xA44\n\x129\f\x129\xE\x129"+ - "\xA47\v\x129\x3\x129\x3\x129\a\x129\xA4B\n\x129\f\x129\xE\x129\xA4E\v"+ - "\x129\x3\x129\x5\x129\xA51\n\x129\x3\x129\x3\x129\x3\x12A\x3\x12A\x6\x12A"+ - "\xA57\n\x12A\r\x12A\xE\x12A\xA58\x3\x12A\x3\x12A\x6\x12A\xA5D\n\x12A\r"+ - "\x12A\xE\x12A\xA5E\x3\x12A\x3\x12A\x6\x12A\xA63\n\x12A\r\x12A\xE\x12A"+ - "\xA64\x3\x12A\x3\x12A\x6\x12A\xA69\n\x12A\r\x12A\xE\x12A\xA6A\x3\x12A"+ - "\x3\x12A\x6\x12A\xA6F\n\x12A\r\x12A\xE\x12A\xA70\x3\x12A\x3\x12A\x3\x12B"+ - "\x3\x12B\x3\x12C\x3\x12C\x3\x12D\x3\x12D\x3\x12E\x3\x12E\x3\x12F\x3\x12F"+ - "\x3\x130\x3\x130\x3\x131\x3\x131\x3\x132\x3\x132\x3\x133\x3\x133\x3\x134"+ - "\x3\x134\x3\x135\x3\x135\x3\x136\x3\x136\x3\x137\x3\x137\x3\x138\x3\x138"+ - "\x3\x139\x3\x139\x3\x13A\x3\x13A\x3\x13B\x3\x13B\x3\x13C\x3\x13C\x3\x13D"+ - "\x3\x13D\x3\x13E\x3\x13E\x3\x13F\x3\x13F\x3\x140\x3\x140\x3\x141\x3\x141"+ - "\x3\x142\x3\x142\x3\x143\x3\x143\x3\x144\x3\x144\x3\x145\x3\x145\x3\x146"+ - "\x3\x146\x3\x147\x3\x147\x3\x148\x3\x148\x2\x2\x2\x149\x3\x2\x3\x5\x2"+ - "\x4\a\x2\x5\t\x2\x6\v\x2\a\r\x2\b\xF\x2\t\x11\x2\n\x13\x2\v\x15\x2\f\x17"+ - "\x2\r\x19\x2\xE\x1B\x2\xF\x1D\x2\x10\x1F\x2\x11!\x2\x12#\x2\x13%\x2\x14"+ - "\'\x2\x15)\x2\x16+\x2\x17-\x2\x18/\x2\x19\x31\x2\x1A\x33\x2\x1B\x35\x2"+ - "\x1C\x37\x2\x1D\x39\x2\x1E;\x2\x1F=\x2 ?\x2!\x41\x2\"\x43\x2#\x45\x2$"+ - "G\x2%I\x2&K\x2\'M\x2(O\x2)Q\x2*S\x2+U\x2,W\x2-Y\x2.[\x2/]\x2\x30_\x2\x31"+ - "\x61\x2\x32\x63\x2\x33\x65\x2\x34g\x2\x35i\x2\x36k\x2\x37m\x2\x38o\x2"+ - "\x39q\x2:s\x2;u\x2{\x2?}\x2@\x7F\x2\x41\x81\x2\x42\x83\x2\x43"+ - "\x85\x2\x44\x87\x2\x45\x89\x2\x46\x8B\x2G\x8D\x2H\x8F\x2I\x91\x2J\x93"+ - "\x2K\x95\x2L\x97\x2M\x99\x2N\x9B\x2O\x9D\x2P\x9F\x2Q\xA1\x2R\xA3\x2S\xA5"+ - "\x2T\xA7\x2U\xA9\x2V\xAB\x2W\xAD\x2X\xAF\x2Y\xB1\x2Z\xB3\x2[\xB5\x2\\"+ - "\xB7\x2]\xB9\x2^\xBB\x2_\xBD\x2`\xBF\x2\x61\xC1\x2\x62\xC3\x2\x63\xC5"+ - "\x2\x64\xC7\x2\x65\xC9\x2\x66\xCB\x2g\xCD\x2h\xCF\x2i\xD1\x2j\xD3\x2k"+ - "\xD5\x2l\xD7\x2m\xD9\x2n\xDB\x2o\xDD\x2p\xDF\x2q\xE1\x2r\xE3\x2s\xE5\x2"+ - "t\xE7\x2u\xE9\x2v\xEB\x2w\xED\x2x\xEF\x2y\xF1\x2z\xF3\x2{\xF5\x2|\xF7"+ - "\x2}\xF9\x2~\xFB\x2\x7F\xFD\x2\x80\xFF\x2\x81\x101\x2\x82\x103\x2\x83"+ - "\x105\x2\x84\x107\x2\x85\x109\x2\x86\x10B\x2\x87\x10D\x2\x88\x10F\x2\x89"+ - "\x111\x2\x8A\x113\x2\x8B\x115\x2\x8C\x117\x2\x8D\x119\x2\x8E\x11B\x2\x8F"+ - "\x11D\x2\x90\x11F\x2\x91\x121\x2\x92\x123\x2\x93\x125\x2\x94\x127\x2\x95"+ - "\x129\x2\x96\x12B\x2\x97\x12D\x2\x98\x12F\x2\x99\x131\x2\x9A\x133\x2\x9B"+ - "\x135\x2\x9C\x137\x2\x9D\x139\x2\x9E\x13B\x2\x9F\x13D\x2\xA0\x13F\x2\xA1"+ - "\x141\x2\xA2\x143\x2\xA3\x145\x2\xA4\x147\x2\xA5\x149\x2\xA6\x14B\x2\xA7"+ - "\x14D\x2\xA8\x14F\x2\xA9\x151\x2\xAA\x153\x2\xAB\x155\x2\xAC\x157\x2\xAD"+ - "\x159\x2\xAE\x15B\x2\xAF\x15D\x2\xB0\x15F\x2\xB1\x161\x2\xB2\x163\x2\xB3"+ - "\x165\x2\xB4\x167\x2\xB5\x169\x2\xB6\x16B\x2\xB7\x16D\x2\xB8\x16F\x2\xB9"+ - "\x171\x2\xBA\x173\x2\xBB\x175\x2\xBC\x177\x2\xBD\x179\x2\xBE\x17B\x2\xBF"+ - "\x17D\x2\xC0\x17F\x2\xC1\x181\x2\xC2\x183\x2\xC3\x185\x2\xC4\x187\x2\xC5"+ - "\x189\x2\xC6\x18B\x2\xC7\x18D\x2\xC8\x18F\x2\xC9\x191\x2\xCA\x193\x2\xCB"+ - "\x195\x2\xCC\x197\x2\xCD\x199\x2\xCE\x19B\x2\xCF\x19D\x2\xD0\x19F\x2\xD1"+ - "\x1A1\x2\xD2\x1A3\x2\xD3\x1A5\x2\xD4\x1A7\x2\xD5\x1A9\x2\xD6\x1AB\x2\xD7"+ - "\x1AD\x2\xD8\x1AF\x2\xD9\x1B1\x2\xDA\x1B3\x2\xDB\x1B5\x2\xDC\x1B7\x2\xDD"+ - "\x1B9\x2\xDE\x1BB\x2\xDF\x1BD\x2\xE0\x1BF\x2\xE1\x1C1\x2\xE2\x1C3\x2\xE3"+ - "\x1C5\x2\xE4\x1C7\x2\xE5\x1C9\x2\xE6\x1CB\x2\xE7\x1CD\x2\xE8\x1CF\x2\xE9"+ - "\x1D1\x2\xEA\x1D3\x2\xEB\x1D5\x2\xEC\x1D7\x2\xED\x1D9\x2\xEE\x1DB\x2\xEF"+ - "\x1DD\x2\xF0\x1DF\x2\xF1\x1E1\x2\xF2\x1E3\x2\xF3\x1E5\x2\xF4\x1E7\x2\xF5"+ - "\x1E9\x2\xF6\x1EB\x2\xF7\x1ED\x2\xF8\x1EF\x2\x2\x1F1\x2\xF9\x1F3\x2\x2"+ - "\x1F5\x2\x2\x1F7\x2\x2\x1F9\x2\x2\x1FB\x2\x2\x1FD\x2\x2\x1FF\x2\xFA\x201"+ - "\x2\x2\x203\x2\x2\x205\x2\x2\x207\x2\x2\x209\x2\x2\x20B\x2\x2\x20D\x2"+ - "\x2\x20F\x2\x2\x211\x2\x2\x213\x2\x2\x215\x2\x2\x217\x2\x2\x219\x2\x2"+ - "\x21B\x2\x2\x21D\x2\x2\x21F\x2\x2\x221\x2\x2\x223\x2\x2\x225\x2\x2\x227"+ - "\x2\x2\x229\x2\x2\x22B\x2\x2\x22D\x2\x2\x22F\x2\x2\x231\x2\x2\x233\x2"+ - "\x2\x235\x2\x2\x237\x2\x2\x239\x2\x2\x23B\x2\x2\x23D\x2\x2\x23F\x2\x2"+ - "\x241\x2\x2\x243\x2\xFB\x245\x2\xFC\x247\x2\xFD\x249\x2\xFE\x24B\x2\xFF"+ - "\x24D\x2\x100\x24F\x2\x101\x251\x2\x102\x253\x2\x103\x255\x2\x2\x257\x2"+ - "\x2\x259\x2\x2\x25B\x2\x2\x25D\x2\x2\x25F\x2\x2\x261\x2\x2\x263\x2\x2"+ - "\x265\x2\x2\x267\x2\x2\x269\x2\x2\x26B\x2\x2\x26D\x2\x2\x26F\x2\x2\x271"+ - "\x2\x2\x273\x2\x2\x275\x2\x2\x277\x2\x2\x279\x2\x2\x27B\x2\x2\x27D\x2"+ - "\x2\x27F\x2\x2\x281\x2\x2\x283\x2\x2\x285\x2\x2\x287\x2\x2\x289\x2\x2"+ - "\x28B\x2\x2\x28D\x2\x2\x28F\x2\x104\x3\x2.\x5\x2\f\f\xF\xF$$\x3\x2\x32"+ - ":\x4\x2\x32;\x43H\x4\x2\'(``\x5\x2##%%\x42\x42\x4\x2\x46G\x66g\x4\x2-"+ - "-//\x4\x2./\x31\x31\x4\x2\x30\x30<<\x5\x2\f\f\xF\xF\x202A\x202B\x3\x2"+ - "\x42\x42\x4\x2\v\v\"\"\t\x2\v\f\xF\xF\"=??\x42\x42]`~~\v\x2\v\f\xF\xF"+ - "\".\x30\x30<=??\x42\x42]`~~\x6\x2\f\f\xF\xF##^_\f\x2\x43\\\x61\x61\x63"+ - "|\xA6\xA6\xB8\xB8\xBE\xBE\xC5\xC5\x155\x155\x2015\x2015\x2020\x2020\x3"+ - "\x2\x32;\r\x2\x32;\x43\\\x61\x61\x63|\xA6\xA6\xB8\xB8\xBE\xBE\xC5\xC5"+ - "\x155\x155\x2015\x2015\x2020\x2020\x4\x2\x43\x43\x63\x63\x4\x2\x44\x44"+ - "\x64\x64\x4\x2\x45\x45\x65\x65\x4\x2\x46\x46\x66\x66\x4\x2GGgg\x4\x2H"+ - "Hhh\x4\x2IIii\x4\x2JJjj\x4\x2KKkk\x4\x2LLll\x4\x2MMmm\x4\x2NNnn\x4\x2"+ - "OOoo\x4\x2PPpp\x4\x2QQqq\x4\x2RRrr\x4\x2SSss\x4\x2TTtt\x4\x2UUuu\x4\x2"+ - "VVvv\x4\x2WWww\x4\x2XXxx\x4\x2YYyy\x4\x2ZZzz\x4\x2[[{{\x4\x2\\\\||\xAC1"+ - "\x2\x3\x3\x2\x2\x2\x2\x5\x3\x2\x2\x2\x2\a\x3\x2\x2\x2\x2\t\x3\x2\x2\x2"+ - "\x2\v\x3\x2\x2\x2\x2\r\x3\x2\x2\x2\x2\xF\x3\x2\x2\x2\x2\x11\x3\x2\x2\x2"+ - "\x2\x13\x3\x2\x2\x2\x2\x15\x3\x2\x2\x2\x2\x17\x3\x2\x2\x2\x2\x19\x3\x2"+ - "\x2\x2\x2\x1B\x3\x2\x2\x2\x2\x1D\x3\x2\x2\x2\x2\x1F\x3\x2\x2\x2\x2!\x3"+ - "\x2\x2\x2\x2#\x3\x2\x2\x2\x2%\x3\x2\x2\x2\x2\'\x3\x2\x2\x2\x2)\x3\x2\x2"+ - "\x2\x2+\x3\x2\x2\x2\x2-\x3\x2\x2\x2\x2/\x3\x2\x2\x2\x2\x31\x3\x2\x2\x2"+ - "\x2\x33\x3\x2\x2\x2\x2\x35\x3\x2\x2\x2\x2\x37\x3\x2\x2\x2\x2\x39\x3\x2"+ - "\x2\x2\x2;\x3\x2\x2\x2\x2=\x3\x2\x2\x2\x2?\x3\x2\x2\x2\x2\x41\x3\x2\x2"+ - "\x2\x2\x43\x3\x2\x2\x2\x2\x45\x3\x2\x2\x2\x2G\x3\x2\x2\x2\x2I\x3\x2\x2"+ - "\x2\x2K\x3\x2\x2\x2\x2M\x3\x2\x2\x2\x2O\x3\x2\x2\x2\x2Q\x3\x2\x2\x2\x2"+ - "S\x3\x2\x2\x2\x2U\x3\x2\x2\x2\x2W\x3\x2\x2\x2\x2Y\x3\x2\x2\x2\x2[\x3\x2"+ - "\x2\x2\x2]\x3\x2\x2\x2\x2_\x3\x2\x2\x2\x2\x61\x3\x2\x2\x2\x2\x63\x3\x2"+ - "\x2\x2\x2\x65\x3\x2\x2\x2\x2g\x3\x2\x2\x2\x2i\x3\x2\x2\x2\x2k\x3\x2\x2"+ - "\x2\x2m\x3\x2\x2\x2\x2o\x3\x2\x2\x2\x2q\x3\x2\x2\x2\x2s\x3\x2\x2\x2\x2"+ - "u\x3\x2\x2\x2\x2w\x3\x2\x2\x2\x2y\x3\x2\x2\x2\x2{\x3\x2\x2\x2\x2}\x3\x2"+ - "\x2\x2\x2\x7F\x3\x2\x2\x2\x2\x81\x3\x2\x2\x2\x2\x83\x3\x2\x2\x2\x2\x85"+ - "\x3\x2\x2\x2\x2\x87\x3\x2\x2\x2\x2\x89\x3\x2\x2\x2\x2\x8B\x3\x2\x2\x2"+ - "\x2\x8D\x3\x2\x2\x2\x2\x8F\x3\x2\x2\x2\x2\x91\x3\x2\x2\x2\x2\x93\x3\x2"+ - "\x2\x2\x2\x95\x3\x2\x2\x2\x2\x97\x3\x2\x2\x2\x2\x99\x3\x2\x2\x2\x2\x9B"+ - "\x3\x2\x2\x2\x2\x9D\x3\x2\x2\x2\x2\x9F\x3\x2\x2\x2\x2\xA1\x3\x2\x2\x2"+ - "\x2\xA3\x3\x2\x2\x2\x2\xA5\x3\x2\x2\x2\x2\xA7\x3\x2\x2\x2\x2\xA9\x3\x2"+ - "\x2\x2\x2\xAB\x3\x2\x2\x2\x2\xAD\x3\x2\x2\x2\x2\xAF\x3\x2\x2\x2\x2\xB1"+ - "\x3\x2\x2\x2\x2\xB3\x3\x2\x2\x2\x2\xB5\x3\x2\x2\x2\x2\xB7\x3\x2\x2\x2"+ - "\x2\xB9\x3\x2\x2\x2\x2\xBB\x3\x2\x2\x2\x2\xBD\x3\x2\x2\x2\x2\xBF\x3\x2"+ - "\x2\x2\x2\xC1\x3\x2\x2\x2\x2\xC3\x3\x2\x2\x2\x2\xC5\x3\x2\x2\x2\x2\xC7"+ - "\x3\x2\x2\x2\x2\xC9\x3\x2\x2\x2\x2\xCB\x3\x2\x2\x2\x2\xCD\x3\x2\x2\x2"+ - "\x2\xCF\x3\x2\x2\x2\x2\xD1\x3\x2\x2\x2\x2\xD3\x3\x2\x2\x2\x2\xD5\x3\x2"+ - "\x2\x2\x2\xD7\x3\x2\x2\x2\x2\xD9\x3\x2\x2\x2\x2\xDB\x3\x2\x2\x2\x2\xDD"+ - "\x3\x2\x2\x2\x2\xDF\x3\x2\x2\x2\x2\xE1\x3\x2\x2\x2\x2\xE3\x3\x2\x2\x2"+ - "\x2\xE5\x3\x2\x2\x2\x2\xE7\x3\x2\x2\x2\x2\xE9\x3\x2\x2\x2\x2\xEB\x3\x2"+ - "\x2\x2\x2\xED\x3\x2\x2\x2\x2\xEF\x3\x2\x2\x2\x2\xF1\x3\x2\x2\x2\x2\xF3"+ - "\x3\x2\x2\x2\x2\xF5\x3\x2\x2\x2\x2\xF7\x3\x2\x2\x2\x2\xF9\x3\x2\x2\x2"+ - "\x2\xFB\x3\x2\x2\x2\x2\xFD\x3\x2\x2\x2\x2\xFF\x3\x2\x2\x2\x2\x101\x3\x2"+ - "\x2\x2\x2\x103\x3\x2\x2\x2\x2\x105\x3\x2\x2\x2\x2\x107\x3\x2\x2\x2\x2"+ - "\x109\x3\x2\x2\x2\x2\x10B\x3\x2\x2\x2\x2\x10D\x3\x2\x2\x2\x2\x10F\x3\x2"+ - "\x2\x2\x2\x111\x3\x2\x2\x2\x2\x113\x3\x2\x2\x2\x2\x115\x3\x2\x2\x2\x2"+ - "\x117\x3\x2\x2\x2\x2\x119\x3\x2\x2\x2\x2\x11B\x3\x2\x2\x2\x2\x11D\x3\x2"+ - "\x2\x2\x2\x11F\x3\x2\x2\x2\x2\x121\x3\x2\x2\x2\x2\x123\x3\x2\x2\x2\x2"+ - "\x125\x3\x2\x2\x2\x2\x127\x3\x2\x2\x2\x2\x129\x3\x2\x2\x2\x2\x12B\x3\x2"+ - "\x2\x2\x2\x12D\x3\x2\x2\x2\x2\x12F\x3\x2\x2\x2\x2\x131\x3\x2\x2\x2\x2"+ - "\x133\x3\x2\x2\x2\x2\x135\x3\x2\x2\x2\x2\x137\x3\x2\x2\x2\x2\x139\x3\x2"+ - "\x2\x2\x2\x13B\x3\x2\x2\x2\x2\x13D\x3\x2\x2\x2\x2\x13F\x3\x2\x2\x2\x2"+ - "\x141\x3\x2\x2\x2\x2\x143\x3\x2\x2\x2\x2\x145\x3\x2\x2\x2\x2\x147\x3\x2"+ - "\x2\x2\x2\x149\x3\x2\x2\x2\x2\x14B\x3\x2\x2\x2\x2\x14D\x3\x2\x2\x2\x2"+ - "\x14F\x3\x2\x2\x2\x2\x151\x3\x2\x2\x2\x2\x153\x3\x2\x2\x2\x2\x155\x3\x2"+ - "\x2\x2\x2\x157\x3\x2\x2\x2\x2\x159\x3\x2\x2\x2\x2\x15B\x3\x2\x2\x2\x2"+ - "\x15D\x3\x2\x2\x2\x2\x15F\x3\x2\x2\x2\x2\x161\x3\x2\x2\x2\x2\x163\x3\x2"+ - "\x2\x2\x2\x165\x3\x2\x2\x2\x2\x167\x3\x2\x2\x2\x2\x169\x3\x2\x2\x2\x2"+ - "\x16B\x3\x2\x2\x2\x2\x16D\x3\x2\x2\x2\x2\x16F\x3\x2\x2\x2\x2\x171\x3\x2"+ - "\x2\x2\x2\x173\x3\x2\x2\x2\x2\x175\x3\x2\x2\x2\x2\x177\x3\x2\x2\x2\x2"+ - "\x179\x3\x2\x2\x2\x2\x17B\x3\x2\x2\x2\x2\x17D\x3\x2\x2\x2\x2\x17F\x3\x2"+ - "\x2\x2\x2\x181\x3\x2\x2\x2\x2\x183\x3\x2\x2\x2\x2\x185\x3\x2\x2\x2\x2"+ - "\x187\x3\x2\x2\x2\x2\x189\x3\x2\x2\x2\x2\x18B\x3\x2\x2\x2\x2\x18D\x3\x2"+ - "\x2\x2\x2\x18F\x3\x2\x2\x2\x2\x191\x3\x2\x2\x2\x2\x193\x3\x2\x2\x2\x2"+ - "\x195\x3\x2\x2\x2\x2\x197\x3\x2\x2\x2\x2\x199\x3\x2\x2\x2\x2\x19B\x3\x2"+ - "\x2\x2\x2\x19D\x3\x2\x2\x2\x2\x19F\x3\x2\x2\x2\x2\x1A1\x3\x2\x2\x2\x2"+ - "\x1A3\x3\x2\x2\x2\x2\x1A5\x3\x2\x2\x2\x2\x1A7\x3\x2\x2\x2\x2\x1A9\x3\x2"+ - "\x2\x2\x2\x1AB\x3\x2\x2\x2\x2\x1AD\x3\x2\x2\x2\x2\x1AF\x3\x2\x2\x2\x2"+ - "\x1B1\x3\x2\x2\x2\x2\x1B3\x3\x2\x2\x2\x2\x1B5\x3\x2\x2\x2\x2\x1B7\x3\x2"+ - "\x2\x2\x2\x1B9\x3\x2\x2\x2\x2\x1BB\x3\x2\x2\x2\x2\x1BD\x3\x2\x2\x2\x2"+ - "\x1BF\x3\x2\x2\x2\x2\x1C1\x3\x2\x2\x2\x2\x1C3\x3\x2\x2\x2\x2\x1C5\x3\x2"+ - "\x2\x2\x2\x1C7\x3\x2\x2\x2\x2\x1C9\x3\x2\x2\x2\x2\x1CB\x3\x2\x2\x2\x2"+ - "\x1CD\x3\x2\x2\x2\x2\x1CF\x3\x2\x2\x2\x2\x1D1\x3\x2\x2\x2\x2\x1D3\x3\x2"+ - "\x2\x2\x2\x1D5\x3\x2\x2\x2\x2\x1D7\x3\x2\x2\x2\x2\x1D9\x3\x2\x2\x2\x2"+ - "\x1DB\x3\x2\x2\x2\x2\x1DD\x3\x2\x2\x2\x2\x1DF\x3\x2\x2\x2\x2\x1E1\x3\x2"+ - "\x2\x2\x2\x1E3\x3\x2\x2\x2\x2\x1E5\x3\x2\x2\x2\x2\x1E7\x3\x2\x2\x2\x2"+ - "\x1E9\x3\x2\x2\x2\x2\x1EB\x3\x2\x2\x2\x2\x1ED\x3\x2\x2\x2\x2\x1F1\x3\x2"+ - "\x2\x2\x2\x1FF\x3\x2\x2\x2\x2\x243\x3\x2\x2\x2\x2\x245\x3\x2\x2\x2\x2"+ - "\x247\x3\x2\x2\x2\x2\x249\x3\x2\x2\x2\x2\x24B\x3\x2\x2\x2\x2\x24D\x3\x2"+ - "\x2\x2\x2\x24F\x3\x2\x2\x2\x2\x251\x3\x2\x2\x2\x2\x253\x3\x2\x2\x2\x2"+ - "\x28F\x3\x2\x2\x2\x3\x291\x3\x2\x2\x2\x5\x295\x3\x2\x2\x2\a\x299\x3\x2"+ - "\x2\x2\t\x29F\x3\x2\x2\x2\v\x2A5\x3\x2\x2\x2\r\x2AB\x3\x2\x2\x2\xF\x2B0"+ - "\x3\x2\x2\x2\x11\x2B6\x3\x2\x2\x2\x13\x2BB\x3\x2\x2\x2\x15\x2C0\x3\x2"+ - "\x2\x2\x17\x2C5\x3\x2\x2\x2\x19\x2CC\x3\x2\x2\x2\x1B\x2D1\x3\x2\x2\x2"+ - "\x1D\x2D9\x3\x2\x2\x2\x1F\x2E1\x3\x2\x2\x2!\x2E6\x3\x2\x2\x2#\x2EB\x3"+ - "\x2\x2\x2%\x2F4\x3\x2\x2\x2\'\x2F9\x3\x2\x2\x2)\x2FF\x3\x2\x2\x2+\x305"+ - "\x3\x2\x2\x2-\x30E\x3\x2\x2\x2/\x313\x3\x2\x2\x2\x31\x317\x3\x2\x2\x2"+ - "\x33\x31E\x3\x2\x2\x2\x35\x322\x3\x2\x2\x2\x37\x329\x3\x2\x2\x2\x39\x32D"+ - "\x3\x2\x2\x2;\x332\x3\x2\x2\x2=\x33B\x3\x2\x2\x2?\x343\x3\x2\x2\x2\x41"+ - "\x348\x3\x2\x2\x2\x43\x34E\x3\x2\x2\x2\x45\x353\x3\x2\x2\x2G\x35A\x3\x2"+ - "\x2\x2I\x35F\x3\x2\x2\x2K\x365\x3\x2\x2\x2M\x369\x3\x2\x2\x2O\x370\x3"+ - "\x2\x2\x2Q\x372\x3\x2\x2\x2S\x374\x3\x2\x2\x2U\x376\x3\x2\x2\x2W\x378"+ - "\x3\x2\x2\x2Y\x37A\x3\x2\x2\x2[\x37C\x3\x2\x2\x2]\x37E\x3\x2\x2\x2_\x380"+ - "\x3\x2\x2\x2\x61\x382\x3\x2\x2\x2\x63\x384\x3\x2\x2\x2\x65\x38B\x3\x2"+ - "\x2\x2g\x395\x3\x2\x2\x2i\x39B\x3\x2\x2\x2k\x39F\x3\x2\x2\x2m\x3A9\x3"+ - "\x2\x2\x2o\x3B5\x3\x2\x2\x2q\x3BC\x3\x2\x2\x2s\x3BF\x3\x2\x2\x2u\x3C5"+ - "\x3\x2\x2\x2w\x3CA\x3\x2\x2\x2y\x3D1\x3\x2\x2\x2{\x3D9\x3\x2\x2\x2}\x3DF"+ - "\x3\x2\x2\x2\x7F\x3E5\x3\x2\x2\x2\x81\x3EA\x3\x2\x2\x2\x83\x3EF\x3\x2"+ - "\x2\x2\x85\x3F4\x3\x2\x2\x2\x87\x3FA\x3\x2\x2\x2\x89\x402\x3\x2\x2\x2"+ - "\x8B\x408\x3\x2\x2\x2\x8D\x40E\x3\x2\x2\x2\x8F\x414\x3\x2\x2\x2\x91\x41D"+ - "\x3\x2\x2\x2\x93\x422\x3\x2\x2\x2\x95\x42A\x3\x2\x2\x2\x97\x432\x3\x2"+ - "\x2\x2\x99\x43A\x3\x2\x2\x2\x9B\x442\x3\x2\x2\x2\x9D\x449\x3\x2\x2\x2"+ - "\x9F\x450\x3\x2\x2\x2\xA1\x457\x3\x2\x2\x2\xA3\x45E\x3\x2\x2\x2\xA5\x468"+ - "\x3\x2\x2\x2\xA7\x472\x3\x2\x2\x2\xA9\x479\x3\x2\x2\x2\xAB\x480\x3\x2"+ - "\x2\x2\xAD\x487\x3\x2\x2\x2\xAF\x48E\x3\x2\x2\x2\xB1\x49C\x3\x2\x2\x2"+ - "\xB3\x4A0\x3\x2\x2\x2\xB5\x4A3\x3\x2\x2\x2\xB7\x4AA\x3\x2\x2\x2\xB9\x4AF"+ - "\x3\x2\x2\x2\xBB\x4B4\x3\x2\x2\x2\xBD\x4BB\x3\x2\x2\x2\xBF\x4C1\x3\x2"+ - "\x2\x2\xC1\x4CA\x3\x2\x2\x2\xC3\x4D7\x3\x2\x2\x2\xC5\x4DE\x3\x2\x2\x2"+ - "\xC7\x4EB\x3\x2\x2\x2\xC9\x4F6\x3\x2\x2\x2\xCB\x4FE\x3\x2\x2\x2\xCD\x507"+ - "\x3\x2\x2\x2\xCF\x510\x3\x2\x2\x2\xD1\x514\x3\x2\x2\x2\xD3\x519\x3\x2"+ - "\x2\x2\xD5\x51D\x3\x2\x2\x2\xD7\x523\x3\x2\x2\x2\xD9\x529\x3\x2\x2\x2"+ - "\xDB\x52F\x3\x2\x2\x2\xDD\x537\x3\x2\x2\x2\xDF\x540\x3\x2\x2\x2\xE1\x54E"+ - "\x3\x2\x2\x2\xE3\x55C\x3\x2\x2\x2\xE5\x565\x3\x2\x2\x2\xE7\x56B\x3\x2"+ - "\x2\x2\xE9\x574\x3\x2\x2\x2\xEB\x57B\x3\x2\x2\x2\xED\x57F\x3\x2\x2\x2"+ - "\xEF\x588\x3\x2\x2\x2\xF1\x58C\x3\x2\x2\x2\xF3\x593\x3\x2\x2\x2\xF5\x599"+ - "\x3\x2\x2\x2\xF7\x59E\x3\x2\x2\x2\xF9\x5A1\x3\x2\x2\x2\xFB\x5A5\x3\x2"+ - "\x2\x2\xFD\x5B0\x3\x2\x2\x2\xFF\x5B3\x3\x2\x2\x2\x101\x5B9\x3\x2\x2\x2"+ - "\x103\x5BC\x3\x2\x2\x2\x105\x5C4\x3\x2\x2\x2\x107\x5C9\x3\x2\x2\x2\x109"+ - "\x5CE\x3\x2\x2\x2\x10B\x5D3\x3\x2\x2\x2\x10D\x5D8\x3\x2\x2\x2\x10F\x5DD"+ - "\x3\x2\x2\x2\x111\x5E1\x3\x2\x2\x2\x113\x5E5\x3\x2\x2\x2\x115\x5EA\x3"+ - "\x2\x2\x2\x117\x5F5\x3\x2\x2\x2\x119\x5FF\x3\x2\x2\x2\x11B\x60A\x3\x2"+ - "\x2\x2\x11D\x61A\x3\x2\x2\x2\x11F\x61F\x3\x2\x2\x2\x121\x622\x3\x2\x2"+ - "\x2\x123\x626\x3\x2\x2\x2\x125\x62C\x3\x2\x2\x2\x127\x630\x3\x2\x2\x2"+ - "\x129\x635\x3\x2\x2\x2\x12B\x63A\x3\x2\x2\x2\x12D\x63E\x3\x2\x2\x2\x12F"+ - "\x642\x3\x2\x2\x2\x131\x64A\x3\x2\x2\x2\x133\x64F\x3\x2\x2\x2\x135\x652"+ - "\x3\x2\x2\x2\x137\x65B\x3\x2\x2\x2\x139\x66A\x3\x2\x2\x2\x13B\x66F\x3"+ - "\x2\x2\x2\x13D\x678\x3\x2\x2\x2\x13F\x684\x3\x2\x2\x2\x141\x694\x3\x2"+ - "\x2\x2\x143\x6A3\x3\x2\x2\x2\x145\x6B9\x3\x2\x2\x2\x147\x6BC\x3\x2\x2"+ - "\x2\x149\x6C3\x3\x2\x2\x2\x14B\x6CE\x3\x2\x2\x2\x14D\x6D7\x3\x2\x2\x2"+ - "\x14F\x6DD\x3\x2\x2\x2\x151\x6E5\x3\x2\x2\x2\x153\x6F2\x3\x2\x2\x2\x155"+ - "\x6FF\x3\x2\x2\x2\x157\x70C\x3\x2\x2\x2\x159\x714\x3\x2\x2\x2\x15B\x71B"+ - "\x3\x2\x2\x2\x15D\x71F\x3\x2\x2\x2\x15F\x726\x3\x2\x2\x2\x161\x730\x3"+ - "\x2\x2\x2\x163\x73B\x3\x2\x2\x2\x165\x740\x3\x2\x2\x2\x167\x74B\x3\x2"+ - "\x2\x2\x169\x751\x3\x2\x2\x2\x16B\x755\x3\x2\x2\x2\x16D\x75B\x3\x2\x2"+ - "\x2\x16F\x762\x3\x2\x2\x2\x171\x769\x3\x2\x2\x2\x173\x76F\x3\x2\x2\x2"+ - "\x175\x774\x3\x2\x2\x2\x177\x780\x3\x2\x2\x2\x179\x78C\x3\x2\x2\x2\x17B"+ - "\x791\x3\x2\x2\x2\x17D\x798\x3\x2\x2\x2\x17F\x7A1\x3\x2\x2\x2\x181\x7A5"+ - "\x3\x2\x2\x2\x183\x7AD\x3\x2\x2\x2\x185\x7B4\x3\x2\x2\x2\x187\x7BB\x3"+ - "\x2\x2\x2\x189\x7BF\x3\x2\x2\x2\x18B\x7C6\x3\x2\x2\x2\x18D\x7CB\x3\x2"+ - "\x2\x2\x18F\x7D0\x3\x2\x2\x2\x191\x7D7\x3\x2\x2\x2\x193\x7DB\x3\x2\x2"+ - "\x2\x195\x7DF\x3\x2\x2\x2\x197\x7E4\x3\x2\x2\x2\x199\x7E9\x3\x2\x2\x2"+ - "\x19B\x7EE\x3\x2\x2\x2\x19D\x7F1\x3\x2\x2\x2\x19F\x7F6\x3\x2\x2\x2\x1A1"+ - "\x7FB\x3\x2\x2\x2\x1A3\x802\x3\x2\x2\x2\x1A5\x809\x3\x2\x2\x2\x1A7\x810"+ - "\x3\x2\x2\x2\x1A9\x816\x3\x2\x2\x2\x1AB\x81E\x3\x2\x2\x2\x1AD\x826\x3"+ - "\x2\x2\x2\x1AF\x82B\x3\x2\x2\x2\x1B1\x831\x3\x2\x2\x2\x1B3\x837\x3\x2"+ - "\x2\x2\x1B5\x83C\x3\x2\x2\x2\x1B7\x847\x3\x2\x2\x2\x1B9\x84D\x3\x2\x2"+ - "\x2\x1BB\x851\x3\x2\x2\x2\x1BD\x854\x3\x2\x2\x2\x1BF\x856\x3\x2\x2\x2"+ - "\x1C1\x858\x3\x2\x2\x2\x1C3\x85E\x3\x2\x2\x2\x1C5\x860\x3\x2\x2\x2\x1C7"+ - "\x866\x3\x2\x2\x2\x1C9\x868\x3\x2\x2\x2\x1CB\x86A\x3\x2\x2\x2\x1CD\x86C"+ - "\x3\x2\x2\x2\x1CF\x86E\x3\x2\x2\x2\x1D1\x874\x3\x2\x2\x2\x1D3\x876\x3"+ - "\x2\x2\x2\x1D5\x878\x3\x2\x2\x2\x1D7\x87A\x3\x2\x2\x2\x1D9\x87F\x3\x2"+ - "\x2\x2\x1DB\x888\x3\x2\x2\x2\x1DD\x892\x3\x2\x2\x2\x1DF\x8A0\x3\x2\x2"+ - "\x2\x1E1\x8AC\x3\x2\x2\x2\x1E3\x8BC\x3\x2\x2\x2\x1E5\x8BE\x3\x2\x2\x2"+ - "\x1E7\x8C0\x3\x2\x2\x2\x1E9\x8CB\x3\x2\x2\x2\x1EB\x8D6\x3\x2\x2\x2\x1ED"+ - "\x8E8\x3\x2\x2\x2\x1EF\x8FA\x3\x2\x2\x2\x1F1\x8FC\x3\x2\x2\x2\x1F3\x900"+ - "\x3\x2\x2\x2\x1F5\x902\x3\x2\x2\x2\x1F7\x904\x3\x2\x2\x2\x1F9\x90D\x3"+ - "\x2\x2\x2\x1FB\x90F\x3\x2\x2\x2\x1FD\x912\x3\x2\x2\x2\x1FF\x916\x3\x2"+ - "\x2\x2\x201\x922\x3\x2\x2\x2\x203\x924\x3\x2\x2\x2\x205\x932\x3\x2\x2"+ - "\x2\x207\x935\x3\x2\x2\x2\x209\x93F\x3\x2\x2\x2\x20B\x94D\x3\x2\x2\x2"+ - "\x20D\x95A\x3\x2\x2\x2\x20F\x979\x3\x2\x2\x2\x211\x97C\x3\x2\x2\x2\x213"+ - "\x983\x3\x2\x2\x2\x215\x98F\x3\x2\x2\x2\x217\x997\x3\x2\x2\x2\x219\x9A0"+ - "\x3\x2\x2\x2\x21B\x9A6\x3\x2\x2\x2\x21D\x9AC\x3\x2\x2\x2\x21F\x9B0\x3"+ - "\x2\x2\x2\x221\x9B5\x3\x2\x2\x2\x223\x9BA\x3\x2\x2\x2\x225\x9C1\x3\x2"+ - "\x2\x2\x227\x9CB\x3\x2\x2\x2\x229\x9D3\x3\x2\x2\x2\x22B\x9DC\x3\x2\x2"+ - "\x2\x22D\x9E5\x3\x2\x2\x2\x22F\x9E9\x3\x2\x2\x2\x231\x9ED\x3\x2\x2\x2"+ - "\x233\x9F1\x3\x2\x2\x2\x235\x9F5\x3\x2\x2\x2\x237\x9F9\x3\x2\x2\x2\x239"+ - "\x9FD\x3\x2\x2\x2\x23B\xA01\x3\x2\x2\x2\x23D\xA05\x3\x2\x2\x2\x23F\xA09"+ - "\x3\x2\x2\x2\x241\xA0D\x3\x2\x2\x2\x243\xA14\x3\x2\x2\x2\x245\xA17\x3"+ - "\x2\x2\x2\x247\xA22\x3\x2\x2\x2\x249\xA2B\x3\x2\x2\x2\x24B\xA2D\x3\x2"+ - "\x2\x2\x24D\xA2F\x3\x2\x2\x2\x24F\xA40\x3\x2\x2\x2\x251\xA45\x3\x2\x2"+ - "\x2\x253\xA54\x3\x2\x2\x2\x255\xA74\x3\x2\x2\x2\x257\xA76\x3\x2\x2\x2"+ - "\x259\xA78\x3\x2\x2\x2\x25B\xA7A\x3\x2\x2\x2\x25D\xA7C\x3\x2\x2\x2\x25F"+ - "\xA7E\x3\x2\x2\x2\x261\xA80\x3\x2\x2\x2\x263\xA82\x3\x2\x2\x2\x265\xA84"+ - "\x3\x2\x2\x2\x267\xA86\x3\x2\x2\x2\x269\xA88\x3\x2\x2\x2\x26B\xA8A\x3"+ - "\x2\x2\x2\x26D\xA8C\x3\x2\x2\x2\x26F\xA8E\x3\x2\x2\x2\x271\xA90\x3\x2"+ - "\x2\x2\x273\xA92\x3\x2\x2\x2\x275\xA94\x3\x2\x2\x2\x277\xA96\x3\x2\x2"+ - "\x2\x279\xA98\x3\x2\x2\x2\x27B\xA9A\x3\x2\x2\x2\x27D\xA9C\x3\x2\x2\x2"+ - "\x27F\xA9E\x3\x2\x2\x2\x281\xAA0\x3\x2\x2\x2\x283\xAA2\x3\x2\x2\x2\x285"+ - "\xAA4\x3\x2\x2\x2\x287\xAA6\x3\x2\x2\x2\x289\xAA8\x3\x2\x2\x2\x28B\xAAA"+ - "\x3\x2\x2\x2\x28D\xAAC\x3\x2\x2\x2\x28F\xAAE\x3\x2\x2\x2\x291\x292\x5"+ - "\x25B\x12E\x2\x292\x293\x5\x25D\x12F\x2\x293\x294\x5\x27F\x140\x2\x294"+ - "\x4\x3\x2\x2\x2\x295\x296\x5\x25B\x12E\x2\x296\x297\x5\x275\x13B\x2\x297"+ - "\x298\x5\x28B\x146\x2\x298\x6\x3\x2\x2\x2\x299\x29A\x5\x25B\x12E\x2\x29A"+ - "\x29B\x5\x27D\x13F\x2\x29B\x29C\x5\x27D\x13F\x2\x29C\x29D\x5\x25B\x12E"+ - "\x2\x29D\x29E\x5\x28B\x146\x2\x29E\b\x3\x2\x2\x2\x29F\x2A0\x5\x25F\x130"+ - "\x2\x2A0\x2A1\x5\x25D\x12F\x2\x2A1\x2A2\x5\x277\x13C\x2\x2A2\x2A3\x5\x277"+ - "\x13C\x2\x2A3\x2A4\x5\x271\x139\x2\x2A4\n\x3\x2\x2\x2\x2A5\x2A6\x5\x25F"+ - "\x130\x2\x2A6\x2A7\x5\x25D\x12F\x2\x2A7\x2A8\x5\x28B\x146\x2\x2A8\x2A9"+ - "\x5\x281\x141\x2\x2A9\x2AA\x5\x263\x132\x2\x2AA\f\x3\x2\x2\x2\x2AB\x2AC"+ - "\x5\x25F\x130\x2\x2AC\x2AD\x5\x25F\x130\x2\x2AD\x2AE\x5\x283\x142\x2\x2AE"+ - "\x2AF\x5\x27D\x13F\x2\x2AF\xE\x3\x2\x2\x2\x2B0\x2B1\x5\x25F\x130\x2\x2B1"+ - "\x2B2\x5\x261\x131\x2\x2B2\x2B3\x5\x25B\x12E\x2\x2B3\x2B4\x5\x281\x141"+ - "\x2\x2B4\x2B5\x5\x263\x132\x2\x2B5\x10\x3\x2\x2\x2\x2B6\x2B7\x5\x25F\x130"+ - "\x2\x2B7\x2B8\x5\x261\x131\x2\x2B8\x2B9\x5\x25D\x12F\x2\x2B9\x2BA\x5\x271"+ - "\x139\x2\x2BA\x12\x3\x2\x2\x2\x2BB\x2BC\x5\x25F\x130\x2\x2BC\x2BD\x5\x261"+ - "\x131\x2\x2BD\x2BE\x5\x263\x132\x2\x2BE\x2BF\x5\x25F\x130\x2\x2BF\x14"+ - "\x3\x2\x2\x2\x2C0\x2C1\x5\x25F\x130\x2\x2C1\x2C2\x5\x26B\x136\x2\x2C2"+ - "\x2C3\x5\x275\x13B\x2\x2C3\x2C4\x5\x281\x141\x2\x2C4\x16\x3\x2\x2\x2\x2C5"+ - "\x2C6\x5\x25F\x130\x2\x2C6\x2C7\x5\x26B\x136\x2\x2C7\x2C8\x5\x27D\x13F"+ - "\x2\x2C8\x2C9\x5\x25F\x130\x2\x2C9\x2CA\x5\x271\x139\x2\x2CA\x2CB\x5\x263"+ - "\x132\x2\x2CB\x18\x3\x2\x2\x2\x2CC\x2CD\x5\x25F\x130\x2\x2CD\x2CE\x5\x271"+ - "\x139\x2\x2CE\x2CF\x5\x275\x13B\x2\x2CF\x2D0\x5\x267\x134\x2\x2D0\x1A"+ - "\x3\x2\x2\x2\x2D1\x2D2\x5\x25F\x130\x2\x2D2\x2D3\x5\x271\x139\x2\x2D3"+ - "\x2D4\x5\x275\x13B\x2\x2D4\x2D5\x5\x267\x134\x2\x2D5\x2D6\x5\x271\x139"+ - "\x2\x2D6\x2D7\x5\x275\x13B\x2\x2D7\x2D8\x5\x267\x134\x2\x2D8\x1C\x3\x2"+ - "\x2\x2\x2D9\x2DA\x5\x25F\x130\x2\x2DA\x2DB\x5\x271\x139\x2\x2DB\x2DC\x5"+ - "\x275\x13B\x2\x2DC\x2DD\x5\x267\x134\x2\x2DD\x2DE\x5\x279\x13D\x2\x2DE"+ - "\x2DF\x5\x281\x141\x2\x2DF\x2E0\x5\x27D\x13F\x2\x2E0\x1E\x3\x2\x2\x2\x2E1"+ - "\x2E2\x5\x25F\x130\x2\x2E2\x2E3\x5\x27F\x140\x2\x2E3\x2E4\x5\x275\x13B"+ - "\x2\x2E4\x2E5\x5\x267\x134\x2\x2E5 \x3\x2\x2\x2\x2E6\x2E7\x5\x25F\x130"+ - "\x2\x2E7\x2E8\x5\x27F\x140\x2\x2E8\x2E9\x5\x281\x141\x2\x2E9\x2EA\x5\x27D"+ - "\x13F\x2\x2EA\"\x3\x2\x2\x2\x2EB\x2EC\x5\x25F\x130\x2\x2EC\x2ED\x5\x283"+ - "\x142\x2\x2ED\x2EE\x5\x27D\x13F\x2\x2EE\x2EF\x5\x27D\x13F\x2\x2EF\x2F0"+ - "\x5\x263\x132\x2\x2F0\x2F1\x5\x275\x13B\x2\x2F1\x2F2\x5\x25F\x130\x2\x2F2"+ - "\x2F3\x5\x28B\x146\x2\x2F3$\x3\x2\x2\x2\x2F4\x2F5\x5\x25F\x130\x2\x2F5"+ - "\x2F6\x5\x285\x143\x2\x2F6\x2F7\x5\x25B\x12E\x2\x2F7\x2F8\x5\x27D\x13F"+ - "\x2\x2F8&\x3\x2\x2\x2\x2F9\x2FA\x5\x25F\x130\x2\x2FA\x2FB\x5\x285\x143"+ - "\x2\x2FB\x2FC\x5\x263\x132\x2\x2FC\x2FD\x5\x27D\x13F\x2\x2FD\x2FE\x5\x27D"+ - "\x13F\x2\x2FE(\x3\x2\x2\x2\x2FF\x300\x5\x261\x131\x2\x300\x301\x5\x263"+ - "\x132\x2\x301\x302\x5\x25D\x12F\x2\x302\x303\x5\x283\x142\x2\x303\x304"+ - "\x5\x267\x134\x2\x304*\x3\x2\x2\x2\x305\x306\x5\x261\x131\x2\x306\x307"+ - "\x5\x277\x13C\x2\x307\x308\x5\x263\x132\x2\x308\x309\x5\x285\x143\x2\x309"+ - "\x30A\x5\x263\x132\x2\x30A\x30B\x5\x275\x13B\x2\x30B\x30C\x5\x281\x141"+ - "\x2\x30C\x30D\x5\x27F\x140\x2\x30D,\x3\x2\x2\x2\x30E\x30F\x5\x263\x132"+ - "\x2\x30F\x310\x5\x289\x145\x2\x310\x311\x5\x26B\x136\x2\x311\x312\x5\x281"+ - "\x141\x2\x312.\x3\x2\x2\x2\x313\x314\x5\x265\x133\x2\x314\x315\x5\x26B"+ - "\x136\x2\x315\x316\x5\x289\x145\x2\x316\x30\x3\x2\x2\x2\x317\x318\x5\x26B"+ - "\x136\x2\x318\x319\x5\x275\x13B\x2\x319\x31A\x5\x279\x13D\x2\x31A\x31B"+ - "\x5\x283\x142\x2\x31B\x31C\x5\x281\x141\x2\x31C\x31D\x5\x25D\x12F\x2\x31D"+ - "\x32\x3\x2\x2\x2\x31E\x31F\x5\x26B\x136\x2\x31F\x320\x5\x275\x13B\x2\x320"+ - "\x321\x5\x281\x141\x2\x321\x34\x3\x2\x2\x2\x322\x323\x5\x271\x139\x2\x323"+ - "\x324\x5\x25D\x12F\x2\x324\x325\x5\x277\x13C\x2\x325\x326\x5\x283\x142"+ - "\x2\x326\x327\x5\x275\x13B\x2\x327\x328\x5\x261\x131\x2\x328\x36\x3\x2"+ - "\x2\x2\x329\x32A\x5\x271\x139\x2\x32A\x32B\x5\x263\x132\x2\x32B\x32C\x5"+ - "\x275\x13B\x2\x32C\x38\x3\x2\x2\x2\x32D\x32E\x5\x271\x139\x2\x32E\x32F"+ - "\x5\x263\x132\x2\x32F\x330\x5\x275\x13B\x2\x330\x331\x5\x25D\x12F\x2\x331"+ - ":\x3\x2\x2\x2\x332\x333\x5\x271\x139\x2\x333\x334\x5\x277\x13C\x2\x334"+ - "\x335\x5\x275\x13B\x2\x335\x336\x5\x267\x134\x2\x336\x337\x5\x271\x139"+ - "\x2\x337\x338\x5\x277\x13C\x2\x338\x339\x5\x275\x13B\x2\x339\x33A\x5\x267"+ - "\x134\x2\x33A<\x3\x2\x2\x2\x33B\x33C\x5\x271\x139\x2\x33C\x33D\x5\x277"+ - "\x13C\x2\x33D\x33E\x5\x275\x13B\x2\x33E\x33F\x5\x267\x134\x2\x33F\x340"+ - "\x5\x279\x13D\x2\x340\x341\x5\x281\x141\x2\x341\x342\x5\x27D\x13F\x2\x342"+ - ">\x3\x2\x2\x2\x343\x344\x5\x273\x13A\x2\x344\x345\x5\x26B\x136\x2\x345"+ - "\x346\x5\x261\x131\x2\x346\x347\x5\x25D\x12F\x2\x347@\x3\x2\x2\x2\x348"+ - "\x349\x5\x273\x13A\x2\x349\x34A\x5\x26B\x136\x2\x34A\x34B\x5\x261\x131"+ - "\x2\x34B\x34C\x5\x25D\x12F\x2\x34C\x34D\a&\x2\x2\x34D\x42\x3\x2\x2\x2"+ - "\x34E\x34F\x5\x273\x13A\x2\x34F\x350\x5\x26B\x136\x2\x350\x351\x5\x261"+ - "\x131\x2\x351\x352\a&\x2\x2\x352\x44\x3\x2\x2\x2\x353\x354\x5\x277\x13C"+ - "\x2\x354\x355\x5\x279\x13D\x2\x355\x356\x5\x281\x141\x2\x356\x357\x5\x26B"+ - "\x136\x2\x357\x358\x5\x277\x13C\x2\x358\x359\x5\x275\x13B\x2\x359\x46"+ - "\x3\x2\x2\x2\x35A\x35B\x5\x279\x13D\x2\x35B\x35C\x5\x27F\x140\x2\x35C"+ - "\x35D\x5\x263\x132\x2\x35D\x35E\x5\x281\x141\x2\x35EH\x3\x2\x2\x2\x35F"+ - "\x360\x5\x27F\x140\x2\x360\x361\x5\x25F\x130\x2\x361\x362\x5\x25B\x12E"+ - "\x2\x362\x363\x5\x271\x139\x2\x363\x364\x5\x263\x132\x2\x364J\x3\x2\x2"+ - "\x2\x365\x366\x5\x27F\x140\x2\x366\x367\x5\x267\x134\x2\x367\x368\x5\x275"+ - "\x13B\x2\x368L\x3\x2\x2\x2\x369\x36A\x5\x283\x142\x2\x36A\x36B\x5\x25D"+ - "\x12F\x2\x36B\x36C\x5\x277\x13C\x2\x36C\x36D\x5\x283\x142\x2\x36D\x36E"+ - "\x5\x275\x13B\x2\x36E\x36F\x5\x261\x131\x2\x36FN\x3\x2\x2\x2\x370\x371"+ - "\a.\x2\x2\x371P\x3\x2\x2\x2\x372\x373\a<\x2\x2\x373R\x3\x2\x2\x2\x374"+ - "\x375\a=\x2\x2\x375T\x3\x2\x2\x2\x376\x377\a#\x2\x2\x377V\x3\x2\x2\x2"+ - "\x378\x379\a\x30\x2\x2\x379X\x3\x2\x2\x2\x37A\x37B\a%\x2\x2\x37BZ\x3\x2"+ - "\x2\x2\x37C\x37D\a\x42\x2\x2\x37D\\\x3\x2\x2\x2\x37E\x37F\a\'\x2\x2\x37F"+ - "^\x3\x2\x2\x2\x380\x381\a&\x2\x2\x381`\x3\x2\x2\x2\x382\x383\a(\x2\x2"+ - "\x383\x62\x3\x2\x2\x2\x384\x385\x5\x25B\x12E\x2\x385\x386\x5\x25F\x130"+ + "\n\x123\f\x123\xE\x123\xA21\v\x123\x3\x124\x3\x124\x3\x124\x5\x124\xA26"+ + "\n\x124\x3\x124\x3\x124\a\x124\xA2A\n\x124\f\x124\xE\x124\xA2D\v\x124"+ + "\x3\x125\x3\x125\x3\x126\x3\x126\x3\x127\x3\x127\x3\x128\x3\x128\a\x128"+ + "\xA37\n\x128\f\x128\xE\x128\xA3A\v\x128\x3\x128\x3\x128\x6\x128\xA3E\n"+ + "\x128\r\x128\xE\x128\xA3F\x3\x128\x3\x128\x5\x128\xA44\n\x128\x3\x129"+ + "\a\x129\xA47\n\x129\f\x129\xE\x129\xA4A\v\x129\x3\x129\x3\x129\a\x129"+ + "\xA4E\n\x129\f\x129\xE\x129\xA51\v\x129\x3\x129\x5\x129\xA54\n\x129\x3"+ + "\x129\x3\x129\x3\x12A\x3\x12A\x6\x12A\xA5A\n\x12A\r\x12A\xE\x12A\xA5B"+ + "\x3\x12A\x3\x12A\x6\x12A\xA60\n\x12A\r\x12A\xE\x12A\xA61\x3\x12A\x3\x12A"+ + "\x6\x12A\xA66\n\x12A\r\x12A\xE\x12A\xA67\x3\x12A\x3\x12A\x6\x12A\xA6C"+ + "\n\x12A\r\x12A\xE\x12A\xA6D\x3\x12A\x3\x12A\x6\x12A\xA72\n\x12A\r\x12A"+ + "\xE\x12A\xA73\x3\x12A\x3\x12A\x3\x12B\x3\x12B\x3\x12C\x3\x12C\x3\x12D"+ + "\x3\x12D\x3\x12E\x3\x12E\x3\x12F\x3\x12F\x3\x130\x3\x130\x3\x131\x3\x131"+ + "\x3\x132\x3\x132\x3\x133\x3\x133\x3\x134\x3\x134\x3\x135\x3\x135\x3\x136"+ + "\x3\x136\x3\x137\x3\x137\x3\x138\x3\x138\x3\x139\x3\x139\x3\x13A\x3\x13A"+ + "\x3\x13B\x3\x13B\x3\x13C\x3\x13C\x3\x13D\x3\x13D\x3\x13E\x3\x13E\x3\x13F"+ + "\x3\x13F\x3\x140\x3\x140\x3\x141\x3\x141\x3\x142\x3\x142\x3\x143\x3\x143"+ + "\x3\x144\x3\x144\x3\x145\x3\x145\x3\x146\x3\x146\x3\x147\x3\x147\x3\x148"+ + "\x3\x148\x2\x2\x2\x149\x3\x2\x3\x5\x2\x4\a\x2\x5\t\x2\x6\v\x2\a\r\x2\b"+ + "\xF\x2\t\x11\x2\n\x13\x2\v\x15\x2\f\x17\x2\r\x19\x2\xE\x1B\x2\xF\x1D\x2"+ + "\x10\x1F\x2\x11!\x2\x12#\x2\x13%\x2\x14\'\x2\x15)\x2\x16+\x2\x17-\x2\x18"+ + "/\x2\x19\x31\x2\x1A\x33\x2\x1B\x35\x2\x1C\x37\x2\x1D\x39\x2\x1E;\x2\x1F"+ + "=\x2 ?\x2!\x41\x2\"\x43\x2#\x45\x2$G\x2%I\x2&K\x2\'M\x2(O\x2)Q\x2*S\x2"+ + "+U\x2,W\x2-Y\x2.[\x2/]\x2\x30_\x2\x31\x61\x2\x32\x63\x2\x33\x65\x2\x34"+ + "g\x2\x35i\x2\x36k\x2\x37m\x2\x38o\x2\x39q\x2:s\x2;u\x2{\x2"+ + "?}\x2@\x7F\x2\x41\x81\x2\x42\x83\x2\x43\x85\x2\x44\x87\x2\x45\x89\x2\x46"+ + "\x8B\x2G\x8D\x2H\x8F\x2I\x91\x2J\x93\x2K\x95\x2L\x97\x2M\x99\x2N\x9B\x2"+ + "O\x9D\x2P\x9F\x2Q\xA1\x2R\xA3\x2S\xA5\x2T\xA7\x2U\xA9\x2V\xAB\x2W\xAD"+ + "\x2X\xAF\x2Y\xB1\x2Z\xB3\x2[\xB5\x2\\\xB7\x2]\xB9\x2^\xBB\x2_\xBD\x2`"+ + "\xBF\x2\x61\xC1\x2\x62\xC3\x2\x63\xC5\x2\x64\xC7\x2\x65\xC9\x2\x66\xCB"+ + "\x2g\xCD\x2h\xCF\x2i\xD1\x2j\xD3\x2k\xD5\x2l\xD7\x2m\xD9\x2n\xDB\x2o\xDD"+ + "\x2p\xDF\x2q\xE1\x2r\xE3\x2s\xE5\x2t\xE7\x2u\xE9\x2v\xEB\x2w\xED\x2x\xEF"+ + "\x2y\xF1\x2z\xF3\x2{\xF5\x2|\xF7\x2}\xF9\x2~\xFB\x2\x7F\xFD\x2\x80\xFF"+ + "\x2\x81\x101\x2\x82\x103\x2\x83\x105\x2\x84\x107\x2\x85\x109\x2\x86\x10B"+ + "\x2\x87\x10D\x2\x88\x10F\x2\x89\x111\x2\x8A\x113\x2\x8B\x115\x2\x8C\x117"+ + "\x2\x8D\x119\x2\x8E\x11B\x2\x8F\x11D\x2\x90\x11F\x2\x91\x121\x2\x92\x123"+ + "\x2\x93\x125\x2\x94\x127\x2\x95\x129\x2\x96\x12B\x2\x97\x12D\x2\x98\x12F"+ + "\x2\x99\x131\x2\x9A\x133\x2\x9B\x135\x2\x9C\x137\x2\x9D\x139\x2\x9E\x13B"+ + "\x2\x9F\x13D\x2\xA0\x13F\x2\xA1\x141\x2\xA2\x143\x2\xA3\x145\x2\xA4\x147"+ + "\x2\xA5\x149\x2\xA6\x14B\x2\xA7\x14D\x2\xA8\x14F\x2\xA9\x151\x2\xAA\x153"+ + "\x2\xAB\x155\x2\xAC\x157\x2\xAD\x159\x2\xAE\x15B\x2\xAF\x15D\x2\xB0\x15F"+ + "\x2\xB1\x161\x2\xB2\x163\x2\xB3\x165\x2\xB4\x167\x2\xB5\x169\x2\xB6\x16B"+ + "\x2\xB7\x16D\x2\xB8\x16F\x2\xB9\x171\x2\xBA\x173\x2\xBB\x175\x2\xBC\x177"+ + "\x2\xBD\x179\x2\xBE\x17B\x2\xBF\x17D\x2\xC0\x17F\x2\xC1\x181\x2\xC2\x183"+ + "\x2\xC3\x185\x2\xC4\x187\x2\xC5\x189\x2\xC6\x18B\x2\xC7\x18D\x2\xC8\x18F"+ + "\x2\xC9\x191\x2\xCA\x193\x2\xCB\x195\x2\xCC\x197\x2\xCD\x199\x2\xCE\x19B"+ + "\x2\xCF\x19D\x2\xD0\x19F\x2\xD1\x1A1\x2\xD2\x1A3\x2\xD3\x1A5\x2\xD4\x1A7"+ + "\x2\xD5\x1A9\x2\xD6\x1AB\x2\xD7\x1AD\x2\xD8\x1AF\x2\xD9\x1B1\x2\xDA\x1B3"+ + "\x2\xDB\x1B5\x2\xDC\x1B7\x2\xDD\x1B9\x2\xDE\x1BB\x2\xDF\x1BD\x2\xE0\x1BF"+ + "\x2\xE1\x1C1\x2\xE2\x1C3\x2\xE3\x1C5\x2\xE4\x1C7\x2\xE5\x1C9\x2\xE6\x1CB"+ + "\x2\xE7\x1CD\x2\xE8\x1CF\x2\xE9\x1D1\x2\xEA\x1D3\x2\xEB\x1D5\x2\xEC\x1D7"+ + "\x2\xED\x1D9\x2\xEE\x1DB\x2\xEF\x1DD\x2\xF0\x1DF\x2\xF1\x1E1\x2\xF2\x1E3"+ + "\x2\xF3\x1E5\x2\xF4\x1E7\x2\xF5\x1E9\x2\xF6\x1EB\x2\xF7\x1ED\x2\xF8\x1EF"+ + "\x2\x2\x1F1\x2\xF9\x1F3\x2\x2\x1F5\x2\x2\x1F7\x2\x2\x1F9\x2\x2\x1FB\x2"+ + "\x2\x1FD\x2\x2\x1FF\x2\xFA\x201\x2\x2\x203\x2\x2\x205\x2\x2\x207\x2\x2"+ + "\x209\x2\x2\x20B\x2\x2\x20D\x2\x2\x20F\x2\x2\x211\x2\x2\x213\x2\x2\x215"+ + "\x2\x2\x217\x2\x2\x219\x2\x2\x21B\x2\x2\x21D\x2\x2\x21F\x2\x2\x221\x2"+ + "\x2\x223\x2\x2\x225\x2\x2\x227\x2\x2\x229\x2\x2\x22B\x2\x2\x22D\x2\x2"+ + "\x22F\x2\x2\x231\x2\x2\x233\x2\x2\x235\x2\x2\x237\x2\x2\x239\x2\x2\x23B"+ + "\x2\x2\x23D\x2\x2\x23F\x2\x2\x241\x2\x2\x243\x2\xFB\x245\x2\xFC\x247\x2"+ + "\xFD\x249\x2\xFE\x24B\x2\xFF\x24D\x2\x100\x24F\x2\x101\x251\x2\x102\x253"+ + "\x2\x103\x255\x2\x2\x257\x2\x2\x259\x2\x2\x25B\x2\x2\x25D\x2\x2\x25F\x2"+ + "\x2\x261\x2\x2\x263\x2\x2\x265\x2\x2\x267\x2\x2\x269\x2\x2\x26B\x2\x2"+ + "\x26D\x2\x2\x26F\x2\x2\x271\x2\x2\x273\x2\x2\x275\x2\x2\x277\x2\x2\x279"+ + "\x2\x2\x27B\x2\x2\x27D\x2\x2\x27F\x2\x2\x281\x2\x2\x283\x2\x2\x285\x2"+ + "\x2\x287\x2\x2\x289\x2\x2\x28B\x2\x2\x28D\x2\x2\x28F\x2\x104\x3\x2.\x5"+ + "\x2\f\f\xF\xF$$\x3\x2\x32:\x4\x2\x32;\x43H\x4\x2\'(``\x5\x2##%%\x42\x42"+ + "\x4\x2\x46G\x66g\x4\x2--//\x4\x2./\x31\x31\x4\x2\x30\x30<<\x5\x2\f\f\xF"+ + "\xF\x202A\x202B\x6\x2\f\f\xF\xF\x42\x42\x202A\x202B\x4\x2\v\v\"\"\t\x2"+ + "\v\f\xF\xF\"=??\x42\x42]`~~\v\x2\v\f\xF\xF\".\x30\x30<=??\x42\x42]`~~"+ + "\x6\x2\f\f\xF\xF##^_\f\x2\x43\\\x61\x61\x63|\xA6\xA6\xB8\xB8\xBE\xBE\xC5"+ + "\xC5\x155\x155\x2015\x2015\x2020\x2020\x3\x2\x32;\r\x2\x32;\x43\\\x61"+ + "\x61\x63|\xA6\xA6\xB8\xB8\xBE\xBE\xC5\xC5\x155\x155\x2015\x2015\x2020"+ + "\x2020\x4\x2\x43\x43\x63\x63\x4\x2\x44\x44\x64\x64\x4\x2\x45\x45\x65\x65"+ + "\x4\x2\x46\x46\x66\x66\x4\x2GGgg\x4\x2HHhh\x4\x2IIii\x4\x2JJjj\x4\x2K"+ + "Kkk\x4\x2LLll\x4\x2MMmm\x4\x2NNnn\x4\x2OOoo\x4\x2PPpp\x4\x2QQqq\x4\x2"+ + "RRrr\x4\x2SSss\x4\x2TTtt\x4\x2UUuu\x4\x2VVvv\x4\x2WWww\x4\x2XXxx\x4\x2"+ + "YYyy\x4\x2ZZzz\x4\x2[[{{\x4\x2\\\\||\xAC5\x2\x3\x3\x2\x2\x2\x2\x5\x3\x2"+ + "\x2\x2\x2\a\x3\x2\x2\x2\x2\t\x3\x2\x2\x2\x2\v\x3\x2\x2\x2\x2\r\x3\x2\x2"+ + "\x2\x2\xF\x3\x2\x2\x2\x2\x11\x3\x2\x2\x2\x2\x13\x3\x2\x2\x2\x2\x15\x3"+ + "\x2\x2\x2\x2\x17\x3\x2\x2\x2\x2\x19\x3\x2\x2\x2\x2\x1B\x3\x2\x2\x2\x2"+ + "\x1D\x3\x2\x2\x2\x2\x1F\x3\x2\x2\x2\x2!\x3\x2\x2\x2\x2#\x3\x2\x2\x2\x2"+ + "%\x3\x2\x2\x2\x2\'\x3\x2\x2\x2\x2)\x3\x2\x2\x2\x2+\x3\x2\x2\x2\x2-\x3"+ + "\x2\x2\x2\x2/\x3\x2\x2\x2\x2\x31\x3\x2\x2\x2\x2\x33\x3\x2\x2\x2\x2\x35"+ + "\x3\x2\x2\x2\x2\x37\x3\x2\x2\x2\x2\x39\x3\x2\x2\x2\x2;\x3\x2\x2\x2\x2"+ + "=\x3\x2\x2\x2\x2?\x3\x2\x2\x2\x2\x41\x3\x2\x2\x2\x2\x43\x3\x2\x2\x2\x2"+ + "\x45\x3\x2\x2\x2\x2G\x3\x2\x2\x2\x2I\x3\x2\x2\x2\x2K\x3\x2\x2\x2\x2M\x3"+ + "\x2\x2\x2\x2O\x3\x2\x2\x2\x2Q\x3\x2\x2\x2\x2S\x3\x2\x2\x2\x2U\x3\x2\x2"+ + "\x2\x2W\x3\x2\x2\x2\x2Y\x3\x2\x2\x2\x2[\x3\x2\x2\x2\x2]\x3\x2\x2\x2\x2"+ + "_\x3\x2\x2\x2\x2\x61\x3\x2\x2\x2\x2\x63\x3\x2\x2\x2\x2\x65\x3\x2\x2\x2"+ + "\x2g\x3\x2\x2\x2\x2i\x3\x2\x2\x2\x2k\x3\x2\x2\x2\x2m\x3\x2\x2\x2\x2o\x3"+ + "\x2\x2\x2\x2q\x3\x2\x2\x2\x2s\x3\x2\x2\x2\x2u\x3\x2\x2\x2\x2w\x3\x2\x2"+ + "\x2\x2y\x3\x2\x2\x2\x2{\x3\x2\x2\x2\x2}\x3\x2\x2\x2\x2\x7F\x3\x2\x2\x2"+ + "\x2\x81\x3\x2\x2\x2\x2\x83\x3\x2\x2\x2\x2\x85\x3\x2\x2\x2\x2\x87\x3\x2"+ + "\x2\x2\x2\x89\x3\x2\x2\x2\x2\x8B\x3\x2\x2\x2\x2\x8D\x3\x2\x2\x2\x2\x8F"+ + "\x3\x2\x2\x2\x2\x91\x3\x2\x2\x2\x2\x93\x3\x2\x2\x2\x2\x95\x3\x2\x2\x2"+ + "\x2\x97\x3\x2\x2\x2\x2\x99\x3\x2\x2\x2\x2\x9B\x3\x2\x2\x2\x2\x9D\x3\x2"+ + "\x2\x2\x2\x9F\x3\x2\x2\x2\x2\xA1\x3\x2\x2\x2\x2\xA3\x3\x2\x2\x2\x2\xA5"+ + "\x3\x2\x2\x2\x2\xA7\x3\x2\x2\x2\x2\xA9\x3\x2\x2\x2\x2\xAB\x3\x2\x2\x2"+ + "\x2\xAD\x3\x2\x2\x2\x2\xAF\x3\x2\x2\x2\x2\xB1\x3\x2\x2\x2\x2\xB3\x3\x2"+ + "\x2\x2\x2\xB5\x3\x2\x2\x2\x2\xB7\x3\x2\x2\x2\x2\xB9\x3\x2\x2\x2\x2\xBB"+ + "\x3\x2\x2\x2\x2\xBD\x3\x2\x2\x2\x2\xBF\x3\x2\x2\x2\x2\xC1\x3\x2\x2\x2"+ + "\x2\xC3\x3\x2\x2\x2\x2\xC5\x3\x2\x2\x2\x2\xC7\x3\x2\x2\x2\x2\xC9\x3\x2"+ + "\x2\x2\x2\xCB\x3\x2\x2\x2\x2\xCD\x3\x2\x2\x2\x2\xCF\x3\x2\x2\x2\x2\xD1"+ + "\x3\x2\x2\x2\x2\xD3\x3\x2\x2\x2\x2\xD5\x3\x2\x2\x2\x2\xD7\x3\x2\x2\x2"+ + "\x2\xD9\x3\x2\x2\x2\x2\xDB\x3\x2\x2\x2\x2\xDD\x3\x2\x2\x2\x2\xDF\x3\x2"+ + "\x2\x2\x2\xE1\x3\x2\x2\x2\x2\xE3\x3\x2\x2\x2\x2\xE5\x3\x2\x2\x2\x2\xE7"+ + "\x3\x2\x2\x2\x2\xE9\x3\x2\x2\x2\x2\xEB\x3\x2\x2\x2\x2\xED\x3\x2\x2\x2"+ + "\x2\xEF\x3\x2\x2\x2\x2\xF1\x3\x2\x2\x2\x2\xF3\x3\x2\x2\x2\x2\xF5\x3\x2"+ + "\x2\x2\x2\xF7\x3\x2\x2\x2\x2\xF9\x3\x2\x2\x2\x2\xFB\x3\x2\x2\x2\x2\xFD"+ + "\x3\x2\x2\x2\x2\xFF\x3\x2\x2\x2\x2\x101\x3\x2\x2\x2\x2\x103\x3\x2\x2\x2"+ + "\x2\x105\x3\x2\x2\x2\x2\x107\x3\x2\x2\x2\x2\x109\x3\x2\x2\x2\x2\x10B\x3"+ + "\x2\x2\x2\x2\x10D\x3\x2\x2\x2\x2\x10F\x3\x2\x2\x2\x2\x111\x3\x2\x2\x2"+ + "\x2\x113\x3\x2\x2\x2\x2\x115\x3\x2\x2\x2\x2\x117\x3\x2\x2\x2\x2\x119\x3"+ + "\x2\x2\x2\x2\x11B\x3\x2\x2\x2\x2\x11D\x3\x2\x2\x2\x2\x11F\x3\x2\x2\x2"+ + "\x2\x121\x3\x2\x2\x2\x2\x123\x3\x2\x2\x2\x2\x125\x3\x2\x2\x2\x2\x127\x3"+ + "\x2\x2\x2\x2\x129\x3\x2\x2\x2\x2\x12B\x3\x2\x2\x2\x2\x12D\x3\x2\x2\x2"+ + "\x2\x12F\x3\x2\x2\x2\x2\x131\x3\x2\x2\x2\x2\x133\x3\x2\x2\x2\x2\x135\x3"+ + "\x2\x2\x2\x2\x137\x3\x2\x2\x2\x2\x139\x3\x2\x2\x2\x2\x13B\x3\x2\x2\x2"+ + "\x2\x13D\x3\x2\x2\x2\x2\x13F\x3\x2\x2\x2\x2\x141\x3\x2\x2\x2\x2\x143\x3"+ + "\x2\x2\x2\x2\x145\x3\x2\x2\x2\x2\x147\x3\x2\x2\x2\x2\x149\x3\x2\x2\x2"+ + "\x2\x14B\x3\x2\x2\x2\x2\x14D\x3\x2\x2\x2\x2\x14F\x3\x2\x2\x2\x2\x151\x3"+ + "\x2\x2\x2\x2\x153\x3\x2\x2\x2\x2\x155\x3\x2\x2\x2\x2\x157\x3\x2\x2\x2"+ + "\x2\x159\x3\x2\x2\x2\x2\x15B\x3\x2\x2\x2\x2\x15D\x3\x2\x2\x2\x2\x15F\x3"+ + "\x2\x2\x2\x2\x161\x3\x2\x2\x2\x2\x163\x3\x2\x2\x2\x2\x165\x3\x2\x2\x2"+ + "\x2\x167\x3\x2\x2\x2\x2\x169\x3\x2\x2\x2\x2\x16B\x3\x2\x2\x2\x2\x16D\x3"+ + "\x2\x2\x2\x2\x16F\x3\x2\x2\x2\x2\x171\x3\x2\x2\x2\x2\x173\x3\x2\x2\x2"+ + "\x2\x175\x3\x2\x2\x2\x2\x177\x3\x2\x2\x2\x2\x179\x3\x2\x2\x2\x2\x17B\x3"+ + "\x2\x2\x2\x2\x17D\x3\x2\x2\x2\x2\x17F\x3\x2\x2\x2\x2\x181\x3\x2\x2\x2"+ + "\x2\x183\x3\x2\x2\x2\x2\x185\x3\x2\x2\x2\x2\x187\x3\x2\x2\x2\x2\x189\x3"+ + "\x2\x2\x2\x2\x18B\x3\x2\x2\x2\x2\x18D\x3\x2\x2\x2\x2\x18F\x3\x2\x2\x2"+ + "\x2\x191\x3\x2\x2\x2\x2\x193\x3\x2\x2\x2\x2\x195\x3\x2\x2\x2\x2\x197\x3"+ + "\x2\x2\x2\x2\x199\x3\x2\x2\x2\x2\x19B\x3\x2\x2\x2\x2\x19D\x3\x2\x2\x2"+ + "\x2\x19F\x3\x2\x2\x2\x2\x1A1\x3\x2\x2\x2\x2\x1A3\x3\x2\x2\x2\x2\x1A5\x3"+ + "\x2\x2\x2\x2\x1A7\x3\x2\x2\x2\x2\x1A9\x3\x2\x2\x2\x2\x1AB\x3\x2\x2\x2"+ + "\x2\x1AD\x3\x2\x2\x2\x2\x1AF\x3\x2\x2\x2\x2\x1B1\x3\x2\x2\x2\x2\x1B3\x3"+ + "\x2\x2\x2\x2\x1B5\x3\x2\x2\x2\x2\x1B7\x3\x2\x2\x2\x2\x1B9\x3\x2\x2\x2"+ + "\x2\x1BB\x3\x2\x2\x2\x2\x1BD\x3\x2\x2\x2\x2\x1BF\x3\x2\x2\x2\x2\x1C1\x3"+ + "\x2\x2\x2\x2\x1C3\x3\x2\x2\x2\x2\x1C5\x3\x2\x2\x2\x2\x1C7\x3\x2\x2\x2"+ + "\x2\x1C9\x3\x2\x2\x2\x2\x1CB\x3\x2\x2\x2\x2\x1CD\x3\x2\x2\x2\x2\x1CF\x3"+ + "\x2\x2\x2\x2\x1D1\x3\x2\x2\x2\x2\x1D3\x3\x2\x2\x2\x2\x1D5\x3\x2\x2\x2"+ + "\x2\x1D7\x3\x2\x2\x2\x2\x1D9\x3\x2\x2\x2\x2\x1DB\x3\x2\x2\x2\x2\x1DD\x3"+ + "\x2\x2\x2\x2\x1DF\x3\x2\x2\x2\x2\x1E1\x3\x2\x2\x2\x2\x1E3\x3\x2\x2\x2"+ + "\x2\x1E5\x3\x2\x2\x2\x2\x1E7\x3\x2\x2\x2\x2\x1E9\x3\x2\x2\x2\x2\x1EB\x3"+ + "\x2\x2\x2\x2\x1ED\x3\x2\x2\x2\x2\x1F1\x3\x2\x2\x2\x2\x1FF\x3\x2\x2\x2"+ + "\x2\x243\x3\x2\x2\x2\x2\x245\x3\x2\x2\x2\x2\x247\x3\x2\x2\x2\x2\x249\x3"+ + "\x2\x2\x2\x2\x24B\x3\x2\x2\x2\x2\x24D\x3\x2\x2\x2\x2\x24F\x3\x2\x2\x2"+ + "\x2\x251\x3\x2\x2\x2\x2\x253\x3\x2\x2\x2\x2\x28F\x3\x2\x2\x2\x3\x291\x3"+ + "\x2\x2\x2\x5\x295\x3\x2\x2\x2\a\x299\x3\x2\x2\x2\t\x29F\x3\x2\x2\x2\v"+ + "\x2A5\x3\x2\x2\x2\r\x2AB\x3\x2\x2\x2\xF\x2B0\x3\x2\x2\x2\x11\x2B6\x3\x2"+ + "\x2\x2\x13\x2BB\x3\x2\x2\x2\x15\x2C0\x3\x2\x2\x2\x17\x2C5\x3\x2\x2\x2"+ + "\x19\x2CC\x3\x2\x2\x2\x1B\x2D1\x3\x2\x2\x2\x1D\x2D9\x3\x2\x2\x2\x1F\x2E1"+ + "\x3\x2\x2\x2!\x2E6\x3\x2\x2\x2#\x2EB\x3\x2\x2\x2%\x2F4\x3\x2\x2\x2\'\x2F9"+ + "\x3\x2\x2\x2)\x2FF\x3\x2\x2\x2+\x305\x3\x2\x2\x2-\x30E\x3\x2\x2\x2/\x313"+ + "\x3\x2\x2\x2\x31\x317\x3\x2\x2\x2\x33\x31E\x3\x2\x2\x2\x35\x322\x3\x2"+ + "\x2\x2\x37\x329\x3\x2\x2\x2\x39\x32D\x3\x2\x2\x2;\x332\x3\x2\x2\x2=\x33B"+ + "\x3\x2\x2\x2?\x343\x3\x2\x2\x2\x41\x348\x3\x2\x2\x2\x43\x34E\x3\x2\x2"+ + "\x2\x45\x353\x3\x2\x2\x2G\x35A\x3\x2\x2\x2I\x35F\x3\x2\x2\x2K\x365\x3"+ + "\x2\x2\x2M\x369\x3\x2\x2\x2O\x370\x3\x2\x2\x2Q\x372\x3\x2\x2\x2S\x374"+ + "\x3\x2\x2\x2U\x376\x3\x2\x2\x2W\x378\x3\x2\x2\x2Y\x37A\x3\x2\x2\x2[\x37C"+ + "\x3\x2\x2\x2]\x37E\x3\x2\x2\x2_\x380\x3\x2\x2\x2\x61\x382\x3\x2\x2\x2"+ + "\x63\x384\x3\x2\x2\x2\x65\x38B\x3\x2\x2\x2g\x395\x3\x2\x2\x2i\x39B\x3"+ + "\x2\x2\x2k\x39F\x3\x2\x2\x2m\x3A9\x3\x2\x2\x2o\x3B5\x3\x2\x2\x2q\x3BC"+ + "\x3\x2\x2\x2s\x3BF\x3\x2\x2\x2u\x3C5\x3\x2\x2\x2w\x3CA\x3\x2\x2\x2y\x3D1"+ + "\x3\x2\x2\x2{\x3D9\x3\x2\x2\x2}\x3DF\x3\x2\x2\x2\x7F\x3E5\x3\x2\x2\x2"+ + "\x81\x3EA\x3\x2\x2\x2\x83\x3EF\x3\x2\x2\x2\x85\x3F4\x3\x2\x2\x2\x87\x3FA"+ + "\x3\x2\x2\x2\x89\x402\x3\x2\x2\x2\x8B\x408\x3\x2\x2\x2\x8D\x40E\x3\x2"+ + "\x2\x2\x8F\x414\x3\x2\x2\x2\x91\x41D\x3\x2\x2\x2\x93\x422\x3\x2\x2\x2"+ + "\x95\x42A\x3\x2\x2\x2\x97\x432\x3\x2\x2\x2\x99\x43A\x3\x2\x2\x2\x9B\x442"+ + "\x3\x2\x2\x2\x9D\x449\x3\x2\x2\x2\x9F\x450\x3\x2\x2\x2\xA1\x457\x3\x2"+ + "\x2\x2\xA3\x45E\x3\x2\x2\x2\xA5\x468\x3\x2\x2\x2\xA7\x472\x3\x2\x2\x2"+ + "\xA9\x479\x3\x2\x2\x2\xAB\x480\x3\x2\x2\x2\xAD\x487\x3\x2\x2\x2\xAF\x48E"+ + "\x3\x2\x2\x2\xB1\x49C\x3\x2\x2\x2\xB3\x4A0\x3\x2\x2\x2\xB5\x4A3\x3\x2"+ + "\x2\x2\xB7\x4AA\x3\x2\x2\x2\xB9\x4AF\x3\x2\x2\x2\xBB\x4B4\x3\x2\x2\x2"+ + "\xBD\x4BB\x3\x2\x2\x2\xBF\x4C1\x3\x2\x2\x2\xC1\x4CA\x3\x2\x2\x2\xC3\x4D7"+ + "\x3\x2\x2\x2\xC5\x4DE\x3\x2\x2\x2\xC7\x4EB\x3\x2\x2\x2\xC9\x4F6\x3\x2"+ + "\x2\x2\xCB\x4FE\x3\x2\x2\x2\xCD\x507\x3\x2\x2\x2\xCF\x510\x3\x2\x2\x2"+ + "\xD1\x514\x3\x2\x2\x2\xD3\x519\x3\x2\x2\x2\xD5\x51D\x3\x2\x2\x2\xD7\x523"+ + "\x3\x2\x2\x2\xD9\x529\x3\x2\x2\x2\xDB\x52F\x3\x2\x2\x2\xDD\x537\x3\x2"+ + "\x2\x2\xDF\x540\x3\x2\x2\x2\xE1\x54E\x3\x2\x2\x2\xE3\x55C\x3\x2\x2\x2"+ + "\xE5\x565\x3\x2\x2\x2\xE7\x56B\x3\x2\x2\x2\xE9\x574\x3\x2\x2\x2\xEB\x57B"+ + "\x3\x2\x2\x2\xED\x57F\x3\x2\x2\x2\xEF\x588\x3\x2\x2\x2\xF1\x58C\x3\x2"+ + "\x2\x2\xF3\x593\x3\x2\x2\x2\xF5\x599\x3\x2\x2\x2\xF7\x59E\x3\x2\x2\x2"+ + "\xF9\x5A1\x3\x2\x2\x2\xFB\x5A5\x3\x2\x2\x2\xFD\x5B0\x3\x2\x2\x2\xFF\x5B3"+ + "\x3\x2\x2\x2\x101\x5B9\x3\x2\x2\x2\x103\x5BC\x3\x2\x2\x2\x105\x5C4\x3"+ + "\x2\x2\x2\x107\x5C9\x3\x2\x2\x2\x109\x5CE\x3\x2\x2\x2\x10B\x5D3\x3\x2"+ + "\x2\x2\x10D\x5D8\x3\x2\x2\x2\x10F\x5DD\x3\x2\x2\x2\x111\x5E1\x3\x2\x2"+ + "\x2\x113\x5E5\x3\x2\x2\x2\x115\x5EA\x3\x2\x2\x2\x117\x5F5\x3\x2\x2\x2"+ + "\x119\x5FF\x3\x2\x2\x2\x11B\x60A\x3\x2\x2\x2\x11D\x61A\x3\x2\x2\x2\x11F"+ + "\x61F\x3\x2\x2\x2\x121\x622\x3\x2\x2\x2\x123\x626\x3\x2\x2\x2\x125\x62C"+ + "\x3\x2\x2\x2\x127\x630\x3\x2\x2\x2\x129\x635\x3\x2\x2\x2\x12B\x63A\x3"+ + "\x2\x2\x2\x12D\x63E\x3\x2\x2\x2\x12F\x642\x3\x2\x2\x2\x131\x64A\x3\x2"+ + "\x2\x2\x133\x64F\x3\x2\x2\x2\x135\x652\x3\x2\x2\x2\x137\x65B\x3\x2\x2"+ + "\x2\x139\x66A\x3\x2\x2\x2\x13B\x66F\x3\x2\x2\x2\x13D\x678\x3\x2\x2\x2"+ + "\x13F\x684\x3\x2\x2\x2\x141\x694\x3\x2\x2\x2\x143\x6A3\x3\x2\x2\x2\x145"+ + "\x6B9\x3\x2\x2\x2\x147\x6BC\x3\x2\x2\x2\x149\x6C3\x3\x2\x2\x2\x14B\x6CE"+ + "\x3\x2\x2\x2\x14D\x6D7\x3\x2\x2\x2\x14F\x6DD\x3\x2\x2\x2\x151\x6E5\x3"+ + "\x2\x2\x2\x153\x6F2\x3\x2\x2\x2\x155\x6FF\x3\x2\x2\x2\x157\x70C\x3\x2"+ + "\x2\x2\x159\x714\x3\x2\x2\x2\x15B\x71B\x3\x2\x2\x2\x15D\x71F\x3\x2\x2"+ + "\x2\x15F\x726\x3\x2\x2\x2\x161\x730\x3\x2\x2\x2\x163\x73B\x3\x2\x2\x2"+ + "\x165\x740\x3\x2\x2\x2\x167\x74B\x3\x2\x2\x2\x169\x751\x3\x2\x2\x2\x16B"+ + "\x755\x3\x2\x2\x2\x16D\x75B\x3\x2\x2\x2\x16F\x762\x3\x2\x2\x2\x171\x769"+ + "\x3\x2\x2\x2\x173\x76F\x3\x2\x2\x2\x175\x774\x3\x2\x2\x2\x177\x780\x3"+ + "\x2\x2\x2\x179\x78C\x3\x2\x2\x2\x17B\x791\x3\x2\x2\x2\x17D\x798\x3\x2"+ + "\x2\x2\x17F\x7A1\x3\x2\x2\x2\x181\x7A5\x3\x2\x2\x2\x183\x7AD\x3\x2\x2"+ + "\x2\x185\x7B4\x3\x2\x2\x2\x187\x7BB\x3\x2\x2\x2\x189\x7BF\x3\x2\x2\x2"+ + "\x18B\x7C6\x3\x2\x2\x2\x18D\x7CB\x3\x2\x2\x2\x18F\x7D0\x3\x2\x2\x2\x191"+ + "\x7D7\x3\x2\x2\x2\x193\x7DB\x3\x2\x2\x2\x195\x7DF\x3\x2\x2\x2\x197\x7E4"+ + "\x3\x2\x2\x2\x199\x7E9\x3\x2\x2\x2\x19B\x7EE\x3\x2\x2\x2\x19D\x7F1\x3"+ + "\x2\x2\x2\x19F\x7F6\x3\x2\x2\x2\x1A1\x7FB\x3\x2\x2\x2\x1A3\x802\x3\x2"+ + "\x2\x2\x1A5\x809\x3\x2\x2\x2\x1A7\x810\x3\x2\x2\x2\x1A9\x816\x3\x2\x2"+ + "\x2\x1AB\x81E\x3\x2\x2\x2\x1AD\x826\x3\x2\x2\x2\x1AF\x82B\x3\x2\x2\x2"+ + "\x1B1\x831\x3\x2\x2\x2\x1B3\x837\x3\x2\x2\x2\x1B5\x83C\x3\x2\x2\x2\x1B7"+ + "\x847\x3\x2\x2\x2\x1B9\x84D\x3\x2\x2\x2\x1BB\x851\x3\x2\x2\x2\x1BD\x854"+ + "\x3\x2\x2\x2\x1BF\x856\x3\x2\x2\x2\x1C1\x858\x3\x2\x2\x2\x1C3\x85E\x3"+ + "\x2\x2\x2\x1C5\x860\x3\x2\x2\x2\x1C7\x866\x3\x2\x2\x2\x1C9\x868\x3\x2"+ + "\x2\x2\x1CB\x86A\x3\x2\x2\x2\x1CD\x86C\x3\x2\x2\x2\x1CF\x86E\x3\x2\x2"+ + "\x2\x1D1\x874\x3\x2\x2\x2\x1D3\x876\x3\x2\x2\x2\x1D5\x878\x3\x2\x2\x2"+ + "\x1D7\x87A\x3\x2\x2\x2\x1D9\x87F\x3\x2\x2\x2\x1DB\x888\x3\x2\x2\x2\x1DD"+ + "\x892\x3\x2\x2\x2\x1DF\x8A0\x3\x2\x2\x2\x1E1\x8AC\x3\x2\x2\x2\x1E3\x8BC"+ + "\x3\x2\x2\x2\x1E5\x8BE\x3\x2\x2\x2\x1E7\x8C0\x3\x2\x2\x2\x1E9\x8CB\x3"+ + "\x2\x2\x2\x1EB\x8D6\x3\x2\x2\x2\x1ED\x8E8\x3\x2\x2\x2\x1EF\x8FA\x3\x2"+ + "\x2\x2\x1F1\x8FC\x3\x2\x2\x2\x1F3\x900\x3\x2\x2\x2\x1F5\x902\x3\x2\x2"+ + "\x2\x1F7\x904\x3\x2\x2\x2\x1F9\x90D\x3\x2\x2\x2\x1FB\x90F\x3\x2\x2\x2"+ + "\x1FD\x912\x3\x2\x2\x2\x1FF\x916\x3\x2\x2\x2\x201\x922\x3\x2\x2\x2\x203"+ + "\x924\x3\x2\x2\x2\x205\x932\x3\x2\x2\x2\x207\x935\x3\x2\x2\x2\x209\x93F"+ + "\x3\x2\x2\x2\x20B\x94D\x3\x2\x2\x2\x20D\x95A\x3\x2\x2\x2\x20F\x979\x3"+ + "\x2\x2\x2\x211\x97C\x3\x2\x2\x2\x213\x983\x3\x2\x2\x2\x215\x98F\x3\x2"+ + "\x2\x2\x217\x997\x3\x2\x2\x2\x219\x9A0\x3\x2\x2\x2\x21B\x9A6\x3\x2\x2"+ + "\x2\x21D\x9AC\x3\x2\x2\x2\x21F\x9B0\x3\x2\x2\x2\x221\x9B5\x3\x2\x2\x2"+ + "\x223\x9BA\x3\x2\x2\x2\x225\x9C1\x3\x2\x2\x2\x227\x9CB\x3\x2\x2\x2\x229"+ + "\x9D3\x3\x2\x2\x2\x22B\x9DC\x3\x2\x2\x2\x22D\x9E5\x3\x2\x2\x2\x22F\x9E9"+ + "\x3\x2\x2\x2\x231\x9ED\x3\x2\x2\x2\x233\x9F1\x3\x2\x2\x2\x235\x9F5\x3"+ + "\x2\x2\x2\x237\x9F9\x3\x2\x2\x2\x239\x9FD\x3\x2\x2\x2\x23B\xA01\x3\x2"+ + "\x2\x2\x23D\xA05\x3\x2\x2\x2\x23F\xA09\x3\x2\x2\x2\x241\xA0D\x3\x2\x2"+ + "\x2\x243\xA14\x3\x2\x2\x2\x245\xA17\x3\x2\x2\x2\x247\xA22\x3\x2\x2\x2"+ + "\x249\xA2E\x3\x2\x2\x2\x24B\xA30\x3\x2\x2\x2\x24D\xA32\x3\x2\x2\x2\x24F"+ + "\xA43\x3\x2\x2\x2\x251\xA48\x3\x2\x2\x2\x253\xA57\x3\x2\x2\x2\x255\xA77"+ + "\x3\x2\x2\x2\x257\xA79\x3\x2\x2\x2\x259\xA7B\x3\x2\x2\x2\x25B\xA7D\x3"+ + "\x2\x2\x2\x25D\xA7F\x3\x2\x2\x2\x25F\xA81\x3\x2\x2\x2\x261\xA83\x3\x2"+ + "\x2\x2\x263\xA85\x3\x2\x2\x2\x265\xA87\x3\x2\x2\x2\x267\xA89\x3\x2\x2"+ + "\x2\x269\xA8B\x3\x2\x2\x2\x26B\xA8D\x3\x2\x2\x2\x26D\xA8F\x3\x2\x2\x2"+ + "\x26F\xA91\x3\x2\x2\x2\x271\xA93\x3\x2\x2\x2\x273\xA95\x3\x2\x2\x2\x275"+ + "\xA97\x3\x2\x2\x2\x277\xA99\x3\x2\x2\x2\x279\xA9B\x3\x2\x2\x2\x27B\xA9D"+ + "\x3\x2\x2\x2\x27D\xA9F\x3\x2\x2\x2\x27F\xAA1\x3\x2\x2\x2\x281\xAA3\x3"+ + "\x2\x2\x2\x283\xAA5\x3\x2\x2\x2\x285\xAA7\x3\x2\x2\x2\x287\xAA9\x3\x2"+ + "\x2\x2\x289\xAAB\x3\x2\x2\x2\x28B\xAAD\x3\x2\x2\x2\x28D\xAAF\x3\x2\x2"+ + "\x2\x28F\xAB1\x3\x2\x2\x2\x291\x292\x5\x25B\x12E\x2\x292\x293\x5\x25D"+ + "\x12F\x2\x293\x294\x5\x27F\x140\x2\x294\x4\x3\x2\x2\x2\x295\x296\x5\x25B"+ + "\x12E\x2\x296\x297\x5\x275\x13B\x2\x297\x298\x5\x28B\x146\x2\x298\x6\x3"+ + "\x2\x2\x2\x299\x29A\x5\x25B\x12E\x2\x29A\x29B\x5\x27D\x13F\x2\x29B\x29C"+ + "\x5\x27D\x13F\x2\x29C\x29D\x5\x25B\x12E\x2\x29D\x29E\x5\x28B\x146\x2\x29E"+ + "\b\x3\x2\x2\x2\x29F\x2A0\x5\x25F\x130\x2\x2A0\x2A1\x5\x25D\x12F\x2\x2A1"+ + "\x2A2\x5\x277\x13C\x2\x2A2\x2A3\x5\x277\x13C\x2\x2A3\x2A4\x5\x271\x139"+ + "\x2\x2A4\n\x3\x2\x2\x2\x2A5\x2A6\x5\x25F\x130\x2\x2A6\x2A7\x5\x25D\x12F"+ + "\x2\x2A7\x2A8\x5\x28B\x146\x2\x2A8\x2A9\x5\x281\x141\x2\x2A9\x2AA\x5\x263"+ + "\x132\x2\x2AA\f\x3\x2\x2\x2\x2AB\x2AC\x5\x25F\x130\x2\x2AC\x2AD\x5\x25F"+ + "\x130\x2\x2AD\x2AE\x5\x283\x142\x2\x2AE\x2AF\x5\x27D\x13F\x2\x2AF\xE\x3"+ + "\x2\x2\x2\x2B0\x2B1\x5\x25F\x130\x2\x2B1\x2B2\x5\x261\x131\x2\x2B2\x2B3"+ + "\x5\x25B\x12E\x2\x2B3\x2B4\x5\x281\x141\x2\x2B4\x2B5\x5\x263\x132\x2\x2B5"+ + "\x10\x3\x2\x2\x2\x2B6\x2B7\x5\x25F\x130\x2\x2B7\x2B8\x5\x261\x131\x2\x2B8"+ + "\x2B9\x5\x25D\x12F\x2\x2B9\x2BA\x5\x271\x139\x2\x2BA\x12\x3\x2\x2\x2\x2BB"+ + "\x2BC\x5\x25F\x130\x2\x2BC\x2BD\x5\x261\x131\x2\x2BD\x2BE\x5\x263\x132"+ + "\x2\x2BE\x2BF\x5\x25F\x130\x2\x2BF\x14\x3\x2\x2\x2\x2C0\x2C1\x5\x25F\x130"+ + "\x2\x2C1\x2C2\x5\x26B\x136\x2\x2C2\x2C3\x5\x275\x13B\x2\x2C3\x2C4\x5\x281"+ + "\x141\x2\x2C4\x16\x3\x2\x2\x2\x2C5\x2C6\x5\x25F\x130\x2\x2C6\x2C7\x5\x26B"+ + "\x136\x2\x2C7\x2C8\x5\x27D\x13F\x2\x2C8\x2C9\x5\x25F\x130\x2\x2C9\x2CA"+ + "\x5\x271\x139\x2\x2CA\x2CB\x5\x263\x132\x2\x2CB\x18\x3\x2\x2\x2\x2CC\x2CD"+ + "\x5\x25F\x130\x2\x2CD\x2CE\x5\x271\x139\x2\x2CE\x2CF\x5\x275\x13B\x2\x2CF"+ + "\x2D0\x5\x267\x134\x2\x2D0\x1A\x3\x2\x2\x2\x2D1\x2D2\x5\x25F\x130\x2\x2D2"+ + "\x2D3\x5\x271\x139\x2\x2D3\x2D4\x5\x275\x13B\x2\x2D4\x2D5\x5\x267\x134"+ + "\x2\x2D5\x2D6\x5\x271\x139\x2\x2D6\x2D7\x5\x275\x13B\x2\x2D7\x2D8\x5\x267"+ + "\x134\x2\x2D8\x1C\x3\x2\x2\x2\x2D9\x2DA\x5\x25F\x130\x2\x2DA\x2DB\x5\x271"+ + "\x139\x2\x2DB\x2DC\x5\x275\x13B\x2\x2DC\x2DD\x5\x267\x134\x2\x2DD\x2DE"+ + "\x5\x279\x13D\x2\x2DE\x2DF\x5\x281\x141\x2\x2DF\x2E0\x5\x27D\x13F\x2\x2E0"+ + "\x1E\x3\x2\x2\x2\x2E1\x2E2\x5\x25F\x130\x2\x2E2\x2E3\x5\x27F\x140\x2\x2E3"+ + "\x2E4\x5\x275\x13B\x2\x2E4\x2E5\x5\x267\x134\x2\x2E5 \x3\x2\x2\x2\x2E6"+ + "\x2E7\x5\x25F\x130\x2\x2E7\x2E8\x5\x27F\x140\x2\x2E8\x2E9\x5\x281\x141"+ + "\x2\x2E9\x2EA\x5\x27D\x13F\x2\x2EA\"\x3\x2\x2\x2\x2EB\x2EC\x5\x25F\x130"+ + "\x2\x2EC\x2ED\x5\x283\x142\x2\x2ED\x2EE\x5\x27D\x13F\x2\x2EE\x2EF\x5\x27D"+ + "\x13F\x2\x2EF\x2F0\x5\x263\x132\x2\x2F0\x2F1\x5\x275\x13B\x2\x2F1\x2F2"+ + "\x5\x25F\x130\x2\x2F2\x2F3\x5\x28B\x146\x2\x2F3$\x3\x2\x2\x2\x2F4\x2F5"+ + "\x5\x25F\x130\x2\x2F5\x2F6\x5\x285\x143\x2\x2F6\x2F7\x5\x25B\x12E\x2\x2F7"+ + "\x2F8\x5\x27D\x13F\x2\x2F8&\x3\x2\x2\x2\x2F9\x2FA\x5\x25F\x130\x2\x2FA"+ + "\x2FB\x5\x285\x143\x2\x2FB\x2FC\x5\x263\x132\x2\x2FC\x2FD\x5\x27D\x13F"+ + "\x2\x2FD\x2FE\x5\x27D\x13F\x2\x2FE(\x3\x2\x2\x2\x2FF\x300\x5\x261\x131"+ + "\x2\x300\x301\x5\x263\x132\x2\x301\x302\x5\x25D\x12F\x2\x302\x303\x5\x283"+ + "\x142\x2\x303\x304\x5\x267\x134\x2\x304*\x3\x2\x2\x2\x305\x306\x5\x261"+ + "\x131\x2\x306\x307\x5\x277\x13C\x2\x307\x308\x5\x263\x132\x2\x308\x309"+ + "\x5\x285\x143\x2\x309\x30A\x5\x263\x132\x2\x30A\x30B\x5\x275\x13B\x2\x30B"+ + "\x30C\x5\x281\x141\x2\x30C\x30D\x5\x27F\x140\x2\x30D,\x3\x2\x2\x2\x30E"+ + "\x30F\x5\x263\x132\x2\x30F\x310\x5\x289\x145\x2\x310\x311\x5\x26B\x136"+ + "\x2\x311\x312\x5\x281\x141\x2\x312.\x3\x2\x2\x2\x313\x314\x5\x265\x133"+ + "\x2\x314\x315\x5\x26B\x136\x2\x315\x316\x5\x289\x145\x2\x316\x30\x3\x2"+ + "\x2\x2\x317\x318\x5\x26B\x136\x2\x318\x319\x5\x275\x13B\x2\x319\x31A\x5"+ + "\x279\x13D\x2\x31A\x31B\x5\x283\x142\x2\x31B\x31C\x5\x281\x141\x2\x31C"+ + "\x31D\x5\x25D\x12F\x2\x31D\x32\x3\x2\x2\x2\x31E\x31F\x5\x26B\x136\x2\x31F"+ + "\x320\x5\x275\x13B\x2\x320\x321\x5\x281\x141\x2\x321\x34\x3\x2\x2\x2\x322"+ + "\x323\x5\x271\x139\x2\x323\x324\x5\x25D\x12F\x2\x324\x325\x5\x277\x13C"+ + "\x2\x325\x326\x5\x283\x142\x2\x326\x327\x5\x275\x13B\x2\x327\x328\x5\x261"+ + "\x131\x2\x328\x36\x3\x2\x2\x2\x329\x32A\x5\x271\x139\x2\x32A\x32B\x5\x263"+ + "\x132\x2\x32B\x32C\x5\x275\x13B\x2\x32C\x38\x3\x2\x2\x2\x32D\x32E\x5\x271"+ + "\x139\x2\x32E\x32F\x5\x263\x132\x2\x32F\x330\x5\x275\x13B\x2\x330\x331"+ + "\x5\x25D\x12F\x2\x331:\x3\x2\x2\x2\x332\x333\x5\x271\x139\x2\x333\x334"+ + "\x5\x277\x13C\x2\x334\x335\x5\x275\x13B\x2\x335\x336\x5\x267\x134\x2\x336"+ + "\x337\x5\x271\x139\x2\x337\x338\x5\x277\x13C\x2\x338\x339\x5\x275\x13B"+ + "\x2\x339\x33A\x5\x267\x134\x2\x33A<\x3\x2\x2\x2\x33B\x33C\x5\x271\x139"+ + "\x2\x33C\x33D\x5\x277\x13C\x2\x33D\x33E\x5\x275\x13B\x2\x33E\x33F\x5\x267"+ + "\x134\x2\x33F\x340\x5\x279\x13D\x2\x340\x341\x5\x281\x141\x2\x341\x342"+ + "\x5\x27D\x13F\x2\x342>\x3\x2\x2\x2\x343\x344\x5\x273\x13A\x2\x344\x345"+ + "\x5\x26B\x136\x2\x345\x346\x5\x261\x131\x2\x346\x347\x5\x25D\x12F\x2\x347"+ + "@\x3\x2\x2\x2\x348\x349\x5\x273\x13A\x2\x349\x34A\x5\x26B\x136\x2\x34A"+ + "\x34B\x5\x261\x131\x2\x34B\x34C\x5\x25D\x12F\x2\x34C\x34D\a&\x2\x2\x34D"+ + "\x42\x3\x2\x2\x2\x34E\x34F\x5\x273\x13A\x2\x34F\x350\x5\x26B\x136\x2\x350"+ + "\x351\x5\x261\x131\x2\x351\x352\a&\x2\x2\x352\x44\x3\x2\x2\x2\x353\x354"+ + "\x5\x277\x13C\x2\x354\x355\x5\x279\x13D\x2\x355\x356\x5\x281\x141\x2\x356"+ + "\x357\x5\x26B\x136\x2\x357\x358\x5\x277\x13C\x2\x358\x359\x5\x275\x13B"+ + "\x2\x359\x46\x3\x2\x2\x2\x35A\x35B\x5\x279\x13D\x2\x35B\x35C\x5\x27F\x140"+ + "\x2\x35C\x35D\x5\x263\x132\x2\x35D\x35E\x5\x281\x141\x2\x35EH\x3\x2\x2"+ + "\x2\x35F\x360\x5\x27F\x140\x2\x360\x361\x5\x25F\x130\x2\x361\x362\x5\x25B"+ + "\x12E\x2\x362\x363\x5\x271\x139\x2\x363\x364\x5\x263\x132\x2\x364J\x3"+ + "\x2\x2\x2\x365\x366\x5\x27F\x140\x2\x366\x367\x5\x267\x134\x2\x367\x368"+ + "\x5\x275\x13B\x2\x368L\x3\x2\x2\x2\x369\x36A\x5\x283\x142\x2\x36A\x36B"+ + "\x5\x25D\x12F\x2\x36B\x36C\x5\x277\x13C\x2\x36C\x36D\x5\x283\x142\x2\x36D"+ + "\x36E\x5\x275\x13B\x2\x36E\x36F\x5\x261\x131\x2\x36FN\x3\x2\x2\x2\x370"+ + "\x371\a.\x2\x2\x371P\x3\x2\x2\x2\x372\x373\a<\x2\x2\x373R\x3\x2\x2\x2"+ + "\x374\x375\a=\x2\x2\x375T\x3\x2\x2\x2\x376\x377\a#\x2\x2\x377V\x3\x2\x2"+ + "\x2\x378\x379\a\x30\x2\x2\x379X\x3\x2\x2\x2\x37A\x37B\a%\x2\x2\x37BZ\x3"+ + "\x2\x2\x2\x37C\x37D\a\x42\x2\x2\x37D\\\x3\x2\x2\x2\x37E\x37F\a\'\x2\x2"+ + "\x37F^\x3\x2\x2\x2\x380\x381\a&\x2\x2\x381`\x3\x2\x2\x2\x382\x383\a(\x2"+ + "\x2\x383\x62\x3\x2\x2\x2\x384\x385\x5\x25B\x12E\x2\x385\x386\x5\x25F\x130"+ "\x2\x386\x387\x5\x25F\x130\x2\x387\x388\x5\x263\x132\x2\x388\x389\x5\x27F"+ "\x140\x2\x389\x38A\x5\x27F\x140\x2\x38A\x64\x3\x2\x2\x2\x38B\x38C\x5\x25B"+ "\x12E\x2\x38C\x38D\x5\x261\x131\x2\x38D\x38E\x5\x261\x131\x2\x38E\x38F"+ @@ -1360,60 +1360,61 @@ public VBALexer(ICharStream input) "\x2\xA19\xA1A\x5\x169\xB5\x2\xA1A\xA1F\x5\x24D\x127\x2\xA1B\xA1E\x5\x251"+ "\x129\x2\xA1C\xA1E\n\v\x2\x2\xA1D\xA1B\x3\x2\x2\x2\xA1D\xA1C\x3\x2\x2"+ "\x2\xA1E\xA21\x3\x2\x2\x2\xA1F\xA1D\x3\x2\x2\x2\xA1F\xA20\x3\x2\x2\x2"+ - "\xA20\x246\x3\x2\x2\x2\xA21\xA1F\x3\x2\x2\x2\xA22\xA23\x5\x249\x125\x2"+ - "\xA23\xA28\n\f\x2\x2\xA24\xA27\x5\x251\x129\x2\xA25\xA27\n\v\x2\x2\xA26"+ - "\xA24\x3\x2\x2\x2\xA26\xA25\x3\x2\x2\x2\xA27\xA2A\x3\x2\x2\x2\xA28\xA26"+ - "\x3\x2\x2\x2\xA28\xA29\x3\x2\x2\x2\xA29\x248\x3\x2\x2\x2\xA2A\xA28\x3"+ - "\x2\x2\x2\xA2B\xA2C\a)\x2\x2\xA2C\x24A\x3\x2\x2\x2\xA2D\xA2E\a\x61\x2"+ - "\x2\xA2E\x24C\x3\x2\x2\x2\xA2F\xA30\t\r\x2\x2\xA30\x24E\x3\x2\x2\x2\xA31"+ - "\xA35\n\xE\x2\x2\xA32\xA34\n\xF\x2\x2\xA33\xA32\x3\x2\x2\x2\xA34\xA37"+ - "\x3\x2\x2\x2\xA35\xA33\x3\x2\x2\x2\xA35\xA36\x3\x2\x2\x2\xA36\xA41\x3"+ - "\x2\x2\x2\xA37\xA35\x3\x2\x2\x2\xA38\xA3A\x5\x1E3\xF2\x2\xA39\xA3B\n\x10"+ - "\x2\x2\xA3A\xA39\x3\x2\x2\x2\xA3B\xA3C\x3\x2\x2\x2\xA3C\xA3A\x3\x2\x2"+ - "\x2\xA3C\xA3D\x3\x2\x2\x2\xA3D\xA3E\x3\x2\x2\x2\xA3E\xA3F\x5\x1E5\xF3"+ - "\x2\xA3F\xA41\x3\x2\x2\x2\xA40\xA31\x3\x2\x2\x2\xA40\xA38\x3\x2\x2\x2"+ - "\xA41\x250\x3\x2\x2\x2\xA42\xA44\t\r\x2\x2\xA43\xA42\x3\x2\x2\x2\xA44"+ - "\xA47\x3\x2\x2\x2\xA45\xA43\x3\x2\x2\x2\xA45\xA46\x3\x2\x2\x2\xA46\xA48"+ - "\x3\x2\x2\x2\xA47\xA45\x3\x2\x2\x2\xA48\xA4C\x5\x24B\x126\x2\xA49\xA4B"+ - "\t\r\x2\x2\xA4A\xA49\x3\x2\x2\x2\xA4B\xA4E\x3\x2\x2\x2\xA4C\xA4A\x3\x2"+ - "\x2\x2\xA4C\xA4D\x3\x2\x2\x2\xA4D\xA50\x3\x2\x2\x2\xA4E\xA4C\x3\x2\x2"+ - "\x2\xA4F\xA51\a\xF\x2\x2\xA50\xA4F\x3\x2\x2\x2\xA50\xA51\x3\x2\x2\x2\xA51"+ - "\xA52\x3\x2\x2\x2\xA52\xA53\a\f\x2\x2\xA53\x252\x3\x2\x2\x2\xA54\xA56"+ - "\a}\x2\x2\xA55\xA57\t\x4\x2\x2\xA56\xA55\x3\x2\x2\x2\xA57\xA58\x3\x2\x2"+ - "\x2\xA58\xA56\x3\x2\x2\x2\xA58\xA59\x3\x2\x2\x2\xA59\xA5A\x3\x2\x2\x2"+ - "\xA5A\xA5C\a/\x2\x2\xA5B\xA5D\t\x4\x2\x2\xA5C\xA5B\x3\x2\x2\x2\xA5D\xA5E"+ - "\x3\x2\x2\x2\xA5E\xA5C\x3\x2\x2\x2\xA5E\xA5F\x3\x2\x2\x2\xA5F\xA60\x3"+ - "\x2\x2\x2\xA60\xA62\a/\x2\x2\xA61\xA63\t\x4\x2\x2\xA62\xA61\x3\x2\x2\x2"+ - "\xA63\xA64\x3\x2\x2\x2\xA64\xA62\x3\x2\x2\x2\xA64\xA65\x3\x2\x2\x2\xA65"+ - "\xA66\x3\x2\x2\x2\xA66\xA68\a/\x2\x2\xA67\xA69\t\x4\x2\x2\xA68\xA67\x3"+ - "\x2\x2\x2\xA69\xA6A\x3\x2\x2\x2\xA6A\xA68\x3\x2\x2\x2\xA6A\xA6B\x3\x2"+ - "\x2\x2\xA6B\xA6C\x3\x2\x2\x2\xA6C\xA6E\a/\x2\x2\xA6D\xA6F\t\x4\x2\x2\xA6E"+ - "\xA6D\x3\x2\x2\x2\xA6F\xA70\x3\x2\x2\x2\xA70\xA6E\x3\x2\x2\x2\xA70\xA71"+ - "\x3\x2\x2\x2\xA71\xA72\x3\x2\x2\x2\xA72\xA73\a\x7F\x2\x2\xA73\x254\x3"+ - "\x2\x2\x2\xA74\xA75\t\x11\x2\x2\xA75\x256\x3\x2\x2\x2\xA76\xA77\t\x12"+ - "\x2\x2\xA77\x258\x3\x2\x2\x2\xA78\xA79\t\x13\x2\x2\xA79\x25A\x3\x2\x2"+ - "\x2\xA7A\xA7B\t\x14\x2\x2\xA7B\x25C\x3\x2\x2\x2\xA7C\xA7D\t\x15\x2\x2"+ - "\xA7D\x25E\x3\x2\x2\x2\xA7E\xA7F\t\x16\x2\x2\xA7F\x260\x3\x2\x2\x2\xA80"+ - "\xA81\t\x17\x2\x2\xA81\x262\x3\x2\x2\x2\xA82\xA83\t\x18\x2\x2\xA83\x264"+ - "\x3\x2\x2\x2\xA84\xA85\t\x19\x2\x2\xA85\x266\x3\x2\x2\x2\xA86\xA87\t\x1A"+ - "\x2\x2\xA87\x268\x3\x2\x2\x2\xA88\xA89\t\x1B\x2\x2\xA89\x26A\x3\x2\x2"+ - "\x2\xA8A\xA8B\t\x1C\x2\x2\xA8B\x26C\x3\x2\x2\x2\xA8C\xA8D\t\x1D\x2\x2"+ - "\xA8D\x26E\x3\x2\x2\x2\xA8E\xA8F\t\x1E\x2\x2\xA8F\x270\x3\x2\x2\x2\xA90"+ - "\xA91\t\x1F\x2\x2\xA91\x272\x3\x2\x2\x2\xA92\xA93\t \x2\x2\xA93\x274\x3"+ - "\x2\x2\x2\xA94\xA95\t!\x2\x2\xA95\x276\x3\x2\x2\x2\xA96\xA97\t\"\x2\x2"+ - "\xA97\x278\x3\x2\x2\x2\xA98\xA99\t#\x2\x2\xA99\x27A\x3\x2\x2\x2\xA9A\xA9B"+ - "\t$\x2\x2\xA9B\x27C\x3\x2\x2\x2\xA9C\xA9D\t%\x2\x2\xA9D\x27E\x3\x2\x2"+ - "\x2\xA9E\xA9F\t&\x2\x2\xA9F\x280\x3\x2\x2\x2\xAA0\xAA1\t\'\x2\x2\xAA1"+ - "\x282\x3\x2\x2\x2\xAA2\xAA3\t(\x2\x2\xAA3\x284\x3\x2\x2\x2\xAA4\xAA5\t"+ - ")\x2\x2\xAA5\x286\x3\x2\x2\x2\xAA6\xAA7\t*\x2\x2\xAA7\x288\x3\x2\x2\x2"+ - "\xAA8\xAA9\t+\x2\x2\xAA9\x28A\x3\x2\x2\x2\xAAA\xAAB\t,\x2\x2\xAAB\x28C"+ - "\x3\x2\x2\x2\xAAC\xAAD\t-\x2\x2\xAAD\x28E\x3\x2\x2\x2\xAAE\xAAF\v\x2\x2"+ - "\x2\xAAF\x290\x3\x2\x2\x2\x43\x2\x85E\x866\x874\x87F\x888\x892\x8A0\x8AC"+ - "\x8B6\x8C4\x8C6\x8D1\x8D4\x8DC\x8DF\x8E3\x8E8\x8F0\x8F3\x8F8\x8FA\x8FE"+ - "\x906\x90B\x914\x91C\x922\x92A\x92F\x932\x935\x938\x93B\x93F\x94D\x95A"+ - "\x95F\x966\x96C\x972\x974\x977\x979\x97C\x980\x983\x98D\xA14\xA17\xA1D"+ - "\xA1F\xA26\xA28\xA35\xA3C\xA40\xA45\xA4C\xA50\xA58\xA5E\xA64\xA6A\xA70"+ - "\x2"; + "\xA20\x246\x3\x2\x2\x2\xA21\xA1F\x3\x2\x2\x2\xA22\xA25\x5\x249\x125\x2"+ + "\xA23\xA26\x5\x251\x129\x2\xA24\xA26\n\f\x2\x2\xA25\xA23\x3\x2\x2\x2\xA25"+ + "\xA24\x3\x2\x2\x2\xA26\xA2B\x3\x2\x2\x2\xA27\xA2A\x5\x251\x129\x2\xA28"+ + "\xA2A\n\v\x2\x2\xA29\xA27\x3\x2\x2\x2\xA29\xA28\x3\x2\x2\x2\xA2A\xA2D"+ + "\x3\x2\x2\x2\xA2B\xA29\x3\x2\x2\x2\xA2B\xA2C\x3\x2\x2\x2\xA2C\x248\x3"+ + "\x2\x2\x2\xA2D\xA2B\x3\x2\x2\x2\xA2E\xA2F\a)\x2\x2\xA2F\x24A\x3\x2\x2"+ + "\x2\xA30\xA31\a\x61\x2\x2\xA31\x24C\x3\x2\x2\x2\xA32\xA33\t\r\x2\x2\xA33"+ + "\x24E\x3\x2\x2\x2\xA34\xA38\n\xE\x2\x2\xA35\xA37\n\xF\x2\x2\xA36\xA35"+ + "\x3\x2\x2\x2\xA37\xA3A\x3\x2\x2\x2\xA38\xA36\x3\x2\x2\x2\xA38\xA39\x3"+ + "\x2\x2\x2\xA39\xA44\x3\x2\x2\x2\xA3A\xA38\x3\x2\x2\x2\xA3B\xA3D\x5\x1E3"+ + "\xF2\x2\xA3C\xA3E\n\x10\x2\x2\xA3D\xA3C\x3\x2\x2\x2\xA3E\xA3F\x3\x2\x2"+ + "\x2\xA3F\xA3D\x3\x2\x2\x2\xA3F\xA40\x3\x2\x2\x2\xA40\xA41\x3\x2\x2\x2"+ + "\xA41\xA42\x5\x1E5\xF3\x2\xA42\xA44\x3\x2\x2\x2\xA43\xA34\x3\x2\x2\x2"+ + "\xA43\xA3B\x3\x2\x2\x2\xA44\x250\x3\x2\x2\x2\xA45\xA47\t\r\x2\x2\xA46"+ + "\xA45\x3\x2\x2\x2\xA47\xA4A\x3\x2\x2\x2\xA48\xA46\x3\x2\x2\x2\xA48\xA49"+ + "\x3\x2\x2\x2\xA49\xA4B\x3\x2\x2\x2\xA4A\xA48\x3\x2\x2\x2\xA4B\xA4F\x5"+ + "\x24B\x126\x2\xA4C\xA4E\t\r\x2\x2\xA4D\xA4C\x3\x2\x2\x2\xA4E\xA51\x3\x2"+ + "\x2\x2\xA4F\xA4D\x3\x2\x2\x2\xA4F\xA50\x3\x2\x2\x2\xA50\xA53\x3\x2\x2"+ + "\x2\xA51\xA4F\x3\x2\x2\x2\xA52\xA54\a\xF\x2\x2\xA53\xA52\x3\x2\x2\x2\xA53"+ + "\xA54\x3\x2\x2\x2\xA54\xA55\x3\x2\x2\x2\xA55\xA56\a\f\x2\x2\xA56\x252"+ + "\x3\x2\x2\x2\xA57\xA59\a}\x2\x2\xA58\xA5A\t\x4\x2\x2\xA59\xA58\x3\x2\x2"+ + "\x2\xA5A\xA5B\x3\x2\x2\x2\xA5B\xA59\x3\x2\x2\x2\xA5B\xA5C\x3\x2\x2\x2"+ + "\xA5C\xA5D\x3\x2\x2\x2\xA5D\xA5F\a/\x2\x2\xA5E\xA60\t\x4\x2\x2\xA5F\xA5E"+ + "\x3\x2\x2\x2\xA60\xA61\x3\x2\x2\x2\xA61\xA5F\x3\x2\x2\x2\xA61\xA62\x3"+ + "\x2\x2\x2\xA62\xA63\x3\x2\x2\x2\xA63\xA65\a/\x2\x2\xA64\xA66\t\x4\x2\x2"+ + "\xA65\xA64\x3\x2\x2\x2\xA66\xA67\x3\x2\x2\x2\xA67\xA65\x3\x2\x2\x2\xA67"+ + "\xA68\x3\x2\x2\x2\xA68\xA69\x3\x2\x2\x2\xA69\xA6B\a/\x2\x2\xA6A\xA6C\t"+ + "\x4\x2\x2\xA6B\xA6A\x3\x2\x2\x2\xA6C\xA6D\x3\x2\x2\x2\xA6D\xA6B\x3\x2"+ + "\x2\x2\xA6D\xA6E\x3\x2\x2\x2\xA6E\xA6F\x3\x2\x2\x2\xA6F\xA71\a/\x2\x2"+ + "\xA70\xA72\t\x4\x2\x2\xA71\xA70\x3\x2\x2\x2\xA72\xA73\x3\x2\x2\x2\xA73"+ + "\xA71\x3\x2\x2\x2\xA73\xA74\x3\x2\x2\x2\xA74\xA75\x3\x2\x2\x2\xA75\xA76"+ + "\a\x7F\x2\x2\xA76\x254\x3\x2\x2\x2\xA77\xA78\t\x11\x2\x2\xA78\x256\x3"+ + "\x2\x2\x2\xA79\xA7A\t\x12\x2\x2\xA7A\x258\x3\x2\x2\x2\xA7B\xA7C\t\x13"+ + "\x2\x2\xA7C\x25A\x3\x2\x2\x2\xA7D\xA7E\t\x14\x2\x2\xA7E\x25C\x3\x2\x2"+ + "\x2\xA7F\xA80\t\x15\x2\x2\xA80\x25E\x3\x2\x2\x2\xA81\xA82\t\x16\x2\x2"+ + "\xA82\x260\x3\x2\x2\x2\xA83\xA84\t\x17\x2\x2\xA84\x262\x3\x2\x2\x2\xA85"+ + "\xA86\t\x18\x2\x2\xA86\x264\x3\x2\x2\x2\xA87\xA88\t\x19\x2\x2\xA88\x266"+ + "\x3\x2\x2\x2\xA89\xA8A\t\x1A\x2\x2\xA8A\x268\x3\x2\x2\x2\xA8B\xA8C\t\x1B"+ + "\x2\x2\xA8C\x26A\x3\x2\x2\x2\xA8D\xA8E\t\x1C\x2\x2\xA8E\x26C\x3\x2\x2"+ + "\x2\xA8F\xA90\t\x1D\x2\x2\xA90\x26E\x3\x2\x2\x2\xA91\xA92\t\x1E\x2\x2"+ + "\xA92\x270\x3\x2\x2\x2\xA93\xA94\t\x1F\x2\x2\xA94\x272\x3\x2\x2\x2\xA95"+ + "\xA96\t \x2\x2\xA96\x274\x3\x2\x2\x2\xA97\xA98\t!\x2\x2\xA98\x276\x3\x2"+ + "\x2\x2\xA99\xA9A\t\"\x2\x2\xA9A\x278\x3\x2\x2\x2\xA9B\xA9C\t#\x2\x2\xA9C"+ + "\x27A\x3\x2\x2\x2\xA9D\xA9E\t$\x2\x2\xA9E\x27C\x3\x2\x2\x2\xA9F\xAA0\t"+ + "%\x2\x2\xAA0\x27E\x3\x2\x2\x2\xAA1\xAA2\t&\x2\x2\xAA2\x280\x3\x2\x2\x2"+ + "\xAA3\xAA4\t\'\x2\x2\xAA4\x282\x3\x2\x2\x2\xAA5\xAA6\t(\x2\x2\xAA6\x284"+ + "\x3\x2\x2\x2\xAA7\xAA8\t)\x2\x2\xAA8\x286\x3\x2\x2\x2\xAA9\xAAA\t*\x2"+ + "\x2\xAAA\x288\x3\x2\x2\x2\xAAB\xAAC\t+\x2\x2\xAAC\x28A\x3\x2\x2\x2\xAAD"+ + "\xAAE\t,\x2\x2\xAAE\x28C\x3\x2\x2\x2\xAAF\xAB0\t-\x2\x2\xAB0\x28E\x3\x2"+ + "\x2\x2\xAB1\xAB2\v\x2\x2\x2\xAB2\x290\x3\x2\x2\x2\x44\x2\x85E\x866\x874"+ + "\x87F\x888\x892\x8A0\x8AC\x8B6\x8C4\x8C6\x8D1\x8D4\x8DC\x8DF\x8E3\x8E8"+ + "\x8F0\x8F3\x8F8\x8FA\x8FE\x906\x90B\x914\x91C\x922\x92A\x92F\x932\x935"+ + "\x938\x93B\x93F\x94D\x95A\x95F\x966\x96C\x972\x974\x977\x979\x97C\x980"+ + "\x983\x98D\xA14\xA17\xA1D\xA1F\xA25\xA29\xA2B\xA38\xA3F\xA43\xA48\xA4F"+ + "\xA53\xA5B\xA61\xA67\xA6D\xA73\x2"; public static readonly ATN _ATN = new ATNDeserializer().Deserialize(_serializedATN.ToCharArray()); } diff --git a/Rubberduck.Parsing/Grammar/VBALexer.g4 b/Rubberduck.Parsing/Grammar/VBALexer.g4 index 2e7fc9e6fa..0398096eb2 100644 --- a/Rubberduck.Parsing/Grammar/VBALexer.g4 +++ b/Rubberduck.Parsing/Grammar/VBALexer.g4 @@ -312,7 +312,7 @@ fragment NOV : N O V; fragment DEC : D E C; NEWLINE : '\r' '\n' | [\r\n\u2028\u2029]; REMCOMMENT : COLON? REM WS (LINE_CONTINUATION | ~[\r\n\u2028\u2029])*; -COMMENT : SINGLEQUOTE ~'@' (LINE_CONTINUATION | ~[\r\n\u2028\u2029])*; +COMMENT : SINGLEQUOTE (LINE_CONTINUATION | ~[\r\n\u2028\u2029@]) (LINE_CONTINUATION | ~[\r\n\u2028\u2029])*; SINGLEQUOTE : '\''; UNDERSCORE : '_'; WS : [ \t]; diff --git a/Rubberduck.Parsing/Grammar/VBAParser.cs b/Rubberduck.Parsing/Grammar/VBAParser.cs index 5d8ed7b184..25d2137b96 100644 --- a/Rubberduck.Parsing/Grammar/VBAParser.cs +++ b/Rubberduck.Parsing/Grammar/VBAParser.cs @@ -15035,6 +15035,7 @@ public EndOfLineContext endOfLine() { } break; case COMMENT: + case SINGLEQUOTE: { State = 2490; comment(); } @@ -15231,6 +15232,7 @@ public RemCommentContext remComment() { public partial class CommentContext : ParserRuleContext { public ITerminalNode COMMENT() { return GetToken(VBAParser.COMMENT, 0); } + public ITerminalNode SINGLEQUOTE() { return GetToken(VBAParser.SINGLEQUOTE, 0); } public CommentContext(ParserRuleContext parent, int invokingState) : base(parent, invokingState) { @@ -15255,10 +15257,16 @@ public override TResult Accept(IParseTreeVisitor visitor) { public CommentContext comment() { CommentContext _localctx = new CommentContext(_ctx, State); EnterRule(_localctx, 282, RULE_comment); + int _la; try { EnterOuterAlt(_localctx, 1); { - State = 2518; Match(COMMENT); + State = 2518; + _la = _input.La(1); + if ( !(_la==COMMENT || _la==SINGLEQUOTE) ) { + _errHandler.RecoverInline(this); + } + Consume(); } } catch (RecognitionException re) { @@ -16087,7 +16095,7 @@ private bool valueStmt_sempred(ValueStmtContext _localctx, int predIndex) { "\x2\xE8\x2\xEA\x2\xEC\x2\xEE\x2\xF0\x2\xF2\x2\xF4\x2\xF6\x2\xF8\x2\xFA"+ "\x2\xFC\x2\xFE\x2\x100\x2\x102\x2\x104\x2\x106\x2\x108\x2\x10A\x2\x10C"+ "\x2\x10E\x2\x110\x2\x112\x2\x114\x2\x116\x2\x118\x2\x11A\x2\x11C\x2\x11E"+ - "\x2\x120\x2\x122\x2\x124\x2\x126\x2\x128\x2\x2\x18\x5\x2==II\xCC\xCC\x3"+ + "\x2\x120\x2\x122\x2\x124\x2\x126\x2\x128\x2\x2\x19\x5\x2==II\xCC\xCC\x3"+ "\x2LX\x4\x2\xD5\xD5\xD9\xD9\x3\x2os\x3\x2\x9C\x9D\a\x2\x39\x39==\x81\x81"+ "\xA5\xA5\xB0\xB0\x4\x2\xB3\xB4\xDD\xDD\x4\x2\x8D\x8F\xC3\xC3\x4\x2))+"+ "+\x4\x2\xC5\xC5\xCB\xCB\x4\x2\xE0\xE0\xE9\xE9\x4\x2\xE8\xE8\xEB\xEB\a"+ @@ -16095,109 +16103,109 @@ private bool valueStmt_sempred(ValueStmtContext _localctx, int predIndex) { "\x2?@\r\x2\x13\x13\x1F >>\x41\x41JJ\\\\\x83\x83\x87\x87\xC4\xC4\xC9\xC9"+ "\xD6\xD6\x3\x2\xF6\xF9\x5\x2,,.\x32\xEC\xEC\x6\x2vvzz\xA9\xA9\xAE\xAE"+ "\r\x2\x3(\x33_\x63\x63int\x8B\x90\x9B\x9E\x9F\xA4\xA9\xAE\xB3\xB5\xDE"+ - "\x105\x105\x4\x2\x100\x100\x102\x102\xBC1\x2\x12A\x3\x2\x2\x2\x4\x12E"+ - "\x3\x2\x2\x2\x6\x149\x3\x2\x2\x2\b\x154\x3\x2\x2\x2\n\x166\x3\x2\x2\x2"+ - "\f\x17E\x3\x2\x2\x2\xE\x182\x3\x2\x2\x2\x10\x197\x3\x2\x2\x2\x12\x1A1"+ - "\x3\x2\x2\x2\x14\x1A3\x3\x2\x2\x2\x16\x1B3\x3\x2\x2\x2\x18\x1B5\x3\x2"+ - "\x2\x2\x1A\x1CD\x3\x2\x2\x2\x1C\x21A\x3\x2\x2\x2\x1E\x21C\x3\x2\x2\x2"+ - " \x229\x3\x2\x2\x2\"\x22B\x3\x2\x2\x2$\x22F\x3\x2\x2\x2&\x233\x3\x2\x2"+ - "\x2(\x248\x3\x2\x2\x2*\x25A\x3\x2\x2\x2,\x26C\x3\x2\x2\x2.\x279\x3\x2"+ - "\x2\x2\x30\x2A3\x3\x2\x2\x2\x32\x2D9\x3\x2\x2\x2\x34\x2F8\x3\x2\x2\x2"+ - "\x36\x2FA\x3\x2\x2\x2\x38\x2FF\x3\x2\x2\x2:\x30D\x3\x2\x2\x2<\x31A\x3"+ - "\x2\x2\x2>\x32A\x3\x2\x2\x2@\x331\x3\x2\x2\x2\x42\x33B\x3\x2\x2\x2\x44"+ - "\x33D\x3\x2\x2\x2\x46\x349\x3\x2\x2\x2H\x35F\x3\x2\x2\x2J\x38C\x3\x2\x2"+ - "\x2L\x3AC\x3\x2\x2\x2N\x3C2\x3\x2\x2\x2P\x3C6\x3\x2\x2\x2R\x3E4\x3\x2"+ - "\x2\x2T\x3E6\x3\x2\x2\x2V\x3EF\x3\x2\x2\x2X\x3F1\x3\x2\x2\x2Z\x3FA\x3"+ - "\x2\x2\x2\\\x3FF\x3\x2\x2\x2^\x403\x3\x2\x2\x2`\x412\x3\x2\x2\x2\x62\x418"+ - "\x3\x2\x2\x2\x64\x424\x3\x2\x2\x2\x66\x430\x3\x2\x2\x2h\x434\x3\x2\x2"+ - "\x2j\x448\x3\x2\x2\x2l\x454\x3\x2\x2\x2n\x462\x3\x2\x2\x2p\x466\x3\x2"+ - "\x2\x2r\x46E\x3\x2\x2\x2t\x47A\x3\x2\x2\x2v\x48E\x3\x2\x2\x2x\x4A2\x3"+ - "\x2\x2\x2z\x4E7\x3\x2\x2\x2|\x4FA\x3\x2\x2\x2~\x4FC\x3\x2\x2\x2\x80\x50C"+ - "\x3\x2\x2\x2\x82\x52C\x3\x2\x2\x2\x84\x544\x3\x2\x2\x2\x86\x559\x3\x2"+ - "\x2\x2\x88\x56F\x3\x2\x2\x2\x8A\x582\x3\x2\x2\x2\x8C\x588\x3\x2\x2\x2"+ - "\x8E\x59C\x3\x2\x2\x2\x90\x5AE\x3\x2\x2\x2\x92\x5B0\x3\x2\x2\x2\x94\x5B8"+ - "\x3\x2\x2\x2\x96\x5BA\x3\x2\x2\x2\x98\x5BE\x3\x2\x2\x2\x9A\x5CA\x3\x2"+ - "\x2\x2\x9C\x5D6\x3\x2\x2\x2\x9E\x5F2\x3\x2\x2\x2\xA0\x5FE\x3\x2\x2\x2"+ - "\xA2\x61D\x3\x2\x2\x2\xA4\x61F\x3\x2\x2\x2\xA6\x635\x3\x2\x2\x2\xA8\x637"+ - "\x3\x2\x2\x2\xAA\x644\x3\x2\x2\x2\xAC\x650\x3\x2\x2\x2\xAE\x65C\x3\x2"+ - "\x2\x2\xB0\x661\x3\x2\x2\x2\xB2\x678\x3\x2\x2\x2\xB4\x685\x3\x2\x2\x2"+ - "\xB6\x693\x3\x2\x2\x2\xB8\x6AB\x3\x2\x2\x2\xBA\x6AF\x3\x2\x2\x2\xBC\x6F0"+ - "\x3\x2\x2\x2\xBE\x763\x3\x2\x2\x2\xC0\x770\x3\x2\x2\x2\xC2\x779\x3\x2"+ - "\x2\x2\xC4\x787\x3\x2\x2\x2\xC6\x7A3\x3\x2\x2\x2\xC8\x7AC\x3\x2\x2\x2"+ - "\xCA\x7B8\x3\x2\x2\x2\xCC\x7C6\x3\x2\x2\x2\xCE\x7C8\x3\x2\x2\x2\xD0\x7D6"+ - "\x3\x2\x2\x2\xD2\x7DC\x3\x2\x2\x2\xD4\x7DE\x3\x2\x2\x2\xD6\x7FF\x3\x2"+ - "\x2\x2\xD8\x826\x3\x2\x2\x2\xDA\x829\x3\x2\x2\x2\xDC\x84D\x3\x2\x2\x2"+ - "\xDE\x863\x3\x2\x2\x2\xE0\x865\x3\x2\x2\x2\xE2\x87D\x3\x2\x2\x2\xE4\x8A4"+ - "\x3\x2\x2\x2\xE6\x8C0\x3\x2\x2\x2\xE8\x8C9\x3\x2\x2\x2\xEA\x8D9\x3\x2"+ - "\x2\x2\xEC\x8ED\x3\x2\x2\x2\xEE\x8F8\x3\x2\x2\x2\xF0\x900\x3\x2\x2\x2"+ - "\xF2\x91B\x3\x2\x2\x2\xF4\x93F\x3\x2\x2\x2\xF6\x945\x3\x2\x2\x2\xF8\x958"+ - "\x3\x2\x2\x2\xFA\x95E\x3\x2\x2\x2\xFC\x960\x3\x2\x2\x2\xFE\x96F\x3\x2"+ - "\x2\x2\x100\x971\x3\x2\x2\x2\x102\x973\x3\x2\x2\x2\x104\x97B\x3\x2\x2"+ - "\x2\x106\x983\x3\x2\x2\x2\x108\x990\x3\x2\x2\x2\x10A\x99C\x3\x2\x2\x2"+ - "\x10C\x99E\x3\x2\x2\x2\x10E\x9A2\x3\x2\x2\x2\x110\x9AE\x3\x2\x2\x2\x112"+ - "\x9B0\x3\x2\x2\x2\x114\x9B2\x3\x2\x2\x2\x116\x9C7\x3\x2\x2\x2\x118\x9D3"+ - "\x3\x2\x2\x2\x11A\x9D6\x3\x2\x2\x2\x11C\x9D8\x3\x2\x2\x2\x11E\x9DA\x3"+ - "\x2\x2\x2\x120\x9E0\x3\x2\x2\x2\x122\x9E5\x3\x2\x2\x2\x124\xA24\x3\x2"+ - "\x2\x2\x126\xA28\x3\x2\x2\x2\x128\xA2B\x3\x2\x2\x2\x12A\x12B\x5\x4\x3"+ - "\x2\x12B\x12C\a\x2\x2\x3\x12C\x3\x3\x2\x2\x2\x12D\x12F\x5\x128\x95\x2"+ - "\x12E\x12D\x3\x2\x2\x2\x12E\x12F\x3\x2\x2\x2\x12F\x130\x3\x2\x2\x2\x130"+ - "\x134\x5\x118\x8D\x2\x131\x132\x5\x6\x4\x2\x132\x133\x5\x118\x8D\x2\x133"+ - "\x135\x3\x2\x2\x2\x134\x131\x3\x2\x2\x2\x134\x135\x3\x2\x2\x2\x135\x137"+ - "\x3\x2\x2\x2\x136\x138\x5\b\x5\x2\x137\x136\x3\x2\x2\x2\x137\x138\x3\x2"+ - "\x2\x2\x138\x139\x3\x2\x2\x2\x139\x13B\x5\x118\x8D\x2\x13A\x13C\x5\f\a"+ - "\x2\x13B\x13A\x3\x2\x2\x2\x13B\x13C\x3\x2\x2\x2\x13C\x13D\x3\x2\x2\x2"+ - "\x13D\x13F\x5\x118\x8D\x2\x13E\x140\x5\xE\b\x2\x13F\x13E\x3\x2\x2\x2\x13F"+ - "\x140\x3\x2\x2\x2\x140\x141\x3\x2\x2\x2\x141\x143\x5\x118\x8D\x2\x142"+ - "\x144\x5\x14\v\x2\x143\x142\x3\x2\x2\x2\x143\x144\x3\x2\x2\x2\x144\x145"+ - "\x3\x2\x2\x2\x145\x147\x5\x118\x8D\x2\x146\x148\x5\x128\x95\x2\x147\x146"+ - "\x3\x2\x2\x2\x147\x148\x3\x2\x2\x2\x148\x5\x3\x2\x2\x2\x149\x14A\a\xD7"+ - "\x2\x2\x14A\x14B\x5\x128\x95\x2\x14B\x14D\x5\x10C\x87\x2\x14C\x14E\x5"+ - "\x128\x95\x2\x14D\x14C\x3\x2\x2\x2\x14D\x14E\x3\x2\x2\x2\x14E\x150\x3"+ - "\x2\x2\x2\x14F\x151\a\x46\x2\x2\x150\x14F\x3\x2\x2\x2\x150\x151\x3\x2"+ - "\x2\x2\x151\x152\x3\x2\x2\x2\x152\x153\x5\x118\x8D\x2\x153\a\x3\x2\x2"+ - "\x2\x154\x15C\a;\x2\x2\x155\x156\x5\x128\x95\x2\x156\x157\a\x103\x2\x2"+ - "\x157\x158\x5\x128\x95\x2\x158\x15A\x5\xFA~\x2\x159\x15B\x5\x128\x95\x2"+ - "\x15A\x159\x3\x2\x2\x2\x15A\x15B\x3\x2\x2\x2\x15B\x15D\x3\x2\x2\x2\x15C"+ - "\x155\x3\x2\x2\x2\x15C\x15D\x3\x2\x2\x2\x15D\x15E\x3\x2\x2\x2\x15E\x160"+ - "\x5\x118\x8D\x2\x15F\x161\x5\n\x6\x2\x160\x15F\x3\x2\x2\x2\x161\x162\x3"+ - "\x2\x2\x2\x162\x160\x3\x2\x2\x2\x162\x163\x3\x2\x2\x2\x163\x164\x3\x2"+ - "\x2\x2\x164\x165\ai\x2\x2\x165\t\x3\x2\x2\x2\x166\x16A\x5\xFA~\x2\x167"+ - "\x169\x5\x128\x95\x2\x168\x167\x3\x2\x2\x2\x169\x16C\x3\x2\x2\x2\x16A"+ - "\x168\x3\x2\x2\x2\x16A\x16B\x3\x2\x2\x2\x16B\x16D\x3\x2\x2\x2\x16C\x16A"+ - "\x3\x2\x2\x2\x16D\x171\a\xE2\x2\x2\x16E\x170\x5\x128\x95\x2\x16F\x16E"+ - "\x3\x2\x2\x2\x170\x173\x3\x2\x2\x2\x171\x16F\x3\x2\x2\x2\x171\x172\x3"+ - "\x2\x2\x2\x172\x174\x3\x2\x2\x2\x173\x171\x3\x2\x2\x2\x174\x177\x5\x10A"+ - "\x86\x2\x175\x176\a*\x2\x2\x176\x178\x5\x10C\x87\x2\x177\x175\x3\x2\x2"+ - "\x2\x177\x178\x3\x2\x2\x2\x178\x179\x3\x2\x2\x2\x179\x17A\x5\x118\x8D"+ - "\x2\x17A\v\x3\x2\x2\x2\x17B\x17C\x5\x18\r\x2\x17C\x17D\x5\x118\x8D\x2"+ - "\x17D\x17F\x3\x2\x2\x2\x17E\x17B\x3\x2\x2\x2\x17F\x180\x3\x2\x2\x2\x180"+ - "\x17E\x3\x2\x2\x2\x180\x181\x3\x2\x2\x2\x181\r\x3\x2\x2\x2\x182\x188\x5"+ - "\x12\n\x2\x183\x184\x5\x118\x8D\x2\x184\x185\x5\x12\n\x2\x185\x187\x3"+ - "\x2\x2\x2\x186\x183\x3\x2\x2\x2\x187\x18A\x3\x2\x2\x2\x188\x186\x3\x2"+ - "\x2\x2\x188\x189\x3\x2\x2\x2\x189\x18B\x3\x2\x2\x2\x18A\x188\x3\x2\x2"+ - "\x2\x18B\x18C\x5\x118\x8D\x2\x18C\xF\x3\x2\x2\x2\x18D\x18E\a\xA0\x2\x2"+ - "\x18E\x18F\x5\x128\x95\x2\x18F\x190\x5\x10C\x87\x2\x190\x198\x3\x2\x2"+ - "\x2\x191\x192\a\xA2\x2\x2\x192\x193\x5\x128\x95\x2\x193\x194\t\x2\x2\x2"+ - "\x194\x198\x3\x2\x2\x2\x195\x198\a\xA1\x2\x2\x196\x198\a\xA3\x2\x2\x197"+ - "\x18D\x3\x2\x2\x2\x197\x191\x3\x2\x2\x2\x197\x195\x3\x2\x2\x2\x197\x196"+ - "\x3\x2\x2\x2\x198\x11\x3\x2\x2\x2\x199\x1A2\x5.\x18\x2\x19A\x1A2\x5\x38"+ - "\x1D\x2\x19B\x1A2\x5@!\x2\x19C\x1A2\x5(\x15\x2\x19D\x1A2\x5\\/\x2\x19E"+ - "\x1A2\x5\xC0\x61\x2\x19F\x1A2\x5\x10\t\x2\x1A0\x1A2\x5\xB4[\x2\x1A1\x199"+ - "\x3\x2\x2\x2\x1A1\x19A\x3\x2\x2\x2\x1A1\x19B\x3\x2\x2\x2\x1A1\x19C\x3"+ - "\x2\x2\x2\x1A1\x19D\x3\x2\x2\x2\x1A1\x19E\x3\x2\x2\x2\x1A1\x19F\x3\x2"+ - "\x2\x2\x1A1\x1A0\x3\x2\x2\x2\x1A2\x13\x3\x2\x2\x2\x1A3\x1A9\x5\x16\f\x2"+ - "\x1A4\x1A5\x5\x118\x8D\x2\x1A5\x1A6\x5\x16\f\x2\x1A6\x1A8\x3\x2\x2\x2"+ - "\x1A7\x1A4\x3\x2\x2\x2\x1A8\x1AB\x3\x2\x2\x2\x1A9\x1A7\x3\x2\x2\x2\x1A9"+ - "\x1AA\x3\x2\x2\x2\x1AA\x1AC\x3\x2\x2\x2\x1AB\x1A9\x3\x2\x2\x2\x1AC\x1AD"+ - "\x5\x118\x8D\x2\x1AD\x15\x3\x2\x2\x2\x1AE\x1B4\x5J&\x2\x1AF\x1B4\x5\x80"+ - "\x41\x2\x1B0\x1B4\x5\x82\x42\x2\x1B1\x1B4\x5\x84\x43\x2\x1B2\x1B4\x5\xB0"+ - "Y\x2\x1B3\x1AE\x3\x2\x2\x2\x1B3\x1AF\x3\x2\x2\x2\x1B3\x1B0\x3\x2\x2\x2"+ - "\x1B3\x1B1\x3\x2\x2\x2\x1B3\x1B2\x3\x2\x2\x2\x1B4\x17\x3\x2\x2\x2\x1B5"+ - "\x1B6\a\x37\x2\x2\x1B6\x1B7\x5\x128\x95\x2\x1B7\x1B9\x5\xDEp\x2\x1B8\x1BA"+ - "\x5\x128\x95\x2\x1B9\x1B8\x3\x2\x2\x2\x1B9\x1BA\x3\x2\x2\x2\x1BA\x1BB"+ - "\x3\x2\x2\x2\x1BB\x1BD\a\xE2\x2\x2\x1BC\x1BE\x5\x128\x95\x2\x1BD\x1BC"+ - "\x3\x2\x2\x2\x1BD\x1BE\x3\x2\x2\x2\x1BE\x1BF\x3\x2\x2\x2\x1BF\x1CA\x5"+ - "\x10A\x86\x2\x1C0\x1C2\x5\x128\x95\x2\x1C1\x1C0\x3\x2\x2\x2\x1C1\x1C2"+ + "\x105\x105\x3\x2\xFD\xFE\x4\x2\x100\x100\x102\x102\xBC1\x2\x12A\x3\x2"+ + "\x2\x2\x4\x12E\x3\x2\x2\x2\x6\x149\x3\x2\x2\x2\b\x154\x3\x2\x2\x2\n\x166"+ + "\x3\x2\x2\x2\f\x17E\x3\x2\x2\x2\xE\x182\x3\x2\x2\x2\x10\x197\x3\x2\x2"+ + "\x2\x12\x1A1\x3\x2\x2\x2\x14\x1A3\x3\x2\x2\x2\x16\x1B3\x3\x2\x2\x2\x18"+ + "\x1B5\x3\x2\x2\x2\x1A\x1CD\x3\x2\x2\x2\x1C\x21A\x3\x2\x2\x2\x1E\x21C\x3"+ + "\x2\x2\x2 \x229\x3\x2\x2\x2\"\x22B\x3\x2\x2\x2$\x22F\x3\x2\x2\x2&\x233"+ + "\x3\x2\x2\x2(\x248\x3\x2\x2\x2*\x25A\x3\x2\x2\x2,\x26C\x3\x2\x2\x2.\x279"+ + "\x3\x2\x2\x2\x30\x2A3\x3\x2\x2\x2\x32\x2D9\x3\x2\x2\x2\x34\x2F8\x3\x2"+ + "\x2\x2\x36\x2FA\x3\x2\x2\x2\x38\x2FF\x3\x2\x2\x2:\x30D\x3\x2\x2\x2<\x31A"+ + "\x3\x2\x2\x2>\x32A\x3\x2\x2\x2@\x331\x3\x2\x2\x2\x42\x33B\x3\x2\x2\x2"+ + "\x44\x33D\x3\x2\x2\x2\x46\x349\x3\x2\x2\x2H\x35F\x3\x2\x2\x2J\x38C\x3"+ + "\x2\x2\x2L\x3AC\x3\x2\x2\x2N\x3C2\x3\x2\x2\x2P\x3C6\x3\x2\x2\x2R\x3E4"+ + "\x3\x2\x2\x2T\x3E6\x3\x2\x2\x2V\x3EF\x3\x2\x2\x2X\x3F1\x3\x2\x2\x2Z\x3FA"+ + "\x3\x2\x2\x2\\\x3FF\x3\x2\x2\x2^\x403\x3\x2\x2\x2`\x412\x3\x2\x2\x2\x62"+ + "\x418\x3\x2\x2\x2\x64\x424\x3\x2\x2\x2\x66\x430\x3\x2\x2\x2h\x434\x3\x2"+ + "\x2\x2j\x448\x3\x2\x2\x2l\x454\x3\x2\x2\x2n\x462\x3\x2\x2\x2p\x466\x3"+ + "\x2\x2\x2r\x46E\x3\x2\x2\x2t\x47A\x3\x2\x2\x2v\x48E\x3\x2\x2\x2x\x4A2"+ + "\x3\x2\x2\x2z\x4E7\x3\x2\x2\x2|\x4FA\x3\x2\x2\x2~\x4FC\x3\x2\x2\x2\x80"+ + "\x50C\x3\x2\x2\x2\x82\x52C\x3\x2\x2\x2\x84\x544\x3\x2\x2\x2\x86\x559\x3"+ + "\x2\x2\x2\x88\x56F\x3\x2\x2\x2\x8A\x582\x3\x2\x2\x2\x8C\x588\x3\x2\x2"+ + "\x2\x8E\x59C\x3\x2\x2\x2\x90\x5AE\x3\x2\x2\x2\x92\x5B0\x3\x2\x2\x2\x94"+ + "\x5B8\x3\x2\x2\x2\x96\x5BA\x3\x2\x2\x2\x98\x5BE\x3\x2\x2\x2\x9A\x5CA\x3"+ + "\x2\x2\x2\x9C\x5D6\x3\x2\x2\x2\x9E\x5F2\x3\x2\x2\x2\xA0\x5FE\x3\x2\x2"+ + "\x2\xA2\x61D\x3\x2\x2\x2\xA4\x61F\x3\x2\x2\x2\xA6\x635\x3\x2\x2\x2\xA8"+ + "\x637\x3\x2\x2\x2\xAA\x644\x3\x2\x2\x2\xAC\x650\x3\x2\x2\x2\xAE\x65C\x3"+ + "\x2\x2\x2\xB0\x661\x3\x2\x2\x2\xB2\x678\x3\x2\x2\x2\xB4\x685\x3\x2\x2"+ + "\x2\xB6\x693\x3\x2\x2\x2\xB8\x6AB\x3\x2\x2\x2\xBA\x6AF\x3\x2\x2\x2\xBC"+ + "\x6F0\x3\x2\x2\x2\xBE\x763\x3\x2\x2\x2\xC0\x770\x3\x2\x2\x2\xC2\x779\x3"+ + "\x2\x2\x2\xC4\x787\x3\x2\x2\x2\xC6\x7A3\x3\x2\x2\x2\xC8\x7AC\x3\x2\x2"+ + "\x2\xCA\x7B8\x3\x2\x2\x2\xCC\x7C6\x3\x2\x2\x2\xCE\x7C8\x3\x2\x2\x2\xD0"+ + "\x7D6\x3\x2\x2\x2\xD2\x7DC\x3\x2\x2\x2\xD4\x7DE\x3\x2\x2\x2\xD6\x7FF\x3"+ + "\x2\x2\x2\xD8\x826\x3\x2\x2\x2\xDA\x829\x3\x2\x2\x2\xDC\x84D\x3\x2\x2"+ + "\x2\xDE\x863\x3\x2\x2\x2\xE0\x865\x3\x2\x2\x2\xE2\x87D\x3\x2\x2\x2\xE4"+ + "\x8A4\x3\x2\x2\x2\xE6\x8C0\x3\x2\x2\x2\xE8\x8C9\x3\x2\x2\x2\xEA\x8D9\x3"+ + "\x2\x2\x2\xEC\x8ED\x3\x2\x2\x2\xEE\x8F8\x3\x2\x2\x2\xF0\x900\x3\x2\x2"+ + "\x2\xF2\x91B\x3\x2\x2\x2\xF4\x93F\x3\x2\x2\x2\xF6\x945\x3\x2\x2\x2\xF8"+ + "\x958\x3\x2\x2\x2\xFA\x95E\x3\x2\x2\x2\xFC\x960\x3\x2\x2\x2\xFE\x96F\x3"+ + "\x2\x2\x2\x100\x971\x3\x2\x2\x2\x102\x973\x3\x2\x2\x2\x104\x97B\x3\x2"+ + "\x2\x2\x106\x983\x3\x2\x2\x2\x108\x990\x3\x2\x2\x2\x10A\x99C\x3\x2\x2"+ + "\x2\x10C\x99E\x3\x2\x2\x2\x10E\x9A2\x3\x2\x2\x2\x110\x9AE\x3\x2\x2\x2"+ + "\x112\x9B0\x3\x2\x2\x2\x114\x9B2\x3\x2\x2\x2\x116\x9C7\x3\x2\x2\x2\x118"+ + "\x9D3\x3\x2\x2\x2\x11A\x9D6\x3\x2\x2\x2\x11C\x9D8\x3\x2\x2\x2\x11E\x9DA"+ + "\x3\x2\x2\x2\x120\x9E0\x3\x2\x2\x2\x122\x9E5\x3\x2\x2\x2\x124\xA24\x3"+ + "\x2\x2\x2\x126\xA28\x3\x2\x2\x2\x128\xA2B\x3\x2\x2\x2\x12A\x12B\x5\x4"+ + "\x3\x2\x12B\x12C\a\x2\x2\x3\x12C\x3\x3\x2\x2\x2\x12D\x12F\x5\x128\x95"+ + "\x2\x12E\x12D\x3\x2\x2\x2\x12E\x12F\x3\x2\x2\x2\x12F\x130\x3\x2\x2\x2"+ + "\x130\x134\x5\x118\x8D\x2\x131\x132\x5\x6\x4\x2\x132\x133\x5\x118\x8D"+ + "\x2\x133\x135\x3\x2\x2\x2\x134\x131\x3\x2\x2\x2\x134\x135\x3\x2\x2\x2"+ + "\x135\x137\x3\x2\x2\x2\x136\x138\x5\b\x5\x2\x137\x136\x3\x2\x2\x2\x137"+ + "\x138\x3\x2\x2\x2\x138\x139\x3\x2\x2\x2\x139\x13B\x5\x118\x8D\x2\x13A"+ + "\x13C\x5\f\a\x2\x13B\x13A\x3\x2\x2\x2\x13B\x13C\x3\x2\x2\x2\x13C\x13D"+ + "\x3\x2\x2\x2\x13D\x13F\x5\x118\x8D\x2\x13E\x140\x5\xE\b\x2\x13F\x13E\x3"+ + "\x2\x2\x2\x13F\x140\x3\x2\x2\x2\x140\x141\x3\x2\x2\x2\x141\x143\x5\x118"+ + "\x8D\x2\x142\x144\x5\x14\v\x2\x143\x142\x3\x2\x2\x2\x143\x144\x3\x2\x2"+ + "\x2\x144\x145\x3\x2\x2\x2\x145\x147\x5\x118\x8D\x2\x146\x148\x5\x128\x95"+ + "\x2\x147\x146\x3\x2\x2\x2\x147\x148\x3\x2\x2\x2\x148\x5\x3\x2\x2\x2\x149"+ + "\x14A\a\xD7\x2\x2\x14A\x14B\x5\x128\x95\x2\x14B\x14D\x5\x10C\x87\x2\x14C"+ + "\x14E\x5\x128\x95\x2\x14D\x14C\x3\x2\x2\x2\x14D\x14E\x3\x2\x2\x2\x14E"+ + "\x150\x3\x2\x2\x2\x14F\x151\a\x46\x2\x2\x150\x14F\x3\x2\x2\x2\x150\x151"+ + "\x3\x2\x2\x2\x151\x152\x3\x2\x2\x2\x152\x153\x5\x118\x8D\x2\x153\a\x3"+ + "\x2\x2\x2\x154\x15C\a;\x2\x2\x155\x156\x5\x128\x95\x2\x156\x157\a\x103"+ + "\x2\x2\x157\x158\x5\x128\x95\x2\x158\x15A\x5\xFA~\x2\x159\x15B\x5\x128"+ + "\x95\x2\x15A\x159\x3\x2\x2\x2\x15A\x15B\x3\x2\x2\x2\x15B\x15D\x3\x2\x2"+ + "\x2\x15C\x155\x3\x2\x2\x2\x15C\x15D\x3\x2\x2\x2\x15D\x15E\x3\x2\x2\x2"+ + "\x15E\x160\x5\x118\x8D\x2\x15F\x161\x5\n\x6\x2\x160\x15F\x3\x2\x2\x2\x161"+ + "\x162\x3\x2\x2\x2\x162\x160\x3\x2\x2\x2\x162\x163\x3\x2\x2\x2\x163\x164"+ + "\x3\x2\x2\x2\x164\x165\ai\x2\x2\x165\t\x3\x2\x2\x2\x166\x16A\x5\xFA~\x2"+ + "\x167\x169\x5\x128\x95\x2\x168\x167\x3\x2\x2\x2\x169\x16C\x3\x2\x2\x2"+ + "\x16A\x168\x3\x2\x2\x2\x16A\x16B\x3\x2\x2\x2\x16B\x16D\x3\x2\x2\x2\x16C"+ + "\x16A\x3\x2\x2\x2\x16D\x171\a\xE2\x2\x2\x16E\x170\x5\x128\x95\x2\x16F"+ + "\x16E\x3\x2\x2\x2\x170\x173\x3\x2\x2\x2\x171\x16F\x3\x2\x2\x2\x171\x172"+ + "\x3\x2\x2\x2\x172\x174\x3\x2\x2\x2\x173\x171\x3\x2\x2\x2\x174\x177\x5"+ + "\x10A\x86\x2\x175\x176\a*\x2\x2\x176\x178\x5\x10C\x87\x2\x177\x175\x3"+ + "\x2\x2\x2\x177\x178\x3\x2\x2\x2\x178\x179\x3\x2\x2\x2\x179\x17A\x5\x118"+ + "\x8D\x2\x17A\v\x3\x2\x2\x2\x17B\x17C\x5\x18\r\x2\x17C\x17D\x5\x118\x8D"+ + "\x2\x17D\x17F\x3\x2\x2\x2\x17E\x17B\x3\x2\x2\x2\x17F\x180\x3\x2\x2\x2"+ + "\x180\x17E\x3\x2\x2\x2\x180\x181\x3\x2\x2\x2\x181\r\x3\x2\x2\x2\x182\x188"+ + "\x5\x12\n\x2\x183\x184\x5\x118\x8D\x2\x184\x185\x5\x12\n\x2\x185\x187"+ + "\x3\x2\x2\x2\x186\x183\x3\x2\x2\x2\x187\x18A\x3\x2\x2\x2\x188\x186\x3"+ + "\x2\x2\x2\x188\x189\x3\x2\x2\x2\x189\x18B\x3\x2\x2\x2\x18A\x188\x3\x2"+ + "\x2\x2\x18B\x18C\x5\x118\x8D\x2\x18C\xF\x3\x2\x2\x2\x18D\x18E\a\xA0\x2"+ + "\x2\x18E\x18F\x5\x128\x95\x2\x18F\x190\x5\x10C\x87\x2\x190\x198\x3\x2"+ + "\x2\x2\x191\x192\a\xA2\x2\x2\x192\x193\x5\x128\x95\x2\x193\x194\t\x2\x2"+ + "\x2\x194\x198\x3\x2\x2\x2\x195\x198\a\xA1\x2\x2\x196\x198\a\xA3\x2\x2"+ + "\x197\x18D\x3\x2\x2\x2\x197\x191\x3\x2\x2\x2\x197\x195\x3\x2\x2\x2\x197"+ + "\x196\x3\x2\x2\x2\x198\x11\x3\x2\x2\x2\x199\x1A2\x5.\x18\x2\x19A\x1A2"+ + "\x5\x38\x1D\x2\x19B\x1A2\x5@!\x2\x19C\x1A2\x5(\x15\x2\x19D\x1A2\x5\\/"+ + "\x2\x19E\x1A2\x5\xC0\x61\x2\x19F\x1A2\x5\x10\t\x2\x1A0\x1A2\x5\xB4[\x2"+ + "\x1A1\x199\x3\x2\x2\x2\x1A1\x19A\x3\x2\x2\x2\x1A1\x19B\x3\x2\x2\x2\x1A1"+ + "\x19C\x3\x2\x2\x2\x1A1\x19D\x3\x2\x2\x2\x1A1\x19E\x3\x2\x2\x2\x1A1\x19F"+ + "\x3\x2\x2\x2\x1A1\x1A0\x3\x2\x2\x2\x1A2\x13\x3\x2\x2\x2\x1A3\x1A9\x5\x16"+ + "\f\x2\x1A4\x1A5\x5\x118\x8D\x2\x1A5\x1A6\x5\x16\f\x2\x1A6\x1A8\x3\x2\x2"+ + "\x2\x1A7\x1A4\x3\x2\x2\x2\x1A8\x1AB\x3\x2\x2\x2\x1A9\x1A7\x3\x2\x2\x2"+ + "\x1A9\x1AA\x3\x2\x2\x2\x1AA\x1AC\x3\x2\x2\x2\x1AB\x1A9\x3\x2\x2\x2\x1AC"+ + "\x1AD\x5\x118\x8D\x2\x1AD\x15\x3\x2\x2\x2\x1AE\x1B4\x5J&\x2\x1AF\x1B4"+ + "\x5\x80\x41\x2\x1B0\x1B4\x5\x82\x42\x2\x1B1\x1B4\x5\x84\x43\x2\x1B2\x1B4"+ + "\x5\xB0Y\x2\x1B3\x1AE\x3\x2\x2\x2\x1B3\x1AF\x3\x2\x2\x2\x1B3\x1B0\x3\x2"+ + "\x2\x2\x1B3\x1B1\x3\x2\x2\x2\x1B3\x1B2\x3\x2\x2\x2\x1B4\x17\x3\x2\x2\x2"+ + "\x1B5\x1B6\a\x37\x2\x2\x1B6\x1B7\x5\x128\x95\x2\x1B7\x1B9\x5\xDEp\x2\x1B8"+ + "\x1BA\x5\x128\x95\x2\x1B9\x1B8\x3\x2\x2\x2\x1B9\x1BA\x3\x2\x2\x2\x1BA"+ + "\x1BB\x3\x2\x2\x2\x1BB\x1BD\a\xE2\x2\x2\x1BC\x1BE\x5\x128\x95\x2\x1BD"+ + "\x1BC\x3\x2\x2\x2\x1BD\x1BE\x3\x2\x2\x2\x1BE\x1BF\x3\x2\x2\x2\x1BF\x1CA"+ + "\x5\x10A\x86\x2\x1C0\x1C2\x5\x128\x95\x2\x1C1\x1C0\x3\x2\x2\x2\x1C1\x1C2"+ "\x3\x2\x2\x2\x1C2\x1C3\x3\x2\x2\x2\x1C3\x1C5\a)\x2\x2\x1C4\x1C6\x5\x128"+ "\x95\x2\x1C5\x1C4\x3\x2\x2\x2\x1C5\x1C6\x3\x2\x2\x2\x1C6\x1C7\x3\x2\x2"+ "\x2\x1C7\x1C9\x5\x10A\x86\x2\x1C8\x1C1\x3\x2\x2\x2\x1C9\x1CC\x3\x2\x2"+ @@ -17007,7 +17015,7 @@ private bool valueStmt_sempred(ValueStmtContext _localctx, int predIndex) { "\x2\x9CF\x9CE\x3\x2\x2\x2\x9CF\x9D0\x3\x2\x2\x2\x9D0\x9D2\x3\x2\x2\x2"+ "\x9D1\x9C9\x3\x2\x2\x2\x9D1\x9CB\x3\x2\x2\x2\x9D2\x9D5\x3\x2\x2\x2\x9D3"+ "\x9D1\x3\x2\x2\x2\x9D3\x9D4\x3\x2\x2\x2\x9D4\x119\x3\x2\x2\x2\x9D5\x9D3"+ - "\x3\x2\x2\x2\x9D6\x9D7\a\xFC\x2\x2\x9D7\x11B\x3\x2\x2\x2\x9D8\x9D9\a\xFD"+ + "\x3\x2\x2\x2\x9D6\x9D7\a\xFC\x2\x2\x9D7\x11B\x3\x2\x2\x2\x9D8\x9D9\t\x17"+ "\x2\x2\x9D9\x11D\x3\x2\x2\x2\x9DA\x9DC\a\xFE\x2\x2\x9DB\x9DD\x5\x120\x91"+ "\x2\x9DC\x9DB\x3\x2\x2\x2\x9DD\x9DE\x3\x2\x2\x2\x9DE\x9DC\x3\x2\x2\x2"+ "\x9DE\x9DF\x3\x2\x2\x2\x9DF\x11F\x3\x2\x2\x2\x9E0\x9E1\a/\x2\x2\x9E1\x9E3"+ @@ -17041,7 +17049,7 @@ private bool valueStmt_sempred(ValueStmtContext _localctx, int predIndex) { "\x9E7\x3\x2\x2\x2\xA24\x9EC\x3\x2\x2\x2\xA24\x9FE\x3\x2\x2\x2\xA24\xA0D"+ "\x3\x2\x2\x2\xA25\x125\x3\x2\x2\x2\xA26\xA29\a\x101\x2\x2\xA27\xA29\x5"+ "\x10A\x86\x2\xA28\xA26\x3\x2\x2\x2\xA28\xA27\x3\x2\x2\x2\xA29\x127\x3"+ - "\x2\x2\x2\xA2A\xA2C\t\x17\x2\x2\xA2B\xA2A\x3\x2\x2\x2\xA2C\xA2D\x3\x2"+ + "\x2\x2\x2\xA2A\xA2C\t\x18\x2\x2\xA2B\xA2A\x3\x2\x2\x2\xA2C\xA2D\x3\x2"+ "\x2\x2\xA2D\xA2B\x3\x2\x2\x2\xA2D\xA2E\x3\x2\x2\x2\xA2E\x129\x3\x2\x2"+ "\x2\x1BB\x12E\x134\x137\x13B\x13F\x143\x147\x14D\x150\x15A\x15C\x162\x16A"+ "\x171\x177\x180\x188\x197\x1A1\x1A9\x1B3\x1B9\x1BD\x1C1\x1C5\x1CA\x1D3"+ diff --git a/Rubberduck.Parsing/Grammar/VBAParser.g4 b/Rubberduck.Parsing/Grammar/VBAParser.g4 index 060f3e3040..1e2723d0e9 100644 --- a/Rubberduck.Parsing/Grammar/VBAParser.g4 +++ b/Rubberduck.Parsing/Grammar/VBAParser.g4 @@ -573,7 +573,7 @@ endOfStatement : (endOfLine | whiteSpace? COLON whiteSpace?)*; remComment : REMCOMMENT; -comment : COMMENT; +comment : SINGLEQUOTE | COMMENT; annotationList : SINGLEQUOTE annotation+; diff --git a/Rubberduck.Parsing/Symbols/ReferencedDeclarationsCollector.cs b/Rubberduck.Parsing/Symbols/ReferencedDeclarationsCollector.cs index 423d2f91a9..6c80a76f60 100644 --- a/Rubberduck.Parsing/Symbols/ReferencedDeclarationsCollector.cs +++ b/Rubberduck.Parsing/Symbols/ReferencedDeclarationsCollector.cs @@ -186,10 +186,14 @@ public IEnumerable GetDeclarationsForReference(Reference reference) { moduleDeclaration = new ProceduralModuleDeclaration(typeQualifiedMemberName, projectDeclaration, typeName, true, new List(), attributes); } - else + else if (typeDeclarationType == DeclarationType.ClassModule) { moduleDeclaration = new ClassModuleDeclaration(typeQualifiedMemberName, projectDeclaration, typeName, true, new List(), attributes, isExposed: true); } + else + { + moduleDeclaration = new Declaration(typeQualifiedMemberName, projectDeclaration, projectDeclaration, typeName, false, false, Accessibility.Global, typeDeclarationType, null, Selection.Home, true, null, attributes); + } yield return moduleDeclaration; for (var memberIndex = 0; memberIndex < typeAttributes.cFuncs; memberIndex++) diff --git a/RubberduckTests/Grammar/VBAParserTests.cs b/RubberduckTests/Grammar/VBAParserTests.cs index 9f9701ee0f..1b9bc64d99 100644 --- a/RubberduckTests/Grammar/VBAParserTests.cs +++ b/RubberduckTests/Grammar/VBAParserTests.cs @@ -86,6 +86,22 @@ public void TestModuleConfig() AssertTree(parseResult.Item1, parseResult.Item2, "//moduleConfigElement"); } + [TestMethod] + public void TestEmptyComment() + { + string code = @"'"; + var parseResult = Parse(code); + AssertTree(parseResult.Item1, parseResult.Item2, "//comment"); + } + + [TestMethod] + public void TestOneCharComment() + { + string code = @"'a"; + var parseResult = Parse(code); + AssertTree(parseResult.Item1, parseResult.Item2, "//comment"); + } + [TestMethod] public void TestDictionaryCallLineContinuation() { diff --git a/RubberduckTests/Inspections/ConstantNotUsedInspectionTests.cs b/RubberduckTests/Inspections/ConstantNotUsedInspectionTests.cs index dac7895401..d35105e3a2 100644 --- a/RubberduckTests/Inspections/ConstantNotUsedInspectionTests.cs +++ b/RubberduckTests/Inspections/ConstantNotUsedInspectionTests.cs @@ -10,100 +10,6 @@ namespace RubberduckTests.Inspections { - [TestClass] - public class ObjectVariableNotSetInspectionTests - { - [TestMethod] - public void ObjectVariableNotSet_GivenStringVariable_ReturnsNoResult() - { - const string inputCode = @" -Private Sub Workbook_Open() - - Dim target As String - target = Range(""A1"") - - target.Value = ""all good"" - -End Sub"; - - //Arrange - var builder = new MockVbeBuilder(); - VBComponent component; - var vbe = builder.BuildFromSingleStandardModule(inputCode, out component); - var mockHost = new Mock(); - mockHost.SetupAllProperties(); - var parser = MockParser.Create(vbe.Object, new RubberduckParserState()); - - parser.Parse(); - if (parser.State.Status == ParserState.Error) { Assert.Inconclusive("Parser Error"); } - - var inspection = new ObjectVariableNotSetInspection(parser.State); - var inspectionResults = inspection.GetInspectionResults(); - - Assert.AreEqual(0, inspectionResults.Count()); - } - - [TestMethod] - public void ObjectVariableNotSet_GivenObjectVariableNotSet_ReturnsResult() - { - const string inputCode = @" -Private Sub Workbook_Open() - - Dim target As Range - target = Range(""A1"") - - target.Value = ""forgot something?"" - -End Sub"; - - //Arrange - var builder = new MockVbeBuilder(); - VBComponent component; - var vbe = builder.BuildFromSingleStandardModule(inputCode, out component); - var mockHost = new Mock(); - mockHost.SetupAllProperties(); - var parser = MockParser.Create(vbe.Object, new RubberduckParserState()); - - parser.Parse(); - if (parser.State.Status == ParserState.Error) { Assert.Inconclusive("Parser Error"); } - - var inspection = new ObjectVariableNotSetInspection(parser.State); - var inspectionResults = inspection.GetInspectionResults(); - - Assert.AreEqual(1, inspectionResults.Count()); - } - - [TestMethod] - public void ObjectVariableNotSet_GivenSetObjectVariable_ReturnsNoResult() - { - const string inputCode = @" -Private Sub Workbook_Open() - - Dim target As Range - Set target = Range(""A1"") - - target.Value = ""All good"" - -End Sub"; - - //Arrange - var builder = new MockVbeBuilder(); - VBComponent component; - var vbe = builder.BuildFromSingleStandardModule(inputCode, out component); - var mockHost = new Mock(); - mockHost.SetupAllProperties(); - var parser = MockParser.Create(vbe.Object, new RubberduckParserState()); - - parser.Parse(); - if (parser.State.Status == ParserState.Error) { Assert.Inconclusive("Parser Error"); } - - var inspection = new ObjectVariableNotSetInspection(parser.State); - var inspectionResults = inspection.GetInspectionResults(); - - Assert.AreEqual(0, inspectionResults.Count()); - } - } - [TestClass] public class ConstantNotUsedInspectionTests { diff --git a/RubberduckTests/Inspections/ObjectVariableNotSetInpsectionTests.cs b/RubberduckTests/Inspections/ObjectVariableNotSetInpsectionTests.cs new file mode 100644 index 0000000000..18305152c7 --- /dev/null +++ b/RubberduckTests/Inspections/ObjectVariableNotSetInpsectionTests.cs @@ -0,0 +1,135 @@ +using System.Linq; +using Microsoft.Vbe.Interop; +using Microsoft.VisualStudio.TestTools.UnitTesting; +using Moq; +using Rubberduck.Inspections; +using Rubberduck.Parsing.VBA; +using Rubberduck.VBEditor.VBEHost; +using RubberduckTests.Mocks; + +namespace RubberduckTests.Inspections +{ + [TestClass] + public class ObjectVariableNotSetInpsectionTests + { + [TestMethod] + public void ObjectVariableNotSet_GivenStringVariable_ReturnsNoResult() + { + const string inputCode = @" +Private Sub Workbook_Open() + + Dim target As String + target = Range(""A1"") + + target.Value = ""all good"" + +End Sub"; + + //Arrange + var builder = new MockVbeBuilder(); + VBComponent component; + var vbe = builder.BuildFromSingleStandardModule(inputCode, out component); + var mockHost = new Mock(); + mockHost.SetupAllProperties(); + var parser = MockParser.Create(vbe.Object, new RubberduckParserState()); + + parser.Parse(); + if (parser.State.Status == ParserState.Error) { Assert.Inconclusive("Parser Error"); } + + var inspection = new ObjectVariableNotSetInspection(parser.State); + var inspectionResults = inspection.GetInspectionResults(); + + Assert.AreEqual(0, inspectionResults.Count()); + } + + [TestMethod] + public void ObjectVariableNotSet_GivenVariantVariable_ReturnsNoResult() + { + const string inputCode = @" +Private Sub Workbook_Open() + + Dim target As Variant + target = Range(""A1"") + + target.Value = ""all good"" + +End Sub"; + + //Arrange + var builder = new MockVbeBuilder(); + VBComponent component; + var vbe = builder.BuildFromSingleStandardModule(inputCode, out component); + var mockHost = new Mock(); + mockHost.SetupAllProperties(); + var parser = MockParser.Create(vbe.Object, new RubberduckParserState()); + + parser.Parse(); + if (parser.State.Status == ParserState.Error) { Assert.Inconclusive("Parser Error"); } + + var inspection = new ObjectVariableNotSetInspection(parser.State); + var inspectionResults = inspection.GetInspectionResults(); + + Assert.AreEqual(0, inspectionResults.Count()); + } + + [TestMethod] + public void ObjectVariableNotSet_GivenObjectVariableNotSet_ReturnsResult() + { + const string inputCode = @" +Private Sub Workbook_Open() + + Dim target As Range + target = Range(""A1"") + + target.Value = ""forgot something?"" + +End Sub"; + + //Arrange + var builder = new MockVbeBuilder(); + VBComponent component; + var vbe = builder.BuildFromSingleStandardModule(inputCode, out component); + var mockHost = new Mock(); + mockHost.SetupAllProperties(); + var parser = MockParser.Create(vbe.Object, new RubberduckParserState()); + + parser.Parse(); + if (parser.State.Status == ParserState.Error) { Assert.Inconclusive("Parser Error"); } + + var inspection = new ObjectVariableNotSetInspection(parser.State); + var inspectionResults = inspection.GetInspectionResults(); + + Assert.AreEqual(1, inspectionResults.Count()); + } + + [TestMethod] + public void ObjectVariableNotSet_GivenSetObjectVariable_ReturnsNoResult() + { + const string inputCode = @" +Private Sub Workbook_Open() + + Dim target As Range + Set target = Range(""A1"") + + target.Value = ""All good"" + +End Sub"; + + //Arrange + var builder = new MockVbeBuilder(); + VBComponent component; + var vbe = builder.BuildFromSingleStandardModule(inputCode, out component); + var mockHost = new Mock(); + mockHost.SetupAllProperties(); + var parser = MockParser.Create(vbe.Object, new RubberduckParserState()); + + parser.Parse(); + if (parser.State.Status == ParserState.Error) { Assert.Inconclusive("Parser Error"); } + + var inspection = new ObjectVariableNotSetInspection(parser.State); + var inspectionResults = inspection.GetInspectionResults(); + + Assert.AreEqual(0, inspectionResults.Count()); + } + } +} \ No newline at end of file diff --git a/RubberduckTests/RubberduckTests.csproj b/RubberduckTests/RubberduckTests.csproj index 39967941cc..a0047380d9 100644 --- a/RubberduckTests/RubberduckTests.csproj +++ b/RubberduckTests/RubberduckTests.csproj @@ -88,6 +88,7 @@ +